cấu trúc thư mục vs hệ thống tập tin


10

Sự khác biệt giữa cấu trúc thư mụchệ thống tập tin là gì?
Các thư mụchệ thống tệp Unix / Linux trông như sau:

Hai thư mục sau đây rõ ràng chúng ta biết thư mục.

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

Ba mẫu sau đây đang nói hệ thống tập tin.

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

Làm cách nào tôi có thể xác định cái nào là hệ thống tệpthư mục từ đoạn mã trên?


Một hệ thống tập tin chứa một hoặc nhiều thư mục. Mỗi thư mục là một phần của một hệ thống tập tin (bao gồm /proc, //bintừ các ví dụ của bạn), vì vậy tôi không rõ ràng như thế nào bạn muốn để xác định "sự khác biệt".
roaima

@roaima vui lòng tìm đoạn mã cho mẫu
Premraj

Câu hỏi của bạn vẫn còn mơ hồ. /proc, //binlà thư mục. Chúng không phải là "hệ thống tập tin". Bạn có thể có nghĩa là bạn muốn xác định thư mục nào cũng là điểm gắn kết (root) của hệ thống tập tin của họ?
roaima

Câu trả lời:


8

Mọi người không sử dụng hệ thống tập tin quá cẩn thận. Trong các ví dụ của bạn, tôi sẽ nói rằng /, /bin/proclà các hệ thống tệp vì toàn bộ phân vùng (như /dev/sdb1) được gắn trên các thư mục đó. Hệ thống linux Arch của tôi không có /binhệ thống tập tin nên ví dụ này không hoàn hảo nhưng ...

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

Theo truyền thống, số 2 là nút "gốc" của toàn bộ hệ thống tệp trên đĩa (là cách sử dụng khác của cụm từ). /, /boot/hometất cả đều có inode số 2, trong khi /proc, được trình bày hoàn toàn bằng hạt nhân và không có một sự hiện diện trên đĩa, có inode 1. Những số inode chỉ ra rằng một, toàn bộ hệ thống trên đĩa tập tin, hoặc một hệ thống tập tin ảo được gắn kết bằng cách sử dụng tên đó.

Câu ' /home/abc/xyzdir1là một thư mục "về cơ bản có nghĩa là không có hệ thống tệp trên đĩa nào được gắn kết bằng tên đó. Nếu bạn thực hiện cùng một ls -lidlệnh trên một thư mục, bạn sẽ nhận được một cái gì đó như thế này:

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

Số inode 3670039 chỉ là bất cứ thứ gì inode được phân bổ trong hệ thống tệp trên đĩa được gắn (trên máy của tôi) tại /home.

Bạn cũng có thể tìm thấy các hệ thống tập tin bằng cách gọi mountlệnh. Nó liệt kê tất cả các hệ thống tập tin được gắn kết và nơi chúng được gắn kết.


Số "ma thuật inode" dành riêng cho chuỗi hệ thống tập tin ext2. Nó không áp dụng cho hầu hết (tất cả?) Những người khác, chẳng hạn như xfs hoặc btrfs.
psusi

Tôi muốn nói rằng /, /bin/proclà các hệ thống tệp vì toàn bộ phân vùng ... được gắn trên các thư mục đó. Điều này không đúng /proc, như câu trả lời sau này ngụ ý.
Max Nanasy

1
@MaxNanasy - cho rằng hai ý nghĩa của "hệ thống tệp" được sử dụng phổ biến (1. Tên và cách sắp xếp các thư mục trong cấu trúc cây và 2. Định dạng và bố cục trên đĩa của dữ liệu có cấu trúc tệp và thư mục, cùng với mã để duy trì và sử dụng nó), thật khó để đưa ra một thuật ngữ vừa dễ hiểu, không được định nghĩa theo kiểu vòng tròn, và đúng về mặt kỹ thuật. Tôi đã chọn đi với "phân vùng" dễ hiểu và được sử dụng thay vì các điều khoản khác. Tôi mời bạn đề xuất (các) thuật ngữ chính xác hơn, tôi đang thua lỗ.
Bruce Ediger

4

Có nguy cơ quá đơn giản hóa,

  • Một hệ thống tập tin giống như động cơ xe hơi của bạn và các hệ thống nội bộ khác,
  • Một cấu trúc thư mục giống như một bản đồ của những nơi bạn lái xe.

Vì tôi đã được yêu cầu một encore,

  • Các hệ thống tập tin giống như các cơ chế (chi tiết triển khai) của phân phối / truyền tín hiệu âm thanh / video: phát sóng RF tương tự, phát sóng RF kỹ thuật số, cáp, Internet, băng video, đĩa video, v.v.
  • Cấu trúc thư mục giống như nội dung của chương trình truyền hình, và việc phân loại chúng, ví dụ, thành hài kịch, kịch, tin tức, phim tài liệu, chương trình trò chơi, thể thao, v.v.

Nếu bạn muốn mã, hãy xem nửa đầu của câu trả lời này để Cách xác định xem hệ thống tệp Linux có thuộc hệ thống đang chạy hay không - phần kiểm tra xác thực root_dir. Nó chỉ làm những gì Bruce nói; xác minh rằng đó là một thư mục và kiểm tra xem số inode của nó là 1 hay 2.


1
ELI5 tốt, nhưng bạn có thể thêm đoạn mã trả lời Làm thế nào tôi có thể xác định cái nào là hệ thống tệp và thư mục?
dùng1717828

4

Cách tôi nhìn thấy nó, một hệ thống tệp, theo nghĩa UNIX, là một cách triển khai cây thư mục (cấu trúc thư mục), hay chính xác hơn là cách triển khai API hệ thống tệp UNIX. Hệ thống tệp gốc được hỗ trợ bởi một triển khai cụ thể và bất cứ khi nào bạn nhập thư mục mountpoint, bạn nhập một cây con được hỗ trợ bởi một cái gì đó khác nhau.

Giao diện luôn giống nhau, nhưng trong một trường hợp, bạn có một phân vùng đĩa cụ thể ở phía sau, trong trường hợp khác, sẽ có một chương trình thậm chí không bao giờ ghi vào thiết bị lưu trữ. Hệ procthống tập tin sẽ được hỗ trợ bởi phần mềm hiển thị phần bên trong kernel; an tmpfssẽ được sao lưu bằng phần mềm ghi vào RAM và các hệ thống tệp khác có thể ghi vào mạng hoặc ở nơi khác.

Theo nghĩa phi UNIX của từ này, một hệ thống tệp là một cách tổ chức lưu trữ dữ liệu. ext4, btrfs, fat, Và ntfslà hệ thống tập tin theo ý nghĩa này, mà còn trong Unixy giác họ thực hiện các API hệ thống tập tin. procsẽ không phân loại như một hệ thống tập tin trong mô hình này, hạn chế hơn, vì nó không tổ chức lưu trữ dữ liệu.

TL; DR:

  • cấu trúc thư mục / cây = giao diện người dùng
  • hệ thống tập tin = back end

2

Mặc dù nhận thức thư mục không rõ ràng khi nói về hệ thống tệp, hệ thống tệp có thể có nghĩa khác nhau tùy thuộc vào nội dung bạn đang nói.

Trong ví dụ của bạn, tất cả các đường dẫn được liệt kê là thư mục nhưng chỉ một số trong số chúng cũng là điểm gắn kết của hệ thống tệp.

Bạn có thể sử dụng dflệnh để biết hệ thống tệp hoặc thư mục đã cho là gì và mountlệnh trên hầu hết các triển khai Unix và Linux để tìm ra hệ thống tệp nào có trên máy của bạn, loại và điểm gắn kết của chúng. ví dụ:

$ 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

Tuyên bố /binlà một hệ thống tập tin đáng ngờ, /binhầu như luôn được gắn vào /.

$ 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

Trước tiên, một sự điều chỉnh cho giả định của bạn về một hệ thống tập tin và một thư mục. Một hệ thống tập tin chứa một hoặc nhiều thư mục. Sử dụng các ví dụ của bạn /proc, //binlà các thư mục. Chúng không phải là "hệ thống tập tin" trong chính chúng, nhưng chúng có thể là gốc của hệ thống tập tin tương ứng.

Nếu bạn muốn xác định thư mục nào cũng là điểm gắn kết (root) của hệ thống tập tin của họ, bạn có thể sử dụng một cái gì đó như thế này:

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

Hệ thống tệp là một phương pháp để tổ chức và lưu trữ một lượng lớn dữ liệu sao cho hệ thống dễ quản lý. một hệ thống tệp bao gồm các tệp, mối quan hệ với các tệp khác, cũng như các thuộc tính (loại tệp, tên tệp, kích thước tệp, chủ sở hữu tệp, dấu thời gian tệp) của mỗi tệp.

Thư mục : ví dụ, hệ thống tệp Unix về cơ bản bao gồm các tệp và thư mục. Thư mục là các tệp đặc biệt có thể chứa các tệp khác. thư mục trên cùng là /(dấu gạch chéo), với các thư mục ngay bên dưới là thư mục hệ thống. nhập mô tả hình ảnh ở đây

/ Root hệ thống tập tin Linux

/bin Tập tin thực thi nhị phân được lưu giữ ở đây

/boot Khởi động các tập tin liên quan được lưu giữ ở đây

/dev Các tập tin thiết bị được lưu giữ ở đây

/etc Các tập tin cấu hình trên toàn hệ thống được lưu giữ ở đây

/home Vị trí cho các thư mục nhà của người dùng thường xuyên

/lib64 Thư viện cho thực thi nhị phân được lưu giữ ở đây

/mnt Điểm gắn tạm thời cho DVD-Rom, ổ flash USB.

/optCác chương trình tùy chọn được cài đặt tại đây như Tệp chương trình trong windows

/proc Hệ thống tập tin giả hạt nhân

/root Thư mục chính của siêu người dùng root

/sbin Các tệp thực thi nhị phân hệ thống được lưu giữ tại đây

/tmp Các tập tin tạm thời được lưu giữ ở đây

/usr Hệ thống tập tin người dùng

/var Các tệp biến được lưu ở đây

/srv là một thư mục phục vụ, chứa dữ liệu dành riêng cho trang web được phục vụ bởi hệ thống này.

srcđể biết thêm

Hai thư mục sau đây là thư mục do người dùng định nghĩa:

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

Sơ đồ đó là hết hạn. FHS 3.0 đã được phát hành vào tháng 6 năm 2015. Cũng cần lưu ý rằng FHS chỉ áp dụng cho các bản phân phối Linux.
fpmurphy

1

Nếu bạn chỉ cần một lệnh cho bạn biết nếu đường dẫn là một thư mục hoặc không sử dụng mountpoint (1) .

Đối với tôi nó in

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

Điều tốt là trạng thái thoát chỉ ra một lần nữa để bạn có thể sử dụng nó trong các tập lệnh của mình như thế này:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.