- •Отчёт о лабораторной работе №2
- •1. Типы файлов
- •2. Жёсткие ссылки
- •3. Команда find
- •4. Команда od
- •5. Файлы /etc/passwd, /etc/shadow и утилита /usr/bin/passwd
- •6. Изменение прав доступа и владельца
- •7. Программа-шлюз
- •8. Утилита df
- •9. Способы формирования ссылок
- •10. Утилита file
- •11. Минимальные права доступа необходимые для выполнения наиболее часто используемых операций:
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 байта в конце дампа.