Автор (ы) оригинала | Кен Томпсон , Деннис Ричи |
---|---|
Разработчики) | AT&T Bell Laboratories |
изначальный выпуск | 3 ноября 1971 г . |
Операционная система | Unix , Unix-подобный , Plan 9 , Inferno |
Платформа | Кроссплатформенность |
Тип | Командование |
cat
- это стандартная утилита Unix, которая последовательно читает файлы и записывает их на стандартный вывод . Название происходит от его функции к кон кошачьих файлов Enate.
История [ править ]
cat
был частью ранних версий Unix , например, версии 1 , и заменил pr
собой утилиту PDP-7 и Multics для копирования одного файла на экран. [1]
cat
Встроенная в GNU coreutils версия была написана Торбьорном Гранлундом и Ричардом Столлманом . [2]
Использование [ править ]
Спецификация Single Unix определяет операцию cat
чтения файлов в последовательности, указанной в ее аргументах, и записи их содержимого в стандартный вывод в той же последовательности. Спецификация требует поддержки одного флага опции u для небуферизованного вывода, что означает, что каждый байт записывается после того, как он был прочитан. Некоторые операционные системы, например, использующие GNU Core Utilities , делают это по умолчанию и игнорируют этот флаг. [3]
Если одно из имен файлов ввода указано в виде одного дефиса ( - ), тогда выполняется cat
чтение из стандартного ввода в этой точке последовательности. Если файлы не указаны, выполняется cat
чтение только со стандартного ввода.
Command- синтаксис является:
кошка [параметры] [имена_файлов]
Параметры [ редактировать ]
Пример некоторых cat
вариантов: [4]
- -b(GNU:) --number-nonblank, количество непустых строк вывода
- -eподразумевает, -vно также отображает символы конца строки как$(Только GNU: -Eто же самое, но без намека -v)
- -n(GNU :) --number, пронумеровать все выходные строки
- -s(GNU :) --squeeze-blank, сжать несколько смежных пустых строк
- -tподразумевает -v, но также отображать вкладки как^ Я(GNU: -Tто же самое, но без намека -v)
- -uиспользовать небуферизованный ввод-вывод для стандартного вывода. POSIX не определяет поведение без этой опции.
- -v(GNU --show-nonprinting:), отображает непечатаемые символы, за исключением табуляции и символа конца строки
Сценарии использования [ править ]
cat
может использоваться для передачи файла программе, которая ожидает в своем входном потоке простой текст или двоичные данные. cat
не уничтожает нетекстовые байты при объединении и выводе. Таким образом, его двумя основными вариантами использования являются текстовые файлы и определенные типы двоичных файлов, совместимые с форматом.
Объединение текста ограничено текстовыми файлами, использующими ту же устаревшую кодировку, например, ASCII . cat
не предоставляет способ объединения текстовых файлов Unicode, имеющих метку порядка байтов, или файлов, использующих разные текстовые кодировки друг от друга.
Для многих наборов структурированных двоичных данных результирующий объединенный файл может быть недействительным; например, если файл имеет уникальный верхний или нижний колонтитул, результат будет ложно дублировать их. Однако для некоторых форматов мультимедийных цифровых контейнеров результирующий файл действителен и, таким образом, cat
обеспечивает эффективные средства добавления файлов. Видеопотоки могут быть важным примером файлов, которые cat
могут без проблем объединяться, например, форматы программного потока MPEG (MPEG-1 и MPEG-2) и DV (цифровое видео), которые по сути являются простыми потоками пакетов.
Примеры [ править ]
Command | Объяснение |
---|---|
cat file1.txt | Показать содержимое файла |
cat file1.txt file2.txt | Объедините два текстовых файла и отобразите результат в терминале |
cat file1.txt file2.txt > newcombinedfile.txt | Объедините два текстовых файла и запишите их в новый файл |
cat >newfile.txt | Создайте файл с именем newfile.txt. Введите желаемый ввод и нажмите CTRL + D, чтобы закончить. Текст будет в файле newfile.txt. |
cat -n file1.txt file2.txt > newnumberedfile.txt | Некоторые реализации cat с опцией -n также могут нумеровать строки |
cat file1.txt > file2.txt | Скопируйте содержимое file1.txt в file2.txt |
cat file1.txt >> file2.txt | Добавить содержимое file1.txt в file2.txt |
cat file1.txt file2.txt file3.txt | sort > test4 | Объедините файлы, отсортируйте полный набор строк и запишите результат во вновь созданный файл. |
cat file1.txt file2.txt | less | Запустите программу «меньше» с объединением файлов file1 и file2 в качестве входных данных. |
command | cat | Отмените специальное поведение "команды" (например, пейджинг) при прямой записи в TTY (см. UUOC ниже) |
Культура Unix [ править ]
Определение файла жаргона [ править ]
Версия файла жаргона 4.4.7 перечисляет это как определение cat
:
- Выводить весь файл на экран или в другой приемник вывода без паузы (синхр. Взрыв).
- Кроме того, чтобы сбрасывать большие объемы данных на неподготовленную цель или без намерения внимательно ее просматривать. Использование: считается глупым. Редко за пределами Unix сайтов. Смотрите также dd, BLT .
Среди поклонников Unix cat(1)он считается отличным примером дизайна пользовательского интерфейса , потому что он доставляет содержимое файла без такой многословности, как интервалы или заголовки между файлами, и потому что он не требует, чтобы файлы состояли из строк текста, но работает с любые данные.
Среди критиков Unix cat(1)он считается каноническим примером плохого дизайна пользовательского интерфейса из-за его ужасно неочевидного названия. Он гораздо чаще используется для вывода одного файла на стандартный вывод, чем для объединения двух или более файлов. Имя catдля бывшей операции столь же неинтуитивное , как, скажем, LISP «с cdr.
Бесполезное использование кота [ править ]
Бесполезное использование cat ( UUOC ) - это распространенный жаргон Unix для конструкций командной строки, которые предоставляют пользователю только функцию удобства. [5] В вычислительной технике слово «злоупотребление» [6] во втором смысле определения используется, чтобы принизить чрезмерное или ненужное использование языковой конструкции; таким образом, злоупотребление cat
иногда называют «жестоким обращением с кошкой». В cat
награде приводится пример распространенного злоупотребления:
кошка имя файла | команда arg1 arg2 argn
Это может быть переписано с использованием перенаправления из стандартного ввода , а не в любом из следующих форм (первый является более традиционным):
команда arg1 arg2 argn <имя файла <имя файла команда arg1 arg2 argn
Помимо других преимуществ, формы перенаправления ввода позволяют команде выполнять произвольный доступ к файлу, тогда как cat
примеры этого не делают. Это связано с тем, что форма перенаправления открывает файл как дескриптор файла stdin, к которому команда может получить полный доступ, в то время как cat
форма просто предоставляет данные в виде потока байтов.
Другой распространенный случай, когда в cat
этом нет необходимости, - это когда команда по умолчанию работает со стандартным вводом, но будет читать из файла, если имя файла указано в качестве аргумента. Так обстоит дело со многими распространенными командами; следующие примеры
кот "$ file" | grep "$ шаблон" кот "$ file" | меньше
вместо этого можно записать как
grep "$ шаблон" "$ файл" меньше "$ file"
Обычное интерактивное использование cat
для одного файла - это вывод содержимого файла на стандартный вывод. Однако, если вывод передается по конвейеру или перенаправляется, в cat
этом нет необходимости.
cat
Написано с UUOC еще может быть предпочтительным для удобства понимания, так как чтение конвейерного потока слева направо может быть проще концептуализация. [7] Кроме того, одно неправильное использование символа перенаправления ">" вместо "<" (часто рядом на клавиатуре) может навсегда удалить содержимое файла, другими словами, затирание , и один из способов избежать этого - использовать cat
с трубы. Сравнивать:
команда <в | команда2> из <в команде | команда2> из
с:
кот в | команда | команда2> из
tac [ править ]
tac - это команда Linux, которая позволяет просматривать файлы построчно, начиная с последней строки. (tac не меняет содержимое каждой отдельной строки, а только порядок, в котором строки представлены.) Он назван по аналогии с cat
.
Использование:
Использование: tac [ОПЦИЯ] ... [ФАЙЛ] ...Запишите каждый ФАЙЛ в стандартный вывод, сначала последняя строка.Без ФАЙЛА или когда ФАЙЛ равен -, читать стандартный ввод.Обязательные аргументы для длинных опций являются обязательными и для коротких опций. -b, --before добавить разделитель до, а не после -r, --regex интерпретировать разделитель как регулярное выражение -s, --separator = СТРОКА использовать СТРОКУ в качестве разделителя вместо новой строки --help отобразить эту справку и выйти --version вывести информацию о версии и выйти
См. Также [ править ]
- вставить
- split , команда, которая разбивает файл на части, к которым cat может затем присоединиться.
- zcat
- меньше
Ссылки [ править ]
- Перейти ↑ McIlroy, MD (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (технический отчет). CSTR. Bell Labs. 139.
- ^ https://linux.die.net/man/1/cat
- ^ GNU Coreutils. «Руководство по GNU Coreutils» , GNU , последнее посещение - 1 марта2017 г.
- ^ Страница руководства OpenBSD и версия cat для GNU Core Utiltites
- ^ comp.unix.shell. "Ранний пример награждения UUOC (1994)" , comp.unix.shell через группы Google , получено 1 марта 2017 г.
- ^ "Определение жестокого обращения Мерриам Вебстер" . Проверено 25 февраля 2021 .
- ^ Нгуен, Дэн. "Стэнфордская лаборатория вычислительной журналистики" . stanford.edu . Проверено 8 октября 2017 .
Внешние ссылки [ править ]
В Wikibook Guide to Unix есть страница по темам: Команды |
- : объединение и печать файлов - Справочник по командам и служебным программам, спецификация Single UNIX , выпуск 7 от Open Group
- Стиль UNIX, или cat -v считается вредным - статья Роба Пайка о правильном проектировании команд Unix на примере cat.
- cat (1) исходная страница руководства в Первой редакции Unix .
- : объединение и запись файлов - справочник GNU Coreutils
- : объединение и печать файлов - Руководство по основным командам OpenBSD
- - Руководство по основным командам FreeBSD
- - Руководство программиста Plan 9 , том 1
- : объединять и записывать файлы в обратном порядке - справочник GNU Coreutils