Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_ПСРВ.doc
Скачиваний:
32
Добавлен:
12.02.2016
Размер:
1.6 Mб
Скачать

1.5. Зависимости

Важно заметить, что права доступа, которые имеет файл зависят также от прав доступа к каталогу, в котором этот файл находится. Например, даже если файл имеет -rwxrwxrwx, другие пользователи не смогут до него добраться, если у них не будет прав на чтение и выполнение каталога, в котором находится файл. Например, если Student захочет ограничить доступ ко всем своим файлам, он может просто изменить права доступа своего домашнего каталога /home/student на drwx------. Таким образом, никто другой не будет иметь доступ в его каталог, а, следовательно, посторонним будут недоступны и все файлы. Так что Student может не заботиться об индивидуальной защите своих файлов.

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

Обычно пользователи QNX весьма открыты всеми своими файлами. Обычно файлам устанавливается защита -rw-r--r--, которая позволяет другим пользователям читать файлы, но ни коим образом их не менять. Каталогам обычно устанавливаются права доступа drwxr-xr-x, что позволяет другим пользователям ходить с правами экскурсантов по вашим каталогам. Но ничего в них не трогать и не записывать.

Но многие пользователи хотят держать других пользователей подальше от своих файлов. Установив права доступа файла, -rw------- вы никому не покажете этот файл и не дадите записать в него. Также хорошо закрывает от всех файлы защита соответствующего каталога drwx------ .

1.6. Изменение прав доступа

Команда chmod используется для установки (изменения) прав доступа файла. Только владелец файла может менять права доступа к нему.

Синтаксис команды имеет вид:

chmod {a,u,g,o}{+,-}{r,w,x} <filenames>

Кратко, вы выбираете из all (все), user (пользователь), group (группа) или other (другие). Далее указываете, либо вы добавляете права (+), либо лишаете прав (-). И наконец, вы указываете один или несколько режимов: read, write или execute. Несколько примеров допустимых команд:

chmod a+r stuff

Дает всем пользователям право читать файл stuff.

chmod +r stuff

То же самое, что и ранее (a - по умолчанию).

chmod og-x stuff

Лишает права на выполнение всех, кроме владельца.

chmod u+rwx stuff

Разрешает владельцу все (read, write и execute).

chmod o-rwx stuff

Запрещает все (read, write и execute) пользователям категории другие (other).

2. Упражнения

УПРАЖНЕНИЕ 2.1.

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

УПРАЖНЕНИЕ 2.2.

Проверьте возможность изменения прав доступа к каталогам и файлам и ограничения на доступ.

УПРАЖНЕНИЕ 2.3.

Для рабочих файлов домашнего каталога проверьте возможность установки жёстких и символических связей. Определите файловые индексы.

УПРАЖНЕНИЕ 2.4.

Просмотрите перечень процессов, запущенных пользователем, и всех процессов, выполняемых на компьютере (команды ps и psaux), проведите их анализ.

3. Содержание отчёта

  1. Номер практической работы.

  2. Название и цель работы.

  3. Краткая характеристика рассмотренных в работе команд.

  4. Примеры использования команд, анализ результатов выполнения упражнений 2.1-2.4.

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ №5

Работа с текстовыми файлами

Цель – знакомство с командами, работающими с текстовыми файлами

1. Краткие теоретические сведения

1.1. Команда-фильтр grep: поиск строки по файлам

Команда grep – одна из самых полезных и часто используемых. Она столь же важна для нахождения файлов с нужным содержимым, как ls -- для нахождения файлов с нужным именем. Поэтому стоит хорошо освоить grep -- умелое владение ей позволяет сэкономить массу времени и сил. Кроме того, регулярные выражения широко используются во многих других программах.

Часто возникает задача: надо найти, в каком файле встречается некое слово или фраза. Для этого служит команда "grep". Она ищет "образец" в указанных файлах (или в стандартном вводе, если файлы не указаны) и печатает все строки, в которых он встречается. То есть, она предназначена для поиска строк, соответствующих шаблону, заданному в параметре Шаблон. Каждая найденная строка записывается в стандартный поток вывода.

В шаблоне (образце поиска) могут быть указаны специальные символы *, ^, ?, [, ], \(, \), \{, или \}. Например, для поиска строк в файле pgm.s, начинающихся с любой буквы в любом регистре, введите:

grep "^[a-zA-Z]" pgm.s

Нажмите Enter.

Появится список строк файла pgm.s, которые начинаются с какой-либо буквы.

Вообще-то, образец поиска для grep -- это не просто строка, а так называемое "регулярное выражение", некоторые символы в котором приобретают специальное значение:

  • "." означает "любой символ".

  • "*" -- любое количество повторений (0 и больше) предшествующего символа.

  • "^" -- начало строки.

  • "$" -- конец строки.

  • Специальное значение имеют также символы ?,  [,  ],  {,  },  |,  + , \.

Поскольку большинство этих символов имеют специальное значение и для оболочки, то образец следует указывать в одинарных кавычках (прямых апострофах).

Для просмотра всех строк файла sort.c, которые не совпадают с шаблоном, введите:

grep -v bubble sort.c

Нажмите Enter.

Появится список строк файла sort.c, не содержащих слова bubble.

Для просмотра всех строк вывода команды ls, которые содержат слово staff, введите:

ls -l | grep staff

Нажмите Enter.

Пример (найти строку "no"):

grep no *

errs:/bin/ls: file10: No such file or directory

errs:/bin/ls: file11: No such file or directory

proverbs:Dead men tell no tales.

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

С ключом "-i" grep ищет, не различая маленькие/заглавные буквы:

Пример (найти все символьные линки в директории /etc):

ls -l /etc | grep '^l'

lrwxrwxrwx 1 root root 21 Dec 9 20:55 initrunlvl -> ../var/run/initrunlvl

lrwxrwxrwx 1root root 38 Dec 9 21:04 localtime -> ../usr/share/zoneinfo/Asia/Novosibirsk

lrwxrwxrwx 1 root root 11 Dec 9 20:44 rmt -> ../sbin/rmt*

Здесь используется то, что для символьных линков ls первым символом строки (тип файла) выводит букву "l".

Если результат grep слишком большой и не помещается на экран, то его можно "переправить" команде просмотра, например, more. Пример (показать список всех поддиректорий из директории /usr/lib):

ls -l /usr/lib | grep '^d' | more

Вообще говоря, в конвейере может участвовать сколько угодно команд. Так, команда

ls -l /usr/doc | grep '^d' | grep 'lib' | more

делает почти то же, что и в предыдущем примере, но отбирает только те директории, в имени которых есть "lib".