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

Linux part 2

.pdf
Скачиваний:
35
Добавлен:
13.03.2015
Размер:
328.1 Кб
Скачать

мя, но до завершения дочерней программы. Каковы значения идентификатора родительского процесса дочерней программы до и после завершения родительской программы?

6.23.Модифицируйте решение задачи 6.22 так, чтобы спустя заданное время дочерний процесс завершал родительский, если он к этому времени не завершался сам.

6.24.Напишите группу shell-программ, взаимодействующих следующим образом. Основная программа запускает в фоновом режиме две shell-программы. Первая дочерняя программа подсчитывает число файлов в текущем каталоге, а затем переходит в состояние ожидания, пока вторая дочерняя программа не завершит подсчет слов в указанном файле, после чего дочерние программы завершаются вместе.

6.25.Напишите группу shell-программ, взаимодействующих следующим образом. Основная программа запускает в фоновом режиме две дочерние программы. Первая дочерняя программа подсчитывает строки в некотором указанном файле, а вторая – подсчитывает слова в другом файле. Первая завершившая работу программа ожидает другую, а затем программы «меняются» файлами

ипроделывают ту же работу, начав ее одновременно.

6.26.Напишите группу shell-программ, взаимодействующих следующим образом. Основная программа запускает в фоновом режиме пять дочерних программ, каждая их которых выполняет свою работу, состоящую из двух этапов. Второй этап все дочерние программы начинают одновременно. Если хотя бы одна дочерняя программа не успела завершить свою работу за заданное время, родительская программа уничтожает все дочерние процессы.

46

7. ПРАВА ДОСТУПА И ЗАЩИТА ФАЙЛОВ

Традиционная модель защиты файлов UNIX, построенная на установлении прав доступа для владельца, группы и остальных пользователей, довольно проста, но не достаточно гибка и удобна для применения в больших многопользовательских системах. В ряде систем реализована возможность защиты файлов с использованием списков управления доступом (ACL access control lists). Становится возможным индивидуально устанавливать права доступа. К сожалению, реализация этой возможности в разных системах различна.

В системе HP-UX используются команды lsacl и chacl. Доступ к файлу указывается комбинациями (пользователь.группа, режим). Символ % означает любого пользователя или группу. Для каждого файла можно задать до 13 пар прав доступа. Посмотреть установленные наборы можно с использованием lsacl, а изменить или удалить с помощью chacl.

В ОС Solaris и Linux для этих целей используются команды getfacl и setfacl (что соответствует стандарту POSIX).

С целью обратной совместимости с программами, не поддерживающими ACL, реализована возможность задания маски, позволяющей ограничить списки доступа пользователей и групп, а также установить списки прав по умолчанию на каталог (следует предварить элемент списка префиксом d:), что позволит создаваемым в нем файлам и каталогам получить права доступа по умолчанию (включая маску). В этом случае umask не используется. Пример вывода getfacl для каталога:

#file: dir1

#owner: u1

#group: staff user::rwx

group::rwx #effective:rwx mask:rwx

other:---

default:user::rwdefault:user:u3:rwx default:group::r-- default:group:g1:---

default:mask:rwx default:other:---

47

Символ # считается началом комментария до конца строки. Эффективные права являются результатом ограничения по маске, что даёт удобный инструмент временного ограничения прав. Кроме того ключевые слова, такие как user, могут быть заменены своей первой буквой.

Определить файлы и каталоги, для которых установлены списки управления доступом, можно по выводу команды ls –l. Список прав доступа для таких файлов оканчивается знаком +.

Пример 1. Для файла file установить владельцу полный доступ, а другим пользователям запретить выполнение программы file:

setfacl -s u::rwx,g::---,o::---,m:rw- file

Пример 2. Для файла file установить дополнительно право на чтение пользователю u1, пользователю u2 и членам группы g1 – право на чтение и запись:

setfacl –m u:u1:r-- ,u:u2:rw-,g:g1:rw- file

Пример 3. Установить права доступа к файлу file2 такими же, как и к файлу file1:

getfacl file1 | setfacl -f - file2.

Пример 4. Пользователю u1 предоставить возможность читать все Ваши файлы. Данный пользователь входит в группу g1, которой не принадлежит ни один файл пользователя u1. Файловая система не поддерживает ACL.

cp /usr/bin/cat mycat chown u1 mycat

chgrp g1 mycat chmod 4710 mycat

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

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

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

chown – изменение владельца файла;

48

chgrp – изменение группы;

umask – маскирование прав доступа;

setfacl – установка режима доступа к файлу с помощью списков управления доступом (ОС Solaris);

getfacl – просмотр режимов доступа, установленных с помощью списков управления доступом (ОС Solaris);

su – переключение идентификатора пользователя;

newgrp – переключение идентификатора группы.

Упражнения

7.1. Создайте файл с помощью команды cat. Кто и какие права доступа имеет к этому файлу? Можете ли Вы прочитать этот файл?

7.2. Установите права доступа к файлу -w- --- ---

. Сможете ли

Вы теперь прочитать этот файл?

 

7.3.Установите права доступа к файлу rw- --- ---. Можете ли Вы теперь прочитать свой файл? А Ваш товарищ? Как нужно изменить права доступа, чтобы Ваш товарищ мог прочитать файл?

7.4.Задайте маску, разрешающую запись и изменение файла только Вам. Создайте новый файл. Попросите товарища удалить Ваш файл. Какова реакция системы на его попытку? Можете ли Вы удалить свой файл?

7.5.Что нужно сделать, чтобы созданные Вами с помощью vi файлы shell-программ были не доступны для выполнения и чтения другим пользователям?

7.6.Измените права доступа к своему домашнему каталогу так, чтобы Ваш товарищ не смог прочитать его содержимое или записать что-либо.

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

49

7.8.Создайте файл с правами доступа rw- r-- ---. Назначьте владельцем файла Вашего товарища. Есть ли у Вас доступ к файлу? Можете ли Вы снова стать владельцем файла?

7.9.Кто является владельцем файла /etc/passwd? К какой группе он принадлежит? Кто имеет право изменить владельца или группу? Можете ли Вы внести изменения в файл?

7.10.Создайте копию файла /etc/passwd. Можете ли Вы внести изменения в файл-копию?

7.11.Определите права доступа к файлу устройства, ассоциирующегося с Вашим терминалом. Кто является владельцем этого файла? Выполните команды mesg y и mesg n, одновременно следя за изменениями прав доступа к этому файлу. Что фактически делает команда mesg?

7.12.Обеспечьте возможность вывода на Ваш терминал сообщений только некоторого определенного пользователя.

7.13.Находясь в домашнем каталоге, создайте каталог T с непустым подкаталогом F. Установите права доступа к каталогу T r-- --- ---. Посмотрите содержимое каталога T. Посмотрите содержимое каталога F. Объясните результат.

7.14.Установите права доступа к каталогу T --x --- ---. Посмотрите содержимое каталога T. Посмотрите содержимое каталога F. Объясните результат.

7.15.Напишите программу, которая для файлов, указанных в командной строке, устанавливала бы бит выполнения для владельца.

7.16.Создайте каталог, содержимое которого Вы можете распечатать, но не можете ни удалить файл, ни создать новый.

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

50

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

7.19.Можно ли разрешить копировать файл из Вашего каталога только трем Вашим товарищам? Если да, то как это сделать?

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

7.21.В каталоге из задачи 7.18 создайте новый каталог. Обладает ли он свойствами родительского? Почему? Что нужно сделать, чтобы эти свойства были у каталога по умолчанию после его создания?

51

8. КОМАНДА find. РЕЗЕРВНОЕ КОПИРОВАНИЕ

Для выполнения заданий данного раздела потребуются команды:

find – поиск файлов, удовлетворяющих заданным требованиям;

cpio – копирование данных со стандартного ввода на стандартный вывод;

tar –- создание архива на магнитной ленте и восстановление из ар-

хива;

dd –- бинарное копирование файлов.

Пример 1. Найти и стереть текстовые файлы и их резервные копии, последнее изменение которых было более недели назад

find ~ \( -name *.bak -o -name '*.txt' \) \ -mtime +7 -exec rm {} \;

Пример 2. Создать архив домашнего каталога

cd ~

tar -cvf homearchive.tar * .*

Извлечь из архива

tar -xvf homearchive.tar

Упражнения

8.1.Создайте псевдоним rmzero, удаляющий из Вашего личного каталога все файлы нулевого размера.

8.2.Создайте псевдоним rmold, предлагающий к удалению все файлы с расширением tmp, к которым не было доступа по чтению

втечение последнего месяца (с подтверждением каждого удаления).

8.3.Создайте архив всех файлов с расширением doc в Вашем личном каталоге.

52

8.4.Используя команды find и cpio, создайте копию какого-либо подкаталога Вашего личного каталога. Удалите несколько файлов из Вашего личного каталога. Восстановите удаленные файлы из архива-копии.

8.5.Создайте псевдоним arcold, создающий архив всех файлов,

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

8.6.Выдайте на экран список всех файлов из заданного каталога и его подкаталогов, к которым не было доступа более восьми дней.

8.7.Выдайте на экран список всех файлов из заданного каталога и его подкаталогов, которые изменились за последние восемь дней.

8.8.Уничтожьте все файлы в своих каталогах и подкаталогах, созданные более 30 дней назад (будьте осторожны, не удалите

.profile и другие файлы настройки).

8.9.Найдите все файлы с числом ссылок, равным двум.

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

8.11.С использованием команды tar передайте другому пользователю копию дерева подкаталогов своего каталога вместе c файлами. Попросите другого пользователя передать Вам копию дерева своего каталога. Восстановите каталог вашего товарища в своем каталоге. Кто является владельцем файлов?

8.12.Создайте архив одного из каталогов Вашего домашнего каталога. Разделите его на две части. Соедините их и восстановите данные из архива.

53

УКАЗАНИЯ К РЕШЕНИЮ ЗАДАЧ

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

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

1.14.Используйте две команды cal с соответствующими аргументами

водной строке, объединенные операцией ;.

1.15.echo -e \

"------------------------------------------------

\

\n\n\n"; cal 2007; echo -e "\n\n\n\

 

------------------------------------------------

"

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

1.17.Можно ли послать сообщение одновременно на несколько терминалов, не используя цикл? См. указание к задаче 1.14.

1.18.Следует использовать wall.

1.24. Воспользуйтесь командой ps.

2.3. Каталог /export/home характерен для ОС Solaris. Для других ОС семейства UNIX – /home.

2.14. Для создания файла, содержащего заданный текст, используйте команду cat, перенаправив ее вывод в файл:

cat > myfile <Enter> ввод текста <Ctrl+D>

2.20. Для добавления строки к файлу используйте команду cat, перенаправив ее выход в файл:

mylink: cat >> mylink <Enter> ввод текста

<Ctrl+D>

Можно использовать перенаправление команды echo:

echo “ текст” >> mylink

54

2.24. Чтобы псевдоним создавался всякий раз при открытии нового сеанса, следует поместить соответствующую команду alias в файл .profile Вашего личного каталога.

2.26. Помните, что файл с именем «точка» обозначает текущий каталог, а файл с именем «две точки» - родительский.

2.28.alias joke="есho ALL FILES...;ls"

2.29.alias joke="есho ALL FILES...;ls;unalias joke"

2.34. Удаление файла, имя которого состоит из четырех пробелов: rm -i \ \ \ \ .

2.39 – 2.40. Символическая ссылка – специальный файл, содержащий путевое имя другого файла, поэтому замена файла на другой не оказывает влияния на саму ссылку. Напротив, жесткая ссылка связана с блоками данных файла и является одним из равноправных имён файла.

4.3. Командами cat >>myfile и есho -e "...\n..." >>myfile.

4.7. cat >prompt; alias mktxt="cat prompt;cat >" Please, type text

^D

4.11. Числовой идентификатор пользователя – восьмое поле в выводе команды who -T.

4.13. Для сохранения списка в файле используйте команду tee.

4.20. Предусмотрите ситуацию, когда один пользователь работает с нескольких терминалов.

4.23. Информация обо всех зарегистрированных в системе пользователях содержится в файле /etc/passwd. У пользователей, которым запрещена регистрация, в поле «пароль» стоит символ *.

4.25. Для выделения строк с пятой по десятую используйте в конвейере команды tail и head.

4.27. cat file1 - file2 >file3

55

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]