Linea di comando
Questa pagina è un utile sillabo che raccoglie informalmente un po' di comandi e alcune delle loro opzioni più comuni. È utile come riferimento per tutti coloro che si avvicinano al terminale per la prima volta.
L'argomento può essere approfondito venendo nella nostra officina o seguendo uno dei nostri corsi.
Altre risorse ben fatte possono essere trovate qui:
- www.wowarea.com mirror - Guida un po' vecchia, ma molto ben fatta, e in italiano!
- Slackware Linux Essentials - Libro non proprio recente, ma in italiano, lettura scorrevole e ben fatto per prendere confidenza con il terminale. Lo scopo è imparare a installare e usare Slackware, ma basta limitarsi ai capitoli di interesse (es. capitolo 8 e successivi)
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
Anteposto ad un comando ne mostra la guida:
man
Gestione di file e cartelle
Comando Change Directory:
cd cartella
Casi particolari
cd .. # Torna alla cartella di livello superiore cd -P collegamento # Percorre il collegamento posizionandosi in quella cartella
Visualizzare il contenuto delle cartelle
Mostra la lista di elementi contenuti in una directory.
ls
Mostra la lista di tutti gli elementi di una directory inclusi quelli nascosti.
ls -a
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 -l
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.
ls -h
Combina i tre comandi precedenti.
ls -alh
Crea una directory
mkdir nome_cartella
Copia file o cartelle. Con l'opzione -R (ricorsività) il comando cp copia anche i file nelle sottocartelle, fino al livello più basso.
cp file_o_directory destinazione
Permette di spostare e rinominare i file. Come per il comando cp, l'opzione -R, ne applica una ricorsività.
mv file_o_directory destinazione
Cancella un file
rm file
Applica il comando Cancella ricorsivamente, all'interno delle sottocartelle, cancellandone il contenuto:
rm -r cartella
Cancella forzatamente il file ma solo se si hanno i permessi giusti sul file in questione. Non chiede la conferma prima di eliminare!
rm -f
Cancella una cartella e tutto il suo contenuto senza chiedere conferma per ogni file.
rm -rf cartella
Crea un link statico al file specificato.
ln -s file destinazione
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.
w
Print Working Directory mostra il percorso (path) della cartella in cui ci troviamo.
pwd
Su Linux e Unix, i file sono tutti uguali e tutto è concepito come un file, anche le periferiche. I file non necessitano di un'estensione, anche se questa viene convenzionalmente usata, ma vengono identificati direttamente in base al loro contenuto. Questo fa sì che, per esempio, file di testo possano essere aperti solo da programmi in grado di elaborare file di testo e non da altri, anche se non hanno l'estensione txt!
Spegnimento e Riavvio
Spenge il PC
systemctl poweroff
Riavvia il PC
reboot
Sistema e Kernel
Quantità di spazio usata nella directory e sottodirectory, espressa in formato umanamente comprensibile (MB o GB).
du -h
Task manager:
top
Visualizza i programmi e demoni in corso con i relativi pid
ps aux
Mostra le partizioni montate e lo spazio a disposizione su di esse, espresso in formato umanamente coprensibile:
df -h
Mostra la memoria ram e swap occupata, libera e totale
free -m
Indica la versione del kernel e molte altre informazioni accessorie:
uname -a
visualizza i moduli (driver) caricati nel kernel
lsmod
Altro
Visualizza l'elenco degli ultimi comandi eseguiti
history
Mostra il contenuto di un file
cat nomefile
Simile a cat, ma permette di scorrere il file avanti ed in dietro. Utile per file lunghi.
less nomefile
Il carattere JOLLY *
* significa qualunque carattere, per qualunque lunghezza ? significa un qualsiasi solo carattere in questo punto
Introdotti a fianco di una parola, fanno riferimento alla parola e quelle che presentano un pattern corrispondente:
Es. pippo* identifica pippo pippo1 pippociao pippopluto e simili
Es. p?zzo identifica pazzo pezzo pizzo pozzo puzzo e simili
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
Gestore pacchetti per distribuzioni Debian-based, come Debian, Ubuntu, Mint...
Aggiorna la lista dei pacchetti interrogando i repository:
apt-get update
Aggiorna i pacchetti presenti sulla macchina con nuove versioni se presenti nei repository e risolvendo le relative dipendenze:
apt-get upgrade
Installa il pacchetto con le relative dipendenze:
apt-get install nome_pacchetto
Cerca il pacchetto che ha nel nome o nella descrizione la stringa che gli è stata specificata. apt-cache search stringa_da_cercare
Aggiorna il sistema operativo alla versione successiva, aggiornando automaticamente anche i sources dei repository. Da usare con cautela!!
apt-get dist-upgrade
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. In Officina abbiamo un transparent proxy che lo fa automaticamente, senza bisogno di configurare niente, basta attaccarsi alla rete. :-)
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 insieme ai loro membri e altre informazioni relative.
Gruppi famosi:
- 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
o con lo script
adduser nome_utente
La lista degli utenti, insieme ad alcune informazioni su di essi, 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 altri. Alcuni esempi:
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, utilizzando la notazione binaria:
- 4 → lettura
- 2 → scrittura
- 1 → esecuzione
I diritti si danno al proprietario, gruppo e others sommando i numeri corrispondenti ai diritti che vogliamo dargli.
Ad esempio, per dare i diritti di esecuzione, lettura e scrittura al proprietario, al gruppo e a tutti gli altri
chmod 777 nome_file
- 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.
Cambiare un gruppo ad un file
chgroup nome_gruppo nome_file
Attribuisce all'utente la proprietà del file. Solo l'utente root può eseguire questo comando (eccezione allo standard POSIX):
chown nome_utente nome_file
Nota: 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 automatico di una partizione NTFS di Windows:
/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 o /run/media, ma solo a /mnt: infatti, per convenzione, in /media vengono montati i dispositivi rilevati al volo dall'interfaccia grafica (dbus), mentre /mnt è riservato ai mount manuali.
Struttura del filesystem
Struttura standard della /
- /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, e il kernel. 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 sda (disco generico), cdrom (cdrom), sr0 (disco ottico), ttyS0 (seriale), lp0 (parallela)
- /etc: contiene i file di configurazione dei programmi e del sistema. Es: /etc/fstab, /etc/group
- /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 e dbus per montare automaticamente le periferiche quando vengono inserite. Es. pennine USB e CD/DVD
- /mnt: cartella dove vengono montati manualmente i device e le partizioni che solitamente sono statici e non vengono rimossi. Es: partizioni su dischi fissi aggiuntivi
- /opt: di solito contiene i programmi che non interagiscono con altri programmi installati, tra cui molti programmi proprietari. Es: Skype, Google Chrome
- /proc: è un file system virtuale. All'interno ci sono file che danno informazioni sul sistema. Es: /proc/cpuinfo dà informazioni sul processore
- /root: è la home dell'utente root
- /sbin: contiene eseguibili e file di sistema importanti che può usare solo l'utente root
- /srv: è la cartella che contiene i documenti dei server. Es: document root del server Apache
- /tmp: contiene i file temporanei. È montata in RAM, quindi ad ogni riavvio il suo contenuto viene cancellato.
- /usr: utilizzata per l'installazione dei programmi.
- /usr/bin: contiene i binari dei programmi installati
- /usr/share: contiene file aggiuntivi distribuiti insieme ai programmi installati (font, immagini, suoni, temi)
- /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.
- /var/log: contiene i log di sistema. Es: /var/log/auth.log
- /var/cache: contiene la cache di sistema, tra cui i pacchetti. Es: /var/cache/pacman/pkg oppure /var/cache/apt/archives
- swap: si tratta della memoria virtuale. Serve al sistema operativo per "swappare", cioè utilizzare questo spazio su disco come spazio di appoggio quando la RAM è insufficiente. Al giorno d'oggi, con le grandi quantità di RAM che vengono installate sui client (4GB), è quasi praticamente inutile. Ad ogni modo, swappare su disco è estremamente lento (dopo due minuti volate il computer dalla finestra).