Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО отчёт №2.docx
Скачиваний:
37
Добавлен:
16.04.2015
Размер:
60.58 Кб
Скачать

2. Жёсткие ссылки

Скрипт, записывающий в выходной файл все жёсткие ссылки на заданный файл, находящиеся в разных каталогах пользовательского пространства:

#! /bin/sh

if [ $# -lt 1 ]

then

echo $0: error: File not specified

else

filename=$1

inode=`ls -i $filename | cut -c 1-8`

ls -lRi / | grep $inode > hardlinks.txt

fi

Создадим в разных каталогах 2 жёсткие ссылки на файл отчёта и запустим скрипт:

# ln otchet2.txt /link1

# ln otchet2.txt /home/SPO/link2

# ./script2 otchet2.txt

# cat hardlinks.txt

951363 -rw-rw-r-- 3 root root 90 Nov 04 19:46 link1

951363 -rw-rw-r-- 3 root root 90 Nov 04 19:46 link2

951363 -rw-rw-r-- 3 root root 90 Nov 04 19:46 otchet2.txt

Команда ln создаёт жёсткую ссылку.

3. Команда find

Предназначена для рекурсивного поиска файлов в заданном каталоге по заданным критериям. Основные опции команды:

  • -name — поиск по шаблону имени файла.

  • -iname — то же, что –name, только не учитывается регистр букв.

  • -level n — поиск файлов, расположенных в дереве каталогов на n уровней ниже заданного каталога.

  • -print — вывод полного имени найденного файла.

  • -echo 'text' — вывод текста; если есть скобки {}, то в них подставляется имя найденного файла.

  • -chmod mode — позволяет изменить права доступа к найденному файлу.

  • -ls — то же, что –print, но выводит в таком формате, как команда ls –l.

  • -exec command {} \; — выполняет над найденным файлом указанную команду.

  • -inode file|n — поиск файлов с тем же серийным номером, как у файла file, или с серийным номером n.

  • -lname file — поиск символических ссылок на файл file.

  • -type c — поиск файлов типа c, где c может быть равно: b, c, d, p (FIFO), f (regular file), l, n, s.

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

# for i in b c d p f l n s

> do

> find / -type $i -ls | head -n 1

> done

brw------- 1 root root 2880 Nov 03 17:30 /dev/fd0

crw-rw---- 1 root root 0 Nov 04 03:20 /dev/devi/ig1

drwxr-xr-x 15 root root 1024 Nov 04 20:46 /

-rw-rw-r-- 1 root root 1366048 Oct 18 00:24 /.boot/qnxbase.ifs

lrwxrwxrwx 1 root root 2 Oct 18 00:23 /bin/aps

nrw------- 1 root root 0 Nov 04 03:20 /proc/dumper

srw-rw-rw- 1 root root 0 Nov 05 00:35 /dev/socket/1

Команда head с опцией –n 1 выводит только первую строку из входных данных.

4. Команда od

Скрипт, позволяющий проанализировать содержимое файла-каталога с помощью команды od при выполнении различных операций над файлами и каталогами, а также выявить изменения, вносимые в него при любой операции:

#! /bin/sh

mkdir testdir

echo 'Create new directory'>output4.txt

od -t c testdir>f1

cat f1>>output4.txt

cp /home/SPO/Lab2/otchet2.txt ./testdir/testfile

echo '\nCopy a file to directory'>>output4.txt

./pat1

mv ./testdir/testfile ./testdir/myfile.txt

echo '\nRename file in directory'>>output4.txt

./pat2

rm ./testdir/myfile.txt

echo '\nRemove file from directory'>>output4.txt

./pat1

mkdir ./testdir/subdir

echo '\nCreate subdirectory in directory'>>output4.txt

./pat2

> ./testdir/subdir/newfile

echo '\nCreate new file in subdirectory'>>output4.txt

./pat1

rm f1 f2 ./testdir/subdir/newfile

rmdir ./testdir/subdir

rmdir ./testdir

Файл pat1:

#! /bin/sh

od -t c testdir>f2

cat f2>>output4.txt

echo '\nWhat have been changed in dump:'>>output4.txt

diff f1 f2 >> output4.txt

Файл pat2:

#! /bin/sh

od -t c testdir>f1

cat f1>>output4.txt

echo '\nWhat have been changed in dump:'>>output4.txt

diff f2 f1 >> output4.txt

Команда od с опцией –t c выводит дамп памяти, ассоциированный с указанным файлом, побайтно в восьмеричном коде, заменяя код на символы там, где это возможно.

Файл output4.txt после выполнения скрипта:

Create new directory

0000000000 \b \0 016 \0 \0 \0 \0 \0 040 \0 \0 \0 \0 \0 \0 \0

0000000020 030 \0 001 \0 . \0 \0 \0 @ 004 016 \0 \0 \0 \0 \0

0000000040 @ \0 \0 \0 \0 \0 \0 \0 030 \0 002 \0 . . \0 \0

0000000060

Copy a file to directory

0000000000 \b \0 016 \0 \0 \0 \0 \0 040 \0 \0 \0 \0 \0 \0 \0

0000000020 030 \0 001 \0 . \0 \0 \0 @ 004 016 \0 \0 \0 \0 \0

0000000040 @ \0 \0 \0 \0 \0 \0 \0 030 \0 002 \0 . . \0 \0

0000000060 016 \0 016 \0 \0 \0 \0 \0 ` \0 \0 \0 \0 \0 \0 \0

0000000100 040 \0 \b \0 t e s t f i l e \0 t \0 \0

0000000120

What have been changed in dump:

4c4,6

< 0000000060

---

> 0000000060 016 \0 016 \0 \0 \0 \0 \0 ` \0 \0 \0 \0 \0 \0 \0

> 0000000100 040 \0 \b \0 t e s t f i l e \0 t \0 \0

> 0000000120

Rename file in directory

0000000000 \b \0 016 \0 \0 \0 \0 \0 040 \0 \0 \0 \0 \0 \0 \0

0000000020 030 \0 001 \0 . \0 \0 \0 @ 004 016 \0 \0 \0 \0 \0

0000000040 @ \0 \0 \0 \0 \0 \0 \0 030 \0 002 \0 . . \0 \0

0000000060 016 \0 016 \0 \0 \0 \0 \0 ` \0 \0 \0 \0 \0 \0 \0

0000000100 040 \0 \n \0 m y f i l e . t x t \0 \0

0000000120

What have been changed in dump:

5c5

< 0000000100 040 \0 \b \0 t e s t f i l e \0 t \0 \0

---

> 0000000100 040 \0 \n \0 m y f i l e . t x t \0 \0

Remove file from directory

0000000000 \b \0 016 \0 \0 \0 \0 \0 040 \0 \0 \0 \0 \0 \0 \0

0000000020 030 \0 001 \0 . \0 \0 \0 @ 004 016 \0 \0 \0 \0 \0

0000000040 @ \0 \0 \0 \0 \0 \0 \0 030 \0 002 \0 . . \0 \0

0000000060

What have been changed in dump:

4,6c4

< 0000000060 016 \0 016 \0 \0 \0 \0 \0 ` \0 \0 \0 \0 \0 \0 \0

< 0000000100 040 \0 \n \0 m y f i l e . t x t \0 \0

< 0000000120

---

> 0000000060

Create subdirectory in directory

0000000000 \b \0 016 \0 \0 \0 \0 \0 040 \0 \0 \0 \0 \0 \0 \0

0000000020 030 \0 001 \0 . \0 \0 \0 @ 004 016 \0 \0 \0 \0 \0

0000000040 @ \0 \0 \0 \0 \0 \0 \0 030 \0 002 \0 . . \0 \0

0000000060 > 001 \r \0 \0 \0 \0 \0 ` \0 \0 \0 \0 \0 \0 \0

0000000100 040 \0 006 \0 s u b d i r \0 t x t \0 \0

0000000120

What have been changed in dump:

4c4,6

< 0000000060

---

> 0000000060 > 001 \r \0 \0 \0 \0 \0 ` \0 \0 \0 \0 \0 \0 \0

> 0000000100 040 \0 006 \0 s u b d i r \0 t x t \0 \0

> 0000000120

Create new file in subdirectory

0000000000 \b \0 016 \0 \0 \0 \0 \0 040 \0 \0 \0 \0 \0 \0 \0

0000000020 030 \0 001 \0 . \0 \0 \0 @ 004 016 \0 \0 \0 \0 \0

0000000040 @ \0 \0 \0 \0 \0 \0 \0 030 \0 002 \0 . . \0 \0

0000000060 > 001 \r \0 \0 \0 \0 \0 ` \0 \0 \0 \0 \0 \0 \0

0000000100 040 \0 006 \0 s u b d i r \0 e \0 t \0 \0

0000000120

What have been changed in dump:

5c5

< 0000000100 040 \0 006 \0 s u b d i r \0 t x t \0 \0

---

> 0000000100 040 \0 006 \0 s u b d i r \0 e \0 t \0 \0

Пустой каталог занимает 48 байт в памяти. В дампе каталога можно заметить точку и две точки, перед ними расположены серийные номера (inode) соответственно самого каталога и вышележащего. После копирования в каталог файла в конец дампа каталога добавилось некоторое количество байт, в которых содержится inode файла и его имя. При переименовании файла дамп конечно же изменился. При удалении файла дамп каталога вернулся к первоначальному виду. При создании подкаталога дамп увеличился, и теперь в нём можно прочитать имя подкаталога. Кстати, когда мы удалили файл, байты, в которых было записано его расширение, не были очищены, и они до сих пор могут быть прочитаны, хотя к дампу нашего каталога они, видимо, уже не относятся. При создании нового файла в подкаталоге были изменены 2 байта в конце дампа.