Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть II: Первые шаги в изучении интерфейса командной строки
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 12 декабря 2014 г.
Глава 8. Работа с содержимым файлов
В данной главе мы будем работать с содержимым текстовых файлов, используя утилиты head, tail, cat, tac, more, less и strings.
Также мы познакомимся с возможностями таких инструментов с интерфейсом командной строки, как cat.
Утилита head
head для вывода первых десяти строк файла.
paul@laika:~$ head /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh paul@laika:~$
paul@laika:~$ head -4 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh
paul@laika:~$ head -c4 /etc/passwd rootpaul@laika:~$
Утилита tail
tail может использоваться для вывода последних десяти строк файла.
paul@laika:~$ tail /etc/services vboxd 20012/udp binkp 24554/tcp # binkp fidonet protocol asp 27374/tcp # Address Search Protocol asp 27374/udp csync2 30865/tcp # cluster synchronization tool dircproxy 57000/tcp # Detachable IRC Proxy tfido 60177/tcp # fidonet EMSI over telnet fido 60179/tcp # fidonet EMSI over TCP # Local services paul@laika:~$
tail число, соответствующее количеству строк, которое вы хотите увидеть в выводе.
$ tail -3 count.txt шесть семь восемь
Утилита tail поддерживает и другие полезные параметры, причем некоторые из них мы будем использовать в рамках данного курса.
Утилита cat
cat является одним из наиболее универсальных инструментов операционной системы. Все, что она делает - это копирует данные из стандартного потока ввода в стандартный поток вывода. Данная утилита в комбинации с командной оболочкой позволяет реализовать мощные и разнообразные механизмы обработки данных. Воспользуемся примерами для иллюстрации этих механизмов. Первый пример является достаточно простым и вы можете использовать рассмотренную в нем команду в повседневной работе для вывода содержимого файла на экран. В том случае, если данные из файла не умещаются на экране, будет осуществлена прокрутка до конца файла.
paul@laika:~$ cat /etc/resolv.conf nameserver 194.7.1.4 paul@laika:~$
Объединение файлов
cat является сокращенной формой слова concatenate (объединить). Одним из наиболее простых сценариев использования данной утилиты является объединение файлов в рамках файла большего объема (или полного файла).
paul@laika:~$ echo один > part1 paul@laika:~$ echo два > part2 paul@laika:~$ echo три > part3 paul@laika:~$ cat part1 part2 part3 один два три paul@laika:~$
Создание файлов
cat для создания текстовых файлов. Введите команду cat > winter.txt, приведенную в примере ниже. После этого введите одну строку или несколько строк текста, завершая ввод каждой из строк нажатием клавиши Enter. После ввода последней строки текста нажмите и удерживайте клавишу Ctrl и одновременно с этим кратковременно нажмите клавишу d.
paul@laika:~/test$ cat > winter.txt Сегодня очень холодно! paul@laika:~/test$ cat winter.txt Сегодня очень холодно! paul@laika:~/test$
Комбинация клавиш Ctrl+d позволяет передать исполняющемуся процессу символ окончания файла (End of File - EOF), что приведет приведет к завершению исполнения процесса cat.
Специальный маркер окончания файла
cat с помощью параметра << таким образом, как показано в примере. Данная конструкция называется локальной директивой (here directive) и позволяет завершать работу процесса cat.
paul@laika:~/test$ cat > hot.txt <<stop > Сегодня жарко! > Да, это лето. > stop paul@laika:~/test$ cat hot.txt Сегодня жарко! Да, это лето. paul@laika:~/test$
Копирование файлов
paul@laika:~/test$ cat winter.txt Сегодня очень холодно! paul@laika:~/test$ cat winter.txt > cold.txt paul@laika:~/test$ cat cold.txt Сегодня очень холодно! paul@laika:~/test$
Утилита tac
tac (в отличие от утилиты cat) может быть проиллюстрировано с помощью единственного примера.
paul@laika:~/test$ cat count один два три четыре paul@laika:~/test$ tac count четыре три два один paul@laika:~/test$
Утилиты more и less
Утилита more может оказаться полезной в случае возникновения необходимости вывода содержимого файлов, которое не умещается на экране. Утилита more позволяет ознакомится с содержимым файла, разделенным на страницы. После открытия файла с использованием данной утилиты следует использовать клавишу "пробел" для перехода к следующей странице или клавишу q для выхода из режима просмотра содержимого файла. Некоторые пользователи предпочитают использовать утилиту less вместо утилиты more.
Утилита strings
strings вы можете осуществить вывод читаемых человеком ascii-строк, которые обнаруживаются в бинарных файлах. В приведенном ниже примере выясняется путь к бинарному файлу ls, после чего осуществляется вывод читаемых пользователем строк из этого бинарного файла (вывод сокращен).
paul@laika:~$ which ls /bin/ls paul@laika:~$ strings /bin/ls /lib/ld-linux.so.2 librt.so.1 __gmon_start__ _Jv_RegisterClasses clock_gettime libacl.so.1 ...
Практическое задание: работа с содержимым файлов
-
1. Осуществите вывод первых 12 строк файла
/etc/services. -
2. Осуществите вывод последней строки файла
/etc/passwd. -
3. Используйте утилиту
catдля создания файла с именемcount.txt, содержимое которого выглядит следующим образом:Один Два Три Четыре Пять
-
4. Используйте утилиту
cpдля создания резервной копии этого файла с именемcnt.txt. -
5. Используйте утилиту
catдля создания резервной копии этого файла с именемcatcnt.txt. -
6. Осуществите вывод содержимого файла
catcnt.txtтаким образом, чтобы строки из файла были выведены в обратном порядке. -
7. Используйте утилиту
moreдля вывода содержимого файла/var/log/messages. -
8. Осуществите вывод читаемых пользователем строк из бинарного файла
/usr/bin/passwd. -
9. Используйте утилиту
lsдля поиска файла наибольшего размера в директории/etc. -
10. Откройте два окна терминала (или вкладки) и убедитесь в том, что в каждом из окон открыта одна и та же директория. Введите команду
echo это первая строка > tailing.txtв первом окне терминала, после чего выполните командуtail -f tailing.txtво втором окне терминала. Теперь перейдите в первое окно терминала и введите командуecho это вторая строка >> tailing.txt(обратите внимание на два символа >>), после чего убедитесь в том, что средствами командыtail -fво втором окне терминала выводятся обе строки. Прекратите исполнение командыtail -fс помощью сочетания клавишCtrl+C. -
11. Используйте утилиту
catдля создания файла с именемtailing.txt, в котором должны содержаться данные из самого файлаtailing.txt, после которых в него должны быть добавлены данные из файла/etc/passwd. -
12. Используйте утилиту
catдля создания файла с именемtailing.txt, в котором должны содержаться данные из самого этого файлаtailing.txt, перед которыми в него должны быть добавлены данные из файла/etc/passwd.
Корректная процедура выполнения практического задания: работа с содержимым файлов
-
1. Осуществите вывод первых 12 строк файла
/etc/services. -
head -12 /etc/services
-
2. Осуществите вывод последней строки файла
/etc/passwd. -
tail -1 /etc/passwd
-
3. Используйте утилиту
catдля создания файла с именемcount.txt, содержимое которого выглядит следующим образом:Один Два Три Четыре Пять
-
cat > count.txt Один Два Три Четыре Пять (ввод должен завершаться с помощью комбинации клавиш Ctrl+d)
-
4. Используйте утилиту
cpдля создания резервной копии этого файла с именемcnt.txt. -
cp count.txt cnt.txt
-
5. Используйте утилиту
catдля создания резервной копии этого файла с именемcatcnt.txt. -
cat count.txt > catcnt.txt
-
6. Осуществите вывод содержимого файла
catcnt.txtтаким образом, чтобы строки из файла были выведены в обратном порядке. -
tac catcnt.txt
-
7. Используйте утилиту
moreдля вывода содержимого файла/var/log/messages. -
more /var/log/messages
-
8. Осуществите вывод читаемых пользователем строк из бинарного файла
/usr/bin/passwd. -
strings /usr/bin/passwd
-
9. Используйте утилиту
lsдля поиска файла наибольшего размера в директории/etc. -
ls -lrS /etc
-
10. Откройте два окна терминала (или вкладки) и убедитесь в том, что в каждом из окон открыта одна и та же директория. Введите команду
echo это первая строка > tailing.txtв первом окне терминала, после чего выполните командуtail -f tailing.txtво втором окне терминала. Теперь перейдите в первое окно терминала и введите командуecho это вторая строка >> tailing.txt(обратите внимание на два символа >>), после чего убедитесь в том, что средствами командыtail -fво втором окне терминала выводятся обе строки. Прекратите исполнение командыtail -fс помощью сочетания клавишCtrl+C. -
11. Используйте утилиту
catдля создания файла с именемtailing.txt, в котором должны содержаться данные из самого файлаtailing.txt, после которых в него должны быть добавлены данные из файла/etc/passwd. -
cat /etc/passwd >> tailing.txt
-
12. Используйте утилиту
catдля создания файла с именемtailing.txt, в котором должны содержаться данные из самого этого файлаtailing.txt, перед которыми в него должны быть добавлены данные из файла/etc/passwd. -
mv tailing.txt tmp.txt ; cat /etc/passwd tmp.txt > tailing.txt
| Предыдущий раздел: | Оглавление | Следующий раздел: |
| Глава 7. Работа с файлами | Глава 9. Дерево директорий Linux |
