โครงสร้างไดเร็กทอรีและระบบไฟล์


10

ความแตกต่างระหว่างโครงสร้างไดเรกทอรีและระบบไฟล์คืออะไร? ไดเร็กทอรีและระบบไฟล์
Unix / Linux มีลักษณะดังนี้:

สองไดเรกทอรีต่อไปนี้แน่นอนเรารู้ว่าไดเรกทอรี

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

ตัวอย่างสามตัวอย่างต่อไปนี้กำลังพูดถึงระบบไฟล์

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

ฉันจะระบุได้อย่างไรว่าระบบไฟล์และไดเรกทอรีใดจากตัวอย่างโค้ดข้างต้น


ระบบไฟล์มีหนึ่งหรือหลายไดเรกทอรี ไดเรกทอรีทุกคนเป็นส่วนหนึ่งของระบบแฟ้ม (รวมทั้ง/proc, /และ/binจากตัวอย่างของคุณ) ดังนั้นฉันไม่ชัดเจนว่าคุณต้องการที่จะระบุ "ความแตกต่าง"
roaima

@roaima โปรดค้นหาข้อมูลโค้ดสำหรับตัวอย่าง
Premraj

คำถามของคุณยังไม่ชัดเจน /proc, /และ/binไดเรกทอรี พวกเขาไม่ใช่ "ระบบไฟล์" คุณอาจหมายถึงคุณต้องการระบุว่าไดเรกทอรีใดเป็นจุดเชื่อมต่อ (รูท) ของระบบไฟล์
roaima

คำตอบ:


8

คนไม่ใช้ระบบไฟล์อย่างระมัดระวังเกินไป ในตัวอย่างของคุณผมจะบอกว่า/, /binและ/procมีระบบไฟล์เพราะพาร์ทิชันทั้งหมด (ชอบ/dev/sdb1) จะติดตั้งอยู่ในไดเรกทอรีเหล่านั้น ระบบ Arch Linux ของฉันไม่ได้/binเป็นระบบไฟล์ดังนั้นตัวอย่างนี้ไม่สมบูรณ์ แต่ ...

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

หมายเลขไอโหนด 2 เป็นแบบดั้งเดิม "รูท" inode ของทั้งระบบไฟล์บนดิสก์ (ซึ่งเป็นการใช้งานวลีอื่น ๆ ) /, /bootและ/homeทุกคนมีจำนวน inode 2 ในขณะที่/procซึ่งเป็นการนำเสนออย่างสิ้นเชิงโดย kernel และไม่ได้มีการแสดงตนบนดิสก์มี inode 1. ผู้ที่หมายเลข inode แสดงให้เห็นว่าทั้งระบบไฟล์บนดิสก์หรือไฟล์ระบบเสมือน ถูกเมาท์โดยใช้ชื่อนั้น

ประโยค ' /home/abc/xyzdir1เป็นไดเรกทอรี "โดยทั่วไปหมายความว่าไม่มีการติดตั้งระบบไฟล์บนดิสก์โดยใช้ชื่อนั้นหากคุณทำls -lidคำสั่งเดียวกันในไดเรกทอรีคุณจะได้รับสิ่งนี้:

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

inode หมายเลข 3670039 เป็นเพียงสิ่งที่ inode ได้รับการจัดสรรจากในระบบไฟล์บนดิสก์ติด (ในเครื่องของฉัน) /homeที่

คุณสามารถค้นหาระบบไฟล์ได้ด้วยการเรียกใช้mountคำสั่ง มันแสดงรายการระบบไฟล์ที่ติดตั้งทั้งหมดและที่พวกเขาจะติดตั้ง


หมายเลข "magic inode" เป็นรหัสเฉพาะของ ext2 ซีรี่ส์ของระบบไฟล์ มันใช้ไม่ได้กับคนอื่น ๆ (ทั้งหมด?) ส่วนใหญ่เช่น xfs หรือ btrfs
psusi

ฉันจะบอกว่า/, /binและ/procมีระบบไฟล์เพราะพาร์ทิชันทั้งหมด ... จะติดตั้งอยู่ในไดเรกทอรีเหล่านั้น สิ่งนี้ไม่เป็นความจริง/procเพราะคำตอบนั้นหมายถึงในภายหลัง
Max Nanasy

1
@ MaxNanasy - เนื่องจากความหมายสองประการของ "ระบบไฟล์" เป็นเรื่องที่ใช้กันทั่วไป (1. ชื่อและการจัดเรียงของไดเรกทอรีในโครงสร้างแบบต้นไม้และ 2. รูปแบบบนดิสก์และเลย์เอาต์ของโครงสร้างไฟล์และข้อมูลไดเรกทอรีพร้อมกับ รหัสเพื่อการบำรุงรักษาและใช้งาน) มันค่อนข้างยากที่จะเกิดขึ้นกับคำที่เข้าใจง่ายไม่ได้กำหนดในลักษณะวงกลมและถูกต้องทางเทคนิค ฉันเลือกที่จะไปด้วยความเข้าใจและใช้ "พาร์ติชัน" แทนคำอื่น ๆ ฉันขอเชิญคุณเพื่อแนะนำคำที่ถูกต้องมากขึ้นฉันเสีย
Bruce Ediger

4

ที่มีความเสี่ยงจากการใช้งานเกินขนาดอย่างไม่มีนัยสำคัญ

  • ระบบไฟล์เป็นเหมือนเครื่องยนต์ในรถของคุณและระบบภายในอื่น ๆ
  • โครงสร้างไดเรกทอรีนั้นเหมือนกับแผนที่ของสถานที่ที่คุณขับรถ

เนื่องจากฉันถูกถามอีกครั้ง

  • ระบบไฟล์เป็นเหมือนกลไก (รายละเอียดการนำไปใช้) ของการกระจาย / เผยแพร่สัญญาณเสียง / วิดีโอ: การแพร่สัญญาณ RF แบบอะนาล็อก, การออกอากาศ RF แบบดิจิทัล, สายเคเบิล, อินเทอร์เน็ต, เทปวิดีโอ, วิดีโอดิสก์เป็นต้น
  • โครงสร้างของสารบบเป็นเหมือนเนื้อหาของรายการโทรทัศน์และการจัดหมวดหมู่ของมันเช่นเป็นเรื่องตลกละครละครข่าวสารคดีรายการเกมโชว์กีฬา ฯลฯ

หากคุณต้องการรหัสดูช่วงครึ่งแรกของคำตอบนี้ไป วิธีการตรวจสอบว่าระบบแฟ้มลินุกซ์เป็นระบบการทำงาน - root_dirเป็นส่วนหนึ่งที่ไม่เกี่ยวกับการตรวจสอบ มันแค่ทำในสิ่งที่บรูซพูด ตรวจสอบว่ามันเป็นไดเรกทอรีและตรวจสอบว่าหมายเลข inode ของมันคือ 1 หรือ 2


1
ดี ELI5 แต่คุณสามารถเพิ่มคำตอบโค้ดได้อย่างไรฉันจะระบุได้ว่าระบบไฟล์และไดเรกทอรีใด
user1717828

4

วิธีที่ฉันเห็นมันคือระบบไฟล์ในแง่ของ UNIX เป็นวิธีการนำแผนผังไดเรกทอรี (โครงสร้างไดเรกทอรี) ไปใช้อย่างแม่นยำยิ่งขึ้นซึ่งเป็นวิธีการนำ API ระบบไฟล์ UNIX ไปใช้ ระบบไฟล์รูทได้รับการสนับสนุนโดยการนำไปใช้อย่างใดอย่างหนึ่งและเมื่อใดก็ตามที่คุณป้อนไดเรกทอรีเมานต์คุณจะเข้าสู่ทรีย่อยที่ได้รับการสนับสนุนโดยบางสิ่ง

อินเทอร์เฟซจะเหมือนกันเสมอ แต่ในกรณีหนึ่งคุณมีดิสก์พาร์ติชันเฉพาะที่ส่วนหลังสุดในอีกกรณีหนึ่งจะมีโปรแกรมที่ไม่เคยเขียนลงในอุปกรณ์เก็บข้อมูล procระบบแฟ้มจะได้รับการสนับสนุนจากซอฟแวร์ที่ exposes เคอร์เนล internals; tmpfsจะได้รับการสนับสนุนจากซอฟต์แวร์ที่เขียนไป RAM, และไฟล์ระบบอื่น ๆ อาจเขียนไปยังเครือข่ายหรือที่อื่น ๆ

ในความหมายของคำที่ไม่ใช่ UNIX ระบบไฟล์เป็นวิธีการจัดระเบียบที่เก็บข้อมูล ext4, btrfs, fatและntfsมีระบบไฟล์ในความรู้สึกนี้ แต่ยังอยู่ใน UNIXy ความรู้สึกพวกเขาใช้ระบบแฟ้มของ API procจะไม่จัดเป็นระบบไฟล์ภายในสิ่งนี้ จำกัด กระบวนทัศน์มากขึ้นเนื่องจากไม่ได้จัดระเบียบที่เก็บข้อมูล

TL; DR:

  • โครงสร้างไดเร็กทอรี / tree = front end
  • ระบบไฟล์ = back end

2

ในขณะที่การรับรู้ไดเรกทอรีไม่ชัดเจนเมื่อพูดถึงระบบไฟล์ระบบไฟล์อาจหมายถึงสิ่งต่าง ๆ ขึ้นอยู่กับสิ่งที่คุณกำลังพูดถึง

ในตัวอย่างของคุณพา ธ ที่แสดงรายการทั้งหมดเป็นไดเร็กทอรี แต่มีเพียงบางพา ธ เท่านั้นที่เป็นจุดเชื่อมต่อของระบบไฟล์

คุณสามารถใช้dfคำสั่งเพื่อให้ทราบว่าระบบไฟล์ไฟล์หรือไดเรกทอรีที่กำหนดคืออะไรและmountคำสั่งในการใช้งาน Unix และ Linux ส่วนใหญ่เพื่อหาว่าระบบไฟล์ใดบ้างที่มีอยู่ในเครื่องของคุณประเภทและจุดเชื่อมต่อของพวกเขา เช่น:

$ 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

คำสั่งที่/binเป็นระบบไฟล์ที่เป็นพิรุธจะติดตั้งอยู่เกือบตลอดเวลาใน/bin/

$ 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

ก่อนอื่นให้แก้ไขสมมติฐานของคุณเกี่ยวกับระบบไฟล์และไดเรกทอรี ระบบไฟล์มีหนึ่งหรือหลายไดเรกทอรี โดยใช้ตัวอย่างของคุณ/proc, /และ/binไดเรกทอรี พวกเขาไม่ใช่ "ระบบไฟล์" ในตัวของมันเอง แต่มันอาจเป็นรากของระบบไฟล์ที่เกี่ยวข้อง

หากคุณต้องการระบุว่าไดเรกทอรีใดเป็นจุดเมานท์ (รูท) ของระบบไฟล์ของพวกเขาคุณสามารถใช้สิ่งนี้:

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

ระบบไฟล์เป็นวิธีการสำหรับการจัดระเบียบและจัดเก็บข้อมูลจำนวนมากอย่างมีเหตุมีผลซึ่งระบบสามารถจัดการได้ง่าย ระบบไฟล์ประกอบด้วยไฟล์ความสัมพันธ์กับไฟล์อื่น ๆ รวมถึงคุณสมบัติ (ประเภทไฟล์ชื่อไฟล์ขนาดไฟล์เจ้าของไฟล์เวลาประทับไฟล์) ของแต่ละไฟล์

ไดเร็กตอรี่ : ตัวอย่าง, ระบบไฟล์ Unix ประกอบด้วยไฟล์และไดเร็กตอรี่เป็นหลัก. ไดเรกทอรีเป็นไฟล์พิเศษที่อาจมีไฟล์อื่น ไดเร็กทอรีบนสุดคือ/(สแลช) โดยมีไดเร็กทอรีอยู่ด้านล่างเป็นไดเร็กทอรีระบบ ป้อนคำอธิบายรูปภาพที่นี่

/ รูทของระบบไฟล์ Linux

/bin ไฟล์ Binary Executionable ถูกเก็บไว้ที่นี่

/boot ไฟล์ที่เกี่ยวข้องกับการบูตจะถูกเก็บไว้ที่นี่

/dev ไฟล์อุปกรณ์จะถูกเก็บไว้ที่นี่

/etc ไฟล์การกำหนดค่าทั้งระบบถูกเก็บไว้ที่นี่

/home ตำแหน่งสำหรับโฮมไดเร็กทอรีของผู้ใช้ทั่วไป

/lib64 ไลบรารีสำหรับไบนารีที่ปฏิบัติการได้จะถูกเก็บไว้ที่นี่

/mnt จุดต่อชั่วคราวสำหรับ DVD-Rom, แฟลชไดรฟ์ USB

/optมีการติดตั้งโปรแกรมเสริมที่นี่เช่นProgram Filesใน windows

/proc เคอร์เนลระบบไฟล์หลอก

/root ไดเรกทอรีบ้านของรูตผู้ใช้ขั้นสูง

/sbin ไฟล์ Binary Executionable ของระบบถูกเก็บไว้ที่นี่

/tmp ไฟล์ชั่วคราวถูกเก็บไว้ที่นี่

/usr ระบบไฟล์ผู้ใช้

/var ไฟล์ตัวแปรจะถูกเก็บไว้ที่นี่

/srv เป็นโฟลเดอร์บริการมีข้อมูลเฉพาะไซต์ที่ให้บริการโดยระบบนี้

srcและอีกมากมาย

สองไดเร็กทอรีต่อไปนี้เป็นไดเร็กทอรีที่ผู้ใช้กำหนด:

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

แผนภาพนั้นล้าสมัยไปแล้ว FHS 3.0 วางจำหน่ายในเดือนมิถุนายน 2558 และควรสังเกตว่า FHS ใช้เฉพาะกับการแจกแจง Linux
fpmurphy

1

หากคุณเพียงแค่ต้องคำสั่งที่จะบอกคุณถ้าเส้นทางเป็นไดเรกทอรีหรือไม่ใช้จุดเมานท์ (1)

สำหรับฉันมันพิมพ์

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

สิ่งที่ดีคือสถานะทางออกบ่งชี้อีกครั้งเพื่อให้คุณสามารถใช้งานได้ในสคริปต์ของคุณดังนี้:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.