Изменение прав доступа к файлу

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

chmod [-R] права файл_или_каталог [файл2 ...]

Необязательный ключ -R распространяет действие команды рекурсивно на содержимое каталогов, если таковые обнаружатся в списке файлов, переданном в командной строке.

Права указываются в одной из двух нотаций: числовой и символьной.

Числовая нотация команды chmod

Набор прав разбивается на 4 тройки:

sst rwx rwx rwx

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

Примеры

--- rwx rwx rwx
--- rwx r-x r-x
--- rw- r-- ---
ss- rwx r-x r-x
--t rwx r-x r--

Лидирующий ноль можно опускать.

Символьная нотация команды chmod

В отличие от числовой нотации символьная нотация указывает не права, а изменения прав. Нотация состоит из 3 элементов, указанных в следующей последовательности: чьи права изменять, каким образом, и какие именно права.

Чьи права изменять Каким образом Какие именно права
u (владельца) g (группы) o (всех остальных) a (всех трех категорий) + (добавить) - (убрать) r w x
= (сделать такими же) u (как у владельца) g (как у группы) o (как у всех остальных)
u g + - s (SUID или SGID)
u + - t (Sticky bit)

Примеры:

Добавить группе право на запись:

chmod g+w file

Убрать у прочих права на запись и исполнение:

Chmod o-wx file

Добавить владельцу и группе права на чтение и запись:

chmod ug+rw file

Установить права прочих такими же, как у группы

chmod o=g file

Установить права прочих и группы такими же, как у владельца

chmod og=u file

Несколько изменений можно перечислять через запятую. Например, добавить владельцу право на исполнение, а у группы и прочих убрать право на запись:

chmod u+x,go-w file

Поиск в файловой системе

Поиск по содержимому файлов (grep)

Команда

grep [-inv] подстрока файл [файл2 ...]

производит поиск указанной подстроки в указанных файлах.

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

Основные ключи:

-i - игнорировать отличия верхнего и нижнего регистра (на нерусифицированных системах работает только для латиницы),

-n - вместе со строками выводить и их номера,

-v - выводить строки, в которых не найдена указанная подстрока.

Полное описание ключей команды grep см. в справочнике man.

Поиск файлов (find)

Команда



find каталог [выражение ... ]

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

Отсутствие выражений - всегда "ИСТИННО" (то есть в это случае find рекурсивно выводит имена всех файлов каталога и его подкаталогов).

Основные выражения find

(Примечание: ниже везде, где есть числовой параметр N, перед ним можно ставить плюс или минус, при этом справедливо следующее правило: "+N" означает "больше, чем N", "-N" означает "меньше, чем N", просто число N означает "равно N".)

-name шаблон_имени_файла

истинно, если имя файла соответствует шаблону; в шаблоне можно использовать символ '*' и т.п. - при этом шаблон надо взять в одинарные кавычки.

-perm ABCD

истинно, если права доступа к файлу точно равны указанным (ABCD); права записываются в числовой нотации команды chmod.

-perm -ABCD

истинно, если указанные права доступа (ABCD) имеются у файла; права записываются в числовой нотации команды chmod.

-type T

истинно, если тип файла равен указанному типу T, где Т - один из символов: f (обычный файл), d (каталог), l (символическая связь), b или c (блочное или символьное устройство), p (конвейер).

-user имя_пользователя

истинно, если файл принадлежит указанному пользователю.

-group имя_группы

истинно, если файл принадлежит указанной группе.

-size Nc

истинно, если размер файла равен N байт (без символа 'c' размер интерпретируется в 512-байтных блоках).

-mtime N

истинно, если содержимое файла было модифицировано N суток назад (т.е. N*24 часов назад).

-atime N

истинно, если последний доступ к файлу имел место N суток назад (т.е. N*24 часов назад).

-ctime N

истинно, если атрибуты файла были модифицировано N суток назад (т.е. N*24 часов назад).

-newer имя_файла

истинно, если файл был модифицирован позже, чем указанный.

-nouser

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

-nogroup

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

-a

операция "И" в явном виде.

-o

операция "ИЛИ".

\( \)

скобки для группировки выражений, если это необходимо (обратите внимание на наличие обратных слэшей).

Порядок выполнения работы

Установите виртуальную машину и ОС семейства UNIX. Выполните в командной строке перечисленные ниже действия. Протоколируйте процесс выполнения (с помощь скриншотов или записывая команды) и представьте их в отчете.

1. Получите справку о команде printf с использованием разных ключей.

2. Создайте 2мя способами 2 файла (с помощью touch и >). Не забудьте просмотреть содержимое каталога, где вы создали файлы.

3. В домашнем каталоге создайте 2 подкаталога d1 и d2 с помощью отдельных команд для каждого каталога и одной команды для обоих каталогов.

4. Создайте в домашнем каталоге текстовый файл test.txt и скопируйте его в заранее созданный каталог d1.

5. Рекурсивно скопируйте каталог d1 в каталог d2. Просмотрите содержимое домашнего и d2 каталогов

6. Создайте файл abc.txt и измените его имя на cba.txt. Далее переместите этот файл в каталог d2. Создайте также каталог d3 и переместите его в каталог d2.

7. Создайте текстовый файл b.txt и символическую связь для него c.txt. Просмотрите содержимое рабочего каталога и обратите внимание на файл c.txt и его размер: 5 - это число символов в имени "b.txt".

8. Создайте жесткую связь для файла b.txt – d.txt. Просмотрите содержимое рабочего каталога и обратите внимание на значение второй колонки для b.txt и d.txt и размер этих файлов, заметьте также время последней модификации. Файлы b.txt и d.txt абсолютно равноправны, т.к. это два разных имени одного и того же физического файла. С помощью команды touch измените время последней модификации файла d.txt и выведите данные об обоих файлах (обратите внимание на время последней модификации). Далее выведите номера индексных дескрипторов этих файлов и обратите внимание на их значения (см. команду ls)

9. Удалите файлы b.txt, c.txt и d.txt. Рекурсивно удалите каталог d1 в каталоге d2 (с просьбой подтверждения удаления), а также каталог d3 из каталога d2 (также рекурсивно, но без запроса подтверждения). Удалите оставшееся содержимое каталога d2 и удалите ПУСТОЙ каталог.

10. Создайте в текстовом редакторе файл test.txt и внесите в него произвольный текст. ПОЛНОСТЬЮ выведите содержимое этого файла, а затем повторите, но ПОСТРАНИЧНО.

11. Выведите список каталогов верхнего уровня (/).

12. Зайдите в каталог etc. Выведите сообщение, выводимое при входе в систему (motd), а также имя компьютера (nodename).

13. В каталоге dev выведите полную информацию о устройствах. Определите, к какому классу относятся данные устройства: оперативная память (mem), жесткий диск, терминал и псевдотерминал. Просмотрите содержимое каталога null (весь вывод, направленный в файл /dev/null, уничтожается, а ввод из него имеет нулевую длину,обратите внимание, что это псевдоустройство того же класса, что и /dev/mem).

14. Просмотрите содержимое каталогов /home, /sbin, /kernel. Определите их назначение.

15. Выведите информацию о смонтированных файловых системах, а также данные о размерах файловых систем в килобайтах.

16. Выведите информацию о суммарном размере файлов текущем каталоге и его подкаталогах (рекурсивно), а затем только о каталоге.

17. Просмотрите список всех пользовательских учетных записей.

18. Выведите данные обо всех группах в системе.

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

20. Поэкспериментируйте с командой chmod на файлах своего каталога. Используйте сначала числовую, а потом символьную нотацию. Попробуйте все приведенные варианты. Результаты контролируйте командой ls -l.

21. Произведите поиск в файле b.txt без ключей и используя различные ключи. Произведите поиск в нескольких файлах.

22. Найдите в домашнем каталоге все файлы, начинающиеся на "a" или другой символ (find . -name 'a*')

23. Найдите в домашнем каталоге все исполнимые владельцем файлы, начинающиеся на "a" (find . -name 'a*' -perm -0100)

24. Найдите в домашнем каталоге все файлы, модифицированные более 2 дней назад (find . -mtime +2)

3. Контрольные вопросы
  1. Что такое виртуальная машина и каковы ее возможности?
  2. Что считается файлами в OC UNUX?
  3. Какие типы файлов существуют в OC UNUX?
  4. Объясните назначение связей с файлами и способы их создания.
  5. Какие методы создания и удаления файлов, каталогов Вы знаете?
  6. Какой командой можно получить список работающих пользователей и сохранить его в файле?
  7. Как производится освобождение блоков данных, занятых под файл?
  8. В чем заключаются функции монтирования и размонтирования файловой системы и какими командами они выполняются?
  9. Что определяет атрибуты файлов и каким образом их можно просмотреть и изменить?
  10. Каковы права доступа к файлу, при которых владелец может выполнять все операции, а прочие пользователи - только читать?
  11. В чем заключается поиск по шаблону?
  12. Какие типы поиска в файловой системе Вам известны?