dizin yapısı vs dosya sistemi


10

Dizin yapısı ve dosya sistemi arasındaki fark nedir ?
Unix / Linux dizinleri ve dosya sistemi aşağıdaki gibidir:

Aşağıdaki iki dizini açıkça biliyoruz.

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

Aşağıdaki üç örnek dosya sistemini söylüyor.

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

Hangisinin bir dosya sistemi ve yukarıdaki kod parçacıklarından bir dizin olduğunu nasıl belirleyebilirim ?


Bir dosya sistemi bir veya daha fazla dizin içerir. Her dizin (dahil dosya sisteminin bir parçasıdır /proc, /ve /binsana "fark" tanımlamak istiyorum nasıl temizlemek değilim, böylece örneklerden).
roaima

@roaima örnek için kod snippet'ini bulun
Premraj

Sorunuz hala belirsiz. /proc, /ve /bindizinlerdir. Bunlar "dosya sistemleri" değildir. Belki de hangi dizinlerin dosya sistemlerinin bağlama noktası (kök) olduğunu tanımlamak istediğiniz anlamına mı geliyorsunuz?
roaima

Yanıtlar:


8

İnsanlar dosya sistemini çok dikkatli kullanmıyorlar . Örneklerinizde şunu söyleyebilirim /, /binve /procdosya sistemleri çünkü /dev/sdb1bu dizinlere bütün bir bölüm (gibi ) monte edilmiştir. Arch linux sistemimin /binbir dosya sistemi yok , bu yüzden bu örnek mükemmel değil ama ...

% 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/

Inode numarası 2, geleneksel olarak tüm bir disk-üstü dosya sisteminin "kök" inode'udur (bu, ifadenin diğer kullanımıdır). /, /bootVe /homesüre tüm inode 2 numaralı /procçekirdek tarafından tamamen sunulur ve bunu bir disk varlığa sahip olmadığı, inode 1. olanlar inode numaraları gösterir vardır bir bütün, disk üzerindeki dosya sistemi veya sanal dosya sistemi olduğunu bu ad kullanılarak monte edilir.

' /home/abc/xyzdir1Cümlesi bir dizindir "temelde bu ad kullanılarak hiçbir disk üzerinde dosya sisteminin takılı olmadığı anlamına gelir. Eğer ls -lidbir dizinde aynı komutu yaparsanız şöyle bir şey elde edersiniz:

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

İnode numarası 3670039 sadece (makinemde) monte edilmiş olan diskteki dosya sisteminde inode tahsis edilen şeydir /home.

mountKomutu çağırarak dosya sistemlerini de bulabilirsiniz . Tüm bağlı dosya sistemlerini ve nereye monte edildiğini listeler.


"Sihirli inode" sayısı ext2 serisi dosya sistemlerine özgüdür. Xfs veya btrfs gibi çoğu (tümü?) Diğerleri için geçerli değildir.
psusi

Ben söyleyebilirim /, /binve /procdosya sistemleri çünkü bütün bir bölüm ... bu dizinlere monte edilmiştir. /procCevabın daha sonradan da ima edeceği gibi bu doğru değildir .
Max Nanasy

1
@MaxNanasy - "dosya sistemi" nin iki anlamının ortak kullanımda olduğu göz önüne alındığında (1. Bir ağaç yapısındaki dizinlerin adları ve düzenlenmesi ve 2. Dosya ve dizin yapılı verilerin disk üzerindeki biçimi ve düzeni, korumak ve kullanmak için kod), hem anlaşılabilir, dairesel bir şekilde tanımlanmamış ve teknik olarak doğru bir terim bulmak oldukça zordur. Anlaşılır ve diğer terimler yerine "bölüm" ile gitmek seçti. Sizi daha doğru terim (ler) i önermeye davet ediyorum, kaybım var.
Bruce Ediger

4

Aşırı derecede basitleştirme riski altında,

  • Bir dosya sistemi arabanızın motoru ve diğer dahili sistemler gibidir,
  • Dizin yapısı, kullandığınız yerlerin haritası gibidir.

Benden bir encore istendiğinden,

  • Dosya sistemleri ses / video sinyal dağıtımı / yayılımının mekaniği (uygulama detayları) gibidir: analog RF yayını, dijital RF yayını, kablo, İnternet, video kaseti, video diski vb.
  • Dizin yapısı, televizyon programlamasının içeriği ve bunun komedi, drama, haberler, belgeseller, oyun şovları, spor vb.

Kod istiyorsanız, Linux dosya sisteminin çalışan bir sisteme ait olup olmadığının nasıl belirleneceğine ilişkin bu cevabın ilk yarısına bakın - doğrulama kontrolleri yapan kısım root_dir. Sadece Bruce'un söylediklerini yapıyor; bir dizin olduğunu doğrulamak ve inode numarasının 1 veya 2 olup olmadığını kontrol etmek.


1
İyi ELI5, ancak cevaplayan bir kod snippet'i ekleyebilir misiniz ? Hangisinin bir dosya sistemi ve bir dizin olduğunu nasıl belirleyebilirim?
user1717828

4

Gördüğüm gibi, UNIX anlamda bir dosya sistemi, bir dizin ağacı (dizin yapısı) veya daha kesin olarak UNIX dosya sistemi API'sini uygulamanın bir yoludur. Kök dosya sistemi belirli bir uygulama tarafından desteklenir ve bir bağlama noktası dizini her girdiğinizde farklı bir şey tarafından desteklenen bir alt ağaç girersiniz.

Arayüz her zaman aynıdır, ancak bir durumda, arka uçta belirli bir disk bölümünüz vardır, başka bir durumda, bir depolama cihazına asla yazmayan bir program olacaktır. procDosya sistemi ortaya çıkarır çekirdek iç yapıları söz konusu yazılımdan de destek verecek; Bir tmpfsRAM ve diğer dosya sistemlerine yazma ağ veya başka bir yerde yazmak olabileceği yazılımının arkasına edilecektir.

Kelimenin UNIXy olmayan anlamında, bir dosya sistemi veri depolama düzenlemenin bir yoludur. ext4, btrfs, fatVe ntfsdosya bu anlamda sistemleri, aynı zamanda içindedir UNIXy duyu-onlar dosya sistemi API'sini uygulamak. procveri depolama düzenlemediğinden bu daha sınırlı bir paradigma içinde bir dosya sistemi olarak sınıflandırılmaz.

TL; DR:

  • dizin yapısı / ağaç = ön uç
  • dosya sistemi = arka uç

2

Dosya sistemleri hakkında konuşurken dizin kabulü kesin olmasa da, dosya sistemi, neden bahsettiğinize bağlı olarak farklı şeyler ifade edebilir.

Örneklerinizde, listelenen tüm yollar dizinlerdir, ancak yalnızca bazıları dosya sistemlerinin bağlama noktalarıdır.

Sen kullanabilirsiniz dfbelirli bir dosya veya dizin ne dosya sistemi üzerinde bilinen komutu ve mountdosya sistemleri makinenizde, türlerine ve bunların monte noktalarında mevcut ne olduğunu rakama en Unix ve Linux uygulamaları üzerinde komut. Örneğin:

$ 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

Deyim /binbir dosya sistemi şüpheli, /binneredeyse her zaman monte edilir /.

$ 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)

1

Öncelikle bir dosya sistemi ve dizin hakkındaki varsayımınızda bir düzeltme. Bir dosya sistemi bir veya daha fazla dizin içerir. Örneklerinizi kullanarak /proc, /ve /bindizinleridir. Bunlar kendi başlarına "dosya sistemleri" değildir, ancak ilgili dosya sistemlerinin kökü olabilirler.

Hangi dizinlerin dosya sistemlerinin bağlama noktası (kök) olduğunu tanımlamak isterseniz, şöyle bir şey kullanabilirsiniz:

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

1

Dosya Sistemi , sistemin yönetilmesi kolay olacak şekilde büyük miktarlarda verileri mantıksal olarak düzenlemek ve depolamak için bir yöntemdir. bir dosya sistemi dosyalardan, diğer dosyalarla ilişkilerin yanı sıra her dosyanın niteliklerinden (dosya türü, dosya adı, dosya boyutu, dosya sahibi, dosya zaman damgası) oluşur.

Dizinler : örneğin, Unix dosya sistemi temelde dosyalardan ve dizinlerden oluşur. Dizinler, başka dosyalar içerebilecek özel dosyalardır. en üstteki dizin /(eğik çizgi) olup, doğrudan altındaki dizinler sistem dizinleridir. resim açıklamasını buraya girin

/ Linux Dosya Sisteminin Kökü

/bin İkili Yürütülebilir dosyalar burada tutulur

/boot Önyükleme ile ilgili dosyalar burada tutulur

/dev Cihaz dosyaları burada tutulur

/etc Sistem genelindeki yapılandırma dosyaları burada tutulur

/home Normal kullanıcıların ev dizinlerinin konumu

/lib64 İkili yürütülebilir dosyalar için kütüphaneler burada tutulur

/mnt DVD-Rom, USB flash sürücü için geçici montaj noktası.

/optİsteğe bağlı Programlar, Windows'ta Program Dosyaları gibi buraya yüklenir

/proc Çekirdek sözde dosya sistemi

/root Süper kullanıcı kök dizini

/sbin Sistem İkili Yürütülebilir dosyaları burada tutulur

/tmp Geçici dosyalar burada tutulur

/usr Kullanıcı Dosya Sistemi

/var Değişken dosyalar burada tutulur

/srv bir sunum klasörüdür, bu sistem tarafından sunulan siteye özgü verileri içerir.

src ve daha fazlası için

Aşağıdaki iki dizin kullanıcı tanımlı dizinlerdir:

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

Bu diyagram çok eski. FHS 3.0, Haziran 2015'te piyasaya sürüldü. FHS'nin yalnızca Linux dağıtımları için de geçerli olduğuna dikkat edilmelidir.
fpmurphy

1

Sadece yolun bir dizin olup olmadığını söyleyen bir komuta ihtiyacınız varsa mountpoint (1) kullanın .

Benim için yazdırıyor

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

İyi olan şey, çıkış durumunun tekrar aynı olduğunu göstermesidir, böylece bunu komut dosyalarınızda şu şekilde kullanabilirsiniz:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.