Linux

3 — find tar gzip

Опубликовано

Гуглим по файлам на компьютере. Используем архивы и создаём резервную копию данных.


Поиск и архивация данных

Его величество поиск

Уметь производить навигацию по дереву каталогов это, конечно, здорово, но постоянно держать в голове где какой файл находится, слишком нерационально.
На помощь приходит функция find. Для начала несколько примеров.

вывести все пути домашнего каталога

find ~

вывести все пути к директориям

find ~ -type d

вывести пути к файлам

find ~ -type f

Результат работы программы find можно направлять через конвеер в другие программы. Например, чтобы посчитать количество файлов в домашнем каталоге, можно набрать

find ~ -type f | wc -l

На прошлом уроке мы сделали мягкую ссылку на прогрмму sublime и переместили её в один из каталогов $PATH. И для того чтобы найти этот файл в команду find можно передать значение параметра -name

find ~ -name "sublime"

Чтобы увидеть абсолютно все пути в которых встречается слово sublime

find ~ -name "*sublime*"

символ * в названии файла говорит о том, что вместо вместо * может быть любое количество любых символов. Посчитаем количество строк.

find ~ -name "*sublime*" | wc -l

Чтобы сузить поиск добавим дополнительные опции. Скажем, что мы ищем файлы меньше 1Мб (+1M — ищет файлы больше 1Мб).

find ~ -name "*sublime*" -size 1M | wc -l

Ещё сузим поиск, будем искать только файлы являющимися ссылками.

find ~ -name "*sublime*" -size 1M -type l | wc -l

На этот раз количеcтво директорий должно уменьшиться до 1. Уберите команду wc и убедитесь что мы нашли именно тот файл который создавали на прошлом уроке.

Приведённые выше примеры не являются призывами к действию, а скорее демонстрацией малой части возможностей на которые способен find. На самом деле, для того чтобы найти из какого места запускается программа, достаточно воспользоваться командой which.

which sublime

Ещё один пример для поиска всех картинок c расширением jpg в домашнем каталоге

find ~ -type f -name "*.jpg"

Поиск файлов с правами

посик файлов имеющие шаблон не 600 (-wx——) и каталогов имеющих шаблон отличный от 700 (rwx——)

find ~ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \)

Начинаем развлекаться

Создадим пару папочек.

mkdir -p hogwarts/room-{00{1..9},0{10..99},100}

-p paretns — не вызывет ошибки если родительский каталог уже существует. Переписывает все конфликты имён в родителе.

В каждой папке создадим пару файлов

touch hogwarts/room-{00{1..9},0{10..99},100}/file-{A..Z}

Найдём все файлы с именем ‘file-O’

find hogwarts -type f -name 'file-O'

Можно добавить | wc -l, чтобы создать конвеер и посчитать количество найденных файлов.

Теперь создадим свеженький файл для сравнения его даты создания с прочими файлами.

touch hogwarts/timestamp

Воспользуемся действием -exec command \; для изменения inode файлов с именем ‘file-O’.

find hogwarts -type f -name 'file-O' -exec touch {} \;

Теперь найдём все файлы, которые изменились с момента создания файла timestamp

find hogwrts -type f -newer hogwarts/timestamp

Архивы и сжатие

Одна из задач которое решает архивирование — оно позволяет обеспечить сохранность данных и гарантировать целостность файловой системы в случае нарушении или неработоспособности последней.

Для того чтобы сжать каталог hogwarts и всё его содержимое, созданное ранее. Для начала, необходимо из каталога сформировать единый файл в виде архива tar

tar -cvf hogwarts.tar hogwarts

И только после этого создавать файл с сжатыми данными.

gzip hogwarts.tar

Более быстрая запись того же действия возможна через конвеер.

tar -cf - hogwarts | gzip > hogwarts.tgz

интересным фактом в подобном синтаксисе является то, что в качестве имени архива мы указываем (тире) , что командой tar (да и многими другими) воспринимается как представление стандартного ввода/ввывода. То есть мы подаём сформированный архив на выход программы, где перехватываем его (|) и подаём на вход программы gzip.

Удалите папку hogwarts и начните разархивирование.
Сначала извлечём архив

gunzip hogwarts.tgz

Мы получим tar файл. Перед извлечением можно взглянуть на файлы, которые находятся в архиве.

tar -tvf hogwarts.tar

Из полученного tar файла распакуем все находящиеся в нём файлы.

tar -xf hogwarts.tar

Вуа-ля! Все наши папки вновь восстановлены. Чтобы указать директорию в которую необходимо выполнить разархивирование используйте опцию после которой пропишите путь по которому следует извлеч файлы.

Если вы действуете не от лица супер-пользователя (root), то все файлы архива будут принадлежать пользователю, выполневшему восстановление, а не первоначальному их владельцу.

check-point

  • Как извлечь один файл из архива?
  • Сожмите файл .wav и .bmp в один архив утилитой gzip и во второй утилитой bzip2. Сравните размер каждого архива.
  • Извлеките файлы из архивов в папки gzip и bzip2.

Найди десять отличий

rsync — ещё одна мощная утилита для создания резервных копий.

Создайте каталог, который будет хранить резервные копии файлов.

mkdir backup

И вызовите команду синхронизации директорий, указав каталог backup в качестве приёмника.

rsync -av hogwarts backup

-a обеспечивает рекурсивный обход и сохранение атрибутов файлов.

В папке backup появилась папка hogwarts вместе со всеми вложенными папками и файлами.

Вызовите ешё раз команду rsync

rsync -av hogwarts backup

Оратите внимание на то, что список файлов на этот раз отсутствует, потому что rsync не нашёл разницы между файлами в hogwarts и файлами в папке backup.
Давайте изменим атрибуты некоторых файлов.

touch hogwarts/room-010/file-{M..Z}

И заново вызовем функцию синхронизации

rsync -av hogwarts backup

Вы увидите, что прошла синхронизация только изменённых файлов.

Конечно, для простого копирования информации программу rsync не используют. Во всей красе она проявляет себя при работе через сеть. Если у вас есть доступ к удалённому каталогу backup на сервере remotesys, организовать процесс синхронизации можно следующим образом.

sudo rsync -av --delete --rsh=ssh/etc/home /usr/local remotesys:/backup

здесь мы добавили флаг —delete (этот параметр не нужен присоздании первой резервной копии), чтобы удалить файлы, которые могут присутствовать на устройстве с резервной копией, но отсутствовать на устройстве-источнике.
Параметру —rsh присваивается значение ssh для безопасного соединения и передачи файлов через шифрованный туннель SSH.

Mount

Понятие точки монтрования очень интересно и по своему поведению напоминает soft link. Монтирование относится в основном к подключению флешки или удалённой файловой системы сервера к файловой системе вашего компьютера.
Мы ещё коснёмся темы монтирования файловой системы, когда будем разбирать процессы запущенной системы.

Однако, первый вариант который мы рассмотрим, будет показан на примере монтирования папки. Представьте что папка hogwarts является удалённым сервером, к файлам которого мы хотим получать доступ из нашего компьютера. Прежде чем получить доступ к файлам находящимся в hogwarts, необходимо создать путь через который мы сможем подключаться к этой папке. Монтируемые системы принято подключать в папке /mnt/. Воидите в root режим и создайте соответствующую папку.

mkdir /mnt/platform9.75

Именно папка platform9.75 будет вести нас к файлам hogwarts.
Перейдите в mnt и выведите на экран список всех файлов папки platform9.75

cd /mnt/ ; ls -la platform9.75

как видите, она пуста.

Теперь примонтируем к ней путь к hogwarts.

mount --bind /home/koddom/hogwarts /mnt/platform9.75

bind позволяет примонтировать папку, а не устройство.

Ещё раз введите команду

ls -la platform9.75

и вы увидите знакомые вам файлы.

Стоит помнить, что предыдущее содержимое папки platform9.75 будет недоступно до тех пор, пока вы не размонтируете её обратно командой umount.

Check point

  • Откройте inode platform9.75. Объясните почему links 102
  • Откройте inode hogwarts, сравните оба inode
  • Выполните команду find по номеру inode

Чтобы увидеть список всех замонтированных устройств, введите команду mount.

Размонтируйте содержимое папки

umount /mnt/platform9.75

Найдите командой find файл с расширением .iso.
Создайте папку для монтирования образа диска.

mkdir /mnt/cd

И смонтируйте туда образ диска.

mount /home/koddom/blackcat621cd.iso /mnt/cd

теперь вы сможете просматривать содержимое образа диска.

для просмотра дерева монтированных устройств используйте команду findmnt

Задачи

  • использовать съемный диск USB в качестве пространства для резервного копирования.
  • провести синхронизацию каталогов указанных в переменной $PATH
  • создать псевдоним для проведения синхронизации

— Расширение

  • Заархивировать структуру файловой системы корневого каталога без вложенных директорий.
  • Написать скрипт для создания каталогов находящихся в файле catalogs.txt (файл создайте и заполните самостоятельно)

Вам также может пригодиться

  • find — команда для выполнения поиска на вашем компьютере
  • tar — команда для создания архива
  • gzip — команда для сжатия архива
  • grep — команда для фильтрации строк
  • rsync — команда для создания резервных копий и не только

Добавить комментарий

Ваш адрес email не будет опубликован.