标签: hard-link

取消引用硬链接

tar命令的手册页中,列出了跟踪硬链接的选项。

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to
Run Code Online (Sandbox Code Playgroud)

如何tar知道文件是硬链接?它是如何遵循的

如果我不选择这个选项怎么办?它是如何硬解引用?

tar hard-link

26
推荐指数
2
解决办法
9755
查看次数

硬链接创建 - 权限?

哪些权限会​​影响硬链接的创建?文件所有权本身重要吗?


假设用户alice想要创建一个指向target.txt目录中文件的硬链接target-dir

  • 和都alice需要哪些权限?target.txttarget-dir
  • 如果target.txt是由用户拥有billtarget-dir被用户所拥有chad,它改变什么?

我试图模拟这种情况,在ext4文件系统中创建以下文件夹/文件结构:

#> ls -lh . *
.:
drwxr-xr-x 2 bill bill 60 Oct  1 11:29 source-dir
drwxrwxrwx 2 chad chad 60 Oct  1 11:40 target-dir

source-dir:
-r--r--r-- 1 bill bill 0 Oct  1 11:29 target.txt

target-dir:
-rw-rw-r-- 1 alice alice 0 Oct  1 11:40 dummy
Run Code Online (Sandbox Code Playgroud)

虽然alice可以创建到 的软链接target.txt,但她不能创建硬链接:

#> ln source-dir/target.txt target-dir/
ln: …
Run Code Online (Sandbox Code Playgroud)

linux permissions hard-link

25
推荐指数
1
解决办法
3万
查看次数

如何在忽略硬链接的情况下获取文件夹大小?

我使用 rsnapshot 进行备份,它会生成一系列包含同名文件的文件夹。一些文件是硬链接的,而其他文件是分开的。例如,hourly.1/file1andhourly.2/file1可能硬链接到同一个文件,而hourly.1/file2hourly.2/file2是完全独立的文件。

我想找到hourly.2 忽略任何文件的文件夹使用的空间量,这些文件是hourly.1. 所以在上面的例子中,我想获得 file2 的大小,但忽略 file1。

我在 linux 上使用 bash,我想尽可能简单地从命令行执行此操作,因此请不要使用大型图形或其他操作系统解决方案。

size hard-link disk-usage files

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

如何找出文件是硬链接还是符号链接?

我有一个文件在~/file.txt.

我通过以下方式创建了硬链接:

ln ~/file.txt ~/test/hardfile.txt
Run Code Online (Sandbox Code Playgroud)

和一个符号链接文件:

ln -s ~/file.txt ~/test/symfile.txt
Run Code Online (Sandbox Code Playgroud)

现在,

  1. 我怎样才能找出哪个文件是硬链接?
  2. 如何找出哪个文件后面的硬链接?

我们可以通过 找到符号链接文件->,但是硬链接呢?

在此处输入图片说明

filesystems hard-link symlink

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

dpkg 替换 FAT 文件系统上的文件

当您升级或重新安装一个包dpkg(以及最终使用它的任何东西,如 apt-get 等)时,它会通过在替换之前创建文件的硬链接来备份现有文件。这样,如果解包失败,它可以轻松地放回现有文件。这很棒,因为它可以保护操作系统免受 Bad Things™ 的影响。

除了...它仅在您的文件系统支持硬链接时才有效。并非所有文件系统都如此——例如 FAT 文件系统。

我正在为特定的嵌入式 ARM 平台开发 Debian 发行版,并且引导环境要求某些文件(包括内核)位于 FAT 文件系统上,以便引导代码能够定位和加载它们。

当您升级内核包(或在该 FAT 分区中有文件的任何其他包)时,安装失败:

dpkg: error processing archive linux-image3.18.11+_3.18.11.2.armadillian_armhf.deb (--install):
 unable to make backup link of `./boot/vmlinuz-3.18.11+' before installing new version: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

并且整个升级失败。

我在网上搜索过,我能找到的唯一参考是在进行特定升级时遇到特定问题的特定人员,其答案通常是“删除 /boot/vmlinuz-3.18.11+ 并重试”,是的,那个解决了那个特定的问题。

但这不是我的答案。我是 OS 分销商,而不是 OS 用户,因此我需要一种解决此问题的方法,该方法不涉及最终用户在升级之前手动删除其内核文件。我需要一种方法来告诉 dpkg 对 /boot 上的文件(或所有我关心的所有文件,尽管这会减慢升级操作的速度)“复制,而不是硬链接”,或者更好的是“如果硬链接失败,不要抱怨,只需复制它”。

我已经尝试过诸如--force-unsafe-io甚至--force-all标志 之类的事情dpkg,但没有任何效果。

dpkg hard-link fat

23
推荐指数
1
解决办法
982
查看次数

cp 在 . (dot) 或 .. (dot dot) 是源目录

这个答案表明可以将所有文件(包括隐藏文件)从目录复制src到目录中,dest如下所示:

mkdir dest
cp -r src/. dest
Run Code Online (Sandbox Code Playgroud)

答案或其评论中没有解释为什么这实际上有效,似乎也没有人找到有关此的文档。

我尝试了一些东西。一、正常情况:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src dest
$ ls -A dest
dest_file  src
Run Code Online (Sandbox Code Playgroud)

然后,/.最后:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/. dest
$ ls -A dest
dest_file  .dotfile  src_dir  src_file
Run Code Online (Sandbox Code Playgroud)

因此,这与 的行为类似*,但也会复制隐藏文件。

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/* dest …
Run Code Online (Sandbox Code Playgroud)

documentation hard-link cp recursive dot-files

23
推荐指数
1
解决办法
6191
查看次数

对 cp 与硬链接的行为感到惊讶

我非常了解硬链接的概念,并且已经多次阅读基本工具的手册页,例如cp--- 甚至最近的 POSIX 规范。我仍然惊讶地观察到以下行为:

$ echo john > john
$ cp -l john paul
$ echo george > george
Run Code Online (Sandbox Code Playgroud)

此时johnpaul将具有相同的 inode(和内容),并且george在这两个方面都会有所不同。现在我们这样做:

$ cp george paul
Run Code Online (Sandbox Code Playgroud)

在这一点上,我期望georgepaul拥有不同的 inode 编号但内容相同——这个期望得到了满足——但我期望paul现在有一个不同的 inode 编号john,并且john仍然有内容john。这是我感到惊讶的地方。事实证明,将文件复制到目标路径paul也会导致在共享paul的 inode 的所有其他目标路径上安装相同的文件(相同的 inode)。我想cp创建一个新文件并将其移动到以前由旧文件占据的位置paul。相反,它似乎是打开现有文件paul,截断它,然后写入george的内容到现有文件中。因此,具有相同 inode 的任何“其他”文件都会同时更新“他们的”内容。

好的,这是一种系统行为,现在我知道期待它,我可以弄清楚如何解决它,或者在适当的时候利用它。让我感到困惑的是,我应该在哪里看到这种行为的记录?如果它没有记录我会感到惊讶的地方在文件我已经看过。但显然我错过了它,现在找不到讨论这种行为的来源。

hard-link cp

22
推荐指数
3
解决办法
3376
查看次数

“..”真的是硬链接吗?

这是一个有点理论问题,但使用事物的专有名称很重要。

在 UNIX/Linux 文件系统中,..指向父目录。

但是,我们知道硬链接不能指向目录,因为这有可能破坏文件系统的非循环图结构并导致命令无限循环运行。

那么,..真的是硬链接(.)吗?这将使其成为一种特殊类型的硬链接,不受目录限制,但在所有用途上都表现得像硬链接。

或者这是一个特殊的 inode 映射,硬编码到文件系统中,不应该称为硬链接?

filesystems hard-link inode

22
推荐指数
4
解决办法
4896
查看次数

硬链接算作普通文件吗?

我想知道是否有办法注册这个,但由于大多数现代搜索引擎不能很好地处理长度超过 5 个单词的短语,我需要一些帮助。

我想知道这一点,因为我正在制作一个 bash 脚本,它必须将文件注册为某些类型并做出相应的决定。这在技术上对我的项目并不重要,但我很好奇。

另外,如果它们被认为是常规文件,那么有没有办法检查这些文件是否硬链接而无需解析ls -i?有没有办法在不使用find -i命令的情况下检查某个任意文件 X 是否硬链接到某个其他任意文件 Y ?

bash hard-link shell-script files

21
推荐指数
1
解决办法
2221
查看次数

如何创建到 inode (ext4) 的硬链接?

如果我知道文件的索引节点(inode),但不知道它的路径(或其任何路径),是否可以直接创建到该 inode 的硬链接?

我可以找到文件sudo find / -inum 123546,然后创建一个硬链接,但这对我的应用程序来说太慢了。

注意我使用的是 ext4 文件系统。

ext4 hard-link inode

20
推荐指数
1
解决办法
2044
查看次数