Tìm tập tin gốc của một liên kết tượng trưng


20

Vì vậy, giả sử tôi có một liên kết tượng trưng của một tệp trong thư mục chính của tôi đến một tệp khác trên một phân vùng khác. Làm cách nào để tìm vị trí đích của tệp được liên kết? Bằng cách này, tôi có nghĩa là, chúng ta hãy nói rằng tôi có file2/home/user/; nhưng đó là một liên kết tượng trưng cho người khác file1. Làm thế nào tôi có thể tìm thấy file1mà không cần phải đi qua từng phân vùng / thư mục để tìm tệp?


1
Vui lòng mở rộng trên "tập tin gốc". Điều gì nếu file1là một liên kết đến file0? Bạn có muốn tìm mục tiêu cuối cùng của symlink ( file0) hoặc chỉ mục tiêu tiếp theo ( file1) không?
don_crissti

Câu trả lời:


26

Thử đi :

readlink -f /path/file

(mục tiêu cuối cùng của liên kết tượng trưng của bạn nếu có nhiều hơn một cấp)

Nếu bạn chỉ muốn cấp liên kết tượng trưng tiếp theo, hãy sử dụng:

readlink /path/file

tôi không nhận được đầu ra
k-Rocker

Bạn nên có một cái! Lỗi hoặc đường dẫn
Gilles Quenot

không có gì: user@shell a5$ readlink -f ./student1.javavà tôi nhận đượcuser@shell a5$
k-Rocker

nvm, liên kết tượng trưng của tôi không được thiết lập đúng, không biết tại sao. nhưng tôi đã làm một cái mới và nó hoạt động, cảm ơn.
k-Rocker

2
FWIW readlink /path/filesẽ trả lại mục tiêu tiếp theo.
don_crissti

2

1.

ls -l bin

sản xuất

lrwxrwxrwx 1 az az 14 Ноя 12 22:13 bin -> ../Gdrive/bin/

2.

file bin

sản xuất

bin: symbolic link to `../Gdrive/bin/' 

3.

stat bin

sản xuất

File: «bin» -> «../Gdrive/bin/»

Được rồi, tôi đang cố gắng tạo ra một kịch bản, vậy tôi sẽ sử dụng chúng như thế nào? tôi mới dùng linux.
k-Rocker

1
@ k-Rocker Nếu bạn giải thích những gì bạn định làm thì sẽ tốt hơn.
Costas

1

Cách đơn giản nhất: cdđến nơi đặt liên kết tượng trưng và thực hiện ls -lđể liệt kê chi tiết của các tệp.

Phần bên phải ->sau liên kết tượng trưng là đích đến mà nó đang trỏ tới.

Vd

lrwxrwxrwx 1 userName groupName 22 tháng 1 17 13:29 Liên kết đến temp.txt -> /home/user/temp.txt

Ở đây chúng tôi có "Liên kết đến temp.txt" trỏ đến ( ->) "/home/user/temp.txt".

Nhưng, như @Gilles Quenot chỉ ra , bạn cũng có thể làmreadlink -f /path/to/symbolic_link


0

Mở rộng trên Costas

Giả sử bạn có

ln -s test.txt sym_link_1.txt
ls -l sym_link_1.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 16:59 sym_link_1.txt -> test.txt

Trong một kịch bản bạn có thể làm (sử dụng backticks)

ln -s `readlink sym_link_1.txt` sym_link_2.txt

Sau đó bạn có

ls -l sym_link_*.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 16:59 sym_link_1.txt -> test.txt
lrwxrwxrwx. 1 a1 g1 8 Jan  7 17:01 sym_link_2.txt -> test.txt

0

Một phương pháp khác (chưa được trả lời trước đây) để tìm tệp liên kết là sử dụng lệnh dưới đây,

file -h <path_to_dir>/* | grep link

Lệnh :

file -h /home/prateek/* | grep link

Đầu ra :

/ home / prateek / Music: liên kết tượng trưng đến / media / prateek / HD-E1 / Music

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.