Наши партнеры

UnixForum





Библиотека сайта 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:~$
Утилита head также может использоваться для вывода первых n строк файла.
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
Кроме того, утилита head может использоваться для вывода первых n байт файла.
paul@laika:~$ head -c4 /etc/passwd
rootpaul@laika:~$

Утилита tail

По аналогии с утилитой head, утилита 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$

Копирование файлов

При рассмотрении третьего примера вы можете обнаружить, что утилита cat также может использоваться для копирования файлов. Подробные пояснения относительно происходящих в этом случае процессов будут даны в главе, посвященной командной оболочке bash.
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