У вас вопросы?
У нас ответы:) SamZan.net

Тема- Файловые системы Д

Работа добавлена на сайт samzan.net: 2016-03-13

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 10.3.2025

Санкт-Петербургский Государственный Политехнический Университет

Факультет Технической Кибернетики

Кафедра Компьютерных Систем и Программных Технологий

ОТЧЁТ О ЛАБОРАТОРНОЙ РАБОТЕ №2

Дисциплина: Системное программное обеспечение

Тема: Файловые системы

Д.А. Киселёв Е.В. Душутина

Выполнил студент гр. 4081/10       

Преподаватель           

Санкт-Петербург

2012

Цель работы:

Изучение файловой системы ОС QNX.

Программа работы:

  1.  Используя команду ls, получить информацию о всех возможных типах файлов ФС в выходном файле. Оформить в виде скрипта.
  2.  Получить все жесткие ссылки на заданный файл, находящиеся в разных каталогах пользовательского пространства (использовать конвейер команд и фильтрацию).
  3.  Изучить команду find. Используя ее ключи, получить расширенную информацию о типах файлов.
  4.  Проанализировать содержимое файла-каталога с помощью команды od при выполнении различных операций с файлами:

А) организовать пустой каталог

Б) скопировать в него файл

В) переименовать

Г) удалить

Д) создать подкаталог

Е)создать в нем файл

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

 

  1.  Ознакомиться с содержимым файла /etc/passwd, /etc/shadow, утилитой /usr/bin/passwd, проанализировать права доступа к этим файлам
  2.  Изучить команды изменения прав доступа и владельца chmodchown на примере специально созданного для этих целей каталога с файлами. Ознакомиться с флагом SUID. Экспериментально установить, как формируются итоговые права на использование файла, если права пользователя и группы, в которую он входит, различны.
  3.  Разработать программу-шлюз для доступа к данным другого пользователя при отсутствии прав на чтение информации (используя флаг SUID)
  4.  Утилитой  df получить информацию о ФС, установленной на компьютере.
  5.  Проанализировать все возможные способы формирования ссылок (lnlinkcp и т.д.) и подтвердить экспериментально. Предложить скрипт, подсчитывающий и перечисляющий все символические ссылки на файл в разных каталогах.
  6.  Пояснить принцип работы утилиты file. Определить, где находятся магические числа, идентифицирующие тип файла, на примере исполняемого файла и любого другого типа по выбору. Команду file выполнить с разными ключами.
  7.  Сопоставить возможности исполнения наиболее часто используемых  операций, варьируя правами доступа к файлу и каталогу (оформить в виде таблицы).

1. Типы файлов

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

#! /bin/sh

filetypes=`ls -lRa / | cut -c 1 | grep -v / | grep -v t | sort | uniq | tr '\n' ' '`

echo Existing types of files on this computer: $filetypes>filetypes.txt

Результат:

# ./script1

# cat filetypes.txt

Existing types of files on this computer: - b c d l n s

Найденные типы файлов:

  1.  "-" – обычный файл (regular file);
  2.  "b" – специальный файл устройства (блочный файл, позволяет производить обмен данными с устройством в виде блоков фиксированной длины);
  3.  "c" – специальный файл устройства (символьный файл, используется для небуферизированного обмена данными);
  4.  "d" – каталог;
  5.  "l" – символическая связь (позволяет косвенно адресовать файл);
  6.  "n" – именованный специальный файл;
  7.  "s" – сокет (предназначен для взаимодействия между процессами).

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

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

  1.  -name — поиск по шаблону имени файла.
  2.  -iname — то же, что –name, только не учитывается регистр букв.
  3.  -level n — поиск файлов, расположенных в дереве каталогов на n уровней ниже заданного каталога.
  4.  -print — вывод полного имени найденного файла.
  5.  -echo 'text' — вывод текста; если есть скобки {}, то в них подставляется имя найденного файла.
  6.  -chmod mode — позволяет изменить права доступа к найденному файлу.
  7.  -ls — то же, что –print, но выводит в таком формате, как команда lsl.
  8.  -exec command {} \; — выполняет над найденным файлом указанную команду.
  9.  -inode file|n — поиск файлов с тем же серийным номером, как у файла file, или с серийным номером n.
  10.  -lname file — поиск символических ссылок на файл file.
  11.  -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 байта в конце дампа.

5. Файлы /etc/passwd, /etc/shadow и утилита /usr/bin/passwd

Содержимое файла /etc/passwd:

root:x:0:0:Superuser:/root:/bin/sh

bin:x:1:1:Binaries Commands and Source:/bin:

daemon:x:2:2:System Services:/daemon:

mail:x:8:40:User Mail:/var/spool/mail:

news:x:9:50:Network News:/var/spool/news:

uucp:x:12:60:Network News:/var/spool/news:

ftp:x:14:80:FTP User:/home/ftp:

sshd:x:15:6:sshd:/var/chroot/sshd:/bin/false

nobody:x:99:99:Nobody:/:

gr40812:x:100:100::/home/gr40812:/bin/sh

gr40811:x:101:100::/home/gr40811:/bin/sh

Здесь записана информация о пользователях в следующем формате:

<Имя пользователя>:<пароль>:<UID>:<GID>:<комментарии>:<домашний каталог>:<интерпретатор shell>

Он доступен для чтения всем пользователям, на запись только администратору. В целях безопасности пароли в нём не хранятся, для них есть отдельный зашифрованный файл /etc/shadow, который доступен для чтения и записи только администратору. Для того, чтобы обычный пользователь мог изменить свой пароль, существует утилита /usr/bin/passwd, которая доступна администратору и группе root на чтение, запись и исполнение, а всем остальным – на чтение и исполнение. Эта программа может выполнять действия от имени администратора, независимо от того, кто её запустил.

6. Изменение прав доступа и владельца

Для изменения прав доступа к файлу предназначена утилита chmod. Синтаксис:

chmod [-Rv] mode file...

Опция –R используется для изменения прав доступа ко всем файлам в указанном каталоге и в подкаталогах. mode записывается в следующем виде:

[who]operator[permissions][,symbolic_mode]

Здесь who указывает для кого необходимо изменить права доступа, и может принимать одно из следующих значений: u (для владельца файла), g (для группы-владельца), o (для всех остальных) или a (для всех). Operator указывает действие: + (добавить право), - (удалить право) или = (задать права на чтение, запись и выполнение). Permissions указывает собственно права, которые должны быть изменены: r (чтение), w (запись), x (выполнение), s (право на выполнение файла от имени его владельца, то есть SUID (если в поле who содержится или подразумевается u), или от имени группы-владельца, то есть SGID (если в поле who содержится или подразумевается g)) и другие.

Пример записи команды chmod:

chmod a+x,og-r myfile file2 zzz

Существует и более короткий формат записи данной команды:

chmod 754 myfile

Здесь каждый разряд восьмеричного числа, состоящий из трёх бит, определяет права на чтение запись и выполнение для владельца, группы-владельца и всех остальных.

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

Для изменения владельца файла предназначена утилита chown. Синтаксис:

chown [-Rv] owner[:group] file...

Опция –R используется для изменения владельца всех файлов в указанном каталоге и в подкаталогах. owner – имя пользователя или его ID. group – имя группы или ID группы.

Пример записи команды chown:

chown 101 myfile

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

7. Программа-шлюз

Текст программы:

#include <stdio.h>

main ( int argc, char *argv [] )

{

if (argc>1) {

 FILE *f;

 f=fopen(argv[1],"r");

 if (f) {

  char str[64];

  while ( fgets(str, sizeof(str), f) ) {

   printf("%s", str);

  }

  fclose(f);

 }

 else printf("%s: File %s couldn't be open\n", argv[0], argv[1]);

}

else printf("%s: File was not specified\n", argv[0]);

}

Скомпилируем её стандартным компилятором в исполняемый файл gateway, сделаем администратора владельцем этого файла и установим атрибут SUID:

$ login root

Wed Dec 26 17:05:42 2012 on /dev/ttyp0

Last login: Wed Dec 26 16:52:50 2012 on /dev/ttyp0

edit the file .profile if you want to change your environment.

To start the Photon windowing environment, type "ph".

# cd /home/dm/SPO/40811/Lab2

# cc gateway.c -o gateway

# chmod u+s gateway

# ls -l ./gateway

-rwsrwxr-x  1 root      root           4520 Dec 26 17:07 ./gateway

Создадим текстовый файл, доступ к которому имеет только администратор:

# echo qwerty98765432 > /root/myfile.txt

# chmod 600 /root/myfile.txt

# ls -l /root/myfile.txt

-rw-------  1 root      root             15 Dec 26 17:14 /root/myfile.txt

Попробуем прочесть /root/myfile.txt от имени обычного пользователя:

# login dm

Wed Dec 26 17:18:33 2012 on /dev/tty

Wed Dec 26 17:18:33 2012 on /dev/tty

Last login: Wed Dec 26 17:18:33 2012

$ cat /root/myfile.txt

/root/myfile.txt: Permission denied

Теперь прочитаем его с помощью программы-шлюза gateway:

$ cd ./SPO/40811/Lab2

$ ./gateway /root/myfile.txt

qwerty98765432

8. Утилита df

Предназначена для получения информации о свободном дисковом пространстве. Синтаксис:

df [-ghknP] [device|directory|file]

По умолчанию дисковое пространство измеряется в количестве 512-байтных блоков. Опция –k используется для измерения пространства количеством 1024-байтных блоков. Опция –h используется для измерения пространства в единицах, удобных для чтения человеком (байты, килобайты и т.д.). Опция –P используется для отображения заголовков столбцов таблицы. Опция –g используется для отображения более подробной информации:

# df -ghP

Filesystem                  Size      Used Available Capacity  Mounted on

/dev/hd0t179                7.9G      1.5G      6.4G      20%  /

/dev/umass0t11              7.4G      6.5G      927M      88%  /fs/usb0/

/dev/cd0                    1.4G      1.4G         0     100%  /fs/cd0/

/dev/umass0                 7.4G      7.4G         0     100%

/dev/fd0                    1.4M      1.4M         0     100%

/dev/hd0                    8.0G      8.0G         0     100%

# df -g

/dev/hd0t179   /

   Blocks:  8385880 total   6746489 avail   [1024-byte blocks]

   Files :  1048240 total   1025173 avail

   Type  : qnx6

   Flags : 00000000 []

   Option: sync=optional

/dev/umass0t11   /fs/usb0/

   Blocks:  1956336 total    237239 avail   [4096-byte blocks]

   Files :        0 total         0 avail

   Type  : dos (fat32)

   Flags : 00000020 [noatime]

   Option: fsi=use

/dev/cd0   /fs/cd0/

   Blocks:   740464 total         0 avail   [2048-byte blocks]

   Files :        0 total         0 avail

   Type  : cd (joliet)

   Flags : 00000001 [rdonly]

   Option:

/dev/umass0

   Blocks: 15687680 total         0 avail   [512-byte blocks]

   Files :        0 total         0 avail

   Type  : blk-umass

   Flags : 00000020 [noatime]

   Option:

/dev/fd0

   Blocks:     2880 total         0 avail   [512-byte blocks]

   Files :        0 total         0 avail

   Type  : blk-fd

   Flags : 00000001 [rdonly]

   Option:

/dev/hd0

   Blocks: 16777216 total         0 avail   [512-byte blocks]

   Files :        0 total         0 avail

   Type  : blk-hd

   Flags : 00000000 []

   Option:

Рассмотрим первые 2 устройства:

  1.  /dev/hd0t179 – название специального файла устройства, "hd0" говорит о том, что это жёсткий диск №0. После буквы t указан тип файловой системы. В следующем столбце указан размер диска, далее – сколько байт занято и сколько свободно, затем – какая часть диска занята в процентах. В последнем столбце указано имя точки монтирования. При отображении более детальной информации выводится количество всех блоков в устройстве, количество доступных блоков, размер блока (1024 байта). Тип файловой системы 179 соответствует ФС QNX6.
  2.  /dev/umass0t11. "umass" говорит о том, что это USB-устройство для хранения данных. Тип файловой системы 11 соответствует ФС FAT32. Далее всё аналогично первому устройству.

9. Способы формирования ссылок

  1.  При создании нового файла или копировании создаётся жёсткая ссылка на файл. Жёсткая ссылка представляет из себя связь имени файла с метаданными (inode) и данными файла. Каждому имени соответствует жёсткая ссылка. Такая архитектура позволяет одному файлу иметь несколько имён в ФС. Пока данные файла связаны хотя бы с одним именем, их можно использовать, то есть можно совершать некоторые действия с файлом. Если удалить все имена, связанные с данными файла, то файл также будет удалён. Количество жёстких ссылок на файл можно увидеть во втором столбце, если ввести команду lsl file. Если создать новый каталог, то на него сразу же будет две жёстких ссылки: ссылка из того каталога, в котором он находится и ссылка на самого себя, расположенная внутри нового каталога. При этом на тот каталог, в котором был создан новый, появится ещё одна жёсткая ссылка, расположенная в новом каталоге.
  2.  Жёсткую ссылку можно создать с помощью команды link. Ей надо указать файл (одно из его имён) и новое имя, которое будет также связано с этим файлом. Все жёсткие ссылки на один файл должны находиться в каталогах одного и того же дискового раздела, так как индексный дескриптор файла уникален только в пределах раздела.
  3.  Кроме того, жёсткую ссылку можно создать с помощью команды ln. Она отличается от link тем, что имеет дополнительные опции.
  4.  С помощью команды lns можно создать символическую ссылку. Символическая связь является особым типом файла, она позволяет косвенно адресовать другой файл. Данные файла, являющегося символической связью, содержат только имя целевого файла. Таким образом, можно создать символическую связь даже на несуществующий файл. ОС работает с символическими ссылками не так, как с обычными файлами. Например, при выводе на экран содержимого символической ссылки появятся данные того файла, на который она ссылается. А при вводе команды lsl file, если file является символической ссылкой, появится не только имя файла file, но и его данные.

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

#! /bin/sh

if [ $# -lt 1 ]

then

echo $0: error: File not specified

else

filename=$1

ls -lRa / | grep $filename$ | grep ^l > symlinks.txt

echo -n total >> symlinks.txt

wc -l symlinks.txt | cut -c1-9 >> symlinks.txt

fi

Команда wc подсчитывает число слов, байт или строк в файле.

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

# ln -s /home/SPO/Lab2/otchet2.txt /symlink1

# ln -s /home/SPO/Lab2/otchet2.txt /home/SPO/symlink2

# ln -s /home/SPO/Lab2/otchet2.txt /root/symlink3

# ./script9 otchet2.txt

# cat symlinks.txt

lrwxrwxrwx  1 root      root             26 Dec 26 20:39 symlink1 -> /home/SPO/Lab2/otchet2.txt

lrwxrwxrwx  1 root      root             26 Dec 26 20:39 symlink2 -> /home/SPO/Lab2/otchet2.txt

lrwxrwxrwx  1 root      root             26 Dec 26 20:40 symlink3 -> /home/SPO/Lab2/otchet2.txt

total        3

10. Утилита file

Определяет тип файла. Для этого она выполняет разные тесты, которые можно разделить на 3 группы:

  1.  Filesystem tests – основаны на анализе кода возврата системного вызова stat(). Программа проверяет не пустой ли файл, и не принадлежит ли он к одному из специальных типов файлов. Все известные типы файлов распознаются, если они определены в системном файле /usr/include/sys/stat.h.
  2.  Magic number tests – используются для проверки файлов, данные в которых записаны в определённом формате. В определённом месте в начале таких файлов записано магическое число, которое позволяет ОС определить тип файла. Все известные ОС магические числа по умолчанию хранятся в файле /usr/share/misc/magic.
  3.  Language tests – используются для анализа языка, на котором написан файл, если это файл в формате ASCII. Выполняется поиск стандартных строк, которые могут соответствовать определённому языку.

Первый тест, который завершится успешно, выводит тип файла. Типы файлов можно разделить на 3 основные группы:

  1.  Текстовые – файл содержит только ASCII символы и может быть безопасно прочитан на терминале.
  2.  Исполняемые – файл содержит результаты компилирования программы в форме понятной ядру ОС.
  3.  Данные – всё, что не подходит в первые 2 группы (обычно это бинарные или непечатаемые файлы). Исключение составляют well-known форматы, используемые для хранения бинарных данных.

Синтаксис:

file [-bcLnvz] [-f namefile] [-m magicfile] file ...

Опции:

  1.  -b – не выводить имя файла перед его типом;
  2.  -m magicfile – определяет альтернативный файл с магическими числами;
  3.  -с – обычно используется для дебага нового файла с магическими числами перед его использованием;
  4.  -f namefile – определить типы файлов, имена которых записаны в файле namefile;
  5.  -L – определять типы файлов, на которые ссылаются заданные символические ссылки, а не типы ссылок;
  6.  -n – выводить имя файла перед его типом (по умолчанию);
  7.  -v – вывести версию программы и выйти;
  8.  -z – пытаться смотреть внутри сжатых файлов.

Посмотрим, как выглядят дампы памяти файлов разных типов:

# file gateway

gateway: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

# od -t c gateway | head -n 2

0000000000 177   E   L   F 001 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0

0000000020 002  \0 003  \0 001  \0  \0  \0  \0 004 004  \b   4  \0  \0  \0

# file ../Lab1/prog1

../Lab1/prog1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

# od -t c ../Lab1/prog1 | head -n 2

0000000000 177   E   L   F 001 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0

0000000020 002  \0 003  \0 001  \0  \0  \0 130 003 004  \b   4  \0  \0  \0

# file filetypes.txt

filetypes.txt: ASCII text

# od -t c filetypes.txt

0000000000   E   x   i   s   t   i   n   g 040   t   y   p   e   s 040   o

0000000020   f 040   f   i   l   e   s 040   o   n 040   t   h   i   s 040

0000000040   c   o   m   p   u   t   e   r   : 040   - 040   b 040   c 040

0000000060   d 040   l 040   n 040   s  \n

0000000070

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

11. Минимальные права доступа необходимые для выполнения наиболее часто используемых  операций:

Команда

Необходимые права доступа

Для обычного файла

Для каталога, содержащего файл

cd /home/dm

-

x

ls /home/dm

-

r

ls -l /home/dm

-

rx

cat myfile.txt

r

x

cat>>myfile.txt

w

x

./script1

rx

X

./prog1.out

x

X

rm myfile

-

wx

сp ./file1 ./copy1

r

wx

mv ./file1 ./file2

-

Wx

 Выводы:

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

Существует 6 типов файлов: обычный файл, каталог, специальный файл устройства, именованный канал (FIFO), символическая ссылка и сокет.

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

Утилита od позволяет просмотреть дамп памяти файла в разных форматах.

Были рассмотрены все возможные способы формирования ссылок.

Утилита find позволяет искать файлы по заданным критериям и производить заданные действия с найденными файлами.

Атрибут SUID, установленный на исполняемом файле, позволяет любому пользователю, который запустил этот файл, совершать действия от имени владельца файла. Это может быть использовано, например, когда обычный пользователь желает изменить свой пароль.

Утилита df позволяет получить информацию о файловой системе, а утилита file – определить тип файла.




1. 1 Нормативно ~ законодательные акты регулирующие порядок проведения ревизии кассы
2. статьям затрат 15статей
3. тема - навч. посіб
4. . Акты налогового законодательства 2.
5. 07 - Биология Психология Александр Марков - Комментарии 9 Агрессивная африканская рыбка sttotilpi burtoni
6. История развития операционных систем Windows
7. Голеностопный сустав- строение форма движения; мышцы действующие на этот сустав их кровоснабжение и инн.html
8. лекции по фармакологии и клинической фармакологии Учебное пособие для студентов заочного отделения Факуль
9. ПОЛИТИКА ДОХОДОВ И ЗАРАБОТНОЙ ПЛАТЫ
10. Видообразование