Каталоги та імена файлів UNIX

Всі належать користувачеві файли мають імена, що починаються з / usr / you, але якщо ваш єдиний файл називається junk, то, виконавши команду ls, ви не побачите імені / usr / you / junk імя файлу надрукується без префікса:

$ ls

junk

$

Це відбувається тому, що кожна програма, що виконується, тобто кожен процес, маєпоточний каталог і мається на увазі, що всі імена файлів починаються з імені цього каталогу, якщо тільки на початку імені не заданий явно символ косою риси / Отже, і у оболонки, в яку користувач потрапляє при вході в систему, і у команди ls є поточний каталог Команда pwd (print working directory – друкувати поточний каталог) виводить імя поточного каталогу:

$ pwd

/usr/you

$

Поточний каталог є атрибутом процесу, а не користувача або програми – у користувачів є реєстраційні каталоги, а у процесів – поточні Якщо процес породжує інший процес, то нащадок успадковує поточний каталог свого батька Але якщо дочірній процес переходить в інший каталог, на батьку це ніяк не відбивається – його поточний каталог залишиться колишнім, що б не робили його нащадки

Поняття поточного каталогу введено в чому для зручності позначення, адже воно дозволяє значно скоротити обсяг введеного текс-

та, але його основне призначення – організаційне Споріднені фай ли розміщуються в одному каталозі Зазвичай каталог / usr служить вершиною користувальницької файлової системи (Слово user скорочено до usr в дусі cmp, ls і т п) Каталог / usr / you являє собою реєстраційний, тобто поточний каталог при первом1 вході в систему В / usr / src знаходяться вихідні тексти системних програм, в / usr / src / cmd – вихідні тексти команд UNIX, в / usr / src / cmd / sh – тексти оболонки і т д Починаючи новий проект або просто розміщуючи групу файлів, наприклад кулінарних рецептів, можна створити новий каталог командою mkdir і розмістити там файли

$ pwd

/usr/you

$ mkdir  recipes

$ cd recipes

$ pwd

/usr/you/recipes

$ mkdir  pie  cookie

$ ed pie/apple

$ ed cookie/chocchip

$

Зверніть увагу на те, як просто виконується посилання на підкаталог Сенс pie / apple очевидний: рецепт яблучного пирога, розташований в каталозі, / usr/you/recipes/pie2 Можна було б помістити цей рецепт не в підкаталог каталогу рецептів, а, скажімо, в recipes/ap- plepie, але логічніше таки зберігати всі рецепти пирогів в окремому місці Наприклад, рецепт приготування глазурі можна помес тить в recipes / pie / crust замість того, щоб дублювати його в рецепті кожного пирога

Файлова система являє собою потужний засіб організації, але користувач може забути і те, куди він поклав файл, і те, які взагалі файли у нього є Вирішити цю проблему допоможе пара команд, переглядають каталоги Команда ls вельми корисна при пошуку файлів, але вона не переглядає подкаталогі3

$ cd

$ ls

1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Насправді і при всіх наступних входах теж чому автор написав

«При першому», незрозуміло, мова йде явно про поточний каталозі відразу після реєстрації на машині – Прямуючи науч ред

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp У перекладі з англійської recipes – рецепти, cookie – печиво, pie – пиріг, apple – яблуко, crust – глазур – Прямуючи перев

3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Більшість сучасних реалізацій UNIX допускають використання команди з параметром ls-R для рекурсивного перегляду підкаталогів – Прямуючи науч ред

junk recipes

$ file *

junk:      ascii  text recipes:               directory

$ ls recipes

cookie pie

$ ls recipes/pie

apple crust

$

Цю частину файлової системи можна представити графічно (рис 21)

Рис 21 Графічне подання файлової системи

Команда du (disc usage – використання диска) призначена для визначення дискового простору, займаного файлами каталогу, включаючи всі підкаталоги

$ du

6             /recipes/pie

4             /recipes/cookie

11           /recipes

13           

$

У стовпці зліва вказано кількість дискових блоків (зазвичай розміром 512 або 1024 байт кожний), займаних кожним з файлів Значення в рядку каталогу показує кількість блоків, зайнятих усіма файлами каталогу і його підкаталогами, включаючи і сам файл каталогу

Команда du має параметр-a (all – все), при завданні якого виво дяться всі файли каталогу Якщо серед файлів є каталоги, то du обробить і їх:

$ du -a

2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp /recipes/pie/apple

3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp /recipes/pie/crust

6             /recipes/pie

3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp /recipes/cookie/chocchip

4&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp /recipes/cookie

11           /recipes

1             /junk

13           

$

Висновок команди du-a можна перенаправити на grep, якщо потрібно знайти певний файл:

$ du -a  | grep  choc

3             /recipes/cookie/chocchip

$

У главі 1 вже розповідалося про те, що імя «» Відноситься до елементу каталогу, що посилається на сам каталог, що дозволяє звертатися до каталогу, не знаючи його повного імені

Команда du переглядає каталог у пошуках файлів якщо імя каталогу не вказано, то мається на увазі «», тобто поточний каталог Таким чином, junk і / Junk – це імена одного і того ж файлу

Каталоги, незважаючи на свої особливі властивості з точки зору ядра, розташовуються у файловій системі, як звичайні файли Вони можуть бути прочитані, як і всі файли Але на відміну від інших, файли каталогів не можуть бути створені або змінені звичайними засобами для збереження цілісності файлової системи ядро ​​залишає за собою контроль над вмістом цих файлів

Настав час поглянути на байти всередині каталогу:

$ od -cb  

0000000    4          \0    \0    \0    \0    \0    \0    \0    \0    \0    \0    \0    \0    \0

064 073 056 000 000 000 000 000 000 000 000  000 000 000 000 000

0000020 273     (        \0    \0    \0    \0    \0    \0    \0    \0   \0    \0    \0    \0

273 050 056 056 000 000 000 000 000 000 000  000 000 000 000 000

0000040 252        r   e     c     i   p     e     s    \0    \0    \0    \0    \0    \0    \0

252 073 162 145 143 151 160 145 163 000 000  000 000 000 000 000

0000060 230     =     j   u     n     k   \0    \0    \0    \0    \0    \0    \0    \0    \0    \0

230 075 152 165 156 153 000 000 000 000 000  000 000 000 000 000

0000100

$

Бачите імена файлів, «зашиті» всередині Формат каталогу поєднує двійкові і текстові дані Дані розташовані порціями по 16 байт, останні 14 з яких містять імя файлу, доповнене ASCII-символами NUL (зі значенням 0), а перші два повідомляють систе ме, де знаходиться службова інформація про даний файлі (повернемося до

цього пізніше) 1 Кожен каталог починається з пари записів: «» (крапка) і «.» (точка-точка)

$ cd Домашній каталог

$ cd recipes

$ pwd

/usr/you/recipes

$ cd .; pwd На один рівень вгору

/usr/you

$ cd .; pwd Ще на рівень вгору

/usr

$ cd .; pwd Ще на рівень вгору

/

$ cd .; pwd Ще на рівень вгору

/                     Вище йти нікуди

$

Каталог / називається кореневим каталогом системи Всі файли в системі знаходяться або в кореневому каталозі, або в його підкаталогах, при цьому кореневої каталог є батьківським сам для себе

Вправа 22 На підставі інформації цього розділу можна у загальних рисах уявити собі механізм роботи команди ls Підказка: cat > Foo ls-f foo ~

Вправа 23 (Більше складне) Як працює команда pwd ~

Вправа 24Команда du була створена для стеження за використанням диска Її застосування для пошуку файлів в каталозі представляється досить дивним і, можливо, неправильним Як альтернатива вивчіть сторінку керівництва find (1) і порівняйте ці дві команди Зокрема, порівняйте команду du-a | grep .. з відповідним викликом find Яка з них працює швидше Що промінь ше – написати нову програму або використовувати побічний ефект існуючої ~

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*