Linea di comando
Introduzione
Una shell è un software che attraverso un'interfaccia a riga di comando permette di eseguire dei programmi.
Sui sistemi Microsoft (DOS e Windows) è chiamata prompt dei comandi.
La maggior parte delle distribuzioni Linux utilizza la Bourne Again Shell (bash), una versione avanzata della vecchia Bourne shell (sh).
Altre shell:
- Almquist shell (ash, sh, dash): veloce e minimale, shell di default di Android, è usata su Debian e derivate per eseguire gli script di avvio.
- TENEX C Shell (tcsh): shell predefinita di FreeBSD, compatibile con la vecchia C shell (csh).
- Korn shell (ksh): shell predefinita di NetBSD ed OpenBSD.
- Z shell (zsh): compatibile con bash, incorpora varie funzionalità della tcsh e ksh
Nota: su Linux tutto è un file: cartelle, file, partizioni, dischi, periferiche, interfacce, sono trattati allo stesso modo. Una cartella si distingue da un file perché contiene al suo interno due elementi: «punto» e «punto punto».
.
collegamento ricorsivo a se stessa
..
collegamento alla cartella sovrastante
Comandi principali
man
Anteposto ad un comando ne mostra la guida
Gestione di file e cartelle
cd ..
Permette di tornare alla cartella di livello superiore
ls
Mostra la lista di elementi contenuti in una directory.
ls -a
Mostra la lista di tutti gli elementi di una directory inclusi quelli nascosti.
ls -l
Mostra gli elementi contenuti in una directory sotto forma di lista, descrivendone il tipo (file, cartella o link), i diritti, il proprietario, il gruppo e la data di modifica.
ls -h
Mostra la lista di tutti gli elementi di una directory indicando la dimensione dei file in modo “human readable”, ovvero espressa in Kbyte o Mbyte anziché in byte.
mkdir nome_cartella
Crea una directory
ls -alh
Combina i tre comandi precedenti.
cp file_o_directory destinazione
Copia file o cartelle. Con l'opzione -R (ricorsività) il comando cp copia anche i file nelle sottocartelle, fino al livello più basso.
mv file_o_directory destinazione
Permette di spostare e rinominare i file. Come per il comando cp, l'opzione -R, ne applica una ricorsività.
rm file → cancella il file.
rm -r cartella
Applica il comando cancella ricorsivamente all'interno delle sottocartelle cancellandone il contenuto.
rm -f
Cancella forzatamente il file ma solo se si hanno i permessi giusti sul file in questione. Non chiede la conferma prima di eliminare!
rm -rf cartella
Cancella una cartella e tutto il suo contenuto senza chiedere conferma per ogni file.
ln -s file destinazione
Crea un link statico al file specificato.
w
indica gli utenti che in quel momento stanno lavorando sulla macchina, il tipo di console TTY (tele type terminal) da cui si connettono, l'ora di login e la macchina da cui hanno effettuato la connessione.
pwd
Print Working Directory mostra il percorso (path) della cartella in cui ci troviamo.
Spengimento e Riavvio
systemctl poweroff = Spenge il PC
reboot = Riavvia il PC
Sistema e kernel
du -h = quantità di spazio usata nella directory e sottodirectory in kb e mb.
top = mostra la percentuale di CPU utilizzata dai vari processi.
ps aux = Visualizza i programmi e demoni in corso con i relativi pid
df -h = mostra le partizioni montate
free -m = mostra la memoria ram e swap occupata, libera e totale
uname -a = indica la versione del kernel
lsmod = visualizza i moduli (driver) caricati nel kernel
Altro
history
Visualizza l'elenco degli ultimi comandi eseguiti
cat nomefile
Mostra il contenuto di un file
less nomefile
Simile a cat, ma permette di scorrere il file avanti ed in dietro. Utile per file lunghi.
Il carattere JOLLY *
- = significa tutto
Introdotto a fianco di una parola, fa riferimento alla parola e quelle che hanno caratteri aggiunti
es. pippo* = pippo pippo1 pippociao pippopluto pippo..............
Gestione dell'output
| → ingabbia l'output del comando che lo precede e lo da in input al comando successivo.
- → esegue il comando che lo prece e poi passa automaticamente al successivo indipendentemente dall'esito del comando eseguito in precedenza.
& → esegue il comando che lo precede e poi passa al successivo solo se il precedente è andato a buon fine.
> → reindirizza l'output a video del comando che lo precede in un altro file, sovrascrivendo quello che c'era prima nel file destinazione. Può essere usato per la copia.
>> → è analogo al comando > ma accoda l'input alla fine del file destinazione senza cancellarne il contenuto preesistente.
APT
apt-get update: aggiorna la lista dei pacchetti interrogando i repository.
apt-get upgrade: aggiorna i pacchetti presenti sulla macchina con nuove versioni se presenti nei repository e risolvendo le relative dipendenze.
apt-get install “nome_pacchetto”: installa il pacchetto con le relative dipendenze.
apt-cache search “stringa_da_cercare”: cerca il pacchetto che ha nel nome o nella descrizione la stringa che gli è stata specificata.
apt-get dist-upgrade: aggiorna il S.O. alla versione successiva, aggiornando automaticamente anche i sources dei repository.
Tramite apt è possibile installare anche una cache dei pacchetti, molto utile nel caso si abbiamo molti client su cui installare programmi e aggiornamenti, prendendo i file direttamente dalla cache del proxy locale anziché dalla rete internet.
tar
Programma che permette di creare archivi, un tempo usato per archiviare i file su nastro.
Opzioni:
-c → crea l'archivio. -f → archivia su file. -v → mostra la lista dei file che vengono aggiunti all'archivio dettagliatamente (verbose mode). -x → estrai l'archivio. -z → crea archivio compresso con gzip. -j → crea archivio compresso con bzip2.
Es: tar -czf nome_file_da_creare file_da_comprimere.gz (compressione di un file in formato gzip) tar -cjf nome_file_da_creare file_da_comprimere.bz2 (compressione di un file in formato bzip2)
tar -xjf “file_compresso.bz2” (estrazione di un file in formato bzip2)
Permessi, gruppi, utenti
I gruppi si creano con il comando groupadd “nome_gruppo”. Sia quelli standard che quelli creati a posteriori compaiono nel file /etc/group.
alsa → per l'audio network → per la rete optical → per lettori e masterizzatori wheel → gruppo che ha permessi quasi da root users → gruppo dove ci stanno tutti gli utenti
Gli utenti si creano con il comando useradd nome_utente. La lista degli utenti compare nel file /etc/passwd.
Per cambiare i permessi ai file si usa il comando chmod.
Metodo delle lettere (UGO – User/Group/Others): Permesso di lettura → r Permesso di scrittura → w Permesso di esecuzione → x
chmod u+x “nome_file” → do i permessi di esecuzione al proprietario chmod u-x “nome_file” → tolgo i permessi di esecuzione al proprietario
Lo stesso vale per il gruppo e per gli others:
chmod g+w “nome_file” → do i permessi di scrittura al gruppo chmod o+w “nome_file” → do i permessi di scrittura a tutti gli altri chmod a-w “nome_file” → tolgo i diritti di scrittura a tutti
Sempre usando il comando chmod si possono dare i permessi ai file anche usando il metodo dei numeri:
1 → lettura 2 → scrittura 4 → esecuzione
I diritti si danno al proprietario, gruppo e others sommando i numeri corrispondenti ai diritti che vogliamo dargli.
Es.:
chmod 777 “nome_file”
Dà i diritti di esecuzione, lettura e scrittura al proprietario, al gruppo e a tutti gli altri
-Il primo 7 è dato dalla somma di esecuzione+scrittura+lettura=4+2+1=7 ovvero i diritti che diamo al proprietario. -Il secondo 7 è dato dalla somma di esecuzione+scrittura+lettura=4+2+1=7 ovvero i diritti che diamo al gruppo. -Il terzo 7 è dato dalla somma di esecuzione+scrittura+lettura=4+2+1=7 ovvero i diritti che diamo agli altri. E cosi per tutte le possibili combinazioni.
chgroup “nome_gruppo” “nome_file”
Cambiare un gruppo ad un file
chown “nome_utente” “nome_file”
Attribuisce all'utente la proprietà del file.
NB.
Se si hanno i permessi di scrittura/lettura/esecuzione su una directory sarà possibile anche scrivere/leggere/eseguire i file che stanno al suo interno anche se non ho i permessi direttamente su quei file specifici.
/etc/fstab
È il file in cui sono specificati i device che vengono montati all'avvio.
Es.: montaggio di una partizione NTFS
/dev/sda1 /media/win ntfs-3g defaults,users,umask=000,locale=it_IT.UTF-8 0 0
In fstab non va messo il riferimento a /media ma solo a /mnt altrimenti si crea confusione con il S.O. che in /media è programmato per scriverci automaticamente al momento del rilevamento del dispositivo inserito.
Struttura del filesystem
/bin: contiene i programmi che sono essenziali all'avviamento e all'uso della macchina. Es. bash, mv, cp...
/boot: contiene i file di configurazione del bootloader, necessari all'avviamento della macchina. Es. I file di configurazione del Grub.
/dev: tutti i file contenuti in questa directory sono dispositivi che fanno parte del sistema o che vengono emulati. Es. I dischi hda e sda
/etc: contiene principalmente i file di configurazione dei programmi e del sistema di base.
/home: non è strettamente necessaria. Contiene le directory personali dei singoli utenti.
/lib: contiene le libreria che sono usate dai programmi che stanno in /bin e /sbin, nonchè i moduli del kernel.
/media: usata da udev per montare automaticamente le periferiche quando vengono inserite. Es. Pennine e device usb
/mnt: cartella dove vengono montati manualmente i device e le partizioni che solitamente sono statici e non vengono rimossi. Per montare un device automaticamente nella /mnt all'avvio è necessario editare il file /etc/fstab, altrimenti è necessario montare manualmente il device ogni volta con il comando muount.
/opt: di solito contiene i programmi che non interagiscono con altri programmi installati.
/proc: è un file system virtuale. All'interno ci sono file che danno informazioni sul sistema (per esempio il tipo di CPU).
/root: è la home dell'utente root.
/sbin: contiene eseguibili e file che può usare solo l'utente root.
/srv: è la cartella che contiene i server standard.
/tmp: contiene i file temporanei che ad ogni riavvio vengono cancellati.
/usr: utilizzata per l'installazione dei programmi.
/usr/src: contiene i sorgenti del kernel o dei programmi compilati dall'utente.
/var: ha contenuti dinamici, ovvero file che sono soggetti a modifiche dal sistema.
swap: serve al S.O. per swappare ma al giorno d'oggi, con le grandi quantità di ram che vengono installate a bordo dei client, è quasi praticamente inutile.