Изучение принципов организации файловой системы ОС UNIX на примере QNX, страница 2

Утилита ls с ключом –l помимо всего прочего дает и информацию о типе файла. Эта информация отображается первым символом в выводимой строке для соответствующего файла.

Символ ‘–‘ соответствует регулярному файлу, символы ‘b’ и ‘c’ соответствуют блок- и байт-ориентированным специальным файлам, символ ‘d’ – каталогу, ‘l’ – связям, ‘p’ – FIFO, ‘s’ – сокетам.

С помощью скрипта будем получать информацию о типе файлов, присутствующих в указанном каталоге (как аргумент скрипта), а также пример файла данного типа, если он существует.

Ниже приведен скрипт.

#lab 2

#zadanie 1

#1 argument - katalog, gde sledyet proizvodit poisk

types='- c d l n s b p'

for i in $types

do

      echo $i

      file_search=`ls -lR $1 2>/dev/null | grep ^$i | head -1`

      if [ 2>/dev/null -z $file_search ]

      then

            echo "notfound"

      else

            echo "$file_search"

      fi

done

Результаты выполнения с разными аргументами.

$ sh files_types /home

-

-rw-rw-r--  1 root      root              6 Nov 05 17:36 qwertyu.txt

c

notfound

d

drwxrwxr-x  4 root      root           1024 Nov 05 17:39 .

l

lrwxrwxrwx  1 mary      root             26 Nov 05 17:39 face -> /usr/share/face

s/face3.gif

n

notfound

s

notfound

b

notfound

p

notfound

$

$ sh files_types /

-

-rwxr-xr-x  1 root      root          67656 Jul 10 02:14 aps

c

crw-------  1 root      root         0,   1 Dec 01 02:50 bpf

d

drwxr-xr-x 15 root      root           1024 Nov 05 17:39 .

l

lrwxrwxrwx  1 root      root              1 Nov 05 17:19 x86 -> .

n

nrw-rw-rw-  1 root      root              0 Dec 01 02:50 crypto

s

srw-rw-rw-  1 root      root              0 Dec 01 02:50 1

b

brw-------  1 root      root         5,   0 Dec 01 01:53 cd0

p

notfound

3.2. Получить все жесткие ссылки на заданный файл, находящиеся в разных каталогах пользовательского пространства (использовать конвейер команд и фильтрацию).

При создании файла в каталоге автоматически появляется жесткая ссылка на данный файл. Однако далеко не всегда она так и остается единственной. Часто файл может иметь несколько жестких ссылок, т.е. фигурировать на диске под различными именами. При этом все жесткие ссылки равноправны и неотличимы друг от друга, т.е. если мы откроем файл по одной ссылке и модифицируем его, то, открыв его по другой ссылке, мы увидим те же самые изменения, поскольку обе ссылки указывают на один и тот же файл.

Создать жесткую ссылку на файл можно с помощью утилиты ln, однако нужно иметь в виду, что жесткая ссылка на файл может быть создана только в пределах одного дискового раздела. Если же мы хотим создать ссылку на файл в другом разделе, то стоит воспользоваться символьными ссылками.

С помощью скрипта будем искать все жесткие ссылки на указанный файл (как аргумент скрипта), пользуясь тем фактом, что все жесткие ссылки имеют одинаковый inode.

#lab 2

#zadanie 2

#1 argument - pyt' k iskomomy faily

inod=`ls -li $1 | cut -c 1-8`

find /home -inode $inod

Результаты выполнения.

$ sh find_hl /home/mary/labs/lab2/for_links1.txt

/home/mary/labs/lab2/for_links1.txt

/home/mary/labs/lab2/for_links11.txt

/home/mary/labs/for_links12.txt

/home/mary/for_links13.txt


3.3 Изучить команду find. Используя ее ключи, получить расширенную информацию о файлах.

Утилита find имеет следующий синтаксис:

Find path… [operand_expression].

Она просматривает все каталоги и подкаталоги, начиная с заданного в параметре path.. и ищет файлы, подходящие под описание, заданное в параметре operand_expression. Утилита find имеет множество флагов, позволяющих задать самые разные критерии поиска, есть возможность объединить критерии поиска по «логическому и» или «логическому или». В таком случае в качестве пути, указывающего на область поиска, берется текущий каталог.