Questo articolo vuol essere un piccolo aiuto per chi, non soddisfatto di Windows, ha deciso di cambiare rotta virando verso il sistema open source per eccellenza o per chi, e il numero sta aumentando vertiginosamente, per la prima volta si affaccia sul mondo di Linux.
Alcuni utenti di Linux pensano che la sfida con Microsoft si combatta sulle potenzialità dell'interfaccia grafica, ma non è così, infatti l'uso di X-Windows risulta in alcuni casi limitante rispetto alle potenzialità reali di questo sistema operativo. È ovvio che tutto ciò che si può fare tramite mouse supera ampiamente le richieste che la maggior parte degli utenti fa ad un sistema operativo. A noi ora però interessa la shell, ovvero l'interfaccia testuale.
Avviata la macchina, dovreste trovarvi davanti ad una finestra grafica di login, in cui solitamente inserivate login e password per accedere all'interfaccia grafica. A questo punto, premete Alt+Ctrl+F1. Se tutto è andato a buon fine, vi dovreste trovare davanti ad una schermata nera con un cursore lampeggiante. Qui potrete inserire il vostro solito login e la vostra password. Dopo aver eseguito le corrette operazioni di login, dovreste trovarvi davanti ad un prompt.
Da questo momento in poi, ogni cosa che scriverete verrà gestita da un'interprete di comandi, detta Shell.
Esistono vari tipi di shell: la più comunemente usata dagli utenti medi di Linux è la Bash (acronimo di Bourne-Again Shell).
Passiamo ora a conoscere, uno ad uno, i primi fondamentali comandi per l'uso di Linux e alcune regolette che governano questo potente sistema:
NB: Il simbolo []$ indica il prompt, pertanto non fa parte del comando stesso, bensì rappresenta ciò che compare a schermo!
Innanzitutto, di grandissima utilità è il comando man, che ci permette di richiamare il manuale (guida di help) per ogni singolo comando che non conosciamo o di cui non ricordiamo la sintassi, ecc. Per uscire basterà poi premere q.
La chiamata avviene così:
[]$ man [nome_comando]
In alternativa, esiste anche la seguente sintassi:
[]$ [nome_comando] --help
Attenzione! pippo non è uguale a piPpo , poiché Linux (al contrario di Windows) è "case-sensitive", ovvero distingue fra lettere maiuscole e minuscole!
È inoltre importante sapere che ogni comando può avere varie funzionalità, ognuna delle quali attivabile "parametrizzando" il comando stesso, ovvero scegliendo delle opzioni che non sono attivate di default.
La sintassi consiste nello scrivere il comando normalmente, seguito da uno spazio e dal segno -, nonché successivamente da tutti i parametri che desideriamo: ad esempio, il comando ls (vedi sotto) può accettare molti parametri, fra cui ad esempio "1", "a", ecc.
Alcune chiamate valide (con i rispettivi differenti risultati) saranno quindi, ad esempio:
[]$ ls
[]$ ls -1
[]$ ls -a
[]$ ls -1a oppure []$ ls -al
Come avrete già notato, i vari parametri possono essere combinati, semplicemente scrivendoli in sequenza (l'ordine è indipendente).
Supponiamo di voler vedere quali file e cartelle sono presenti nella cartella in cui ci troviamo: per saperlo ci basterà digitare []$ ls e premere invio.
Fatto questo, verrà stampata a schermo la lista dei file e delle directory presenti nella cartella (in ordine alfabetico ed in riga).
Utilizzando alcuni parametri, è inoltre possibile avere informazioni più dettagliate:
[]$ ls -a (Visualizza anche i File che iniziano con il carattere . (punto), che in Linux implica essere "nascosto")
[]$ ls -l (Visualizza i File in colonna, anziché in riga, visualizzando anche le informazioni riguardo ai permessi dei File, alla loro dimensione e alla data di creazione)
Ricordiamo che, per un elenco completo delle opzioni usate (come spiegato sopra), è possibile utilizzare il comando []$ man ls.
Questo comando di basilare importanza è utilizzato per muoverci fra le cartelle (ad esempio, con un ls possiamo renderci conto di quali cartelle esistano nel punto in cui ci troviamo). Per muoverci ad esempio nella cartella chiamata Prima basterà digitare:
[]$ cd Prima
Per tornare indietro, invece, basta "andare nella cartella .. " (lo spazio tra CD e .. è necessario!), ovvero digitare:
[]$ cd ..
Infine, se non verrà specificata nessuna cartella di destinazione, verremo automaticamente portati alla directory "home".
Stampa la directory di lavoro corrente.
Il nostro obiettivo è ora quello di creare una Directory (Cartella) di nome Prima:
[]$ md Prima
Al contrario, per cancellare Directory appena creata, basterà digitare:
[]$ rd Prima
Crea un nuovo file: se il file specificato esiste già, verrà solo variata la marcatura temporale (Data di Creazione, ...) del file già esistente. Ad esempio:
[]$ touch file1
Facciamo un po' di pulizia sullo schermo con:
[]$ clear
Se nella directory in cui siamo è presente un file di testo, se ne può visualizzare il contenuto col comando []$ cat [nome_file].
Se invece si conosce la posizione di un file che non è nella cartella corrente, useremo []$ cat [[nome_dir] / [nome_file]].
Esempio:
[]$ cat Auguri
[]$ cat xerex/Auguri
Se vogliamo sapere di quante righe è formato il file, ci basterà usare il parametro -s:
[]$cat -s [nome_file].
Stampa le righe corrispondenti ad un criterio. Ad esempio:
[]$ grep word /etc/config
Stamperà a video tutte le righe del file /etc/config, che hanno un riferimento alla parola word.
Il comando grep può essere usato in una varietà di modi. Ad esempio con Wildcard Pipe (vedi prossimo capitoletto):
[]$ ls | grep ciao
Stamperà a video tutti i file della directory corrente che contengono l'espressione "ciao".
Il primo comando mostra un file, ma una schermata per volta: per proseguire la lettura è necessario premere la barra spaziatrice; per tornare indietro invece bisogna premere b.
Il secondo comando svolge praticamente le stesse funzioni, ma aggiungendone altre.
Si consiglia la lettura dell'help (raggiungibile come sempre digitando il comando man less o less --help).
Esempio:
[]$ more /home/textfile
[]$ cat file1 | less (vedi prossima pagina per il significato della |).
file
Stampa a video la tipologia del file (zip, testo etc), il cui nome è passato come parametro.
Esempio:
[]$ file archivio.tar.gz
Stampa a video il parametro passato nello standard input.
Esempio:
[]$ echo Stampa questa frase
Copiare un file è compito del comando cp, il quale si attende un file di partenza e un file di destinazione (che ovviamente non possono avere lo stesso nome, se nella stessa cartella).
Ad esempio:
[]$ cp Auguri Xerex/Copia_Auguri
Copia il File Auguri nella directory Xerex, assegnandgli il nome Copia_Auguri, a condizione che la cartella Xerex esista.
In caso Copia_Auguri sia un File già presente nella cartella, verrà chiesta conferma dell'operazione.
Con il Parametro -f, invece, il file verrà rimosso senza nulla chiedere (questa forzatura è utile se si vuole cancellare un alto numero di File).
Esempio:
[]$ cp -f file1 file2
[]$ cp /home/pino/file.odt ./docs
[]$ cp /etc/*.* /backup
Il comando mv ha due funzioni:
Ovviamente, le due funzioni di mv si possono combinare, senza far coincidere il nome di partenza con quello di arrivo.
Per cancellare un file, invece, si usa il comando []$ rm [nome_file].
Prima di rimuovere il file, verrà chiesta una conferma.
Se preferite che il file venga rimosso senza nulla chiedere, usate nuovamente il parametro -f.
Questa forzatura è utile se si vuole cancellare un alto numero di File.
Il comando rm si può usare anche per rimuovere delle cartelle anche non vuote. Prima di rimuoverle verrà chiesta una conferma.
[]$ rm Text
Se invece si desidera eliminare tutto il contenuto di una cartella (delete all), basta utilizzare il simbolo * (vedi sotto):
[]$ rm *
Elimina una directory vuota. Se la directory non è vuota, bisognerà prima eliminarne tutti i file contenuti, oppure forzare il comando con i parametri -r e -f. Ad esempio:
[]$ rmdir Old
[]$ rmdir -rf Trashed
Mostra le differenze fra due file. Ad esempio:
[]$ diff fileA fileB
Le Wildcard sono dei caratteri Jolly che si sostituiscono ad altri caratteri normali all'interno dei comandi; un esempio chiarirà tutto:
Le Wildcard si possono combinare:
[]$ ls *a?.jpg stamperà l'elenco dei file con estensione .jpg e con un nome che ha come penultima lettera la "a".
Nota: le Wildcard * e ? sostituiscono qualunque stringa o carattere ad esclusione del punto.
Un altro carattere speciale è la pipe (|): le pipe servono per dirigere l'output di un programma o di un comando nell'input di un altro programma o di un altro comando. Per un approfondimento, si veda "Bash: pipe e redirezioni".
Nota: Il comando wc è un contatore di righe, bytes, ecc., a seconda dei parametri. Ad esempio, la seguente riga stampa il numero di file presenti nella cartella:
[]$ ls -1 | wc -l
Ogni file, nella sua descrizione, ha 9 bit che indicano all'utente le operazioni che le diverse classi di utenti del sistema possono compiere sul file.
Ci sono tre "classi di utente":
[Come detto sopra, applicando l'opzione -l al comando ls si possono leggere i permessi di ogni file e directory presente nella cartella corrente]
Ad esempio, la riga -rw-r--r-- 1 xerex xerex 25077 feb 2 00:00 imm.jpg indica che imm.jpg è un file con permessi in lettura e scrittura per il proprietario, nonché permessi di lettura per gruppo ed altri utenti (vedi spiegazione dettagliata sotto).
Per cambiare i permessi si usa il comando chmod.
Questo comando necessita di parametri che specifichino quali permessi modificare e per chi.
Ad esempio:
[]$ chmod +x [nome_file]
Aggiunge il permesso di esecuzione a tutti gli utenti del sistema.
Un altro modo di settare i permessi è "passando" a chmod un valore in notazione "ottale" che indica i permessi.
Questa tabella esemplificherà il prossimo esempio.
[]$ chmod 755 Text
Assegna al proprietario del file tutti i permessi, mentre al gruppo ed agli altri utenti permette solo la lettura e l'esecuzione del file.
La Shell può essere interpretata anche come un vero e proprio ambiente di sviluppo: "l'arte" Shell Programming permette di scrivere script che possono risolvere problemi di amministrazione di sistema.
Prendete, ad esempio, una rete con decine di computer e centinaia di utenti. L'amministratore del sistema, che ha permessi da superutente, può decidere di ricercare utenti che non accedano al sistema da uno specificato periodo di tempo e spedire una mail a questi, per domandare se l'account è ancora necessario e, in caso contrario, cancellarlo.
Pensate alla mole di lavoro che l'amministratore dovrebbe sobbarcarsi per controllare ogni utente su ogni macchina: non credo basterebbe una settimana. Grazie allo Shell Scripting, invece, è sufficiente scrivere un programma combinando vari comandi della shell simili a quelli appena visti, che eseguano il compito sopra descritto.
Come è facile intuire, i pochi comandi descritti in questo articolo non sono sufficienti per scrivere un programma così complesso, ma con un po' di pratica e molta volontà sarà possibile scrivere programmi utili anche dopo poche ore di esercizio.
Ah, dimenticavo... per tornare all'interfaccia grafica premete Alt+F7!
MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .
Copyright 2008 MegaLab.it - Tutti i diritti sono riservati