Linea di comando

Da GolemWiki.

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, seguendo uno dei nostri corsi oppure su www.wowarea.com (guida un po' vecchia, ma molto ben fatta, e in italiano!)

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

Permette di tornare alla cartella di livello superiore:

cd ..

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

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).