奇怪的挂起“ls -l”或“dir -l”不起作用

奇怪的挂起“ls -l”或“dir -l”不起作用

我在 Debian 服务器上有一个奇怪的行为。

语境 :Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u5 (2015-10-09) x86_64 GNU/Linux

用户:root

命令lsls -als -1dir完美运行。但这些命令ls -l,dir -l仅在/目录上这两个命令才会挂起终端。

答案1

ls/ ls -a...只是读取当前目录的内容,它不会对文件执行任何操作。

ls -l或者ls -Fls --color需要从列出的文件本身获取元数据信息(权限、类型、所有权、修改时间...)。因此,除了getdents()读取目录内容的系统调用之外,它还需要lstat()对其中列出的每个文件执行 a 操作,还需要对readlink()符号链接执行 a 操作(以及对带有or的某些实现的stat()符号链接执行 a 操作)。ls-F--color

对于+@和其他可选的备用访问方法标志有时发现在获得权限后,可能需要执行一些额外的系统调用(例如getxattr()在 Linux 上检索 ACL)。

使用 时ls -l,还需要查询用户数据库,将 uid 和 gid 转换为用户名和组名。

因此,虽然对于一个简单的,我们只需要打开一个文件(当前工作目录)并读取其内容,但很容易看出// ...ls失败的范围更大:-l-F--color

  • lstat()如果文件是不可用的文件系统上的安装点,则可能会失败或挂起。
  • stat()如果符号链接的目标位于不可用的文件系统上,则符号链接上的 可能会失败。
  • 对用户数据库的查询可能会失败或挂起(例如在使用网络 (LDAP/NIS+) 用户数据库的部署中)。

答案2

我的目录中的其中一个文件夹/是卷文件夹,从另一台机器挂载,这台机器已关闭。挂载的目录无法访问。

相关内容