การค้นหาไฟล์ต้นฉบับของลิงก์สัญลักษณ์


20

สมมุติว่าฉันมีลิงค์สัญลักษณ์ของไฟล์ในโฮมไดเร็กตอรี่ของฉันไปยังไฟล์อื่นในพาร์ติชั่นอื่น ฉันจะค้นหาตำแหน่งเป้าหมายของไฟล์ที่เชื่อมโยงได้อย่างไร โดยนี้ผมหมายถึงสมมติว่าผมมีfile2ใน/home/user/; file1แต่มันเป็นเรื่องการเชื่อมโยงสัญลักษณ์ไปยังอีก ฉันจะหาได้อย่างไรfile1โดยไม่ต้องผ่านแต่ละพาร์ติชั่น / ไดเรกทอรีเพื่อค้นหาไฟล์ด้วยตนเอง?


1
โปรดขยายที่ "ไฟล์ต้นฉบับ" เกิดอะไรขึ้นถ้าfile1เป็น symlink ไปfile0? คุณต้องการค้นหาเป้าหมายสุดท้ายของ symlink ของคุณ ( file0) หรือเป้าหมายถัดไป ( file1) หรือไม่
don_crissti

คำตอบ:


26

ลองสิ่งนี้:

readlink -f /path/file

(เป้าหมายสุดท้ายของ symlink ของคุณหากมีมากกว่าหนึ่งระดับ)

หากคุณต้องการลิงก์สัญลักษณ์ระดับต่อไปให้ใช้:

readlink /path/file

ฉันไม่ได้ผลผลิต
k-Rocker

คุณควรมี! ข้อผิดพลาดหรือเส้นทาง
Gilles Quenot

ไม่มีอะไร: user@shell a5$ readlink -f ./student1.javaและฉันได้รับuser@shell a5$
k-Rocker

nvm ลิงก์สัญลักษณ์ของฉันไม่ได้ตั้งค่าอย่างถูกต้องไม่แน่ใจว่าทำไม แต่ฉันทำใหม่และใช้งานได้ขอบคุณ
k-Rocker

2
FWIW readlink /path/fileจะส่งคืนเป้าหมายต่อไป
don_crissti

2

1

ls -l bin

การผลิต

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

2

file bin

การผลิต

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

3

stat bin

การผลิต

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

ตกลงฉันกำลังพยายามสร้างสคริปต์ดังนั้นฉันจะใช้สิ่งเหล่านี้ได้อย่างไร ฉันใหม่เพื่อลินุกซ์
k-Rocker

1
@ k-Rocker ถ้าคุณอธิบายสิ่งที่คุณตั้งใจจะทำมันจะดีกว่า
Costas

1

วิธีที่ง่ายที่สุด: cdไปยังที่ตั้งของลิงก์สัญลักษณ์และทำls -lเพื่อแสดงรายละเอียดของไฟล์

ส่วนทางด้านขวาของ->ลิงก์สัญลักษณ์คือปลายทางที่ชี้ไป

Ex:

lrwxrwxrwx 1 ชื่อผู้ใช้ groupName 22 ม.ค. 17 13:29 เชื่อมโยงไปยัง temp.txt -> /home/user/temp.txt

ที่นี่เรามี "ลิงก์ไปยัง temp.txt" ซึ่งชี้ไปที่ ( ->) "/home/user/temp.txt"

แต่เช่นเดียวกับ@Gilles Quenotคุณสามารถทำได้เช่นกันreadlink -f /path/to/symbolic_link


0

การขยายตัวของ Costas

สมมติว่าคุณมี

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

ในสคริปต์คุณสามารถทำได้ (ใช้ backticks)

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

จากนั้นคุณมี

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

วิธีอื่น (ซึ่งไม่ได้รับคำตอบก่อนหน้านี้) เพื่อค้นหาไฟล์ลิงค์คือการใช้คำสั่งด้านล่าง

file -h <path_to_dir>/* | grep link

คำสั่ง :

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

ผลผลิต :

/ home / prateek / Music: ลิงก์สัญลักษณ์ไปยัง / media / prateek / HD-E1 / Music

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.