Ist es beim Auflisten eines Verzeichnisses möglich, numerische Unix-Berechtigungen anzuzeigen, z. B. 644, anstatt der symbolischen Ausgabe -rw-rw-r--
Vielen Dank.
Verwenden Sie diese Option, um die Oktalwerte (numerische chmod-Berechtigungen) und den Dateinamen anzuzeigen:
stat -c '%a %n' *
Weitere Optionen finden Sie unter stat .
Eine effizientere Methode für die Verwendung eines Alias finden Sie in meinem Kommentar unten.
Am nächsten kann ich mir vorstellen, dass es stat
ist, vorausgesetzt, Sie wissen, welche Dateien Sie suchen. Wenn Sie dies nicht tun, kann *
die meisten davon finden:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Es behandelt klebrig, suid und company out of the box:
$ stat -c '%a %n' /tmp /usr/bin/Sudo
1777 /tmp
4755 /usr/bin/Sudo
sie können einfach GNU find verwenden.
find . -printf "%m:%f\n"
Sie können den folgenden Befehl verwenden
stat -c "%a %n" *
Sie können auch eine beliebige filename
oder directoryname
anstelle von *
verwenden, um ein bestimmtes Ergebnis zu erhalten.
Auf Mac können Sie verwenden
stat -f '%A %N' *
Die MYYN
wow, Nice awk! Aber was ist mit suid, sgid und sticky bit?
Sie müssen Ihren Filter um s und t erweitern, sonst werden sie nicht gezählt und Sie erhalten das falsche Ergebnis. Um die Oktalzahl für diese speziellen Flags zu berechnen, ist die Prozedur dieselbe, aber der Index befindet sich auf 4, 7 und 10. Die möglichen Flags für Dateien mit gesetztem Ausführungsbit sind ---s--s--t
AMD für Dateien ohne gesetztes Ausführungsbit ---S--S--T
ls -l | awk '{
k = 0
s = 0
for( i = 0; i <= 8; i++ )
{
k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
}
j = 4
for( i = 4; i <= 10; i += 3 )
{
s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
j/=2
}
if ( k )
{
printf( "%0o%0o ", s, k )
}
print
}'
Für test:
touch blah
chmod 7444 blah
wird darin enden, dass:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
und
touch blah
chmod 7555 blah
wird geben:
7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah
Sie verwenden ls nicht, um die Berechtigungsinformationen einer Datei abzurufen. Sie verwenden den stat-Befehl. Sie erhalten die gewünschten numerischen Werte. Der "Unix-Weg" besagt, dass Sie Ihr eigenes Skript mithilfe von ls (oder 'echo *') und stat erstellen sollten, und wie auch immer Sie die Informationen in dem gewünschten Format angeben möchten.
Verwenden Sie diese Option, um die numerischen Unix-Berechtigungswerte (Oktalwerte) und den Dateinamen anzuzeigen.
stat -c '%a %n' *
Verwenden Sie diese Option, um die numerischen Unix-Berechtigungswerte (Oktalwerte) sowie die sgid und das Sticky-Bit des Ordners, den Benutzernamen des Besitzers, den Gruppennamen, die Gesamtgröße in Byte und den Dateinamen anzuzeigen.
stat -c '%a %A %U %G %s %n' *
Fügen Sie %y
Hinzu, wenn Sie den Zeitpunkt der letzten Änderung in einem für Menschen lesbaren Format benötigen. Weitere Optionen finden Sie unter stat .
Bessere Version mit einem Alias
Die Verwendung eines Alias ist eine effizientere Methode, um die gewünschten Ergebnisse zu erzielen. Dazu gehört auch Farbe. Im Folgenden werden Ihre Ergebnisse zuerst nach Gruppenverzeichnissen geordnet, in Farbe angezeigt und die Druckgrößen in einem für Menschen lesbaren Format (z. B. 1K 234M 2G). Bearbeiten Sie Ihren ~/.bashrc
Und fügen Sie einen Alias für Ihr Konto oder global durch Bearbeiten von /etc/profile.d/custom.sh
Wenn Sie cls
eingeben, werden die Ergebnisse Ihres neuen LS-Befehls angezeigt.
alias cls="ls -lha --color=always -F --group-directories-first |awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
Ordnerstruktur
Während Sie Ihren bashrc oder custom.sh bearbeiten, fügen Sie den folgenden Alias hinzu, um eine grafische Darstellung zu erhalten, in der durch Eingabe von lstree
Ihr aktueller Ordner angezeigt wird Baumstruktur
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
Es würde anzeigen:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
nein, es können nur numerische uids/guids gedruckt werden.
tl; dr: Die schnelle Antwort auf die Frage lautet: Nein, ich kann keine numerischen Berechtigungen drucken. Verwenden Sie stat .
Erweiterte Berechtigungen gehen in der Übersetzung verloren, wenn Sie mit awk herumfummeln.
z.B:
$ ls -la /usr/local/src/
total 8
drwxrwsr-x 2 root staff 4096 Oct 23 11:18 .
drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..
Die vorgeschlagene Lösung würde dies drucken:
$ ls -la /usr/local/src | awk '{>
total 8
765 drwxrwsr-x 2 root staff 4096 Oct 23 11:18 .
765 drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..
Welches ist absolut falsch.
stat dagegen macht es richtig:
$ stat /usr/local/src Datei: /usr/local/src Größe: 4096 Blöcke: 8 IO Block: 4096 Verzeichnis Gerät: 801h/2049d Inode: 917803 Links: 2 Zugriff: (2775/drwxrwsr-x) Uid: (0/root) Gid: (50/staff) Zugriff: 2018-10-24 12: 30: 58.197907324 +0900 Modifizieren: 2018-10-23 11: 18: 59.810677000 +0900 Änderung: 2018-10-23 11: 18: 59.810677000 +0900 Geburt: -
Bonus von Mann Status:
$ stat -c %a /usr/local/src
2775
Dies wurde auf dem Debian-Stall getestet.
Aufbauend auf dem gewählten Antwort und dem Vorschlag, einen Alias zu verwenden , habe ich ihn in eine Funktion umgewandelt, so dass ein Verzeichnis an die Liste übergeben werden kann.
# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
LLS_PATH=$1
ls -AHl $LLS_PATH | 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}"
}