Курс LFCS — часть 3: архивирование, поиск и настройка атрибутов файлов

Курс LFCS — часть 3: архивирование, поиск и настройка атрибутов файлов

Рубрики:

LFCS

Метки:

, , , , , , , , ,

Linux Foundation — некоммерческая организация, которая занимается подготовкой и сертификацией специалистов LFCS (Linux Foundation Certified Sysadmin). В рамках 3 из 20 уроков по подготовке к экзаменам Linux Foundation Вы узнаете о том, как архивировать файлы и каталоги в Linux. А также — как искать файлы, настраивать их атрибуты и разрешения.

Полный список уроков для прохождения индустриальной сертификации: Курс LFCS (Linux Foundation Certified Sysadmin): программа подготовки к экзаменам.

 Содержание:

  1. Создаем каталог для выполнения практических примеров
  2. Архивируем и сжимаем файлы с помощью tar, gzip, bzip2 и xz
    1. Что такое tar
    2. Синтаксис и опции утилиты tar
    3. Что такое gzip, bzip2 и xz
    4. Архивируем и сжимаем файлы с помощью утилит tar, gzip, bzip2 и xz
      1. Копируем файлы, на которых будем отрабатывать архивирование и сжатие
      2. Переименовываем файлы перед их архивированием и сжатием
      3. Создаем архивы tar, сжатые с помощью утилит gzip, bzip2 и xz
    5. Обновляем / добавляем файлы в архиве
      1. Выполняем декомпрессию tar-файла с помощью утилиты gzip
      2. Вносим изменения в файл file1 с помощью текстового редактора vim
      3. Заменяем файл в архиве перед повторным сжатием
      4. Сжимаем обратно измененный tar-файл с помощью утилиты gzip
      5. Проверяем дату и время изменения файлов в tar-архиве
  3. Выполняем резервное копирование с помощью утилиты tar
    1. Исключаем типы файлов из архивов tar при резервном копировании
      1. Создаем скрипт, исключающий указанные типы файлов при создании резервных копий
      2. Разрешаем выполнение скрипта оболочки Linux
      3. Проверяем работу скрипта для создания резервных копий
      4. Пробуем обмануть скрипт, заменив расширение *.mpeg на *.txt
    2. Восстанавливаем резервные копии с помощью утилиты tar
      1. Удаляем файл, который потом восстановим из резервной копии
      2. Восстанавливаем файлы из резервной копии
  4. Используем поиск файлов с помощью утилиты find
    1. Ищем файлы рекурсивно в зависимости от размера с помощью утилиты find
    2. Ищем и удаляем файлы, соответствующие заданным критериям
    3. Ищем файлы по времени изменения / обращения к ним
  5. Используем команду chmod для изменения прав доступа
    1. Изучаем основные атрибуты файла и разрешения в выводе команды ls
    2. Как работает команда chmod
      1. Числовой формат chmod
      2. Символьный формат chmod
    3. Примеры использования команды chmod
      1. Разрешаем чтение и запись файла только его владельцу
      2. Запрещаем выполнение сценария оболочки для всех пользователей
  6. Используем команду chown
    1. Заменяем владельца файла в Linux с помощью команды chown
    2. Заменяем владельца файла и группу пользователей
    3. Заменяем только владельца файла или только группу пользователей в Linux
  7. Выводы

Создаем каталог для выполнения практических примеров

Для начала традиционно создадим новый рабочий каталог для практических занятий в рамках 3 урока из 20 по подготовке к сертификации LFCS. Вводим в командную строку команду mkdir LFCS/Lab3:

 

В результате новый каталог Lab3 создан. Чтобы перейти в него — вводим в командную строку команду cd LFCS/Lab3:

 

Курс LFCS — часть 3: архивирование, поиск и настройка атрибутов файлов

Теперь Вы готовы и можете переходить непосредственно к материалам урока.

Архивируем и сжимаем файлы с помощью tar, gzip, bzip2 и xz

Архивирование и сжатие файлов — это одни из важнейших навыков работы с Linux, освоить которые обязан каждый начинающий системный администратор. Более того, они с высокой долей вероятности пригодятся Вам и в других направлениях сектора информационных технологий. Например, при организации резервного копирования данных или при передаче файлов и каталогов по сети.

Как правило, архиваторы для операционной системы Microsoft Windows одновременно выполняют сжатие файла по одному из популярных алгоритмов. Однако в ОС семейства GNU / Linux чаще всего для архивирования и для сжатия файлов и каталогов используются разные утилиты. Например, самым распространенным инструментом архивирования данных является tar.

Что такое tar

Утилита tar (от англ. tape archive) — это приложение для UNIX-подобных операционных систем, предназначенное для создания архивов с файлами и каталогами. Кроме того, tar — это формат файлов архивов, получающийся в результате работы утилиты. Программа не содержит встроенных функций сжатия данных, потому что, как и все ПО в UNIX, решает только одну конкретную задачу. Более того, она делает это максимально качественно и удобно.

Изначально утилита предназначалась для записи архива на ленточный носитель. Однако сегодня с ее помощью можно записать данные на любой носитель. Файл с архивом при этом будет иметь расширение *.tar.

Синтаксис и опции утилиты tar

Результатом работы утилиты tar является архив, который называют tar-файлом или tarball. В случае, если необходимо сжатие — программа обращается к внешним инструментам (gzip, bzip2 или xz). Команда tar имеет следующий синтаксис:

 

При этом добиться желаемого результата Вам помогут опции команды tar:

Полный вариант опции Сокращение Описание опции
--create c Создаем tar-архив
--concatenate A Добавляем файлы tar в архив
--append r Добавляем файлы в конец архива
--update u Добавляем более новые версии файлов в архив вместо старых
--diff либо --compare d Находим отличия между содержимым архива и файлами в каталоге
--file archivename f Архивируем файл в архив archivename
--list t Выводим содержимое tar-архива (tarball) в виде списка
--extract or --get x Извлекаем файлы из архива

 

Также при работе с командой tar Вам будут полезны следующие дополнительные модификаторы:

Полный вариант опции Сокращение Описание опции
--directory dir C Меняем каталог перед выполнением операции
--same-permissions p Сохраняем исходные разрешения файлов и каталогов
--verbose v Выводим все файлы, считанные или извлеченные (в отличие от опции -list — отображаются размеры файлов, права собственности и отметки времени)
--verify W Проверяем архив после его записи
--exclude filename отсутствует Исключаем файл filename из архива
--exclude=pattern X Исключаем файлы, указанные как PATTERN
--gzip либо --gunzip z Используем инструмент gzip для сжатия / декомпрессии архива
--bzip2 j Используем инструмент bzip2 для сжатия / декомпрессии архива
--xz J Используем инструмент xz для сжатия / декомпрессии архива

Что такое gzip, bzip2 и xz

Во время работы с Linux Вам нужно будет не только архивировать данные, но и сжимать их для экономии дискового пространства или трафика. Однако за счет чего именно удается уменьшить объем файла при его сжатии? В данном случае — за счет удаления повторяющихся блоков данных. То есть, алгоритм сохраняет по одному экземпляру каждого такого блока и отметку о том, где именно в файле он должен находиться.

Сжать можно далеко не все виды данных. Например, исходный код программы, в котором регулярно повторяются одни и те же команды — хорошо поддается уплотнению. Тогда как изображение или аудиофайл обычно и так максимально сжаты с использованием собственных алгоритмов (как правило — с потерями, за счет удаления некоторых деталей).

Чаще всего в связке с утилитой tar используются такие инструменты компрессии / декомпрессии с открытым исходным кодом:

  • gzip — это GNU zip, утилита UNIX-подобных ОС с использованием популярного алгоритма Deflate;
  • bzip2 — это более новая чем gzip программа командной строки, работающая на основе алгоритма Барроуза — Уилера;
  • xz — это утилита в GNU / Linux, работа которой основана на широко известном алгоритме LZMA2 (который также используется архиватором 7-zip).

Архивы, сжатые с помощью этих инструментов, будут иметь расширения *.tar.gz, *.tar.bz2 и *.tar.xz соответственно.

Стоит отметить, что gzip обеспечивает меньшую степень сжатия данных, чем bzip2. Тогда как bzip2 уступает по этому параметру утилите xz. С другой стороны — более высокая степень сжатия означает большие затраты вычислительных мощностей и времени на выполнение компрессии / декомпрессии файла. Потому инструмент gzip все еще не теряет своей актуальности.

Архивируем и сжимаем файлы с помощью утилит tar, gzip, bzip2 и xz

Теперь давайте перейдем непосредственно к использованию утилит tar, gzip, bzip2 и xz.

Копируем файлы, на которых будем отрабатывать архивирование и сжатие

Прежде всего, Вам нужно выбрать данные, на примере которых можно будет отработать создание и сжатие архивов в Linux. Предлагаем Вам просто скопировать текстовые файлы, созданные в рамках 1 урока из 20 (Курс LFCS — часть 1: обработка текстовых потоков в Linux). Для этого вводим в командную строку команду cp ~/LFCS/Lab1/ahappychild.txt ~/LFCS/Lab1/ahappychild2.txt ~/LFCS/Lab1/sortuniq.txt ~/LFCS/Lab1/users.txt ~/LFCS/Lab3:

 

Чтобы проверить результаты выполнения операции — вводим в командную строку команду ls -l:

 

Копируем файлы, на которых будем отрабатывать архивирование и сжатие в Linux

Переименовываем файлы перед их архивированием и сжатием

Теперь попробуем переименовать файлы, чтобы их названия состояли из слова file и порядкового номера. Для этого вводим в командную строку команду mv -f ahappychild.txt file1 && mv -f ahappychild2.txt file2 && mv -f sortuniq.txt file3 && mv -f users.txt file4:

 

Важно: обратите внимание, что Вы использовали команду перемещения mv для переименования файла (для этого достаточно в качестве второго аргумента не указывать путь к другому каталогу).

Переименовываем файлы перед их архивированием и сжатием в Linux

Убедимся, что операция выполнена успешно. Для этого снова вводим в командную строку команду ls -l:

 

В результате у Вас в каталоге имеются файлы с названиями, отличающимися только порядковым номером — file1, file2, file3, и file4.

Проверяем названия переименованных файлов в каталоге Linux

Создаем архивы tar, сжатые с помощью утилит gzip, bzip2 и xz

Теперь создаем три версии tar-архива, сжатые с помощью gzip, bzip2 и xz соответственно. Для этого вводим в командную строку команду tar czf myfiles.tar.gz file[0-9] && tar cjf myfiles.tar.bz2 file[0-9] && tar cJf myfiles.tar.xz file[0-9]:

Сгруппируйте все файлы в текущем рабочем каталоге и сожмите полученный пакет с помощью gzip, bzip2 и xz (обратите внимание на использование регулярного выражения, которое указывает, какие файлы должны быть включены в архив).

 

Важно: в данном случае Вы использовали регулярное выражение file[0-9] для архивирования всех файлов в каталоге, содержащих слово file и порядковый номер.

Создаем архивы tar, сжатые с помощью утилит gzip, bzip2 и xz

Снова вводим в командную строку команду ls -l, чтобы увидеть созданные сжатые архивы с файлами:

 

Находим созданные сжатые архивы в каталоге Linux

Как видите, у Вас получилось создать три новых файла, имеющих расширения *.tar.gz, *.tar.bz2 и *.tar.xz.

Обновляем / добавляем файлы в архиве

Нередко во время работы с архивами возникает необходимость обновить версии включенных в них файлов. Либо же — и вовсе добавить к архиву новые файлы, которых он ранее не содержал. Однако сделать это можно лишь с несжатой версией архива. То есть, придется сначала выполнить декомпрессию tar-файлов.

Выполняем декомпрессию tar-файла с помощью утилиты gzip

В качестве примера попробуем внести изменения в архив. Для этого сначала вводим в командную строку команду gzip -d myfiles.tar.gz:

 

Важно: для декомпрессии архива, сжатого с помощью утилиты bzip2 Вы можете воспользоваться аналогичной командой — bzip2 -d myfiles.tar.bz2, а для декомпрессии архива, сжатого утилитой xz — командой xz -d myfiles.tar.xz.

 

Теперь проверим результаты выполнения операции. Снова вводим в командную строку команду ls -l:

 

Выполняем декомпрессию tar-файла с помощью утилиты gzip в Linux

В результате файл myfiles.tar.gz превратился в myfiles.tar. То есть — больше не сжат с помощью утилиты gzip.

Вносим изменения в файл file1 с помощью текстового редактора vim

Для чистоты эксперимента внесем любые изменения в содержимое файла file1 c помощью текстового редактора vim — с которым Вы познакомились в рамках 2 урока из 20 (Курс LFCS — часть 2: установка vi / vim и редактирование текста). Для этого вводим в командную строку команду vim file1:

 

После чего переходим в режим вставки с помощью клавиши i. И немного меняем текст (мы просто перенесли ниже строки, начиная с третьей). После этого нажимаем клавишу Esc, чтобы вернуться в нормальный режим vim. Потом нажимаем клавишу : (то есть, комбинацию клавиш Shift + ;) для вызова командной строки, вводим wq («сохранить» и «выйти») и нажимаем клавишу Enter для подтверждения.

Вносим изменения в файл file1 с помощью текстового редактора vim

В результате мы обновили версию файла file1.

Заменяем файл в архиве перед повторным сжатием

Предположим, что файл с названием file1 изменился с момента создания архива myfiles.tar. Сначала вводим в командную строку команду tar --delete --file myfiles.tar file1, чтобы удалить его из нашего tar-файла.

 

 

Давайте убедимся, что файл file1 успешно удален из Вашего архива myfiles.tar. Для этого вводим в командную строку команду tar tf myfiles.tar:

 

При этом опция t выводит содержимое архива в список, а опция f — указывает утилите, что команда касается файла myfiles.tar.

Удаляем file1 из архива и проверяем файлы, оставшиеся в tar-архиве

В результате в архиве myfiles.tar остались только файлы file2, file3 и file4.

 

Однако теперь Вам нужно добавить к архиву новую версию файла file1. Для этого вводим в командную строку команду tar --update --file myfiles.tar file1:

 

Снова вводим в командную строку команду tar tf myfiles.tar:

 

В результате Ваш архив снова содержит актуальную версию файла file1.

Добавляем file1 в архив и выводим список содержимого tar-файла

Сжимаем обратно измененный tar-файл с помощью утилиты gzip

Теперь Вам осталось лишь заново сжать архив myfiles.tar. Для этого вводим в командную строку команду gzip myfiles.tar:

 

Важно: если Вы обновляли содержимое архива myfiles.tar.bz2 — воспользуйтесь командой bzip2 myfiles.tar, тогда как если Вы работали с архивом myfiles.tar.xz — то командой xz myfiles.tar.

 

Снова вводим в командную строку команду ls -l, чтобы увидеть созданные сжатые архивы с файлами:

 

Сжимаем обратно измененный tar-файл с помощью утилиты gzip в Linux и проверяем архивы, расположенные в каталоге

Проверяем дату и время изменения файлов в tar-архиве

Теперь выведем на экран содержимое архива myfiles.tar.gz с указанием даты и времени изменения файлов. Для этого вводим в командную строку команду

 

Проверяем дату и время изменения файлов в tar-архиве

В результате напротив файла file1 видим другое время изменения (16:08, тогда как у прочих файлов в архиве — 14:20). То есть, Вы успешно заменили старую версию файла в tar-архиве новой, измененной версией.

Выполняем резервное копирование с помощью утилиты tar

Плох тот системный администратор Linux, который не делает резервного копирования. В частности — резервного копирования домашних каталогов пользователей операционной системы. И для хранения бэкапов, как правило, также используется утилита tar.

Исключаем типы файлов из архивов tar при резервном копировании

Далеко не все содержимое домашних каталогов пользователей имеет смысл сохранять во время резервного копирования. Некоторые типы файлов просто будут занимать слишком много дискового пространства при многократном их сохранении. При этом они не поддаются сжатию с помощью утилит gzip, bzip2 и xz. Потому системному администратору нужно уметь исключать из бэкапов файлы с определенным расширением (например — аудио- и видеофайлы).

Указать только список расширений для исключения (к примеру — *.mp3 или *.mp4) из резервных копий — не всегда эффективно. Поскольку некоторые пользователи могут вручную менять расширение файлов на разрешенные — *.txt, *.bkp и т. п. К счастью, подобные хитрости можно обойти, если воспользоваться специальным скриптом — сценарием оболочки Linux.

Создаем скрипт, исключающий указанные типы файлов при создании резервных копий

Прежде всего, вводим в командную строку команду vim file_type_exclude:

 

После этого вводим через текстовый редактор текст нашего скрипта:

 

Сохраняем файл и выходим из текстового редактора vim. Безусловно, подробный разбор возможностей сценариев оболочки будет ждать Вас в одном из следующих уроков по подготовке к экзаменам Linux Foundation. А пока — просто воспользуемся готовым скриптом.

Создаем скрипт для исключения типов файлов из резервного копирования с помощью утилиты tar

Разрешаем выполнение скрипта оболочки Linux

Пробуем запустить сценарий оболочки Linux — вводим в командную строку команду ./file_type_exclude:

 

Однако выполнение данной команды будет прервано отказом в доступе от операционной системы — bash: ./file_type_exclude: Permission denied.

Скрипт готов, но не исполняется операционной системой Linux

 

Чтобы Ваш скрипт выполнялся — нужно поменять ему настройки прав доступа. Для этого вводим в командную строку команду chmod +x ./file_type_exclude:

 

Меняем настройки прав доступа у файла скрипта оболочки Linux с помощью команды chmod

 

Теперь можно повторить попытку выполнения скрипта. Однако на этот раз в качестве аргумента добавляем путь к каталогу с файлами, созданными в рамках этого урока по Linux. Вводим в командную строку команду ./file_type_exclude ~/LFCS/Lab3:

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

Давайте проверим, сработал ли скрипт — был ли создан сжатый архив с резервной копией файлов. Для этого сначала вводим в командную строку команду ls -l:

 

В списке содержимого каталога ~/LFCS/Lab3 видим файл backupfile.tar.bz2 — это и есть наша резервная копия (tar-архив, сжатый с помощью утилиты bzip2).

Проверяем наличие архива с резервной копией backupfile.tar.bz2 в Linux

 

Стоит проверить, действительно ли Ваш архив содержит файлы, расположенные в каталоге ~/LFCS/Lab3. Для этого вводим в командную строку команду tar tvf backupfile.tar.bz2:

 

В результате мы видим, что архив содержит все файлы, расположенные в каталоге ~/LFCS/Lab3, за исключением MPEG-файла. Сценарий оболочки успешно исключил данный файл из резервной копии!

Проверяем содержимое архива с резервной копией backupfile.tar.bz2 в Linux

Пробуем обмануть скрипт, заменив расширение *.mpeg на *.txt

Теперь настало время проверить, распознает ли наш сценарий оболочки Linux файл, расширение которого было изменено вручную. Прежде всего, для этого вводим в командную строку команду mv sample_960x400_ocean_with_audio.mpeg sample_960x400_ocean_with_audio.txt:

 

Проверяем изменение расширения файла — вводом в командную строку команду ls:

 

Видим, что расширение файла изменилось.

Меняем расширение *.mpeg на *.txt вручную

 

Теперь снова вводим в командную строку команду, вызывающую исполнение Вашего скрипта с указанием пути к каталогу — ./file_type_exclude ~/LFCS/Lab3:

 

Для проверки содержимого архива с резервной копией вновь вводим в командную строку команду tar tvf backupfile.tar.bz2:

 

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

Проверяем, попал ли файл с измененным расширением в архив с резервной копией

Восстанавливаем резервные копии с помощью утилиты tar

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

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

Для примера давайте сначала удалим файл myfiles.tar.gz из нашего каталога. Для этого вводим в командную строку команду rm myfiles.tar.gz:

 

Проверяем, как изменилось содержимое нашего каталога. Для этого вводом в командную строку команду ls:

 

Видим, что файла myfiles.tar.gz больше нет в каталоге.

Удаляем файл из каталога для последующего восстановления из резервной копии

Восстанавливаем файлы из резервной копии

Теперь попробуем восстановить данные из резервной копии. Для этого вводим в командную строку команду tar xjf backupfile.tar.bz2 --directory / --same-permissions:

 

 

Скрипт создал tar-архив с файлами, сохраняя путь к ним от Вашего домашнего каталога. Потому при распаковке резервной копии нужно помещать ее в корневой каталог операционной системы Linux/.

Для проверки результата снова вводом в командную строку команду ls:

 

Видим, что файл myfiles.tar.gz снова есть в каталоге — восстановление прошло успешно!

Восстанавливаем данные из резервной копии

Важно: по умолчанию резервные копии файлов из tar-архива не будут перезаписывать свои более новые версии — для этого предназначена опция -U, которую стоит использовать с крайней осторожностью.

Используем поиск файлов с помощью утилиты find

Предположим, что Вам нужно найти все файлы и каталоги, которые соответствуют определенным критериям:

  • название;
  • имя владельца;
  • группа;
  • тип файла;
  • разрешения;
  • дата изменения;
  • размер файла.

В таком случае лучше всего воспользоваться командой find. Изучение этого инструмента является важной частью подготовки к экзаменам Linux Foundation.

Команда find имеет следующий синтаксис:

 

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

Ищем файлы рекурсивно в зависимости от размера с помощью утилиты find

Попробуем рекурсивно найти в указанном каталоге файлы определенного размера.

Рекурсивный поиск — это поиск файлов и каталогов в заданном каталоге, а также в его подкаталогах и так далее. Такой поиск можно выполнять как с ограничениями по глубине вложения подкаталогов, так и без таких ограничений (то есть — во всех подкаталогах, путь к которым включает в себя название исходного каталога).

Прежде всего, давайте перейдем в Ваш домашний каталог. Для этого вводим в командную строку команду cd ~:

 

Теперь вводим в командную строку команду find . -maxdepth 3 -type f -size +2M:

 

Опции и аргументы этой команды имеют следующее значение:

  • . — начать поиск с текущего каталога;
  • -maxdepth 3 — задать максимальную глубину рекурсивного поиска в 3 вложения (простыми словами — только в текущем каталоге, входящих в него подкаталогах, и тех подкаталогах, которые входят в эти подкаталоги);
  • -type f — искать обычные файлы;
  • -size +2M — искать файлы с размером больше 2 МБ.

Видим, что вывод команды содержит 2 файла, размеры которых соответствуют условиям поиска.

Ищем файлы рекурсивно в зависимости от размера с помощью утилиты find

Таким образом, системный администратор легко может найти, к примеру, большие файлы, занимающие много дискового пространства.

Ищем и удаляем файлы с определенными настройками разрешений доступа

Помимо поиска по размеру каждый системный администратор Linux должен уметь находить файлы с определенными настройками разрешений доступа. Например, с разрешениями, которые в числовом формате имеют вид 777 — все виды прав для всех видов пользователей (подробнее об этом — ниже).

При этом файлы с подобными настройками прав доступа ставят безопасность операционной системы под угрозу. Конечно же, у Вас на жестком диске может и не быть таких файлов. Потому для примера мы возьмем файл myfiles.tar.xz, которому присвоим настройки доступа, дающие максимально широкому кругу пользователей все возможные разрешения. Для этого вводим в командную строку команду chmod 777 myfiles.tar.xz:

 

Проверяем результаты применения команды — вводим в командную строку команду ls -l:

 

Видим, что напротив файла myfiles.tar.xz теперь выставлены разрешения вида rwxrwxrwx — это точный эквивалент разрешений 777, но только в символьном формате.

Важно: числовой формат удобнее использовать при введении команд, тогда как символьный формат проще читается в выводе командной строки.

Изменяем права доступа к файлу с помощью команды chmod в Linux

 

Теперь попробуем найти файл myfiles.tar.xz с помощью команды find в нашем текущем каталоге. Но не просто найти, а еще и удалить, поскольку файлы с неограниченными правами доступа — опасный инструмент в руках злоумышленника. Для этого вводим в командную строку команду find . -perm 777 -exec rm '{}' +:

 

Составляющие этой команды имеют следующие значения:

  • -perm (от англ. permissions) — опция, которая позволяет команде искать файлы по настройкам прав доступа;
  • -exec (от англ. execute) — опция, которая позволяет в случае обнаружения файлов, соответствующих критериям поиска, выполнить по отношению к ним другую команду;
  • rm (от англ. remove) — команда, удаляющая файл или каталог в ОС семейства GNU / Linux;
  • '{}' — комбинация специальных символов, выполняющая подстановку результатов поиска командой find как аргумент команды rm.

Для проверки снова вводим в командную строку команду ls -l:

 

Видим, что потенциально опасного файла myfiles.tar.xz больше нет в каталоге.

Находим и удаляем файл с разрешениями 777 из текущего каталога в Linux

Ищем файлы по времени изменения / обращения к ним

Также немаловажно уметь находить файлы по времени последнего обращения к ним либо по времени изменения таких файлов. Допустим, за последний месяц Вы вносили изменения в некоторые файлы с настройками. Чтобы найти и вывести на экран путь до этих файлов и их названия — введите в командную строку команду sudo find /etc -iname "*.conf" -mtime -30 -print:

 

Давайте проанализируем опции и аргументы введенной команды:

  • /etc — аргумент, содержащий каталог, в котором будет выполняться поиск файлов с настройками;
  • -iname — опция поиска по именам файлов без учета регистра;
  • "*.conf" — аргумент, содержащий шаблон, по которому будет выполняться поиск (за счет метасимвола подстановки * будут находиться файлы с любым названием и расширением *.conf);
  • -mtime — опция поиска по времени изменения файла;
  • -30 — аргумент, содержащий временные рамки для поиска (в данном случае — «менее 30 дней», тогда как +30 — будет означать «более 30 дней»);
  • -print — опция выведения на экран с новой строки имен найденных файлов и пути до них.

Важно: в данном случае Вам нужно будет выполнить команду от имени суперпользователя с помощью команды sudo, так как доступ к содержимому каталога /etc ограничен.

Поиск последних измененных файлов с помощью команды find

Используем команду chmod для изменения прав доступа

В одном из прошлых примеров Вы уже использовали возможности команды chmod. Однако теперь стоит подробнее рассказать о ее назначении и возможностях.

Утилита chmod — это инструмент командной строки Linux и других UNIX-подобных операционных систем, предназначенный для изменения настроек прав доступа к файлам и каталогам. Первая версия данной программы увидела свет 3 ноября 1971 года, самая свежая версия (v8.5) — 23 апреля 2010 года. Работа с утилитой chmod — один из базовых навыков для любого продвинутого пользователя Linux и начинающего системного администратора.

Изучаем основные атрибуты файла и разрешения в выводе команды ls

Безусловно, чтобы менять права доступа к файлу командой chmod — нужно научиться выводить на экран текущие настройки разрешений и понимать их. Для этого вводим в командную строку команду ls -l:

 

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

При этом в выводе команды ls -l первые 10 символов — это атрибуты файла. В частности, первый символ используется для указания типа файла:

  • - — обычный файл;
  • -d — каталог;
  • -l — символическая ссылка;
  • -c — символьное устройство;
  • -b — блочное устройство.

Следующие 9 символов в атрибутах файла как раз и содержат зашифрованную информацию о настройках прав доступа:

  • r — разрешение на чтение;
  • w — разрешение на запись;
  • x — разрешение на выполнение файла.

Важно: разрешение на исполнение у файла позволяет обрабатывать его как программу, тогда как у каталога — разрешает удалять и переименовывать его содержимое.

Настройки прав доступа устанавливаются отдельно для разных категорий пользователей:

  • владельца файла;
  • группы, к которой относится владелец файла;
  • остальных пользователей.

Теперь можно переходить к изучению возможностей команды chmod.

Как работает команда chmod

Команда chmod имеет следующий синтаксис:

 

При этом new_mode — выражение, которое содержит новые настройки прав доступа к файлу или каталогу. У команды chmod оно может принимать либо числовой (три восьмеричных числа), либо символьный (комбинация символов) формат.

Числовой формат chmod

Давайте разберемся в числовом формате команды chmod. Восьмеричное число можно получить как степень двойки:

  • r (чтение) — 4 (2^2);
  • w (запись) — 2 (2^1);
  • x (выполнение) — 1 (2^0).

При этом отсутствие разрешения — это 0.

В результате команда chmod в числовом формате будет иметь следующий вид:

 

Где:

  • user_permissions — сумма восьмеричных чисел, обозначающих необходимые права доступа для владельца файла;
  • group_permissions — сумма восьмеричных чисел, обозначающих необходимые права доступа для группы пользователей, к которой относится владелец файла;
  • other_permissions — сумма восьмеричных чисел, обозначающих необходимые права доступа для всех остальных пользователей.

Теперь перейдем к символьному формату команды.

Символьный формат chmod

Помимо аргумента в формате чисел у команды chmod предусмотрена возможность работать с символами. Чтобы указать, для какого вида пользователей меняются права доступа — нужно использовать следующие символы:

  • u — разрешения для владельца файла (user);
  • g — разрешения для группы владельца (group);
  • o — разрешения для всех остальных пользователей (other);
  • a — разрешения для всех пользователей одновременно (all).

При этом дополнительно применяются знаки математических действий, имеющие следующее значение:

  • + — добавить указанные разрешения;
  • - — удалить указанные разрешения;
  • = — установить указанные разрешения.

Конечно же, также есть символы для каждого из видов прав доступа, предоставляемых командой chmod:

  • r — чтение (read);
  • w — запись (write);
  • x — исполнение (execute).

Есть и другие виды разрешений, которые можно предоставить в символьном формате команды chmod. Однако в рамках этого урока хватит и перечисленных функций.

Команда chmod в символьном формате будет иметь следующий вид:

 

Где:

  • mathematical symbol — математический символ, обозначающий действие — добавление, удаление или установку разрешений;
  • permissions — символы, обозначающие конкретные виды настроек прав доступа к файлу.

Примеры использования команды chmod

Скорее всего, новичку будет довольно сложно сразу понять, как пользоваться командой chmod. Разобраться в том, как она работает, проще на практике.

Разрешаем чтение и запись файла только его владельцу

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

Для примера возьмем ранее созданный файл — file1. И попробуем разрешить чтение и запись файла только его владельцу с помощью числового формата команды chmod. Чтению и записи соответствуют цифры 4 и 2, тогда как их сумма — равна 6. Отсутствие разрешений для группы владельца и других пользователей — это 0 и 0 соответственно. То есть, в числовом формате требуемые настройки доступа — это 600.

В результате вводим в командную строку команду chmod 600 file1:

 

Проверяем, какие настройки прав доступа имеет файл. Для этого снова вводим в командную строку команду ls -l:

 

Видим, что настройки разрешений у файла file1 благополучно изменились.

Проверяем измененные в числовом формате настройки прав доступа у файла в Linux

 

Теперь попробуем сделать то же самое в символьном формате.

На этот раз в качестве примера возьмем другой файл — file2. Итак, Вам нужно присвоить этому файлу такие же настройки прав доступа — чтение и запись только для владельца файла без права на его исполнение. В символьном формате команды chmod для этого вводим в командную строку команду chmod u=rw,g-rw,o-r file2:

 

Проверяем, какие настройки прав доступа имеет файл. Для этого снова вводим в командную строку команду ls -l:

 

Видим, что настройки разрешений у файла file2 также изменились.

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

Запрещаем исполнение сценария оболочки для всех пользователей

Другой полезный пример использования команды chmod — это запрет на исполнение файла (например — сценария оболочки Linux) для всех пользователей. Попробуем выполнить такое действие с использованием символьного формата. В качестве примера возьмем созданный Вами скрипт file_type_exclude.

Для этого вводим в командную строку команду chmod a-x file_type_exclude:

 

Вновь вводим в командную строку команду ls -l для проверки настроек прав доступа:

 

В результате видим, что из разрешений исчез символ x, обозначающий право на исполнение файла.

Кроме того, пробуем выполнить сценарий оболочки — вводим в командную строку команду ./file_type_exclude ~/LFCS/Lab3:

 

Однако операционная система отказывается исполнять скрипт — вместо этого в командную строку выводится сообщение bash: ./file_type_exclude: Permission denied.

Запрещаем исполнение сценария оболочки для всех пользователей в Linux

Используем команду chown

Последняя команда, которую Вы освоите в рамках этого урока — chown.

Утилита chown — это инструмент командной строки Linux (и других UNIX-подобных ОС), предназначенный для владельца и группы пользователей владельца в атрибутах файла.

Важно: использование команды chown требует наличия прав суперпользователя — воспользуйтесь командой sudo.

Заменяем владельца файла в Linux с помощью команды chown

Прежде всего, попробуем заменить владельца файла file1. Для этого вводим в командную строку команду sudo chown root file1:

 

Проверяем текущего владельца файла file1 с помощью команды ls -l:

 

Видим, что новый владелец пользователя — root (суперпользователь операционной системы).

Заменяем владельца файла в Linux с помощью команды chown в Linux

Заменяем владельца файла и группу пользователей

Также с помощью команды chown можно заменить вместе с владельцем файла и группу пользователей, к которой относится владелец. Для этого вводим в командную строку команду sudo chown root:root file1:

 

Снова проверяем текущего владельца и группу пользователей владельца файла file1 с помощью команды ls -l:

 

Видим, что теперь и владелец файла, и группа пользователей владельца имеют значение root.

Заменяем владельца файла и группу пользователей с помощью команды chown в Linux

Заменяем только группу пользователей в Linux

Предположим, что Вам нужно изменить группу пользователей, не изменяя владельца файла (на этот раз в качестве примера возьмем file2). Для этого вводим в командную строку команду sudo chown :root file2:

 

Проверяем группу пользователей владельца файла file2 с помощью команды ls -l:

 

Видим, что теперь только группа пользователей владельца файла file2 имеет значение root.

Заменяем только группу пользователей в Linux с помощью команды chown в Linux

Выводы

В рамках 3 из 20 уроков по подготовке к экзаменам Linux Foundation Вы научились создавать tar-архивы с резервными копиями файлов, а также — сжимать их с помощью утилит gzip, bzip2 и xz для экономии дискового пространства. Кроме того, Вы научились находить файлы по различным критериям за счет использования команды find. И освоили настройку прав доступа к файлам и каталогам с помощью утилит chmod и chown. Все это должен знать и уметь каждый начинающий системный администратор Linux. К тому же, с высокой долей вероятности подобные навыки пригодятся практически в любом из направлений сектора информационных технологий.

Спасибо за время, уделенное прочтению статьи!

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

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

LFCS

Метки:

, , , , , , , , ,

Больше похожих постов

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню