Answers:
我想到的另一个问题是,cat
vs。cp
产生显着差异的地方:
根据定义,cat将扩展稀疏文件,用“真实的”零字节填充空白,而至少可以告诉cp保留这些空缺。
稀疏文件是指零字节序列已被元数据替换以节省空间的文件。您可以通过使用dd创建一个进行测试,并使用您选择的工具进行复制。
创建一个稀疏文件(为避免麻烦,请预先更改为/ tmp-请参阅最后的注释):
15> cd /tmp
16> dd if=/dev/null of=sparsetest bs=512b seek=5
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.9256e-05 s, 0.0 kB/s
调整大小-它不应占用任何空间。
17> du -sh sparsetest
0 sparsetest
用cp复制并检查大小
18> cp sparsetest sparsecp
19> du -sh sparsecp
0 sparsecp
现在用猫复制并检查尺寸
20> cat sparsetest > sparsecat
21> du -sh sparsecat
1.3M sparsecat
尝试使用您喜欢的工具来检查其行为
不要忘记清理。
最后要注意的是:如果您在备份计划的一部分文件系统上进行此类实验,或者对系统的健康至关重要,那么类似的实验就必然会在本地系统管理员中扬名。根据他选择的备份工具的不同,他可能最终需要比他认为可以备份的一个0字节文件更多的磁带介质,该文件被扩展为TB的零。
无法使用cat或cp复制的其他文件将包括设备专用文件等。这取决于复制工具的实现,如果它能够复制设备节点,或者它是否愿意复制其内容。
cp
有一个选项可以控制其对稀疏文件的行为。如--sparse=never
在命令行上指定的cp
一样慢cat
。
根据Keith的评论,cp
保留一些权限,并按指示cat
创建新文件umask
。因此,$2
不会保留$4/vmlinuz
非常干净的权限,而如果在上设置了一些奇怪的权限$3
,$4/System.map
则会保留该权限。
cat
吗?
cat
更快吗?
在这两种情况下,两者都具有相同的功能,但是cp纯粹是文件操作。“获取此文件,然后在那儿制作一个副本”。
另一方面,cat旨在将文件内容转储到控制台。“获取此文件并将其显示在屏幕上”,然后让忍者攻击屏幕并将输出重定向到其他位置。
cp通常会更高效,因为没有重定向,只是将字节从位置A直接复制到位置B。
猫会的read bytes -> output to console -> intercept output -> redirect to new file
。
cat
不会output to console -> intercept output -> redirect to new file
,cat的输出文件可以是stdout或普通文件,只要输入与输出不同就可以输出到该文件。
cat
与控制台无关。双方cat
并cp
从输入文件,并写入到输出文件中读取。使用cat
,通过外壳打开输出文件,而使用cp
,通过打开外壳文件cp
;这在性能上没有区别。cp
可能更快,但出于完全不同的原因:一些实现cp
尝试根据源设备和目标设备猜测正确的块大小以提高性能;的实现cat
不会打扰。
cp
使文件像原始文件一样,同时cat
创建具有相同内容的新文件。