标签: hard-link

为什么硬链接似乎与原始链接占用相同的空间?

多亏了这里和这个页面上的一些很好的问答,我现在明白了链接。我看到硬链接以不同的名称引用相同的 inode,副本是不同的“节点,具有不同的名称。加上软链接将原始文件名和路径作为它们的 inode,所以如果文件被移动,链接就会中断。

所以,我用一些文件(下面的“saluton_mondo.cpp”)测试了我学到的东西,制作了一个硬链接和一个软链接以及一个副本。

jmcf125@VMUbuntu:~$ ls -lh soft hard copy s*.cpp
-rw-rw-r-- 1 jmcf125 jmcf125 205 A?g 27 16:10 copy
-rw-rw-r-- 2 jmcf125 jmcf125 205 A?g 25 13:34 hard
-rw-rw-r-- 2 jmcf125 jmcf125 205 A?g 25 13:34 saluton_mondo.cpp
lrwxrwxrwx 1 jmcf125 jmcf125  17 A?g 27 16:09 soft -> saluton_mondo.cpp
Run Code Online (Sandbox Code Playgroud)

然而,我发现硬链接与原始链接的大小相同,并且在逻辑上与副本的大小相同,这让我感到尴尬。如果硬链接和原始共享同一个inode,即有数据,只是文件名不同,那么硬链接不应该只占用其名称的空间,而不是205个字节吗?或者是ls -lh返回的原始文件的大小?但是我怎么知道文件名占用了多少空间呢?这里说硬链接没有大小。他们的文件名是否与原始文件名一起保存?硬链接的文件名存储在哪里?

linux hard-link disk-usage symlink files

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

就地中断硬链接?

我将我的 dotfiles 置于版本控制之下,部署它们的脚本会创建硬链接。我也习惯etckeeper把我的/etc版本控制。最近我收到了这样的警告:

warning: hard-linked files could cause problems with bzr
Run Code Online (Sandbox Code Playgroud)

简单的复制 ( cp filename.ext filename.ext) 将不起作用:

cp: `filename.ext' and `filename.ext' are the same file
Run Code Online (Sandbox Code Playgroud)

重命名/移动文件 - 除了跨卷 - 也不会破坏硬链接。

所以我的问题是:有没有办法打破文件的硬链接,而实际上不必知道该文件的其他硬链接在哪里?

hard-link

17
推荐指数
3
解决办法
6157
查看次数

在同一文件系统中进行硬链接时跨设备链接无效

我有/home/myuser/Desktop/rc/.netrc文件,我想硬链接到/root,即root用户的主目录。当我做:

ln /home/user/Destkop/rc/.netrc /root

它给出了以下错误:

ln: 创建硬链接/root/.netrc' =>.netrc': 无效的跨设备链接

但是当我将文件硬链接到myuser的家,即/home/myuser时,它会起作用。

那么,问题是什么,为什么这里只有一个文件系统时会显示无效的跨设备?

附注。我正在使用RHEL6

root rhel hard-link home .netrc

17
推荐指数
2
解决办法
9万
查看次数

使用 cp -l 或 ln 进行硬链接有区别吗?

我正在使用 rsync 和硬链接实施备份方案。我知道我可以使用带有 rsync 的 link-dest 来做硬链接,但是我看到提到在 rsync 中实现“link-dest”之前使用“cp -l”。我知道的另一种硬链接方法是“ln”。

所以我的问题是,出于好奇:与使用“ln”相比,使用“cp -l”制作硬链接有区别吗?

hard-link cp ln

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

如何找到一个目录的所有链接

当我统计一个目录时,我得到一个列表,告诉我有 5 个指向该目录的链接。

stat dir
Run Code Online (Sandbox Code Playgroud)

我的问题是如何获取所有这 5 个链接的信息(名称和位置)?

directory hard-link

15
推荐指数
1
解决办法
5173
查看次数

如何仅“du”未被其他地方硬链接的文件占用的空间?

采用rsync --link-dest了节省空间的快照,我怎么能弄清楚我多少空间实际保存?或更一般的:

仅考虑在目录结构之外的其他地方没有硬链接的文件,如何确定目录使用了多少空间?换一种方式提问:删除该目录后实际会释放多少空间?(du -hs会撒谎。可能包括硬链接本身所需的空间)

hard-link disk-usage

14
推荐指数
3
解决办法
8006
查看次数

为什么我不能从 /dev 目录以外的设备文件创建硬链接?

当我想以root模式在我的/home目录中创建硬链接时,Linux 显示以下错误消息:

ln: failed to create hard link ‘my_sdb’ => ‘/dev/sda1’: Invalid cross-device link
Run Code Online (Sandbox Code Playgroud)

上面的错误信息如下所示:

# cd /home/user/
# ln /dev/sda1 my_sdb
Run Code Online (Sandbox Code Playgroud)

但是我只能在/dev目录中创建硬链接,而在其他目录中是不可能的。

现在,我想知道如何从目录(或其他目录)中的现有设备文件(如sdb1)创建硬链接/home

linux hard-link ln

13
推荐指数
2
解决办法
1万
查看次数

是否有任何文件系统可以让 `ln -d` 成功?

ln的联机帮助页:

-d, -F, --directory
  allow the superuser to attempt to hard link directories (note: will 
  probably fail due to system restrictions, even for the superuser)
Run Code Online (Sandbox Code Playgroud)

是否有任何文件系统驱动程序实际上允许这样做,或者是唯一的选择mount --bind <src> <dest>?或者这种行为是否在到达特定于文件系统的驱动程序之前就被内核阻止了?

注意:我实际上并不打算在任何机器上执行此操作,只是出于好奇。

linux filesystems directory hard-link

12
推荐指数
1
解决办法
648
查看次数

有没有办法表达:`--link` 或回退到 cp 中的普通副本(来自 GNU coreutils)?

有没有办法告诉cp--link(即创建硬链接),但回落的情况下,我试图设备间的硬链接?设备间链接是不可能的,并且会导致cp失败。

我问的原因是因为我想在 a 中使用它,GNUmakefile并且更喜欢可读的命令行而不是一些复杂而冗长的命令行(或函数,就此而言)。

问题是针对 GNU coreutils(7.4 和 8.13)。

注意:现在的解决方法类似于(GNU make recipe 语法):

cp -fl $^ $@ || cp -f $^ $@
Run Code Online (Sandbox Code Playgroud)

这当然会在设备间链接的情况下给出虚假的错误消息,尽管在第二次cp调用时成功。此外,然后它会被扩展(毕竟源表单看起来可读)它不会再可读了。

hard-link cp coreutils

11
推荐指数
1
解决办法
270
查看次数

`cp -al` 快照,其硬链接在编辑时被定向到新文件

我正在尝试定期拍摄大型文件夹的快照。

我在这里读过:http : //www.mikerubel.org/computers/rsync_snapshots/#Incremental通过简单地复制硬链接
cp -al获取文件夹的快照。

这一切都很好,但问题是在这个快照中,如果我更改一个文件,它会在所有快照中更改。我想要的是让系统在更改时创建一个新文件并链接到该文件。这样每个快照在编辑第一个文件时不会变得无效。

我怎样才能做到这一点?

ps 我试过rsync -a --delete --link-dest=../backup.1 source_directory/ backup.0/,但它有同样的问题。

backup hard-link cp rsync snapshot

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

标签 统计

hard-link ×10

cp ×3

linux ×3

directory ×2

disk-usage ×2

ln ×2

.netrc ×1

backup ×1

coreutils ×1

files ×1

filesystems ×1

home ×1

rhel ×1

root ×1

rsync ×1

snapshot ×1

symlink ×1