ServerTutorial

Comandi base della shell UNIX/Linux

Chi conosce il DOS di Windows sa che esistono alcuni comandi che ci permettono di effettuare operazioni basilari: del resto, prima dell’avvento delle GUI (interfacce grafiche) era indispensabile procedere per linea di comando, anche per impartire le comuni operazioni che oggi effettuiamo, senza neanche pensarci, con un drag’n drop. Nonostante sembri qualcosa di poco utile al giorno d’oggi, la conoscenza delle shell dei sistemi operativi permette di risolvere diverse problematiche, e di intervenire nel caso in cui non disponessimo di interfacce utente per qualsivoglia motivo. Anche in ambiente UNIX/Linux, ovviamente, esiste un set di operazioni di base, ed in questo post andremo ad elencarle per facilitare i principianti, specie qualora debbano gestire un VPS per ripulire i file indesiderati via SSH.

Premettiamo anzitutto che al contrario del DOS il sistemi UNIX sono case-sensitive, per cui è necessario scrivere i comandi esattamente come sono riportati, senza invertire maiuscole nè minuscole.

Informazioni sul file system: tree e cd

Bisogna premettere che in Linux/Unix i file sono organizzati in una gerarchi di directory: quando accediamo alla shell, in sostanza, sia in locale che in remoto (ssh), in pratica ci stiamo muovendo all’interno di una struttura “ad albero” nella quale sarà possibile muoversi con appositi comandi.

Ad esempio in Linux si ottiene la struttura dell’alberatura digitando “tree“:

tree

che riporta un risultato simile:

$ tree -d /usr|head -n 12
/usr
|-- X11R6
|   `-- lib
|       `-- X11
|           `-- wily
|-- bin
|   `-- X11 -> .
|-- games
|-- i586-mingw32msvc
|   |-- bin
|   |-- include
|   |   |-- GL

in cui è evidente, ad esempio, che GL è una directory di livello 4 (partendo dal livello 1, cosiddetto “root“) contenuta dentro include, che ha sua volta è inclusa (così come bin) dentro i586-mingw32msvc.

Il comando cd (change directory) è utile per muoversi tra una directory e l’altra (peraltro è presente anche in ambito Windows): per utilizzarlo si sfrutta la sintassi seguente, molto semplice.

cd PATH

dove PATH indica la directory in cui vogliamo spostarci. Ad esempio, concretamente potremmo avere:

cd cartella1
cd /var/www
cd /tmp

per spostarci nella cartella1 (path relativo a dove ci troviamo, ammesso che cartella1 esista come sotto-directory), per controllare i file dentro /var/www (il path assoluto di Apache sotto Linux Debian, di solito) e rispettivamente dentro la cartella temporanea del sistema. Ricordiamo che i path assoluti iniziano sempre con / (slash), mentre quelli relativi no.

Ricordiamo inoltre che la scrittura:

cd ..

(attenzione allo spazio tra cd ed i due puntini) serve a portarci indietro di un livello di directory, mentre:

cd

semplicemente ci riporta alla directory base (“home”) della nostra utenza da qualsiasi posizione.

Vedere in quale directory ci troviamo: pwd

Per farlo basta digitale pwd (ovvero print working directory):

pwd

per cui un output potrebbe essere:

/Users/utente234

Visualizzare il contenuto delle cartelle: ls

Come facciamo a mostrare il contenuto di una directory? È presto detto, il comando è ls e si può utilizzare, inizialmente, senza alcun parametro:

ls

Come risposta il terminale di sistema mostrerà l’elenco di file e cartelle presenti nella directory in cui ci troviamo (ad esempio in un Mac):

Applications		Library			filezilla.tar.bz2
Desktop			Movies			guida-sicurezza.pdf
Documents		Music			log
Downloads		Pictures		portprofile.log
Dropbox			Public
Google Drive		Sites

Per avere maggiori dettagli, esistono varie opzioni da poter inserire, di cui riportiamo le più importanti:

ls -l

questa opzione serve a mostrare informazioni dettagliate sui file e sulle cartelle, indicandone dimensione, permessi, proprietari, gruppi e data di ultima modifica.

ls -a

mostra i file nascosti del sistema (che normalmente non vedrete).

ls -r

permette di ordinare i file in modo alfabetico (all’inverso).

ls -R

l’opzione “R” sta per “recursive”, e mostra il contenuto delle directory (“scavando” all’interno dei livelli delle sottodirectory). attenzione che questo comando può richiedere anche diversi secondi per il completamento: se volete interrompere l’esecuzione di qualsiasi comando basta digitare contemporaneamente CTRL e C.

ls -t

ordina temporalmente i file, dal più recente al più vecchio.

ls -alt

Acronimo facile da ricordare ed altrettanto comodo, consente di mostrare i file con relativi permessi, in ordine temporale, inclusi i file nascosti. Ad esempio:

...
-rw-------   1 tt    staff      130  7 Ott  2010 .serverauth.3537
drwxr-xr-x   4 tt    staff      136  6 Ott  2010 .netbeans
drwxr-xr-x   3 tt    staff      102  6 Ott  2010 .netbeans-registration
-rw-------   1 tt    staff       65 29 Set  2010 .serverauth.246
-rw-------   1 tt    staff     1024 23 Set  2010 .rnd
drwx------   3 tt    staff      102 21 Set  2010 .cups
drwxr-xr-x  34 root  staff     1156 11 Set  2010 .spumux
-rw-r--r--   1 tt    staff       36  8 Set  2010 .org.eclipse.epp.usagedata.recording.userId
drwxr-xr-x   6 tt    staff      204  7 Set  2010 .subversion
drwxr-xr-x   3 tt    staff      102 25 Ago  2010 .jah
drwxr-xr-x   4 tt    staff      136  6 Ago  2010 .macports
-rw-r--r--   1 tt    staff      603  3 Ago  2010 .profile.macports-saved_2013-05-17_at_23:44:44
drwxr-xr-x   2 tt    staff       68  3 Ago  2010 .Xcode
-rw-r--r--   1 tt    staff      241  3 Ago  2010 .profile.macports-saved_2010-08-03_at_14:44:52

Le informazioni incolonnate rappresentano nell’ordine: permessi CHMOD, numero file, utente e gruppo proprietario, dimensioni, data e nome. Ovviamente, inoltre, potremo combinare tra loro le opzioni (i parametri) per disporre della visualizzazione più adatta.

Rinominare / spostare file e directory: mv

Al contrario di Windows per cui esiste un comando ad hoc per rinominare i file (ren), in ambito UNIX per rinominare i file si utilizza lo stesso comando per spostarli: “mv” (move).

Ad esempio:

mv vecchionome.txt nuovonome.txt

È possibile anche combinare i comandi sfruttandoli come se fossimo all’interno di un linguaggio di programmazione (script): per aggiungere l’estensione .txt a tutti i file .tmp, per esempio, si fa così :

for file in *.tmp
do
mv $file "$file.txt"
done

Per spostare file e cartelle invece:

mv file123.txt /tmp

che sposta il file123.txt dentro la cartella temporanea di UNIX. Di norma l’operatore mv non restituisce alcun output, in caso di successo dell’operazione, a meno che non sfruttiate l’opzione -v (verbose, cioè “esplicita”):

mv -v guida-sicurezza.pdf Downloads/guida.pdf

che mostra un output del genere:

guida-sicurezza.pdf -> Downloads/guida.pdf

In questo caso, si noti, abbiamo spostato il file nella cartella Downloads cambiandolo pure di nome, contestualmente. Per maggiori informazioni suggeriamo di leggere la guida ufficiale di mv.

Copiare i file: cp

La sintassi base per copiare un file è la seguente:

cp file cartella_destinazione

Ad esempio scriviamo:

cp guida.pdf guida-copia.pdf

se ora listiamo i file filtrandoli sulla parole che iniziano per “guida” (ovvero utilizzando l’operatore “jolly” *):

ls guida*

otterremo qualcosa del genere:

guida-copia.pdf	     guida.pdf

che conferma la correttezza di quando fatto.

Dei tantissimi parametri opzionali di cp ricordiamo i più importanti:

cp -R

effettua una copia ricorsiva (copia file, directory e il loro contenuto)

cp -p

copia mantenendo identici attributi (data, permessi etc)

cp -P

copia ignorando i link simbolici

cp -L

copia includendo i link simbolici

Il comando “cp” è l’analogo, più “evoluto, di “copy” in ambito DOS / Windows.

Creare file e directory: touch e mkdir

Se volessimo creare un file vuoto basta digitare:

touch nome_file

mentre la directory, invece, verrà creata come segue:

mkdir nome_directory

Eliminare file e directory

Il comando per la cancellazione di un file è:

rm file_da_cancellare

Lo stesso comando, con apposite opzioni, permette di cancellare anche intere directory. L’opzione è “r”:

rm -r directory

Il comando rm inoltre permette di cancellare singolarmente elementi del filesystem, ad esempio:

rm file1 file2 file3

oppure:

rm -r directory1 directory2 directory3

o anche:

rm -r file1 file2 directory1 directory2 directory3

Ricordate che la cancellazione ha effetto immediato, e che solitamente è irreversibile (non esiste il “cestino”).

Foto: alcuni diritti riservati a zanthia

Lascia un commento

Back to top button