Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Aliens Vs Predator |#1| To freedom!
Aliens Vs Predator |#10| Human company final
Aliens Vs Predator |#9| Unidentified xenomorph
Aliens Vs Predator |#8| Tequila Rescue

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Сэйдж Рас Весь текст 822.4 Kb

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

Предыдущая страница Следующая страница
1 ... 18 19 20 21 22 23 24  25 26 27 28 29 30 31 ... 71
       (.).  Если бы мы не выполнили команду cd,  то полное имя стало бы абсо-
       лютным,  что могло бы отразиться на системе-приемнике.  Тогда  маршрут,
       начинающийся с каталога-приемника, имел бы вниз от себя лишний абсолют-
       ный путь.
            Строка 31 печатает каталог, в котором ищутся исходные файлы. Хоро-
       шо иметь их в файле протокола,  поскольку вам легче будет читать и сле-
       дить, где в данный момент работает autobkp.
            Строки 33-40 выполняют непосредственно копирование  файлов.  Здесь
       циклом является цикл for, который читает имена файлов из выхода команды
       find.  Заметьте, что это автоматически ограничивает общее число файлов,
       которые  может  обрабатывать цикл.  Этот факт ранее был объяснен в этой
       книге,  но давайте рассмотрим его еще раз.  Если  find  выдает  список,
       состоящий из сотен файлов,  то список слов оператора for переполняется и
       нарушает работу вашего командного процессора (или по крайней  мере  ко-
       манды find).  Здесь принято допущение, что вы не хотите иметь так много
       файлов в исходном каталоге. Вы можете избежать этого, разбивая исходный
       каталог  на более мелкие части и пересылая их в файл pathlist.  Если вы
       хотите создать действительно хороший цикл, измените его, например, так:

       find . -type f -ctime 0 -name "$FILES" -print | while read FILE

            Благодаря использованию такого цикла,  число  имен  файлов  теперь
       можно изменить от входных ограничений для командного процессора до раз-
       меров канала системы (который очень большой,  практически  неограничен-
       ный).  Изменение этой одной строки не оказывает влияния на другие части
       цикла.
            Давайте рассмотрим детально команду find. Во-первых, мы указали ей
       поиск файлов в текущем каталоге (.).  Это делает все полные  имена  от-
       носительными по отношению к точке.  Затем мы сказали команде find найти
       все файлы типа f,  что означает обычные файлы,  а не каталоги или файлы
       устройств.  Мы  не  хотим копировать такие файлы.  Дальше мы говорим ей
       найти файлы,  которые были изменены.  Под "изменением" мы подразумеваем
       доступ или модификацию.  (Посмотрите в описании stat(2),  какие команды
       изменяют доступ,  изменяют и модифицируют время.  Говоря "делать  поиск
       для  нахождения  "ctime 0"",  мы имеем в виду все файлы,  измененные за
       последние 24 часа. Объяснения, которые документация по find дает по по-
       воду этих чисел, довольно непонятны, поэтому отнеситесь к ним с недове-
       рием.) Затем мы говорим команде find "найти только  те  файлы,  которые
       определены  путем  соответствия их имен маршрутным именам,  указанным в
       переменной $FILES,  значение которой мы читаем".  В этом месте мы можем
       отфильтровать  файлы,  которые  нам не нужны (как объяснялось предвари-
       тельно) или выбрать файлы, которые нам нужны. В конце мы говорим коман-
       де  find  "напечатать  имена  всех файлов,  которые соответствуют пере-
       численным критериям". Затем имена файлов передаются в цикл for. Другими
       словами, выходные данные команды find становятся аргументом для охваты-
       вающего цикла for.
            В строках 35-38 оператор case определяет,  какого рода копирование
       мы собираемся делать,  и запускает команды копирования. Если переменная
       COPY не установлена,  мы копируем файлы командой uucp.  Обратите внима-
       ние,  что местом назначения является SYSTEM.  Если мы оставили SYSTEM в
       нуле в строке 18, то SYSTEM - это наша собственная система и мы копиру-
       ем командой uucp файлы к себе.  Если COPY установлена, то независимо от
       значения  SYSTEM мы копируем (но не командой uucp) файлы в другой ката-
       лог текущей системы.  Этот каталог может быть на том же  жестком  диске
       или в другой смонтированной файловой системе. После того, как файл ско-
       пирован,  выдается сообщение,  которое говорит о том, какой файл и куда
       был передан.  Удобно иметь в файле протокола эту информацию,  поскольку
       мы имеем возможность проследить, куда были пересланы ваши скопированные
       файлы.
            Цикл find выполняется до тех пор,  пока не скопируются все файлы в
       текущем сегменте дерева. Напомним, что команда find рекурсивная, поэто-
       му убедитесь,  что вы указывали не больше деревьев, чем вы хотели. Если
       вы  указали  "копировать,  начиная с корня (/)",  то может быть передан
       каждый файл,  имеющийся в системе.  Когда цикл for выполнился,  внешний
       цикл while идет к следующей итерации.  Когда все входные данные обрабо-
       таны, программа завершается.

            Некоторые особенности uucp

            Когда используется uucp, в маршруте приемника должен быть установ-
       лен бит разрешения выполнения ("x") для группы "others" (остальные) для
       всех промежуточных каталогов, ведущих к файлу. Это будет выглядеть так:
        --------x
            Самый последний каталог должен иметь права доступа вида "wx", что-
       бы uucp могла писать файл в каталог.  После этого владельцем файла счи-
       тается uucp.  Если собственником файла хотите быть вы,  скопируйте  его
       (используя  cp,  а  не  mv)  с другим именем и он будет вашей собствен-
       ностью.  Если вы переименуете его командой mv,  вы только измените имя,
       связанное с тем же индексным описателем файла (inode).  Но если вы ско-
       пируете его командой cp, вы создадите новый отмеченный описатель файла.
       Этот  новый  описатель  файла (созданный вами) имеет ваши идентификатор
       пользователя (uid) и идентификатор группы (gid),  поэтому  вы  владеете
       им.  Если вы находитесь в корне системы и копируете файл (используя cp,
       а не mv) поверх другого существующего файла, информация в описателе файла
       не  изменяется,  а  меняются только данные,  доступ к которым указывает
       описатель файла.
            Когда uucp  устанавливает  предшествующие права доступа к файлу на
       всех промежуточных  каталогах  такими,  что  все  имеют  право  записи,
       последний каталог НЕ будет иметь защиты.  Предоставление любому пользо-
       вателю права записи означает, что кто угодно может удалить или изменить
       файлы в этом каталоге.  Не каждый хочет давать всем это право.  Если же
       вы копируете файлы  в  обычную  область  команды  uucp  общего  доступа
       (/usr/spool/uucppublic/$LOGNAME),  то  вы должны внимательно следить за
       ними. Многие системы имеют запускаемые с помощью cron программы, произ-
       водящие в данном каталоге поиск файлов, к которым не было доступа в те-
       чение определенного количества дней, и удаляют такие файлы - это вредит
       вашим копиям.  Если период хранения больше,  чем промежуток между вашим
       копированием,  у вас может быть все в порядке. Как и многое другое, это
       зависит от ваших обстоятельств и требований безопасности.

            Усовершенствования

            В оригинале  файл со списком маршрутов имеет аргумент TYPE в конце
       аргумента FROM,  например /usr/russ/bin/*.  Это  представляет  проблему
       (кроме того,  что показывает, что ваш автор еще не является мастером!),
       потому что когда символ * будет выделен, он будет расширен в имена всех
       файлов вместо того,  чтобы трактоваться как литеральный символ. Простое
       решение - использовать отдельные поля,  что и было сделано.  Мастерским
       решением  является экранировать метасимвол для сохранения его как лите-
       рального символа. Как только символ * будет выделен из маршрутного име-
       ни,  символ  \  представит его в виде * вместо того,  чтобы дать его на
       расширение. Например, можно написать так:

        TYPE=`basename \"$FROM"`

            Здесь символ * присваивается переменной TYPE,  вместо того,  чтобы
       присвоить  TYPE список всех файлов,  которые соответствуют метасимволу.
       Затем,  когда будет вызвана команда find,  переменная TYPE должна  быть
       экранирована так,  чтобы метасимвол интерпретировался не командным про-
       цессором, а самой командой find.

            3.3.2. cpiobr - копирование и восстановление файлов в виде  потока
       данных

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

            Имя: cpiobr
____________________________________________________________________
        cpiobr      Копирование и восстановление в виде
                    потока данных командой cpio

     НАЗНАЧЕНИЕ

            Обеспечивает интерфейс в виде меню с командой cpio и удобства  при
       копировании и восстановлении файлов.  Выходные данные на носитель копи-
       руются в виде потока данных.

     ФОРМАТ ВЫЗОВА

            cpiobr

            Пример вызова
        cpiobr       Вызывает главное меню для копирования,
                     восстановления или выдачи списка файлов

            Командный файл cpiobr
1   :
2   # @(#) cpiobr v1.0  Cpio stream backup and restore
        Author: Russ Sage

4   if [ "$#" -gt "0" ]
5      then echo "cpiobr: too many arguments"
6           exit
7   fi

9   while :
10  do
11            c
12            set `date`
13            echo "

15  $1, $2 $3                  $4

17         Cpiobr Backup & Restore
18         -----------------------
19     Backup to removable media
20     Restore from removable media
21     List files on media
22     Long list files on media
23      to exit

25     Press b,r,f,l or : \c"

27         read CMD
28         if [ "$CMD" = "" ]
29           then break
30          fi

32          ABORT=off

34          while :
35          do
36                      echo "

38     Enter media type:
39        Raw System V floppy drive (/dev/rfp021)
40        Raw XENIX floppy drive    (/dev/rfd0)
41        Tape drive                (/dev/rmt0)
42        Any device                (/dev/???)
43         to exit

45        Press s,x,t,a, or : \c"

47                      read MEDIA
48                      case $MEDIA in
49                      s|S)    DEV=/dev/rfp021
50                              break;;
51                      x|X)    DEV=/dev/rfd0
52                              break;;
53                      t|T)    DEV=/dev/rmt0
54                              break;;
55                      a|A)    echo "enter full pathname
        (or <> to exit): \c"
56                              read DEV
57                              if [ "$DEV" = "" ]
58                                then continue
59                                else break
60                              fi;;
61                     "")    ABORT=on
62                              break;;
63                     *)       echo "cpiobr: invalid
        command \"$MEDIA\"";;
64                     esac
65           done # while get media

67           if [ "$ABORT" = "on" ]
68             then continue
69           fi

71           case $CMD in
72           b|B)   echo "\nEnter the source directory name: \c"
73                  read SRC
74                  cd $SRC
75                  echo "\nPlace floppy in drive and hit  ...\c"
76                  read CMD
77                  find . -print | sort | cpio -ocBv > $DEV
78                  echo "\nhit \c"
79                  read CMD
80                  ;;
81           r|R)   echo "\nEnter the destination directory name: \c"
82                  read DEST
83                  cd $DEST
84                  echo "\nPlace floppy in drive and hit  ...\c"
85                  read CMD
86                  cpio -icBvdmu < $DEV
87                  echo "\nhit \c"
88                  read CMD
89                  ;;
Предыдущая страница Следующая страница
1 ... 18 19 20 21 22 23 24  25 26 27 28 29 30 31 ... 71
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (52)

Реклама