Es gibt einen chmod- Befehl zum Festlegen von Dateiberechtigungen. Kann ich Dateiberechtigungen im oktalen Modus (z. B. 755) über die Befehlszeile abrufen?
command-line
permissions
Anwar
quelle
quelle
stat --format "%A" $FILE
gibt Ihnen das für Menschen lesbaredrwxr-x---
Format. was nützlich sein kann oder nicht.Antworten:
Du kannst es versuchen
Ersetzen Sie
*
durch das entsprechende Verzeichnis oder den genauen Dateinamen, den Sie untersuchen möchten.Von der Manpage von stat ,
Verwendungszweck:
Mit Dateien:
Mit Ordnern:
(Referenz)
quelle
stat -f '%A %a %N' *
ls
:for f in $(ls -a); do stat -c "%a %n" $f; done;
ls
ist eine schlechte Idee. Wenn Sie wirklich eine Schleife verwenden möchten, können Sie dies tunfor f in *; do stat "%a %n" "$f"; done
Dateiberechtigungen unter Linux können mit dem Befehl Linux stat im oktalen Format angezeigt werden.
Drücken Sie einfach Ctrl+ Alt+ Tauf Ihrer Tastatur, um das Terminal zu öffnen. Navigieren Sie beim Öffnen zu dem Verzeichnis, in dem Sie die Dateiberechtigungen im Oktalmodus suchen möchten.
% A Zugriffsrechte in lesbarer Form
% a Zugriffsrechte in Oktal
% n Dateiname
Quelle: http://kmaiti.blogspot.com/2011/09/umask-concept.html
quelle
Wie detailliert in „755“ -Stil Erlaubnissen ‚ls‘ von Adam Courtemanche auf AgileAdam.com , können Sie erstellen eine Alias
lso
, der wie wirktls -l
aber verarbeitet leicht den Ausgang 1 zu Anzeigeberechtigungen auch in Oktal. Dies fügt eine führende Spalte mit dreistelligen 2- Oktal-Berechtigungen hinzu. Wie geschrieben funktioniert dies für die meisten Dateien und Verzeichnisse, aber es funktioniert nicht richtig, wenn die Sticky- oder Setuid / Setgid- Bits gesetzt sind. 3Dies hat einen ernsten Mangel, obwohl, wie Techtonik weist darauf hin . Sie können diesem
lso
Alias keine Argumente wie demls
Befehl übergeben , da sieawk
stattdessen als zusätzliche Argumente verwendet werden. Sie können daher wederlso
eine bestimmte Datei oder ein bestimmtes Verzeichnis ausführen , noch Optionen (wie-F
oder--color
) übergebenlso
.Der Fix besteht darin,
lso
eine Funktion anstatt eines Alias zu definieren .Wenn Sie dies interaktiv in Ihrer Shell ausprobieren, führen Sie den Befehl aus,
unalias lso
um den Alias zu entfernen. Dies können Sie entweder vor oder nach der Definition der Funktion tun. Wenn Sie es in eine Datei einfügen, deren Quelle beispielsweise ist~/.bashrc
, nehmen Sie einfach diealias
Zeile heraus und fügen Sie die Funktionsdefinition hinzu.Warum funktioniert das? Im Gegensatz zu Aliasen können Bash-Shell-Funktionen Positionsparameter , dh Befehlszeilenargumente, annehmen .
"$@"
Erweitert die vollständige Argumentliste , wodurch Argumente an dielso
Funktion übergeben werdenls
. (Im Gegensatz zu einer Alias-Definition wird ein Funktionskörper nicht in Anführungszeichen gesetzt. Daher mussten die\
Zeichen vor$
und entfernt werden"
.)Da Sie Optionen übergeben können,
lso
wenn Sie auf diese Weise als Funktion definiert wurden, möchten Sie möglicherweise die-a
und-G
-Optionen aus der Definition entfernen. Sie können sie in Fällen, in denen Sie sie möchten, manuell übergeben. ( Die-l
Option ist für Details wie Dateiberechtigungen erforderlich angezeigt wird überhaupt , so gibt es keinen Vorteil , es zu entfernen.)Dank Techtonik für den Hinweis auf die Einschränkung bei der Definition
lso
als Alias, also ich motivierend diesen Beitrag mit Material erweitern darüber eine Funktion stattdessen zu machen.1 Man kann feststellen, dass dies gegen die allgemeine Regel
ls
zu verstoßen scheint, dass die Ausgabe von nicht analysiert wird .ls
Erzeugt eine sehr gut lesbare Ausgabe. Dies führt zu Besonderheiten und Einschränkungen, die es im Allgemeinen als Eingabe für andere Befehle ungeeignet machen. In diesem Fall analysieren wir,ls
da wir das exakte Verhalten vonls
bis auf unsere einzige hinzugefügte Änderung beibehalten möchten .2 Eine Einschränkung dieses Alias, die auch für die darunter gezeigte Funktionsversion gilt und als Fehler angesehen werden kann, besteht darin, dass nur drei Oktalziffern angezeigt werden, auch wenn die vierte Oktalziffer Null ist. Wie jfmercer hat zu Recht darauf hingewiesen , zeigten die Oktalziffern hier spiegeln nicht das Sticky - Bit , falls vorhanden, noch setuid oder setgid - Bits.
3 Noch gravierender ist als nicht nur den vierten Oktalziffer zeigt ist , dass diese Methode übernimmt sie nicht festgelegt ist, und wenn sie - wenn Sie sehen
t
,s
oderS
in der Berechtigungszeichenfolge - dann sollten Sie die Oktalziffern außer Acht lassen . Dies liegt daran, dass die Bits in einer Weise aus der Berechtigungszeichenfolge abgeleitet werden, die klebrige setuid / setgid-Bits nicht berücksichtigt.quelle
awk: read error (Is a directory)
--color
Parameter fürlso() { ls -alG "$@" --color | 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}'; }
Nur die vorherigen stat-bezogenen Antworten erweitern und vereinfachen:
Sie können einfach ausführen:
Die Ausgabe enthält neben anderen Informationen auch die oktale Berechtigung.
Details (stat version und Beispiel):
Beachten Sie die: ( 0644 / -rw-r - r--)
quelle
Aus Gründen der Portabilität können Sie Folgendes verwenden
perl
:Wenn Sie feststellen möchten, dass ein Fehler auftritt, versuchen Sie Folgendes:
quelle
Sie können
find
mit der-printf
Aktion verwenden.ls
Zeigt keine oktalen Berechtigungen an, aber Sie können diesefind
Problemumgehung verwenden:So überprüfen Sie beispielsweise mein Videoverzeichnis:
Der
%m
Formatbezeichner weist die-printf
Aktion an, oktale Berechtigungen zu drucken, während der%f
Formatbezeichner den Dateinamen ausgibt.Sie können mehrere Dateinamen an übergeben
find
. Sie können sogar Globs verwenden (zBfind * -printf "%m:%f\n"
).Sie müssen keinen Test wie
-name
oder verwenden-iname
. Es reicht aus, die Namen der Dateien oder Verzeichnisse, an denen Sie interessiert sind, als Ausgangspunkte zu übergebenfind
. Das heißt, geben Sie ihre Namen als Argumente direkt nach dem Wort anfind
, wie oben gezeigt.find
gibt Ihnen eine gute Kontrolle darüber, wie die Ausgabe angezeigt wird. Es gibt insbesondere zwei Modifikationen, die Sie nützlich finden könnten:Standardmäßig
find
rekursive Unterverzeichnisse, ähnlich wiels -R
. Wenn Siefind
die Unterverzeichnisse der Startpunkte, die Sie übergeben, nicht besuchen möchten , können Sie sie hinzufügen-maxdepth 0
(oder zusammen-maxdepth
mit anderen Werten angeben, wie tief sie sein sollen).%f
Zeigt nur einen Dateinamenfind
an. Wenn Sie also erneut auf eine Datei zugreifen müssen, wissen Sie möglicherweise nicht, wo sie sich befindet. Verwenden Sie%p
stattdessen, um einen Pfad anzuzeigen, beginnend mit dem Startpunkt, unter dem die Datei gefunden wurde .Sehen Sie
man find
für weitere Informationen über die Verwendung vonfind
Befehl.Eine andere Methode (
ls
undawk
)Dies kann verwendet werden, um alle Verzeichnisdateien mit ihren Berechtigungen aufzulisten:
Dies ist im Wesentlichen derselbe Befehl wie in Adam Courtemanches
lso
Alias , der in dieser Antwort nur als ein einziger Befehl ausgeführt wird. Wenn Sie diese Funktion nur einmal oder in seltenen Fällen verwenden, möchten Sie sie möglicherweise nicht als Alias- oder Shell-Funktion schreiben.quelle