Linux Foundation — некоммерческая организация, которая занимается подготовкой и сертификацией специалистов LFCS (Linux Foundation Certified Sysadmin). В рамках 3 из 20 уроков по подготовке к экзаменам Linux Foundation Вы узнаете о том, как архивировать файлы и каталоги в Linux. А также — как искать файлы, настраивать их атрибуты и разрешения.
Полный список уроков для прохождения индустриальной сертификации: Курс LFCS (Linux Foundation Certified Sysadmin): программа подготовки к экзаменам.
Содержание:
- Создаем каталог для выполнения практических примеров
- Архивируем и сжимаем файлы с помощью tar, gzip, bzip2 и xz
- Выполняем резервное копирование с помощью утилиты tar
- Используем поиск файлов с помощью утилиты find
- Используем команду chmod для изменения прав доступа
- Используем команду chown
- Выводы
Создаем каталог для выполнения практических примеров
Для начала традиционно создадим новый рабочий каталог для практических занятий в рамках 3 урока из 20 по подготовке к сертификации LFCS. Вводим в командную строку команду mkdir LFCS/Lab3
:
В результате новый каталог Lab3
создан. Чтобы перейти в него — вводим в командную строку команду cd LFCS/Lab3
:
Теперь Вы готовы и можете переходить непосредственно к материалам урока.
Архивируем и сжимаем файлы с помощью 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
:
Переименовываем файлы перед их архивированием и сжатием
Теперь попробуем переименовать файлы, чтобы их названия состояли из слова file и порядкового номера. Для этого вводим в командную строку команду mv -f ahappychild.txt file1 && mv -f ahappychild2.txt file2 && mv -f sortuniq.txt file3 && mv -f users.txt file4
:
Важно: обратите внимание, что Вы использовали команду перемещения mv
для переименования файла (для этого достаточно в качестве второго аргумента не указывать путь к другому каталогу).
Убедимся, что операция выполнена успешно. Для этого снова вводим в командную строку команду ls -l
:
В результате у Вас в каталоге имеются файлы с названиями, отличающимися только порядковым номером — file1
, file2
, file3
, и file4
.
Создаем архивы 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 и порядковый номер.
Снова вводим в командную строку команду ls -l
, чтобы увидеть созданные сжатые архивы с файлами:
Как видите, у Вас получилось создать три новых файла, имеющих расширения *.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
:
В результате файл 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
.
Заменяем файл в архиве перед повторным сжатием
Предположим, что файл с названием file1
изменился с момента создания архива myfiles.tar
. Сначала вводим в командную строку команду tar --delete --file myfiles.tar file1
, чтобы удалить его из нашего tar-файла.
Давайте убедимся, что файл file1
успешно удален из Вашего архива myfiles.tar
. Для этого вводим в командную строку команду tar tf myfiles.tar
:
При этом опция t
выводит содержимое архива в список, а опция f
— указывает утилите, что команда касается файла myfiles.tar
.
В результате в архиве myfiles.tar
остались только файлы file2
, file3
и file4
.
Однако теперь Вам нужно добавить к архиву новую версию файла file1
. Для этого вводим в командную строку команду tar --update --file myfiles.tar file1
:
Снова вводим в командную строку команду tar tf myfiles.tar
:
В результате Ваш архив снова содержит актуальную версию файла file1
.
Сжимаем обратно измененный tar-файл с помощью утилиты gzip
Теперь Вам осталось лишь заново сжать архив myfiles.tar
. Для этого вводим в командную строку команду gzip myfiles.tar
:
Важно: если Вы обновляли содержимое архива myfiles.tar.bz2
— воспользуйтесь командой bzip2 myfiles.tar
, тогда как если Вы работали с архивом myfiles.tar.xz
— то командой xz myfiles.tar
.
Снова вводим в командную строку команду ls -l
, чтобы увидеть созданные сжатые архивы с файлами:
Проверяем дату и время изменения файлов в tar-архиве
Теперь выведем на экран содержимое архива myfiles.tar.gz
с указанием даты и времени изменения файлов. Для этого вводим в командную строку команду
В результате напротив файла 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. А пока — просто воспользуемся готовым скриптом.
Разрешаем выполнение скрипта оболочки Linux
Пробуем запустить сценарий оболочки Linux — вводим в командную строку команду ./file_type_exclude
:
Однако выполнение данной команды будет прервано отказом в доступе от операционной системы — bash: ./file_type_exclude: Permission denied
.
Чтобы Ваш скрипт выполнялся — нужно поменять ему настройки прав доступа. Для этого вводим в командную строку команду chmod +x ./file_type_exclude
:
Теперь можно повторить попытку выполнения скрипта. Однако на этот раз в качестве аргумента добавляем путь к каталогу с файлами, созданными в рамках этого урока по Linux. Вводим в командную строку команду ./file_type_exclude ~/LFCS/Lab3
:
Проверяем работу скрипта для создания резервных копий
Давайте проверим, сработал ли скрипт — был ли создан сжатый архив с резервной копией файлов. Для этого сначала вводим в командную строку команду ls -l
:
В списке содержимого каталога ~/LFCS/Lab3
видим файл backupfile.tar.bz2
— это и есть наша резервная копия (tar-архив, сжатый с помощью утилиты bzip2).
Стоит проверить, действительно ли Ваш архив содержит файлы, расположенные в каталоге ~/LFCS/Lab3
. Для этого вводим в командную строку команду tar tvf backupfile.tar.bz2
:
В результате мы видим, что архив содержит все файлы, расположенные в каталоге ~/LFCS/Lab3
, за исключением MPEG-файла. Сценарий оболочки успешно исключил данный файл из резервной копии!
Пробуем обмануть скрипт, заменив расширение *.mpeg на *.txt
Теперь настало время проверить, распознает ли наш сценарий оболочки Linux файл, расширение которого было изменено вручную. Прежде всего, для этого вводим в командную строку команду mv sample_960x400_ocean_with_audio.mpeg sample_960x400_ocean_with_audio.txt
:
Проверяем изменение расширения файла — вводом в командную строку команду ls
:
Видим, что расширение файла изменилось.
Теперь снова вводим в командную строку команду, вызывающую исполнение Вашего скрипта с указанием пути к каталогу — ./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 файла, размеры которых соответствуют условиям поиска.
Таким образом, системный администратор легко может найти, к примеру, большие файлы, занимающие много дискового пространства.
Ищем и удаляем файлы с определенными настройками разрешений доступа
Помимо поиска по размеру каждый системный администратор Linux должен уметь находить файлы с определенными настройками разрешений доступа. Например, с разрешениями, которые в числовом формате имеют вид 777
— все виды прав для всех видов пользователей (подробнее об этом — ниже).
При этом файлы с подобными настройками прав доступа ставят безопасность операционной системы под угрозу. Конечно же, у Вас на жестком диске может и не быть таких файлов. Потому для примера мы возьмем файл myfiles.tar.xz
, которому присвоим настройки доступа, дающие максимально широкому кругу пользователей все возможные разрешения. Для этого вводим в командную строку команду chmod 777 myfiles.tar.xz
:
Проверяем результаты применения команды — вводим в командную строку команду ls -l
:
Видим, что напротив файла myfiles.tar.xz
теперь выставлены разрешения вида rwxrwxrwx
— это точный эквивалент разрешений 777
, но только в символьном формате.
Важно: числовой формат удобнее использовать при введении команд, тогда как символьный формат проще читается в выводе командной строки.
Теперь попробуем найти файл myfiles.tar.xz
с помощью команды find
в нашем текущем каталоге. Но не просто найти, а еще и удалить, поскольку файлы с неограниченными правами доступа — опасный инструмент в руках злоумышленника. Для этого вводим в командную строку команду find . -perm 777 -exec rm '{}' +
:
Составляющие этой команды имеют следующие значения:
-perm
(от англ. permissions) — опция, которая позволяет команде искать файлы по настройкам прав доступа;-exec
(от англ. execute) — опция, которая позволяет в случае обнаружения файлов, соответствующих критериям поиска, выполнить по отношению к ним другую команду;rm
(от англ. remove) — команда, удаляющая файл или каталог в ОС семейства GNU / Linux;'{}'
— комбинация специальных символов, выполняющая подстановку результатов поиска командойfind
как аргумент командыrm
.
Для проверки снова вводим в командную строку команду ls -l
:
Видим, что потенциально опасного файла myfiles.tar.xz
больше нет в каталоге.
Ищем файлы по времени изменения / обращения к ним
Также немаловажно уметь находить файлы по времени последнего обращения к ним либо по времени изменения таких файлов. Допустим, за последний месяц Вы вносили изменения в некоторые файлы с настройками. Чтобы найти и вывести на экран путь до этих файлов и их названия — введите в командную строку команду sudo find /etc -iname "*.conf" -mtime -30 -print
:
Давайте проанализируем опции и аргументы введенной команды:
/etc
— аргумент, содержащий каталог, в котором будет выполняться поиск файлов с настройками;-iname
— опция поиска по именам файлов без учета регистра;"*.conf"
— аргумент, содержащий шаблон, по которому будет выполняться поиск (за счет метасимвола подстановки*
будут находиться файлы с любым названием и расширением*.conf
);-mtime
— опция поиска по времени изменения файла;-30
— аргумент, содержащий временные рамки для поиска (в данном случае — «менее 30 дней», тогда как+30
— будет означать «более 30 дней»);-print
— опция выведения на экран с новой строки имен найденных файлов и пути до них.
Важно: в данном случае Вам нужно будет выполнить команду от имени суперпользователя с помощью команды sudo
, так как доступ к содержимому каталога /etc
ограничен.
Используем команду 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
благополучно изменились.
Теперь попробуем сделать то же самое в символьном формате.
На этот раз в качестве примера возьмем другой файл — file2
. Итак, Вам нужно присвоить этому файлу такие же настройки прав доступа — чтение и запись только для владельца файла без права на его исполнение. В символьном формате команды chmod
для этого вводим в командную строку команду chmod u=rw,g-rw,o-r file2
:
Проверяем, какие настройки прав доступа имеет файл. Для этого снова вводим в командную строку команду ls -l
:
Видим, что настройки разрешений у файла file2
также изменились.
Запрещаем исполнение сценария оболочки для всех пользователей
Другой полезный пример использования команды 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
.
Используем команду chown
Последняя команда, которую Вы освоите в рамках этого урока — chown
.
Утилита chown — это инструмент командной строки Linux (и других UNIX-подобных ОС), предназначенный для владельца и группы пользователей владельца в атрибутах файла.
Важно: использование команды chown
требует наличия прав суперпользователя — воспользуйтесь командой sudo
.
Заменяем владельца файла в Linux с помощью команды chown
Прежде всего, попробуем заменить владельца файла file1
. Для этого вводим в командную строку команду sudo chown root file1
:
Проверяем текущего владельца файла file1
с помощью команды ls -l
:
Видим, что новый владелец пользователя — root
(суперпользователь операционной системы).
Заменяем владельца файла и группу пользователей
Также с помощью команды chown
можно заменить вместе с владельцем файла и группу пользователей, к которой относится владелец. Для этого вводим в командную строку команду sudo chown root:root file1
:
Снова проверяем текущего владельца и группу пользователей владельца файла file1
с помощью команды ls -l
:
Видим, что теперь и владелец файла, и группа пользователей владельца имеют значение root
.
Заменяем только группу пользователей в Linux
Предположим, что Вам нужно изменить группу пользователей, не изменяя владельца файла (на этот раз в качестве примера возьмем file2
). Для этого вводим в командную строку команду sudo chown :root file2
:
Проверяем группу пользователей владельца файла file2
с помощью команды ls -l
:
Видим, что теперь только группа пользователей владельца файла file2
имеет значение root
.
Выводы
В рамках 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 с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.