Раздел 2
Обзор
В ОС UNIX вся информация размещается в файлах. Каждый файл имеет имя и принадлежит одному из четырех типов: обычный файл, каталог или специальные. Файлы организованы в файловую систему. В этом разделе объясняется иерархическая организация файловой системы ОС UNIX. Вы познакомитесь с командами, которые позволяют маневрировать в файловой системе
ЦЕЛИ
Файлы ОС UNIX
В ОС
UNIX файл - это любая информация, такая как письмо, отчет доклад, программа и т.д., которую вы храните. Файл имеет несколько частей: имя , содержание и индексный дескриптор inode (information node). В индексном дескрипторе хранится служебная и системная информация такая как длина файла, место хранения содержания файла на диске и т.д.Существует четыре основных типа файлов: обычный файл
(regular), каталог (directory), специальный (special) и символическая связь (symbolic link).Обычный файл содержит тексты заметок, программ или числа. Как правило, такие файлы вы создаете редактором (например,
vi) или текстовым процессором. Обычные файлы могут быть исполняемыми. Один тип исполняемых файлов - это shell программа, содержащая командные строки подобные тем, что вы вводите в ответ на приглашение shell. Другой тип выполняемого файла - это откомпилированная программа, которая содержит команды, переведенные с языка программирования высокого уровня (например, C) на машинный язык. Большинство команд ОС UNIX - это откомпилированные программы.Каталог организует или группирует вместе родственные файлы. Каталоги содержат имена своих файлов и индексные дескрипторы в таблице информации о файлах. Каждая запись в таблице является информацией о файле, такой как владелец файла, тип файла (каталог, обычный, специальный), размер файла, права доступа (чтение, запись, выполнение) и т.д. Каталог, находящийся на один уровень ниже другого каталога в файловой системе, называется подкаталогом
.Специальные файлы - это файлы устройств, таких как терминалы, диски, принтеры, ленточные устройства. Системный администратор обычно создает новые специальные файлы, когда в систему добавляется новое оборудование. Специальный файл связан с устройством.
Символическая связь - это файл, содержащий инструкции, которые указывают на другой файл. Символические связи могут связывать файлы в разных файловых системах. Они также помогают сохранять более старые имена каталогов совместно с более новыми. Например, в ранних версиях ОС
UNIX каталог news был организован в каталоге usr. Сейчас каталог news символически связан с каталогом news, находящемся в каталоге var.В отличие от других языков программирования в ОС
UNIX не требуется объявлять тип и резервировать место для файла перед его использованием. Нет также основанных на имени файла ограничений на его содержание.ФАЙЛЫ ОС UNIX
Имена файлов
Когда вы создаете файл, вы должны выбрать для него имя. Имя файла должно отражать его содержание. При именовании файла вы МОЖЕТЕ использовать:
Так как некоторые символы имеют специальное значение в командной строке, избегайте использования:
ls
с опцией -aИмена административных файлов обычно начинаются с точки (
.). Эти имена не появляются когда вы получаете список файлов командой ls. Для получения списка файлов, включающего имена , начинающиеся с точки, используйте опцию -a:$
ls -a<RET>
. bin fun numbers seepath unit4 unit7$
.. books groceries one line single unit5 unit8
.news_time calendar lunch file perm unit10 unit6 unit9
.profile echoit names phone unit3 unit6old
.news_time
- это пустой файл, который действует как штемпель даты для команды news. Дата файла показывает, когда вы последний раз читали новости, так что любые более ранние новости не рассматриваются как текущие.ИМЕНА ФАЙЛОВ -- ПРАВИЛА
ИЗБЕГАЙТЕ ЭТИХ ИМЕН:
John_rubenstein
Mail Box
Sue'snotes
AT&T
Файловая система ОС UNIX
Все файлы являются частью файловой системы ОС UNIX. Эта система является иерархической совокупностью каталогов и других файлов, имеющей древоподобную структуру. С иерархической структурой вы, вероятно, знакомы по организационной схеме компании.
President | ______________________________________________ | | | | Vice-Pres1 Vice-Pres2 Vice-Pres3 Vice-Pres4 | ____________________________ | | | Manager1 Manager2 Manager3 | Supervisor1
Эта структура имеет одну исходную точку - президент. Ниже идет второй уровень - вице-президентов, третий уровень - управляющих, четвертый - руководителей и т.д.
Аналогично структуре компании файловая система ОС
UNIX имеет одну исходную точку, называемую корень (root). Корневой каталог представлен косой чертой (/). Файловая система имеет только один корень. Области ниже корневого каталога включают другие каталоги, обычные файлы и специальные файлы.Вообще, структура файловой системы ОС
UNIX называется перевернутым деревом. Каталоги рассматриваются как части дерева, а обычные и специальные файлы - как его листья.ФАЙЛОВАЯ СИСТЕМА ОС UNIX
Некоторые стандартные каталоги
Типичная файловая система ОС
UNIX имеет каталоги:≈
news Это каталог для каждой темы новостей или файла новостей системы. Например, команда news terminals выводит на экран файл с именем terminals из каталога news≈
mail В этом каталоге появляются файлы с именами тех пользователей, для которых имеется новая почта.≈
tmp Для временных файлов, создаваемых пользователями.≈
src Для систем с исходными кодами этот каталог содержит файлы исходных кодов.≈
lib Этот каталог содержит в себе все дополнительные библиотеки.≈
bin Этот каталог содержит команды ОС UNIX, такие как banner или cal.≈
lbin Это каталог, где системный администратор может создавать файлы и каталоги для местных пользователей.НЕКОТОРЫЕ СТАНДАРТНЫЕ КАТАЛОГИ
Каталог входа и команда pwd
Когда вы первый раз входите в систему, она помещает вас в каталог, называемый вашим входным каталогом. Это ваша собственная подсистема или поддерево. Здесь вы можете делать каталоги, создавать файлы, переименовывать и перемещать их и т.д. Вы можете иметь настолько широкую и глубокую древовидную структуру в своей подсистеме, насколько это позволит объем памяти.
Куда бы вы ни перешли в ОС
UNIX, вы находитесь в каталоге, который называется текущим или рабочим каталогом. Думайте о вашем текущем каталоге, как о метке "вы - здесь". Когда вы входите в систему, ваш входной каталог является текущим.Команда
pwdКоманда
pwd (print working directory), показывает имя текущего каталога, начиная с корня. Например,$
pwd<RET>/home/stu2
$
В этом курсе в вашем входном каталоге уже есть созданные файлы. Следующая страница показывает подкаталоги и некоторые файлы вашего входного каталога.
КАТАЛОГ ВХОДА И КОМАНДА pwd
$
pwd<RET>/home/stu2
$
cdВ зависимости от прав доступа вы можете иметь разрешение на перемещение в другие каталоги и работу с файлами внутри них. Команда перемещения в другой каталог
- cd (change directory) с указанием имени пути. Имя пути (path name) описывает маршрут, следуя которому система находит файл. Каждый файл появляется однажды в списке индексных дескрипторов файловой системы и имеет уникальный путь из корневого каталога. Формат командной строки:cd имя-пути
Имя пути представляет собой список из нуля или более имен каталогов, разделенных символом косая черта (/), заканчивающийся именем желаемого файла или каталога. Существует два типа имен пути: полностью описанное и частичное или относительное
:Полностью описанное имя пути - это указание положения файла, начиная от корневого каталога.
Частичное или относительное имя пути - это указание положения файла, начиная от текущего каталога.
Вы должны выбрать надлежащий путь (относительный или полный) иначе система пошлет вам сообщение об ошибке:
path name: does not exist
Возвращение в каталог входа
Для того, чтобы вернуться в ваш каталог входа из любого места файловой системы ОС
UNIX, выполните команду cd без аргументов:$
cd<RET>$
КОМАНДА
cdФОРМАТ КОМАНДЫ:
cd имя -пути имя пути: маршрут, по которому система следует для нахождения файла, т.е. список каталогов, разделенных символами косая черта, заканчивающийся именем желаемого каталога полностью описанное имя пути: положение файла относительно корня относительное имя пути: положение файла относительно текущего каталога команда cd без опций: возвращение в каталог входаПолностью описанные имена пути
Полностью описанное имя пути или абсолютное имя пути описывает положение каталога, начиная от корня. Это имя пути ВСЕГДА начинается с / (косой черты). Затем следует список каталогов, разделенных символами /, заканчивающийся именем желаемого файла или каталога. Примером полностью описанного имени пути является вывод команды
pwd. Например, после изменения каталога на /home/stu2/bin командной строкой:$ cd /home/stu2/bin<RET>
$ pwd<RET>
/home/stu2/bin
$
Вы можете использовать полностью описанное имя пути всегда, когда вы использовали бы имя файла.
ПРИМЕР 1:
$ cd /bin<RET>
$ pwd<RET>
/bin
$ cat /etc/passwd<RET>
.$
grep ill /home/stu2/unit8/names<RET>Bill Gaskill
Millicent Zamirowski
$ cd /home/stu2/unit4<RET>
$ pwd<RET>
/home/stu2/unit4
$ ls /home/stu2/fun<RET>
ATTlogo
heart
morefun
thanks
$ pg /home/stu2/books<RET>
. . .$ cd<RET>
$ pwd<RET>
/home/stu2
$
Относительные имена пути
Относительное имя пути, также называемое частичным именем пути описывает положение каталога относительно вашего текущего каталога. Такое имя НИКОГДА не начинается с символа /.
При использовании относительных имен пути вы выбираете каталог в зависимости от, находится ли желаемый каталог выше или ниже вашего текущего каталога.
Чтобы выбрать каталог НИЖЕ текущего, записывают имена каталогов, разделенные символами /, заканчивая именем желаемого файла или каталога. Например, предположим, что вы находитесь в каталоге входа. Чтобы перейти в каталог
morefun с помощью относительного имени пути, наберите:$
Чтобы выбрать каталог ВЫШЕ текущего, используют специальное обозначение .. ("точка точка") для имени родительского каталога. Например,
../.. означает родительский каталог родительского каталога(на 2 каталога выше). Итак:Предположим, ваш текущий каталог
morefun. Вместо набора полностью описанного имени пути /home/stu2/unit8, вы можете перейти в каталог unit8, используя относительное имя пути:$
cd ../../unit8<RET>Первые .. ссылаются на родительский каталог
fun, следующие .. ссылаются на родительский каталог каталога fun, которым является stu2.ЗАМЕЧАНИЕ: В каком бы каталоге вы ни находились, текущий каталог всегда "точка" и родительский каталог всегда "точка точка". Вы будете использовать "точку" для установки текущего каталога в команде
find позже в этом разделе.Смотрите пример 1 на следующей странице.
ОТНОСИТЕЛЬНЫЕ ИМЕНА ПУТИ
относительное имя пути: положение файла или каталога относительно текущего каталога
ПРИМЕР 1
:$ cd unit8<RET>
$ pwd<RET>
/home/stu2/unit8
$ ls ../fun/morefun<RET>
terms
twilight.unix
$ cd ../fun<RET>
$ pwd<RET>
/home/stu2/fun
$
grep -i bug morefun/terms<RET>DEBUG -- Action commonly done by frogs
$ ls ../..<RET>
. . .$ wc ../unit4/work/sep.93<RET>
26 58 543 ../files/unit4/work/sep.93
$ cd ..<RET>
$ pwd<RET>
/home/stu2
$
Список файлов в каталоге
В уроке 3 раздела 1 вы использовали команду
ls для получения ASCII упорядоченного списка файлов в каталоге. Эта команда имеет несколько опций, которые могут быть добавлены в командной строке. Например, опция -F печатает символ / после каталогов, звездочку после выполняемых файлов и символ @ после символических связей. Формат команды:ls -F
Пример на следующей странице показывает каталоги и файлы в текущем каталоге
Списки файлов в других каталогах
Чтобы получить список файлов в другом каталоге, используйте имя пути этого каталога в качестве аргумента команды
ls. Пример 2 на следующей странице показывает получение списка файлов в каталоге receivable каталога unit4.В примере 3 опция
-F команды ls показывает, что каталог fun содержит каталог morefun.В примере 4 опция
-F команды ls показывает символически связанные файлы в каталоге /usr.СПИСОК ФАЙЛОВ В ТЕКУЩЕМ КАТАЛОГЕ
ПРИМЕР 1
:$ ls -F<RET>
bin/ fun numbers see path* unit4/ unit7/ books groceries one line* single* unit5/ unit8/ calendar lunchfile perm unit10/ unit6/ unit9/ echoit* names phone unit3/ unit6old/$
ПРИМЕР 2
:$ ls unit4/receivable<RET>
91_Adams 92_French 92_Reynolds
91_Harris 92_Anderson 92_Johnson
ПРИМЕР 3
:$ ls -F fun<RET>
ATT logo heart* morefun/ thanks
ПРИМЕР 4
:$ ls -F /usr<RET>
3Bnet/ include/ mail@ options@ sbin/ temp/
adm@ lbin/ net/ preserve@ share ucb/
admin/ lib/ news@ pub@ spool@ ucb include/
bin/ lost+found/ nserve@ sadm/ src/ uclib/
Список файлов в каталоге (продолжение)
(a)Общее число блоков диска, занимаемых всеми файлами списка. Это НЕ есть число файлов в каталоге.
(b)Тип файла. Буква
d для каталога, - (тире) для обычного файла, буква l для символически связанного файла.(c)Права доступа к файлу, обозначенные следующими 9-ю символами. Права доступа обсуждаются в разделе 4.
(d)Связи файла. Количество связей - это число каталогов, в списки файлов которых данный файл включается. Для каталогов наименьшее число связей - два, так как каждый каталог включается в свой список файлов и в список родительского каталога. Существует дополнительная связь для каждого подкаталога. Для обычных файлов число связей равно единице (если вы не связываете файлы командой
ln, обсуждаемой в разделе 4).(e)Входной идентификатор владельца файла.
(f)Групповой идентификатор файла. Группы обсуждаются в разделе 4.
(g)Количество байтов (символов) в файле.
(h)Дата и время создания или модификации файла.
(i)Имя файла.
Смотрите пример на следующей странице.
СПИСОК ФАЙЛОВ В КАТАЛОГЕ (ПРОДОЛЖЕНИЕ)
ПРИМЕР 1
: опция -l обеспечивает "длинный список" содержания каталога:$ ls -l<RET>
total25(a)
(b)(c)
(d) (e) (f) (g) (h) (i)
drwxr-xr-x 2slftrain 32 Nov 16 16:26 bin
-rw-rw---- 1slftrain 200 Nov 16 16:26 books
-rw-r----- 1slftrain 153 Nov 17 08:32 calendar
-rwxrwxrwx 1slftrain 38 Jan 16 16:32 echoit
drwxrwxrwx 3slftrain 96 Nov 17 16:19 fun
-rw-rw---- 1slftrain 339 Nov 16 16:38 groceries
-rw-rw---- 1slftrain 48 Nov 16 16:26 lunchfile
-rw-rw---- 1slftrain 182 Nov 16 16:26 names
-rw-rw---- 1slftrain 8 Nov 16 16:26 numbers
-rwxrwxrwx 1slftrain 45 Jan 16 16:33 oneline
-rw-r--r-- 1slftrain 42 Jan 17 12:52 perm
-rw-rw---- 1slftrain 646 Nov 16 16:26 phone
-rwxrwxrwx 1slftrain 11 Jan 16 16:30 seepath
-rwxrwxrwx 1slftrain 52 Jan 16 16:29 single
drwxr-xr-x 2slftrain 144 Dec 20 15:24 unit10
drwxrwx--- 2slftrain 240 Dec 16 15:31 unit3
drwxrwxrwx 4slftrain 336 Nov 18 08:49 unit4
.
.
.
$
Рекурсивные списки
Опция
-R команды ls выводит список содержания текущего каталога, затем списки содержания подкаталогов каждого уровня и т.д. до получения списка всей подсистемы. Формат:ls -R
Смотрите пример 1 на следующей странице.
РЕКУРСИВНЫЕ СПИСКИ
ПРИМЕР 1
:$ cd<RET>
$ ls -R<RET>
bin/ fun numbers see path* unit4/ unit7/ books groceries one line* single* unit5/ unit8 calendar lunch file perm unit10/ unit6/ unit9/ echoit* names phone unit3/ unit6old/../bin:
./fun: ATT logo heart* morefun/ thanks
./fun/morefun: termstwi light.unix
./unit10: charges* sdata* searcher* staff* temp.c*
./unit3: check.energy energy poem stu.info check.paint light sayings stu.number check.poem paint story wacky
./unit4: budget88 budget90 budget93 budgettot tot budget89 budget91 budget94 poem work/ budget8 totbudget92 budget9 totreceivable/
./unit4/receivable: 91_Adams 91_Somers 92_French 92_Reynolds 91_Harris 92_Anderson 92_Johnson
Определение типа файла командой file
Исследуя файловую систему, вы можете обнаружить некоторые файлы с интригующими именами и попробовать посмотреть их командой
cat. Если это не ASCII файл вывод на экран его содержания может вызвать искажения на вашем экране, после которых он не восстанавливается.Перед выводом содержимого файла на экран выполните команду
file. Она проверяет первые 512 символов файлов, указанных в качестве аргументов и делает предположение относительно их содержания. Например:$ file budget90 poem work<RET>
budget90:ascii text
poem:English text
work:directory
Замечание: Команда
file помечает любой ASCII файл, содержащий знаки пунктуации как "English text".Другие типы файлов, которые распознает команда
file, включают:Замечание: Если тип файла включает слово "text", вы можете вывести его на экран командой
cat.ОПРЕДЕЛЕНИЕ ТИПА ФАЙЛА, КОМАНДА FILE
команда
file: определяет, является ли содержимое файла:ПРИМЕР 1
:$ file unit4/budget90<RET>
unit4/budget90:ascii text
$ file fun<RET>
fun:directory
$
file unit3/poem<RET>unit3/poem:English text
$ cat unit3/poem<RET>
DESIDERATA POEM
Anonymous
Go placidly amid the noise and haste and remember what peace thare may be in silence. As far as possible without surrender be on good terms with all persons. Speak your truth quietly and clearly; and hear to others, even the
.
.
.
$ cd<RET>
$ file /usr/bin/who<RET>
/usr/bin/who:3b20 executable
$
Поиск файлов с помощью команды find
Если у вас большая файловая подсистема, вы можете забыть какой каталог содержит нужный вам файл. В этом случае файлы находит команда
find. Например:$ find . -name poem -print<RET>
./unit3/poem
./unit4/poem
Эта командная строка означает: начиная с ТЕКУЩЕГО КАТАЛОГА, найти все файлы, НАЗВАННЫЕ
poem, и НАПЕЧАТАТЬ их имена пути. СИНТАКСИС на странице find "Справочника пользователя ОС UNIX System V" имеет вид:find
список-имен-пути выражениеСписок-имен-пути - это каталог начала поиска. ЗАМЕЧАНИЕ: вы должны указать каталог.
Выражения перечислены на странице ОПИСАНИЕ. Вы можете:Замечание: Начиная поиск с корневого каталога, вы, вероятно, не будете иметь права доступа для поиска каждого каталога.
find печатает сообщение о каждом каталоге подсистемы для которого у вас нет права доступа для поиска. Так как такой обширный поиск слишком расточителен, избегайте начинать поиск с корневого каталога без крайней необходимости.ПОИСК ФАЙЛОВ -- КОМАНДА find
ПРИМЕР 1
:$
find . -name phone -print<RET>./unit5/phone
./unit6/phone
./unit7/phone
./unit8/phone
./phone
$ find . -print<RET>
.
./unit3
./unit3/energy
./unit3/sayings
. .ПРИМЕР 2
:$ find / -name calendar -print<RET>
find: cannot chdir to /home/thd
find: cannot open /home/jbm/wow
find: cannot chdir to /home/bob/stuff
/usr/bin/calendar
find: cannot chdir to /local/admin
/home/srh/calendar
/home/slf/uc1080/units/files/u7/calendar
/home/slf/uc1080/units/files/u8/calendar
. . .Выводы урока
Типы файлов: обычный, каталог, специальный и символическая связьКоманда pwd: вывод имени текущего каталога, начиная с корневого
Упражнение 2.1.А
А. Выполните следующие упражнения на вашем терминале. В пустых строчках запишите командные строки, которые вы вводите, используя полностью описанные имена пути
.B. Выполните следующие упражнения на вашем терминале. В пустых строчках запишите командные строки, которые вы вводите, используя относительные имена пути
.1. перейдите в каталог
unit6 вашего входного каталога.2. Перейдите в ваш каталог
receivable.3. Перейдите в ваш каталог
fun.4. Перейдите в ваш каталог
unit8.5. Вернитесь в ваш входной каталог.
6. Перейдите в родительский каталог вашего входного каталога.
7. В каталоге
morefun выполните команду banner с вашим именем в качестве аргумента, перенаправив ее выход в файл с именем myname.