Tại sao ln -s chấp nhận một đối số duy nhất


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

Đây có phải là một lỗi trong lnhoặc có một trường hợp sử dụng để liên kết một tập tin với chính nó?

Đây là với coreutils 8.21-1ubuntu5.1.

Câu trả lời:


45

Đó không phải là một lỗi. Trường hợp sử dụng là khi bạn muốn liên kết một tệp với cùng tên cơ sở nhưng trong một thư mục khác:

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

Đúng là khi bạn làm điều này với một tên tệp trong cùng một thư mục, nó sẽ tạo ra một liên kết đến chính nó mà không làm được gì nhiều!

Điều này hoạt động bất kể bạn sử dụng liên kết tượng trưng hay liên kết cứng.


15
Một cách khác để đặt nó: ln -s /path/to/filelà viết tắt của ln -s /path/to/file .. Giống như lslà viết tắt của ls ..
Stéphane Chazelas

3
@ StéphaneChazelas có, và bạn lưu toàn bộ hai tổ hợp phím! :-)
Celada

4
Lưu ý rằng hành vi đó không được chỉ định bởi POSIX nhưng dường như khá phổ biến (ít nhất là GNU, busybox, FreeBSD, Solaris, Ultrix và đã như vậy (mặc dù - tất nhiên không được hỗ trợ) trong phiên bản đầu tiên của Unix vào đầu những năm 70).
Stéphane Chazelas

9

Cách dễ nhất để tìm ra tất nhiên, là thử nó và xem. Khi không có đối số thứ 2 nào được đưa ra, lnsẽ tạo một liên kết trong thư mục hiện tại có cùng tên với bản gốc:

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

Điều này cũng được giải thích trong man ln:

Ở dạng thứ 2, tạo một liên kết đến TARGET trong thư mục hiện tại.

"Mẫu thứ 2" đề cập đến:

ln [TÙY CHỌN] ... MỤC TIÊU (mẫu thứ 2)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.