这两个命令有区别吗?

Ste*_* Lu 5 command-line bash posix

cat a > b
Run Code Online (Sandbox Code Playgroud)

cp a b
Run Code Online (Sandbox Code Playgroud)

如果它们的所有意图和目的在功能上都相同,那么哪个更快?

Lev*_*von 6

在功能方面,我认为它们是相同的。

如果我不得不冒险猜测哪个更快,我会说cp命令,因为它的目的是仅出于复制目的进行文件操作,因此它将为此进行优化。

相比之下,cat意味着连接文件,意味着将几个文件连接成一个系列。如果没有指定文件,它会向控制台显示一个文件(感谢@bahamat 提醒我们)。在这个例子中,输出被重定向到另一个文件。我认为这种间接方式的效率会低于直接cp.

我不知道对于常规大小的文件,差异是否会很明显,尽管在非常大的文件上计时会很有趣。我想可以用 /usr/bin/time 反复试验,看看一个是否总是比另一个更快/更慢。

你有什么特别的理由要问这个吗,还是只是单纯的好奇(当然这没什么错)

  • 2之间有1个重要的功能区别;权限。`cp` 将尝试在新文件上保持与原始文件相同的文件权限(模式)。显然,由于文件系统限制或其他因素,这可能是不可能的。 (3认同)
  • `cat` * 不是* 将文件显示到屏幕上。`cat` 是“concatenate”的缩写,它被定义为“组合成一个系列或链”。`cat` 的最初目的是将多个文件合并为一个(例如,`cat file1 file2`)。碰巧的是,如果您将一个文件与任何内容组合在一起,它只会打印那个文件。 (3认同)
  • @Patrick `cp` 只有在使用 `-p` 选项时才会保持相同的权限。否则它会根据 `umask` 创建一个全新的文件。关于时间戳的问题是相同的。 (2认同)
  • @JamesMcLeod 没有 EOF 这样的东西,当从文件中读取时,`cat` 会响应。@Steven `cat` 被设计成完全透明。它不会改变任何东西。 (2认同)