Tôi có nên bao gồm dấu gạch chéo / trong một liên kết tượng trưng đến một thư mục không?


30

Symlinking đến một thư mục cung cấp cho các kết quả khác nhau ls -ltùy thuộc vào việc tôi ln -s dirhoặc ln -s dir/. Nhưng sự khác biệt thực sự là gì, và tôi nên chọn cái nào hơn tại sao?

Câu trả lời:


9

Không có sự khác biệt. (Sẽ có sự khác biệt nếu mục tiêu không phải là một thư mục hiện có.)

Dấu gạch chéo cuối cùng có thể đã kết thúc ở đó vì hoàn thành shell: với một số cấu hình, ln -s tarTabSpacelinkhoàn thành ln -s target/ link.


Câu hỏi được liên kết dường như là về nhiều dấu gạch chéo liên tiếp trong các đường dẫn, nhưng không phải về dấu gạch chéo trên các liên kết. Tôi không chắc nó có gì để nói ở đây.
mwfearnley

Thật ra, tôi không nên nói thế. Nó có khá nhiều điều để nói, về một mối quan tâm chung liên quan mật thiết đến câu hỏi. Tôi không nghĩ rằng nó dẫn đến kết luận này.
mwfearnley

@mwfearnley Đó là một hệ quả hợp lý: nếu foo -> bar/sau đó foo/quxtương đương với bar//qux. Trong khi tiêu đề của câu hỏi, chính thức nói, không bao gồm foo -> bar/, tôi cũng thảo luận về trường hợp đó trong câu trả lời của tôi ở đó.
Gilles 'SO- ngừng trở nên xấu xa'

Xin chào, cảm ơn bạn đã phản hồi .. Nó cho tôi biết rằng các đường dẫn bao gồm các liên kết tượng trưng là tương đương. Nó không nhất thiết phải cho tôi biết điều gì xảy ra nếu tôi truy cập vào chính liên kết tượng trưng (không có dấu gạch chéo) và không phải là chuyên gia Unix, tôi không nhất thiết phải biết "tương đương" nghĩa là gì hoặc không có nghĩa gì.
mwfearnley

Có ít nhất một trường hợp cạnh mà nó tạo ra sự khác biệt, vì vậy tôi đã phải đánh giá thấp câu trả lời này.
Flimm

27

Điều duy nhất tôi có thể nghĩ là nó "bảo vệ" bạn khỏi việc ai đó xóa thư mục và tạo một tập tin.

[user@host linktest]$ mkdir test
[user@host linktest]$ ln -s test/ slash
[user@host linktest]$ ln -s test noslash
[user@host linktest]$ ls -l
total 4
lrwxrwxrwx 1 paul paul    4 Feb 21 21:00 noslash -> test
lrwxrwxrwx 1 paul paul    5 Feb 21 21:00 slash -> test/
drwxrwxr-x 2 paul paul 4096 Feb 21 20:59 test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: symbolic link to `test/'
[user@host linktest]$ rmdir test
[user@host linktest]$ file *slash
noslash: broken symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$ touch test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$

Phiên bản với dấu gạch chéo bị phá vỡ khi mục tiêu được thay thế bằng một tệp.


3

Câu hỏi xen kẽ. Tôi đã thực hiện một bài kiểm tra nhỏ:

$ mkdir dir
$ ln -s dir/ test_slash
$ ln -s dir test_noslash
$ ls -l
total 4
drwxr-xr-x 2 vrusinov vrusinov 4096 Feb 21 16:41 dir
lrwxrwxrwx 1 vrusinov vrusinov    3 Feb 21 16:41 test_noslash -> dir
lrwxrwxrwx 1 vrusinov vrusinov    4 Feb 21 16:41 test_slash -> dir/
$ strace ls test_slash 2> trace_slash
$ strace ls test_noslash 2> trace_noslash
$ wc -l trace_*
   79 trace_noslash
   79 trace_slash
$ diff -u trace_* | less

Như bạn có thể thấy, không có sự khác biệt về số lượng cuộc gọi hệ thống (ít nhất là đối với ls) và dấu vết trông rất giống nhau. Tuy nhiên, đây chỉ là thử nghiệm kết xuất và tôi không chắc chắn - có thể có một số khác biệt.


Tôi cũng tự hỏi nếu nó thực sự tạo ra sự khác biệt, nhưng tại sao dấu gạch chéo bổ sung đó sẽ được lưu trữ sau đó?
Tobias Kienzler

2

Câu hỏi của bạn thực sự là về hành vi của ls chương trình.

1) Nếu bạn làm ls -l $dir trong đó $ dir thực sự là một liên kết tượng trưng, ​​bạn sẽ nhận được thông tin về liên kết tượng trưng.

2) Nếu bạn làm ls -lL $dir trong đó $ dir là một liên kết tượng trưng đến một thư mục, bạn sẽ nhận được thông tin về thư mục đích.

3) Nếu bạn làm ls -l $dir/. đó buộc symlink phải được theo dõi và cung cấp thông tin về thư mục đích.

4) Nếu bạn làm như vậy ls -l $dir/, kết quả có thể giống như # 1 hoặc có thể giống với # 3 tùy thuộc vào phiên bản nào lsđang được sử dụng. Tôi đã quen với một phiên bản cũ hơn của Solaris làm nó như # 1 và rất ngạc nhiên khi Linux làm nó như # 3.

và cái nào tôi nên thích tại sao?

Không có dấu gạch chéo nếu bạn có thể quan tâm liệu tên thư mục cho là thư mục thực tế so với liên kết tượng trưng đến thư mục.

Với dấu gạch chéo nếu bạn quan tâm nhiều hơn đến các tệp trong thư mục thay vì chính thư mục đó.

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.