目录结构与文件系统

目录结构与文件系统

有什么区别目录结构文件系统
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 意义上来说,文件系统是一种组织数据存储的方式。ext4btrfsfatntfs是这个意义上的文件系统,也是 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

相关内容