struktur direktori vs sistem file

10

Apa perbedaan antara struktur direktori dan sistem file ? Direktori
Unix / Linux dan sistem file terlihat sebagai berikut:

Dua direktori berikut jelas kita tahu direktori.

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

tiga sampel berikut mengatakan sistem file.

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

Bagaimana saya bisa mengidentifikasi mana yang merupakan sistem file dan direktori dari potongan kode di atas?

Premraj
sumber
Sistem file berisi satu atau lebih direktori. Setiap direktori adalah bagian dari sistem file (termasuk /proc,, /dan /bindari contoh Anda), jadi saya tidak jelas bagaimana Anda ingin mengidentifikasi "perbedaan".
roaima
@roaima tolong temukan cuplikan kode untuk sampel
Premraj
Pertanyaan Anda masih ambigu. /proc, /dan /bindirektori. Mereka bukan "sistem file". Apakah Anda mungkin bermaksud mengidentifikasi direktori mana yang juga merupakan titik mount (root) dari sistem file mereka?
roaima

Jawaban:

8

Orang-orang tidak menggunakan sistem file terlalu hati-hati. Dalam contoh Anda, saya akan mengatakan itu /, /bindan /procsistem file karena seluruh partisi (seperti /dev/sdb1) dipasang pada direktori tersebut. Sistem Linux Arch saya tidak memiliki /binsistem file sehingga contoh ini tidak sempurna tetapi ...

% 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 nomor 2 secara tradisional merupakan inode "root" dari keseluruhan sistem file pada disk (yang merupakan penggunaan lain dari frasa). /, /bootdan /homesemua memiliki nomor inode 2, sementara /proc, yang disajikan sepenuhnya oleh kernel dan tidak memiliki kehadiran di-disk, memiliki inode 1. Angka-angka inode menunjukkan bahwa keseluruhan, sistem file pada-disk, atau sistem file virtual dipasang menggunakan nama itu.

Kalimat ' /home/abc/xyzdir1adalah direktori "pada dasarnya berarti bahwa tidak ada sistem file pada disk yang dipasang menggunakan nama itu. Jika Anda melakukan ls -lidperintah yang sama pada direktori Anda mendapatkan sesuatu seperti ini:

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

Nomor inode 3670039 adalah apa pun inode yang dialokasikan dari pada sistem file on-disk yang terpasang (pada mesin saya) di /home.

Anda juga dapat menemukan sistem file dengan menjalankan mountperintah. Ini daftar semua sistem file yang terpasang dan di mana mereka dipasang.

Bruce Ediger
sumber
Nomor "magic inode" khusus untuk seri filesystem ext2. Itu tidak berlaku untuk sebagian besar (semua?) Orang lain, seperti xfs atau btrfs.
psusi
Saya akan mengatakan itu /, /bindan /procsistem file karena seluruh partisi ... dipasang pada direktori tersebut. Ini tidak benar untuk /proc, seperti jawabannya nanti.
Max Nanasy
1
@ Maxnanasy - mengingat bahwa dua arti "sistem file" adalah umum digunakan (1. Nama dan pengaturan direktori dalam struktur pohon, dan 2. Format dan disk on-disk dari file dan direktori, data terstruktur, bersama dengan kode untuk mempertahankan dan menggunakannya), cukup sulit untuk datang dengan istilah yang baik dimengerti, tidak didefinisikan secara melingkar, dan secara teknis benar. Saya memilih untuk menggunakan "partisi" yang mudah dipahami dan bukan istilah lain. Saya mengundang Anda untuk menyarankan istilah yang lebih benar, saya bingung.
Bruce Ediger
4

Dengan risiko terlalu menyederhanakan,

  • Filesystem seperti mesin mobil Anda dan sistem internal lainnya,
  • Struktur direktori seperti peta tempat Anda mengemudi.

Karena saya telah diminta untuk ulangan,

  • Filesystem seperti mekanisme (detail implementasi) dari distribusi / penyebaran sinyal audio / video: siaran RF analog, siaran RF digital, kabel, Internet, kaset video, disk video, dll.
  • Struktur direktori adalah seperti isi program televisi, dan kategorisasi darinya, misalnya, ke dalam komedi, drama, berita, film dokumenter, permainan, olahraga, dll.

Jika Anda ingin kode, lihat bagian pertama dari jawaban ini untuk Cara menentukan apakah sistem file Linux milik sistem yang berjalan - bagian yang melakukan validasi memeriksa root_dir. Itu hanya melakukan apa yang dikatakan Bruce; memverifikasi bahwa itu adalah direktori dan memeriksa apakah nomor inode-nya adalah 1 atau 2.

G-Man Mengatakan 'Reinstate Monica'
sumber
1
Bagus ELI5, tetapi bisakah Anda menambahkan potongan kode yang menjawab Bagaimana saya bisa mengidentifikasi mana yang merupakan sistem file dan direktori?
user1717828
4

Cara saya melihatnya, sistem file, dalam arti UNIX, adalah cara menerapkan pohon direktori (struktur direktori), atau lebih tepatnya, cara menerapkan API sistem file UNIX. Sistem file root didukung oleh satu implementasi tertentu, dan setiap kali Anda memasukkan direktori mountpoint, Anda memasukkan subtree yang didukung oleh sesuatu yang berbeda.

Antarmuka selalu sama, tetapi dalam satu kasus, Anda memiliki partisi disk tertentu di bagian belakang, dalam kasus lain, akan ada program yang bahkan tidak pernah menulis ke perangkat penyimpanan. Sistem procfile akan didukung oleh perangkat lunak yang mengekspos kernel internal; sebuah tmpfsakan didukung oleh perangkat lunak yang menulis ke RAM, dan sistem file lain mungkin menulis ke jaringan atau di tempat lain.

Dalam arti kata yang tidak UNIX, sistem file adalah cara mengatur penyimpanan data. ext4, btrfs, fat, Dan ntfsadalah sistem file dalam pengertian ini, tetapi juga dalam UNIXy arti-mereka melaksanakan filesystem API. proctidak akan diklasifikasikan sebagai sistem file dalam paradigma ini, lebih terbatas, karena tidak mengatur penyimpanan data.

TL; DR:

  • struktur direktori / pohon = ujung depan
  • sistem file = ujung belakang
PSkocik
sumber
2

Sementara pengesahan direktori tidak ambigu ketika berbicara tentang sistem file, sistem file mungkin memiliki arti yang berbeda tergantung pada apa yang Anda bicarakan.

Dalam contoh Anda, semua jalur yang terdaftar adalah direktori tetapi hanya beberapa dari mereka yang juga me-mount poin sistem file.

Anda dapat menggunakan dfperintah untuk mengetahui sistem file apa file atau direktori yang diberikan, dan mountperintah pada sebagian besar implementasi Unix dan Linux untuk mencari tahu sistem file apa yang ada pada mesin Anda, jenisnya dan titik pemasangannya. misalnya:

$ 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

Pernyataannya /binadalah sistem file meragukan, /binhampir selalu dipasang /.

$ 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
sumber
1

Pertama, koreksi asumsi Anda tentang sistem file dan direktori. Sistem file berisi satu atau lebih direktori. Menggunakan contoh Anda /proc,, /dan /bindirektori. Mereka bukan "filesystem" di dalam dan dari diri mereka sendiri, tetapi mereka mungkin adalah root dari masing-masing filesystem mereka.

Jika Anda ingin mengidentifikasi direktori mana yang juga merupakan titik pemasangan (root) dari sistem berkasnya, Anda dapat menggunakan sesuatu seperti ini:

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
sumber
1

File System adalah metodologi untuk mengatur dan menyimpan data dalam jumlah besar secara logis sehingga sistemnya mudah dikelola. sistem file terdiri dari file, hubungan dengan file lain, serta atribut (tipe file, nama file, ukuran file, pemilik file, cap waktu file) dari setiap file.

Direktori : misalnya, sistem file Unix pada dasarnya terdiri dari file dan direktori. Direktori adalah file khusus yang mungkin berisi file lain. direktori teratas adalah /(slash), dengan direktori langsung di bawah direktori sistem. masukkan deskripsi gambar di sini

/ Root dari Sistem File Linux

/bin File Biner Eksekusi disimpan di sini

/boot Booting file terkait disimpan di sini

/dev File perangkat disimpan di sini

/etc File konfigurasi di seluruh sistem disimpan di sini

/home Lokasi untuk direktori home dari pengguna biasa

/lib64 Perpustakaan untuk executable biner disimpan di sini

/mnt Titik pemasangan sementara untuk DVD-Rom, USB flash drive.

/optProgram opsional diinstal di sini seperti Program Files di windows

/proc Sistem file pseudo kernel

/root Direktori rumah root pengguna super

/sbin File System Binary Executable disimpan di sini

/tmp File sementara disimpan di sini

/usr Sistem File Pengguna

/var File variabel disimpan di sini

/srv adalah folder melayani, berisi data spesifik situs yang dilayani oleh sistem ini.

src dan lebih banyak lagi

Dua direktori berikut adalah direktori yang ditentukan pengguna:

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory
Premraj
sumber
Diagram itu sangat ketinggalan zaman. FHS 3.0 dirilis pada Juni 2015. Juga harus dicatat bahwa FHS hanya berlaku untuk distribusi Linux.
fpmurphy
1

Jika Anda hanya memerlukan perintah yang memberi tahu Anda apakah path adalah direktori atau tidak, gunakan mountpoint (1) .

Bagi saya itu cetak

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

Yang bagus adalah bahwa status keluar menunjukkan hal yang sama lagi sehingga Anda dapat menggunakannya dalam skrip Anda seperti ini:

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
sumber