Come dettagliato nelle autorizzazioni in stile "755" con "ls" di Adam Courtemanche su AgileAdam.com , è possibile creare un alias lso che agisce come ls -lma elabora leggermente l'output 1 per visualizzare le autorizzazioni anche in ottale. Ciò aggiunge una colonna iniziale che mostra le autorizzazioni ottali a 2 cifre a tre cifre . Come scritto, questo funziona per la maggior parte dei file e delle directory, ma non funziona correttamente se sono impostati i bit sticky o setuid / setgid . 3
alias lso="ls -alG | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\" %0o \",k);print}'"
Ciò ha una grave lacuna, tuttavia, come sottolinea Techtonik . È Non è possibile passare argomenti a questo alias come si farebbe per il comando , perché sono presi come argomenti aggiuntivi a posto. Pertanto non è possibile eseguire su un file o una directory specifici, né è possibile passare alcuna opzione (come , o ) a .lsolsawklso-F--colorlso
La correzione è definire lso come una funzione piuttosto che un alias.
lso() { ls -alG "$@" | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
Se lo stai provando in modo interattivo nella tua shell, corri unalias lsoper rimuovere l'alias: puoi farlo prima o dopo aver definito la funzione. Se lo stai inserendo in un file di provenienza, ad esempio ~/.bashrc, elimina la aliasriga e aggiungi la definizione della funzione.
Perché funziona? A differenza degli alias, le funzioni della shell bash possono assumere parametri posizionali , cioè argomenti della riga di comando . "$@"si espande all'elenco completo degli argomenti , causando il passaggio degli argomenti alla lsofunzione ls. (A differenza di una definizione di alias, un corpo di funzione non è citato; quindi è stato necessario rimuovere i \caratteri prima $e ".)
Dal momento che puoi passare le opzioni a lsoquando definite in questo modo come una funzione, potresti voler rimuovere le opzioni -ae -Gdalla definizione - puoi passarle manualmente nei casi in cui le desideri. ( L' -lopzione è necessaria per dettagli come i permessi dei file per essere mostrato a tutti , quindi non c'è beneficio per rimuoverlo.)
lso() { ls -l "$@" | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }
Grazie a techtonik per aver sottolineato la limitazione nella definizione lsodi alias, motivandomi così ad espandere questo post con materiale per renderlo invece una funzione.
1 Si può notare che questo sembra infrangere la regola generale di non analizzare l'output dals . lsproduce output molto leggibili dall'uomo; questo introduce idiosincrasie e limitazioni che lo rendono generalmente inadatto come input per altri comandi. In questo caso analizziamo lspoiché desideriamo preservare il comportamento esattols tranne il nostro unico cambiamento aggiunto.
2 Una limitazione di questo alias, che si applica anche alla versione della funzione mostrata di seguito, e che può essere considerata un bug, è che visualizza solo tre cifre ottali anche quando la quarta cifra ottale è zero. Come jfmercer ha giustamente osservato , le cifre ottali qui visualizzati non riflettono lo sticky bit se bit presenti, nè setuid o setgid.
3 Più seriamente che semplicemente non mostra la quarta cifra ottale è che questo metodo presuppone che non sono impostati, e se sono - se si vede t, so Snella stringa di permesso - allora si dovrebbe ignorare le cifre ottali . Questo perché i bit vengono dedotti dalla stringa dei permessi in un modo che non tiene conto dei bit appiccicosi setuid / setgid.