相关疑难解决方法(0)

为什么在 UNIX/Linux 中不允许硬链接到目录?

我在教科书中读到 Unix/Linux 不允许硬链接到目录,但允许软链接。是不是因为,当我们有循环,如果我们创建硬链接,一段时间后我们删除原始文件,它会指向一些垃圾值?

如果循环是不允许硬链接的唯一原因,那么为什么允许软链接到目录?

filesystems directory hard-link symlink

137
推荐指数
6
解决办法
7万
查看次数

'rm .*' 会删除父目录吗?

该表达式.*由 bash 扩展以包括当前和父目录:

$ ls -la
total 2600
drwxrwxrwx   2 terdon terdon 2162688 Sep 10 16:22 .
drwxr-xr-x 142 terdon terdon  491520 Sep 10 15:34 ..
-rw-r--r--   1 terdon terdon       0 Sep 10 16:22 foo
$ echo .*
. ..
Run Code Online (Sandbox Code Playgroud)

如果我rm -rf .*使用 GNU bash 在我的 Debian 上运行,version 4.2.36(1)-release并且rmrm (GNU coreutils) 8.13,我会收到以下消息:

$ rm -rf .*
rm: cannot remove directory: `.'
rm: cannot remove directory: `..'
Run Code Online (Sandbox Code Playgroud)

这是 GNU 的东西还是 POSIX?是否有任何 …

shell posix wildcards rm

58
推荐指数
1
解决办法
6631
查看次数

为什么是 '。' Unix 中的硬链接?

我已经看到很多解释为什么基于 Unix 的操作系统中空目录的链接数是 2 而不是 1。他们都说这是因为 '.' 目录,每个目录都指向它自己。我明白为什么会有一些“。”的概念。对于指定相对路径很有用,但是在文件系统级别实现它有什么好处?为什么不让 shell 或采用路径的系统调用知道如何解释它呢?

'..' 是一个真正的链接对我来说更有意义——文件系统需要存储一个指向父目录的指针才能导航到它。但我不明白为什么“。” 成为一个真正的链接是必要的。它似乎也导致了实现中的一个丑陋的特殊情况——你会认为你只能释放链接数小于 1 的 inode 使用的空间,但如果它们是目录,你实际上需要检查一个链接数小于 2。为什么不一致?

shell filesystems directory hard-link

51
推荐指数
2
解决办法
3416
查看次数

如何取消链接(删除)特殊硬链接“.” 为文件夹创建?

在 Linux 上,当您创建文件夹时,它会自动创建两个指向相应 inode 的硬链接。一个是您要求创建的文件夹,另一个是.此文件夹的特殊文件夹。

例子:

$ mkdir folder
$ ls -li
total 0
124596048 drwxr-xr-x    2 fantattitude  staff    68 18 oct 16:52 folder
$ ls -lai folder
total 0
124596048 drwxr-xr-x  2 fantattitude  staff   68 18 oct 16:52 .
124593716 drwxr-xr-x  3 fantattitude  staff  102 18 oct 16:52 ..
Run Code Online (Sandbox Code Playgroud)

如您所见,folder.的内部folder具有相同的 inode 编号(显示为-i选项)。

有没有办法删除这个特殊的.硬链接?

它仅用于实验和好奇心。 另外我想答案也适用于..特殊文件。

我试图调查rm男人,但找不到任何方法来做到这一点。当我尝试删除.所有内容时,我得到的是:

R M: ”。” …

linux filesystems hard-link rm

29
推荐指数
2
解决办法
2983
查看次数

使用命令行界面从内部删除目录

对 /home/user/ 目录中的下一个简单文件结构进行映像:

/home/user 
       |--dir0 
           |--dir1
               |--file1
Run Code Online (Sandbox Code Playgroud)

我当前的目录是“dir1”,我使用以下命令从内部删除目录:

rm -r ../dir1
Run Code Online (Sandbox Code Playgroud)

之后(并且在终端上没有出现任何错误),工作目录仍然相同,并且在使用命令pwd 时,输出为:

user@ubuntu:~/dir0/dir1$ pwd
/home/user/dir0/dir1
user@ubuntu:~/dir0/dir1$
Run Code Online (Sandbox Code Playgroud)

如果已经从文件系统中删除了工作目录,为什么操作系统会返回工作目录是“dir1”?

ubuntu terminal rm files

4
推荐指数
2
解决办法
950
查看次数

删除当前目录时会发生什么?

在第一个终端A中,我创建一个目录,进入该目录,并创建一个文件:

$ mkdir test
$ cd test
$ touch file1.txt
$ ls
file1.txt
Run Code Online (Sandbox Code Playgroud)

然后在另一个终端 B 中,我删除了目录:

$ rm -r test
$ mkdir test
$ cd test
$ touch file2.txt
Run Code Online (Sandbox Code Playgroud)

再回到终端 A(不做任何操作cd),我尝试列出文件:

$ ls
Run Code Online (Sandbox Code Playgroud)

ls 没有看到任何东西,也没有抱怨。

后台会发生什么?怎么ls没看出问题?是否有标准的、便携的和/或推荐的方法来找出终端 A 中的某些问题?

pwd只是打印看似正确的目录名称。touch file3.txt说没有这样的文件或目录,这是没有帮助的。只bash -c "pwd"给出了两条很长的错误行,以某种方式表明出了什么问题,但并没有真正的描述性,而且我不确定不同系统之间的可移植性(我在 Ubuntu 16.04 上)。cd .. && cd test解决了问题,但并没有真正解释发生了什么。

ls directory pwd deleted-files

4
推荐指数
1
解决办法
1542
查看次数