Читать книгу 📗 "UNIX — универсальная среда программирования - Керниган Брайан Уилсон"
-r--r--r-- 1 you 29 Sep 27 12:11 junk$ chmod 666 junk $Можно использовать флаг
-tls-с-r$ ls recipesapplepie$ ls -lut total 2drwxrwxrwx 4 you 64 Sep 27 12:11 recipes-rw-rw-rw- 1 you 29 Sep 27 06:11 junkУ каталога
recipesОчень важное понять значение индексного дескриптора, причем не для того, чтобы оценить действие флагов команды
lsls -i$ date > x$ ls -i15768 junk15274 recipes15852 x$Именно индекс файла хранится в первых двух байтах каталога, предшествующих имени. Команда
od -d$od -с .0000000 4 ; . 0000020 273 ( . . 0000040 252 ; p е ц п т ы 0000060 230 = j u n к 0000100 354 = x 0000120od -d .0000000 15156 00046 00000 00000 00000 00000 00000 000000000020 10427 11822 00000 00000 00000 00000 00000 000000000040 15274 25970 26979 25968 00115 00000 00000 000000000060 15768 30058 27502 00000 00000 00000 00000 000000000100 15852 00120 00000 00000 00000 00000 00000 000000000120$Первые два байта в каждой строке каталога являются единственной связью между именем файла и его содержимым. Именно поэтому имя файла в каталоге называется связью: оно связывает имя в иерархии каталогов с индексным дескриптором и, тем самым, с информацией. Один и тот же индекс файла может появиться в нескольких каталогах. Команда
rmЕсли индекс файла в строке каталога равен нулю, это означает, что связь удалена, но сам файл не обязательно удален — могут существовать связи где-нибудь еще. Можно убедиться в том, что индекс файла становится равным нулю при удалении файла:
$ rm x $ od -d .0000000 15156 00046 00000 00000 00000 00000 00000 000000000020 10427 11822 00000 00000 00000 00000 00000 000000000040 15274 25970 26979 25968 00115 00000 00000 000000000060 15768 30058 27502 00000 00000 00000 00000 000000000100 00000 00120 00000 00000 00000 00000 00000 000000000120$Следующий файл, создаваемый в этом каталоге, займет освободившуюся позицию, хотя у него, вероятно, будет другой индекс. Команда
ln$ ln old-file new-fileНазначение связи состоит в том, чтобы дать два имени одному и тому же файлу, поэтому он часто оказывается в двух разных каталогах. Во многих системах есть связь с редактором
/bin/ed/bin/ее$ ln junk linktojunk$ ls -li total 315768 -rw-rw-rw- 2 you 29 Sep 27 12:07 junk15768 -rw-rw-rw- 2 you 29 Sep 27 12:07 linktojunk15274 drwxrwxrwx 4 you 64 Sep 27 09:34 recipes$Целое число, выдаваемое между правом доступа и именем владельца файла, является числом связей файла. Поскольку каждая связь ссылается на индексный дескриптор, все связи одинаково, важны — нет разницы между первой связью и последующими. (Заметим, что общий объем занимаемого на диске пространства, сообщаемый командой
lsЕсли изменить файл, то изменение обнаружится при обращении к файлу под любым из его имен, так как все связи ссылаются на один файл:
$ echo x > junk$ ls -l total 3-rw-rw-rw- 2 you 2 Sep 27 12:37 junk-rw-rw-rw- 2 you 2 Sep 27 12:37 linktojunkdrwxrwxrwx 4 you 64 Sep 27 09:34 recipes$ rm linktojunk$ ls -l total 2-rw-rw-rw- 1 you 2 Sep 27 12:37 junkdrwxrwxrwx 4 you 64 Sep 27 09:34 recipes$После удаления файла
linktojunk