Почему ln -s принимает один аргумент


27
> cd /tmp
> ln -s foo
> ls -alhF /tmp
lrwxrwxrwx 1 user user    3 Jul 29 14:00 foo -> foo

Это ошибка lnили есть вариант использования для ссылки на файл для себя?

Это с coreutils 8.21-1ubuntu5.1.

Ответы:


45

Это не ошибка. Вариант использования для случая, когда вы хотите связать файл с тем же базовым именем, но в другом каталоге:

cd /tmp
ln -s /etc/passwd
ls -l passwd
lrwxrwxrwx 1 xxx xxx 11 Jul 29 09:10 passwd -> /etc/passwd

Это правда, что когда вы делаете это с именем файла, находящимся в том же каталоге, он создает ссылку на себя, которая не приносит много пользы!

Это работает независимо от того, используете ли вы символические или жесткие ссылки.


15
Другой способ выразить это: ln -s /path/to/fileэто сокращение от ln -s /path/to/file .. Как lsэто сокращенно для ls ..
Стефан Шазелас

3
@ StéphaneChazelas да, и вы экономите два целых нажатия клавиш! :-)
Селада

4
Обратите внимание, что это поведение не указано в POSIX, но кажется довольно распространенным (GNU, busybox, FreeBSD, Solaris, Ultrix, по крайней мере, и уже было таким (хотя -s, конечно, не поддерживалось) в первой версии Unix в начале 70-х годов).
Стефан Шазелас

9

Конечно, самый простой способ узнать это - попробовать и посмотреть. Когда второй аргумент не указан, lnв текущем каталоге будет создана ссылка с тем же именем, что и в оригинале:

$ ln -s /etc
$ ls -l
lrwxrwxrwx 1 terdon terdon         4 Jul 29 16:09 etc -> /etc

Это также объясняется в man ln:

Во 2-й форме создайте ссылку на TARGET в текущем каталоге.

«Вторая форма» относится к:

ln [ОПЦИЯ] ... TARGET (2-ой класс)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.