
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