Операционная система UNIX

На нашем литературном портале можно бесплатно читать книгу Операционная система UNIX, Робачевский Андрей Михайлович-- . Жанр: ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Операционная система UNIX
Название: Операционная система UNIX
Дата добавления: 16 январь 2020
Количество просмотров: 436
Читать онлайн

Операционная система UNIX читать книгу онлайн

Операционная система UNIX - читать бесплатно онлайн , автор Робачевский Андрей Михайлович

Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.

В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).

Для широкого круга пользователей.

 

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 40 41 42 43 44 45 46 47 48 ... 156 ВПЕРЕД
Перейти на страницу:

Права доступа к файлу могут быть изменены с помощью системных вызовов chmod(2) и fchmod(2):

#include <sys/types.h>

#include <sys/stat.h>

int chmod(const char *path, mode_t mode);

int fchmod(int fildes, mode_t mode);

Значение аргумента mode определяет устанавливаемые права доступа и дополнительные атрибуты (такие как SUID, SGID и Sticky bit), и создается путем логического объединения различных флагов, представленных в табл. 2.14. Вторая колонка таблицы содержит восьмеричные значения для девяти битов прав доступа (чтение, запись и выполнение для трех классов доступа) и трех битов дополнительных атрибутов.

Таблица 2.14. Флаги аргумента mode

Флаг Биты Значение
S_ISUID
04000
Установить бит SUID
S_ISGID
020#0
Установить бит SGID, если # равно 7, 5, 3 или 1. Установить обязательное блокирование файла, если # равно 6, 4, 2 или 0
S_ISVTX
01000
Установить Sticky bit
S_IRWXU
00700
Установить право на чтение, запись и выполнение для владельца-пользователя
S_IRUSR
00400
Установить право на чтение для владельца-пользователя
S_IWUSR
00200
Установить право на запись для владельца-пользователя
S_IXUSR
00100
Установить право на выполнение для владельца-пользователя
S_IRWXG
00070
Установить право на чтение, запись и выполнение для владельца-группы
S_IRGRP
00040
Установить право на чтение для владельца-группы
S_IWGRP
00020
Установить право на запись для владельца-группы
S_IXGRP
00010
Установить право на выполнение для владельца-группы
S_IRWXO
00007
Установить право на чтение, запись и выполнение для остальных пользователей
S_IROTH
00004
Установить право на чтение для остальных пользователей
S_IWOTH
00002
Установить право на запись для остальных пользователей
S_IXOTH
00001
Установить право на выполнение для остальных пользователей

Некоторые флаги, представленные в таблице, уже являются объединением нескольких флагов. Так, например, флаг

S_RWXU
эквивалентен
S_IRUSR | S_IWUSR | S_IXUSR
. Значение флага S_ISGID зависит от того, установлено или нет право на выполнение для группы (S_IXGRP). В первом случае, он будет означать установку SGID, а во втором — обязательное блокирование файла.

Для иллюстрации приведем небольшую программу, создающую файл с полными правами доступа для владельца, а затем изменяющую их. После каждой установки прав доступа в программе вызывается библиотечная функция system(3S), позволяющая запустить утилиту ls(1) и отобразить изменение прав доступа и дополнительных атрибутов.

#include <sys/types.h>

#include <sys/stat.h>

#include <stdlib.h>

main() {

 int fd;

 /* Создадим файл с правами rwx------ */

 fd = creat("my_file", S_IRUSR | S_IWUSR | S_IXUSR);

 system("ls -l my_file");

 /*Добавим флаг SUID */

 fchmod(fd, S_IRWXU | S_ISUID);

 /* Установим блокирование записей файла */

 fchmod(fd, S_IRWXU | S_ISUID | S_ISGID);

 system("ls -l my_file");

 /* Теперь установим флаг SGID */

 fchmod(fd, S_IRWXU | S_ISUID | S_ISGID | S_IXGRP);

 system("ls -l my_file");

}

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

$ <b>a.out</b>

-rwx------ 1 andy user 0 Jan 6 19:28 my_file

-rws------ 1 andy user 0 Jan 6 19:28 my_file

-rws--1--- 1 andy user 0 Jan 6 19:28 my_file

-rws--s--- 1 andy user 0 Jan 6 19:28 my_file

Перемещение по файловой системе

Каждый процесс имеет два атрибута, связанных с файловой системой — корневой каталог (root directory) и текущий рабочий каталог (current working directory). Когда некоторый файл адресуется по имени (например, в системных вызовах open(2), creat(2) или readlink(2)), ядро системы производит поиск файла, начиная с корневого каталога, если имя файла задано как абсолютное, либо текущего каталога, если имя файла является относительным. Абсолютное имя файла начинается с символа '/', обозначающего корневой каталог. Все остальные имена файлов являются относительными. Например, имя /usr/bin/sh является абсолютным, в то время как mydir/test1.c или ../andy/mydir/test1.c — относительным, при котором фактическое расположение файла в файловой системе зависит от текущего каталога.

1 ... 40 41 42 43 44 45 46 47 48 ... 156 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название