struktura katalogów a system plików

10

Jaka jest różnica między strukturą katalogów a systemem plików ? Katalogi i system plików
Unix / Linux wygląda następująco:

Następujące dwa katalogi oczywiście znamy katalogi.

  /home/abc/xyzdir1 --is a directory
  /home/abc/xyzdir2 -- is a directory

następujące trzy przykłady mówią system plików.

/proc -- is a file system
/ -- is a file system
/bin -- is a file system

Jak rozpoznać, który jest systemem plików i katalogiem z powyższych fragmentów kodu?

Premraj
źródło
System plików zawiera jeden lub więcej katalogów. Każdy katalog jest częścią systemu plików (w tym i z twoich przykładów), więc nie jestem pewien /proc, jak chcesz zidentyfikować „różnicę”. //bin
roaima
@roaima proszę znaleźć fragment kodu dla próbki
Premraj
Twoje pytanie jest nadal niejednoznaczne. /proc, /I /binsą katalogi. Nie są to „systemy plików”. Czy może masz na myśli, że chcesz określić, które katalogi są również punktem montowania (root) ich systemu plików?
roaima

Odpowiedzi:

8

Ludzie nie używają systemu plików zbyt ostrożnie. W twoich przykładów, chciałbym powiedzieć, że /, /bini /procsą systemy plików, ponieważ cała partycja (jak /dev/sdb1) jest zamontowany na tych katalogach. Mój system linuksowy Arch nie ma /binjako systemu plików, więc ten przykład nie jest idealny, ale ...

% ls -lid /proc /home /boot /
2 drwxr-xr-x  17 root root 4096 Feb 24 12:12 //
2 drwxr-xr-x   4 root root 4096 May 16 14:29 /boot/
2 drwxr-xr-x   5 root root 4096 Mar 14 18:11 /home/
1 dr-xr-xr-x 116 root root    0 May 16 17:18 /proc/

I-węzeł numer 2 jest tradycyjnie i-węzłem „głównym” całego systemu plików na dysku (co jest innym zastosowaniem tego wyrażenia). /, /bootA /homewszystkie mają numer węzła 2, podczas /proc, którego zaprezentowano całkowicie przez jądro i nie ma obecność na dysku, ma iwęzeł 1. Te numery iwęzłów wskazuje, że całość systemu plików na dysku, lub wirtualnego systemu plików jest montowany przy użyciu tej nazwy.

Zdanie „ /home/abc/xyzdir1jest katalogiem” oznacza w zasadzie, że żaden system plików na dysku nie jest zamontowany przy użyciu tej nazwy. Jeśli wykonasz to samo ls -lidpolecenie w katalogu, otrzymasz coś takiego:

 % ls -lid /home/bediger/src
3670039 drwxr-xr-x 29 bediger bediger 4096 May 17 19:57 /home/bediger/src/

Numer i-węzła 3670039 jest dokładnie tym, z którego i-węzła został przydzielony w systemie plików na dysku zamontowanym (na moim komputerze) w /home.

Można również znaleźć systemy plików, wywołując mountpolecenie. Zawiera listę wszystkich zamontowanych systemów plików i miejsca ich zamontowania.

Bruce Ediger
źródło
Numer „magicznego i-węzła” jest specyficzny dla serii systemów plików ext2. Nie dotyczy większości (wszystkich?) Innych, takich jak xfs lub btrfs.
psusi
Powiedziałbym, że /, /bini /procsą systemy plików, ponieważ cała partycja ... jest zamontowany na tych katalogach. Nie dotyczy to /proc, jak sugeruje późniejsza odpowiedź.
Max Nanasy
1
@ MaxNanasy - biorąc pod uwagę, że powszechnie używane są dwa znaczenia „systemu plików” (1. Nazwy i układ katalogów w strukturze drzewa oraz 2. Format na dysku i układ danych strukturalnych w plikach i katalogach, wraz z kod do jego utrzymania i używania), trudno jest znaleźć termin, który jest zarówno zrozumiały, nieokreślony w sposób okrągły, jak i poprawny technicznie. Zdecydowałem się na zrozumiałą i używaną „partycję” zamiast innych terminów. Zapraszam do zasugerowania terminów, które są bardziej poprawne, jestem zagubiony.
Bruce Ediger,
4

Ryzykując rażące uproszczenie,

  • System plików przypomina silnik samochodu i inne systemy wewnętrzne,
  • Struktura katalogów przypomina mapę miejsc, w których jeździsz.

Ponieważ zostałem poproszony o bis,

  • Systemy plików są podobne do mechaniki (szczegóły implementacji) dystrybucji / propagacji sygnału audio / wideo: analogowa transmisja RF, cyfrowa transmisja RF, kabel, Internet, taśma wideo, dysk wideo itp.
  • Struktura katalogów przypomina treść programów telewizyjnych i ich kategoryzację, np. Do komedii, dramatu, wiadomości, filmów dokumentalnych, teleturniejów, sportu itp.

Jeśli potrzebujesz kodu, zapoznaj się z pierwszą połową odpowiedzi na pytanie, jak ustalić, czy system plików Linux należy do działającego systemu - część, która sprawdza poprawność root_dir. Po prostu robi to, co powiedział Bruce; sprawdzanie, czy jest to katalog i sprawdzanie, czy jego numerem i-węzła jest 1 czy 2.

G-Man mówi „Przywróć Monikę”
źródło
1
Dobry ELI5, ale czy możesz dodać fragment kodu odpowiadający Jak mogę zidentyfikować, który to system plików i katalog?
user1717828,
4

Z mojego punktu widzenia system plików, w sensie UNIX, to sposób implementacji drzewa katalogów (struktura katalogów), a ściślej sposób implementacja interfejsu API systemu plików UNIX. Główny system plików jest wspierany przez jedną konkretną implementację i za każdym razem, gdy wchodzisz do katalogu mountpoint, wchodzisz do poddrzewa, które jest wspierane przez coś innego.

Interfejs jest zawsze taki sam, ale w jednym przypadku masz określoną partycję dysku z tyłu, w innym przypadku będzie program, który nigdy nawet nie zapisuje na urządzeniu pamięci masowej. System procplików będzie wspierany przez oprogramowanie, które ujawnia wewnętrzne elementy jądra; tmpfszostaną wsparte oprogramowaniem, który zapisuje do pamięci RAM i innych systemów plików może napisać do sieci lub poza nią.

W znaczeniu innym niż UNIXy system plików to sposób organizacji przechowywania danych. ext4, btrfs, fat, I ntfssą systemy plików w tym sensie, ale także w UNIXy sens-one wdrożyć API systemu plików. procnie klasyfikowałby się jako system plików w ramach tego, bardziej ograniczonego, paradygmatu, ponieważ nie organizuje on przechowywania danych.

TL; DR:

  • struktura katalogów / drzewo = interfejs
  • system plików = zaplecze
PSkocik
źródło
2

Podczas gdy akceptacja katalogu jest jednoznaczna w przypadku systemów plików, system plików może oznaczać różne rzeczy w zależności od tego, o czym mówisz.

W twoich przykładach wszystkie wymienione ścieżki są katalogami, ale tylko niektóre z nich są również punktami montowania systemów plików.

Możesz użyć dfpolecenia, aby dowiedzieć się, w jakim systemie plików jest dany plik lub katalog, oraz mountpolecenia w większości implementacji systemów Unix i Linux, aby dowiedzieć się, jakie systemy plików są obecne na komputerze, ich typ i punkty montowania. na przykład:

$ df /proc
Filesystem     1K-blocks  Used Available Use% Mounted on
proc                   0     0         0    - /proc
$ mount | grep -w /proc
/proc is a file system of type proc

Stwierdzenie, /binże system plików jest wątpliwy, /binprawie zawsze jest zamontowane /.

$ df -k /bin
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      206292664 180687360  15103212  93% /
$ mount | grep -w /
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
jlliagre
źródło
1

Najpierw popraw swoje założenia dotyczące systemu plików i katalogu. System plików zawiera jeden lub więcej katalogów. Korzystając z twoich przykładów /proc, /i /binsą katalogami. Nie są one same w sobie „systemami plików”, ale mogą być katalogiem głównym odpowiednich systemów plików.

Jeśli chcesz określić, które katalogi są również punktem podłączenia (root) ich systemu plików, możesz użyć czegoś takiego:

F="$PWD"    # The directory to be tested
if test -d "$F"
then
    echo "$F is a directory"
    test "X$(stat --format '%m' "$F")" = "X$PWD" && echo "$F is a mountpoint"
fi
roaima
źródło
1

System plików to metodologia logicznego organizowania i przechowywania dużych ilości danych, tak aby system był łatwy w zarządzaniu. system plików składa się z plików, relacji z innymi plikami, a także atrybutów (typ pliku, nazwa pliku, rozmiar pliku, właściciel pliku, znacznik czasu pliku) każdego pliku.

Katalogi : na przykład system plików Unix zasadniczo składa się z plików i katalogów. Katalogi to specjalne pliki, które mogą zawierać inne pliki. najwyższy katalog to /(ukośnik), z katalogami znajdującymi się bezpośrednio pod katalogami systemowymi. wprowadź opis zdjęcia tutaj

/ Katalog systemu plików Linux

/bin Binarne pliki wykonywalne są tutaj przechowywane

/boot Pliki związane z ładowaniem są przechowywane tutaj

/dev Pliki urządzeń są tutaj przechowywane

/etc Przechowywane są tutaj systemowe pliki konfiguracyjne

/home Lokalizacja katalogów domowych zwykłych użytkowników

/lib64 Tutaj przechowywane są biblioteki binarnych plików wykonywalnych

/mnt Tymczasowy punkt montażu dla napędu DVD-Rom, USB flash.

/optProgramy opcjonalne są instalowane tutaj, podobnie jak Pliki programów w systemie Windows

/proc Pseudo-system plików jądra

/root Katalog domowy super root użytkownika

/sbin Systemowe pliki binarne są tutaj przechowywane

/tmp Pliki tymczasowe są tutaj przechowywane

/usr System plików użytkownika

/var Przechowywane są tutaj zmienne pliki

/srv to folder udostępniania, zawiera dane właściwe dla witryny, które są obsługiwane przez ten system.

src i więcej

Następujące dwa katalogi są katalogami zdefiniowanymi przez użytkownika:

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory
Premraj
źródło
Ten schemat jest bardzo nieaktualny. FHS 3.0 został wydany w czerwcu 2015 r. Należy również zauważyć, że FHS dotyczy tylko dystrybucji Linuksa.
fpmurphy
1

Jeśli potrzebujesz tylko polecenia informującego, czy ścieżka jest katalogiem, czy nie, użyj mountpoint (1) .

Dla mnie to drukuje

$ mountpoint /
/ is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
$ mountpoint some-file
some-file is not a mountpoint

Dobrą rzeczą jest to, że status wyjścia ponownie wskazuje to samo, dzięki czemu można go używać w skryptach w następujący sposób:

if mountpoint "$foo" >/dev/null; then
  : do mountpoint stuff
elif [ -d "$foo" ]; then
  : do directory stuff
elif [ -e "$foo" ]; then
  : do file stuff 
else
  echo "$foo does not exist!" >/2
fi
Lucas
źródło