Страница:
V, файлы, которые имеются обычно в Berkeley 4.2, и файлы, которые соз-
даются при использовании программ из настоящей книги.
Первый файл - это .news_time. Дата этого файла соответствует то-
му, когда вы последний раз читали новости в каталоге /usr/news. Для
чтения новостей пользуйтесь командой news(1). Эта команда выдает но-
вости, появившиеся позже даты создания файла .news_time.
Следующий файл - .profile. Этот файл выполняется при каждой ре-
гистрации в интерпретаторе shell и может быть использован для привязки
вашей собственной среды. В дальнейшем мы рассмотрим этот файл более
подробно.
Следующий файл - calendar (календарь). Этот файл содержит даты и
сообщения. Команда calendar(1) читает в этом файле даты, очень близкие
к текущей дате. Затем печатаются или посылаются вам по почте сообще-
ния.
Последний файл - mbox, ваш системный почтовый ящик. Когда вы с
помощью команды mail(1) сохраняете почту, она направляется по умолча-
нию в mbox.
Первым файлом здесь является .cshrc. Это первая стадия настройки
системы на пользователя, выполняемой интерпретатором cshell. В системе
UNIX присутствие "rc" в имени файла означает "команды запуска" ("run
commands") или "запуск при загрузке" ("run on boot up").
Файл .login является синонимом файла .profile интерпретатора sh.
Этот файл содержит команды настройки на среду пользователя, которая
вам нужна при регистрации в системе.
Следующий файл - .logout. Он выполняется, когда вы выходите из
системы. Например, вы можете применить его для печати учетной информа-
ции, такой как время, в течение которого вы работали в системе,
используемый вами размер дискового пространства и т.д. System V не
имеет подобного файла.
Следующий файл - .msgsrc, предназначенный для команды msgs(1)
системы Berkeley. Файл .msgsrc содержит последний, прочитанный вами
файл сообщений. Файлы сообщений хранятся в виде последовательно прону-
мерованных файлов в каталоге /usr/msgs.
Вот программы и файлы, которые вы можете разработать во время
использования данной книги. Файл .lastlog содержит даты каждого вхож-
дения в систему с вашими учетными данными. Программа, которая управля-
ет этим файлом, называется lastlog и представлена в главе 5.
Следующий файл - .trashcan. Это каталог, который временно хранит
файлы, удаленные вами. Если вы уверены, что они вам не нужны, то их
можно удалить навсегда. Эта особенность рассмотрена в главе 3.
Последний файл - .phone.list. Это ваша личная база данных со
списком телефонов. Она обслуживается командой phone (см. главу 5).
Первым каталогом является adm. Он содержит административные фай-
лы, которые вы можете иметь, например расписания, информацию о сотруд-
никах, встречах и т.д.
В каталоге bbs имеются подкаталоги для каждой "доски объявлений",
которую вы вызываете. Когда вы обращаетесь к этим системам, вы имеете
место для размещения всех соответствующих файлов и данных. Необходимая
вам информация - это меню для системы, вспомогательный текст, загрузки
программ и общая информация, которая вас интересует.
Каталог bin содержит все инструментальные средства, которые у вас
есть. Это могут быть командные файлы или объектные модули откомпилиро-
ванных программ. Подкаталог src не обязателен. В нем хранится исходный
код на языке Си для объектных модулей, имеющихся в bin, так что исход-
ный текст для быстрой фиксации ошибок и изменения всегда под рукой.
Каталог 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
Когда вы входите в систему, регистрационная программа выполняет
интерпретатор 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.
Строки 35-39 - это хитрый способ установки определений термина-
лов. Строка 35 начинается со спрятанной команды tty, заключенной в
знаки ударения (`...`). Выходом команды tty является "/dev/tty00". За-
тем мы берем основное имя этой строки, т.е. "tty00". Далее мы исполь-
зуем структуру переключателя по этому значению, чтобы увидеть, что мы
хотим сделать для каждого конкретного терминала. Команды tset, пока-
занные здесь, относятся к среде XENIX и могут быть неприемлемыми в ва-
шей среде.
Строка 41 делает эхо-отображение значения TERM на экран, чтобы
сообщить вам тип вашего терминала, если он вам нужен. Это значение
доступно, если описанная ранее команда tset устанавливает для вас TERM
как часть своей обычной работы.
В строке 42 устанавливается переменная TERMCAP, указывающая на
/etc/termcap. Это обычный способ установки переменной TERMCAP. Другой
способ - присвоить TERMCAP текущую закодированную строку, которая на-
ходится в файле описания терминала. Если TERMCAP установлен на закоди-
рованную строку, то утилите vi нет необходимости обращаться к файлово-
му вводу-выводу, чтобы получить характеристики вашего терминала. Стро-
ка 43 экспортирует эти значения так, чтобы они были доступны на любом
уровне интерпретатора shell.
Строка 45 устанавливает частотную переменную. Это переменная из
XENIX и, возможно, имеется в System V. Она используется для установки
информации о времени.
Строка 46 устанавливает информацию о зоне времени, как это требу-
ется в библиотечном вызове ctime(3). Имея переменную TZ, вы можете пе-
рекрыть подразумеваемую зону времени при доступе ко времени из прог-
раммы на языке Си. Строка 47 экспортирует эти переменные.
Строка 49 устанавливает ваше значение маски пользователя (umask).
Она управляет подразумеваемым разрешением доступа для всех файлов, ко-
торые вы создаете. Система вычитает значение umask из 777. Результат
становится правом доступа к файлу, в данном случае 755. Когда вы соз-
даете каталог с правом доступа 755, этот каталог показывается командой
"ls -l" как rwxr-xr-x. Когда вы создаете некаталоговый файл с правом
доступа 755, этот файл показывается как rw-r--r--, что эквивалентно
644. Некаталоговые файлы не имеют бита x, поэтому их нельзя исполнить.
Каталогам же нужен установленный бит x, чтобы они были доступны по ко-
манде cd.
Строки 51 и 52 сообщают вам о времени вашего сеанса работы в
системе. Строка 51 сообщает вам текущее время вашего входа в систему,
а строка 52 вызывает программу lastlog, которая печатает дату вашей
последней регистрации в системе. Программа lastlog описана в главе 5.
Строки 54-58 инициализируют переменные, генерирующие цвета на
цветном мониторе. Управляющие значения являются стандартными значения-
ми кодов ANSI. Это работает в системе XENIX и может работать в вашей
системе. Растровая графика не доступна, но имеется символьная графика
и различные основные (foreground) и фоновые (background) цвета. Основ-
ные цвета кодируются числами, начиная с 30, а фоновые цвета - числами
с 40.
Строки 60-66 - просто для забавы. Они представляют собой хитрый
способ устанавливать каждый день на экране различные цвета. Строка 60
начинается с запуска команды date и передачи ее выхода по конвейеру
команде cut. Вырезается первое поле, которое является днем недели. За-
тем мы создаем структуру переключателя по строке дня, выполняя различ-
ные действия для каждого дня. Благодаря эхо-отображению управляющих
последовательностей, монитор реагирует немедленно.
Теперь, когда мы ознакомились с "домашней" средой, следующий шаг
- обратиться к средам, находящимся вне регистрационного каталога
($HOME). Например, что представляют собой другие каталоги на том же
уровне, что ваш $HOME ? Кто еще работает в системе? Как попроще полу-
чить доступ к их каталогам? Можете ли вы запускать программы в чужих
каталогах? Такого рода вопросы и действия относятся к другим людям в
вашей системе.
Единственный способ ответить на эти вопросы - посмотреть вокруг
себя. Никто не собирается рассказывать вам, что такое система. Вы
должны сами исследовать ее и выяснить, куда вы можете ходить, а куда
нет. Система конечна, так что вы можете себе помочь, делая распечатки
всех каталогов и файлов.
Вы можете маневрировать в системе UNIX, используя относительную
нотацию. Поскольку системное дерево образовано из каталогов, обозначе-
ния . и .. позволяют нам двигаться вверх и вниз по дереву. В любой
точке .. означает родительский каталог текущего каталога, в котором мы
находимся.
Ниже показаны некоторые примеры относительных команд.
ls -l $HOME/.. перечисляет файлы в моем родительском
каталоге.
cd ../../.. в предположении, что текущим каталогом
является /usr/russ/src/c, делает моим
текущим каталогом /usr.
ls . перечисляет файлы в текущем каталоге.
ls .. перечисляет файлы в моем родительском
каталоге.
$HOME/../../bin/ls запускает ls в каталоге
/usr/russ/../../bin, т.е. в /bin/ls.
../fred/bin/ls запускает команду ls в каталоге
двоичных модулей Фреда, который имеет
тот же родительский каталог, что и я,
т.е. /usr/fred/bin/ls.
Системная среда не просто НАХОДИТСЯ в системе UNIX, а ЯВЛЯЕТСЯ
системой UNIX. Как мы увидим в этой книге, вся система - UNIX, Си, ко-
манды, файлы и т.д. - это просто логический подход к функционированию
компьютера. Программное обеспечение - это то, что определяет система
для конечного пользователя. Мы можем представлять все машины, работаю-
щие в системе UNIX, как одинаковые и трактовать каждый UNIX как один и
тот же. Мы предполагаем, что реакция машины будет каждый раз одинако-
вой.
Мы можем смотреть на UNIX таким же образом, как на физические за-
коны. Мы ограничены ими, но мы также вольны применять эти законы в си-
туациях и областях, с которыми мы до этого никогда не встречались. Мы
можем доверять этим законам и допускать, что они применимы везде, куда
бы мы ни направились. Такова система UNIX, по крайней мере в идеале.
Система имеет много сред. Важно понимать, что они собой представ-
ляют, как взаимодействуют и для чего могут быть использованы. Так же,
как
программы = структуры данных + алгоритмы
так и
UNIX = файловое дерево + утилиты
Среда UNIX - это сочетание двух важнейших вещей: файлового дерева
и интерфейса системных вызовов. Это дерево допускает бесконечное
расширение возможностей, позволяя монтировать внешние дисковые области
в любой точке файловой системы. Дерево помогает также в сборе логи-
чески связанных файлов, что делает систему более организованной.
Интерфейс системных вызовов обеспечивает набор инструментов, из
которых можно построить большинство других функций. Определение интер-
фейса System V имеется в виде типографской книги и может быть найдено
в книжных магазинах. Строгое следование этому стандарту гарантирует
совместимость с постоянно развивающейся AT&T System V.
Для того чтобы лучше понять мир UNIX, посмотрите пример распечат-
ки структуры UNIX на рис.1-3 . Это наглядное представление полного де-
рева корневой файловой системы. Любые другие расширения файловой
системы монтируются на эту файловую систему.
Точкой временного монтирования является /mnt. Более постоянные точки
монтирования должны быть созданы администратором, например /0, /1 и
т.д. или /usr1, /usr2 и т.д.
Самым левым каталогом является /bin, который содержит все главные
двоичные утилиты. Это наибольший из двух основных каталогов двоичных
модулей.
Следующий каталог - /dev, в котором размещены все файлы уст-
ройств. Файлы устройств являются точками доступа к периферии, подсое-
диненной к системе. Этот файл привязан к периферии с помощью ядра и
драйвера устройства.
Административные утилиты и конфигурационные файлы хранятся в
/etc. Примерами являются getty и gettydef, init и inittab, а также
файл паролей (/etc/passwd).
Следующий каталог - /lib, где размещены библиотеки компилятора.
Здесь могут храниться и другие типы библиотек.
Каталог /lost+found используется утилитой fsck (главное средство
поддержания файловой системы) для хранения логически удаленных файлов.
Если на самом деле вы хотите сохранить эти файлы, они могут быть изв-
лечены из этой удерживающей области после завершения уборки файловой
системы.
Следующий каталог - /mnt. Это временная точка монтирования для
файловых систем. Мы часто монтируем и демонтируем файловые системы
просто для того, чтобы запустить быструю проверку чего-либо. Здесь под-
ходящее место для этого.
Главным временным рабочим каталогом системы является /tmp. Многие
утилиты, такие как vi, fsck, интерпретаторы shell и программы резерв-
ного копирования, используют /tmp для хранения рабочих файлов.
даются при использовании программ из настоящей книги.
Первый файл - это .news_time. Дата этого файла соответствует то-
му, когда вы последний раз читали новости в каталоге /usr/news. Для
чтения новостей пользуйтесь командой news(1). Эта команда выдает но-
вости, появившиеся позже даты создания файла .news_time.
Следующий файл - .profile. Этот файл выполняется при каждой ре-
гистрации в интерпретаторе shell и может быть использован для привязки
вашей собственной среды. В дальнейшем мы рассмотрим этот файл более
подробно.
Следующий файл - calendar (календарь). Этот файл содержит даты и
сообщения. Команда calendar(1) читает в этом файле даты, очень близкие
к текущей дате. Затем печатаются или посылаются вам по почте сообще-
ния.
Последний файл - mbox, ваш системный почтовый ящик. Когда вы с
помощью команды mail(1) сохраняете почту, она направляется по умолча-
нию в mbox.
Первым файлом здесь является .cshrc. Это первая стадия настройки
системы на пользователя, выполняемой интерпретатором cshell. В системе
UNIX присутствие "rc" в имени файла означает "команды запуска" ("run
commands") или "запуск при загрузке" ("run on boot up").
Файл .login является синонимом файла .profile интерпретатора sh.
Этот файл содержит команды настройки на среду пользователя, которая
вам нужна при регистрации в системе.
Следующий файл - .logout. Он выполняется, когда вы выходите из
системы. Например, вы можете применить его для печати учетной информа-
ции, такой как время, в течение которого вы работали в системе,
используемый вами размер дискового пространства и т.д. System V не
имеет подобного файла.
Следующий файл - .msgsrc, предназначенный для команды msgs(1)
системы Berkeley. Файл .msgsrc содержит последний, прочитанный вами
файл сообщений. Файлы сообщений хранятся в виде последовательно прону-
мерованных файлов в каталоге /usr/msgs.
Вот программы и файлы, которые вы можете разработать во время
использования данной книги. Файл .lastlog содержит даты каждого вхож-
дения в систему с вашими учетными данными. Программа, которая управля-
ет этим файлом, называется lastlog и представлена в главе 5.
Следующий файл - .trashcan. Это каталог, который временно хранит
файлы, удаленные вами. Если вы уверены, что они вам не нужны, то их
можно удалить навсегда. Эта особенность рассмотрена в главе 3.
Последний файл - .phone.list. Это ваша личная база данных со
списком телефонов. Она обслуживается командой phone (см. главу 5).
Первым каталогом является adm. Он содержит административные фай-
лы, которые вы можете иметь, например расписания, информацию о сотруд-
никах, встречах и т.д.
В каталоге bbs имеются подкаталоги для каждой "доски объявлений",
которую вы вызываете. Когда вы обращаетесь к этим системам, вы имеете
место для размещения всех соответствующих файлов и данных. Необходимая
вам информация - это меню для системы, вспомогательный текст, загрузки
программ и общая информация, которая вас интересует.
Каталог bin содержит все инструментальные средства, которые у вас
есть. Это могут быть командные файлы или объектные модули откомпилиро-
ванных программ. Подкаталог src не обязателен. В нем хранится исходный
код на языке Си для объектных модулей, имеющихся в bin, так что исход-
ный текст для быстрой фиксации ошибок и изменения всегда под рукой.
Каталог 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
Когда вы входите в систему, регистрационная программа выполняет
интерпретатор 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. Если имя не найдено ни в
одном из этих каталогов, печатается сообщение "
("<имя-файла>: не найдено").
Поскольку мы можем установить наш PATH как угодно, можно указать
все таинственные места в системе, в которых расположены исполняемые
модули. Когда мы хотим их выполнить, мы не обязаны их искать и наби-
рать полное маршрутное имя. Чтобы дополнить PATH, введите, например,
следующее:
PATH=$PATH:/usr/lib/uucp
Команда paths, представленная далее в этой книге, использует
$PATH, чтобы сообщить нам, в каком каталоге размещен исполняемый мо-
дуль.
Строка 32 инициализирует переменную SHELL. Эту переменную могут
использовать не более чем одна или две утилиты. Обычно она устанавли-
вается системой, когда вы регистрируетесь. Строка 33 экспортирует пе-
ременные CDPATH, PATH и SHELL.
Строки 35-39 - это хитрый способ установки определений термина-
лов. Строка 35 начинается со спрятанной команды tty, заключенной в
знаки ударения (`...`). Выходом команды tty является "/dev/tty00". За-
тем мы берем основное имя этой строки, т.е. "tty00". Далее мы исполь-
зуем структуру переключателя по этому значению, чтобы увидеть, что мы
хотим сделать для каждого конкретного терминала. Команды tset, пока-
занные здесь, относятся к среде XENIX и могут быть неприемлемыми в ва-
шей среде.
Строка 41 делает эхо-отображение значения TERM на экран, чтобы
сообщить вам тип вашего терминала, если он вам нужен. Это значение
доступно, если описанная ранее команда tset устанавливает для вас TERM
как часть своей обычной работы.
В строке 42 устанавливается переменная TERMCAP, указывающая на
/etc/termcap. Это обычный способ установки переменной TERMCAP. Другой
способ - присвоить TERMCAP текущую закодированную строку, которая на-
ходится в файле описания терминала. Если TERMCAP установлен на закоди-
рованную строку, то утилите vi нет необходимости обращаться к файлово-
му вводу-выводу, чтобы получить характеристики вашего терминала. Стро-
ка 43 экспортирует эти значения так, чтобы они были доступны на любом
уровне интерпретатора shell.
Строка 45 устанавливает частотную переменную. Это переменная из
XENIX и, возможно, имеется в System V. Она используется для установки
информации о времени.
Строка 46 устанавливает информацию о зоне времени, как это требу-
ется в библиотечном вызове ctime(3). Имея переменную TZ, вы можете пе-
рекрыть подразумеваемую зону времени при доступе ко времени из прог-
раммы на языке Си. Строка 47 экспортирует эти переменные.
Строка 49 устанавливает ваше значение маски пользователя (umask).
Она управляет подразумеваемым разрешением доступа для всех файлов, ко-
торые вы создаете. Система вычитает значение umask из 777. Результат
становится правом доступа к файлу, в данном случае 755. Когда вы соз-
даете каталог с правом доступа 755, этот каталог показывается командой
"ls -l" как rwxr-xr-x. Когда вы создаете некаталоговый файл с правом
доступа 755, этот файл показывается как rw-r--r--, что эквивалентно
644. Некаталоговые файлы не имеют бита x, поэтому их нельзя исполнить.
Каталогам же нужен установленный бит x, чтобы они были доступны по ко-
манде cd.
Строки 51 и 52 сообщают вам о времени вашего сеанса работы в
системе. Строка 51 сообщает вам текущее время вашего входа в систему,
а строка 52 вызывает программу lastlog, которая печатает дату вашей
последней регистрации в системе. Программа lastlog описана в главе 5.
Строки 54-58 инициализируют переменные, генерирующие цвета на
цветном мониторе. Управляющие значения являются стандартными значения-
ми кодов ANSI. Это работает в системе XENIX и может работать в вашей
системе. Растровая графика не доступна, но имеется символьная графика
и различные основные (foreground) и фоновые (background) цвета. Основ-
ные цвета кодируются числами, начиная с 30, а фоновые цвета - числами
с 40.
Строки 60-66 - просто для забавы. Они представляют собой хитрый
способ устанавливать каждый день на экране различные цвета. Строка 60
начинается с запуска команды date и передачи ее выхода по конвейеру
команде cut. Вырезается первое поле, которое является днем недели. За-
тем мы создаем структуру переключателя по строке дня, выполняя различ-
ные действия для каждого дня. Благодаря эхо-отображению управляющих
последовательностей, монитор реагирует немедленно.
Теперь, когда мы ознакомились с "домашней" средой, следующий шаг
- обратиться к средам, находящимся вне регистрационного каталога
($HOME). Например, что представляют собой другие каталоги на том же
уровне, что ваш $HOME ? Кто еще работает в системе? Как попроще полу-
чить доступ к их каталогам? Можете ли вы запускать программы в чужих
каталогах? Такого рода вопросы и действия относятся к другим людям в
вашей системе.
Единственный способ ответить на эти вопросы - посмотреть вокруг
себя. Никто не собирается рассказывать вам, что такое система. Вы
должны сами исследовать ее и выяснить, куда вы можете ходить, а куда
нет. Система конечна, так что вы можете себе помочь, делая распечатки
всех каталогов и файлов.
Вы можете маневрировать в системе UNIX, используя относительную
нотацию. Поскольку системное дерево образовано из каталогов, обозначе-
ния . и .. позволяют нам двигаться вверх и вниз по дереву. В любой
точке .. означает родительский каталог текущего каталога, в котором мы
находимся.
Ниже показаны некоторые примеры относительных команд.
ls -l $HOME/.. перечисляет файлы в моем родительском
каталоге.
cd ../../.. в предположении, что текущим каталогом
является /usr/russ/src/c, делает моим
текущим каталогом /usr.
ls . перечисляет файлы в текущем каталоге.
ls .. перечисляет файлы в моем родительском
каталоге.
$HOME/../../bin/ls запускает ls в каталоге
/usr/russ/../../bin, т.е. в /bin/ls.
../fred/bin/ls запускает команду ls в каталоге
двоичных модулей Фреда, который имеет
тот же родительский каталог, что и я,
т.е. /usr/fred/bin/ls.
Системная среда не просто НАХОДИТСЯ в системе UNIX, а ЯВЛЯЕТСЯ
системой UNIX. Как мы увидим в этой книге, вся система - UNIX, Си, ко-
манды, файлы и т.д. - это просто логический подход к функционированию
компьютера. Программное обеспечение - это то, что определяет система
для конечного пользователя. Мы можем представлять все машины, работаю-
щие в системе UNIX, как одинаковые и трактовать каждый UNIX как один и
тот же. Мы предполагаем, что реакция машины будет каждый раз одинако-
вой.
Мы можем смотреть на UNIX таким же образом, как на физические за-
коны. Мы ограничены ими, но мы также вольны применять эти законы в си-
туациях и областях, с которыми мы до этого никогда не встречались. Мы
можем доверять этим законам и допускать, что они применимы везде, куда
бы мы ни направились. Такова система UNIX, по крайней мере в идеале.
Система имеет много сред. Важно понимать, что они собой представ-
ляют, как взаимодействуют и для чего могут быть использованы. Так же,
как
программы = структуры данных + алгоритмы
так и
UNIX = файловое дерево + утилиты
Среда UNIX - это сочетание двух важнейших вещей: файлового дерева
и интерфейса системных вызовов. Это дерево допускает бесконечное
расширение возможностей, позволяя монтировать внешние дисковые области
в любой точке файловой системы. Дерево помогает также в сборе логи-
чески связанных файлов, что делает систему более организованной.
Интерфейс системных вызовов обеспечивает набор инструментов, из
которых можно построить большинство других функций. Определение интер-
фейса System V имеется в виде типографской книги и может быть найдено
в книжных магазинах. Строгое следование этому стандарту гарантирует
совместимость с постоянно развивающейся AT&T System V.
Для того чтобы лучше понять мир UNIX, посмотрите пример распечат-
ки структуры UNIX на рис.1-3 . Это наглядное представление полного де-
рева корневой файловой системы. Любые другие расширения файловой
системы монтируются на эту файловую систему.
Точкой временного монтирования является /mnt. Более постоянные точки
монтирования должны быть созданы администратором, например /0, /1 и
т.д. или /usr1, /usr2 и т.д.
Самым левым каталогом является /bin, который содержит все главные
двоичные утилиты. Это наибольший из двух основных каталогов двоичных
модулей.
Следующий каталог - /dev, в котором размещены все файлы уст-
ройств. Файлы устройств являются точками доступа к периферии, подсое-
диненной к системе. Этот файл привязан к периферии с помощью ядра и
драйвера устройства.
Административные утилиты и конфигурационные файлы хранятся в
/etc. Примерами являются getty и gettydef, init и inittab, а также
файл паролей (/etc/passwd).
Следующий каталог - /lib, где размещены библиотеки компилятора.
Здесь могут храниться и другие типы библиотек.
Каталог /lost+found используется утилитой fsck (главное средство
поддержания файловой системы) для хранения логически удаленных файлов.
Если на самом деле вы хотите сохранить эти файлы, они могут быть изв-
лечены из этой удерживающей области после завершения уборки файловой
системы.
Следующий каталог - /mnt. Это временная точка монтирования для
файловых систем. Мы часто монтируем и демонтируем файловые системы
просто для того, чтобы запустить быструю проверку чего-либо. Здесь под-
ходящее место для этого.
Главным временным рабочим каталогом системы является /tmp. Многие
утилиты, такие как vi, fsck, интерпретаторы shell и программы резерв-
ного копирования, используют /tmp для хранения рабочих файлов.