LINUX.ORG.RU

дамп каталога

 


0

1

Добрый день всем «сотрудникам» ЛОРа, к вам не большая просьба точнее вопрос: как при помощи hd, od ...(возможно какого ни будь hex редактора) продемонстрировать взаимосвязь inod-ов и имени файла в каталоге,вспоминая ту прописную истину, что местом хранения имени файла каталог как раз и является, в s5fs соответствие «очевидное», а вот в ufs как «думается» соответствия определены с блоками данных ....прав или не прав не знаю, буду благодарен объяснению или ссылке «где почитать», заранее спасибо!

 # uname
FreeBSD
# df -T
Filesystem   Type  1K-blocks    Used    Avail Capacity  Mounted on
/dev/da0s1a  ufs    31479228 4502316 24458576    16%    /
........
# ls -i
1148387 file1   1148388 file2   1148389 file3
# hd -d .
00000000  e2 85 11 00 0c 00 04 01  2e 00 00 00 1e 57 0b 00  |.............W..|
0000000   34274   00017   00012   00260   00046   00000   22302   00011
00000010  0c 00 04 02 2e 2e 00 00  e3 85 11 00 10 00 08 05  |................|
0000010   00012   00516   11822   00000   34275   00017   00016   01288
00000020  66 69 6c 65 31 00 ff ff  e4 85 11 00 10 00 08 05  |file1...........|
0000020   26982   25964   00049   65535   34276   00017   00016   01288
00000030  66 69 6c 65 32 00 ff ff  e5 85 11 00 c8 01 08 05  |file2...........|
0000030   26982   25964   00050   65535   34277   00017   00456   01288
00000040  66 69 6c 65 33 00 ff ff  00 00 00 00 00 00 00 00  |file3...........|
0000040   26982   25964   00051   65535   00000   00000   00000   00000
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000050   00000   00000   00000   00000   00000   00000   00000   00000
*
0000200
# hd -x .
00000000  e2 85 11 00 0c 00 04 01  2e 00 00 00 1e 57 0b 00  |.............W..|
0000000    85e2    0011    000c    0104    002e    0000    571e    000b
00000010  0c 00 04 02 2e 2e 00 00  e3 85 11 00 10 00 08 05  |................|
0000010    000c    0204    2e2e    0000    85e3    0011    0010    0508
00000020  66 69 6c 65 31 00 ff ff  e4 85 11 00 10 00 08 05  |file1...........|
0000020    6966    656c    0031    ffff    85e4    0011    0010    0508
00000030  66 69 6c 65 32 00 ff ff  e5 85 11 00 c8 01 08 05  |file2...........|
0000030    6966    656c    0032    ffff    85e5    0011    01c8    0508
00000040  66 69 6c 65 33 00 ff ff  00 00 00 00 00 00 00 00  |file3...........|
0000040    6966    656c    0033    ffff    0000    0000    0000    0000
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
0000050    0000    0000    0000    0000    0000    0000    0000    0000
*
0000200
#
 

PS: было бы здорово пояснит какая колонка в выводе, ....что означает?



Последнее исправление: paco (всего исправлений: 1)
Ответ на: комментарий от pS

Спасибо за ответ, «Крис Касперски» с удовольствием прочту, кто захочет то ссылка на djvu тут: https://drive.google.com/file/d/0BzEtHTmqtyyyV0tNWXFXMzk4Tlk/view?usp=sharing

Что касается моего вопроса, то дело обстоит гораздо проще, структура каталога в UFS конечно сложнее чем в S5FS чтобы это увидеть в BSD надо почитать тут; /usr/include/sys/dirent.h:

struct dirent {
    __uint32_t d_fileno;        /* file number of entry */
    __uint16_t d_reclen;        /* length of this record */
    __uint8_t  d_type;      /* file type, see below */
    __uint8_t  d_namlen;        /* length of string in d_name */
#if __BSD_VISIBLE
#define MAXNAMLEN   255
    char    d_name[MAXNAMLEN + 1];  /* name must be no longer than this */
#else
    char    d_name[255 + 1];    /* name must be no longer than this */
#endif
};
и в итоге обнаружить эти самые соответствия:
                               d_fileno (1148387)
                                           /        ,--------- d_reclen (16)
                                          /        /    ,----- d_type (8 = DT_REG)
                                         /        /    /  ,--- d_namlen (5)
                                   vvvvvvvvvvv vvvvv vv vv
00000010  0c 00 04 02 2e 2e 00 00 [e3 85 11 00 10 00 08 05  |................|
00000020  66 69 6c 65 31 00 ff ff] e4 85 11 00 10 00 08 05  |file1...........|
          ^^^^^^^^^^^^^^ ^^^^^^^^
                 \           `-------------------------------- padding
                  `------------------------------------------- d_name

Спасибо всем кому было интересно и «не очень»

paco
() автор топика
Ответ на: комментарий от paco

Можно проще:

$ ls -i
1148387 file1   1148388 file2   1148389 file3
$ hd .
00000000  e2 85 11 00 0c 00 04 01  2e 00 00 00 1e 57 0b 00  |.............W..|
00000010  0c 00 04 02 2e 2e 00 00  e3 85 11 00 10 00 08 05  |................|
00000020  66 69 6c 65 31 00 ff ff  e4 85 11 00 10 00 08 05  |file1...........|
00000030  66 69 6c 65 32 00 ff ff  e5 85 11 00 c8 01 08 05  |file2...........|
00000040  66 69 6c 65 33 00 ff ff  00 00 00 00 00 00 00 00  |file3...........|
00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200
$ od -ix .
0000000           1148386        17039372              46          743198
             85e2    0011    000c    0104    002e    0000    571e    000b
0000020          33816588           11822         1148387        84410384
             000c    0204    2e2e    0000    85e3    0011    0010    0508
0000040        1701603686          -65487         1148388        84410384
             6966    656c    0031    ffff    85e4    0011    0010    0508
0000060        1701603686          -65486         1148389        84410824
             6966    656c    0032    ffff    85e5    0011    01c8    0508
0000100        1701603686          -65485               0               0
             6966    656c    0033    ffff    0000    0000    0000    0000
0000120                 0               0               0               0
             0000    0000    0000    0000    0000    0000    0000    0000
*
0001000
$[.code]

paco
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.