Linux и UNIX: программирование в shell. Руководство разработчика
Linux и UNIX: программирование в shell. Руководство разработчика читать книгу онлайн
Данная книга является практическим руководством по программированию интерпретатора Bourne shell -cтандартного командного интерпретатора в UNIX, полностью совместимого с интерпретатором BASH shell в Linux. Книга предназначена для начинающих и опытных программистов и содержит множество полезных примеров, советов и подсказок. С ее помощью читатель сможет быстро научиться создавать shell–сценарии для реальных задач и ситуаций, возникающих в большинстве систем UNIX и Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
В этой главе рассматриваются следующие темы:
• права доступа к файлам к каталогам;
• биты смены идентификаторов {SUID и SGID);
• изменение владельца файла или каталога с помощью команд chown и chgrp;
• команда umask;
• символические ссылки.
Файл принадлежит создавшему его пользователю, а также группе, членом которой данный пользователь является. Владелец файла может самостоятельно определять, кому позволено производить запись в файл, читать его содержимое, а также запускать файл на выполнение, если он является исполняемым.
Примечание:
Пользователь root (системный администратор) может отменить практически все ограничения, заданные рядовым пользователем.
Доступ к созданному файлу может осуществляться тремя способами:
• Путем чтения, при этом содержимое файла отображается на экране.
• Путем записи, при этом содержимое файла редактируется или удаляется.
• Путем выполнения, если файл содержит сценарий интерпретатора shell либо является программой.
Пользователи, имеющие доступ к файлу, делятся на три категории:
• Владелец файла, создавший его.
• Члены группы, к которой относится владелец файла.
• Остальные пользователи.
1.1. Информация о файлах
После создания файла система сохраняет о нем всю информацию, которая может когда‑либо понадобиться, в частности:
• раздел диска, где физически находится файл;
• тип файла;
• размер файла;
• идентификатор владельца файла, а также тех, кому разрешен доступ к файлу;
• индексный дескриптор;
• дата и время последнего изменения файла
• режим доступа к файлу.
Рассмотрим типичный список файлов, полученный в результате выполнения команды ls -l.
$ ls -l
total 4232
-rwxr‑xr‑x
1 root
root
3756 Oct
14
04:44
dmesg
-r‑xr‑xr‑x
1 root
root
12708 Oct
3
05:40
ps
-rwxr‑xr‑x
1 root
root
5388 Aug
5
1998
pwd
Информацию, предоставляемую командой ls -l, можно разбить на следующие части:
total 4232
Суммарный размер файлов в каталоге
-rwxr‑xr‑x
Режим доступа к файлу, отображаемый в виде строки из десяти
символов. Первый символ ('-') указывает на то, что текущая запись
относится к файлу (если на его месте стоит символ d, значит,
запись относится к каталогу). Остальные символы делятся на три
категории:
rwx — права владельца (первая триада);
r‑x — права группы (вторая триада);
r‑x — права остальных пользователей (последняя триада).
Символ r означает право чтения, символ w — право записи,
символ x — право выполнения, символ ' — ' -oтсутствие соответ-
ствующего права. Система разрешений подробно описана ниже
1
Количество жестких ссылок на файл
root
Идентификатор владельца файла
root
Идентификатор группы, в которую входит владелец файла
3756
Размер файла в байтах
Oct 14 04:44
Дата и время последнего изменения файла
dmesg
Имя файла
1.2. Типы файлов
В начале строки режима может стоять не только символ ' — " или d, ведь в каталоге насчитывается до семи различных типов записей (табл. 1.1):
Таблица 1.1. Типы файлов
d
Каталог
l
Символическая ссылка (указатель на другой файл)
s
Сокет
b
Специальный блочный файл
с
Специальный символьный файл
p
Файл именованного канала
—
Обычный файл или, если выразиться точнее, ни один из файлов, перечисленных выше
1.3. Права доступа к файлам
Давайте создадим файл, используя команду touch:
$ touch myfile
Теперь выполним команду ls -1:
$ ls -1 myfile
-rw‑r--r-- 1 dave admin 0 Feb 19 22:05 myfile
Мы получили пустой файл, и, как и ожидалось, первый символ в строке режима свидетельствует о том, что это обычный файл. В результате выполнения большинства операций по созданию файлов образуются либо обычные файлы, либо символические ссылки (о них говорится ниже).
Права владельца
Права группы
Права остальных пользователей
rw-
r--
r--
Следующие три символа в строке режима (rw-) описывают права доступа к созданному файлу со стороны его владельца (пользователь dave). За ними следуют символы r--, указывающие на права группы, в которую входит этот пользователь (в данном случае он является членом группы admin). Последние три символа (r--) представляют собой права пользователей, не принадлежащих к данной группе.
Существует три вида разрешений:
r
Право чтения данного файла
w
Право записи/изменения данного файла
x
Право выполнения данного файла, если он является сценарием или программой
Следовательно, строку режима для файла myfile необходимо интерпгретировать следующим образом:
-
rw-
r--
r--
Обычный файл
Владелец может
Пользователи указанной группы могут осуществлять только чтение этого файла
Остальные пользователи также могут осуществлять только чтение этого файла
осуществлять чтение и запись этого файла
Возможно, вы обратили внимание на то, что при создании файла myfile владелец не получил право выполнять данный файл. Это связано с ограничениями, установленными по умолчанию в системе. Ситуация прояснится чуть позже, когда мы изучим команду umask.
Рассмотрим несколько дополнительных примеров (табл. 1.2).
Таблица 1.2. Примеры строк режима
Строка режима Результат
r-- --- ---
Доступ к файлу разрешен только владельцу, который может читать содержимое файла, но не имеет права осуществлять запись в файл и выполнять его
r--r-- ---
Доступ к файлу возможен только для чтения и разрешен владельцу и всем пользователям группы, в которую он входит
r--r--r--
Любой пользователь может получить доступ к файлу для чтения, остальные действия запрещены