NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
С 1971 г. Руководство по изданию Unix First Edition .
Существует вторая простая синтаксическая форма.
Изменить: Я ставлю FILE или FILENAME вместо TARGET --- видеть комментарии и т.д. Смотри также очень долго добавление в нижней части, обращаясь к айсберг, твердые и мягкие из ln
, а не только кончик его.
Итак, GNU ln
имеет это:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
где вам не нужно имя ссылки. После ln -s /usr/lib/modules
того, как вы получите
modules -> /usr/lib/modules
с тем же именем, что и FILENAME («цель» или «источник»), прямо там, где вы находитесь. Нет выбора, нет путаницы.
Теперь, если вы более требовательны и хотите, чтобы ссылка была создана под другим именем и / или где-то еще , вы добавляете это желание в качестве имени или пути. На первом месте настоящая цель, второе - дополнительная фантастическая новая ссылка.
Или вы говорите: «Я знаю это обозначение стрелки ls -l
для ссылок. У меня нет стрелки в оболочке, чтобы показать направление моей ссылки. Поэтому я должен перевернуть ее».
Вы создаете это в одном направлении, так что вы можете использовать его в другом.
(КОНЕЦ ЧАСТИ ОТВЕТА)
На другом уровне само слово «ссылка» несет глубокое скрытое двойное значение. Символические ссылки появились позже, поэтому в первые дни ссылка была просто ссылкой. Не было мягкого и жесткого, без -s
вариантов. И теперь я даже использую символику источника-цели:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
На этом этапе есть ссылки, но не жесткие и мягкие, и ls -l
стрелки не отображаются, поскольку в (жесткой) ссылке нет направления. «Ссылка» на этом этапе эволюции Unix означала, что имя файла «B» (запись каталога «B») в файловой системе указывает на тот же индекс, на который указывает имя файла «A».
Файлы A и B «связаны» вместе, потому что они используют одни и те же блоки. Итак, теперь с каждым rm ядро должно проверять: удалить / освободить блоки этого файла на диске или есть другой файл, связанный с теми же блоками? Для этого используется счетчик ссылок.
Скажем, вы хотите сохранить большой файл на / tmp grom и удалить ln /tmp/bigfile
. Теперь у вас есть большой файл в вашем рабочем каталоге. После очистки / tmp и удаления «оригинала» вы успешно продолжаете использовать одни и те же блоки данных. Вы не получаете мертвую или висящую ссылку, у вас есть нормальный файл. Указывает не на файл, а только на блоки файловой системы, как это делает каждая запись в каталоге. Только теперь «чистка» / tmp уже не так эффективна, как была. Это выглядит пустым, и это так, но блоки в разделе не освобождаются.
Несмотря на то, что жесткая ссылка сама по себе не стоит места, как это делает cp, косвенно, она может.
Добавление ln -s
к последовательности выше:
ln -s A B --- copy only the file's name to "B"
Теперь "B", мягкая ссылка, содержит только строку с путем. Это "мягкая" информация. Технически «А» и «В» не связаны. Но все же B является «ссылкой» в новом смысле, что вы можете использовать это сохраненное имя пути в качестве ярлыка для «A». Теперь это «ссылка на A» (точка), а не «связанная с inode файла A»
Оба вида ссылок могут запутать не только людей, но и ядро / фс. Страница руководства 1971 года отмечает: «ОШИБКИ: ссылки дублируются дважды и восстанавливаются как отдельные файлы с отдельными inode».
Жесткие ссылки на каталоги (редко / недопустимо) могут легко привести к засорению.
Мягкие ссылки на каталоги (очень распространенные) могут привести к вечным циклам - должны распознаваться утилитами / ядром.
Практический пример в bash
Начиная с обычного файла "F" ...
ln F Fhard
... делает Fhard того же размера, что и F, но они ОБА теперь появляются в темно-красных БЕЗ стрелок ls -l --color
. Из-за stat
отображения «Ссылки: 2» в связи с «Inode: XYZ». Жесткая ссылка F превращает F в жесткую ссылку. Оба являются / stay filetype "обычный файл". Но у обоих есть индекс с числом ссылок выше 1.
ln -s F Fsoft
... делает крошечный "нерегулярный" файл "Fsoft" с типом файла "символическая ссылка" - еще больше экономит место, чем пустой каталог. А не ls -l
показывает ничего особенного для "F". Для Fsoft показанный размер составляет 1 байт, так как строка равна «F» и Fsoft -> F
отображается как имя. Нет необходимости раскрашивать мягкую ссылку, чтобы ее распознать. Потому что в краткой форме ls -F
вы @
добавляете спиральную цепочку :Fsoft@
С ls -l
этим выглядит так:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
У Фхарда размер и тип Ф.
Fsoft имеет имя F и длину имени F в качестве размера, а также другой тип файла.
Коротко ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
добавление --block-size=1
также не дает одинаковых размеров. Fsoft имеет размер "один байт, ноль блоков". F и Fhard отклоняются параллельно:
6074368 F 6074368 Fhard 0 Fsoft@
Чтобы увидеть, болтается ли Fsoft или нет, ls
позволяет использовать цвета.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
и называете этоb
»