103.1 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
103 Comandi GNU e Unix |
Obiettivo: |
103.1 Lavorare con la Riga di Comando |
Lezione: |
1 di 2 |
Introduzione
I nuovi arrivati nel mondo dell’amministrazione Linux e della shell Bash spesso si sentono un po' persi senza i confort rassicuranti di un’interfaccia GUI. Sono abituati ad avere accesso con il tasto destro del mouse ai segnali visivi e alle informazioni contestuali rese disponibili dalle utility grafiche di gestione file. Quindi è importante imparare e padroneggiare rapidamente l’insieme relativamente piccolo di strumenti da riga di comando attraverso il quale è possibile attingere istantaneamente a tutti i dati disponibili.
Ottenere Informazioni di Sistema
Mentre fissi il rettangolo lampeggiante di un prompt della riga di comando, la tua prima domanda sarà probabilmente “Dove sono?” o, più precisamente, "`Dove mi trovo nel filesystem Linux in questo momento e se, diciamo, ho creato un nuovo file, dove risiederebbe? " Quello che stai cercando qui è la tua directory di lavoro attuale, e il comando `pwd
ti dirà ciò che vuoi sapere:
$ pwd /home/frank
Supponendo che Frank sia attualmente connesso al sistema e che ora si trovi nella sua home directory: /home/frank/
. Se Frank crea un file vuoto usando il comando touch
senza specificare un’altra posizione nel filesystem, il file verrà creato in /home/frank/
. Attraverso il comando ls
ci verrà mostrato questo nuovo file:
$ touch newfile $ ls newfile
Oltre alla tua posizione nel filesystem, spesso vorrai informazioni sul sistema Linux che stai eseguendo. Ciò potrebbe includere il numero esatto di rilascio della distribuzione o la versione del kernel Linux attualmente caricato. Lo strumento uname
è ciò che cerchi. E, in particolare, uname
usando l’opzione -a
(“all”).
$ uname -a Linux base 4.18.0-18-generic #19~18.04.1-Ubuntu SMP Fri Apr 5 10:22:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
uname
mostra che la macchina di Frank ha installato la versione del kernel Linux 4.18.0 ed esegue Ubuntu 18.04 su una CPU a 64 bit (x86_64
).
Ottenere Infomazioni sui Comandi
Ti imbatterai spesso in documentazione che parla di comandi Linux con i quali non hai ancora familiarità. La stessa riga di comando offre tutti i tipi di informazioni utili su che cosa facciano i comandi e su come usarli efficacemente. Forse le informazioni più utili si trovano nei numerosi file del sistema man
.
Di norma gli sviluppatori Linux scrivono file man
e li distribuiscono insieme alle utility che creano. I file man
sono documenti altamente strutturati il cui contenuto è intuitivamente diviso per titoli di sezione standard. Digitando man
seguito dal nome di un comando si otterranno informazioni che includono il nome del comando, una breve sinossi di utilizzo, una descrizione più dettagliata e alcuni importanti precedenti storici e di licenza. Ecco un esempio:
$ man uname UNAME(1) User Commands UNAME(1) NAME uname - print system information SYNOPSIS uname [OPTION]... DESCRIPTION Print certain system information. With no OPTION, same as -s. -a, --all print all information, in the following order, except omit -p and -i if unknown: -s, --kernel-name print the kernel name -n, --nodename print the network node hostname -r, --kernel-release print the kernel release -v, --kernel-version print the kernel version -m, --machine print the machine hardware name -p, --processor print the processor type (non-portable) -i, --hardware-platform print the hardware platform (non-portable) -o, --operating-system print the operating system --help display this help and exit --version output version information and exit AUTHOR Written by David MacKenzie. REPORTING BUGS GNU coreutils online help: <http://www.gnu.org/software/coreutils/> Report uname translation bugs to <http://translationproject.org/team/> COPYRIGHT Copyright©2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. SEE ALSO arch(1), uname(2) Full documentation at: <http://www.gnu.org/software/coreutils/uname> or available locally via: info '(coreutils) uname invocation' GNU coreutils 8.28 January 2018 UNAME(1)
man
funziona solo quando gli viene fornito il nome esatto di comando. Se, tuttavia, non si è sicuri del nome del comando che si sta cercando, si può usare il comando apropos
per cercare tra i nomi e le descrizioni delle pagine di man
. Supponendo, per esempio, che non ci si ricordi che è uname
che indicherà l’attuale versione del kernel Linux, si può passare la parola kernel
ad apropros
. Probabilmente si otterrano molte righe di output, ma tra queste ci dovrebbero essere:
$ apropos kernel systemd-udevd-kernel.socket (8) - Device event managing daemon uname (2) - get name and information about current kernel urandom (4) - kernel random number source devices
Se non hai bisogno della documentazione completa di un comando, puoi ottenere rapidamente le sue informazioni di base usando type
. Questo esempio usa type
per interrogare quattro comandi separati contemporaneamente. I risultati ci mostrano che cp
(“copy”) è un programma che risiede in /bin/cp
e che kill
(cambia lo stato di un processo in esecuzione) è uno shell builtin - nel senso che è in realtà integrato nella shell Bash stessa:
$ type uname cp kill which uname is hashed (/bin/uname) cp is /bin/cp kill is a shell builtin which is /usr/bin/which
Si noti che, oltre a essere un normale comando binario come cp
, uname
è anche "hashed". Questo perché Frank ha recentemente usato uname
e, per aumentare l’efficienza del sistema, è stato aggiunto a una tabella hash al fine di renderlo più velocemente accessibile alla successiva esecuzione. Se eseguisse type uname
dopo un avvio del sistema, Frank troverebbe che type
descrive ancora una volta uname
come un normale binario.
Note
|
Un modo più rapido per ripulire la tabella hash è eseguire il comando |
A volte, specialmente quando si lavora con script automatici, è necessaria una fonte di informazioni più semplice su un comando. Il comando which
, che il nostro precedente comando type
ha tracciato per noi, non restituirà altro che la posizione assoluta di un comando. Questo esempio individua i comandi uname
e which
.
$ which uname which /bin/uname /usr/bin/which
Note
|
Se volete visualizzare informazioni sui comandi “builtin”, potete usare il comando |
Utilizzare l’History dei Comandi
Spesso ricercerai attentamente l’utilizzo corretto di un comando e lo eseguirai insieme a una complicata serie di opzioni e argomenti. Ma cosa succede poche settimane dopo quando è necessario eseguire lo stesso comando con le stesse opzioni e gli stessi argomenti ma non è possibile ricordare i dettagli? Invece di dover ricominciare tutto da capo, sarai spesso in grado di recuperare il comando originale usando history
.
Digitando history
verranno restituiti i comandi che hai eseguito precedentemente, con il più recente per ultimo. Puoi facilmente cercare tra questi comandi reindirizzando una stringa specifica al comando grep
. Questo esempio cercherà qualsiasi comando che includa il testo bash_history
:
$ history | grep bash_history 1605 sudo find /home -name ".bash_history" | xargs grep sudo
Viene restituito un singolo comando insieme al suo numero progressivo, 1605.
Parlando di bash_history
, questo è in realtà il nome di un file nascosto che dovresti trovare nella home directory del tuo utente. Dato che è un file nascosto (indicato come tale dal punto che precede il suo nome file), sarà visibile solo elencando il contenuto della directory usando ls
con l’argomento -a
:
$ ls /home/frank newfile $ ls -a /home/frank . .. .bash_history .bash_logout .bashrc .profile .ssh newfile
Che cosa c’è nel file .bash_history
? Dai un’occhiata tu stesso: vedrai centinaia e centinaia dei tuoi comandi più recenti. Potresti, tuttavia, essere sorpreso di scoprire che mancano alcuni dei tuoi comandi più recenti. Questo perché, mentre vengono immediatamente aggiunti al database dinamico history
, le ultime aggiunte alla cronologia dei comandi non vengono scritte nel file .bash_history
fino a quando non si esce dalla sessione.
Puoi sfruttare i contenuti di "history" per rendere la tua esperienza da riga di comando molto più veloce ed efficiente usando i tasti freccia su e giù della tastiera. Premendo il tasto “Su” più volte, la riga di comando verrà popolata con comandi recenti. Quando arrivi a quello che desideri eseguire una seconda volta, puoi eseguirlo premendo Invio. Ciò semplifica il richiamo e, se desiderato, la modifica dei comandi più volte durante una sessione di shell.
Esercizi Guidati
-
Usa il sistema
man
per determinare quale opzione consente adapropos
di eseguirsi, per poi immediatamente richiudersi, solo indicando un breve riepilogo del suo funzionamento. -
Usa il sistema
man
per determinare quale licenza è utilizzata dal comandogrep
.
Esercizi Esplorativi
-
Identifica l’architettura hardware e la versione del kernel Linux utilizzata sul tuo computer in un formato di output di facile lettura.
-
Visualizza le ultime venti righe del database dinamico
history
e del file.bash_history
per confrontarli. -
Usa lo strumento
apropos
per identificare la paginaman
del comando di cui avrai bisogno per visualizzare la dimensione in byte anziché in megabyte o gigabyte di un dispositivo a blocchi.
Sommario
In questa lezione abbiamo imparato:
-
Come ottenere informazioni riguardo la posizione sul filesystem e sullo stack del software del sistema operativo.
-
Come trovare aiuto per l’utilizzo di un comando.
-
Come identificare la posizione sul filesystem e il tipo di comandi binari.
-
Come trovare e riutilizzare i comandi eseguiti in precedenza.
In questa lezione sono stati discussi i seguenti comandi:
Pwd
-
Visualizza la posizione di lavoro corrente sul filesystem.
Uname
-
Visualizza l’architettura hardware del sistema, la versione del kernel Linux, la distribuzione e la versione di distribuzione.
Man
-
Accede ai file della guida che documentano l’utilizzo dei comandi.
Type
-
Visualizza la posizione sul filesystem e il tipo per uno o più comandi.
Which
-
Visualizza la posizione sul filesystem per un comando.
History
-
Visualizza i comandi eseguiti in precedenza.
Risposte agli Esercizi Guidati
-
Usa il sistema
man
per determinare quale opzione consente adapropos
di eseguirsi, per poi immediatamente richiudersi, solo indicando un breve riepilogo del suo funzionamento.Esegui
man apropos
e scorri verso il basso attraverso la sezione “Options” fino ad arrivare alla parte riguardante l’opzione--usage
. -
Usa il sistema
man
per determinare quale licenza è utilizzata dal comandogrep
.Esegui
man grep
e scorri verso il basso fino alla sezione “Copyright”. Nota che il programma utilizza una licenza d’uso della Free Software Foundation.
Risposte agli Esercizi Esplorativi
-
Identifica l’architettura hardware e la versione del kernel Linux in uso sul tuo computer in un formato di output di facile lettura.
Esegui
man uname
, leggi la sezione “Description” e identifica gli argomenti del comando che mostreranno solo i risultati esatti che desideri. Nota come-v
ti fornirà la versione del kernel e-i
fornirà la piattaforma hardware.$ man uname $ uname -v $ uname -i
-
Stampa le ultime venti righe del database dinamico
history
e del file.bash_history
per confrontarli.$ history 20 $ tail -n 20 .bash_history
-
Usa il comando
apropos
per identificare la paginaman
dove troverai il comando di cui avrai bisogno per visualizzare la dimensione di un dispositivo a blocchi collegato al sistema in byte invece che in megabyte o gigabyte.Un modo è quello di eseguire
apropos
seguito dalla stringablock
, leggere i risultati, notare chelsblk
elenca i dispositivi a blocchi (sarebbe quindi lo strumento più probabile per le nostre esigenze), eseguireman lsblk
, scorrere fino alla sezione “Description” e scoprire che-b
mostrerà la dimensione del dispositivo in byte. Infine, eseguirelsblk -b
per vedere cosa viene visualizzato.$ apropos block $ man lsblk $ lsblk -b