x-Bit für Verzeichnis wird auch als Suchbit bezeichnet. Tatsächlich können Sie auf die Inodes der im Ordner aufgelisteten Dateien zugreifen. Wenn Sie also auf /home/user/foo/bar.txt zugreifen möchten, müssen Sie Suchzugriff auf alle Vorfahren von bar.txt haben
Zitat von der Seite
Da Verzeichnisse nicht wie normale Dateien verwendet werden, funktionieren die Berechtigungen geringfügig (aber nur geringfügig) anders. Der Versuch, die Dateien in einem Verzeichnis aufzulisten, erfordert eine Leseberechtigung für das Verzeichnis, jedoch nicht für die darin enthaltenen Dateien. Für den Versuch, eine Datei zu einem Verzeichnis hinzuzufügen, eine Datei aus einem Verzeichnis zu löschen oder eine Datei umzubenennen, ist eine Schreibberechtigung für das Verzeichnis erforderlich, jedoch (möglicherweise überraschenderweise) nicht für die darin enthaltenen Dateien. Die Ausführungsberechtigung gilt nicht für Verzeichnisse (ein Verzeichnis kann nicht auch ein Programm sein). Dieses Berechtigungsbit wird jedoch für Verzeichnisse für andere Zwecke wiederverwendet.
Für ein Verzeichnis ist eine Ausführungsberechtigung erforderlich, um darin eine CD zu erstellen (d. H., Um ein Verzeichnis zu Ihrem aktuellen Arbeitsverzeichnis zu machen).
Execute ist für ein Verzeichnis erforderlich, um auf die Inode-Informationen der darin enthaltenen Dateien zuzugreifen. Sie benötigen dies, um ein Verzeichnis zu durchsuchen und die Inodes der darin enthaltenen Dateien zu lesen. Aus diesem Grund wird die Ausführungsberechtigung für ein Verzeichnis häufig als Suchberechtigung bezeichnet.
In vielen Situationen ist eine Suchberechtigung erforderlich. Betrachten Sie den Befehl cat / home / user / foo. Dieser Befehl erfordert eindeutig eine Leseberechtigung für die Datei foo. Aber wenn Sie keine Suchberechtigung für die Verzeichnisse /, / home und / home / user haben, kann cat die Inode von foo nicht finden und kann sie daher nicht lesen! Sie benötigen eine Suchberechtigung für jedes Vorgängerverzeichnis, um auf den Inode einer Datei (oder eines Verzeichnisses) zuzugreifen. Sie können eine Datei nur lesen, wenn Sie zu ihrem Inode gelangen.
Weitere Informationen finden Sie im Abschnitt zum Dateiberechtigungsverzeichnis.
Update: Leo hat eine sehr gute Frage aufgeworfen. Wenn wir den Inode kennen, können wir dann von einem Verzeichnis aus auf eine Datei zugreifen, dessen x-Bit nicht gesetzt ist? Ich glaube, wir sollten das nicht können. Ich habe es nicht mit dem Programm c getestet, sondern einige nützliche Bash-Befehle verwendet, um es zu bestätigen.
user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user 8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
File: `level1'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 808h/2056d Inode: 95494 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1
File: `level1/file1'
Size: 8 Blocks: 8 IO Block: 4096 regular file
Device: 808h/2056d Inode: 60775 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ? ? file1
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775