Есть ли причина использовать `cat`, когда у вас есть` less`?


59

Я использовал catдля просмотра файлов. Затем я узнал, что lessобычно лучше, и это обязательно, если файл длиннее нескольких десятков строк.

Мой вопрос: есть ли причина использовать catвместо less? Есть ли ситуация, когда catесть лучшее решение?


17
lessи catрешать разные проблемы, и каждый из них лучше других в своей области проблем
Дэвид Хеффернан,

2
Я только использую, catчтобы передать это вывод lessпотом.
FUZxxl

1
Я часто использую catдля печати очень короткие файлы на консоль, файлы /procи /sysявляются очень хорошими кандидатами. Таким образом, я могу видеть содержимое нескольких файлов одновременно.
Feuermurmel

Ответы:


20

Я лично предпочитаю viewстатический контент или tail -fдинамический контент.

Это не отвечает на ваш вопрос, хотя. Есть поговорка «зачем использовать больше, если у тебя меньше» ;-)

Но есть случаи, когда я предпочитаю cat меньше: я обычно работаю с X11-windows. Эти окна имеют буфер прокрутки, который может быть установлен в несколько сотен строк.

Делать catдля - скажем, 200 строк, а затем использовать мышь с полосой прокрутки для меня удобнее, чем использовать lessв этих случаях.


4
К viewвы имеете в виду обычное vim -R, или у вас есть что - то еще с этим именем?
Манатворк

Нет - просто vi (или vim) в режиме только для чтения. CentOS устанавливает этот псевдоним по умолчанию. Это не вызовет HIDS при просмотре файла в защищенном каталоге.
Нильс

2
less +Fделает то, что tail -fделает.
legends2k

2
На самом деле, viewэто не псевдоним; это ссылка (на viили vim). viсмотрит, argv[0]когда он запускается (чтобы увидеть, под каким именем он был вызван), и, если это viewили rview, он устанавливает режим только для чтения (как если бы вы печатали vim -R).
G-Man говорит: «Восстановите Монику»

91

Хотя обе команды позволяют просматривать содержимое файла, их первоначальное назначение весьма различно.

меньше расширяет возможности большего . Последний был создан для просмотра содержимого файла по одному экрану за раз. less добавляет такие функции, как движение назад и лучшее управление памятью (не нужно читать весь файл, прежде чем можно будет увидеть первые строки).

cat объединяет файлы и выводит результат на стандартный вывод. Если вы предоставите только один файл, вы увидите содержимое этого файла. Он становится «мощным», когда вы предоставляете несколько файлов. Хорошим примером является комбинация split и cat. Первая команда разделит большой файл на маленькие порции. Второй затем объединит маленькие порции в один файл.

Возвращаясь к вашему вопросу, cat предпочтительнее в автономном скрипте, требующем, чтобы файлы были прочитаны полностью (или объединены) без взаимодействия. Что касается просмотра файлов, я думаю, что это больше вопрос вкуса.


4
lessвсегда позволяет искать внутри файла, чего catнет.
Бернхард

@Bernhard: А как насчет grep на выводе cat?
user3527975

23

Я обычно использую, catкогда мне нужно набрать команду, основанную на чем-то в файле. catудобнее, так как вы можете видеть файл (если он маленький), пока у вас есть доступ к приглашению оболочки. Это также позволяет для футеровки труб.


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. Ни то, lessни другое не moreможет сделать это, и это быстрее, чем открыть редактор.


4
Если вы используете zsh в качестве оболочки, вы можете настроить ее так, чтобы $<filename(где $это приглашение) вызывало $ PAGER с подключенным stdin filename. Это еще меньше символов для ввода, чем cat.
Кевин Кэткарт

@Kevin Приятно знать, но я пользователь bash.
Конрад Рудольф

2
На Mac OS X я использую pbpaste > filename, и я верю, что у X есть нечто подобное. Я все еще использую catдля быстрого создания файла, но не для вставки.
коббал

@cobbal Хе-хе, я никогда не думал об этом, хотя я использую pbcopy/ pbpasteдля других целей.
Конрад Рудольф

1
На самом деле это на два символа меньше - вы должны нажать, qчтобы выйти less: D
Мартин фон Виттих

9

Иногда вам не нужна нумерация страниц, lessкоторая нужна, а просто файл целиком, чтобы вы использовали его cat.


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

Может возникнуть проблема с повышением привилегий, так как в «less» вы можете нажать «v» для редактирования файла или «!» отправить команду оболочки.

Возможно, вы захотите разрешить некоторым пользователям просматривать файл, который может быть прочитан только суперпользователем, но не позволяют этим пользователям редактировать файл или использовать привилегии суперпользователя в целом. Вы можете сделать это, отредактировав «/ etc / sudoers», чтобы позволить им использовать «sudo / bin / cat / etc / важный файл». Вы не захотите разрешить 'sudo / usr / bin / less / etc / Importantfile', потому что они могут использовать 'v' для редактирования файла или '!' запустить оболочку с полными привилегиями суперпользователя.

Конечно, пользователи могут использовать 'sudo / bin / cat / etc / Importantfile | меньше »и все равно используйте« меньше », без угроз безопасности.


1

Два разные. lessэто нестандартный пейджер ( moreявляется стандартным), используемый для просмотра текста, в то время catкак это стандартная утилита, используемая для объединения любого типа и количества потоков данных в один.

Может показаться, что они делают то же самое при некоторых обстоятельствах, но опять же, как и другие утилиты.


0

Для удобства. кошка имеет 3 символа, в то время как более / менее имеет 4 символа. А печатать кошку нужно только левой рукой.


1
Почему преимущество заключается только в использовании левой руки? Я не использую мышь на терминале ...
Бернхард

0

С точки зрения того, как показывать символы на экране, lessможно делать то, что catможно делать; И многое другое.

Но в некоторых случаях есть очень веская причина использовать cat:
lessона слишком сложна, чтобы бросать ее на очень простые задачи. У меня так много вариантов, что трудно найти catсвязанные с ними на странице руководства.


Хотите показать вкладки в Makefile?

Во man cat-первых, первый вариант -A.
Описание не полезно: -vET.
Но длинное имя вариант звучит так правильно: --show-all.

И cat -A Makefileделает то, что мне нужно.


А теперь иди и найди это less.


0

И «меньше», и «больше» будут работать точно так же, как «кошка», если выходные данные не являются терминалами (tty), что касается каналов и файлов, они оба вернутся к нумерации страниц.

Я думаю, можно с уверенностью сказать, что «cat» всегда присутствует в любой системе Unix-типа, которую вы когда-либо найдете. Наличие «меньше» и / или «больше» в любой системе менее предсказуемо.

Поэтому в сценариях, если вам нужна только операция без пагинации, «cat» обязательно будет присутствовать везде, где ваш сценарий используется в системе типа Unix.


1
Что ж, можно с уверенностью предположить, что moreэто будет доступно, поскольку это предусмотрено спецификацией Single Unix.
Кусалананда

К сожалению, хотя это может быть предписано так, но по моему опыту это не всегда присутствует. Стоит отметить, что существует ряд Unix-подобных систем, которые не претендуют на звание Unix. Я думаю, что можно быть достаточно уверенным в том, что будет присутствовать либо a, lessлибо a more, но я думаю, что нельзя доверять конкретному, или что это «истинная» реализация ... часто один псевдоним другого, иногда они минимальная облегченная версия.
user208007

-1

Пропуск кошки через grep полезен:

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

4
Не говоря уже о том, что grepв качестве аргумента используется имя файла, или вы можете использовать перенаправление. Труба дорогая.
Крис Даун

25
Поздравляем, вы выиграли награду «Бесполезное использование кошки»!
ThatGraemeGuy

4
@TimKennedy - «когда у тебя есть less» в названии вопроса ...
Крис Даун

5
Upvoted. Я делаю это регулярно. Если я хочу выполнить поиск файла несколько раз для разных условий поиска, это проще. grep хочет. grep [search term] [filename]Поэтому, если я использую историю терминалов, редактировать поисковый запрос будет труднее. По конвейеру grep поисковый термин является последним в строке и его легче редактировать.
Фальшивое имя

10
Вы можете по-прежнему иметь желаемый порядок без использования cat: < [filename] grep [search term]и < filename tail -n 1000 | grep pattern. Перенаправление может происходить практически в любом месте командной строки.
кулачок
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.