เมื่อฉันใช้ls -la symlinkName
หรือstat symlinkName
ไม่แสดงเส้นทางทั้งหมด (เช่น../../../one/two/file.txt
)
คำสั่ง linux ที่เปิดเผยเส้นทางแบบเต็มคืออะไร?
เมื่อฉันใช้ls -la symlinkName
หรือstat symlinkName
ไม่แสดงเส้นทางทั้งหมด (เช่น../../../one/two/file.txt
)
คำสั่ง linux ที่เปิดเผยเส้นทางแบบเต็มคืออะไร?
คำตอบ:
realpath
ไม่สามารถใช้ได้กับลินุกซ์ทุกรสชาติ แต่readlink
ควรจะเป็น
readlink -f symlinkName
ข้างต้นควรทำเคล็ดลับ
หรือหากคุณไม่ได้ติดตั้งอย่างใดอย่างหนึ่งข้างต้นคุณสามารถทำสิ่งต่อไปนี้ได้หากคุณติดตั้ง python 2.6 (หรือใหม่กว่า)
python -c 'import os.path; print(os.path.realpath("symlinkName"))'
-f
แฟล็กแล้วจะได้ผล คือreadlink symlinkName
realpath <path to the symlink file>
ควรทำเคล็ดลับ
man realpath
แสดงที่ด้านล่างว่าเป็นส่วนหนึ่งของ "GNU coreutils" ซึ่งฉันค่อนข้างมั่นใจว่ามักจะมาใน Ubuntu ดังนั้นแม้ว่า @IanStapletonCordasco จะบอกว่า " realpath
ไม่สามารถใช้ได้กับลินุกซ์ทุกรสชาติ" แต่อย่างน้อยก็ควรมีในทุกรสชาติ ฉันเชื่อว่ารสชาติอนุพันธ์ของ Ubuntu และ Ubuntu
รสชาติยูนิกซ์ -> ll symLinkName
OSX -> readlink symLinkName
ความแตกต่างคือวิธีที่ 1 จะแสดงเส้นทางการเชื่อมโยง sym ในวิธีที่กะพริบและวิธีที่ 2 จะสะท้อนออกมาบนคอนโซล
อีกวิธีหนึ่งในการดูข้อมูลคือstat
คำสั่งที่จะแสดงข้อมูลเพิ่มเติม คำสั่งstat ~/.ssh
บนจอแสดงผลเครื่องของฉัน
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: -
หวังว่านี่อาจช่วยใครบางคนได้
คุณสามารถใช้awk
กับการsystem
โทรreadlink
เพื่อให้เทียบเท่าls
กับเอาต์พุตที่มีเส้นทาง symlink แบบเต็ม ตัวอย่างเช่น:
ls | awk '{printf("%s ->", $1); system("readlink -f " $1)}'
จะแสดงเช่น
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
ls -l
. สิ่งนี้ยังใช้ไม่ได้เลยพยายามทำทุกอย่างในไดเร็กทอรี (ไม่ใช่ลิงก์) และหาก ls ของคุณถูกกำหนดค่าให้ใช้สี awk จะแตกอย่างสมบูรณ์ เพียงแค่ใช้find . -maxdepth 1 -type l -ls | awk '{print $11 "\t" $12 "\t" $13}'