Czy slash ( /
) jest naprawdę częścią nazwy katalogu głównego Linux? A może to tylko symbol?
A co z tym /etc
i tak dalej?
Aktualizacja
Załóżmy, że /dev/sda2
jest urządzeniem blokowym katalogu głównego Linux.
$ sudo debugfs / dev / sda2 debugfs 1.44.1 (24-mar-2018) debugfs: pwd [pwd] INODE: 2 PATH: / [root] INODE: 2 PATH: / debugfs: stat / I-węzeł: 2 Typ: katalog Tryb: 0755 Flagi: 0x80000 Generacja: 0 Wersja: 0x00000000: 00000077 Użytkownik: 0 Grupa: 0 Projekt: 0 Rozmiar: 4096 Plik ACL: 0 Linki: 25 Blockcount: 8 Fragment: Adres: 0 Liczba: 0 Rozmiar: 0 ctime: 0x5b13c9f1: 3f017990 - niedz. 3 czerwca 15:28:57 2018 atime: 0x5b13ca0f: 3b3ee380 - niedz. 3 czerwca 15:29:27 2018 mtime: 0x5b13c9f1: 3f017990 - niedz. 3 czerwca 15:28:57 2018 crtime: 0x5aad1843: 00000000 - sob. mar 17 16:59:39 2018 Rozmiar dodatkowych pól i-węzłów: 32 ZAKRESY: (0): 9249
Jest tam więc katalog, i-węzeł # 2, ale nie ma on nazwy.
linux
filesystems
filenames
fhs
mlibre
źródło
źródło
debugfs
wyniki. Czy możesz wyjaśnić, jak to zmienia pytanie?Odpowiedzi:
Standard POSIX.1-2008 mówi
Norma wprowadza także rozróżnienie między nazwami plików i ścieżkami .
/
to nazwa ścieżki do katalogu głównego. Nazwa katalogu to „katalog główny”, ale w systemie plików nie ma nazwy, nie ma nazwy pliku. Gdyby miała nazwę pliku, nazwa ta byłaby pozycją katalogu w katalogu nad katalogiem głównym, a takiego katalogu nie ma.Znak
/
nigdy nie może być częścią nazwy pliku, ponieważ jest separatorem ścieżki.Dla jasności:
/
nie jest to nazwa katalogu głównego, ale ścieżka do niego, jego ścieżka ./etc
to inna nazwa ścieżki. Jest to nazwa bezwzględnej ścieżki doetc
katalogu. Nazwa katalogu w tej ścieżce toetc
(nazwa pliku toetc
)./usr/local/bin/curl
jest ścieżką docurl
pliku wykonywalnego w taki sam sposób,/etc
jak ścieżkę doetc
katalogu.źródło
/..
wskazuje na to/
i/
ma dla siebie pozycję w katalogu - to stare dobre/.
; wszystkie te 3 rzeczy wskazują na ten sam i-węzeł - 2./
jest to zdefiniowane w kategoriach katalogu głównego na proces, ale nie wiedziałem, że i-węzełchroot
niekoniecznie musi być 2. Bardzo interesujący fakt. Rodzi to także pytanie, jaki jest/
katalog uprzywilejowanych procesów jądra. Czy to oznacza, że mają tylko procesy w przestrzeni użytkownika,/
z którymi się kojarzą?ukośnik jest separatorem ; nazwy katalogów nie zawierają separatorów, ale pełne nazwy ścieżek obejmują separatory.
Zatem „poziom root”
/
nie ma nazwy . W większości systemów uniksowych jest to traktowane jako szczególny przypadek podobny.
do..
( i oczywiście nie ma różnicy między nimi na poziomie root).Nomenklatura może się różnić. Na przykład POSIX.1-2017 zawiera listę często używanych definicji :
3.2 Bezwzględna nazwa ścieżki
3.271 Nazwa ścieżki
3.272 Składnik nazwy ścieżki
3.170 Nazwa pliku
Więc ... jeśli szukasz wyjaśnień , może to nie być twój pierwszy przystanek. Samouczki, takie jak ta strona z koncepcjami systemu UNIX, są pomocne, np. Wskazują, że „pełna ścieżka” jest synonimem „absolutnej” ścieżki.
źródło
/
nie jest prawidłową nazwą pliku lub ścieżką i nie jest łańcuchem zawierającym takie komponenty, ale nadal jest całkowicie poprawną nazwą ścieżki dla jednego określonego katalogu. Co musi istnieć, choć część, która tego wymaga, nie wspomina o swojej „nazwie”. Jakoś uważam to za nieco zabawne...
na/
łączenie/
.W Uniksie pliki (i katalogi to tylko pliki) nie mają „nazw”. Linki mają nazwy, linki to wpisy w katalogu, które mapują nazwy na pliki.
Państwo może powiedzieć, że linki podać nazwy plików, ale uwaga: oznacza to, że plik może mieć więcej niż jedną nazwę, ponieważ może mieć więcej niż jeden link.
Ponieważ katalog główny jest katalogiem głównym, nie ma katalogu „wyżej”, w którym mógłby być link do niego, więc nie może być z nim powiązana nazwa. Teoretycznie byłoby możliwe dodanie linku do katalogu głównego w innym katalogu, ale większość Uniksów zabrania dodawania linków do istniejących katalogów, ponieważ może to prowadzić do cykli w hierarchii systemu plików (która jest w rzeczywistości grafem kierowanym) i wykrywania cykli na wykresie jest kosztowne, ale jego niewykrycie może prowadzić do nieskończonej rekurencji podczas próby rozpoznania nazw w jądrze.
Zasadniczo więc katalog główny nie ma nazwy, ponieważ nie ma nad nim katalogu, w którym moglibyśmy zapisać nazwę.
Jak wskazano w innych odpowiedziach, musimy rozróżnić nazwę od ścieżki (nazwy). Do katalogu głównego można się odwołać poprzez ścieżkę (nazwę)
/
.źródło
Użycie słowa „nazwa” jest nieco elastyczne; może odnosić się do „w pełni kwalifikowanej nazwy ścieżki”; może odnosić się do „wpisu katalogu”; może odnosić się do „nazwy pliku” przekazywanej do różnych funkcji lub procedur.
Tak więc, na przykład,
/etc/foo
a/var/tmp/../../etc/foo
i/tmp/../../../../../../foo
są wszystkie sposoby odnoszenia się do tego samego pliku; wszystkie są poprawnymi nazwami , tak jakfoo
w/etc
katalogu.Wróćmy więc do podstaw.
Nazwa pliku w systemie UNIX składa się z komponentów oddzielonych separatorem katalogów
/
. Prawie jedynym ograniczeniem dotyczącym komponentów jest to, że nie mogą one zawierać/
znaków NUL; wszystko inne jest dozwolone.Więc „pełna nazwa ścieżka”
/etc
jest pełny ciąg:/etc
. Oznacza to, że maetc
składnik w katalogu głównym.Podobnie
/x/y/z/foo
miałbyfoo
komponent w/x/y/z
katalogu.Teraz katalog główny jest unikalny, ponieważ nie ma żadnego komponentu w katalogu nadrzędnym; to tylko ma pełną ścieżkę jak sama nazwa:
/
.źródło