10 comandi Unix che ogni utente Mac e Linux dovrebbe conoscere

Le GUI sono fantastiche: non vorremmo vivere senza di esse. Ma se sei un utente Mac o Linux e vuoi ottenere il massimo dal tuo sistema operativo (e dalle tue sequenze di tasti), devi a te stesso familiarizzare con la riga di comando di Unix. Punta e clicca è meraviglioso ogni volta che devi fare qualcosa una o due volte. Ma se hai bisogno di ripetere quell'attività molte volte, la riga di comando è il tuo salvatore.

La riga di comando è una finestra sulla piena, straordinaria potenza del tuo computer. Se desideri liberarti dei vincoli della GUI o pensi che la programmazione o l'amministrazione di macchine remote sia nel tuo futuro, allora imparare la riga di comando di Unix è sicuramente per te.

Non preoccuparti se i comandi Unix sembrano incantesimi magici o le misteriose parti interne del sistema sembrano fuori dalla tua portata. Non sono così difficili da imparare e questo articolo ti fornirà i 10 comandi essenziali di cui hai bisogno per iniziare. In poco tempo quelle stringhe criptiche diventeranno una seconda natura.

Nozioni di base sulla shell

La shell della riga di comando Unix è più o meno equivalente alla finestra di comando in Microsoft Windows (cmd o PowerShell). I comandi che esamineremo di seguito funzioneranno su qualsiasi sistema simile a Unix, inclusi Linux, Darwin (la base di MacOS), FreeBSD e persino Windows con qualcosa come Git Bash o la nuova shell Bash in Windows 10. Le opzioni e l'output variano leggermente, ma non dovresti avere problemi a capirli.

Per prima cosa, devi aprire una shell, a volte chiamata finestra di terminale. Spesso le distribuzioni Unix lo mettono nei menu Amministrazione o Sistema. In MacOS, troverai il terminale in Applicazioni> Utilità> Terminale. Quando lo avvii, vedrai qualcosa del genere:

Questa schermata, da MacOS 10.11, è tipica della maggior parte delle shell in una GUI. Nella parte superiore della finestra vediamo il tipo di shell, in questo caso Bash (Bourne Again Shell, che è la shell predefinita in MacOS e nella maggior parte delle distribuzioni Linux), e la dimensione della finestra. All'interno della finestra c'è il prompt, in questo caso configurato per visualizzare il nome della macchina ( Mercury), il nome della directory di lavoro corrente (qui la tilde ~, che è l'abbreviazione della directory home dell'utente), il nome dell'utente, e infine il simbolo del prompt (il$). Nota che il tuo prompt cambierà mentre ti sposti nel file system o se diventi un utente diverso sulla tua macchina (come root o superuser per eseguire comandi amministrativi). Il prompt mostra queste informazioni, così puoi facilmente dire dove e chi sei su qualsiasi macchina.

Vale la pena sapere che esistono due versioni principali della shell Unix: Bourne e C shell. Bourne e la compagnia derivavano dall'originale AT&T Unix, mentre la shell C proviene dall'Università della California a Berkeley e BSD Unix. Generalmente i derivati ​​della shell Bourne e C sono utili per il lavoro interattivo sul terminale. La shell standard POSIX, la shell Korn, è quella che vorresti usare per scrivere i tuoi programmi nella shell, chiamati script. Usiamo la shell Bash per gli esempi in questo tutorial.

L'ambiente della shell

Uno dei primi fatti da capire sull'utilizzo della riga di comando Unix è che la shell opera nel proprio ambiente. Capire come controllare l'ambiente della shell è una parte importante per diventare efficienti dalla riga di comando. Diamo uno sguardo all'ambiente usando il envcomando:

Non preoccuparti di comprendere tutte le variabili d'ambiente ora, ma sappi che sono lì. Dovresti già riconoscere alcune variabili. Ad esempio, SHELL=/bin/bashci dice che stiamo usando la shell Bash. HOME=/Users/nunezspecifica la posizione della directory home dell'utente. Puoi modificare o creare variabili d'ambiente e spesso lo farai. Ecco un esempio di impostazione di una variabile di ambiente chiamata FOOe visualizzazione del suo valore:

Come vedi, per convenzione mettiamo le variabili in maiuscolo. Prendi nota in particolare di come facciamo riferimento alle variabili di ambiente quando le usiamo nei comandi, con le precedenti $. Il $dice l'interprete dei comandi per utilizzare il valore della variabile. Senza il $, il echocomando precedente sarebbe semplicemente stampare il nome della variabile, FOO.

Comandi Unix

Indipendentemente dalla shell che si utilizza, ogni volta che si digita un comando nella shell, verrà eseguito un programma Unix. La filosofia di progettazione di Unix è quella di creare programmi che fanno bene una cosa e di concatenarli (o "collegarli") insieme per fare un lavoro utile. Diamo un'occhiata a un semplice esempio per contare il numero di file nella directory / etc (vedremo più avanti come spostarci nella directory / etc):

Questa sequenza di comandi illustra due concetti importanti: tubazioni e opzioni. Il lscomando (equivalente al dircomando in Windows) visualizza il contenuto di una directory e  wc(conteggio parole) il numero di parole. Notare la barra verticale tra di loro? Questo è il carattere della pipa. La pipe prende l'output del primo comando e lo indirizza come input al secondo comando. È possibile concatenare un numero qualsiasi di comandi in Unix collegandoli tra loro tramite pipe.

La seconda cosa da notare sono le opzioni fornite a ciascun comando. In Unix, le opzioni sono tradizionalmente preceduti da un singolo carattere trattino, -. Queste opzioni della riga di comando modificano il comportamento del comando. In questo esempio, l' -l opzione a lssignifica visualizzare il contenuto della directory in formato "lungo", mentre l' –lopzione a wcsignifica contare le "righe" invece delle parole. In inglese questo comando potrebbe essere letto:

Elenca il numero di righe nella directory corrente e poi inviale al programma di conteggio parole per contare il numero di righe.

Spesso queste opzioni della riga di comando sovrascrivono i valori predefiniti impostati nell'ambiente. Se si desidera modificare il modo in cui il comando si comporta in modo permanente, è possibile impostare automaticamente la variabile di ambiente quando si effettua l'accesso. Molti comandi consentono di combinare le opzioni in una singola stringa, ad esempio, ls -lama altri no. Puoi conoscere tutte le opzioni di un comando controllando il suo manuale o le "pagine man" (di cui parleremo di seguito).

Imparare e usare le opzioni della riga di comando è una parte importante dell'essere efficienti dalla riga di comando di Unix. Alcuni comandi hanno così tante opzioni che la documentazione viene eseguita su dozzine di pagine. Non lasciare che questo ti preoccupi adesso. Spesso sono necessarie solo poche opzioni per eseguire una determinata attività e molte opzioni vengono utilizzate solo quando si scrivono programmi nel linguaggio shell.

Il manuale

Una volta comprese le basi della riga di comando e dell'ambiente, possiamo iniziare ad approfondire il sistema. Il primo punto di partenza è il manuale.

Uno degli aspetti piacevoli di Unix è l'alta qualità della documentazione. È disponibile documentazione per utenti, amministratori di sistema e sviluppatori di software. Si accede alla documentazione con il mancomando. Cominciamo leggendo il manuale per il manuale (inserisci man mansulla riga di comando):

I manuali sono suddivisi in otto sezioni, che variano leggermente a seconda che tu stia utilizzando un tipo di Unix BSD / Linux / Mac o System V. È utile iniziare leggendo l'introduzione di ciascuna sezione, e puoi farlo con un incantesimo come man -s 1 intro, il che significa guardare nella sezione 1 per trovare una pagina di manuale chiamata "intro":

Se non sei sicuro di quale comando stai cercando, puoi provare le opzioni -fe -k. ti dirà la funzione di un comando se conosci il suo nome, mentre elencherà i nomi dei comandi rilevanti in base a una o più parole chiave. Entrambe le opzioni cercheranno un database integrato (se è stato configurato, di solito lo ha) e restituiranno tutte le corrispondenze. Ad esempio, verranno visualizzate le pagine di manuale che iniziano con la stringa :man –f command man –k hint man –k bzerbz

Il file system

Ci sono molti comandi relativi al file system Unix, poiché è fondamentale per il sistema operativo. Ne abbiamo visto uno in precedenza ls:, che elenca i file in una directory:

Il lscomando può essere il comando più utilizzato di tutti e ha molte opzioni per regolare il suo output. Un'opzione che vorrai sapere subito è ls -a(elenca tutto). Questo rivelerà i file "punto" (file o directory i cui nomi iniziano con un punto o un punto), che sono nascosti per impostazione predefinita. Questi file o directory generalmente contengono informazioni di configurazione o file di registro per il sistema Unix. Il file .bash_history, ad esempio, registra tutti i comandi immessi nella riga di comando.

L'altro comando di cui avrai bisogno subito è il cdcomando, che usi per cambiare directory. È simile allo stesso comando in Windows, ma con un'importante differenza. In Unix, tutte le unità (dispositivi) vengono visualizzate come una singola unità. Mentre in Windows potresti avere le tue foto su un disco rigido esterno che appare come E :, in Unix quell'unità potrebbe essere / home / user / pictures. Tutti i file su un sistema Unix sono accessibili tramite un percorso che inizia con / (la directory principale), ed è possibile montare diversi dischi rigidi in diversi punti del file system in base alle proprie esigenze.

Prima di iniziare a vagare per il file system, permettimi di introdurre un altro comando di cui avrai bisogno: pwd(stampa directory di lavoro). Poiché ci sono potenzialmente molti posti in cui perdersi in un file system in crescita, questi comandi ti consentono di determinare rapidamente dove ti trovi. Passiamo alle directory nella posizione in cui sono conservati i file di configurazione del sistema e verifichiamo la nostra posizione:

Nota che puoi usare il cdcomando senza argomenti per tornare rapidamente alla tua directory home. Un altro suggerimento: ~può essere usato come scorciatoia per fare riferimento alla directory home sia in Bash che nella shell C. 

A questo punto sai come muoverti nel file system ed elencare il contenuto delle directory. Ora abbiamo bisogno di un modo per leggere i file in essi memorizzati. Oggigiorno la maggior parte dei sistemi viene fornita con il lesscomando per questo. lessmostrerà un file pagina per pagina e ti permetterà di navigare usando i comandi Vi (premi jper spostarti verso il basso, kper spostarti verso l'alto, hper ottenere aiuto e qper uscire dal file).

Vediamo cosa c'è nel nostro file / etc / passwd inserendo less /etc/passwd:

Il file passwd elenca gli account utente su un sistema Unix, insieme ai loro numeri ID utente e gruppo, la loro home directory e il percorso del comando o della shell corrispondente. Su MacOS, tuttavia, troverai solo gli account dei servizi di sistema in passwd. Questo perché gli utenti umani sono configurati in Utenti e gruppi nelle Preferenze di Sistema di MacOS.

Spazio sul disco

L'esaurimento dello spazio su disco è un processo graduale che potrebbe richiedere anni, ma può comunque coglierti di sorpresa. Ci sono due comandi che puoi usare per controllare lo spazio libero e determinare quali file stanno monopolizzando il tuo disco: du(utilizzo del disco) e df(disco libero). Entrambi scelgono -hun'opzione (leggibile dall'uomo). Per avere un'idea di quanto è pieno il tuo disco, usa il dfcomando:

Per ora, concentrati sulle colonne %iusede mounted on. Questo mostra che la mia home directory è piena al 92%, quindi probabilmente dovrei ripulirla. Ma come faccio a sapere dove viene utilizzato tutto lo spazio? Ecco a cosa duserve:

Per questo esempio, sono andato con un incantesimo che limita l'output alle prime 10 righe. Altrimenti duelencherà tutte le directory sulla macchina, che potrebbero essere facilmente troppo da comprendere. Da questo elenco puoi vedere quanto spazio viene consumato da ciascuna directory. Potresti anche vedere come, concatenando insieme alcuni comandi, potremmo facilmente mettere insieme uno script che elencherebbe le prime 10 directory in base all'utilizzo dello spazio. Il comando di cui abbiamo bisogno per ordinare l'output è ovviamente il sortcomando.

Poiché la versione di MacOS di sortnon può gestire dul'output leggibile dall'uomo, ho utilizzato l' -mopzione per duvisualizzare l'utilizzo del disco in megabyte (usa l' opzione -go -kper visualizzare in gigabyte o kilobyte). Le opzioni -ne -rper sortordinare l'output numericamente e in ordine inverso, in modo che le directory più grandi vengano visualizzate all'inizio dell'elenco.

Superuser, su e sudo

Un certo numero di comandi si riferiscono all'amministrazione del sistema. Prova a digitare man -s 8 introper introdurli. Ho intenzione di dare il comando di quella essenziale per la gestione del sistema qui: su. Sta per "super user" e si riferisce all'utente amministrativo o all'account root. Tutti i file appartenenti al sistema sono di proprietà di questo utente e dovrai diventare questo utente per eseguire l'amministrazione.

Un comando correlato, sudoti consente di diventare il super utente per un singolo comando. Perché usare sudoinvece di su? Perché le migliori pratiche impongono di non correre come utente root, con il potere di causare danni irreparabili accidentalmente. Avrai sempre voglia di fare tutto ciò che puoi possibilmente come un utente normale e diventare un super utente solo quando necessario. Il modo esatto in cui ottieni i privilegi di super utente dipenderà dalla tua distribuzione Unix. Vediamo come sufunziona su MacOS:

Eh? Sono sicuro di aver digitato correttamente la password. Quello che è successo qui è che il mio attuale utente nunez,, non ha il permesso di farlo su. Su alcuni Unix questo significa che l'utente deve essere nel wheelgruppo e su altri sistemi (incluso MacOS) l'utente deve essere nel sudoersfile.

Terminiamo aggiungendo nuneza sudoers, che ti darà un assaggio di modificare i file sulla riga di comando. Gli utenti esperti cantano le lodi degli editor di Emacs e Vi e vi incoraggio a provarli, ma qui useremo Nano. Nano è facile da imparare e da usare e MacOS e molte distribuzioni Linux sono già installate.