当您的`s`更少时,是否有理由使用`cat'?


59

我曾经用来cat查看文件。然后我了解到less通常情况下更好,如果文件长于几十行,则必须这样做。

我的问题:是否有使用cat代替的理由less?在什么情况下cat有更好的解决方案?


17
lesscat解决不同的问题,它们在各自的问题领域中都比对方更好
David Heffernan

2
我仅用于cat将其输出传递到less之后。
FUZxxl 2011年

1
我经常用来cat将非常短的文件打印到控制台,这些文件中的/proc/sys是非常好的候选文件。这样,我可以同时看到多个文件的内容。
Feuermurmel

Answers:


20

我个人更喜欢view静态内容或tail -f动态内容。

但是,这不能回答您的问题。俗话说“少用为什么多用” ;-)

但是在某些情况下,我更喜欢猫而不是猫:我通常使用X11-windows。这些窗口有一个滚动缓冲区,可以将其设置为几百行。

做一个cat-假设200行,然后将鼠标与滚动条一起使用比less在这种情况下使用更舒适。


4
通过view你的意思是通常的vim -R,或者你有一个同名别的东西吗?
manatwork 2011年

否-仅vi(或vim)处于只读模式。CentOS默认设置该别名。在查看安全目录中的文件时,这不会触发HIDS。
Nils

2
less +F会做什么tail -f
legends2k 2014年

2
实际上,view这不是别名。这是一个链接(到vivim)。 vi查看argv[0]启动的时间(以查看调用该名称的名称),如果是viewrview,它将设置为只读模式(就像您键入了一样vim -R)。
G人

91

尽管这两个命令都允许您查看文件的内容,但是它们的原始用途却大不相同。

更少扩展更多功能。创建后者是为了一次查看一个文件的内容。less少了一些功能,例如向后移动和更好的内存管理(无需看到整个文件就可以看到第一行)。

cat连接文件并在标准输出上打印结果。如果仅提供一个文件,则将看到该文件的内容。当您提供多个文件时,它变得“强大”。一个很好的例子是split和cat 的组合。第一条命令将大文件分成小部分。然后,第二个将这些小部分连接到一个文件中。

回到您的问题,在要求完全读取(或串联)文件而无需交互的自治脚本中,cat是首选。在文件查看方面,我认为这更多是一个品味问题。


4
less始终允许在文件中搜索,而cat不允许。
伯恩哈德

@Bernhard:在cat输出上执行grep怎么样?
user3527975

23

我通常cat在需要基于文件中的内容键入命令时使用。cat这样比较方便,因为可以在访问shell提示时看到文件(如果很小)。它还允许管道衬里。


3
对于一个文件,重定向标准输入也是可能的,并且通常更可取。
AProgrammer

17
有什么情况是猫更好的解决方案?

当您处理多个文件并希望将它们串联时。

从手册页:

cat f - g
        Output f's contents, then standard input, then g's contents.

15

还有谁认为是暴力的唯一目的的人cat是精读 enate文件。对于其他任何用途,都有more(或less)。

但是,这没有考虑到一个相当重要的事实:cat少键入一个字符。我经常使用这些命令,以至于精打细算。

另一个原因是当您要创建文件时。我经常将网上的文本复制并粘贴到这样的文件中(显示命令提示符):

$ cat > filename
<Cmd-V>
<Ctrl-D>
$

也就是说,我打开一个文件filename进行写访问,粘贴内容并按Ctrl- 关闭流D。无论是lessmore能做到这一点,这是不是打开一个编辑器更快。


4
如果将zsh用作shell,则可以对其进行设置,以便$<filename(在$提示符下)调用stdin连接到的$ PAGER filename。这样输入的字符数甚至少于cat
凯文·卡斯卡特

@Kevin很高兴知道,但我是bash用户。
康拉德·鲁道夫

2
在Mac OS X上,我使用pbpaste > filename,并且我相信X具有类似的功能。我仍然cat用于快速文件创建,只是不用于粘贴。
cobbal 2011年

@cobbal Hehe,即使我将pbcopy/ pbpaste用于其他目的,我也从未想过。
康拉德·鲁道夫

1
实际上少了两个字符-您必须按q退出less:D
Martin von Wittich


4

cat用来grep(多个)文件。

cat <filename1> [<filename2> <filename3>] | grep -i "string of interest"

我知道grep支持文件名,但是如果您要为不同的搜索字词添加相同的文件,则编辑命令(搜索字词是该行的最后一件事)会更容易,然后必须通过Ctrl +箭头键返回该行。


4

cat 可用于将多个二进制文件合并为一个大文件:

cat data.001 data.002 data.003 > bigdata.dat

3

我使用less -FX,它的less行为就像cat可以在一个屏幕上显示文件时一样。从less(1)联机帮助页:

-F or --quit-if-one-screen
       Causes less to automatically exit if the entire file can be dis-
       played on the first screen.

-X or --no-init
       Disables sending the termcap initialization and deinitialization
       strings  to  the  terminal.   This is sometimes desirable if the
       deinitialization string does something unnecessary, like  clear-
       ing the screen.

2

我想,由于现在Unix变体的流行,许多人不必(以某种程度的代价)来管理他们的系统。当事情变得井井有条时,您可能仅能重新引导并在所谓的受限环境中进入系统。

您将获得一个命令行,并可以访问一小部分有用的命令,这些命令很小,通常是静态链接的。您可能会以vi作为编辑器,甚至是较小的ed,但没有emacs或vim。你会得到猫,但不少。这样做的想法是为您提供足够的工具来修复系统,而又不会占用过多的资源,因为这些资源可能配置错误或已全部用尽。这些情况下的命令越少是多余的。


2

并且less不是所有GNU / Linux发行版上都预安装的。(例如Gentoo)cat到处都是。


2

cat屏幕上停留。一切都less消失了。

由/为Volker Siegel澄清:

的输出cat停留在屏幕上。less关闭后,所有显示的内容均消失。


1

特权升级可能会出现问题,因为在“较少”范围内,您可以按“ v”编辑文件或在“!” 发送一个shell命令。

您可能希望允许某些用户查看只能由超级用户读取的文件,但通常不允许那些用户编辑文件或使用超级用户特权。您可以通过编辑“ / etc / sudoers”以允许他们使用“ sudo / bin / cat / etc / importantfile”来实现。您不希望允许使用'sudo / usr / bin / less / etc / importantfile',因为它们可以使用'v'编辑文件或使用'!'。启动具有完全超级用户特权的shell。

当然,用户可以使用'sudo / bin / cat / etc / importantfile | 较少”,并且仍然使用“较少”,而没有安全隐患。


1

两者是不同的。lessmore用于查看文本的非标准寻呼机(是标准寻呼机),cat而是用于将任何类型和数量的数据流串联在一起的标准实用程序。

在某些情况下,它们看起来可能会执行相同的操作,但其他实用程序也会这样做。


0

为了方便。猫有3个字符,而更多/更少有4个字符。而输入cat只需要您的左手。


1
为什么只用左手有优势?我不在终端上使用鼠标...
Bernhard

0

就如何在屏幕上显示字符而言,less可以做什么cat就可以做什么;以及更多。

但是有一个很好的理由使用的猫有些情况是:
less只是太复杂扔掉它非常简单的问题。我有很多选项,因此很难cat在手册页中找到与之相关的选项。


想要在中显示选项卡Makefile吗?

在中man cat,第一个选项是-A
说明没有帮助:-vET
但是长选项名称听起来恰好:--show-all

cat -A Makefile做我需要的。


现在,去寻找less


0

如果输出不是终端(tty),则“少”和“多”都将与“猫”完全一样工作,对于管道和文件,它们都将恢复为无分页。

我认为可以肯定地说,“ cat”始终存在于您将找到的任何Unix类型的系统中。任何系统上“更少”和/或“更多”的存在都是不可预测的。

因此,在脚本中,如果只需要非分页操作,则在Unix类型的系统上使用脚本的任何位置都一定会出现“ cat”。


1
好吧,可以安全地假定它more会可用,因为它是由Single Unix Specification强制要求的。
Kusalananda

遗憾的是,虽然它可能像这样被强制执行,但是以我的经验,它并不总是存在。值得注意的是,有许多类Unix的系统并没有声称自己是Unix。我认为一个人可以肯定会出现a less或a more,但是我认为一个人不能相信特定的一个,也不是一个“真实的”实现...通常一个别名是另一个,有时是是最小的轻量级版本。
user208007'1

-1

通过grep配管猫非常有用:

cat <filename> | grep -i "string of interest"

4
更不用说grep以文件名作为参数了,否则您可以使用重定向。管子很贵。
克里斯·

25
恭喜,您获得了“猫的无用使用”奖!
ThatGraemeGuy 2011年

4
@TimKennedy- less问题中的标题为“当您拥有时” ...
克里斯·

5
已投票。我经常这样做。如果我想多次为不同的搜索词grep一个文件,这会更容易。grep想要grep [search term] [filename]因此,如果我使用的是终端历史记录,则编辑搜索词更加麻烦。通过管道传递给grep,搜索词是最后的选择,并且更易于编辑。
假名称

10
您仍然可以不使用cat< [filename] grep [search term]和来获得所需的订购< filename tail -n 1000 | grep pattern。重定向几乎可以在命令行的任何地方进行。
camh 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.