有什么区别目录结构和文件系统?
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
我如何识别哪一个是文件系统和一个目录从上面的代码片段?
答案1
人们不使用文件系统太仔细了。在您的示例中,我会说/
、/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 号索引节点是整个磁盘文件系统的“根”索引节点(这是该短语的另一种用法)。/
,/boot
并且/home
全部具有 inode 编号 2,而/proc
完全由内核提供且不存在于磁盘上,具有 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
命令来查找文件系统。它列出了所有已安装的文件系统以及它们的安装位置。
答案2
冒着过于简单化的风险,
- 文件系统就像汽车的发动机和其他内部系统,
- 目录结构就像您驾驶地点的地图。
既然有人要求我加演,
- 文件系统就像音频/视频信号分配/传播的机制(实现细节):模拟射频广播、数字射频广播、电缆、互联网、录像带、视频磁盘等。
- 目录结构就像电视节目的内容及其分类,例如喜剧、戏剧、新闻、纪录片、游戏节目、体育等。
如果您想要代码,请参阅此答案的前半部分
如何确定Linux文件系统是否属于正在运行的系统— 对 进行验证检查的部分root_dir
。只是按照布鲁斯说的去做;验证它是一个目录并检查它的 inode 号是 1 还是 2。
答案3
在我看来,UNIX 意义上的文件系统是一种实现目录树(目录结构)的方法,或者更准确地说,是一种实现 UNIX 文件系统 API 的方法。根文件系统由一种特定的实现支持,每当您进入安装点目录时,您都会进入由不同的东西支持的子树。
接口总是相同的,但在一种情况下,后端有一个特定的磁盘分区,在另一种情况下,会有一个程序甚至从不写入存储设备。文件系统proc
将由公开内核内部的软件支持;将由tmpfs
写入 RAM 的软件进行备份,其他文件系统可能会写入网络或其他地方。
从非 UNIX 意义上来说,文件系统是一种组织数据存储的方式。ext4
、btrfs
、fat
和ntfs
是这个意义上的文件系统,也是 UNIXy 意义上的文件系统 — 它们实现文件系统 API。proc
不会被归类为这个更有限的范式中的文件系统,因为它不组织数据存储。
长话短说:
- 目录结构/树=前端
- 文件系统=后端
答案4
首先纠正您关于文件系统和目录的假设。文件系统包含一个或多个目录。使用您的示例,/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