кот (Unix)
Оригинальный автор(ы) | Кен Томпсон , Деннис Ричи |
---|---|
Разработчик(и) | AT&T Bell Laboratories |
Первоначальный выпуск | 3 ноября 1971 г |
Операционная система | Unix , Unix-подобные , Plan 9 , Inferno , ReactOS |
Платформа | Кросс-платформенный |
Тип | Команда |
Лицензия | основные утилиты : GPLv3+ РеактОС: GPLv2+ |
cat
— стандартная утилита Unix , которая последовательно читает файлы и записывает их в стандартный вывод . Название происходит от его функции объединять файлы (от латинского catenare — «связывать»). [1] [2] Он был портирован на ряд операционных систем.
Другая основная цель cat
Помимо конкатенации, это печать файла, позволяющая пользователю компьютера просматривать содержимое файла. Печать в файлы и терминал являются наиболее распространенными вариантами использования cat
. [3]
История
[ редактировать ]cat
был частью ранних версий Unix , например, версии 1 , и заменил pr
, утилита PDP-7 и Multics для копирования одного файла на экран. [4] Его написали Кен Томпсон и Деннис Ритчи .Версия cat
пакет GNU coreutils был написан Торбьорном Гранлундом и Ричардом Столлманом . [5] Версия ReactOS была написана Дэвидом Уэлчем, Семеном Новиковым и Hermès Bélusca. [6]
Со временем альтернативные утилиты, такие как tac
и bat
также стал доступен, принеся с собой различные новые функции. [7] [8]
Использование
[ редактировать ]The cat
Утилита служит двойной цели: объединению и печати. пользователя С одним аргументом он часто используется для печати файла на эмуляторе терминала (или исторически на компьютерном терминале или телетайпе ). Имея более одного аргумента, он объединяет несколько файлов. Объединенный результат по умолчанию также выводится на терминал, но часто пользователи перенаправляют результат в другой файл. [9] Следовательно, печать одного файла на терминал является особым вариантом использования этой программы объединения. Тем не менее, это его наиболее распространенное использование. [3]
Единая спецификация Unix определяет работу cat
читать файлы в последовательности, указанной в его аргументах, записывая их содержимое в стандартный вывод в той же последовательности. Спецификация требует поддержки одного флага опции u для небуферизованного вывода, что означает, что каждый байт записывается после того, как он был прочитан. Некоторые операционные системы, например те, которые используют GNU Core Utilities , делают это по умолчанию и игнорируют этот флаг. [10]
Если одно из имен входных файлов указано в виде одного дефиса ( - ), то cat
читается со стандартного ввода в этой точке последовательности. Если файлы не указаны, cat
читает только со стандартного ввода.
команды Синтаксис :
cat [options] [file_names]
Параметры
[ редактировать ]Пример некоторых cat
параметры: [11]
- -b (ГНУ: --number-nonblank), количество непустых выходных строк
- -e подразумевает -v но также отображать символы конца строки как $ (только GNU: -E то же самое, но без намека -v)
- -n (ГНУ: --number), пронумеровать все выходные строки
- -s (ГНУ: --squeeze-blank), сжать несколько соседних пустых строк
- -t подразумевает -v, но также отображать вкладки как ^Я (ГНУ: -T то же самое, но без намека -v)
- -u используйте небуферизованный ввод-вывод для стандартного вывода. POSIX не определяет поведение без этой опции.
- -v (ГНУ: --show-nonprinting), отображает непечатаемые символы, за исключением табуляции и символа конца строки.
Варианты использования
[ редактировать ]cat
может использоваться для передачи файла в программу, которая ожидает в своем входном потоке обычный текст или двоичные данные. cat
не уничтожает нетекстовые байты при объединении и выводе. Таким образом, двумя основными вариантами его использования являются текстовые файлы и определенные типы двоичных файлов, совместимых по формату.
Объединение текста ограничено текстовыми файлами, использующими одну и ту же устаревшую кодировку, например ASCII . cat
не предоставляет возможности объединения текстовых файлов Юникода, имеющих метку порядка байтов , или файлов, использующих различные текстовые кодировки друг от друга.
Для многих наборов структурированных двоичных данных полученный объединенный файл может быть недействительным; например, если файл имеет уникальный верхний или нижний колонтитул, результат будет ложно дублировать их. Однако для некоторых форматов цифровых мультимедийных контейнеров полученный файл действителен, и поэтому 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. |
cat file1.txt | grep example | Выделите экземпляры слова «пример» в файле file1.txt. |
command | cat | Отменить специальное поведение «команды» (например, пейджинг), когда она записывает непосредственно в TTY (см. UUOC ниже). |
Unix-культура
[ редактировать ]Определение файла жаргона
[ редактировать ]В файле жаргона версии 4.4.7 это указано как определение cat
:
- Вывести весь файл на экран или другой выходной приемник без паузы (син. взрыв).
- В более широком смысле, для сброса больших объемов данных в неподготовленную цель или без намерения тщательно ее просматривать. Использование: считается глупым. Редко за пределами Unix-сайтов. См. также dd, БЛТ .
Среди поклонников Unix cat(1) считается отличным примером дизайна пользовательского интерфейса , поскольку он доставляет содержимое файла без такой многословности, как интервалы или заголовки между файлами, и поскольку он не требует, чтобы файлы состояли из строк текста, но работает с любыми типами данных. .
Среди критиков Unix cat(1) считается каноническим примером плохого дизайна пользовательского интерфейса из-за своего крайне неочевидного названия. Он гораздо чаще используется для вывода одного файла на стандартный вывод, чем для объединения двух или более файлов. Имя cat поскольку первая операция так же неинтуитивна, как, скажем, в LISP . cdr. [ нужна ссылка ]
Бесполезное использование кота
[ редактировать ]Бесполезное использование cat ( UUOC ) — это распространенный жаргон Unix для конструкций командной строки, которые предоставляют только функцию, удобную для пользователя. [12] В вычислительной технике слово «злоупотребление» [13] во втором смысле определения используется для пренебрежения чрезмерным или ненужным использованием языковой конструкции; таким образом, злоупотребление кошку иногда называют «жестоким обращением с кошками». Пример общего жестокое обращение с кошками указано в награде:
cat filename | command arg1 arg2 argn
Вместо этого это можно переписать, используя перенаправление стандартного ввода , в любой из следующих форм (первая более традиционна):
command arg1 arg2 argn < filename
<filename command arg1 arg2 argn
Помимо других преимуществ, формы перенаправления ввода позволяют команде выполнять произвольный доступ к файлу, тогда как формы перенаправления ввода позволяют команде выполнять произвольный доступ к файлу. примеры кошек нет. Это связано с тем, что форма перенаправления открывает файл как файловый дескриптор стандартного ввода, к которому команда имеет полный доступ, в то время как форма cat просто предоставляет данные в виде потока байтов.
Еще один распространенный случай, когда cat не нужен, когда команда по умолчанию работает со стандартным вводом, но будет читать из файла, если имя файла указано в качестве аргумента. Так обстоит дело со многими распространенными командами; следующие примеры
cat file | grep pattern
cat file | less
вместо этого можно записать как
grep pattern file
less file
Обычное интерактивное использование cat для одного файла заключается в выводе содержимого файла на стандартный вывод. Однако если вывод передается по конвейеру или перенаправляется, кот не нужен.
А cat, написанный с помощью UUOC, по-прежнему может быть предпочтительнее из соображений читаемости, поскольку чтение конвейерного потока слева направо может быть легче концептуализировать. [14] Кроме того, одно неправильное использование символа перенаправления > вместо < (часто расположенного рядом на клавиатуре) может навсегда удалить содержимое файла, другими словами, затереть его , и один из способов избежать этого - использовать кот с трубами. Сравнивать:
command < in | command2 > out
<in command | command2 > out
с:
cat in | command | command2 > out
См. также
[ редактировать ]- вставить
- Split — команда, которая разбивает файл на части, к которым cat затем может присоединиться.
- zcat
- меньше
- netcat — утилита компьютерной сети
Ссылки
[ редактировать ]- ^ «Что в Unix означают некоторые непонятно названные команды?» . Университетские службы информационных технологий . Университет Индианы.
- ^ Керниган, Брайан В.; Пайк, Роб (1984). Среда программирования UNIX . Аддисон-Уэсли. п. 15.
- ^ Jump up to: а б Пайк, Роб ; Керниган, Брайан В. Проектирование программ в среде UNIX (PDF) (Отчет). п. 3.
- ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
- ^ Linux пользователя по командам Руководство –
- ^ «reactos/cat.c в мастере · реакции/реактос · GitHub» . github.com . Проверено 28 августа 2021 г.
- ^ «tac(1) — страница руководства Linux» . man7.org .
- ^ "акула/летучая мышь" . 2 декабря 2021 г. — через GitHub.
- ^ Руководство для программиста UNIX (PDF) . bitsavers.org (отчет). 3 ноября 1971 г. с. 32. Архивировано из оригинала (PDF) 17 июня 2006 г.
- ^ GNU Coreutils. «Руководство по GNU Coreutils» , GNU , дата обращения 1 марта 2017 г.
- ^ Страница руководства OpenBSD и версия cat GNU Core Utilites.
- ^ Брайан Блэкмор (5 декабря 1994 г.). «Перл или Сед?» . Группа новостей : comp.unix.shell . Проверено 12 февраля 2024 г.
- ^ «Определение злоупотребления Мерриам Вебстер» . Проверено 25 февраля 2021 г.
- ^ Нгуен, Дэн. «Стэнфордская лаборатория компьютерной журналистики» . Стэнфорд.edu . Проверено 8 октября 2017 г.
Внешние ссылки
[ редактировать ]- Единая спецификация UNIX , версия 4 от The Open Group : объединить и распечатать файлы — Справочник по командной строке и утилитам,
- Стиль UNIX, или cat -v считается вредным — статья Роба Пайка о правильном проектировании команд Unix на примере cat.
- cat(1) исходная страница руководства в первом издании Unix .
- GNU Coreutils справочник : объединять и записывать файлы –
- OpenBSD по основным командам Руководство : объединить и распечатать файлы –
- FreeBSD по основным командам Руководство –
- Plan 9 , том 1 Руководство программиста –
- GNU Coreutils справочник : объединять и записывать файлы в обратном порядке –