Приемы профессиональной работы в UNIX


ВОЗМОЖНЫЕ МОДИФИКАЦИИ КОМАНДНОГО ФАЙЛА


В нынешней реализации никакие дополнительные ключи не допускается передача никаких дополнительных ключей команде cpio. Что случится, если вы захотели заменить копирование файлов, где это возможно, созданием ссылок (ключ -l) или не менять время последнего доступа к исходному файлу при его копировании (опция -a)? Такие возможности были бы недопустимы.

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

Для этого потребуется такой цикл:

for ARG in $* do if [ "`echo $ARG|cut -c1`" = "-" ] then CPIOARG="CPIOARG $ARG" shift fi done

Затем переменная CPIOARG может быть передана команде cpio.

Еще одна область, где могут быть произведены изменения - это управление правами доступа к файлам. Как объяснялось ранее, значение 0для umask делает все права такими, что они разрешают запись. Если это вам не подходит, оператор find может быть изменен так, что будет производиться выборочное копирование (и изменение прав доступа).

Предположим, например, вы имеете каталог с двумя файлами. Если выполнился оператор "find /dir -print", список файлов будет таким:

/dir /dir/file1 /dir/file2

Обратите внимание, что имя каталога появляется первым. Проблема возникает, если имя каталога не принадлежит вам или вы не имеете права записи. Происходит следующее: имя каталога копируется первым, устанавливаются права доступа (блокируя вас) и после этого file1 и file2 не могут быть скопированы в каталог dir. В cptdir мы применяем решение изменить umask так, чтобы вы всегда имели права записи. Это своего рода клудж, но он работает.

Другой путь - это изменить оператор find. Выполнение оператора "find /dir -depth -print" сгенерирует такой список файлов:

/dir/file1 /dir/file2 /dir

Обратите внимание, что имя каталога стоит ПОСЛЕДНИМ! Это правильно. Ключ -depth переворачивает список файлов так, что имя каталога печатается последним.

Что это дает? Фокус в том, что сначала копируются file1 и file2, а затем устанавливаются права доступа данного каталога. Вы можете записать файлы в каталог, для которого вы не имеете права записи. Благодаря тому, что файлы копируются первыми, вы можете не беспокоиться о том, какого рода права доступа имеет этот каталог. К сожалению, ключ-depth команды find поддерживается не всеми версиями системы UNIX.




Начало  Назад  Вперед



Книжный магазин