$ date
Tue Sep 27 12:07:24 EDT 1983 $ date > junk
$ ls -l junk
-rw-rw-rw 1 you 29 Sep 27 12:07 junk
$ ls -lu junk
-rw-rw-rw 1 you 29 Sep 27 06:11 junk
$ ls -lc junk
-rw-rw-rw 1 you 29 Sep 27 12:07 junk
$
Как видно из результата действия команды ls -lu
, изменение содержимого файла не влияет на дату последнего использования, а с изменением прав доступа связана только дата изменения индексного дескриптора, о чем выдается сообщение командой ls -lc
:
$ chmod 444 junk
$ ls -lu junk
-r--r--r-- 1 you 29 Sep 27 06:11 junk
$ ls -lc junk
-r--r--r-- 1 you 29 Sep 27 12:11 junk
$ chmod 666 junk $
Можно использовать флаг -t
команды ls
, который применяется для сортировки файлов по времени (по умолчанию принимается время последней модификации), совместно с флагами -с
или -r
, чтобы узнать порядок, в котором изменились индексные дескрипторы или читались файлы:
$ ls recipes
apple
pie
$ ls -lut total 2
drwxrwxrwx 4 you 64 Sep 27 12:11 recipes
-rw-rw-rw- 1 you 29 Sep 27 06:11 junk
У каталога recipes
, как вы видите, более позднее время использования, поскольку мы только что просмотрели его содержимое.
Очень важное понять значение индексного дескриптора, причем не для того, чтобы оценить действие флагов команды ls
. По существу, индексные дескрипторы и есть файлы. Иерархия каталогов предоставляет только удобный способ именования файлов. Внутреннее системное имя файла или индекс файла — это номер индексного дескриптора, содержащего информацию о файле. Команда ls -i
выдает индекс файла в десятичной форме:
$ date > x
$ ls -i
15768 junk
15274 recipes
15852 x
$
Именно индекс файла хранится в первых двух байтах каталога, предшествующих имени. Команда od -d
выдает информацию не в восьмеричной форме по байтам, а в десятичной, объединив по два байта в одно целое, и поэтому мы увидим на экране индекс файла:
$od -с .
0000000 4 ; . \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020 273 ( . . \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 252 ; p е ц п т ы \0 \0 \0 \0 \0 \0 \0 \0
0000060 230 = j u n к \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000100 354 = x \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000120
od -d .
0000000 15156 00046 00000 00000 00000 00000 00000 00000
0000020 10427 11822 00000 00000 00000 00000 00000 00000
0000040 15274 25970 26979 25968 00115 00000 00000 00000
0000060 15768 30058 27502 00000 00000 00000 00000 00000
0000100 15852 00120 00000 00000 00000 00000 00000 00000
0000120
$
Первые два байта в каждой строке каталога являются единственной связью между именем файла и его содержимым. Именно поэтому имя файла в каталоге называется связью: оно связывает имя в иерархии каталогов с индексным дескриптором и, тем самым, с информацией. Один и тот же индекс файла может появиться в нескольких каталогах. Команда rm
в действительности удаляет не индексный дескриптор, а строку каталога или связь. Только когда последняя связь файла исчезает, система удаляет индексный дескриптор, а значит, и сам файл.
Если индекс файла в строке каталога равен нулю, это означает, что связь удалена, но сам файл не обязательно удален — могут существовать связи где-нибудь еще. Можно убедиться в том, что индекс файла становится равным нулю при удалении файла:
$ rm x $ od -d .
0000000 15156 00046 00000 00000 00000 00000 00000 00000
0000020 10427 11822 00000 00000 00000 00000 00000 00000
0000040 15274 25970 26979 25968 00115 00000 00000 00000
0000060 15768 30058 27502 00000 00000 00000 00000 00000
0000100 00000 00120 00000 00000 00000 00000 00000 00000
0000120
$
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии