Большинство Unices документируют команду ln
как
ln source target
(Здесь я опускаю опции и т. д.)
Примеры:
ln [-fs] [-L|-P] source_file target_file
ln [-fhLnPs] source [target]
ln [-L | -P | -s [-F]] [-f | -iw] [-hnv] source_file [target_file]
macOS
ln [-Ffhinsv] source_file [target_file]
/usr/bin/ln [-fns] source_file [target]
ln [ -f | -n ] [ -s ] SourceFile [ TargetFile ]
Руководство GNU ln
является лишним и называет цельsource
и имя ссылкиtarget
.
ln [option]… [-T] target linkname
Игнорируя выбор слов GNU, утилита ln
следует той же семантике, что и, например. mv
и cp
в том, что цель — это то, что создано из источника .
Следовательно,
ln -s a b
создаст символическую ссылку b
, указывающую на a
.
Также обратите внимание, что при создании символических ссылок источником является просто строка, представляющая, на что должна указывать символическая ссылка. Обычно не делается никаких проверок, чтобы убедиться, что он указывает на что-то полезное :
.
$ ln -s "hello world" README.txt
$ ls -l
total 0
lrwxr-xr-x 1 kk wheel 11 Sep 15 11:39 README.txt -> hello world
Личное мнение о выборе GNU использовать «цель» и «имя ссылки», а не «источник», за которым следует «цель»:
Может показаться очевидным, что вторым аргументом, то, что создается, должно быть «имя ссылки», а первым аргументом, целью ссылки, является «цель». Однако это верно только в том случае, если вы используете ссылку.
Когда вы создаете ссылку, что вы и делаете с ln
, второй аргумент, то, что создается, является «целью» операции ln
и он создается с использованием первого аргумента, «источника».
Это,вместе с аналогичным "исходным" ->"целевым" порядком аргументов для других основных инструментов документация не -GNU для ln
кажется более естественной.