F.A.Q. Linux

20 / 100
()

F.A.Q. Linux

Fonte: https://www.mrw.it/

1 Differenze tra su e sudo in Linux

su e sudo, vengono considerati a torto due comandi intercambiabili quando si lavora da riga di comando su sistemi operativi Linux based come per esempio Ubuntu; in realtà, è possibile elencarne le differenze a partire da una semplice definizione di su, che possiamo descrivere come un comando il cui scopo principale (o utilizzo più frequente) è quello di consentire l’avvicendamento tra utenti durante le sessioni di login.In termini più semplici, su permette di assumere l’identità di un altro utente senza la necessità di dover operare il logout e una nuova fase di autenticazione; a questo proposito su viene utilizzato spesso per impersonare l’utente di root, o il “superuser”, a partire da un utente dotato di minori privilegi; in realtà però si potrebbe adottare il medesimo comando per passare a qualsiasi altro utente sia stato attivato sul sistema.

Differenza tra sudo e su in Linux

Il comando su

Il comando su serve praticamente per “diventare” un altro utente ereditandone identificativo, identificativo del gruppo, privilegi, permessi d’esecuzione e di navigazione ed in alcuni casi anche variabili d’ambiente, alias, percorsi predefiniti e quant’altro – all’interno di una shell o di un terminale virtuale.

La sua sintassi di base è

su <parametro_opzionale> nomeutente

Se invocato senza parametri il nomeutente viene impostato automaticamente a “root”, per cui digitare

su root

e digitare

su

portano esattamente allo stesso risultato: dopo la richiesta della password si diventa letteralmente l’utente root, senza quindi restrizioni di alcun tipo sul sistema.

E’ possibile uscire dalla sessione inizializzata con “su” utilizzando il comando exit.

Il comando sudo

Il comando sudo, sebbene nelle più comuni configurazioni di sistema si utilizzi per guadagnare privilegi elevati (ma non per diventare l’utente root), ha un utilizzo molto più complesso.

Esso infatti permette di ottenere particolari privilegi, in accordo con quanto definito nel suo file di configurazione (/etc/sudoers), non appartenenti di default alla propria tipologia di utente.

La sua sintassi di base è

sudo <parametro_opzionale> comando_da_eseguire

Già qui sta la prima differenza rispetto a su: il comando sudo infatti prende come input un comando – non un utente – e, come accennato poc’anzi permette, di eseguire il comando passato in input con i privilegi definiti nel file /etc/sudoers, impostando provvisoriamente (di default per 15 minuti) alcuni particolari bit per far sì che ciò accada.

In sostanza il comando sudo permette di fare ciò che farebbe un utente “privilegiato” senza il bisogno di possedere la sua password.

Di norma, infatti, la password per l’esecuzione dei comandi attraverso “sudo” coincide con la password utente.

Il file /etc/sudoerspermette di definire quali utenti possano ottenere privilegi elevati (o quantomeno differenti dai predefiniti) invocando il comando sudo; esso permette inoltre di definire nel dettaglio quali comandi possano essere eseguiti da tali utenti in caso di accesso privilegiato.

E quindi ? Quale e’ la differenza?

Di fondo la chiave è proprio la modalità di esecuzione dei comandi: con su si diventa root, con sudo invece potrete si agisce anche con privilegi di utente root senza però possederne le credenziali d’accesso.

In termini di sicurezza, specie se in un sistema multi-utente, è bene configurare a dovere il file /etc/sudoers per decidere quale utente può ottenere privilegi di root su determinati (o tutti i) comandianziché mettere a disposizione la password di root a chiunque.

Ad esempio: immaginate di gestire un piccolo server, di aver bisogno di una mano per eseguire i piccoli task giornalieri e di assumere un sistemista per farlo.

Dando al sistemista la password di root – quindi permettendogli di usare su -, nel momento in cui costui smetterà di lavorare per voi sareste costretti a cambiarla (con tutte le conseguenze del caso).

Dandogli invece la possibilità di eseguire azioni privilegiate tramite il comando sudo, qualora il sistemista smettesse di lavorare per voi basterà eliminare il suo nome utente dal file /etc/sudoers ed eliminare successivamente il suo account.

2 A cosa serve la tilde nei sistemi Linux?

Grazie alla grande disponibilità di intefacce utente per le applicazioni destinate a questo sistema operativo, quando si lavora su Windows l’utilizzo del Prompt per l’esecuzione di istruzioni risulta essere abbastanza raro; questo accade soprattutto se le proprie operazioni non prevedono l’interazione con framework per lo sviluppo server side o con Database engine. Su Linux il discorso è un pò diverso, infatti, nonostante l’evoluzione delle UI, il Terminale rimane uno strumento prezioso per gli utilizzatori del Pinguino, affermazione ancora più vera per quanto riguarda Unix. Accade così di dover impiegare su Linux dei caratteri che su altre piattaforme vengono sfruttati molto di rado, anche dagli sviluppatori; un esempo di ciò è la tilde (“~”); quest’ultima risulta particolarmente utile in quanto, se presente in un percorso, rappresenta la directory “/home” dell’utente corrente, per cui quest’ultima sarà raggiungibile attraverso il semplice comando:

cd ~
Inoltre, se per esempio si desidera cancellare un file da Shell, sarà possibile utilizzare un’istruzione come la seguente:

rm /home/eliox/Scrivania/estate_2011.avi

oppure si potrà ricorrere direttamente alla tilde che punterà automaticamente alla Scrivana dell’utente:

rm ~/Scrivania/estate_2011.avi

Da notare che nel contesto dei file system Unix e Linux la tilde rappresenta la user home indipendentemente dall’utente di riferimento, quindi, in sede di sviluppo o di programmazione questa risulterà particolarmente utile per la realizzazione di applicazioni portabili che possano funzionare facendo riferimento a nomi utente differenti.

Cominciamo subito col dire che l’influenza della temperatura sulle prestazioni dei processori è probabilmente sopravvalutata, si tratta sicuramente di un fattore importante ma non tanto da giustificare le cosiddette “sindromi da benchmark” che affliggono i maniaci delle performances, tanto più in considerazione del fatto che attualmente le CPU sono in grado di supportare temperature particolarmente elevate. In ogni caso, l’esigenza di verificare anche questo aspetto della propria macchina non è affatto criticabile, su Linux sarà per esempio possibile utilizzare un tool apposito denominato Lm Sensors il quale è disponibile tramite i repository ufficiali di tutte le principali distribuzioni basate sul Kernel del Pinguino.
Vediamo di seguito come installare questo tool su Ubuntu (o Debian). Per farlo digitiamo la seguente istruzione da linea di comando:

sudo apt-get install lm-sensors

3 Linux: verificare temperatura della CPU

Fatto questo si dovrà passare alla fase necessaria per il riconoscimento della configurazione hardware corrente, a tale scopo si dovrà lanciare l’istruzione:

sudo sensors-detect

Ora si potrà procedere con la verifica della temperatura, cioè con l’operazione per la quale è stata installata l’applicazione; in questo caso sarà sufficiente inviare il comando:
sensors
Il comando supporta anche la visualizzazione del livello di temperatura raggiunto dai singoli core, per cui si digiterà l’istruzione seguente per i dual-core:

sensors -u coretemp-isa-0000

mentre per i quad-core si dovrà lanciare l’istruzione:

sensors -u coretemp-isa-0004

Forti differenze di valori tra i vari core, così come elevati scostamenti dei livelli di temperatura della CPU da quelli indicati dalla casa madre, potranno essere considerati come anomalie da correggere.

4 Come conoscere i componenti hardware del mio computer Linux?

Una delle domande più frequenti che mi vengono poste sui forum di discussione a cui partecipo è la seguente: “come è possibile visualizzare l’hardware installato sul mio computer Linux tramite linea di comando?”. Se non si dispone di un’apposita app che da Desktop ci fornisca la risposta desiderata possiamo ugualmente risolvere semplicemente da linea di comando.


Attraverso il comando lshw il nostro sistema Linux ci restituirà l’elenco dei dispositivi interni sotto forma di un semplice listato.Se non impersoniamo già l’utente di Root dovremo farlo obbligatoriamente, il comando che proporrò è utilizzabile soltanto dall’utente amministratore di un sistema Linux; digitiamo quindi:


Il comando lshw

su root
(o semplicemente “su”), a questo punto sarà possibile lanciare il comando desiderato:

lshw
Così facendo otterremo un listato molto dettagliato. In alernativa possiamo utilizzare:

lshw -short
Grazie al quale avere una lista più concisa e di facile lettura.

Elenco periferiche PCI
Se lo si desidera, è possibile anche visualizzare la lista completa delle periferiche PCI disponibili:

lspci
Elenco periferiche USB
Oppure far restituire al sistema l’elenco delle porte USB presenti per una specifica postazione:

lsusb
Il comando hwinfo
Anche questo comando, come il precedente, genera un listato dell’hardware del sistema ma ha la particolarità di dividere i componenti in categorie (schede grafiche, suono, archiviazone, ecc.). Il suo utilizzo comune è:

hwinfo –short
Utilizzare inxi
inxi non è un comando di Linux ma uno script molto utile che consente di generare report molto dettagliati circa l’hardware installato nel sistema. La pagina ufficiale del progetto è disponibile a questo link.

Se non trovate inxi nel repository del vostro OS potete installarlo semplicemente in questo modo:

wget -O inxi https://github.com/smxi/inxi/raw/master/inxi && chmod +x inxi
Una volta installato proviamo a lanciarlo in questo modo:

inxi -F
Il comando restituirà una panoramica dettagliata del sistema operativo e dell’hardware del computer in uso. Volendo possiamo anche esportare l’output in un file di testo in questo modo:

inxi -F > dettaglio.txt
Il file “dettaglio.txt” verrà creato nella nostra home directory.

5 Come svuotare la memoria Cache in Linux?

La memoria cache è stata creata perché, anche quando un processore garantisce elaborazioni a velocità elevata, la velocità fornita dal disco può non essere sufficiente, ciò significa che le prestazioni verranno decrementate dai tempi di attesa della CPU; la memory cache non è altro che una porzione di memoria in cui vengono salvati dei dati che, altrimenti, dovrebbero essere continuamente scritti/letti sul disco. Essendo particolarmente veloce, la memoria cache consente di ridurre il decremento di prestazioni dovuto al divario in termini di velocità tra processore e flusso di dati da e verso il disco rigido.
Può capitare, a volte, che le prestazioni del sistema decrementino a causa della saturazione di questa memoria. In tali situazioni può essere utile procedre ad una sua pulizia.

6 Come svuotare la memoria cache in Linux


Per ripulire a fondo la memory cache nei sistemi operativi Linux è sufficiente digitare un semplice comando all’interno della shell. Ecco cosa digitare:

sync; echo 1 > /proc/sys/vm/drop_caches
Dopo aver lanciato il comando la memoria cache del vostro sistema sarà libera per nuovi usi.

Automatizzare la procedura di pulizia della cache
Volendo è anche possibile automatizzare il processo di pulizia della memoria cache. Per farlo si crei uno script con il seguente contenuto:

! /bin/bash

sync
echo 1 > /proc/sys/vm/drop_caches
Salviamolo e rendiamolo eseguibile dopodiché impostiamo un’operazione pianificata per lanciarlo all’intervallo di tempo desiderato (ad esempio ogni 30 minuti).

7 A cosa serve /dev/null in Linux?

Nei sistemi operativi Unix-like (come Linux, appunto), la notazione /dev/null corrisponde ad un file virtuale che ha la peculiare caratteristica di non memorizzare i dati che gli vengono inviati. In alter parole: su questo file virtuale è possibile scrivere qualsiasi cosa ma ogni volta che si cercherà di leggerlo non si otterrà alcun dato, proprio perché nessun dato viene memorizzato.

Solitamente /dev/null viene utilizzato per il reidirizzamento dell’output quando indesiderato: indicando /dev/null al termine di un comando di Linux, infatti, il sistema operativo non produrrà alcun output a video, in quanto questo verrà trasmesso, appunto, a /dev/null che, come abbiamo detto, non farà assolutamente nulla se non “mangiare i dati” senza salvarli da nessuna parte.

Per lanciare un comando all’interno della Shell di Linux senza la produzione di alcun output a video, quindi, si è soliti utilizzare la seguente sintassi:

comando &> /dev/null

E’ bene sottolineare che il rischio di una simile operazione è che non verranno stampati nemmeno eventuali messaggi di errore, quindi è bene utilizzare questa possibilità in modo attento onde evitare di perdere preziosi dati per l’eventuale debug degli errori di sistema.
Qualora si desideri reindirizzare a /dev/null solo lo standard output, ma non gli errori, la sintassi da utilizzare sarà:

comando 1> /dev/null

Viceversa, se si volesse inviare solo gli errori:

comando 2> /dev/null

8 Come faccio a conoscere il gruppo a cui appartiene un utente?

Per conoscere il/i gruppo/i di appartenenza di un utente si utilizza il comando groups. Se digitato da solo restituirà l’elenco dei gruppi dell’utente col quale siamo loggati al sistema.

Qualora, invece, si desideri conoscere l’elenco dei gruppi di appartenenza di un dato utente, la sintassi da utilizzare sarà semplicemente:

groups nome_utente

9 Come faccio a spegnere il mio sistema Linux da terminale?
Attraverso il terminale SSH è possibile svolgere l’operazione di spegnimento (shutdown) mediante l’utilizzo dell’apposito comando. Ad esempio:

sudo shutdown -h now
spegnerà immediatamente il sistema. Se si desidera spegnere il computer entro un tempo prestabilito si utilizzerà:

sudo shutdown -h +30
(per spegnere il computer tra trenta minuti)

oppure

sudo shutdown -h 3107130830
(per spegnere il computer il giorno 31-07-2013 alle 08:30)

In alternativa è anche possibile utilizzare:

sudo halt
o
sudo poweroff

9 Come faccio ad assegnare un utente ad un gruppo?
E’ possibile farlo in fase di creazione di un nuovo utente, utilizzando il comando useradd in questo modo:

useradd -G nome_gruppo nuovo_utente
Il nuovo utente verrà assegnato automaticamente al gruppo specificato. Si noti che qualora il gruppo non esista questo verrà creato automaticamente.
Qualora, invece, si desideri assegnare un utente già esistente si utilizzerà il comando usermod in questo modo:

usermod -G nome_gruppo nome_utente

10 Come faccio a copiare tutto il contenuto di una cartella?
Per copiare tutti i file presenti in una cartella è sufficiente utilizzare * (wildcards). Se sei desidera copiare anche le sorro-cartelle ed i file in esse contenuto sarà sufficiente aggiungere l’opzione -R.

Per copiare tutto il contenuto di una cartella, quindi, spostiamoci al suo interno e digitiamo:

cp -R * /cartella_di_destinazione/

11 Come faccio a cercare una stringa tra più file presenti in una data cartella?

E’ possibile effettuare questo tipo di ricerca utilizzando il comando grep in questo modo:

grep -r -i “stringa da cercare” /percorso/della/cartella/
Così facendo il sistema cercherà la stringa all’interno di tutti i file presenti nella citata cartella ed eventuali sotto-cartelle.

12 Cercare file su Linux: il comando find

Utilizzare find per cercare in base al nome
Se volessimo cercare in base al nome useremo l’opzione -name, in questo modo:

find /directory/dove/cercare/ -name file_da_cercare
Se ad esempio volessimo cercare in tutta la macchina tutti i file che si chiamano “pippo.jpg”, useremo:

find / -name “pippo.jpg”
Attenzione: così facendo la ricerca è case sensitive, cioè distingue tra minuscole e maiuscole. Se volessimo fare una ricerca che non consideri questa differenze dovremo usare l’opzione -iname (che si dice, appunto, case insensitive).

find / -iname “pippo.jpg”
Così facendo otterremo anche “Pippo.jpg” o “PIPPO.jpg”.

Si noti che find supporta anche il carattere speciale asterisco (* o wildcard) che consente di indicare “qualsiasi stringa”. Ad esempio:

find / -name “*.jpg”
consente di trovare tutti i file che hanno come estensione JPG.

Interessante anche l’opzione -not che consente di invertire l’esito di una ricerca. Si supponga, ad esempio, di voler trovare tutti i file che hanno una estensione diversa da JPG:

find / -not -name “*.jpg”

Utilizzare find per cercare in base alla data di creazione o modifica
Se volessimo cercare in base alla data di creazione del file useremo l’opzione -ctime (Last Change Time) seguita dall’età (espressa in giorni) del file da cercare.

find /directory/dove/cercare/ -ctime età_in_giorni

Se ad esempio volessimo cercare nella directory /home/web/miosito/ un file creato o modificato 7 giorni fa useremo:

find /home/web/miosito/ -ctime 7

Se volessimo trovare file e cartelle più vecchi di 7 giorni useremmo:

find /home/web/miosito/ -ctime +7

Se volessimo trovare file e cartelle con meno di 7 giorni useremmo:

find /home/web/miosito/ -ctime -7

Oltre a -ctime esistono altre due interessanti opzioni per le ricerche basate sulle date, si tratta di -atime (Last Access Time) e -mtime (Last Modification Time). La prima opzione consente di cercare file in base all’ultima data di accesso, la seconda in base alla data di ultima modifica del file.

La differenza tra -ctime e -mtime sta nel fatto che la prima opzione considera anche i cambiamenti nei metadati (ad esempio utente o gruppo proprietario) mentre il secondo considera solo le modifiche ai contenuti del file.

Utilizzare find per cercare in base alla dimensione
Se, per finire, volessimo cercare in base al peso del file useremo l’opzione -size seguita dalla dimensione in Kb. Così facendo find restituirà tutti i file di dimensione uguale o superiore alla misura indicata.

find /directory/dove/cercare/ -size dimensione_del_file
Se ad esempio volessimo cercare nella directory /home/web/miosito/fotografie/ tutti i file con dimensione esatta di 100 Kb scriveremo:

find /home/web/miosito/fotografie/ -size 100k
Se, viceversa, cercassimo file più piccoli di 100 Kb utilizzeremmo:

find /home/web/miosito/fotografie/ -size -100k
Per cercare file più grandi di 100 Kb, invece, scriveremo:

find /home/web/miosito/fotografie/ -size +100k
Come potete vedere la dimensione è espressa da un numero seguito dall’unità di misura. Le unità di misura accettate da find sono le seguenti:

b: 512-byte blocks (default)
c: bytes
w: two-byte words
k: Kilobytes
M: Megabytes
G: Gigabytes
Trovare file di grandi dimensioni

A volte è necessario fare un po’ di pulizia all’interno del proprio computer, magari per liberare spazio da un hard-disk sempre più intasato di file. Il modo più semplice per liberare spazio, ovviamente, è quello di eleiminare file di grandi dimensioni non più utili o comunque troppo ingombranti.

Per trovare i file di grandi dimension all’interno del nostro OS Linux non dovremo far altro che utilizzare find nel modo appena visto, specificando un valore molto grande:

find -size +100M
Attraverso il comando find e l’opzione -size abbiamo chiesto al sistema di elencare tutti i file di dimensioni maggiori di 100 Mb.

Volendo possiamo anche filtrare i risultati escludendo dal listato certe tipologie di file, ad esempio:

find -size +100M -not -name *.mp4
Con questa istruzione otterremo un elenco di file con dimensioni maggiori di 100Mb ma andremo ad escludere i file mp4.

Ordinare i risultati in base alla dimensione del file

Come avrete notato, il comando find non ordina i risultati secondo il criterio a noi più utile. Sarebbe comodo, infatti, che i file trovati venissero orinati dal più grande al più piccolo.

Per ottenere questo risultato abbiamo bisogno di utilizzare un’istruzione più complessa:

find -size +100M -exec ls -sh {} ; | sort -n -r | head -10
In pratica abbiamo lanciato find e poi, attraverso exec, il comando ls. Dei risultati ottenuti abbiamo fatto il sorting e poi abbiamo limitato la visualizzazione ai primi 10 risultati.

Utilizzare find per trovare file e cartelle di uno specifico utente
Per fare questo tipo di ricerca utilizzeremo -user in questo modo:

find /directory/dove/cercare/ -user nome_dell_utente
Utilizzare find per scovare file e cartelle vuote
Un altro interessante utilizzo di find consiste nella capacità di trovare file e directory vuote. Per farlo useremo questa sintassi:

find /directory/dove/cercare/ -empty
Se volessimo limitare la ricerca alle sole cartelle aggiungeremo -type seguito dal valore “d” (che indica le directory):

find / -type d -empty
Per cercare solo file useremo, invece, il valore “f”:

find / -type f -empty
Limitare la profondità della ricerca
Come detto le ricerce con find possono essere piuttosto lente, per questo motivo può essere utile limitare la profondità della ricerca. A tal fine si ricorre a -maxdepth seguito dal numero di livelli in cui cercare.

Se volessimo cercare solo nella cartella corrente (e non anche nelle sue eventuali sotto-cartelle) utilizzeremo:

find / -maxdepth 1 -name “pippo.jpg”
Con questo comando cercheremo i file che si chiamano “pippo.jpg” solo nella cartella corrente.

Cancellare i file trovati con find
Un altro comodo utilizzo di find riguarda la cancellazione di file. Si supponga, ad esempio, di voler trovare e cancellare i file temporanei (contraddistinti da estensione “.temp”).

Per farlo ricorreremo a questa sintassi:

find / -name “*.temp” -delete
Come potete vedere si tratta di una semplice ricerca al cui termine viene aggiunta l’istruzione -delete.

13 Dove posso vedere un elenco di tutti gli utenti del sistema?
Un sistema Linux prevede in genere la presenza di un Root, l’utente “plenipotenziario” di cui abbiamo parlato spesso nei nostri post, e di una serie di utenti con poteri e privilegi inferiori; soprattutto nei sistemi collaborativi, è possibile che il numero di utenti definiti sia anche molto alto creando qualche problema di gestione; per prendere le necesarie contromisure sarà quindi necessario conoscere innanzitutto l’informazione relativa a chi sono gli utenti che hanno la possibilità di operare sul sistema.

Per vedere un elenco completo di tutti gli utenti del tuo sistema operativo Linux devi digitare:

cat /etc/passwd
L’elenco che viene mostrato, tuttavia, include anche gli utenti “non umani” creati cioè dal sistema per assolvere a determinati compiti.
Per vedere solo gli utenti “umani” è possibile utilizzare due sintassi. La prima è questa:

cat /etc/passwd | grep 500*

Questo comando stampa un elenco di utenti con User ID uguale o superiore a 500 (gli ID inferiori 500 sono, solitamente, utilizzati dal sistema).
In alternativa è possibile stampare una lista dei soli utenti muniti di una home directory (che normalmente, appunto, sono gli utenti “umani” del sistema):

cat /etc/passwd | grep /home | cut -d: -f1

In alternativa a quanto esposto sopra, è possibile utilizzare anche il comando “getent” in questo modo:

$ getent passwd|cut -d: -f1|sort

“getent” interroga direttamente il database di amministrazione restituendo le informazioni in esso contenute sulla base dei criteri utilizzati per definire una richiesta.

14 Creare e cancellare file e directory in Linux: touch, rm, mkdir e rmdir
Creare un file: touch
Spostatevi nella directory in cui volete che il nuovo file venga creato ed utilizzate il comando touch seguito dal nome del file che si vuole creare. Ad esempio:

touch pluto.txt
Se il file “pluto.txt” non esiste, questo verrà creato ex novo; in caso contrario (se, cioè, il file “pluto.txt” esisteva già) ne verrà semplicemente aggiornata la data di ultima modifica.

Il comando touch, oltre a creare file vuoti, infatti, permette di impostare la data e ora di ultima modifica e/o di ultimo accesso di uno o più file e directory. Per impostazione predefinita touch imposta sia la data e ora di ultima modifica che quella di ultimo accesso alla data e ora correnti.

Qualora volessimo creare contemporaneamente più file useremo touch seguto dai diversi nomi dei file da creare separati da un semplice spazio:

touch pluto.txt topolino.txt paperino.txt

Creare una directory: mkdir
Per creare una directory si usa il comando mkdir (make Directory) seguito dal nome della nuova directory che si vuole creare.
Poniamo ad esempio di voler creare una nuova directory chiamata “annunci” all’interno della cartella “miosito”.
Per farte ciò useremo:

cd /home/miosito
mkdir annunci
oppure:

mkdir /home/miosito/annunci

E’ anche possibile creare più cartelle simultaneamente indicandone, all’interno di parantesi graffe, i nomi separati da vigole. Si supponga di voler creare nella posizione corrente le cartelle “annunci”, “gallery” e “forum”:

mkdir {annunci,gallery,forum}
Attraverso mkdir è anche possibile settare i permessi per la cartella che si sta creando. Di default il comando assegna i permessi 777 (lettura, scrittura, esecuzione) all’utente corrente. Se volessimo assegnare i permessi a tutti gli utenti utilizzeremmo l’opzione -m in questo modo:

mkdir -m777 annunci

Cancellare file e directory: rm
Per cancellare un file si utilizza il comando rm (che sta per remove). Individuate il file da cancellare ed utilizzate rm seguito dal nome del file come nell’esempio qui sotto dove vedremo come cancellare un ipotetico file “pluto.txt” presente nella directory corrente:

rm pluto.txt
Generalmente vi verrà richiesta una conferma della vostra richiesta (alla domanda digitate “y” per confermare oppure “n” per annullare l’operazione). Se non volete vi venga chiesta la conferma dell’operazione basterà utilizzare il modo forzoso (-f) come da esempio:

rm -f pluto.txt
Con il comando rm è possibile cancellare, oltre ai file, anche le cartelle. Diversamente comando rmdir, che vedremo tra poco, rm può cancellare anche le directory che non sono vuote attraverso la c.d. opzione ricorsiva (-r o -R) che consente di cancellare tutti i file contenuti in una data directory ed eventuali sotto-directory.
Poniamo, ad es., di voler cancellare la directory “fotografie” (presente all’interno della directory “miosito”) e tutti i file in essa contenuti. Per farlo useremo queste istruzioni:

cd /home/miosito
rm -r fotografie
oppure:

rm -r /home/miosito/fotografie
Si faccia attenzione all’utilizzo simultaneo delle opzioni -rf: in questo modo, infatti, si potrebbero cancellare grandi quantità di dati senza alcuna richiesta di conferma.

Cancellare directory: rmdir
Se volete cancellare una vecchia directory che non vi serve più potete utilizzare il comando rmdir (Remove Directory) seguito dall’indicazione della directory da cancellare.
Poniamo ad esempio di voler cancellare la directory “annunci” creata poco sopra:

cd /home/miosito
rmdir annunci
oppure:

rmdir /home/miosito/annunci
E’ anche possibile cancellare più directory simultaneamente indicandole dopo il comando rmdir separate da uno spazio:

rmdir /home/foto /home/video /home/musica

Attenzione: il comando rmdir cancella solo ed esclusivamente directory vuote! Se la nostra cartella contiene dei file, infatti, il comando in questione non avrà nessun effetto.
Per cancellare directory non vuote si utilizza il comando rm con opzione ricorsiva come abbiamo visto in precedenza.

15 Cercare tra file e cartelle in Linux utilizzando locate e grep

Nella lezione precedente abbiamo visto come utilizzare il comando find di Linux per effettuare ricerche all’interno del filesystem. In realtà find non è l’unico strumento di ricerca fornito dal sistema operativo. In questa lezione vedremo nel dettaglio come funzionano i comandi locate e grep di Linux.

Il comando locate

Il modo più semplice e veloce per cercare file o directory ci è offerto dal comando locate che effettua ricerche sulla base del nome dei file. Il suo funzionamento è semplicissimo: è sufficiente accompagnare locate al termine che si vuole cercare. Il risultato sarà un elenco di file e directory che contengono nel loro nome e percorso la parola che si è cercato.

locate termine_da_cercare
Se, ad esempio, volessimo cercare nel nostro server tutti i file che si chiamano “pippo.jpg”, come già visto nell’esempio riguardante il comando useremo:

locate pippo.jpg

Il comando in questione è molto comodo, ad esempio, se non ricordiamo la posizione esatta di un file come ad esempio php.ini. Digitando:

locate php.ini

Otterremo in risposta qualcosa del genere:

/etc/php7/cgi/php.ini
/etc/php7/cli/php.ini
/etc/php7/fpm/php.ini
/usr/share/doc/php7-common/examples/php.ini-development
/usr/share/php7/php.ini-production
/usr/share/php7/php.ini-production.cli

Attenzione: la ricerca è case sensitive, cioè distingue tra maiuscole e minuscole. Per effettuare ricerca NOn case sensitive si aggiunga l’opzione -i in questo modo:

locate pippo.jpg -i
Così facendo otterremo anche “Pippo.jpg” o “PIPPO.jpg”.

Anche un’altra utile opzione è quella che consente di limitare il numero dei risultati. L’opzione in questione è -n e deve essere seguita dal numero di risultati da mostrare. L’utilità di questa opzione si rivela in ricerche molto generiche che potrebbero produrre moltissimi risultati:

locate .jpg -n 50

Con questo comando stiamo cercando tutti i file con estensione JPG limitando a 50 i risultati da stampare a video.

Aggiornare l’indice di locate

Il comando locate è davvero velocissimo! Il perchè di questa velocità sta nel fatto che in realta il comando in questione non effettua una ricerca real-time tra i file della macchina, ma si limita a spulciare un apposito indice contenente informazioni sui files presenti nella macchina in un dato momento. E’ pertanto importante tenere aggiornato questo database usando, di volta in vola, l’apposito comando, ovvero updatedb.

Il comando grep

Per finire questa nostra lezione vediamo un ultimo, utilissimo comando: grep. Con grep possiamo cercare i file che conengono una determinata parola o una determinata stringa di testo. La sintassi è la seguente:

grep pattern_di_ricerca file_in_cui_cercare

Poniamo, per fare un esempio, di voler cercare tutti i file con estensione “.html” che contengono la parola “casa”:

grep casa *.html

Grazie alla sintassi qui sopra verrà cercata la stringa “casa” tra tutti i file HTML (l’asterisco, infatti, sta ad indicare “qualsiasi cosa” – c.d. wildcards – ed è utilizzato, nel nostro esempio, per cercare ogni files con estensione .html).

Da notare che nel nostro esempio abbiamo cercato non la parola “casa”, ma la stringa “casa”! Ne consegue che nei risultati potremo trovare anche files che contengono, ad esempio, la parola “casale” o “casata”.

Se avessimo voluto cercare solo la parola “casa” avremmo dovuto usare l’opzione -w (word) in questo modo:

grep -w “casa” *.html

Effettuare ricerche ricorsive con grep
Facciamo un altro esempio: poniamo di voler sapere se all’interno del file “spesa.txt” è presente la parola “zucchero”.Per farlo sarà sufficiente digitare nella shell di Linux la seguente istruzione:

grep “zucchero” spesa.txt

sulla base di questa istruzione, grep restituirà tutte le linee del file indicato che contengono la parola cercata. Visto così, potrebbe non sembrare un granchè… facciamo quindi qualche altro esempio che ci aiuti a capire quanto possa essere importante questo comando.
Poniamo di voler cercare sempre la parola “zucchero” non più in un singolo file, ma in tutti i file presenti in una data directory e nelle sue eventuali sub-directory:

grep -r “zucchero” /home/listespesa/

Nell esempio qui sopra abbiamo utilizzato grep con opzione ricorsiva (-r) per andare a scovare, non solo nella dir indicata ma anche in tutte le eventuali sub-directory, la presenza di file contenenti la parola indicata.

Utilizzare grep con le regular expressions

Il comando grep esprime la sua vera forza nel suo utilizzo combinato con le regular expressions (espressioni regolari). Nonostante questo argomento sia troppo lungo e complesso da affrontare in modo approfondito in questa sede, ritengo opportuno almeno un cenno a due caratteri speciali che, sono certo, saranno amici di molte vostre ricerche… sto parlando di punto (“.”) e asterisco (“*”).

Il punto (.) può essere utilizzato per indicare un (nota bene: uno solo) carattere qualsiasi. Facciamo un esempio: poniamo di aver archiviato sul nostro computer le recensioni di centinaia di film visti in TV. Poniamo che ogni scheda sia stata scritta in un separato file txt. Ora supponiamo di voler cercare tra queste schede tutti i film di “Michelle Pfeiffer” ma poniamo di non ricordare esattamente come si scrive “Pfeiffer”. Che fare? Semplice… ricorriamo al comando grep in combinazione con il punto (.). Scriviamo solo la parte di parola di cui siamo certi e sostituiamo con dei puntini le lettere di cui non siamo sicuri, così:

grep -r “pf..ffer” /home/videoteca/

Nell’esempio abbiamo messo due punti i quali indicano le lettere “ei” di cui non eravamo certi.

Ora consideriamo un’altra ipotesi: supponiamo di ricordare solo che il nome che stiamo cercando finisce con “ffer” e niente più:

grep -r “*ffer” /home/videoteca/

Questa istruzione ritornerà tutti i file in cui è presente una qualsiasi parola che termina con “ffer” in quanto il simbolo asterisco (*) indica non uno, bensì un arbitrario numero di lettere (0,1,2,10,100,…).

16 Gestire i permessi: chmod, chown, chgrp

Cosa sono i permessi?

I sistemi Unix-Like (come Linux) sono stati tra i primi ambienti multi-utente e sono noti per il modo in cui gestiscono i permessi all’interno del filesystem. Ma cosa sono i permessi?
I permessi non sono altro che le autorizzazioni necessarie affinché un utente possa accedere ai file ed alle cartelle del sistema. In altre parole: ciascun utente può accedere o meno ad un determinato file o cartella a seconda che l’amministratore di sistema gli abbia conferito o meno la necessaria autorizzazione.

I permessi possono consentire ad un utente (o gruppo di utenti) di accedere ad un file o una cartella in lettura (r), scrittura (w) o esecuzione(x). Vediamo nel dettaglio cosa significa:

lettura (r come read) – l’utente (o il gruppo cui appartiene) puoi leggere il contenuto; nel caso delle directory l’utente potrà vedere i file e le sotto-cartelle in quest’ultima contenute;
scrittura (w come write) – l’utente (o il gruppo cui appartiene) può modificare il contenuto di un file; nel caso delle directory permette di modificarne il contenuto aggiungendo o rimuovendo elementi al suo interno;
esecuzione (x come execute) – l’utente (o il gruppo cui appartiene) può eseguire un file eseguibile; nel caso delle directory consente di accedere al loro contenuto.
Cartelle, file e permessi
In diverse lezioni della nostra guida ci siamo soffermati sulle modalità di gestione di file e cartelle. In questa lezione vedremo un argomento strettamente correlato: la gestione dei permessi (argomento molto importante essendo Linux un sistema multi-utente come detto nella lezione precedente e ricordato poco sopra).

Abbiamo già visto il comando ls, in particolar modo abbiamo già detto che l’utilizzo della sintassi:

ls -al
ha la funzione di stampare a video l’elenco dei file (anche quelli nascosti) e delle cartelle presenti nella posizione corrente. L’output generato da questo comando è ricco di informazioni:

Gestire permessi di utenti e gruppi
Nell’immagine qui sopra ho evidenziato le informazioni utili ai fini di questa lezione:

colonna dei permessi
utente proprietario / gruppo

La colonna dei permessi contiene 10 lettere (o trattini):

il primo spazio indica la tipologia dell’elemento e può avere i seguenti valori: d (directory), l (link simbolico), – (file);
i nove caratteri successivi indicano, appunto, i permessi. Più precisamente si tratta di tre distinti gruppi di 3 permessi (r = lettura; w = scrittura; x = esecuzione, – = non permesso). Il primo gruppo da tre riguarda il proprietario, il secondo riguarda il gruppo ed il terzo riguarda gli altri utenti.
Nel nostro esempio si tratta di due file, per entrambi il proprietario può leggere e scrivere (rw-), mentre il gruppo e gli altri utenti possono solo leggere (r–).

Le due colonne proprietario e gruppo indicano, rispettivamente l’utente proprietario del file ed il gruppo di appartenenza.

Dopo questa lunga, ma doverosa, premessa veniamo al nocciolo della questione, ovvero come gestire e modificare queste informazioni. A tal scopo linux dispone di comandi ad hoc. Vediamoli in rassegna:

chmod
E’ il comando che modifica i permessi (lettura, scrittura, esecuzione).
Il comando in oggetto ha una duplice sintassi, vediamole entrambe:

1) chmod con sintassi simbolica

Consente di assegnare diversi permessi al proprietario, al gruppo ed agli altri utenti. La sintassi è la seguente:

chmod a=rwx nomefile
nel nostro esempio abbiamo assegnato a tutti (a = all) tutti i permessi (rwx).
A sinistra del simbolo uguale (=) abbiamo l’assegnatario del permessi, a destra i permessi assegnati.
L’assegnatario viene identificato attraverso una lettera:

a (tutti)
u (utente proprietario)
g (gruppo)
o (altri utenti)
I permessi, invece, sono identificati dalle tre lettere r, w e x che abbiamo già visto in precedenza.

2) chmod con sintassi ottale

Con questa sintassi i permessi vengono assegnati a tutti i livelli simultaneamente. Al posto delle lettere rwx si utilizzano 3 numeri. Facciamo un esempio:

chmod 777 nomefile
Nel nostro esempio abbiamo assegnato a tutti i massimi permessi (cioè “rwx” come nell’esempio precedente).
In questa sintassi i tre numeri definiscono i permessi dei tre livelli: il primo numero riguarda l’utente proprietario, il secondo il gruppo, il terzo gli altri utenti.
Di seguito una tabella dei valori numerici e del loro significato:

7 corrisponde a rwx
6 corrisponde a rw
5 corrisponde a rx
4 corrisponde a r
3 corrisponde a wx
2 corrisponde a w
1 corrisponde a x
0 negato ogni accesso

Se ad esempio avessimo voluto assegnare al proprietario tutti i permessi, al gruppo solo lettura ed esecuzione (ma non scrittura) ed agli altri utenti nulla, avremmo scritto:

chmod 750 nomefile
N.B. il permesso di scrittura è quello più “delicato”: chi possiede questo permesso potrà non solo modificare i file ma anche cancellarli! Si faccia attenzione quindi ad usarlo con la massima attenzione e parsimonia.

chown e chgrp
Il comando chown è utilizzato per cambiare l’utente proprietario e/o il gruppo assegnato ad un file o ad una directory. La sintassi di chown è molto semplice:

chown nomeproprietario:nomegruppo nomefile
può essere utilizzato anche per il solo proprietario (in questo caso è possibile omettere il nomegruppo):

chown nomeproprietario nomefile
Facciamo un esempio: poniamo di voler assegnare il file immagine.jpg all’utente ‘pippo’ ed al gruppo ‘grafici’:

chown pippo:grafici immagine.jpg
Molto simile a chown è chgrp che si limita a cambiare il gruppo di un file o directory (senza poter intervenire sul proprietario). La sintassi è la seguente:

chgrp nomegruppo nomefile
chmod, chown, chgrp in modalità ricorsiva
Tutti e tre i comandi visti in questa lezione supportano la modalità ricorsiva. Tal modalità è molto comoda se si deve agire su una cartella e su tutto quanto è in essa contenuto.
Per attivare la modalità ricorsiva:

chmod -R 777 nomecartella
chown -R nomeproprietario:nomegruppo nomecartella
chgrp -R nomegruppo nomecartella

17 Il comando crontab: operazioni pianificate su Linux

I cron job


Grazie a crontab, infatti, possiamo impostare (o, più correttamente, schedulare) delle operazioni (job) sul nostro sistema Linux con una certa semplicità sfruttando il demone cron. Le attività pianificate prendono il nome di cron job.
Il “cron daemon”, infatti, legge il file crontab ed segue le operazioni ivi impostate (i cron job) al momento specificato ed in modo del tutto automatico.

Ogni utente del nostro O.S. Linux, ovviamente, può avere la propria versione di questo file; in questo modo, pertanto, possiamo avere diverse operazioni pianificate in esecuzione sullo stesso sistema.


La sintassi del comando è la seguente:

Il comando crontab

crontab -u username -opzione
L’opzione -u consente di specificare il nome dell’utente che “possiede” il file. Se l’opzione -u è omessa, il sistema presumerà che state operando sul vostro crontab personale.

L’opzione list (l)
Con l’opzione -l (list) possiamo vedere il contenuto attuale del nostro crontab. L’utilizzo è questo:

crontab -l
L’opzione remove (r)
Specificando l’opzione -r (remove) andremo ad eliminare tutte le operazioni pianificate eventualmente impostate all’interno del nostro crontab. Così:

crontab -r

L’opzione edit (e)
Con -e (edit) possiamo inserire, modificare o eliminare cron job dal nostro crontab. Il comando da utilizzare è questo:

crontab -e

Così facendo si aprirà automaticamente il nostro editor di testo predefinito (generalmente pico o VI). Se è la prima volta che utilizzate crontab può essere che vi ritroviate di fronte ad una pagina vuota… andiamo quindi ad inserire la nostra prima operazione pianificata!

Definire le singole operazioni all’interno del crontab

All’interno del nostro crontab possiamo inserire quante operazioni desideriamo. Ogni operazione (cron job) deve contenere necessariamente l’orario e la data di esecuzione nonché, ovviamente, l’indicazione del comando che si desidera eseguire. Per inserire più operazioni è sufficiente andare a capo (ogni operazione occupa una riga).

Per comprendere meglio la sintassi delle operazioni pianificate vediamo un primo semplice esempio:

00 00 * * * /usr/bin/updatedb
Nell’operazione specificata qui sopra abbiamo detto al nostro demone cron di eseguire il comando “updatedb” (specificandone il percorso assoluto) tutti i giorni al minuto 00 dell’ora 00, quindi a mezzanotte esatta.

Prima dell’indicazione del comando da eseguire vanno inseriti nell’ordine (da sinistra verso destra):

minuto
ora
giorno del mese
mese

giorno della settimana
L’utilizzo dell’asterisco (*) significa “tutti”. Se quindi lo utilizziamo al posto del giorno del mese, ad esempio, il comando verrà eseguito tutti i giorni del mese.

Alcune versioni di cron supportano l’operatore slash (/) che viene utilizzato per pianificare delle ripetizioni. Facciamo un esempio:

*/10 * * * * /usr/bin/updatedb
Nel nostro esempio il valore dei minuti è stato impostato come */10; ciò significa che la nostra operazione sarà eseguita ogni 10 minuti.

E’ anche possibile specificare degli intervalli: per farlo si usa il trattino (-). Facciamo un esempio:

00 15 1-4 * * /usr/bin/updatedb
Nel nostro esempio l’operazione verrà eseguita alle 15:00 nei primi quattro giorni di ogni mese.

Oltre a slash e trattino possiamo usare anche la virgola (,) la quale viene utilizzata per specificare un elenco. Facciamo un esempio:

30 18 1 3,6,9 * /usr/bin/updatedb
Nel nostro esempio l’operazione verrà eseguita alle 18:30 del primo giorno del mese di marzo (3), giugno (6) e settembre (9).

Stringhe speciali
E’ possibile sostituire i primi cinque valori (cioè quelli che riguardano data e ora di esecuzione del comando) con delle stringhe “speciali” che assolvono al medesimo compito. Queste stringhe sono:

@reboot – lancia il comando all’avvio del sistema
@yearly – lancia il comando una volta all’anno; corrisponde a “0 0 1 1 *”
@annually – (analogo @yearly)
@monthly – lancia il comando una volta al mese; corrisponde a “0 0 1 * *”
@weekly – lancia il comando una volta alla settimana; corrisponde a “0 0 * * 0”
@daily – lancia il comando una volta al giorno; corrisponde a “0 0 * * *”
@midnight – (analogo @daily)
@hourly – lancia il comando una volta all’ora; corrisponde a “0 * * * *”
Vediamo un esempio di operazione pianificata relativa ad un backup quotidiano:

@daily /usr/bin/backup
Inserire commenti all’interno del crontab
E’ anche possibile aggiungere dei commenti all’interno del crontab per inserire annotazioni utili per successive modifiche o implementazioni relative ai vari cronjob. L’inserimento di commenti è molto semplice: è sufficiente inserire una linea di testo il cui primo carattere corrisponde ad un cancelletto (#).

Vediamo un esempio:

imposto un backup giornaliero

@daily /usr/bin/backup
Soluzioni automatiche per la compilazione del crontab
In rete esistono anche alcuni tool on-line che consentono di scrivere, in modo guidato ed estremamente semplice, delle istruzioni da inserire all’interno del crontab. Tra gli strumenti di questo genere segnalo il crontab generator disponibile su Toolset.it

18 I comandi mount e umount

Nei sistemi che fanno riferimento al mondo linux (o, più correttamente, nei sistemi unix-like) le periferiche di archiviazione dati vengono rilevate dal sistema operativo non appena collegate al computer, ma i loro filesystem non vengono “integrati” automaticamente all’interno del “filesystem globale”.
Questa operazione di “innesto” avviene mediante il comando mount il quale collega il filesystem della periferica al filesystem globale del sistema inserendolo all’interno dell’albero delle directory (in ogni sistema linux, un drive è rappresentato come se fosse una comune cartella).
L’operazione inversa, che rilascia un filesystem montato, si dice smontaggio e si esegue tramite il comando umount.

A titolo di confronto, per quanto riguarda il mondo Windows, l’operazione di mount è celata dal sistema operativo. Questa operazione, infatti, viene eseguita all’avvio ed, automaticamente, ogni volta in cui viene collegata una nuova periferica (si pensi ad esempio al caso delle penne USB).

Sui sistemi linux l’operazione di mount è svolta all’avvio in modo automatico nel caso della directory radice (/) e, solitamente, anche all’inserimento di una periferica rimovibile. In alcune circostanze, tuttavia, è certamente utile saper eseguire l’operazione mediante comandi manuali.

Il comando mount

Il comando mount ha due parametri fondamentali:

-il percorso del device da montare (es: /dev/sda1)
-il percorso della directory in cui si intende montare

Opzionalmente sono supportati altri tipi di parametro.

Mount è lanciato con la seguente sintassi di base:

mount
Se si desidera specificare esplicitamente il filesystem da utilizzare si usa il parametro -t

mount [-t ]
I filesystem validi per il proprio sistema sono elencati in proc/filesystems. Generalmente sarà sufficiente questa istruzione per visualizzarli:

cat /proc/filesystems
Il device LOOP
Il loop device è un dispositivo virtuale a blocchi che rende visibile al sistema un file come se fosse un dispositivo di memorizzazione.
Alcuni file a struttura regolare come le immagini virtuali (es: ISO) sono particolarmente adatte ad essere rappresentate con un intero file system.
Attraverso il loop mount è possibile eseguire questa operazione.
Il loop mount si esegue lanciando il comando mount col parametro -o loop, seguito dal nome del file e dalla destinazione che sarà usata come radice.

mount -o loop immagine.iso /mnt/disk

Opzione force
In taluni casi è necessario forzare il montaggio di un device poichè questo si trova per un qualche motivo in stato di lock. Il montaggio forzato si richiama con la sintassi:

mount -o force
Smontaggio di un device: umount
L’operazione di smontaggio di solito è meno critica. Si esegue semplicemente utilizzando la sintassi:

umount device
è anche possibile smontare un device indicando come parametro di umount la directory in cui il device è stato montato:

umount directory_mountpoint

19 Gestire utenti e password: i file /etc/passwd e /etc/shadow

La gestione degli utenti e delle relative password in Linux è argomento piuttosto difficile e richiederebbe un’indagine approfondita e molto articolata.
In questa sede, pertanto, ci limiteremo ad analizzare il contenuto dei due file di testo particolarmente importanti nella gestione degli utenti del sistema, al fine di capire come linux gestisca queste informazioni e di come sia possibile modificarle. I due file in questione sono /ect/passwd/ e /etc/shadow/.

gli esempi che seguono sono stati realizzati utilizzando la distribuzione Ubuntu.

/etc/passwd
In questo file nelle prime versioni Unix/Linux venivano memorizzate le password (ora questa funzione è svolta da /etc/shadow, che analizziamo in seguito).
E’ leggibile da tutti gli utenti e contiene numerose informazioni come la corrispondenza tra nome utente e relativo identificativo numerico (user ID), la shell di login utilizzata, la directory home, ecc..
Apriamo il file con un editor di testo:

nano /etc/passwd
Vediamo che sono presenti molte voci corrispondenti agli utenti, la maggior parte dei quali sono utenti di sistema. Prendiamone qualcuna di esempio:
root:x:0:0:root:/root:/bin/bash
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
francesco:x:1000:1000:Francesco,,,:/home/francesco:/bin/bash
Le voci sopra indicate corrispondono all’utente amministrativo “root”, agli utenti di sistema “bin” e “sys”, all’utente “francesco”, cioè quello che uso in questo momento.
Analizziamo nel dettaglio quella relativa al mio utente descrivendo ognuno dei 7 campi che la compongono, separati dal carattere due punti (:):
francesco:x:1000:1000:Francesco,,,:/home/francesco:/bin/bash
il primo campo è il nome utente (username)
il secondo corrisponde alla password cifrata (la X indica che sono attive le password shadow, memorizzate nel file /etc/shadow)
il terzo è il numero identificativo dell’utente (user ID)
il quarto quello del gruppo (group ID)
il quinto contiene il nome o/e cognome dell’utente più eventuali altri campi di commento separati da virgole
il sesto il percorso della directory home
il settimo indica la shell utilizzata

/etc/shadow
Il file è protetto anche in lettura cioè può essere visualizzato solo possedendo i diritti amministrativi.
Oltre alle password sono memorizzate nel file una serie di ulteriori informazioni che le riguardano come le date di scadenza, le date di modifica, ecc..
Apriamo il file con l’editor:

sudo nano /etc/shadow
Prendiamo qualche voce di esempio (corrispondono agli stessi utenti visualizzati precedentemente per /etc/passwd):
root::14315:0:99999:7::: bin::14315:0:99999:7:::
sys:*:14315:0:99999:7:::
francesco:$1$oTc1DHLi$m4cqP7MVPu2Plrw/6Ov.v/:14315:0:99999:7:::
Analizziamo nel dettaglio quella relativa al mio utente, composta da 9 campi:
francesco:$1$oTc1DHLi$m4cqP7MVPu2Plrw/6Ov.v/:14315:0:99999:7:::
-il primo campo è il nome utente (username)
-il secondo la password cifrata
-il terzo è il giorno in cui è stata cambiata la password l’ultima volta
(espresso in numero di giorni dal 1/1/1970)
-il quarto il numero di giorni che devono passare dall’ultimo cambiamento prima che la password possa essere nuovamente cambiata
-il quinto il numero di giorni dall’ultimo cambiamento dopo i quali la password scade e deve essere necessariamente cambiata
-il sesto il numero dei giorni precedenti quello di scadenza della password in cui gli utenti vengono avvisati
-il settimo il numero dei giorni successivi a quello di scadenza della password dopo i quali l’utente viene disabilitato
-l’ottavo il giorno in cui l’utente è stato disabilitato (espresso in numero di giorni dal 1/1/1970)
-il nono è un campo riservato
In questo caso vediamo che gli ultimi tre campi non sono impostati.

20 Configurare una scheda di rete su Linux con ifconfig

In ambiente Linux per la gestione degli indirizzi IP (Internet Protocol) all’interno delle intefacce di rete (come per esempio le comunissime ethernet) viene utilizzato il comando ifconfig (abbreviazione di interface configurator) il quale corrisponde, a grandi linee, al comando ipconfig disponibile sui sistemi equipaggiati con Microsoft Windows; esattamente come accade per i terminali che possono avere più di un indirizzo IP, anche le interfacce di rete possono essere relative ad uno o più indirizzi.

Ad uno stesso Pc possono corrispondere una o più interfacce di rete, potremmo quindi avere una “eth0”, una “eth1” etc. ognuna con il suo indirizzo Ip, inoltre ogni interfaccia di tipo ethernet potrà avere un suo alias identificabile ad esempio con la sigla “eth0:1” oppure “eth0:2” etc.
Tornando ad ificonfig, possiamo dire che questo comando ci permette innanzitutto di acquisire numerose informazioni sulla configurazione e lo stato della nostra interfaccia di rete; per far questo avremo a disposizione l’istruzione:

ifconfig -a
dove “a” significa “all”, cioè tutte le interfacce di rete. In molte distribuzioni la semplice istruzione ifconfig digitata senza opzioni è già di per sè un alias di “ifconfig -la“, come per esempio sulla mia Ubuntu:

[email protected]:~$ ifconfig

eth1 Link encap:Ethernet HWaddr 00:0C:29:86:3A:15
inet addr:192.168.8.3 Bcast:192.168.8.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe86:3a15/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1597 (1.5 KiB) TX bytes:6576 (6.4 KiB)
Interrupt:17 Base address:0x1400

Isoliamo le varie righe dell’output e descriviamone il significato; innanzitutto abbiamo:

eth1 Link encap:Ethernet HWaddr 00:0C:29:86:3A:15

questa parte è riferita alla tipologia di hardware utilizzato e al suo indirizzo fisico cioè il MAC address (Media Access Control address) o se preferite l’indirizzo ethernet.

La parte contenente le seguenti indicazioni:

inet addr:192.168.8.3 Bcast:192.168.8.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe86:3a15/64 Scope:Link
comunica nella prima riga l’indirizzo IP, indirizzo di broadcast e la maschera della rete; nella seconda gli eventuali alias.

Prima di continuare è bene specificare che:

L’indirizzo di broadcast è un indirizzo IP che permette di inviare dati contemporaneamente a tutti gli host di una sotto-rete invece che ad un specifico host.
La maschera di rete, detta anche netmask, è un insieme di indicatori che separano la parte di un indirizzo IP che indica la rete da quella che indica la sotto-rete.
Continuiamo, la riga:

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
fornisce informazioni su lo stato dell’interfaccia (“UP” indica che l’interfaccia è accessibile, diversamente sarebbe “DOWN”), le opzioni attivate, l’MTU (Maximum Transfer Unit) e la Metrica (computo del costo di trasmissione).

Adiamo avanti:

RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1597 (1.5 KiB) TX bytes:6576 (6.4 KiB)
è la parte relativa alle statistiche, “RX” stà per ricezione mentre “TX” stà per trasmissione, nell’ultima riga viene indicato il “peso” di ogni pacchetto inviato o ricevuto.

Passiamo ora all’ultima parte:

Interrupt:17 Base address:0x1400
è composta da un’unica riga che mostra l’indirizzo della scheda così come viene visto dal terminale.

Per attivare un determinato indirizzo Ip su un’interfaccia basta utilizzare il comando ifconfig seguito dall’identificativo dellinterfaccia e dall’indirizzo stesso ad esempio:

ifconfig eth0 192.168.0.1 up

Nello stesso modo sarà possibile associare un Ip ad un alias dell’interfaccia di rete semplicemente specificandone il nome.

Struttura del file system UNIX

Il file system di UNIX è detto anche Filesystem tree in quanto la sua struttura ricorda quella di un albero rovesciato, si parte dalla directory radice (detta root, ma non ha niente a che vedere con l’utente amministratore anch’esso chiamato root), per poi seguire diverse diramazioni che portano alle più profonde sub-directory del sistema.

Di seguito proponiamo una sintesi di quella che può essere una struttura base del file system UNIX:

  • /bin: directory per l’allocazione dei file binari, in pratica i file eseguibili;
  • /dev: directory destinata a contenere i device drivers delle unità hardware istallate all’interno del sistema (floppy drive, Cd rom, DVD rom, supporti rimuovibili..)
  • /etc: directory per i file di configurazione e di amministrazione del sistema;
  • /home: directory in cui sono allocate le home directory appartenenti agli utenti del sistema;
  • /lib: directory per l’allocazione delle librerie di base;
  • /proc: directory dei riferimenti ai processi attivi e delle informazioni utili per l’accesso ad essi, in questo caso i file di riferimento non si trovano realmente nella directory ma sono residenti in memoria (“file illusori”);
  • /tmp: directory per i file temporanei, questi contenuti vengono eliminati nel momento in cui il sistema viene riattivato;
  • /usr: directory per il file system degli utenti, tra questi ultimi ve ne sono anche alcuni creati dal sistema e non riconducibili ad utenti “fisicamente esistenti”.

Le ulteriori diramazioni di /user assumono un particolare interesse in quanto questa directory si presenta come un vero e proprio sub – file system:

  • /usr/bin: come la /bin principale contiene file binari destinati all’esecuzione.
  • /usr/lib: directory per le librerie dei software e dei linguaggi per la programmazione;
  • /usr/man: directory del manuale di supporto in linea.

Le directory sono trattate da UNIX come se fossero dei file destinati a contenere altri file o sub-directory invece che dati; questo modo di vedere i contenuti identifica file e cartelle in entità dette i-node in cui i descriptor (nome, proprietà, permessi..) sono separati dall’informazione allocata (un dato, una sub-directory, l’elenco dei file contenuti).

Attraverso l’utilizzo di link simbolici (file che contengono al loro interno soltanto nomi di altri file), è possibile che uno stesso i-node venga condiviso da diversi elementi del file system.

Editare file in UNIX

L’ambiente “spoglio” di UNIX lo rende un contesto ideale per la programmazione. Il sistema mette a disposizione dello sviluppatore un editor testuale molto stabile e potente chiamato Vi che potremo richiamare semplicemente facendo seguire al comando vi il nome del file che desideriamo modificare:

/home/Antares> vi nome_file
A questo punto avremo a disposizone numerose opzioni, tra cui:
dd: cancella un’intera linea;
dw: elimina una parola;
cw: modifica una parola;
u: (undo) cancella l’ultima modifica;
.: ripete l’ultimo comando.

In ogni momento sarà possibile ripetere un determinato comando sulla base di un numero scritto precedentemente all’istruzione, ad esempio, 5dw permette di ripetere per 5 volte il comando per l’eliminazione delle parole.

Per l’inserimento di stringhe all’interno del documento che vogliamo modificare, sarà sufficiente digitare la lettera “i” e spostarci con il cursore all’altezza della riga su cui vogliamo operare; per uscire dalla modalità d’inserimento dovremo invece premere [ESC].

Una volta operato sul file e usciti dalla modalità d’inserimento, avremo a disposizione alcuni comandi relativi al salvataggio e alla chiusura del documento modificato:

:q: permette di uscire dall’editor di testo;
:q!: permette di uscire dall’editor di testo senza salvare le modifiche effettuate;
:w: permette di salvare le modifiche effettuate.
:w nome_file: salva il file modificato con nome.
:wq: salva le modifiche effettuate sul file e chiude l’editor di testo.
:x: stessa funzione di wq.

Per ogni ulteriore informazione, consigliamo al lettore di consultare il manuale in linea richiamabile tramite il comando man seguito dalla voce che desideriamo cercare.
Nel caso del nostro editor di testo dovremo quindi digitare:

man vi

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?