Guida ai comandi da terminale

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Quale utente Linux non ha mai avuto bisogno di una raccolta di comandi base per gestire il suo sistema operativo al migliore dei modi da terminale?
Questa pagina nasce in loro supporto. Qui proverò a creare una raccolta dei comandi base più utili, in modo da venire in aiuto di coloro che ne cercano uno per compiere la rispettiva operazione.

Warning.png ATTENZIONE
Nella guida viene talvolta usata l'opzione -r abbinata ad alcuni comandi. È utile rimarcare e tenere a mente che la ricorsività del comando derivante dall'utilizzo di questa opzione può avere effetti distruttivi sul sistema e che va quindi usata con cognizione di causa.


Gestione di repository e pacchetti

Definizione di repository

Il repository è un archivio ordinato dove sono raccolti i pacchetti software della vostra distribuzione (siano essi pacchetti binari o sorgenti), in modo ben organizzato e costantemente aggiornato. Da questi repository è possibile installare tutto il software che vi occorre per la vostra Debian. Per ottenere più informazioni potete dirigervi qui .

Modifica della lista dei repository

La lista dei repository configurati per il vostro sistema si trova nel file /etc/apt/sources.list. Per modificarla basta aprire il file con un qualsiasi editor di testo. Quindi, se vogliamo aprirlo con Gedit (editor di testo visuale; occorre avere un ambiente grafico installato) digiteremo:

gedit /etc/apt/sources.list

Se vogliamo aprirlo con Nano (editor di testo su console) digiteremo:

nano /etc/apt/sources.list

Con Vim (altro editor di testo per console):

vim /etc/apt/sources.list

E così via. Vi ricordo che questo file ha i permessi di scrittura riservati all’amministratore (root) o ad un sudoer. Se avete impostato al vostro utente i permessi di sudoer, o siete su Ubuntu, vi basterà aggiungere sudo prima di ogni comando (sudo gedit invece di gedit, ad esempio) per avere i permessi di scrittura e poter salvare il file. Se siete root, potete copiare ed incollare i comandi citati sopra sul terminale senza modificarli nella sintassi.

Aggiornamento del sistema operativo

Per aggiornare Debian con gli ultimi pacchetti disponibili per la vostra versione dovrete lanciare due comandi:

apt-get update
apt-get upgrade

Queste operazioni possono essere fatte solo da un sudoer o da un root.

Installazione di un programma o di un pacchetto

Se vogliamo installare un programma o un pacchetto presente nei repository a vostra disposizione, ci basterà semplicemente digitare da terminale:

apt-get install programma

oppure:

aptitude install programma

Se vogliamo installare, ad esempio, VLC, digitiamo:

apt-get install vlc

Il nome del programma, e la possibilità di installarlo in questo modo, dipendono dalla presenza dei pacchetti nella vostra lista repository e dal loro nome. Una lista completa dei pacchetti repo presenti nel vostro sistema la avete andando su Sistema –> Amministrazione –> Gestore pacchetti Synaptic, e per poterli installare ovviamente avrete bisogno di permessi di sudoer o di root. Se il vostro programma non compare nell'elenco, ma avete trovato in giro dei repository che lo includono (righe di testo), per utilizzarle dovrete integrarle nella vostra lista repository, seguite il paragrafo “Modifica della lista dei repository”.

Ricerca di un pacchetto e informazioni

Volete installare un programma, ma non conoscete il nome del pacchetto con il quale è stato inserito nei repository di Debian?
Il seguente comando può esservi di aiuto:

apt-cache search nome_pacchetto

Il comando esegue una ricerca full text all'interno dei nomi e delle descrizioni dei pacchetti dei repository abilitati. Ad esempio:

apt-cache search tellico

ci restituirà:

alexandria - a GNOME application for managing book collections
tellico - collection manager for books, videos, music
tellico-data - collection manager for books, videos, music [data]
tellico-scripts - collection manager for books, videos, music [scripts]

Quindi possiamo ottenere varie informazioni sul pacchetto che cerchiamo con:

apt-cache show nome_pacchetto

Ad esempio:

apt-cache show tellico

Elencare le sole dipendenze:

  • dirette (necessarie)
apt-cache depends tellico
  • indirette (raccomandate o utili a seconda del tipo di richiesta o configurazione del sistema)
apt-cache rdepends tellico

Informazioni su quale repository abbia la priorità (utile nella gestione del pinning):

apt-cache policy tellico

Visionare il changelog prima di aggiornare il pacchetto:

apt-get changelog tellico

Sapere perché un pacchetto è installato o perché andrebbe installato:

aptitude why tellico

Sapere perché un pacchetto non è installato e se genera conflitti:

aptitude why-not tellico

Disinstallazione base di un programma o di un pacchetto

Si utilizza lo stesso strumento visto prima per l'installazione dei pacchetti. Digitiamo quindi:

apt-get remove programma

Se vogliamo rimuovere VLC:

apt-get remove vlc

Questo tipo di disinstallazione disinstalla il programma, ma lascia all’interno del sistema i file di configurazione del programma. Per poter eseguire il comando di disinstallazione descritto avrete bisogno di permessi di sudoer o di root.

Disinstallazione completa di un programma o di un pacchetto

La differenza tra questa disinstallazione e quella base consiste nella liberazione completa dello spazio occupato dal programma che vogliamo rimuovere dal sistema. Con questo tipo di disinstallazione, infatti, oltre a disinstallare il programma dal sistema, cancelleremo anche i pacchetti e i relativi file di configurazione, che altrimenti non verrebbero rimossi, e che occuperebbero spazio inutile nel caso in cui non avessimo alcuna intenzione di reinstallare in futuro il programma. Digitiamo:

apt-get remove --purge programma

Oppure:

apt-get purge programma

Oppure:

aptitude purge programma

Se vogliamo rimuovere VLC:

apt-get remove --purge vlc

O in alternativa:

apt-get purge vlc

Per poter eseguire il comando di disinstallazione descritto avrete bisogno di permessi di sudoer o di root.

Reinstallazione di un programma o di un pacchetto

Se abbiamo un programma già installato nel sistema, ma per un qualsiasi motivo volessimo reinstallarlo, il comando è:

apt-get install --reinstall programma

Se vogliamo reinstallare VLC:

apt-get install --reinstall vlc

Per poter eseguire il comando di reinstallazione descritto avrete bisogno di permessi di sudoer o di root.

Rimozione di un pacchetto non disinstallato completamente

Per rimuovere completamente i pacchetti già disinstallati che, per qualche motivo, non riuscite a eliminare con apt, digitare:

dpkg -P programma

Se volessimo “purgare” VLC:

dpkg -P vlc

Pulizia della cache dei pacchetti

Per ripulire la cache dei pacchetti scaricati si utilizzano i comandi:

apt-get clean

O anche:

apt-get autoclean

Per poter eseguire il comando avrete bisogno di permessi di sudoer o di root.

Installazione dei sorgenti dei pacchetti

A volte può esserci utile il download di codici sorgente, magari per correggere da noi una compilazione errata, o ricompilarlo reindirizzando delle dipendenze, o qualsiasi altro motivo. Possiamo farlo da aptitude, semplicemente con il comando:

apt-get source programma

Se volessimo ottenere i source di VLC:

apt-get source vlc

Non sono richiesti particolari permessi, per cui potete farlo anche da semplici user, il risultato non cambia.

Determinare a quale pacchetto appartiene un file

Per ottenere il nome del pacchetto a cui appartiene un file:

dpkg --search nome_file

Ad esempio:

dpkg --search /bin/cat 
coreutils: /bin/cat

Operazioni con programmi non presenti nei repository

Premessa

A mio parere, prima di procedere con l'installazione di un programma, è sempre bene verificare attentamente che non sia già presente nei repository ufficiali o in qualche repository aggiuntivo messo a disposizione, ad esempio, dagli sviluppatori del programma stesso. Installando da repository, infatti, si mantiene il sistema pulito e, soprattutto, si mantiene un archivio unico e completo di tutti i programmi installati, con la possibilità di rimuoverli utilizzando pochi strumenti nativi di Debian.

Compilazione dei sorgenti di un programma

I sorgenti di un programma sono di solito contenuti in un file con estensione .tar.gz. Un file di questo genere è in gergo chiamato tarball e in genere vanno compiute due operazioni per compilarlo ed installarlo.

  • La prima è quella di scompattarlo:
$ tar -xzvf nome_programma.tar.gz
  • La seconda è quella di spostarsi nella directory che si è venuta a creare e dare inizio alla compilazione:
$ cd nome_programma
$ ./configure
$ make
# make install

Per disinstallare il programma bisogna portarsi nella directory dei sorgenti e digitare:

# make uninstall

Metodo alternativo I

Un metodo alternativo consiste nel compilare il programma creando un pacchetto .deb da installare successivamente. Il primo passo è di installare il programma:

# apt-get install checkinstall

Ora seguite i normali passi per la compilazione dei sorgenti, variando solo l'ultimo comando:

$ ./configure
$ make
# checkinstall

Se tutto è andato per il verso giusto, verrà creato ed installato un pacchetto debian.

Metodo alternativo II

A volte checkinstall può dare problemi, non rispettando le politiche Debian di gestione e creazione dei pacchetti. E' possibile per fortuna sostituire checkinstall con un modo più professionale. Dovete innanzitutto scaricare dei tool di sviluppo:

# apt-get install devscripts dh-make make build-essential dpkg apt

Adesso posizionatevi dentro la cartella estratta dei sorgenti e lanciate:

$ dh_make
$ debuild binary

A questo punto, dopo la compilazione, verrà creato un pacchetto .deb, che sarà collocato nella directory padre. Installatelo così:

# dpkg -i ../pacchetto.deb

e il gioco è fatto.

Esecuzione di uno script

Spesso i programmi scaricati e scompattati contengono al loro interno uno script, da lanciare per effettuare l'installazione vera e propria del programma. Per lanciare questo tipo di installer si eseguano i comandi:

chmod +x installer.sh

e successivamente:

./installer.sh

Installazione di un file .bin

Se abbiamo scaricato un installer in .bin, per avviare la sua installazione da terminale non si deve fare altro che dirigersi nella directory in cui il .bin è stato salvato e lanciarlo scrivendo il nome del file. L’unico problema può nascere quando l'installer non da nativamente i permessi di esecuzione all’utente normale, la cosa si risolve con il comando chmod.
Se, per esempio, abbiamo scaricato il programma mio_programma.bin dobbiamo compiere le seguenti operazioni.
L'installer avrà bisogno prima di tutto di una rettifica sui permessi. Entriamo nella cartella in cui si trova il file e lanciamo questi comandi:

chmod +x mio_programma.bin

e successivamente:

./mio_programma.bin

Installazione di un file .rpm

Se abbiamo scaricato un installer con estensione .rpm (RedHat Package Manager, sistema di gestione dei pacchetti originario di Red Hat Linux), per installarlo dalla nostra distro dovremo per forza convertirlo in .deb . Il programma che ci consente di farlo è alien. Quindi installiamolo digitando:

apt-get install alien

Successivamente, dopo esserci diretti da terminale nella cartella in cui è presente il file .rpm scaricato, lanciamo:

alien -k nomefile.rpm

Avrete ottenuto un file .deb, che potrete utilizzare seguendo le istruzioni del paragrafo successivo.

Installazione di un file .deb

Se abbiamo scaricato o creato un installer con estensione .deb (che, come il nome suggerisce, è stato creato per Debian e sistemi derivati come Ubuntu), per installarlo basterà dirigerci nella directory dove risiede il file e digitare:

dpkg -i nomefile.deb

Per disinstallarlo possiamo normalmente seguire una delle strade per la disinstallazione viste in precedenza, utilizzando apt.

Scompattare un file .tar

Se abbiamo un archivio in formato compresso .tar, per decomprimerlo dovremo usare lo strumento tar. Se non lo abbiamo, digitiamo da terminale:

apt-get install tar

Adesso che abbiamo lo strumento, per decomprimere un pacchetto in formato .tar dobbiamo prima dirigerci, sempre da terminale, nella cartella in cui l’archivio è presente, e poi dobbiamo lanciare:

tar xvf nomearchivio.tar

dove

  • tar è il nome del programma decompressore
  • x significa “estrazione”
  • v sta per "verbose", e serve per ottenere informazioni dettagliate durante il processo di estrazione
  • f infine salva i file nella stessa posizione dell’archivio.

Lanciando il comando:

tar --help

avrete una lista completa delle opzioni che potete usare col programma.
Attenzione ai permessi: se lanciate il comando tar da sudoer o da root, i permessi dei file decompressi saranno attribuiti a quell’utenza.

Scompattare un file .tar.bz2

Se abbiamo un archivio in formato compresso .tar.bz2, per decomprimerlo dovremo usare lo strumento tar. Se non lo abbiamo, digitiamo da terminale:

apt-get install tar

Adesso che abbiamo lo strumento, per decomprimere un pacchetto in formato .tar.bz2 dobbiamo prima dirigerci, sempre da terminale, nella cartella in cui l’archivio è presente, e poi dobbiamo lanciare:

tar jxvf nomearchivio.tar.bz2

dove

  • tar è il nome del programma decompressore
  • j indica che il file da decomprimere è in formato compresso .bz2
  • x significa “estrazione”
  • v sta per "verbose", e serve per ottenere informazioni dettagliate durante il processo di estrazione
  • f infine salva i file nella stessa posizione dell’archivio.

Lanciando il comando

tar --help

avrete una lista completa delle sintassi che potete usare col programma.
Attenzione ai permessi: se lanciate il comando tar da sudoer o da root, i permessi dei file decompressi saranno attribuiti a quell’utenza.

Scompattare un file .tar.gz

Se abbiamo un archivio in formato compresso .tar.gz, per decomprimerlo dovremo usare lo strumento tar. Se non lo abbiamo, digitiamo da terminale:

apt-get install tar

Adesso che abbiamo lo strumento, per decomprimere un pacchetto in formato .tar.bz2 dobbiamo prima dirigerci, sempre da terminale, nella cartella in cui l’archivio è presente, e poi dobbiamo lanciare:

tar zxvf nomearchivio.tar.gz

dove

  • tar è il nome del programma decompressore
  • z indica che il file da decomprimere è in formato compresso .gz
  • x significa “estrazione”
  • v sta per "verbose", e serve per ottenere informazioni dettagliate durante il processo di estrazione
  • f infine salva i file nella stessa posizione dell’archivio.

Lanciando il comando

tar --help

avrete una lista completa delle sintassi che potete usare col programma.
Attenzione ai permessi: se lanciate il comando tar da sudoer o da root, i permessi dei file decompressi saranno attribuiti a quell’utenza.

Scompattare un file .rar

Se siamo in possesso di un archivio .rar , per decomprimerlo avremo bisogno dello strumento unrar. Se non lo abbiamo, digitiamo da terminale:

apt-get install unrar

La differenza tra tar e unrar è che il pacchetto tar è tuttofare, e consente sia l’archiviazione che la decompressione dei file su cui è in grado di lavorare. unrar invece è in grado soltanto di decomprimere, e se volessimo creare un archivio .rar avremmo bisogno di un altro pacchetto, chiamato rar.
Per decomprimere il file .rar digitiamo ora semplicemente:

unrar nomearchivio.rar

Attenzione ai permessi: se lanciate il comando unrar da sudoer o da root, i permessi dei file decompressi saranno attribuiti a quell’utenza.

Scompattare un file .zip

Se siamo in possesso di un file .zip, possiamo decomprimerlo con lo strumento “unzip. Se non abbiamo dovremo installarlo con:

apt-get install unzip

Come per gli archivi .rar, unzip è in grado soltanto di decomprimere, e la compressione può avvenire grazie a zip che si installa allo stesso modo.
Per decomprimere un file .zip, digitiamo semplicemente:

unzip nomearchivio.zip

Attenzione ai permessi: se lanciate il comando unrar da sudoer o da root, i permessi dei file decompressi saranno attribuiti a quell’utenza.

Gestione di file e directory

Muoversi tra le directory

Accedere da terminale ad una directory è semplicissimo, perché il comando è uguale a quello del DOS.
Per entrare nella directory “cartella” digitiamo:

cd cartella

se ci troviamo nella directory "genitore" della directory "cartella". Oppure digitiamo:

cd /percorso/assoluto/per/arrivare/a/cartella

Si noti che per utilizzare il percorso assoluto dobbiamo per prima cosa inserire il / che sta ad indicare la radice del filesystem. Per entrare nella directory “sottocartella” presente in “cartella” con un solo comando, digitiamo:

cd cartella/sottocartella

Se siamo in “sottocartella” e vogliamo tornare in “cartella” digitiamo:

cd ..

Se siamo in “sottocartella” e vogliamo uscire sia da lì che da “cartella”, digitiamo:

cd ../..

Visualizzare il contenuto di una directory

Se avete bisogno di vedere cosa è presente in una cartella, tutto quello che dovrete fare sarà entrare nella cartella che volete esaminare e lanciare:

ls

Esistono una serie di opzioni da aggiungere per perfezionare la ricerca. Avrete una guida completa di quello che potete aggiungere digitando:

ls --help

Le opzioni più utili sono secondo me:

ls -a

con cui si potranno visualizzare anche gli eventuali file nascosti, compresi . e .. (directory corrente e directory superiore)

ls -A

con cui si potranno visualizzare anche gli eventuali file nascosti

ls -la

con cui si potranno visualizzare i file nascosti (a) e produrre un listato (l) con diversi dettagli utili (permessi di lettura/scrittura/esecuzione, utente e gruppo proprietari, dimensione, data di ultima modifica, ecc... )

Creare una directory

Per creare una directory da terminale, dobbiamo spostarci dentro la directory nella quale desideriamo creare la nuova directory, e digitare:

mkdir nuovacartella

Se volessimo creare in un colpo solo la directory “cartella” e subito al suo interno la directory “sottocartella” scriviamo:

mkdir cartella/sottocartella

Rinominare una directory

Rinominare una cartella da terminale è semplice. Se ad esempio dobbiamo assegnare alla directory “cartella” il nuovo nome “directory”, dobbiamo portarci nella directory genitore e scrivere:

mv cartella/ directory/

Spostare (tagliare ed incollare) una directory

Spostare (tagliare ed incollare) una directory da terminale richiede un solo semplice comando. Supponiamo di avere la seguente struttura:

/home
|
|__ ferdy
      |
      |__ cartella
      |      |__ sottocartella
      |
      |__ directory

e di voler spostare la directory sottocartella dalla directory cartella alla directory directory:

cd /home/ferdy/cartella
mv sottocartella /home/ferdy/directory

oppure, con un solo comando:

mv /home/ferdy/cartella/sottocartella /home/ferdy/directory

Copiare una directory

Copiare ed incollare una directory da terminale richiede un solo semplice comando. Supponiamo di avere la seguente struttura:

/home
|
|__ ferdy
      |
      |__ cartella
      |      |__ sottocartella
      |
      |__ directory

e di voler copiare la directory sottocartella dalla directory cartella alla directory directory:

cd /home/ferdy/cartella
cp -r sottocartella /home/ferdy/directory

oppure, con un solo comando:

cp -r /home/ferdy/cartella/sottocartella /home/ferdy/directory

L'opzione -r permette di estendere ricorsivamente l'opzione di copia alle eventuali sottodirectory contenute della directory "sottocartella".

Cancellare una directory vuota

Volendo cancellare la directory “cartella”, dobbiamo scrivere:

rmdir cartella

Questo comando presuppone che la directory sia vuota. In caso contrario verrà restituito l’errore:

rmdir: failed to remove `cartella’: La directory non è vuota

Cancellare una directory non vuota

Volendo cancellare la directory non vuota “cartella” dovremo digitare:

rm -rf cartella

L'opzione -rf è in grado di cancellare ogni file. Prestate attenzione a come utilizzate il comando, perché non viene chiesta alcuna conferma e rischiate di eliminare file o directory di sistema.

Visualizzare la struttura di una directory

tree è un comando shell che ha il compito di listare ad albero una data directory. La sintassi del comando è:

tree [-adfgilnopqrstuxACDFNS][-L level [-R]][-H baseHREF][-T title][-o filename][--nolinks][-P pattern]
     [-I pattern][--inodes][--device][--nore-port][--dirsfirst][--version][--help][directory ...]

Alcune delle numerose opzioni che possiamo passare al comando tree sono:

  • -a: Stampa a video tutti i file, compresi quelli nascosti
  • -d: Lista soltanto le directory
  • -f: Stampa tutto il percorso di ogni file
  • -i: Non stampa un output ad 'albero'
  • -s: Stampa affianco al nome del file la sua dimensione
  • -r: Riordina alfabeticamente l'output

Se vogliamo ad esempio listare la cartella /home/user/tmp, basta dare il comando:

tree /home/user/tmp

Rinominare un file

Per rinominare un file da terminale deve essere usato il comando mv. Volendo rinominare il file “testo.txt” in “text.txt” dovremo dirigerci prima nella directory in cui il file è presente, e poi digitare:

mv testo.txt text.txt

Spostare (tagliare ed incollare) un file

Anche per questa operazione deve essere usato il comando mv. Supponiamo di avere il file "testo.txt" in una specifica directory e di volerlo spostare nella nostra directory Home. Dirigiamoci da terminale nella directory in cui il file è presente, e lanciamo:

mv testo.txt /home/vostronomeutente/

Copiare un file

Se intendiamo duplicare un file, dobbiamo usare il comando cp. Con questo comando si possono fare più cose:

  • copiare un file da una directory ad un'altra:
cp testo.txt /home/vostronomeutente/testo.txt
  • creare un duplicato del file nella stessa direcctory, cambiandogli solo il nome:
cp testo.txt text.txt
  • creare un duplicato e cambiare anche l’estensione:
cp testo.txt testo.bak

Cancellare un file

La cancellazione di un file da terminale è semplice, basterà digitare il comando rm seguito dal nome del file che si vuole cancellare. Ad esempio:

rm testo.txt

Cancellare definitivamente un file

shred è un comando shell che sovrascrive ripetutamente i FILE specificati in modo da rendere più difficile recuperare i dati, e opzionalmente li cancella. La sintassi del comando è:

shred [OPZIONI] FILE [...]

Le opzioni che possiamo passare al comando sono:

  • -f, --force: change permissions to allow writing if necessary
  • -n, --iterations=N: Overwrite N times instead of the default (25)
  • --random-source=FILE: get random bytes from FILE (default /dev/urandom)
  • -s, --size=N: shred this many bytes (suffixes like K, M, G accepted)
  • -u, --remove: truncate and remove file after overwriting
  • -v, --verbose: show progress
  • -x, --exact: do not round file sizes up to the next full block; this is the default for non-regular files
  • -z, --zero: add a final overwrite with zeros to hide shredding

Visualizzare il contenuto di un file

Il comando cat (che analizzeremo nel dettaglio tra pochi paragrafi) visualizza i contenuti di un intero file sullo schermo. Ad esempio, digitate:

cat filename.txt

per vedere il contenuto del file. Se il file è piuttosto lungo, il suo contenuto scorrerà velocemente sullo schermo. Per evitare ciò, usate un pager come less o most (more scorre solo in avanti):

less filename.txt

Confrontare due file

diff è un comando shell che trova la differenza tra due file. La sintassi del comando è:

diff [opzioni] da-file verso-file

Alcune delle opzioni che possiamo passare al comando sono:

  • -righe: Mostra "righe" (un intero) righe di contesto. Questa opzione non specifica da sola un formato di output; non ha nessun effetto a meno che venga combinata con -c o -u. Questa opzione è obsoleta. Per operare correttamente, diff ha, di solito, bisogno di almeno due righe di contesto.
  • -a: Tratta tutti i file come testo confrontandoli riga per riga, anche se non sembrano essere testo.
  • -b: Ignora differenza nella quantità di spazi bianchi.
  • -B: Ignora differenze che consistono solo in righe vuote (eccedenti o mancanti).
  • --brief: Riferisce solo se i file sono diversi, e non i particolari della differenza.
  • -c: Usa il formato «a contesto» (context output, in inglese).
  • -d: Usa un algoritmo diverso per trovare un, probabilmente, minore insieme di modifiche da fare. Questo rende diff più lento (a volte molto più lento).

Comprimere file e directory

La creazione di un nuovo file con il comando tar viene fatta mediante l'opzione -c indicando il nome del file da creare e il file o la directory originali: $ tar cf nuovo.tar dir/ Il file creato contiene l'intera directory dir/. Per estrarre la directory dall'archivio utilizziamo l'opzione -x: $ tar xf nuovo.tar l'archivio verrà estratto interamente nella directory corrente.
L'opzione -f utilizzata fino ad ora serve ad indicare che il campo direttamente successivo sarà il nome dell'archivio.
Tuttavia in questo esempio non abbiamo utilizzato alcun software di compressione per ridurre la dimensione dei dati nell'archivio. Per farlo possiamo scegliere se utilizzare il software di compressione gzip (opzione -z) o con bzip2 (opzione -j):
$ tar czf nuovo.tar.gz dir/ # utilizza gzip
$ tar cjf nuovo.tar.bz2 dir/ # utilizza bzip2
Analogamente per decomprimere:
$ tar xzf archive.tar.gz
$ tar xjf archive.tar.bz2

L'estensione dei due file è stata cambiata da .tar a .tar.gz e .tar.bz2 per indicare chiaramente con quale tipo di algoritmo sono stati compressi i dati. Esistono versioni compatte delle stesse estensioni: .tgz equivale a .tar.gz e .tbz equivale a .tar.bz2.
Nota: l'estensione corretta in realtà non è assolutamente necessaria. Possiamo chiamare tutti gli archivi .tar indipendentemente dalla compressione e questi funzioneranno perfettamente. Tuttavia in questo modo l'utente non ha modo di conoscere a colpo d'occhio l'algoritmo utilizzato.
Una opzione basilare interessante è -t con la quale possiamo stampare il contenuto di un file compresso. Ad esempio:
$ tar tzf archive.tar.gz
Nel caso in cui l'archivio non sia stato compresso utilizzando gzip o bzip2 è possibile aggiungervi singoli file o intere directory utilizzando la modalità append attivata dall'opzione -r:
$ tar rf archive.tar file dir/
Nota: è importante che l'archivio non sia compresso. Nel caso lo sia è possibile prima eliminare la compressione dall'archivio e poi aggiungere dei file. Alla fine verrà ricompresso il tutto.

Esempi

  • Comprimere tutte le immagini jpg dentro una directory:

$ tar cvzf photo.tar.gz photo/*.jpg

  • Come sopra ma il file viene inserito nella directory dove le foto risiedono:

$ tar cvzf photo/photo.tar.gz photo/*.jpg

  • Comprimere la directory corrente (1):

$ tar cvjf current.tar.bz2 .

  • Comprimere la directory corrente (2):

$ tar cvjf current.tar.bz2 *
Nota: La differenza tra i due comandi precedenti è abbastanza semplice. Nel primo caso ad essere compressa è la reale direcotry corrente. Scompattando l'archivio ci troveremo con una directory che contiene tutti i file. Nel secondo caso invece ad essere compressa non è la directory bensì tutti i file che essa contiene. Scompattando non troveremo una cartella contenente ma tutti i file contenuti nell'archivio saranno copiati nella directory di scompattazione senza che sia creata la subdirectory.

  • Copiare una directory:

$ tar cf - /some/directory | (cd /another/directory && tar xf -)

  • Estrarre tutti i file .h da un archivio:

$ tar xvzf source.tar.gz *.h

  • Cerca tutti i file .jpeg nella home e crea un archivio:

$ find ~ -type f -name "*.jpg" | xargs tar cvzf photo.tar.gz

  • Se stiamo cercando di creare un archivio molto grande è più conveniente il seguente metodo:

$ find ~ -type f -name "*.jpg" | xargs tar rvzf photo.tar.gz
nel quale abbiamo usato l'opzione append (-r) invece della create (-c). Questo perchè nel caso di archivi molto grandi xargs passa tutti gli argomenti a blocchi e tar ricrea ogni volta l'archivio con solamente i file elencati in quel blocco all'interno. La modalità append risolve il problema.

  • Estrarre singoli file da un archivio:

$ tar xvjf archive.tar.bz2 file1.cpp file2.cpp file3.cpp

  • Estrarre file dalle subdirectory di un archivio: o subdirectory intere:

$ tar xvjf archive.tar.bz2 subdir1/file1.cpp subdir2/file2.cpp

  • Estrarre una intera subdirectory da un archivio:

$ tar xvjf archive.tar.bz2 subdir1/
Nota: Per poter estrarre singoli file o subdirectory occorre conoscerne con esattezza i nomi. Tuttavia è possibile utilizzare altri comandi come find, grep, awk per ottenere un elenco dei file che vogliamo estrarre.

  • Estrarre da un archivio solo i file elencati in un file di testo:

$ tar xvf archive.tar -T list.txt

  • Importare in un file di testo tutti gli elementi di un archivio:

$ tar tzf archive.tar.gz > list.txt

  • Eliminare da una directory contenente molti file solo quelli contenuti anche nell'archivio:

$ tar tzf archive.tar.gz | xargs rm -r

  • Stimare la dimensione di un archivio prima di crearlo:

$ tar czf - directory/ | wc -c

(Grazie a Nerotux per gli esempi sull'utilizzo di tar)

Modificare l'ora di accesso a un file

touch è un comando shell che modifica l'orario di accesso o/e modifica di un file (il cosiddetto timestamp). I file vengono modificati con l'orario corrente. La sintassi del comando è:

touch     [-acfm] [-r    file][-t orario_decimale] [-d    orario]
          [--time={atime,access,use,mtime,modify}][--date=orario][--reference=file]
          [--no-create] [--help] [--version] [--] file...

Le opzioni che possiamo passare al comando sono:

  • -a: Cambia l'ora di accesso di file.
  • -c: Non crea file.
  • -m: Cambia l'ora di modifica di file.
  • -r ref_file: Usa i corrispondenti orari di ref_file come i nuovi valori per gli orari da cambiare.
  • -t orario: Usa l'orario specificato come nuovo valore per gli orari cambiati. L'argomento è un numero decimale nella forma [[SS]AA]MMGGoomm[.ss]
  • -d, --date=orario: Usa orario al posto dell'ora corrente. Può contenere il nomi di mese, fusi orari, «am» e «pm», ecc.

Manipolazione di file

Un modo veloce (soprattutto negli script) per modificare il contenuto di un file o per accodare altro testo alla sua fine è utilizzare il comando cat.
cat è un comando shell che legge file in sequenza e può scrivere i loro contenuti sullo standard output nella stessa sequenza. Lo scopo di cat è infatti concatenare file (generalmente di testo o che abbiano particolari intestazioni, ad esempio il formato MPEG2 usato dai VOB nei DVD video). Dimenticatevi follie quali "cat file.txt | less" o "cat file.txt | grep foo" perché è definito UUOC: Useless Use Of Cat :-)

La sintassi del comando è:

cat [opzioni][file ...]

Note:

  • > file.estensione: Se nomefile.estensione non esiste, viene creato e viene scritto il valore al suo interno. Nel caso esistesse già, il suo valore verrebbe sovrascritto.
  • >> nomefile.estensione: Aggiunge alla fine del file il valore che gli date a riga di comando.

Altri comandi utili per la manipolazione veloce di file sono:

  • head, che mostra le prime dieci linee di un file. Utile quando si vuole avere un'idea del contenuto di un file senza doverlo aprire con un editor
  • tail, che mostra al contrario le ultime dieci linee di un file

Esempi

Se vogliamo mostrare il contenuto del file di testo /home/ferdy/prova.txt, dobbiamo dare il comando:

cat /home/ferdy/prova.txt

Se vogliamo aggiungere il contenuto del file /home/ferdy/aggiunte.txt alla fine del file, diamo il seguente comando:

cat /home/ferdy/aggiunte.txt >> /home/ferdy/prova.txt

Se vogliamo unire i due file e crearne un terzo, diamo il comando:

cat /home/ferdy/prova.txt /home/ferdy/aggiunte.txt > /home/ferdy/file_finale.txt

Per visualizzare le prime dieci o le ultime dieci linee di un file:

head /home/ferdy/prova.txt
tail /home/ferdy/prova.txt

Un comando preziosissimo per gli amministratori di sistema è il seguente, che permette di vedere in modo interattivo la variazione di un file di log:

tail -f /var/log/syslog | ccze

Nell'ultimo comando sono stati usati:

  • -f che permette a tail di seguire (follow) il file e i suoi cambiamenti
  • | ccze che dirige l'output di tail verso il programma ccze, che colorerà l'output del log rendendolo facilmente leggibile

In quest'ultimo esempio, per rilasciare il terminale e riottenerne il pieno utilizzo bisogna stoppare tail con la combinazione di tasti CTRL+C.

Un altro uso interessante di cat è creare file di testo sfruttando lo stdin della shell. Lanciamo questo comando:

cat - > file.txt

e possiamo scrivere il nostro testo sfruttando lo standard input come editor, si può correggere solo se non si è andati a capo e si termina con Ctrl-d.

Creare un collegamento

Un collegamento è un particolare tipo di file che non è altro che un rimando ad un altro file o directory. Per creare un collegamento tra file o directory si deve usare il comando ln.

ln -s <file da collegare> <nome del link>

Supponiamo di avere il file testo.txt nella nostra home e di voler creare un collegamento in usr/bin chiamato "mylink.txt". Scriverò:

ln -s /home/ferdy/testo.txt /usr/bin/mylink.txt

per prevenire ogni tipo di problema è bene sempre specificare i percorsi assoluti del collegamento e del file (o directory) verso cui creare un collegamento. Su Linux esistono due tipi di collegamenti: Hard link e Symbolic link.

Hard Link

Sono di fatto una copia di una voce di directory, hanno nomi diversi ma puntano allo stesso inode e quindi condividono esattamente lo stesso dato (oltre agli stessi permessi, data di modifica, owner ecc.).

SymLink

Sono dei piccoli file che contengono un puntamento ad altri file o directory. Questi file hanno i-node autonomo e possono puntare a file di altri file system (sia locali, che di rete). Si possono facilmente visualizzare con un normale ls -l e se viene cancellato o spostato il file a cui puntano rimangono "stale": continuano ad esistere ma puntano a qualcosa che non esiste.
Un symlink appare come avente tutti i permessi aperti a tutti gli utenti, di fatto è trasparente rispetto a permessi e ownership e riflette quelli del file o directory a cui punta.

Cambiare i permessi di lettura, scrittura ed esecuzione

Può succedere di aver bisogno di dover cambiare i permessi ad un file, per consentire la lettura, la scrittura o l’esecuzione ad ogni utente, oppure al contrario per proteggerlo da utilizzi indesiderati e restringerlo ad un particolare utente o gruppo.
Il comando da utilizzare per queste operazioni è chmod.
I permessi chmod sono tipicamente utilizzati dai sistemi operativi UNIX e Linux. Non sono altro che le linee guida che vengono impartite al sistema sugli accessi o non accessi ad una data directory e/o file. Questi sistemi operativi offrono la possibilita di operare con un file facendo la distinzione fra 3 tipi di operatori: Proprietario (User), Gruppo (Group), Pubblici (Others). Per ciascuno di questi utenti é necessario specificare i diversi permessi riguardanti la directory e/o il file in questione. I permessi sono generalmente indicati da alcuni numeri, ovvero:

  • Lettura : permetti l'acceso al file ( 4 )
  • Scrittura : permetti le modifiche del file da parte di un utente ( 2 )
  • Esecuzione : permetti di eseguire lo script ( 1 )

Questi 3 permessi devono essere indicati per ognuno dei 3 tipi di utenti. Ad esempio chmod 755, non é altro che il tipo di permesso che si imposta ad un file, rendendolo:

  • leggibile-scrivibile-eseguibile al proprietario
  • leggibile-eseguibile al gruppo
  • leggibile-eseguibile agli altri utenti

Il permesso chmod 755 si calcola in questo modo:

Permessi proprietario:
Lettura	wikEdTabPlain        si	wikEdTabPlain= 4
Scrittura	wikEdTabPlainsi	wikEdTabPlain= 2
Esecuzione	wikEdTabPlainsi	wikEdTabPlain= 1
Totale	wikEdTabPlain 	wikEdTabPlain        = 7
Permessi gruppo:
Lettura	wikEdTabPlain        si	wikEdTabPlain= 4
Scrittura	wikEdTabPlainno	wikEdTabPlain= 0
Esecuzione	wikEdTabPlainsi	wikEdTabPlain= 1
Totale	wikEdTabPlain 	wikEdTabPlain        = 5
Permessi utenti:
Lettura	wikEdTabPlain        si	wikEdTabPlain= 4
Scrittura	wikEdTabPlainno	wikEdTabPlain= 0
Esecuzione	wikEdTabPlainsi	wikEdTabPlain= 1
Totale	wikEdTabPlain 	wikEdTabPlain        = 5

Affiancando i tre totali si ottiene il permesso 755.
Per cambiare i permessi al file "testo.txt" dovremo quindi agire da autori del file e digitare:

chmod xxx testo.txt

Al posto delle lettere xxx devono essere indicati i numeri ottali visti in precedenza. Ad esempio:

  • 755 – Lettura, scrittura, esecuzione per il proprietario, lettura, esecuzione per il gruppo ed altri utenti.
  • 644 – Lettura, scrittura per il proprietario, lettura per il gruppo ed altri utenti.
  • 666 – Lettura e scrittura per tutti.
  • 700 – Lettura, scrittura, esecuzione per il proprietario, nessun permesso per il gruppo ed altri.

In generale valori che vanno da "0" a "7" rappresentano in forma numerica i permessi come di seguito riportato:

 4 è uguale a lettura(r),
 2 è uguale a scrittura(w),
 1 è uguale a esecuzione(x),
 0 rimuove i permessi.

Il valore numerico risultante è pari alla somma di tali valori.
Partendo sempre da sinistra, la prima cifra si riferisce ai permessi per l'utente proprietario.
La seconda cifra fa riferimento ai permessi per il gruppo proprietario.
La terza e ultima cifra si riferisce ai permessi per gli altri utenti non appartenenti al gruppo proprietario.
Un'altra sintassi utilizzabile è:

chmod u|g|o|a|+rwx  file1/directory1

Significato delle opzioni disponibili del precedente comando:

  u = user - applica i permessi all'utente proprietario del file,
  g = group - applica i permessi al gruppo proprietario del file,
  o = other - applica i permessi ad altri utenti,
  a = all - applica i permessi a tutti gli utenti,
  + = questo operatore logico aggiunge i permessi specificati,
  - = questo operatore logico rimuove i permessi specificati,
  r = indica il permesso di lettura,
  w = indica il permesso di scrittura,
  x = indica il permesso di esecuzione.

Cambiare l'utente proprietario di un file

Per cambiare l'utente e il gruppo proprietari di ciascun file dato (specificato dal primo argomento che non sia un'opzione) si utilizza il comando chown nel seguente modo: se viene dato solo un nome utente (o una user ID numerica), quell'utente diventa proprietario di ciascun file dato, il cui gruppo non viene modificato. Se il nome utente è seguito da : e un nome di gruppo (o una group ID numerica), senza spazi frapposti, allora anche il gruppo proprietario del file viene cambiato.
La sintassi del comando è:

chown [opzioni] utente[:gruppo] file...

Esempi

  • Cambiare il proprietario del file prova.txt
chown ferdy prova.txt
  • Cambiare proprietario e gruppo proprietario del file prova.txt
chown ferdy:gruppo_desiderato prova.txt
  • Cambiare ricorsivamente il proprietario di tutti i file della directory prova
chown -R ferdy prova/

Cambiare il gruppo proprietario di un file

Per cambiare il gruppo proprietario di un file si utilizza il comando chgrp. Il gruppo può essere identificato col nome o con l'ID. La sintassi del comando è:

chgrp [opzioni] gruppo file...

Ad esempio, per cambiare il gruppo proprietario di tutti i file contenuti nella directory prova si digiti:

chgrp -R gruppo_voluto prova/

Ricerca di file nel sistema

Se siamo alla ricerca di un determinato file all’interno del nostro computer, il mio consiglio è andare su Risorse e selezionare Cerca file. In questo modo il processo sarà più rapido e meno macchinoso, ma in questa guida siamo qui per vedere come è possibile farlo anche da terminale.
Il motore di ricerca da terminale si chiama locate e possiamo installarlo normalmente digitando:

apt-get install locate

Esso fa uso di un database ad aggiornamenti costanti, ma non frequenti, pertanto se volessimo ricercare un file di recente creazione, spostamento o immissione nel sistema dovremo prima lanciare il comando di update per questo database. Da root o con permessi sudoer aggiungendo “sudo” prima della sintassi digitiamo:

/usr/bin/updatedb

Attendiamo che l’aggiornamento sia terminato, e poi lanciamo:

locate testo.txt

Scaricare un file da Internet

Da terminale è possibile anche scaricare file da Internet, utilizzando il comando wget con i protocolli HTTP o FTP. Ad esempio se volessimo scaricare il file http://www.sito.it/file.rar, ci basterà digitare:

wget http://www.sito.it/file.rar

Il file sarà messo in download e, una volta scaricato, piazzato nella directory in cui ci trovavamo al momento del lancio del comando.

Sincronizzare il contenuto di due directory

Rsync e' un comando (ed un protocollo) che permette la copia di file via rete, ottimizzando i tempi di backup e ripristino dei dati. Non è presente in un'installazione minimale di Debian; occorre pertanto installarlo col comando:

# apt-get install rsync

La sintassi del comando è la seguente:

# rsync -av --delete /Directory/Sorgente /Directory/Destinazione 

Le opzioni usate hanno il seguente significato:

  • -avr: specifica di copiare i file mantenendo ownership, permessi e in modalità directory recursive
  • --delete: elimina dalla directory di destinazione i file non più presenti nella directory sorgente

Maggiori informazioni qui.

Gestione Utenti

Definizione di root e differenze con il normale utente

Cos’è root?
Nei sistemi operativi di tipo Unix si indica con root l’utente dotato di massimi privilegi, cioè l’amministratore di sistema, detto anche super utente o superuser.
L’account root su sistemi Unix è paragonabile a quello di Administrator su sistemi Windows NT/XP.
L’utente root può fare tutto ciò che si desidera sul sistema: questo può essere sia un vantaggio sia uno svantaggio nello stesso momento. Viene infatti universalmente ritenuto pericoloso compiere le normali sessioni di lavoro in qualità di root: agire come utente normale e come utente root solo per amministrazione del sistema permette di minimizzare il rischio di effettuare operazioni pericolose come cancellare file essenziali per il sistema operativo.
Fonte: Wikipedia

Accesso come root

Per poter accedere come utente root nel sistema, ed avere quindi la possibilità di svolgere ogni operazione nel sistema, basterà digitare da terminale:

su -

Verrà richiesta la password di root e sarà eseguito l’accesso.
Noterete che il prompt del terminale è cambiato, passando da:

$

(che identifica un utente normale)
a:

#

(che identifica l'utente root)

Disconnessione da root

(per tornare utente con permessi normali sulla stessa finestra di terminale)
Se siete diventati root in una finestra di terminale, e volete tornare user senza chiudere la finestra o aprirne un’altra, basterà digitare:

exit

Il comando exit può servire anche per chiudere la finestra del terminale.

Creazione di un nuovo utente

Per creare un nuovo utente da terminale, è sufficiente diventare root, e digitare il comando:

adduser nomeutente

Al posto di “nomeutente”, naturalmente, va scritto il nome dell’utente che volete creare. Saranno richieste la password che si vuole assegnare all’utente, e in più altre piccole informazioni facoltative , come Nome Completo, Stanza N° (?!), Numeri telefonici.

Cancellazione di un utente

Per cancellare un utente registrato nel sistema, aperto il terminale e fatto accesso come utenti root, si digiti:

userdel nomeutente

Dove “nomeutente” deve essere sostituito con il nome dell’utente che si vuole cancellare. Non sono richiesti altri comandi o informazioni e l’operazione avverrà in meno di un secondo.

Modifica della password di un utente

Per la modifica da terminale della password di un utente si utilizza il comando passwd. Facciamo login come utente root e diamo il comando:

passwd nomeutente

mettendo il nome dell’utente a cui vogliamo settare la password al posto di “nomeutente”. Con questo metodo è possibile cambiare non solo le password degli utenti, ma anche quella di root.

Compiere operazioni con sudo

Definizione di sudo

Il comando sudo (super user do) è una stringa di comando usata su sistemi operativi Unix-like per eseguire operazioni ottenendo temporanei privilegi di root (ovvero di amministratore).
A differenza del comando su (substitute user), sudo richiede all’utente solo la propria password, e non quella dell’amministratore; perciò non occorre conoscere password altrui, con ovvi vantaggi sulla sicurezza, ma è sufficiente essere stati precedentemente abilitati. Il file di configurazione /etc/sudoers stabilisce chi può sostituire chi, su quali macchine, e relativamente a quali operazioni.
Fonte: Wikipedia

Installazione di sudo

In una installazione di default di Debian sudo non è compreso. Per installarlo basta digitare:

apt-get install sudo

Configurazione di sudo

Per aggiungere un utente al gruppo di sudoers, è sufficiente loggarsi da root e lanciare il comando:

visudo

Potremo così modificare il file /etc/sudoers ed aggiungere i permessi di sudoer ad un utente specifico.
Un esempio di file /etc/sudoers:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults   env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root   ALL=(ALL) ALL
ferdy  ALL=(ALL) ALL

# Uncomment to allow members of group sudo to not need a password
# (Note that later entries override this, so you might need to move
# it further down)
# %sudo ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

Una volta che il nostro utente sarà abilitato all'utilizzo di sudo, potremo lanciare qualsiasi operazione di sistema che richieda permessi speciali, aggiungendo sudo all’inizio di ogni sintassi. Per esempio, per l’installazione di VLC:

sudo apt-get install vlc

e così via. Il comando sudo è molto comodo, ma ovviamente comporta più rischi per la sicurezza, specialmente nel caso in cui il sistema è utilizzato da più utenti. Usatelo con discrezione.

Gestione del sistema

Visualizzare i processi di sistema in uso e le loro dipendenze

Da terminale abbiamo anche la possibilità di avere la panoramica sui processi in uso dal sistema. Il comando che ci occorre è:

ps -e

Potete anche chiedere uno schema strutturato ad albero se volete avere le idee più chiare sui processi aperti; il sistema avrà cura di raggrupparvi in una bella struttura i processi principali in esecuzione, e poi le loro rispettive dipendenze. Il comando da utilizzare è:

pstree

Forzare la chiusura di un processo

Nel caso in cui vi trovaste con un programma andato in crash, che vi consuma RAM e che non accenna a chiudersi con una normale chiusura, potrete forzarne l’uscita. Il comando che serve per farlo da terminale è:

kill processo

Sostituendo naturalmente la voce “processo” con il nome del responsabile del blocco che volete killare.

Visualizzare in ordine cronologico tutti i comandi digitati

Avete notato che sul terminale, premendo il tasto direzionale in su sulla tastiera vedrete il comando lanciato in precedenza? E che più volte cliccate, più comandi precedenti vengono mostrati?
C’è un metodo più comodo che sfrutta questo sistema di ricordo cronologico dei comandi lanciati:

history

Visualizzare le pagine di manuale

Le man page sono documenti che descrivono il funzionamento e la sintassi di programmi, funzioni e particolari file che compongono il sistema operativo. La quasi totalità dei comandi a disposizione hanno la propria man page che può essere visualizzata mediante il comando man, utilizzando la seguente sintassi:

man comando_di_cui_vogliamo_visualizzare_il_manuale

ad esempio per visualizzare la pagina di manuale del comando ls dobbiamo digitare:

man ls

il quale visualizzerà la pagina di manuale che può essere scorsa e letta tranquillamente e comodamente a video. Per uscire dalla visualizzazione della pagina di manuale dobbiamo premere il tasto q.

Sezioni delle man pages

Come abbiamo detto in precedenza, le pagine di manuale sono una vasta moltitudine (praticamente ogni comando possiede la propria pagina di manuale) e proprio per questo motivo si è scelto di dividere le varie man page in diverse sezioni numerate. Questo sistema è utilizzato in sostanza dalla nascita del sistema operativo GNU/Linux e spesso vi capiterà di incontrare riferimenti a comandi, programmi e anche a funzioni di librerie software assieme al relativo numero di sezione della pagina del manuale come ad esempio man(1). Questa indicazione significa che la documentazione relativa al comando man è inserita all'interno della sezione 1 (comandi utente). Possiamo visualizzare la sezione 1 del manuale per "man" attraverso il comando

man 1 man

Specificare la sezione è utile quando ci troviamo di fronte a casi di argomenti multipli con lo stesso nome. Vediamo qui di seguito quali sono e come sono suddivise le varie sezioni di man:

  • Sezione 1 comandi utente (soltanto l'introduzione)
  • Sezione 2 chiamate di sistema
  • Sezione 3 chiamate delle librerie C
  • Sezione 4 dispositivi (es.: hd, sd,)
  • Sezione 5 formati dei file e protocolli (es.: wtmp, /etc/passwd, nfs)
  • Sezione 6 giochi (introduzione)
  • Sezione 7 convenzioni, pacchetti macro, etc. (es.: nroff, ascii)
  • Sezione 8 amministrazione di sistema (soltanto l'introduzione)

Modificare la priorità di un processo

nice è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX[1], che esegue un altro comando modificando il suo valore di nice.
Il valore di nice è un attributo numerico di ciascun processo dei sistemi Unix e Unix-like che è usato dallo scheduler per stabilire quanto tempo di CPU dedicare all'esecuzione del processo. A parità di priorità e di politica di schedulazione, i processi che hanno valori di nice maggiori ottengono in proporzione meno tempo di CPU rispetto a processi che hanno valori di nice minori, e quindi la loro esecuzione procede più lentamente, favorendo gli altri processi. L'idea generale è che un utente si comporti in maniera cortese (la traduzione dalla lingua inglese del termine nice è appunto cortese, simpatico) nei confronti degli altri utenti quando avvia elaborazioni particolarmente lunghe ed intense, avviandole con un valore di nice elevato in modo da non rallentare eccessivamente l'esecuzione dei processi degli altri utenti.
/ nice è anche il nome di una chiamata di sistema definita dallo standard POSIX che modifica il valore di nice del processo che la invoca. Di fatto il comando nice opera invocando l'omonima chiamata di sistema. Per diminuire il valore di nice è necessario disporre dei privilegi dell'amministratore (root), mentre ciò non è necessario per aumentarlo. Tipicamente è possibile diminuire il valore di nice fino a 20 unità rispetto al valore predefinito, o aumentarlo fino a 19 unità: è possibile specificare scostamenti più ampi, ma essi sono automaticamente ricondotti entro i limiti sopra citati.

Uso

La sintassi generale di nice è la seguente:

nice [opzioni] [--] comando [arg1 [arg2 …] ]

Il parametro comando indica il comando da eseguire, ed i parametri facoltativi arg i suoi parametri.
Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.
Tra le opzioni significative vi sono:

  • -n delta: somma algebricamente il valore delta al valore di nice, in modo da aumentarlo o diminuirlo; delta può essere negativo, in modo da privilegiare il programma rispetto agli altri, ma in tal caso occorre disporre dei privilegi dell'amministratore (root). Se l'opzione -n non è specificata, il comportamento predefinito prevede di aggiungere 10 al valore di nice;

Esempi

Avvia parallelamente due copie del programma factor, ciascuna delle quali calcola i fattori primi del numero 4611686018427387903, misurando il tempo di esecuzione tramite il comando time: la prima copia viene eseguita con un valore di nice elevato (aumentato di 20 unità rispetto al normale), mentre la seconda usa il valore di nice predefinito. Entrambe le copie impiegano lo stesso tempo di CPU per effettuare il calcolo, ma la prima copia è svantaggiata e (su un sistema con una sola CPU) completa il suo calcolo ben dopo la seconda:

time nice -n 20 factor 4611686018427387903 &
time factor 4611686018427387903 &

Gestione del File System

Se non si ha chiaro cosa sia un file system si veda prima questa pagina introduttiva.

Lista dei File System montati

Se si avesse l’esigenza di conoscere i File System montati nel sistema, utile per sapere come sono allocati in /dev, che tipo di permessi di lettura e scrittura si hanno in essi, e così via, si può semplicemente lanciare da qualunque utente il comando:

mount

Per ottenere in output la lista che cerchiamo.
Il file che dice a Linux quali dispositivi vanno montati all'avvio del sistema e dove vanno montati è /etc/fstab.

Connessione di nuove risorse

Info.png Nota
Dischi ottici, dischi rigidi, memorie usb e partizioni remote sono tutti esempi di risorse, ovvero di filesystem esterni che un utente può agganciare a quello locale della macchina in uso.

L'operazione di montaggio (in inglese mount) di una risorsa permette di "agganciare" un dispositivo tra quelli elencati in /dev a una directory del file system, per renderlo utilizzabile all'interno del sistema.
Collegato ad esempio un nuovo disco fisso al PC ed ipotizzato che questo sia identificato da Linux come /dev/hdd1 è possibile renderlo raggiungibile sotto una certa directory arbitraria, per esempio /mnt, tramite la seguente procedura:

  1. creare all'interno di /mnt una directory a cui "agganciare" il disco:
    # mkdir /mnt/disco_dati
  2. eseguire il mount del disco:
    # mount -t auto /dev/hdd1 /mnt/disco_dati

L'opzione -t auto dice a Linux di riconoscere automaticamente il filesystem con cui il nostro disco è stato formattato.
Da questo momento i dati contenuti nel nostro hard disk saranno raggiungibili andando nella directory /mnt/disco_dati.
Il principale pregio di mount risiede nell'elevato numero di filesystem supportati, nativamente o ottraverso appositi pacchetti che ne estendono le capacità. Esistono quattro tipi di sintassi generica (si veda il manuale), qui di seguito si descrive solo l'ultima:

# mount [-fnrsvw] -t tipo_fs -o fsopzione1,fsopzione2,ecc. /origine/risorsa /punto/montaggio
  • [-fnrsvw], sono opzioni specifiche e facoltative dell'eseguibile mount, si veda il manuale per il significato di ciascuna lettera.
  • -t, specifica il tipo di filesystem che verrà montato, ad esempio auto,ext3,fat, ecc. Come già scritto auto incarica mount di capire autonomamente che filesystem si andrà a montare.
  • -o, specifica una o più opzioni relative al filesystem. Esistono sia opzioni valide per tutti i filesystem, altre specifiche dei singoli filesystem e infine altre utili solo se dichiarate nel file /etc/fstab
  • /origine/risorsa, indica semplicemente dove andare a prendere il filesystem della risorsa, per esempio /dev/sdc nel caso del disco rigido o chiavetta usb identificata dalla lettera "c".
  • /punto/montaggio, in quale directory (che deve già esistere) sarà visibile il contenuto della risorsa montata.

Di seguito alcuni esempi specifici.

Montaggio di una pendrive USB

Se dovesse capitare di dover montare un dispositivo USB senza poter usufruire del montaggio automatico fornito da molti Desktop Environment, è possibile farlo facilmente da terminale.

  1. Innanzitutto bisogna verificare a quale device è associato il dispositivo. Eseguire, prima di inserire la pendrive, il comando:
    # fdisk -l
  2. Inserire la pendrive e rieseguire lo stesso comando; la differenza tra i due output fornirà il device.
  3. A questo punto si può montare la pendrive creando prima un punto di mount:
    # mkdir /mnt/lamiapendrive
    per poi passare al montaggio vero e proprio:
    # mount -t auto /dev/sdb1 /mnt/miapendrive
    In questo esempio si è supposto che la pendrive sia associata al device sdb e che sdb1 sia la partizione da montare.

Ora è possibile utilizzare la directory /mnt/miapendrive per tutte le operazioni che dobbiamo svolgere. Ad esempio si possono visualizzare i file contenuti sulla pendrive:

# ls -l /mnt/miapendrive

Copiare file sulla pendrive:

# cp /etc/network/interfaces /mnt/miapendrive

Cancellare file dalla pendrive:

# rm /mnt/miapendrive/filedacancellare.txt

Alla fine, per smontare il dispositivo:

# umount /mnt/miapendrive

Montaggio di un immagine ISO

Il comando mount viene molto utile quando abbiamo un'immagine ISO di un CD-Rom e vogliamo vederne il contenuto senza masterizzarla:

mount -t iso9660 -o loop /cartella/immagine.iso /cartella/di/montaggio

Montaggio di una partizione NTFS

Per montare una partizione formattata NTFS occorre che sia installato il pacchetto:

# apt-get install ntfs-3g

Quindi si proceda come visto in precedenza:

# mkdir /mnt/disco_ntfs
# mount -t ntfs-3g /dev/sdb1 /mnt/disco_ntfs

E' possibile eseguire automaticamente all'avvio di Debian il montaggio di una partizione NTFS aggiungendo al file /etc/fstab la seguente riga:

/dev/sdb1       /mnt/disco_ntfs       ntfs-3g rw,users,suid,umask=000 0       0

Montaggio di una partizione NFS

Si veda questa pagina .

Montaggio di una cartella SAMBA

Si veda questa pagina .

Disconnessione di una risorsa già presente

Se volessimo al contrario "sganciare" un disco dal nostro sistema, ci servirà il comando:

umount /cartella/da/smontare/

Ad esempio:

umount /mnt/disco_dati

Da questo momento il nostro disco non sarà più raggiungibile.

Warning.png ATTENZIONE
State attenti a non eseguire lo smontaggio di dischi di sistema o potreste rendere inutilizzabile il vostro PC


Cercare le directory che occupano più spazio

Il seguente comando permette di ricercare le directory di dimensioni più grosse all'interno del nostro filesystem. Il comando ricerca le sottodirectory a partire dalla directory corrente.

# du -sk * | sort -rn

Gestione dell'Hardware

Ricavare informazioni sul sistema

Il comando uname restituisce in output diverse informazioni sul sistema. La sintassi del comando è:

uname [OPZIONE]...

Le opzioni che possiamo passare al comando sono:

  • -s: Mostra il nome del kernel
  • -n: Mostra il nome dell'host nel nodo di rete
  • -r: Release del kernel
  • -v: Versione del kernel
  • -m: Nome hardware della macchina
  • -p: Tipo di processore
  • -i: Piattaforma hardware
  • -o: Sistema Operativo
  • -a: Mostra tutte le opzioni precedenti

Lista delle periferiche USB montate

Quando abbiamo bisogno di venire a conoscenza delle periferiche USB collegate al sistema (utile, spesso, per sapere se in qualche modo il nostro sistema ha riconosciuto una determinata periferica), possiamo lanciare, da root o con “sudo”, il seguente comando:

lsusb

Avremo la lista delle porte USB nel nostro PC, e in caso di loro occupazione avremo nella riga della porta USB occupata il nome della periferica connessa, solitamente composto da marca e modello della stessa.

Lista delle schede PCI montate

Quando abbiamo bisogno di venire a conoscenza delle periferiche PCI collegate al sistema (utile, spesso, per sapere se in qualche modo il nostro sistema ha riconosciuto una determinata periferica), possiamo lanciare, da qualsiasi posizione, il seguente comando:

lspci

Avremo la lista delle schede PCI collegate, inclusa la scheda video.

Visualizzare lo spazio libero sui dischi

Se vogliamo avere una veloce panoramica dello spazio libero di tutti i File System montati ci basta utilizzare il comando:

df -h

L'opzione -h dice al comando di fornire l'output in un formato facilmente comprensibile.

Visualizzare lo stato della memoria RAM e della cache

Per visualizzare lo stato di utilizzo della RAM e della cache si digiti:

free

Visualizzare l'utilizzo delle risorse del sistema

Il programma top fornisce una visualizzazione in tempo reale della situazione sull'utilizzo delle risorse di sistema attraverso una tabella dell'attività principale della CPU. top mostra la lista dei task del sistema che fanno un utilizzo più intenso della CPU e mette a disposizione un'interfaccia interattiva per la manipolazione dei processi. I task possono essere ordinati in base all'utilizzo della CPU, all'utilizzo della memoria e al tempo di esecuzione. L'utilizzo più semplice di top prevede la seguente sintassi:

top [opzioni]

Mentre top è in esecuzione sono riconosciuti diversi comandi ‘‘single-key’’ che sono di seguito descritti:

  • h Mostra un schermata d’aiuto che da una breve sommario dei comandi e lo stato dei secure e cumulative mode.
  • k Killa un processo. Sarà chiesto il PID del task, e il signal da inviare.
  • q Esce da top
  • s Cambia l’intervallo di aggiornamento. Sarà richiesto di specificare il nuovo intervallo da utilizzare (da esprimere in secondi).
  • m Disabilita (riabilita) la visualizzazione delle informazioni sulla memoria.
  • t Disabilita (riabilita) la visualizzazione delle informazioni sui processi e sullo stato della CPU.
  • M Ordina i task in base all’uso di memoria residente.
  • P Ordina i task in base all’uso della CPU (default).
  • T Ordina i task in base al tempo (o al tempo cumulativo).
  • W Salva la configurazione corrente all'interno del file ~/.toprc

Il comando top inoltre può essere lanciato specificando alcune opzioni in base alle nostre esigenze. Qui di seguito riportiamo quelle più importanti:

top -d secondi

Consente di specificare l'intervallo di aggiornamento utilizzato da top espresso in secondi

top -s 

Disabilita alcuni comandi in modo interattivo. Questa opzione torna utile quando si vuole lasciare funzionare top in un terminale separato evitando incidenti.

top -i

Consente la visualizzazione dei processi inattivi o defunti (chiamati anche zombie)

top -c

Permette di visualizzare la riga di comando, invece del solo nome del programma.
In alternativa a top possiamo utilizzare il programma htop che è modo simile a top, ma offre la possibilità di scorrere l'elenco di tutti i processi e mette a disposizione comandi interattivi più intuitivi e comodi.

Varie

Arresto del sistema

Per spegnere il PC direttamente da terminale, si può lanciare uno dei comandi seguenti:

halt

oppure

shutdown -h now

dove

  • -h indica che vogliamo arrestare il sistema.
  • now indica che non deve trascorrere del tempo prima che il sistema inizi la procedura di spegnimento.

Serve essere root o avere i permessi di sudoer (aggiungere sudo all’inizio della sintassi) affinché il comando vada a buon fine.

Riavvio del sistema

Per riavviare il PC direttamente da terminale, si può lanciare uno dei comandi seguenti:

reboot

oppure

shutdown -r now

dove

  • -r indica che vogliamo riavviare il sistema.
  • now indica che non deve trascorrere del tempo prima che il sistema inizi la procedura di riavvio.

Serve essere root o avere i permessi di sudoer (aggiungere sudo all’inizio della sintassi) affinché il comando vada a buon fine.

Visualizzare data e ora del sistema

È una cosa un po' inutile, ma alle volte può far comodo. Potete vedere data e ora del sistema semplicemente digitando:

date

Lanciare applicazioni e programmi da terminale

Ora che abbiamo preso dimestichezza con i comandi principali di un terminale Linux possiamo utilizzare la seguente guida per provare a svolgere da terminale anche il nostro lavoro quotidiano. I limiti di utilizzo del terminale Linux sono dati solo dalla nostra fantasia.
Elenco programmi da terminale: Elenco_programmi_senza_interfaccia_grafica

Approfondimenti

Sitografia

http://vicsteele.wordpress.com/comandi/
http://linuxpedia.netsons.org
http://www.wikipedia.org



Guida scritta da: Ferdybassi 15:14, 22 dic 2009 (CET) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized