- •2.1. Введение
- •2.2. Вопросы, относящиеся к команде who
- •2.2.1. Программы состоят из команд
- •2.3. Вопрос 1: Что делает команда who?
- •2.3.1. Обращение к справочнику
- •2.4. Вопрос 2: Как работает команда who?
- •2.4.1. Мы теперь знаем, как работает who
- •2.5. Вопрос 3: Могу ли я написать who?
- •2.5.1. Вопрос: Как я буду читать структуры из файла?
- •2.5.2. Ответ: Использование open, read и close
- •2.5.3. Написание программы who 1.С
- •2.5.4. Отображение записей о вхождениях в систему
- •2.5.5. Написание версии who2.С
- •2.6. Проект два: Разработка программы ср (чтение и запись)
- •2.6.1. Вопрос 1: Что делает команда ср?
- •2.6.2. Вопрос 2: Как команда ср создает файл и как пишет в него? Создание/транкатенация файла
- •2.6.3. Вопрос 3: Могу ли я написать программу ср?
- •2.6.4. Программирование в Unix кажется достаточно простым
- •2.7. Увеличение эффективности файловых операций ввода/ вывода: Буферирование
- •2.7.1. Какой размер буфера следует считать лучшим?
- •2.7.2 Почему на системные вызовы требуется тратить время?
- •2.7.3. Означает ли, что наша программа who2.С неэффективна?
- •2.7.4. Добавление буферирования к программе who2.С
- •2.8. Буферизация и ядро
- •2.8.1. Если буферизация столь хороша, то почему ее не использует ядро?
- •2.9. Чтение файла и запись в файл
- •2.9.1. Выход из системы: Что происходит?
- •2.9.2. Выход из системы: Как это происходит
- •2.9.3. Смещение текущего указателя: Iseek
- •2.9.4. Кодирование выхода из системы через терминал
- •2.10. Что делать с ошибками системных вызовов?
- •3.1. Введение
- •3.2. Вопрос 1: Что делает команда is?
- •3.2.1. Команда Is выводит список имен файлов и оповещает об атрибутах файлов
- •3.2.3. Наиболее употребимые опции
- •3.2.4. Первый ответ: Итоговые замечания
- •3.3. Краткий обзор дерева файловой системы
- •3.4. Вопрос 2: Как работает команда Is?
- •3.4.1. Что же такое каталог, в конце концов?
- •3.4.2. Работают ли системные вызовы open, read и close в отношении каталогов?
- •3.4.3. Хорошо, хорошо. Но как же мне прочитать каталог?
- •3.5. Вопрос 3: Могу ли я написать Is?
- •3.5.1. Что еще нужно делать?
- •3.6. Проект 2: Написание версии Is -I
- •3.6.1. Вопрос 1: Что делает Is-I?
- •3.6.2. Вопрос 2: Какработает Is -I?
- •3.6.3. Ответ: Системный вызов stat получает информацию о файле
- •3.6.4. Какую еще информацию можно получить с помощью системного вызова stat?
- •3.6.5. Чего мы достигли?
- •3.6.6. Преобразование числового значения поля mode в символьное значение
- •3.6.7. Преобразования числового представления идентификаторов собственника/группы в строковое представление
- •3.6.8. Объединение всего вместе: Is2.C
- •3.7. Три специальных разряда
- •3.7.1. Разряд Set-User-id
- •3.7.2Разряд Set-Group-id
- •3.7.3 Разряд Sticky Bit
- •3.7.4. Специальные разряды nls-l
- •3.8. Итоги для команды is
- •3.9. Установка и модификация свойств файла
- •3.9.1. Тип файла
- •3.9.2. Разряды прав доступа и специальные разряды
- •3.9.3. Число ссылок на файл
- •3.9.4. Собственник и группа для файла
- •3.9.5. Размер файла
- •3.9.6. Время последней модификации и доступа
- •3.9.7. Имя файла
3.9.3. Число ссылок на файл
Назначение этого атрибута будет рассмотрено в следующей главе. Если говорить кратко, то число ссылок соответствует числу обращений к файлу в разных каталогах. Если файл оказывается представлен в трех местах, в различных каталогах, то число ссылок будет равно 3.
Для увеличения значения счетчика ссылок нужно создать новые ссылки. (Вы можете использовать для этого системный вызов link.) Для уменьшения значения счетчика ссылок, необходимо удалить какое-то число ссылок. (Вы можете использовать для этого системный вызов unlink.)
3.9.4. Собственник и группа для файла
У каждого файла есть собственник. Для внутреннего представления в Unix собственник представлен числовым значением UID, а группа, использующая файл, представлена 1 числовым значением GID.
Установление собственника файла. В самом простом толковании собственник файла -F это пользователь, который создал файл. Но файлы создают не люди, а ядро. Ядро создает файл, когда в процессе выполняется системный вызов creat. Когда ядро создает файл, оно I устанавливает в качестве собственника файла эффективный UID процесса, который вы-I полнял вызов creat. Значение эффективного UID процесса обычно равно значению UID i того, кто породил процесс. Если в программе процесса был установлен разряд set-user-ID, I то эффективный UID будет равен значению того пользователя, кто является собственни-I ком этой программы. Все ясно?
Установление группы для файла. Обычно в качестве группы для файла устанавливается эффективный GID процесса, который создает файл. Но иногда значением GID для файла Г становится значение GID родительского каталога.
Ну, как? Такие действия напоминают процедуру, как если бы национальность устанавли-! валзеь по месту вашего рождения и не принимались во внимание ваши родители, которые г вас и создали. В системе делается нечто напоминающее эту процедуру.
Изменение собственника и группы для файла. Программа может изменять собственника | и группу для файла с помощью системного вызова chown. Например:
chown(«file1», 200,40);
Здесь происходит изменение пользовательского ID на 200, значение группового ID заменяется на 40 для файла с именем filel. Если какой-либо аргумент будет иметь значение -1, > то этот атрибут не модифицируется. Обычно пользователи не меняют собственника файла. Суперпользователь может установить в любой момент и для любого файла требуемое значение пользовательского ID и группового ID. Этот вызов обычно используется для установки и управления пользовательскими входами в систему. Собственник файла может изменить групповой ID файла в любой группе, к которой он принадлежит.
В итоге мы имеем следующую таблицу с характеристиками вызова:
chown |
|
НАЗНАЧЕНИЕ |
Изменение собственника или группового ID для файла |
INCLUDE |
#include < unistd.h > |
ИСПОЛЬЗОВАНИЕ |
int chownfchar *path, uidj owner, gidj group) |
АРГУМЕНТЫ |
path - путь к файлу owner - пользовательский ID для файла |
КОДЫ ВОЗВРАТА |
group - групповой ID для файла -1-при ошибке 0 - при успехе |
Команды Shell для изменения идентификаторов пользователя и группы для файлов
В shell есть обычные команды chown и chgrp, с помощью которых программы могут моди-И фицировать пользовательский ID и групповой ID для файлов. В одной команде с помощью И этих команд можно изменять UJD и GID для нескольких файлов. В документации изложе-fj ны все детали. В командах chown и chgrp пользователи могут задавать идентификаторы илЯ в числовом варианте, или в символьном - как имена пользователей и имена групп.
