Каталог doc - это корень всех видов документации. Подкаталогами здесь могут быть
формы, письма, записки, разнообразная информация и отчеты. Каждый подкаталог содержит
определенные файлы в этих областях.
Каталог etc содержит любые системные или административные команды и файлы, которыми
вы пользуетесь. Если вы имеете административные обя- занности, типичным содержимым
этого каталога может быть резервная ко- пия текущих конфигурационных файлов, используемых
системой. Вы можете сделать резервную копию файлов
/.profile
/etc/bcheckrc
brc
checklist
gettydefs
group
inittab
motd
mountable
unmountable
passwd
profile
rc
/usr/lib/crontab
/usr/lib/uucp/L.sys
USERFILE
uudemon.day
uudemon.hr
uudemon.wk
или любой другой информации о системе.
Каталог proj предназначен для специальных проектов, которые у вас есть. Скорее
всего, вы назовете этот каталог не proj, а по имени про- екта, например, dev для
разработки (development) или qa для чистовой шлифовки (quality assurance). Все данные,
корреспонденция, документа- ция и исходный код для каждой работы направляются в
главный каталог проекта. Конечно, у вас может быть более одного каталога проекта.
Следующий каталог - mail. Это хорошее место для размещения вашей почтовой корреспонденции
от других людей, использующих систему. Имена файлов в этом каталоге являются пользовательскими.
Например, если бы я получил почту от Боба, то она находилась бы в файле с именем
bob.
Каталог src - для всего исходного кода. Логически сгруппируйте ваш исходный код
по подкаталогам, чтобы облегчить его поиск в будущем. Возможными подкаталогами являются
asm для ассемблерного кода, c для исходного кода на Си, games (игры), misc (разное),
script для команд- ных файлов и sys для любого исходного кода, относящегося к системе.
(Если вы держите исходные тексты ваших личных инструментов в каталоге /bin/src,
то здесь вы, возможно, продублируете их.)
Каталог sys - это склад информации, имеющей отношение к системе. Здесь могут
быть резервные копии критических системных файлов, доку- ментация по областям системы,
куски выводимой информации команд who, ps, uucp, регистрационных файлов или что-либо
иное.
Последний каталог - tmp, который является рабочей областью для размещения временных
файлов. В основном все, что находится в tmp, вы можете в любое время удалить, и
средство can, описанное в главе 3, по- могает вам в этом.
Отметим, что регистрационный каталог имеет минимальное количество обычных файлов.
Это уменьшает путаницу, которая может происходить с плоскими файловыми системами.
Каждый файл должен быть на своем месте, но может быть размещен не только здесь.
Если возникает какой-либо род задач, когда файлы, связанные с этой задачей, могут
быть перепутаны с другими файлами, создайте отдельный каталог.
АНАЛИЗ ПРИМЕРА ФАЙЛА НАСТРОЙКИ СИСТЕМЫ
Файл .profile, как следует из его названия (профилирование - фор- мирование контура,
очертаний), функционирует для установки и инициали- зации параметров системы, которые
вам нужны. Сюда входит установка терминалов, определение переменных, запуск программ
и конфигурирование исполняющей системы. Пример файла настройки можно найти в описании
ко- манды profile(4). Рассмотрим .profile, используемый автором. Мы вклю- чили его
на столь ранней стадии, чтобы предложить вам коснуться поня- тий, которые более
подробно раскрываются далее в этой книге. Не за- ботьтесь о понимании работы каждой
части примера. Пока что просто сде- лайте мысленную отметку возможностей. Ваш .profile
может быть проще и почти наверняка будет другим.
1 # @(#).profile v1.0 Defines "home" on the system
Author: Russ Sage
3 CHOICE="ushort" 4 case $CHOICE in 5 ufull) PS1="`uuname -l`> ";; 6 ushort) PS1="`uuname
-l|cut -c1-3`> ";; 7 graphic) PS1="^[[12mj^[[10m ";; 8 esac
10 LOGNAME=`logname` 11 HOME=`grep "^$LOGNAME:" /etc/passwd | cut -d: -f6` 12 MAIL=/usr/spool/mail/$LOGNAME
13 export LOGNAME HOME MAIL
15 HA=$HOME/adm 16 HBB=$HOME/bbs 17 HB=$HOME/bin 18 HD=$HOME/doc 19 HE=$HOME/etc
20 HM=$HOME/mail 21 HP=$HOME/proj 22 HSR=$HOME/src 23 HSY=$HOME/sys 24 HT=$HOME/tmp
25 HDIRS="HA HBB HB HD HE HM HP HSR HSY HT" 26 export $HDIRS HDIRS
28 P=/usr/spool/uucppublic/$LOGNAME; export P
30 CDPATH=.:..:$HOME:$HDIRS 31 PATH=.:/bin/:/usr/bin:/etc:$HOME/bin 32 SHELL=`grep
"^$LOGNAME:" /etc/passwd|cut -d: -f7` 33 export CDPATH PATH SHELL
35 case "`basename \`tty\``" in 36 console) eval `tset -m ansi:ansi -m :\?ansi -r
-s -Q`;; 37 tty00) eval `tset -m ansi:ansi -m :\?ansi -r -s -Q`;; 38 tty01) eval
`tset -m ansi:ansi -m :\?ansi -r -s -Q`;; 38 esac
41 echo TERM = $TERM 42 TERMCAP=/etc/termcap 43 export TERM TERMCAP
45 HZ=20 46 TZ=PST8PDT 47 export HZ TZ
49 umask 0022
51 echo "\nTime of this login : `date`" 52 lastlog -l
54 RED="^[[31m" 55 GREEN="^[[32m" 56 YELLOW="^[[33m" 57 BLUE="^[[34m" 58 CYAN="^[[35m"
60 case "`date|cut -d' ' -f1`" in 61 Mon) echo "$RED";; 62 Tue) echo "$GREEN";;
63 Wed) echo "$YELLOW";; 64 Thu) echo "$BLUE";; 65 Fri) echo "$CYAN";; 66 esac
КАК РАБОТАЕТ .profile
Когда вы входите в систему, регистрационная программа выполняет интерпретатор
shell с параметром '-' (например, -sh). Это сигнализиру- ет интерпретатору shell,
что сейчас момент регистрации и что должен быть выполнен файл настройки. Сначала
выполняется /etc/profile - общий файл настройки, установленный системным администратором
для всех поль- зователей, а затем файл .profile пользователя. Каждый интерпретатор
shell после этого больше не запускает эти установочные программы. В файле /etc/
profile интересно проверить машинно-зависимую информацию и посмотреть, какие умолчания
были для вас установлены. Если вы хотите выполнить ваш .profile в любой момент после
входа в систему, наберите ". .profile" (можно писать и ".profile", проверено, что
обе формы ра- ботают - Прим. переводчика).
Для поддержки вашего регистрационного каталога, используйте пере- менные командного
процессора (переменные shell), чтобы облегчить пе- редвижение и сократить количество
нажатий клавиш при работе с маршрут- ными именами. Переменные shell всегда являются
строками и, будучи один раз определенными, не исчезают, пока вы не выйдете из системы.
При использовании переменные shell являются локальными для рабо- тающего в данный
момент интерпретатора shell. Их можно передать ин- терпретаторам shell более глубокого
уровня путем их "экспортирования". Следовательно, если вы создаете новый командный
процессор, все ваши экспортированные переменные будут по-прежнему определены для
этого ин- терпретатора shell. Исчерпывающий список переменных shell, установлен-
ных по умолчанию и используемых системой, см. в приложении 1.
Отметим, что в нашем примере файла настройки для каждого подката- лога первого
уровня, который есть в нашем регистрационном каталоге, мы также имеем переменные
shell, связанные с именем этого подкаталога. Таким образом, мы можем легко обращаться
к различным областям нашего регистрационного каталога.
ПОСТРОЧНЫЙ РАЗБОР ПРИМЕРА ФАЙЛА НАСТРОЙКИ
Строки 3-8 делают хитрую установку главной подсказки - переменной PS1. В строке
3 инициализируется переменная, которая выбирает подсказ- ку. Значение ushort жестко
закодировано в файле, но вы всегда можете запросить его или установить его в зависимости
от файла.
Первой альтернативой является ufull, используемая для установки подсказки в виде
полного имени узла uucp в локальной системе. Вы выби- раете такую подсказку, если
используете несколько машин и для доступа к одной машине применяете другую. Отличительная
подсказка напоминает вам, какой машиной вы пользуетесь. Отметим, что подсказка имеет
одина- ковое число символов и для короткой строки, и для длинной. Если же вам нужно
имя узла uucp, но не нужна длинная строка для подсказки, вы мо- жете выбрать ushort,
что дает первые три символа имени узла. Как пока- зано в строке 6, имя получается
применением команды uuname для получе- ния локального имени узла (опция -l). Затем
это имя пропускается через команду cut, которая вырезает символы с первого по третий.
Результат присваивается переменной подсказки.
Последняя альтернатива для тех из вас, кто имеет графические сим- волы. Назначение
в строке 7 есть греческий символ. Его можно получить применением специальных управляющих
последовательностей, которые ука- зывают терминалам отображение специальных символов.
Символы ^[ явля- ются визуальным представлением управляющего символа в программе
vi. Вы можете получить этот символ в программе vi, набрав control-v, а затем ESC.
Последовательность ESC[12m означает, что следующий символ будет напечатан как графический.
Символ j является вашей подсказкой и прев- ращается в графический символ, который
выдается на ваш экран. Исполь- зуя различные символы алфавита, вы можете иметь в
виде вашей подсказки почти любой графический символ. ESC[10m возвращает ваш терминал
в ре- жим обычного текста, так что все символы, печатаемые после того, как вы набрали
ESC[10m, являются нормальными.
Если вы хотите сохранить вашу пользовательскую подсказку для всех подчиненных
интерпретаторов shell, экспортируйте ее. Иначе вы получите $ для всех интерпретаторов
shell нижнего уровня.
Строка 10 присваивает переменной LOGNAME выход команды logname(1). Команда logname
- это обычная команда системы UNIX, кото- рая печатает ваше регистрационное имя
из файла /etc/passwd. Обычно эта переменная установлена для вас системой, но данный
пример показывает, как вы можете установить ее вручную.
Строка 11 инициализирует переменную HOME. Она тоже устанавлива- ется для вас
системой, но мы хотим показать, как делать эти вещи осоз- нанно, а не по умолчанию.
Сначала мы ищем в файле паролей запись, соответствующую переменной LOGNAME. Мы ищем
от начала строки имя, ко- торое завершается символом :, чтобы убедиться, что найдено
только кор- ректное соответствие имени пользователя. Затем вся запись посылается
команде cut, которая вырезает шестое поле - регистрационный каталог. Преимущество
такой стратегии в том, что регистрационный каталог авто- матически меняется, если
меняется запись в файле /etc/passwd.
Строка 12 инициализирует переменную MAIL. Определяя MAIL, вы ука- зываете, что
вы должны быть уведомлены о посылке вам новой почты, если вы находитесь в режиме
on line. Строка 13 экспортирует эти переменные, так что они доступны нам в порожденных
интерпретаторах shell.
Строки 15-24 определяют все каталоги первого уровня в нашем ре- гистрационном
каталоге. Большинство имен состоят из двух букв, некото- рые из трех. Теперь мы
можем применять команды такого вида:
$ cd $HD $ ls -R $HSR $ cu -ltty00 dir | tee $HBB/board/session$$
Строка 25 присваивает переменной HDIRS все имена каталоговых пе- ременных, что
облегчает подключение всех каталогов без повторного вво- да их имен. Мы можем просмотреть
все каталоги и напечатать размер используемого дискового пространства:
$ for DIR in $HDIRS > do > echo "disk usage for $DIR: `du -s $DIR`" > done
Строка 26 экспортирует переменные так, чтобы мы могли всегда их использовать.
Отметим, что мы экспортировали $HDIRS и HDIRS. Перед тем, как выполнить экспортирование,
$HDIRS было распространено на все различные имена переменных. Следовательно, фактически
мы экспортирова- ли все имена плюс саму переменную HDIRS.
Строка 28 инициализирует P так, чтобы это был ваш каталог в PUBDIR, то есть /usr/spool/uucppublic.
Теперь у нас есть простой способ ссылаться на наши файлы при работе с командой uucp.
Строка 30 устанавливает CDPATH. Это путь, который проверяется, когда вы выполняете
команду cd. Сначала проверяется текущий каталог (.) на предмет того, есть ли в нем
имя каталога, в который вы хотите попасть. Затем проверяется .. (родительский каталог).
После этого просматривается ваш регистрационный каталог. Последним назначением CDPATH
является $HDIRS, что подключает имена всех подкаталогов. Цель этих имен - позволить
команде cd искать в соответствующем каталоге введенное вами имя.
Например, если бы вы были в /etc и набрали "cd doc", вы бы попали в $HOME/doc,
поскольку CDPATH содержало в себе $HOME. Аналогично, если бы вы имели подкаталог
$HOME/doc/status и ввели "cd status" откуда-ли- бо из другого места в системе, вы
бы пришли в $HOME/doc/status, так как корень $HOME/doc был в CDPATH.
Порядок поиска в каталогах такой же, как объявлено в переменной CDPATH. Если
вы вводите имя каталога, которое встречается более чем в одном месте, вы попадаете
в первый каталог, обнаруженный при последо- вательном поиске. Например, если бы
вы сказали "cd sys", то попали бы в $HOME/sys прежде, чем в $HOME/ src/sys.
В табл. 1-1 приведен пример эквивалентных команд cd, представлен- ных в трех
различных формах, которые понимает UNIX. То, какую форму вы используете, зависит
от того, что считается наиболее удобным и требует как можно меньше нажатий клавиш.
Таблица 1-1
Три способа использования команды cd
Абсолютный CDPATH Относительно
переменной
cd /usr/russ cd cd $HOME cd /usr/russ/src/asm cd asm cd $HSR/asm cd /usr/russ/doc/paper/conf
cd paper/conf cd $HD/paper/conf cd /usr/russ/tmp cd tmp cd $HT
Строка 31 инициализирует переменную PATH. PATH работает таким же образом, как
CDPATH. Она ищет программы, которые нужно запустить, в каждом каталоге, указанном
в переменной PATH. Если имя не найдено ни в одном из этих каталогов, печатается
сообщение ": not found" ("<имя-файла>: не найдено").
Поскольку мы можем установить наш PATH как угодно, можно указать все таинственные
места в системе, в которых расположены исполняемые модули. Когда мы хотим их выполнить,
мы не обязаны их искать и наби- рать полное маршрутное имя. Чтобы дополнить PATH,
введите, например, следующее:
PATH=$PATH:/usr/lib/uucp
Команда paths, представленная далее в этой книге, использует $PATH, чтобы сообщить
нам, в каком каталоге размещен исполняемый мо- дуль.
Строка 32 инициализирует переменную SHELL. Эту переменную могут использовать
не более чем одна или две утилиты. Обычно она устанавли- вается системой, когда
вы регистрируетесь. Строка 33 экспортирует пе- ременные CDPATH, PATH и SHELL.