Comandi Basilari del terminale di linux

linux
Indice degli argomenti:

  • – Introduzione
  • – Linux, un sistema multiutente
  • – Chi sono? Dove sono?
  • – Gestione di file e directory
  • – I permessi
  • – Muoversi fra le directory ed osservarne il contenuto
  • – Creare nuove directory
  • – Copia, Sposta, Rinomina, Elimina
  • – La tab completation
  • – Caratteri jolly
  • – Head e tail
  • – Gestire i processi
  • – il comando ps
  • – Il comando top
  • – terminare processi
  • – man e whatis, manuali sempre a portata di mano
INTRODUZIONE

Molti utenti sono intimoriti da Linux a causa dell’uso della shell, che nonostante l’implementazione di numerose applicazioni grafiche resta talvolta indispensabile. I pi? reputano la shell un inutile e vecchia “applucazione”, che nn fa altro che complicare la vita all’utente, constringendolo a rammentare lunghi comandi e a perdere molto tempo nella superflua digitazione di comandi… ma tutti questi utenti sbaliano ad affidarsi a queste voci di corridoio, infatti, l’utilizzo della linea di comando velocizza di molto anche le operazioni pi? basilari, evitando stressanti click ed interminabili men? a discesa nei quali non si trova mai quello che si cerca.

In questa guida preliminare ed estremamente basilire tenter? di farvi cambiare idea sul fantomatico terminale, illustrandovi il suo utilizzo nelle azioni pi? comuni.

LINUX, UN SISTEMA MULTIUTENTE

Bene, tutti saprete che linux nasce negli ormai lontani anni ’90 come sistema multiutente, e tutt’ora si sviluppa ed evolve tenendo costante questa caratteristica. Probabilmente in molti vi starete chiedendo dove sia la multiutenza nel caso dei desktop che troviamo in ogni casa, dato che con tutta probabilit? voi siete l’unico utente fisico del sistema. Dovete sapere che anche in questo caso gli utenti sono almeno due: voi con il vostro account e root. Soffermiacoci su quest’ultimo: root ? il propietario del sistema, colui che pu? fare tutto senza alcuna retrizione, ci? ha molti vantaggi, ma anche qualche svantaggio, infatti un utente sbadato o poco esperto nei panni di root potrebbe danneggiare i file di sitema, corrompendo lo stesso. Ed ? proprio qui che scende in campo un utente/account meno privilegiato, ma indiscutibilmente pi? sicuro. Quindi voi dovreste loggarvi sempre come utente normale e diventare root solo all’occorrenza.

CHI SONO? DOVE SONO?

Chiarito ci?, sarete daccordo come che la prima cosa da fare, dopo esserci seduti davanti al monitor della nostra macchina con linux, ? capire chi siamo, quindi che poteri/restrizioni abbiamo. Per farlo possiamo usare il comando whoami (dall’inglese Who Am I – Chi sono) e il terminale ci risponder? con il nostro nome-utente, restituendoci il terminale.

Come detto nel paragrafo precedente, spesso essere l’utente root ? indispensabile per compiere determinate operazioni, quindi dobbiamo avere la possibilit? di aumentare i nostri privilegi, per far ci? ci vengono incontro due comandi, su e sudo: su (SuperUser) ci permette di divenire root e di impartire tutti i comandi che vogliamo, sino a quando non abbiamo terminato le operazioni che richiedono un grado superiore a quello di un utente normale, quindi, concluse queste operazioni digitiamo exit (in alternativa ? possibile utilizzare logout) per uscire dalla sessione root. Invece sudo (SuperUser DO) assegna i privilegi di root solamente al comando che lo segue. Entrambi questi comandi permettono l’assunzione dei privilegi di un utente qualsiasi ed assumono questa forma generale:

bash: su nome_utente //se omesso ? root
bash: comandi
bash: exit

sudo nome_utente comando //anche qui il nome utente, se omesso, ? root

NB: sia su che sudo richiedono la password di root e per sudo bisogna essere autorizzati dall’utente di cui si stanno assumendo i privilegi tramite il file /etc/sudoers!
NB: Da un grande potere derivano grandi responsabilit? (Zio Ben)!

Fatto ci? potrebbe risultare utile ed interessante scoprire qualche dettaglio in pi? sulla distribuzione che stiamo utilizzando, per scoprirlo lanciamo il comando uname -a. Ci verranno restituite diverse informazioni, come la distribuzione, il nome del computer o la versione del kernel. Come avrete sicuramente notato, il comando uname ? seguito dal flag -a, che altro non ? che un parametro che dice al programma di comportarsi in una determinata maniera, restituendoci dei dati particolari – in questo caso “a” sta per “all”, quindi il comando uname ci restituisce tutte le informazioni, senza omettene nessuna. Ma ovviamente -a non ? l’unico attributo, ma ce ne sono molti altri, per i quali vi rimando alla pagina man di uname (maggiori informazioni sul comando man verranno date in seguito).

Dopo aver “navigato” un po’ tra le varie directory (dopo vedremo come), molto spesso avremo la necessit? di vedere la nostra locazione, quindi digitiamo pwd per capire dove siamo.

GESTIONE DI FILE E DIRECTORY

I PERMESSI

Ovviamente, ogni utente ha un suo “raggio di azione” entro cui pu? agire, tale raggio di azione ? definito dai permessi. I permessi limitano le operazioni consentite su file e directory ad un gruppo ristretto di utenti (root non ha mai limitazioni), e si dividono in tre punti chiave: lettura, scrittura ed esecuzione (sul cui significato non mi soffermo, dato che ? chiaro), indicati con triadi di lettere o, in alternativa, con numeri: il permesso di lettura viene indicato o con la lettera “r” (read), o con il numero 4, quello di scrittura con la “w” (write) o con il 2 e quello di esecuzione con la “x” (eXecute) o l’1.

Generalmete i permessi sono disposti in terzetti (tre triadi di numeri o tre numeri), che indicano i permessi di cui godono, nell’ordine, il propietario (prima triade di lettere o primo numero), il gruppo al quale appartiene il propietario (seconda triade o secondo numero) e tutti gli altri utenti (terza triade o terzo numero).

Per quel che concerne i numeri, come abbiamo detto, bisogna aggiungere che essi sono formati dalla somma delle diverse tipologie di permessi, quindi, per esempio, il numero 7 (4+2+1) indica che l’utente o il gruppo al quale si riferisce ha tutti i permessi sul file in questione, il 6 (4+2) indica che l’utente/gruppo pu? leggere (4) e scrivere (2) il file, ma non eseguirlo (1).

Facciamo qualche esempio pratico utilizzando tutte e due le tipologie di rappresentazione dei permessi:

rwxrwxrwx o 777 //tutti gli utenti hanno pieni permessi
rwxr-xr– o 754 //il propietario (prima triade di lettere – rxw – o primo numero – 7 -) ha pieni permessi, il suo gruppo (r-x o 5) ha i permessi di lettura ed esecuzione, ma non di scrittura (5 = 4 – lettura – + 1 – esecuzione – ), mentre tutti gli altri utenti (r– o 4) potranno solamente leggere il file

PS: Attenzione a non confondere il “-” con un separatore tra triadi di lettere, questo indica l’assenza della tipologia di permesso di cui prende il posto!

Ovviamente permessi e propietari non sono immutabili, anzi, sono modificabili utilizzando rispettivamente i comadi chmod (CHange MODe) e chown (CHange OWNer).

Chmod:
chmod permette a root di modificare i permessi di un file/directory, questo comando supporta sia la notazione numerica che quella alfabetica. Per ottenere il risultato voluto occorre aggiungere delle indicazioni a chmod:

– il segno + aggiunge un permesso
– il segno – rimuove un permesso
– la lettera a (all) indica che si vuole concedere o revocare un permesso a tutti
– la lettera u (user) indica che si vuole concedere o revocare un permesso all’utente
– la lettera g (group)indica che si vuole concedere o revocare un permesso al gruppo
– la lettera o (others) indica che si vuole concedere o revocare un permesso a tutti gli altri utenti

facciamo un esempio:

bash: chmod a+rwx programmazione/prova.c //indica che si vogliono concedere (r) a tutti (a) tutti i permessi (rwx)

bash: chmod go-wx programmazione/prova.c //indica che si vuole revocare (-) a tutti tranne che al propietario i permessi di scrittura(w) ed esecuzione (x)

Chown:
chown permette a root di cambiare il propietario di un file/directory nel seguente modo:

bash: chown nuovo_propietario:gruppo file

il gruppo pu? essere anche omesso (con tanto di “:”).

Inoltre, ? possibile associare il flag -R a chown in modo da cambiare anche i propietari delle sotto-directory

MUOVERSI FRA LE DIRECTORY ED OSSERVARNE IL CONTENUTO

Una delle azioni pi? comunemente svolte ? il cambio di directory, ovviamente la shell ci offre la possibilit? di evitare quei mille click che questa azione richiede se svolta tramite un windows manager. Tutto ci? che occorre per cambiare la propria directory ? impartire il comando cd /directory1/directory2/…/ dove, ovviamente directory1 e 2 sono i nomi delle cartelle che vogliamo attraversare. Se lasciato senza opzioni, il comando cd ci porta nella nostra home, mentre se seguito da due punti (cd ..) ci colloca nella directory superiore alla corrente.
Facciamo un esempio pratico:

bash: cd /home/ddragon/programmazione/PHP //ci sposta nella cartella “PHP”
bash: pwd /home/ddragon/programmazione/PHP/

bash: cd .. //ci porta nella directory immediatamente superiore a “PHP”, quindi in “programmazione”
bash: pwd /home/ddragon/programmazione/

bash: cd //ci porta nella home, quindi in “/home/ddragon”
bash: pwd /home/ddragon/

in caso il percorso contenga degli spazi fra le parole, ? necessario backslasharli ateponendo un \ allo spazio bianco, per esempio “cd /home/ddragon/programmazione/c c++” restituir? un errore, dato che la shell andr? a cercare la cartella “c” in programmazione, e non “c c++”, quindi ovviamo cos?: cd /home/ddragon/programmazione/c\ c++

c’? da dire inoltre che non ? necessario scrivere ogni volta l’intero percorso a partire dalla home, infatti il percorso delle directory superiori ? omittibile.
Per esempio se ci troviamo nella nostra home (nel mio caso /home/ddragon/), cd /home/ddragon/programmazione ? abbreviabile in cd programmazione.

PS: cd sta per Change Directory

Dopo aver imparato a spostarci fra le varie directory, vediamo come vederne il contenuto. Questa operazione ? svolta dal comando ls (LiSt), che pu? essere arricchito con dei parametri particolari:

-l: visualizza qualche dettaglio in pi? rispetto al semplice ls, come permessi, propietari e dimesione dei file, giusto per citarne alcuni. Ma scendiamo pi? nel dettaglio analizzando un esempio:

bash: ls -l programmazione
drwxr-xr-x 4 ddragon users 127 2007-08-31 22:06 c_files
-rw-r–r– 1 ddragon users 56 2007-08-31 13:14 prova.c

Iniziamo col dire che il primo dato ottuenuto sono i permessi del file, in particolare, la d indica che si tratta di una directory, la r (read) indica i permessi in lettura, la w (write) in scrittura e la x (executable) di esecuzione; ma osservando con attenzione si nota che questi indicatori comaiono pi? di una volta, questo perch? i primi tre (nel nostro caso rwx) si riferiscono al propietario, i secondi tre (r-x) al gruppo al quale appartiene il propietario e il restante terzetto (r-x) indica i permessi di tutti gli altri utenti.
In seguito sono indicati il propietario e il suo gruppo, esguiti dalle dimensioni del file in byte, dalla data e dall’ora dell’ultima modifica e, in fine, dal proprio nome.

-a: altro flag importante ? -a (all), che ci permette di includere nella nostra lista anche i file nascosti (preceduti da un punto – eg .fluxbox).

come al solito rimando alla pagina man del comando per maggiori dettagli.

CREARE DIRECTORY

Creare una directory ? un operazione semplice quanto immediata, infatti ? sufficiente utilizzare il comando mkdir /percorso/…/nome_nuova_directory, ovviamente, se gi? siamo collocati nella directory genitrice di quella che vogliamo creare il percorso ? omettibile.

PS: mkdir ? una forma abbreviata di MaKe DIRectory

COPIA, SPOSTA, RINOMINA, ELIMINA

Quattro delle azioni usate pi? di frequente per gestire file e directory sono di sicuro copia, sposta, rinomina ed elimina.

Copia:
Per copiare un file da una directory “a” ad una directory “b” si utilizza il comando cp (CoPy), seguito dal percorso del file da copiare e da quello della sua destinazione, per esempio “cp programmazione/prova.c /mnt/pendrive/c\ files/” copia il file prova.c presente nella directory “programmazione” nella cartella “c files” presente su un disco removibile (una pendrive).
Per copiare una directory ? sufficiente aggiungere il flag -r:

bash: cp -r programmazione/c\ c++ /home/ddragon/

per la copia multipla ? invece possibile listare tutti i file da copiare tra il comando cp e la directory di destinazione:

bash: cp prova.c prova1.c programmazione/c\ c++

Sposta:
L’opzione per spostare files ? molto simile a quella per copiarli, infatti, la sintassi del comando mv (MoVe) ? la seguente:

bash: mv percordo/file_da_spostare /percorso/directory_di_destinazione

Anche per mv valgono gli stessi discorsi affrontati per cp riguardo le directory e i file multipli.

Rinomina:
Altro impiego del comando mv ? quello di rinominare file e cartelle, la sintassi ? molto simile a quando si utilizza questo comando per spostare files:

bash: mv vecchio_nome nuovo_nome

altro metodo per rinominare file e directory ? dato dall’impiego del comando rename (rinomina), che presenta la seguente sintassi:

bash: rename vecchio_nome nuovo_nome percorso_del_file

Elimina:
Per eliminare un file, invece ricorriamo a rm (ReMove) seguito dal file da cancellare:

bash:ls programmazione
prova1.c
prova2.c
bash:rm programmazione/prova1.c
bash:ls programmazione
prova2.c //il file prova1.c ? stato eliminato

ma se proviamo ad eliminare una directory come illustrato sopra, il terminale ci restituir? un errore, avvertendoci che non ? possibile eliminare una directory. Per ovviare a questo problema si utilizzano i flag -r (ricorsivo) ed -f (forzato), sintetizzati in -rf. Il primo parametro ci permette di eliminare una directory con tutto il suo contenuto, mentre il secondo forza l’operazione, evitando fastidiose avvertenze.

Per eliminare directory vuote possiamo avvalerci di rmdir (ReMove DIRectory).

LA TAB COMPLETATION

Probabilmente converrete con me che digitare ogni volta tutti i percorsi richiede un enorme quantit? di tempo, ed ? addirittura pi? stressante di decine di doppiclick su enormi quantit? di icone confuse… quindi dove sta il vantaggio della shell? bhe, ? semplice, la risposta ? “questo enorme vantaggio sta nella tab completation”.

Cos? viene definito l’autocompletamento dei percorsi, che si ottiene digitando il tasto tab (per capirci quello con le due frecce che corrono in senso opposto, generalmente situato alla sinistra della tastiera), vediamo come funziona questa utilissima funzione:

facciamo caso che io volessi spostarmi nella directory “progetti”, collocata in “c c++” che a sua volta sta nella cartella programmazione della mia home, nella quale mi trovo, sino ad adesso, per compiere questa operazione avremmo fatto cos?:

bash: cd programmazione/c\ c++/progetti

bhe, abbiamo utilizzato un alto numero di digitazioni, ma ora proviamo a spostarci in “progetti” usando la tab completation:

bash: cd p[tab]c[tab]p[tab]

in questo esempio ho ipotizzato che la cartella “programmazione” fosse l’unica ad iniziare per “p” nella mia home, e lo steso vale per “c c++” e “progetti”, quindi ? bastato digitare la prima “p” e premere tab per vedermi completata la parola “programmazione/”, poi c e tab per completare “c\ c++/” ed infine dinuovo “p” e tab, ma questa volta la parola che apparir? sar? “progetti/”; premiamo invio e ci troviamo “magicamente” nella directory desiderata con un numero di digitazioni pari a 10 (compresi spazi, invio e comando cd), invece delle 34 precedenti, risparmiandone ben 24!

ma poniamo il caso che nella directory programmazione ci sia una cartella “cobol”, in tal caso dovremmo digitare anche il “\”, altrimenti ci sarebbe un ambiguit?:

bash: cd p[tab]c\[tab]p[tab]

in caso di possibile ambiguit?, premendo due volte il tasto tab, ci vengono mostrate tutte le possibilit?, in modo da semplificarci il lavoro:

bash:cd p[tab]c[tab][tab]
c\ c++
cobol
bash:cd p[tab]c…

CARATTERI JOLLY

Oltre alla tab completation, abbiamo a disposizione altre scorciatoie che ci permettono di risparmiare inutili digitazioni sulla tastiera: i caratteri jolly.

Esistono svariati caratteri di questo tipo, ma noi analizzeremo solamente quelli utilizzati pi? di frequente: ? e *.

Il “?” (punto interrogativo) va a sostituire un unico carattere (del quale prende il posto) all’interno della stringa, fungendo per? da “tutti i caratteri”, facciamo un esempio:

cd programmazione
bash: ls //listiamo i caratteri all’interno di una directory per vederne il contenuto
prova1.c
prova2.c
esempio.c

la directory in questione contiene tre file, due dei quali differiscono unicamente per un carattere (il numero in “prova?.c”), e sono proprio questi due che ci interessano, infatti li vogliamo spostare entrambi in home, ora si presentano diverse strade per compiere quest’operazione:

in principio avremmo scritto qualcosa del genere:

bash:mv prova1.c prova2.c /home/ddragon/

ma sfruttando il carattere jolly “?” possiamo semplificare il tutto come segue:

bash:mv prova?.c /home/ddragon/

come avrete notato, i due risultati sono identici, questo perch? il carattere “?” ha sostituito i numeri 1 e 2.

Ma questa scrittura ? semplificabile ulteriormente, ricorrendo al secondo carattere jolly preso in analisi: “*” (asterisco/star)

Questo carattere speciale va a sostituire un numero imprecisato di caratteri, facendoci risparmiare parecchia fatica e un po’ di tempo. Riprendiamo l’esempio di prima, stavolta utilizzando “*”:

bash:mv p* /home/ddragon/

questo comando sposter? nella mia home tutti i file contenuti in programmazione il cui nome inizia con la lettere p, dato che il resto del nome viene sostituito dall’asterisco.

Se lasciato da solo, l’asterisco seleziona tutti i file presenti nella directory nella quale ci troviamo:

bash:mv * /home/ddragon/

copier? tutti i file contenuti in “programmazione” (dove ci eravamo posizionati ad inizio esempio) in /home/ddragon, che quindi conterr? ora anche prova1.c, prova2.c e esempio.c.

HEAD E TAIL

Spesso capita di dimenticare il contenuto di un documento di testo, ed aprire un editor per capire di cosa si tratta ? davvero noiso… ma la nostra shell ha mille risorse, tra le quali abbiamo i comandi head (testa) e tail (coda): il primo mostra le prime dieci righe di un documento, mentre il secondo le ultime dieci, il tutto con grande immediatezza.
La sintassi ? quantomai semplice ed uguale per entrambi i comandi:

bash: head /percorso/…/file
bash: tail /percorso/…/file

GESTIRE I PROCESSI

IL COMANDO PS

Questo comando genera una lista dei processi presenti sia in foregroung che in background, fornendoci molte informazioni utili. ps pu? essere arricchito con numerosi flag, noi prenderemo in esame l’output con i flag -aux:

bash: ps -aux

noteremo che compariranno undici differenti colonne:

– USER indica l’utente che ha lanciato il processo
– PID (Process ID) ? un numero univoco che contraddistringue i diversi processi
– %CPU, %MEM, VSZ e RSS indicano le risorse di sistema utilizzate
– TTY indica in quale terminale gira il processo
– STAT ci comunica lo stato del proceso
– r, il processo ? in esecuzione
– x, il processo ? stato terminato
– t, il processo ? stato stoppato
– s, il processo ? in listening
– z, il processo figlio ? attivo nonostante il padre sia terminato (zombied)
– d, il processo ? in sleep
– START indica la data di avvio del processo
– TIME indica il tempo di CPU utilizzato dal processo
– COMMAND indica il processo vero e proprio

probabilmente cos? alcune linee usciranno fuori dall schermo, per risolvere il problema e permettere alle linee lunghe di andare a capo ? possibile aggiungere l’opzione “-w” come segue:

bash: ps -auxw

IL COMANDO TOP

top mostra in tempo reale una tabella contenente preziose informazioni sui processi in esecuzione collocando in cima i processi che usano maggiori risorse di sistema, facilitando il lavoro dell’amministratore.

TERMINARE PROCESSI

Purtroppo a volte qualche processo potrebbe comportarsi male non rispondere pi? all’utente, in tal caso ci ? molto utile il comando kill (con la sua variante killall), che ci permette di “uccidere” un processo degenerato. La sintassi ? la seguente:

bash: kill PID_processo_da_killare //possiamo conoscere il PID di un qualunque processo attivo, come visto in precedenza, lanciando il comando ps -aux

bash: killall nome_programma //permette di killare tutte le sessioni di un certo programma

se anche con kill il problema non dovesse risolversi, possiamo forzare l’uccisione del processo aggiungendo il flag -9 a kill o a killall:

bash: kill -9 PID

bash: killall -9 nome_programma

NB: per poter uccidere un processo occorre esserne il propietario, fatta eccezione per root, che anche in questo caso non ha restrizioni

MAN E WHATIS, MANUALI SEMPRE A PORTATA DI MANO

Spesso capita cha non ricordiamo il funzionamento di un comando, magari qualche opzione particolare, o semplicemente vogliamo saperne di pi?, bhe, in questo caso possiamo ricorrere ai conadi man e whatis, seguiti dal nome del comando su cui vogliamo informazioni:

bash: whatis nome_comando //mostra una breve descrizione del comando
bash: man nome_comando //mostra una descrizione approfondita del comando – q per uscrire

Autore: DDragon

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...