Warum ls ohne -l 1 zurückgeben, wenn die Berechtigung zum Verzeichnis r-- ist

6

Ich habe dies und das gelesen und festgestellt, dass mein Problem anders und spezifischer ist.

Ich verstehe die folgenden Punkte.

  • + x im Verzeichnis gewährt Zugriff auf Dateien inodes über dieses bestimmte Verzeichnis
  • Metainformationen einer Datei, die von verwendet wird ls -l, werden in ihrem i-Knoten gespeichert, aber der Dateiname gehört nicht dazu

Von den beiden oben genannten Punkten sollte, da lsohne -lnicht auf die i-Knoten der Dateien im Verzeichnis zugegriffen werden muss, die Dateinamen erfolgreich aufgelistet und 0 zurückgegeben werden.

Als ich es auf meinem Computer ausprobierte, wurden die Dateinamen aufgelistet, aber es gab einige Warnungen wie permission denied, und der Rückkehrcode ist 1.

b03705028@linux7 [~/test] chmod 500 permission/
b03705028@linux7 [~/test] ls --color=no permission/
f1*
b03705028@linux7 [~/test] chmod 400 permission/
b03705028@linux7 [~/test] ls --color=no permission/
ls: 無法存取 'permission/f1': 拒絕不符權限的操作
f1
b03705028@linux7 [~/test] echo $0
bash

Die chinesischen Schriftzeichen sprechen grundsätzlich darüber permission denied

Meine Unix-Distribution ist Linux 4.17.11-arch1

David Chen
quelle
Hallo David, leider kann ich dein Problem nicht reproduzieren. Bash zu verwenden rm -rf lala; mkdir lala; chmod 400 lala; command ls lalaist für mich erfolgreich. Das stellt commandnur sicher, dass kein Alias ​​von lsverwendet wird. Könnten Sie bitte Ihre Frage mit den genauen Befehlen erweitern, die Sie eingeben, um das Problem anzuzeigen? (dh machen Sie eine minimale Arbeitsdemonstration von dem, was Sie beobachten)
stefan
Hallo Stefan, ich echo $0überprüfe, ob ich auch benutze bash. Darf ich fragen, welche Unix-Distribution Sie verwenden? Ich habe das Problem so aktualisiert, dass es die von mir verwendeten Befehle enthält.
David Chen
Was passiert, wenn Sie /bin/lsdirekt laufen ? Es ist sehr wahrscheinlich, dass Sie einen Alias ​​oder eine Funktion in Ihrer Shell haben, die versucht, Dateistatistiken abzurufen. Das *am Ende f1lässt mich denken, dass es die -FFlagge gibt
Stephen Harris
@ StephenHarris Ja, das ist der Grund. Problem gelöst. Ihr seid unglaublich.
David Chen
Ja, ich gehe davon aus, dass Ihr lsAlias ​​ist und das -FFlag verwendet, um die Füllungen zu klassifizieren, siehe ls(1). Dies würde versuchen, darauf zuzugreifen f1, um es zu klassifizieren und ein Sternchen anzuhängen. Mit ls --color=nonur an den Alias ​​anhängen. Versuchen Sie es command lsstattdessen. Ich benutze ArchLinux, sollte keinen Unterschied machen.
Stefan

Antworten:

8

Ich vermute lsin Ihrem Fall ist ein Alias ​​für so etwas ls --color=auto; In diesem Fall wird lsversucht, Informationen zu den im Verzeichnis enthaltenen Dateien zu finden, um festzustellen, welche Farbe verwendet werden soll.

ls --color=no

sollte das Verzeichnis auflisten, ohne sich zu beschweren.

Wenn es sich immer noch beschwert, verwenden Sie möglicherweise eine andere Option, wie -Foder --classify, die auf Dateimetadaten zugreifen muss ( -F/ --classifybetrachtet beispielsweise den Dateityp).

lsVerwenden Sie eine der folgenden Optionen, um sicherzustellen, dass Sie ohne Alias ​​ausgeführt werden

command ls

oder

\ls

lsVerwenden Sie zum Entfernen eines Alias ​​für

unalias ls
Stephen Kitt
quelle
Danke für die Antwort. Ich habe es gerade versucht ls --color=no, aber das Ergebnis ist genau das gleiche. Ich habe auch überprüft /etc/bash.bashrcund ~/.bashrc, und es gibt keine solchen Aliase. Vermisse ich etwas
David Chen
@DavidChen Was gibt type lszurück?
Kusalananda
@Kusalananda ls is alias of「ls --color -F」Ich denke -Fhier ist der Grund, warum ich immer noch den Rückkehrcode als 1 bekomme, selbst wenn ich ihn benutze --clor=no?
David Chen
@DavidChen Ja, diese Option muss auf den Dateityp jeder Datei zugreifen.
Kusalananda
2
@DavidChen Nicht, wenn Sie es in Ihre ~/.bashrcDatei einfügen .
Kusalananda