Nhiều tiện ích Unix xử lý các liên kết tượng trưng khác nhau tùy thuộc vào việc có dấu gạch chéo hay không.
Hành vi này được mô tả trong tài liệu Liên kết tượng trưng POSIX và cũng được đề cập trong tài liệu GNU coreutils .
Về cơ bản, dấu gạch chéo có nghĩa là đi theo (hoặc "dereference") liên kết tượng trưng.
Ví dụ, trong đoạn mã dưới đây, dirlink
có nghĩa là symlink, nhưng dirlink/
có nghĩa là thư mục mà symlink trỏ tới. rm
sẽ không xóa thư mục trừ khi bạn nói rm -r
, nhưng rm
không có tùy chọn sẽ vui vẻ xóa liên kết tượng trưng.
$ mkdir dir
$ ln -s dir dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ rm dirlink/
rm: cannot remove `dirlink/': Is a directory
$ rm dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
Nó cũng hữu ích để xem các quyền của một thư mục, mà không phải bận tâm liệu thư mục đó là một thư mục thực hay chỉ là một liên kết tượng trưng đến một thư mục.
$ ls -ld dirlink
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:46 dirlink -> dir
$ ls -ld dirlink/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dirlink/
và nó vẫn hoạt động cho các thư mục thông thường:
$ ls -ld dir
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir
$ ls -ld dir/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir/
Một ví dụ khác là find
lệnh. Nếu path
bạn yêu cầu nó tìm kiếm trong một liên kết tượng trưng, thì nó sẽ không theo liên kết tượng trưng theo mặc định, nghĩa là nó chỉ xử lý liên kết tượng trưng. Thêm một dấu gạch chéo làm cho nó coi symlink là thư mục mà liên kết trỏ tới.
$ find dir
dir
dir/file
$ find dirlink
dirlink
$ find dirlink/
dirlink/
dirlink/file
(một số phiên bản tìm kiếm có một -follow
hoặc -L
tùy chọn, nhưng điều đó làm cho nó tuân theo tất cả các liên kết tượng trưng, không chỉ phiên bản đầu tiên)
Trong trường hợp rsync
, việc bạn có nên thêm dấu gạch chéo hay không phụ thuộc vào việc bạn có muốn thư mục bạn sao chép là thư mục con hay không.
$ mkdir dir
$ touch dir/file
$ rsync -r dir dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/dir
./dir.bak/dir/file
$ rm -r dir.bak
$ rsync -r dir/ dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/file
Nói cách khác:
rsync dir dir.bak
bản sao dir
vào dir.bak
, làm dir
bên trongdir.bak
rsync dir/ dir.bak
sao chép tất cả nội dung của dir
, mà không cần thực hiện dir
bên trongdir.bak