关于 ls -d 的常见问题

关于 ls -d 的常见问题

当我运行命令时ls -d,我只看到一个点,没有其他东西。

无论我在哪里,它都是一样的。那是什么意思?Linux 在这里向我显示了什么?

我使用的是 RHEL 8.6,但我猜它与所有 Linux 系统都相关。

答案1

在大多数 Unix/Linux 文件系统中(并通过 shell 表示),单个点.代表当前目录(看这里)。

另外,来自man ls

   -d, --directory
          list directories themselves, not their contents

这意味着如果你ls -d在任何目录中运行(以 表示.),该命令只会输出这个点。不用说,这个命令是相当没用的。

有效的用法ls -d是将其与其他选项结合使用,并在另一个目录中使用,例如:

ls -lad /usr/bin/

这将显示目录本身的更多属性/usr/bin

答案2

首先,您发送命令的对象不是 Linux。您正在运行/usr/bin/ls。此程序可与任何类型的文件系统上的其他操作系统一起使用。

ls -d列出目录。

如果不带参数运行ls -d,它会输出.表示当前目录的内容。

如果您运行例如ls -d ~,它将显示您的主目录的路径。

如果运行ls -d ~/*,您将看到您的$HOME.

令人困惑的是,它ls -d给出的是目录的路径作为参数,而不是目录的内容。如果你不使用 globs,它几乎没用。

它可用于输出目录的完整路径,例如

pilot6@Pilot6:~$ ls -d ~
/home/pilot6

答案3

对于这些问题,最好的办法就是阅读手册。

您可以在命令行中输入命令 man 或者直接通过 Google 搜索来执行此操作。

在这种情况下man ls

对于选项 -d 或 --directory 我们得到:列出目录本身,而不是其内容

这个描述非常不言自明。

要在浏览器中查看该人: https://man7.org/linux/man-pages/man1/ls.1.html

另外,我想指出 Pilot 的评论。输出根据您使用的 shell 而不同。但由于您是新手,我假设您使用 Ubuntu 上的终端。

编辑以匹配评论的答案:

该命令仅输出当前目录。如​​果您有一个包含 3 个项目的文件夹 x,并在该文件夹内运行该命令,您将得到一个点。文件夹内的项目未列出。只有文件夹本身。

但是它并不总是输出点。如果你对另一个文件夹使用 ls 命令,它将输出该路径。

ls -d /usr/bin

将输出 /usr/bin。

就像其他答案所说的那样:单​​独使用这个命令是没用的。它只是打印文件夹,您已经知道了。然而:如果您在特定文件夹的终端中并且想要查看该文件夹的权限,而无需退出该文件夹,您可以使用ls -dl

drwxrwxr-x 2 test test 4096 Feb 16 13:53 .

使用不带 d 选项的 ls -l 将仅打印内容的权限掩码。

假设我们现在想更改权限并撤销所有人的写权限。我们在名为 test 的文件夹中。

我们现在可以做chmod a-w `ls -d`

请记住,chmod 会更改权限,a 代表所有(所有者、组和其他人),-w 撤销写入权限。如果我们现在重新输入之前的 ls -dl 命令,我们会得到:

dr-xr-xr-x 2 test test 4096 Feb 16 13:53 .

总之

如果您想要定位到您所在的文件夹,可以使用 -d 命令。单独使用 ls 不会产生任何效果。但是此命令不是必需的。您可以通过从文件夹外部定位文件夹来解决这个问题,例如只需执行 cd . 并在测试文件夹上应用 chmod 即可。但是,如果您出于某种原因不想离开该文件夹,可以使用此命令。

我希望现在一切都清楚了。

相关内容