GNU/Linux >> Linux Esercitazione >  >> Linux

Padroneggia il comando ls di Linux

Le ls comando elenca i file su un sistema POSIX. È un comando semplice, spesso sottovalutato, non in quello che può fare (perché in realtà fa solo una cosa), ma in come puoi ottimizzarne l'uso.

Dei 10 comandi terminali più essenziali da conoscere, l'umile ls command è tra i primi tre, perché ls non solo list file, ti dice informazioni importanti su di loro. Ti dice cose come chi possiede un file o una directory, quando ogni file è stato perso o modificato e persino che tipo di file è. E poi c'è la sua funzione incidentale di darti un'idea di dove ti trovi, quali oggetti vicini sono in giro e cosa puoi farci.

Se la tua esperienza con ls è limitato a qualunque alias la tua distribuzione abbia in .bashrc , allora probabilmente ti stai perdendo.

GNU o BSD?

Prima di esaminare i poteri nascosti di ls , devi determinare quali ls comando che stai eseguendo. Le due versioni più popolari sono la versione GNU, inclusa nelle coreutils GNU pacchetto e la versione BSD. Se stai utilizzando Linux, probabilmente hai ls installato. Se stai utilizzando BSD o MacOS, allora hai la versione BSD. Ci sono differenze, per le quali questo articolo tiene conto.

Puoi scoprire quale versione è sul tuo computer con --version opzione:

$ ls --version

Se questo restituisce informazioni sulle coreutils GNU, allora hai la versione GNU. Se restituisce un errore, probabilmente stai eseguendo la versione BSD (esegui man ls | head certo).

Dovresti anche esaminare quali preset potrebbero avere la tua distribuzione. Le personalizzazioni dei comandi del terminale vengono spesso inserite in $HOME/.bashrc o $HOME/.bash_aliases o $HOME/.profile , e si ottengono con l'alias ls a un ls più complesso comando. Ad esempio:

alias ls='ls --color'

I preset forniti dalle distribuzioni sono molto utili, ma rendono difficile discernere cosa l fa da solo e cosa forniscono le sue opzioni aggiuntive. Se mai volessi eseguire ls e non l'alias, puoi "sfuggire" al comando con una barra rovesciata:

$ \ls

Classifica

Corri da solo, ls elenca semplicemente i file in tutte le colonne che possono stare nel tuo terminale:

$ ls ~/example
bunko        jdk-10.0.2
chapterize   otf2ttf.ff
despacer     overtar.sh
estimate.sh  pandoc-2.7.1
fop-2.3      safe_yaml
games        tt

È un'informazione utile, ma tutti quei file sembrano sostanzialmente uguali senza la comodità delle icone per comunicare rapidamente quale è una directory, un file di testo o un'immagine e così via.

Usa la -F (o --classifica su GNU) per mostrare gli indicatori dopo ogni voce che identificano il tipo di file che è:

$ ls ~/example
bunko         jdk-10.0.2/
chapterize*   otf2ttf.ff*
despacer*     overtar.sh*
estimate.sh   pandoc@
fop-2.3/      pandoc-2.7.1/
games/        tt*

Con questa opzione, gli elementi elencati nel tuo terminale sono classificati per tipo di file utilizzando questa abbreviazione:

  • Una barra (/ ) denota una directory (o "cartella").
  • Un asterisco (* ) denota un file eseguibile. Ciò include un file binario (codice compilato) e script (file di testo con autorizzazione eseguibile).
  • Un segno di chiocciola (@ ) denota un collegamento simbolico (o "alias").
  • Un segno di uguale (= ) denota un socket.
  • Su BSD, un segno di percentuale (% ) denota un whiteout (un metodo di rimozione dei file su determinati file system).
  • Su GNU, una parentesi angolare (> ) indica una porta (comunicazione tra processi su Illumos e Solaris).
  • Una barra verticale (| ) denota una FIFO.

Una versione più semplice di questa opzione è -p , che differenzia solo un file da una directory.

Lista lunga

Ottenere una "lunga lista" da ls è così comune che molte distribuzioni alias ll a ls -l . Il modulo elenco lungo fornisce molti importanti attributi di file, come autorizzazioni, l'utente che possiede ciascun file, il gruppo a cui appartiene il file, la dimensione del file in byte e la data dell'ultima modifica del file:

$ ls -l
-rwxrwx---. 1 seth users         455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth users         662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users    20697793 Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth users        6210 May 22 10:22 geteltorito
-rwxrwx---. 1 seth users         177 Nov 12  2018 html4mutt.sh
[...]

Se non pensi in byte, aggiungi -h flag (o --umano in GNU) per tradurre le dimensioni dei file in una notazione più umana:

$ ls --human
-rwxrwx---. 1 seth users    455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth seth     662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users    20M Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth seth    6.1K May 22 10:22 geteltorito
-rwxrwx---. 1 seth users    177 Nov 12  2018 html4mutt.sh

Puoi vedere solo un po' meno di informazioni mostrando solo la colonna del proprietario con -o o solo la colonna del gruppo con -g :

$ ls -o
-rwxrwx---. 1 seth    455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth    662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth    20M Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth   6.1K May 22 10:22 geteltorito
-rwxrwx---. 1 seth    177 Nov 12  2018 html4mutt.sh

Combina entrambe le opzioni per non mostrare nessuna.

Formato di ora e data

Il formato elenco lungo di ls di solito ha questo aspetto:

-rwxrwx---. 1 seth users         455 Mar  2  2017 estimate.sh
-rwxrwxr-x. 1 seth users         662 Apr 29 22:27 factorial
-rwxrwx---. 1 seth users    20697793 Jun 29  2018 fop-2.3-bin.tar.gz
-rwxrwxr-x. 1 seth users        6210 May 22 10:22 geteltorito
-rwxrwx---. 1 seth users         177 Nov 12  2018 html4mutt.sh

I nomi dei mesi non sono facili da ordinare, sia computazionalmente che (a seconda che il tuo cervello tenda a preferire stringhe o numeri interi) per riconoscimento. Puoi modificare il formato del timestamp con lo --stile dell'ora opzione più il nome di un formato. I formati disponibili sono:

  • iso pieno (01-01-1970 21:12:00)
  • iso lungo (01-01-1970 21:12)
  • iso (01-01 21:12)
  • locale (usa le tue impostazioni locali)
  • posix-STYLE (sostituisci STYLE con una definizione locale)

Puoi anche creare uno stile personalizzato utilizzando la notazione formale della data comando.

Ordina per ora

Di solito, le ls il comando ordina in ordine alfabetico. Puoi ordinarlo in base a quale file è stato modificato più di recente (il più recente è elencato per primo) con -t opzione.

Ad esempio:

$ touch foo bar baz
$ ls
bar  baz  foo
$ touch foo
$ ls -t
foo bar baz

Tipo di elenco

L'output standard di ls bilancia la leggibilità con l'efficienza dello spazio, ma a volte si desidera che l'elenco dei file sia in una disposizione specifica.

Per un elenco di file separati da virgole, utilizza -m :

ls -m ~/example
bar, baz, foo

Per forzare un file per riga, usa -1 opzione (questa è la numero uno, non una L minuscola):

$ ls -1 ~/bin/
bar
baz
foo

Per ordinare le voci in base all'estensione del file anziché al nome del file, utilizza -X (è una X maiuscola):

$ ls
bar.xfc  baz.txt  foo.asc
$ ls -X
foo.asc  baz.txt  bar.xfc

Nascondi il disordine

Ci sono alcune voci in alcune ls inserzioni che potrebbero non interessarti. Ad esempio, i metacaratteri . e .. rappresentano rispettivamente "qui" e "indietro di un livello". Se hai familiarità con la navigazione in un terminale, probabilmente sai già che ogni directory si riferisce a se stessa come . e al suo genitore come .. , quindi non devi ricordartelo costantemente quando usi -a opzione per mostrare i file nascosti.

Per mostrare quasi tutti i file nascosti (il . e .. esclusi), utilizzare la -A opzione:

$ ls -a
.
..
.android
.atom
.bash_aliases
[...]
$ ls -A
.android
.atom
.bash_aliases
[...]

Con molti buoni strumenti Unix, c'è una tradizione nel salvare i file di backup aggiungendo un carattere speciale al nome del file che viene salvato. Ad esempio, in Vim, i backup vengono salvati con ~ carattere aggiunto al nome.

Questo tipo di file di backup mi ha salvato da errori stupidi in diverse occasioni, ma dopo anni passati a godere del senso di sicurezza che forniscono, non sento il bisogno di avere prove visive della loro esistenza. Mi fido delle applicazioni Linux per generare file di backup (se affermano di farlo) e sono felice di credere che esistano.

Per nascondere i file di backup dalla visualizzazione, usa -B o --ignora i backup per nascondere i formati di backup comuni (questa opzione non è disponibile in BSD ls ):

$ ls
bar.xfc  baz.txt  foo.asc~  foo.asc
$ ls -B
bar.xfc  baz.txt  foo.asc

Naturalmente, il file di backup esiste ancora; è solo filtrato in modo da non doverlo guardare.

GNU Emacs salva i file di backup (se non diversamente configurato) con un carattere hash (# ) all'inizio e alla fine del nome del file (#file# ). Altre applicazioni potrebbero utilizzare uno stile diverso. Non importa quale modello viene utilizzato, perché puoi creare le tue esclusioni con --hide opzione:

$ ls
bar.xfc  baz.txt  #foo.asc#  foo.asc
$ ls --hide="#*#"
bar.xfc  baz.txt  foo.asc

Elenca le directory con ricorsione

I contenuti delle directory non sono elencati con ls comando a meno che tu non esegua ls su quella directory in particolare:

$ ls -F 
example/  quux*  xyz.txt
$ ls -R
quux  xyz.txt

./example:
bar.xfc  baz.txt  #foo.asc#  foo.asc

Rendilo permanente con un alias

Le ls command è probabilmente il comando usato più spesso durante una data sessione di shell. Sono i tuoi occhi e le tue orecchie, che ti forniscono il contesto e confermano i risultati dei comandi. Sebbene sia utile avere molte opzioni, fa parte della bellezza di ls è la sua brevità:due caratteri e il tasto Invio, e sai esattamente dove sei e cosa c'è nelle vicinanze. Se devi fermarti a pensare (molto meno a digitare) diverse opzioni, diventa meno conveniente, quindi in genere anche le opzioni più utili vengono tralasciate.

La soluzione è alias i tuoi ls comando in modo che quando lo usi, ottieni le informazioni a cui tieni di più.

Per creare un alias per un comando nella shell Bash, crea un file nella tua home directory chiamato .bash_aliases (è necessario includere il punto all'inizio). In questo file, elenca il comando per cui desideri creare un alias e quindi l'alias che desideri creare. Ad esempio:

alias ls='ls -A -F -B --human --color'

Questa riga fa sì che la tua shell Bash interpreti ls comando come ls -A -F -B --human --color .

Non sei limitato a ridefinire i comandi esistenti. Puoi creare i tuoi alias:

alias ll='ls -l'
alias la='ls -A'
alias lh='ls -h'

Affinché gli alias funzionino, la tua shell deve sapere che .bash_aliases esiste il file di configurazione. Apri il .bashrc file in un editor (o crealo, se non esiste) e includi questo blocco di codice:

if [ -e $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

Ogni volta .bashrc viene caricato (ovvero ogni volta che viene avviata una nuova shell Bash), Bash caricherà .bash_aliases nel tuo ambiente. Puoi chiudere e riavviare la tua sessione Bash o semplicemente forzarla a farlo ora:

$ source ~/.bashrc

Se dimentichi se hai assegnato un alias a un comando, il che comando ti dice:

$ which ls
alias ls='ls -A -F -B --human --color'
        /usr/bin/ls

Se hai alias ls comando a se stesso con le opzioni, puoi sostituire il tuo alias in qualsiasi momento prefacendo ls con una barra rovesciata. Ad esempio, nell'alias di esempio, i file di backup vengono nascosti utilizzando -B opzione, il che significa che non è possibile eseguire il backup dei file con ls comando. Sostituisci l'alias per vedere i file di backup:

$ ls
bar  baz  foo
$ \ls
bar  baz  baz~  foo

Fai una cosa e falla bene

Le ls comando ha un numero sbalorditivo di opzioni, molte delle quali sono di nicchia o fortemente dipendenti dal terminale in uso. Dai un'occhiata a info ls su sistemi GNU o man ls su sistemi GNU o BSD per ulteriori opzioni.

Potresti trovare strano che un sistema famoso per la premessa che ogni strumento "fa una cosa e la fa bene" appesantirebbe il suo comando più comune con 50 opzioni. Ma ls fa solo una cosa:elenca i file. E con 50 opzioni che ti consentono di controllare come ricevi quell'elenco, ls fa il suo unico lavoro molto, molto bene.


Linux
  1. Introduzione al comando alternatives in Linux

  2. 5 Esempi pratici del comando dd in Linux

  3. Comando Linux mv

  4. Linux du comando

  5. comando IP Linux

Il comando timer in Linux

Il comando curl di Linux

Esempi essenziali del comando ps in Linux

Qual è il comando kill in Linux?

Comprendere il comando dell'ora in Linux

Uso del comando grep in Linux