cat в Linux – всё что нужно знать
90% книг написанных про Linux начинают знакомство с командной строкой с
cat
. По статистике (на которую все ссылаются, но которую ни кто не видел),
cat
является самой часто употребляемой командой в Linux. Так что же делает это чудо-команда?
cat
образовано от английского concatenate (объединять), т.е. логично предположить команда предназначена для объединения чего то с чем, например нескольких файлов. Но чаще всего
cat
используют для создания файлов и для вывода содержимого файла непосредственно в консоль. Давайте разберем все возможности этой команды подробнее.
Создание нового файла с помощью cat
1 2 3 4 | [hc@host~]# cat > new_file это новый файл |
С помощью
cat
и символа
>
мы перенаправили стандартный вывод в файл new_file. Для завершения заполнения файла данными перейдите на новую строку и нажмите
Ctrl+D
.
Просмотр файлов с помощью cat в Linux
Для просмотра файла просто наберите:
#cat <имя_файла>
1 2 3 4 | [hc@host~]# cat new_file это новый файл |
Можно вывести с номерами строк:
1 2 3 4 | [hc@host~]# cat -n new_file 1 это 2 новый 3 файл |
Можно просмотреть содержимое нескольких файлов.
1 2 3 4 5 | [hc@host~]# cat -n new_file old_file 1 это 2 новый 3 файл 4 Этостарыйфайл |
Обратите внимание, что содержимое выводится единым массивом данных, что хорошо видно по тому, что содержание второго файла вывелось строкой под номером 4 – нумерация не началась заново при выводе этого файла. Т.е.
cat
, как это и заложено в ее названии, склеила файлы.
Просмотр больших файлов с помощью cat
Типичная рекомендация – если файл не влезает в экран консоли использовать
cat
в сочетании с
less
или
more
:
1 2 | [hc@host~]# cat -n long_file | less [hc@host~]# cat -n long_file | more |
Так вот, что я скажу – если вы уверены, что файл большой просто сразу используйте
more
, а лучше
less
.
1 2 | [hc@host~]# more long_file [hc@host~]# less long_file |
Их для этого и делали, а у
cat
свои задачи.
Копирование, объединение и дополнение файлов с помощью cat в Linux
Давайте создадим несколько файлов:
1 2 3 4 5 6 | [root@wbtu~]# cat > file1 line1 line3 [hc@host~]# cat > file2 line2 line4 |
Нумерацию я специально сделал не по порядку, это нам еще понадобится.
Объединим файлы и посмотрим на результат:
1 2 3 4 5 6 | [hc@host~]# cat file1 file2 > file3 [hc@host~]# cat file3 line1 line3 line2 line4 |
Как видите file3 содержит информацию из обоих файлов.
Теперь скопируем содержимое file3 в другой файл:
1 2 3 4 5 6 | [hc@host~]# cat file3 > copy_of_file3 [hc@host~]# cat copy_of_file3 line1 line3 line2 line4 |
А теперь допишем в file3 еще несколько строк:
1 2 3 4 5 6 7 8 9 10 | [hc@host~]# cat >> file3 line6 line5 [hc@host~]# cat file3 line1 line3 line2 line4 line6 line5 |
Точно так же можно дописать один файл в конец другого:
1 | [hc@host~]# cat new_file >> file3 |
Несколько полезных примеров
Сортировка
Возьмем наш file3 с неправильным порядком строк и приведем в порядок:
1 | [hc@host~]# cat file3 | sort > sort_file |
или так:
1 | [hc@host~]# cat file1 file2 | sort > sort_file |
У
cat
есть антипод
tac
. Вся разница, что вывод происходит в обратном порядке:
1 2 3 4 5 | [hc@host~]# tac sort_file line4 line3 line2 line1 |
Отображение непечатаемых символов
Если что-то работает не так, как планировалось или совсем не работает – бывает полезно поглядеть не затесался ли какой вредный символ.
Например, отредактировали конфиг через ftp под Win редактором (ни когда так не делайте), а он расставил, как в Win принято, в конце строк CRLF. И ни чего не работает.
1 2 | [hc@host~]# cat -v test_file hi there^M |
^M
– вот он виновник.
Пропуск пустых строк
Еще один полезный ключ
-s
. При его использовании будут пропускаться все дублированные пустые строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [hc@host~]# cat > blank_lines q a z [hc@host~]# cat -s blank_lines q a z |
На этом пожалуй достаточно о
cat
в Linux. Остались вопросы – пишите в комментах.