Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Забродин УНИХ основы командного интерфейса 2010

.pdf
Скачиваний:
160
Добавлен:
16.08.2013
Размер:
1.33 Mб
Скачать

Обобщение свойства команды ln:

-каждая ссылка на входной файл добавляет +1 к числу ссылок входного файла;

-все связанные файлы имеют совпадающие описатели в каталогах;

-если изменяется содержимое одного из связанных файлов, то меняется содержимое всех связанных файлов, так как связанные файлы разделяют одни и те же данные на диске;

-если удалить один из связанных файлов, то сокращается число взаимных ссылок на -1.

3.7.УПРАВЛЕНИЕ ПРАВАМИ ДОСТУПА К ФАЙЛАМ

ИКАТАЛОГАМ

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

Права процессов пользователей при доступе к файлу кодируются в атрибутах защиты файла. Атрибуты сопровождают каждый файл, хранятся в описателях файлов, на которые в каталоге имеются ссылки, и доступны для анализа и изменения посредством специальных команд ОС UNIX. Атрибуты защиты файла определяют права доступа трем видам процессов:

-процессам пользователя — владельца файла (u — user),

-процессам группы владельца файла (g — group),

-процессам остальных пользователей (o — other), не попавших ни в одну из двух предыдущих категорий.

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

r — разрешение на чтение файла или на выполнение проце-

дуры, для каталога — просмотр содержимого каталога (только список всех файлов);

w — разрешение модификации или удаления файла, для ка-

талога — включение или удаление файлов;

51

x — разрешение выполнения файла (совместно с - r), для ка-

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

Например, полный листинг каталога /udd/user1/lev может иметь следующий вид:

-rwxr-xr-x

1 lev

user1

171 Mar 4 14:20

fil1.c

drwxr-xr-x

2 lev

user1

32 Mar 4 14:51

hh

Здесь файл fil1.c, владельцем которого является пользователь со входным именем lev, является обычным, содержит исходный текст программы на языке Си длиной 171 байт, доступен владельцу для чтения, записи и выполнения; членам группы и прочим пользователям — только для чтения и выполнения.

Директория hh защищена для включения новых и удаления существующих файлов.

Для изменения значений кодов защиты только указанных в команде файлов служит команда

chmod <коды защиты> <список_файлов>

Коды защиты (r, w, x) могут быть заданы только владельцем файла в символьном или числовом виде. Атрибуты задаются для владельца (u), его группы (g) и остальных пользователей (o) или для всех категорий пользователей одновременно (a).

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

=— присвоить значения кодов доступа (замена существующих);

+— добавить значения кодов доступа;

-— отобрать права доступа.

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

доступа:

rw-rw-rw- — для файла; rwxrwxrwx — для каталога.

52

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

$ chmod u+x shproc1 $ shproc1

< Выполнение программы из файла shproc1 >

$

Эти действия необходимы, в частности, при формировании и выполнении shell-процедуры.

Пример:

 

$ ls -l f1

 

-rw-rw-r-- .......................

f1

$ chmod ug+x,o-r f1

 

$ ls -l f1

 

-rwxrwx--- ........................

f1

$

 

Пример:

$ chmod u+w,go+x f2 $ chmod u=rw,g=r f3

$ chmod a+rx f1 — в данном случае файл f1, благодаря одновременному заданию прав rx, становится доступным для исполнения всем пользователям;

$ chmod a=rwx f2 — предоставляются все права всем категориям пользователей.

Числовые значения кодов защиты кодируются трехразрядным восьмеричным числом, где существование соответствующего кода соответствует наличию единицы в двоичном эквиваленте восьмеричной цифры этого числа, отсутствие атрибута — нулю.

Например:

Символьное представление: rwx r-x r-- Двоичное представление: 111 101 100 Восьмеричное представление: 7 5 4 Поэтому следующая команда:

$ chmod 0754 f3

эквивалентна, в частности, команде $ chmod u=rwx,g=rx,o=r f3.

53

В результате выполнения команд в любой из приведенных форм коды доступа файла f3 приобретут следующий вид:

$ ls -l f3

-rwxr-xr-- ....................... f3

$

Таким образом, файл f3 является выполняемым для владельца и группы, чтение его разрешено всем пользователям, модифицировать файл может только владелец. Подчеркнем еще раз, что для выполнения файл должен иметь права доступа r и x.

$ chmod 000 f4 — отмена всех прав доступа.

Примеры: $chmod -w fout

#запретили прямое удаление файла fout $rm fout

fout: mode? Y

#файлудаляется только приподтвержденииудаления $chmod -w .

#запретили модификацию текущего каталога,

#для chmod текущий каталог указывать обязательно в явном

#виде (здесь — точкой)

$rm fout <удаления нет>

Примеры управления правами доступа к каталогам:

$chmod a-rwx, u=rw dir1 $cd dir1

bash:cd:dir1:Permission denied

#каталог dir1 не может быть сделан текущим, так как нет права

#х для каталога;

$ls dir1

#просмотр каталога разрешен, так как есть право r; f1

f2

$ls -l dir1/*

#поиск конкретных отдельных всех файлов“*”;

<файлы не найдены>

54

#так как не разрешен поиск по каталогу, не указано право х; total 0

$cat dir1/f1 <файл не найден>

#то же для конкретного файла f1;

$

Еще пример: $chmod u=wx dir2 $ls dir2

#это каталог, а не обычный файл; bash:ls:dir1:Permission denied

#так как нет разрешения на просмотр каталога; $cat dir2/ff

<тект файла>

#так как есть право х — поиск по каталогу и назначение его

#текущим;

$cd dir2 $pwd /home/lev/dir2

$

Некоторые правила:

-все каталоги, входящие в полные маршрутные имена файлов, должны иметь права на выполнение (х);

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

Стандартные значения кодов прав доступа устанавливает администратор системы. Однако пользователь в ksh, bash может из-

менить временно (до конца сеанса работы) значение кодов защиты для всех своих новых файлов с помощью команды установки маски:

$umask [-r] <режим-доступа>

Собственно маска — это двоичный код, с этим кодом и двоичным кодом защиты, установленным ранее, выполняются некоторые логические операции: в результате операции вычисляются новые коды защиты. В ksh и bash возможно символьное представление кодов защиты в umask, а собственно численное значение маски

55

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

ключ-Sвыводитнаэкрантекущиесимвольныезначениякодов; без ключа — команда выводит численное значение маски.

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

зованием команды umask:

 

-rw- rw- rw-..............................

...............f5

 

$umask g=r, o=

f5

 

$ls –l f5

 

 

-rw- r-- ---......

..........................................f5

 

$

 

 

Пример:

 

 

$touch testfil1

 

 

$ls -l testfil1

 

 

-rw- rw- rw- ...............

............0 <11:08>

testfil1

$umask a-rwx, u=rw, g+r

#этиправабудутиметьвсеновыефайлы; $umask -S

u=rw, g=r, o= $umask

137

#численное значение текущей маски; $touch testfil2

$ls -l testfil2

-rw- r-- --- 0 <11:12> testfil2

#новый файл

Ниже приведенный пример иллюстрирует, как работает команда mesg. Вспомним, что терминал пользователя — это тоже файл, т.е. обрабатывается как файл типа "с" – устройство с байтовым (посимвольным) обменом информацией:

$who am i lev tty3

# tty3 имя терминала пользователя; $mesg y

$ls -l /dev/tty3

crw- -w- -w- ......lev user <> /dev/tty3

56

# это файл терминала; $mesg n

$ls -l /dev/tty3

 

crw- --- ---.................

lev user <>

/dev/tty3...........................................

 

Команда mesg обращается к утилите chmod для файла устройства с целью добавления или отъема прав на запись (w) для членов группы и остальных пользователей. Именно этим достигается блокирование и разблокирование возможности вывода на данный экран сообщений других пользователей.

Имеются и другие возможности управления правами доступа. Рассмотрим еще две команды. Рассматриваемые ниже функции может выполнять только владелец файла или администратор.

chown – владелец передает права владения данным файлом другому пользователю или группе.

$chown нов_владелец имя_файла

Пример:

 

$cp f1

/home/ira/f1

$ls -l

/home/ira/f1

-rw- r-- --- 1.......

lev.....user...< f1

#владелец копии — lev; $chown ira /home/ira/f1

#смена владельца;

$ls -l

 

-rw- r-- --- 1.......

ira......user...<> f1

#владельцем копиифайластала ira, ночитать (r) копию может

#иlev какчлен общей группы.

Также можно сменить и группу.

chgrp — передача прав другой группе (сменить группу). $chgrp нов_группа имя_файла

Пример:

 

$ls -l f2

 

-rw- r-- --- ...................

lev user <> f2

$chgrp class

f2

 

57

$ls -l f2

 

-rw- r-- --- .................

lev class <> f2

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

#имеет права доступа к файлу;

$chown serg f2

 

-rw- r-- --- ................

serg class <> f2

#сменили владельца в новой группе. Старая группа переходит

#в разряд (о). Предыдущий владелец переходит в разряд (g).

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

Вопросы для самоконтроля

1.Файлы операционных систем. Структуры имен ОС UNIX. Стандартные расширения имен файлов.

2.Последовательность подготовки и выполнения программ в среде ОС UNIX. Стандартные расширения имен файлов обрабатывающих программ. Примеры.

3.Генерация имен файлов. Назначение. Примеры.

4.Структура системы каталогов UNIX. Назначение каталогов различного типа.

5.Разновидности маршрутных имен файлов. Примеры.

6.Структура листинга каталога ОС UNIX. Средства командного языка для управления листингом. Примеры.

7.Средства и возможности командного языка ОС UNIX для управления каталогами. Примеры.

8.Команды поиска файлов в системе каталогов ОС UNIX.Возможности формирования условий поиска. Примеры.

9.Средства командного языка для поиска строк и файлов по содержимому строк в ОС UNIX. Примеры.

10.Обзор команд управления файлами ОС UNIX. Примеры.

58

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

12.Особенности применения команд копирования и перемещения файлов в системе каталогов ОС UNIX. Примеры.

13.Назначение и возможности команды организации ссылок на файлы. Примеры.

14.Права доступа к файлам и каталогам в ОС UNIX. Кодирование прав доступа. Примеры.

15.Команды управления правами доступа к файлам и каталогам в ОС UNIX. Особенности применения. Примеры.

16.Средства командного языка ОС UNIX для передачи прав доступа. Примеры.

59

4. КОНВЕЙЕРЫ И ФИЛЬТРЫ

Операционная система UNIX обеспечивает обмен информацией (управляющей и прикладной) между процессами. Обмен данными между процессами осуществляется через программный канал. По сути, это некоторый системный файл, в который одна команда пишет информацию, а другая — читает. Если команды считывают информацию со стандартного буферного системного файла ввода (stdin) и направляют в стандартный буферный файл вывода (stdout), то такие команды могут быть объединены в единую командную строку – конвейер. Конвейер позволяет использовать вывод одной команды в качестве ввода другой. Конвейер по сути это программный канал для создания потока данных от команды к команде.

Программный канал создается автоматически интерпретатором shell при обнаружении в командной строке команд, связываемых специальным символом “|” (вертикальная черта):

команда_1 | команда_2 | команда_3 | ... | команда_n

Конвейер представляет собой технологическую цепочку обработки исходной информации.

Пример:

$ ls > buffile

$ wc -l < buffile 20

$ rm buffile

$

Эта же задача может быть решена проще и более компактно с использованием конвейера:

$ ls | wc -l

$

Конвейер можно использовать для формирования новых команд и дальнейшего их многократного выполнения:

$cat>count who/wc –l <ctrl.D>

$chmod 711 count $count

………

$count

………

$

60