Чи є коли-небудь привід використовувати "cat", коли у вас "менше"?


59

Я використовував catдля перегляду файлів. Тоді я дізнався, що lessзазвичай краще, і це обов’язково, якщо файл довший кількох десятків рядків.

Моє запитання: Чи є колись причина використовувати catзамість цього less? Чи є якась ситуація, коли catкраще рішення?


17
lessі catвирішувати різні проблеми, і вони краще, ніж інші, у власній проблемній області
Девід Геффернан,

2
Я використовую лише catдля того, щоб передати його lessзгодом.
FUZxxl

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

Відповіді:


20

Я особисто віддаю перевагу viewстатичному контенту або tail -fдинамічному контенту.

Однак це не відповідає на ваше запитання. Є приказка "навіщо використовувати більше, якщо у тебе менше" ;-)

Але бувають випадки, коли я віддаю перевагу кішці менше: я зазвичай працюю з 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

Хоча обидві команди дозволяють переглядати вміст файлу, їх оригінальні цілі зовсім різні.

менше розширює можливості більше . Останній був створений для перегляду вмісту файлу по одному екрану за раз. менше додає такі функції, як рухи назад і краще управління пам’яттю (не потрібно читати весь файл, перш ніж зможете побачити перші рядки).

cat об'єднує файли та друкує результат на стандартному виході. Якщо ви надасте лише один файл, ви побачите його вміст. Він стає "потужним", коли ви надаєте кілька файлів. Хороший приклад - поєднання спліт і кота. Перша команда розділить великий файл на невеликі частини. Потім друга об'єднає невеликі частини в один файл.

Повернувшись до свого питання, кіт віддасть перевагу автономному сценарію, який вимагає, щоб файли читалися повністю (або об'єднувалися) без взаємодії. Щодо перегляду файлів, я думаю, це більше питання смаку.


4
lessзавжди дозволяє здійснювати пошук у файлі, що catне робить.
Бернхард

@ Бернхард: А як же робити греп на виході з котів?
користувач3527975

23

Зазвичай я використовую, catколи мені потрібно набрати команду на основі чогось у файлі. catЦе зручніше, оскільки ви можете бачити файл (якщо він невеликий), поки ви маєте доступ до запиту оболонки. Він також дозволяє прокладати труби.


3
Для одного файлу також можливе і часто бажане перенаправлення стандартного вводу.
AProgrammer

17
Чи є ситуація, коли кішка - краще рішення?

Коли ви маєте справу з більш ніж одним файлом і хочете з'єднати їх.

На чоловіковій сторінці:

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

15

Є люди, які жорстоко стверджують, що єдиною метою catє створення котів для отримання файлів. Для кожного іншого використання існує more(або less).

Але це не враховує один досить важливий факт: catце набрати один символ менше. Я використовую ці команди настільки часто, що на один символ менше немає мозку.

Ще одна причина - коли потрібно створити файл. Я часто копіюю та вставляю текст з Інтернету у такий файл (показано командний рядок):

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

Тобто я відкриваю файл filenameдля доступу до запису, вставляю вміст і закриваю потік натисканням Ctrl- D. Ні цього, lessні moreцього не може зробити, і це швидше, ніж відкрити редактор.


4
Якщо ви використовуєте zsh як оболонку, ви можете налаштувати його так, що $<filename(де $підказка) викликає $ PAGER з stdin, підключеним до filename. Це навіть менше символів для набору cat.
Kevin Cathcart

@Kevin Приємно знати, але я баш-користувач.
Конрад Рудольф

2
У Mac OS X я використовую pbpaste > filename, і я вважаю, що у X є щось подібне. Я все ще використовую catдля швидкого створення файлів, тільки не для вставки.
кабал

@cobbal Hehe, я ніколи про це не думав, хоча використовую 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 як редактор або навіть менший редактор, але не emacs або vim. Ви отримали б кота, але не менше. Ідея полягає в тому, щоб надати вам достатньо інструментів для ремонту вашої системи, не забираючи занадто багато ресурсів, оскільки ці ресурси можуть бути неправильно налаштовані або використані всі. тим менше команда щодо цих обставин зайва.


2

І lessпопередньо не встановлено у всіх дистрибутивах GNU / Linux. (напр., Gentoo) catє скрізь, певно.


2

В catзалишається на екрані. Все не lessзникає.

Уточнив / для Volker Siegel:

Вихід catзалишається на екрані. Все, що показує, lessвідключається після закриття.


1

Може виникнути проблема з ескалацією привілеїв, оскільки в межах "менше" ви можете натиснути "v" для редагування файлу або "!" щоб надіслати команду оболонки.

Можливо, ви хочете дозволити деяким користувачам переглядати файл, який може читати тільки суперпользователь, але не дозволяти цим користувачам редагувати файл або взагалі використовувати привілеї суперпользователя. Ви можете зробити це, відредагувавши "/ etc / sudoers", щоб дозволити їм використовувати "sudo / bin / cat / і т.д. / важливий файл". Ви не хочете дозволити 'sudo / usr / bin / less / etc / важливий файл', оскільки вони можуть використовувати 'v' для редагування файлу або використання '!' запустити оболонку з повними привілеями суперпользователя.

Зрозуміло, користувачі можуть використовувати 'sudo / bin / cat / і т.д. / важливий файл | менше "і все ж використовувати" менше ", без ризиків для безпеки.


1

Два різні. less- це нестандартний пейджер ( moreстандартний), який використовується для перегляду тексту, в той час catяк це стандартна утиліта, яка використовується для об'єднання будь-якого типу та кількості потоків даних в один.

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


0

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


1
Чому тільки використання лівої руки є перевагою? Я не користуюся мишкою на терміналі ...
Бернхард

0

З точки зору того, як показувати персонажів на екрані, lessможна робити те, що catвміє; І багато іншого.

Але є дуже вагомий привід використовувати кішку в деяких випадках:
lessце занадто складно, щоб кинути її на дуже прості проблеми. У мене так багато варіантів, що важко знайти catпов'язані з ними на сторінці man.


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

В man cat, перший варіант є -A.
Опис не корисно: -vET.
Але довге ім'я варіант звучить так правильно: --show-all.

І cat -A Makefileробить те, що мені потрібно.


А тепер переходьте до цього less.


0

І "менше", і "більше" працюватимуть точно так само, як "cat", якщо вихід не є терміналом (tty), що стосується труб і файлів, вони обидва повернуться без пагинації.

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

Отже, у сценаріях, якщо вам потрібна лише операція, що не стосується створення сторінки, «cat» обов'язково буде присутній, де б ваш сценарій не використовувався в системі типу Unix.


1
Що ж, можна припустити, що moreвони будуть доступні, бачачи, як це передбачено Єдиною специфікацією Unix.
Kusalananda

На жаль, хоча це може бути таким мандатом, але, на мій досвід, він не завжди присутній. Варто зазначити, що існує ряд систем, схожих на Unix, які не претендують на свій статус Unix. Я думаю, що можна бути досить впевненим у тому, що буде присутній lessабо moreзаповіт, але я думаю, що певному не можна довіряти, ні що це "справжня" реалізація ... часто одна людина відчужена для інших, іноді вони " знову мінімальна легка версія.
user208007

-1

Прокочування кота через греп корисно:

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

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

25
Вітаємо, ви виграли нагороду "Безкорисне використання котячих"!
ThatGraemeGuy

4
@TimKennedy - "коли у вас є less" - у назві питання ...
Chris Down

5
Отримано. Я роблю це регулярно. Якщо я хочу кілька разів зібрати файл для різних пошукових термінів, це простіше. grep хоче, grep [search term] [filename]тому більше редагувати пошуковий термін, якщо я використовую історію терміналу, більше болю. Передаючи на файл grep, пошуковий термін - це остання річ у рядку, і його легше редагувати.
Підроблене ім’я

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