Linux для пользователя
Шрифт:
Существует также команда diff3, которая позволяет сравнить сразу 3 файла.
Но все же наиболее часто используется традиционная для UNIX-систем команда diff. Эта ее востребованность объясняется тем, что создаваемый ею отчет о различиях двух файлов может быть использован командой patch. Чаще всего эти возможности используются при распространении обновлений программного обеспечения. Предположим, что некоторое программное приложение было разослано пользователям в виде файла program.c, содержащего исходный код программы на языке Си. После этого разработчик внес в программу некоторые исправления и сохранил текст в виде файла program.c.new. Требуется довести исправленный текст программы до пользователей. Очевидно, что пользователям
Естественно, объем файла program.c.diff существенно меньше объема файла program.c.new, так что можно было бы получить существенную экономию на передаче файлов, если отправлять пользователям только файл program.c.diff (ведь объемы современных программных приложений составляют десятки мегабайт). Однако пользователи должны иметь возможность внести эти исправления в имеющуюся у них версию программы. Эту задачу позволяет решить команда patch. Имея файлы program.c и program.c.diff, пользователь может дать команду
в результате выполнения которой он получит файл program.c.new.
4.7. Команды архивирования файлов
При работе с Linux вы, может быть, еще не скоро встретитесь с необходимостью работать с большинством консольных команд, поскольку имеются такие оболочки, как Midnight Commander или графические оболочки типа KDE. Но с командами архивирования (точнее, разархивирования) вам работать придется обязательно, хотя бы потому, что вы будете часто встречать архивированные файлы в Интернете.
Основным средством архивирования в UNIX (а, следовательно, и в Linux) является комплекс из двух программ - tar и gzip. Хотя никто не запрещает пользоваться arj, pkzip, lha, rar и т. д.
– версии этих программ для Linux общедоступны. Просто уж исторически сложилось, что пользователи Unix чаще применяют именно tar и gzip, и именно в таком формате распространяется большая часть программного обеспечения для Unix. Поэтому овладеть работой с tar и gzip - дело чести любого пользователя Linux.
4.7.1. Программа tar
У читателя, привыкшего к архиваторам типа arj, которые собирают файлы в единый архив и сразу "сжимают" их, может возникнуть вопрос "А зачем использовать две программы?” Все дело в том, что tar расшифровывается как Tape ARchiver, он не сжимает данные, а лишь объединяет их в единый файл с последовательным доступом для последующей записи на ленту. По умолчанию этот архивный файл создается на ленточном накопителе, точнее на устройстве /dev/rmt0. Если вы хотите создать архивный файл на диске, то необходимо использовать команду tar с опцией f, после которой указывается имя архивного файла.
У программы tar имеется 8 опций, отличающихся от остальных тем, что при вызове программы должна обязательно задаваться одна из этих опций. Эти опции определяют основные функции программы.
Таблица 4.5. Основные опции программы tar
Опция | Значение |
---|---|
– A, --catenate, --concatenate | Добавляет файлы в существующий архив |
– c, --create | Создает новый архив |
– d, --diff, --compare | Найти различия между архивом и файловой системой |
– -delete | Удалить из архива (не может использоваться с магнитной лентой!) |
– r, --append | Дописывает
|
– t, --list | Выводит список файлов архива |
– u, --update | Добавляет только файлы, которые новее, чем имеющаяся в архиве копия |
– x, --extract, --get | Извлечь файлы из архива |
Если вы работаете с файлами архивов на дисках, а не с ленточным устройством, то, очевидно, обязательной будет и опция f. Другие опции не являются обязательными, они служат только для конкретизации задания программе. Например, опция v заставляет программу выводить список обрабатываемых файлов.
Однобуквенные опции программы tar могут перечисляться друг за другом (вы увидите это в приводимых ниже примерах).
Я не буду давать здесь описание всех опций команды tar, просто приведу несколько командных строк для выполнения самых необходимых действий с архивами.
Чтобы создать один tar-архив из нескольких файлов, используется команда:
где опция -c сообщает программе, что необходимо создать (create) архив, а опция f говорит о том, что архив должен создаваться в виде файла (имя которого должно следовать сразу за этой опцией).
В именах файлов, которые сохраняются в архиве, можно использовать шаблоны имен файлов, в том числе просто символы-заместители* и?. Благодаря этому можно очень короткой командой отправить в архив сразу много файлов. Например, для того, чтобы создать архив, содержащий все файлы одного из подкаталогов (пусть это будет sub_dir) текущего каталога, достаточно дать команду
или даже просто
По этой команде в архиве будут сохранены не только файлы, расположенные непосредственно в подкаталоге sub_dir, но и рекурсивно все файлы из подкаталогов каталога sub_dir. При этом в архиве сохраняется вся структура подкаталогов каталога sub_dir.
Заметим, что если в только что приведенном примере вместо * поставить *.*, то будут сохранены только те файлы, которые расположены непосредственно в подкаталоге sub_dir, а подкаталоги каталога sub_dir архивированы не будут [14] . Если в том же примере не указать имя подкаталога, то будут архивироваться все файлы (и подкаталоги) текущего каталога. Но если вы дадите команду следующего вида
14
(Замечание прислано М.Зотовым) Неверно. Будут архивированы те и только те файлы, которые удовлетворяют шаблону *.*. Например, файл sub_dir/something архивирован не будет, а подкаталог sub_dir/sub_dir.2/ - будет!
то в архиве будут сохранены не только все файлы (и подкаталоги) текущего каталога, но и файлы из родительского каталога, а хотели ли вы этого?
Теперь вы знаете как создать архив, а для того, чтобы распаковать (извлечь) файлы из архива, нужно дать команду:
Получить список файлов архива можно командой:
Программа tar является удобным средством для создания резервных копий файлов. Конечно, существуют специальные утилиты резервного архивирования, но даже если вы о них еще не знаете, то по меньшей мере, вы можете сделать следующее: