Утилита 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 имеет множество флагов, позволяющих задать самые разные критерии поиска, есть возможность объединить критерии поиска по «логическому и» или «логическому или». В таком случае в качестве пути, указывающего на область поиска, берется текущий каталог.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.