Cách xem đường dẫn liên kết biểu tượng đầy đủ


128

Khi tôi đang sử dụng ls -la symlinkNamehoặc stat symlinkNamekhông hiển thị tất cả đường dẫn (ví dụ ../../../one/two/file.txt)

Lệnh linux tiết lộ đường dẫn đầy đủ là gì?


4
Bạn nên cẩn thận ở đây: khi ls hoặc stat hiển thị không có đường dẫn tuyệt đối - liên kết không có đường dẫn tuyệt đối! Đây là đặc biệt. quan trọng khi thiết bị được gắn kết, ví dụ như trong một ngữ cảnh khác (ví dụ: nếu bạn có thứ gì đó trên thẻ CD hoặc thẻ USB hoặc cố gắng khôi phục một số hdd bị hỏng). Tất cả các giải pháp đã đề cập (đường dẫn thực, đường dẫn liên kết, ....) chỉ hiển thị đường dẫn tuyệt đối trong ngữ cảnh được gắn kết.
flolo

Câu trả lời:


225

realpathkhông có sẵn trên tất cả các phiên bản linux, nhưng readlinknên có.

readlink -f symlinkName

Ở trên sẽ làm thủ thuật.

Ngoài ra, nếu bạn chưa cài đặt một trong hai cách trên, bạn có thể làm như sau nếu bạn đã cài đặt python 2.6 (hoặc mới hơn)

python -c 'import os.path; print(os.path.realpath("symlinkName"))'

16
Nếu sử dụng OSX, hãy bỏ qua -fcờ và sau đó điều này hoạt động. tức làreadlink symlinkName
Josh Davenport

6
trên OSX bỏ cờ -f chỉ đưa ra một đường dẫn tương đối
timoxley

2
Câu hỏi này là về Linux, các bạn.
Ian Stapleton Cordasco

27

realpath <path to the symlink file> nên làm thủ thuật.


man realpathhiển thị ở dưới cùng rằng nó là một phần của "GNU coreutils", mà tôi khá chắc chắn rằng nó luôn có trên Ubuntu, vì vậy mặc dù @IanStapletonCordasco nói rằng " realpathkhông có sẵn trên tất cả các phiên bản linux", nó ít nhất phải có sẵn trên tất cả Tôi tin rằng Ubuntu và các phiên bản phái sinh của Ubuntu.
Gabriel Staples

10

hương vị unix -> ll symLinkName

OSX -> readlink symLinkName

Sự khác biệt là cách thứ nhất sẽ hiển thị đường dẫn liên kết sym một cách chớp nhoáng và cách thứ hai sẽ hiển thị nó trên bảng điều khiển.


Câu hỏi được hỏi cụ thể cho đường dẫn đầy đủ / tuyệt đối, không phải đường dẫn tương đối (../../file.txt). Cả hai câu trả lời này sẽ đưa ra đường dẫn tương đối.
khôn ngoan

3

Một cách khác để xem thông tin là statlệnh sẽ hiển thị nhiều thông tin hơn. Lệnh stat ~/.sshtrên màn hình máy của tôi

File: ‘/home/sumon/.ssh’ -> ‘/home/sumon/ssh-keys/.ssh.personal’
  Size: 34          Blocks: 0          IO Block: 4096   symbolic link
Device: 801h/2049d  Inode: 25297409    Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   sumon)   Gid: ( 1000/   sumon)
Access: 2017-09-26 16:41:18.985423932 +0600
Modify: 2017-09-25 15:48:07.880104043 +0600
Change: 2017-09-25 15:48:07.880104043 +0600
 Birth: -

Hy vọng điều này có thể giúp một ai đó.


1

Bạn có thể sử dụng awkvới một systemcuộc gọi readlinkđể nhận được đầu ra tương đương lsvới các đường dẫn liên kết biểu tượng đầy đủ. Ví dụ:

ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'

Sẽ hiển thị vd

thin_repair ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_restore ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_rmap ->/home/user/workspace/boot/usr/bin/pdata_tools
thin_trim ->/home/user/workspace/boot/usr/bin/pdata_tools
touch ->/home/user/workspace/boot/usr/bin/busybox
true ->/home/user/workspace/boot/usr/bin/busybox

Tôi có thể làm điều đó mà không cần liên kết đọc; chỉ sử dụng ls -l. Điều này cũng không hoạt động chút nào, cố gắng thực hiện nó trên mọi thứ trong thư mục (không liên kết) và nếu ls của bạn được cấu hình để sử dụng màu sắc thì awk hoàn toàn bị hỏng. chỉ cần sử dụngfind . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'
Hashbrown
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.