วิธี ls ใช้รูปแบบยาว (-l) ในขณะที่ยังคงติดตาม symlink ไดเรกทอรี?


27

ฉันสังเกตเห็นว่าls -lไม่เพียง แต่เปลี่ยนการจัดรูปแบบของผลลัพธ์ แต่ยังรวมถึงวิธีจัดการลิงก์ไดเรกทอรี

> ls /rmn
biweekly.sh  daily.sh  logs ...

> ls -l /rmn
lrwxrwxrwx 1 root root 18 Feb 11  2011 /rmn -> /root/maintenance/

ฉันต้องการรับรายละเอียดเกี่ยวกับสิ่งที่อยู่/rmnไม่ใช่ข้อมูลเกี่ยวกับ/rmnsymlink

สิ่งหนึ่งที่ฉันคิดได้คือการสร้างเชลล์ฟังก์ชั่นที่ทำสิ่งนี้:

cd /rmn
ls -l
cd -

แต่ที่ดูเหมือนว่า hacky เกินไปโดยเฉพาะอย่างยิ่งนับตั้งแต่ messes up cd -การใช้งานต่อไปของ มีวิธีที่ดีกว่า?

(ฉันใช้ CentOS 2.6.9)


ฉันก็สังเกตเห็นและก็ googling เพื่อดูว่ามีคนสังเกตเห็น นั่นคือวิธีที่ฉันมาที่นี่ :)
Yevgeniy Afanasyev

คำตอบ:


27

ดูว่า ls ของคุณมีตัวเลือกหรือไม่:

 -H, --dereference-command-line
     follow symbolic links listed on the command line 
 --dereference-command-line-symlink-to-dir
     follow each command line symbolic link that points to a directory

หากสิ่งเหล่านี้ไม่ได้ผลคุณสามารถทำให้มาโครทำงานได้โดยไม่ต้องcd -ทำอะไรโดยทำสิ่งต่อไปนี้

(cd /rmn ; ls -l)

ซึ่งทำงานใน subshell


มันมี-Hและนั่นก็หลอกลวง ขอขอบคุณ!
RomanSt

4
ฉันหวังว่า--dereference-command-line-symlink-to-dirจะมีรูปแบบสั้น ๆ
wchargin

14

ฉันไม่เข้าใจว่าทำไมการคิดเกี่ยวกับปัญหาง่าย ๆ นี้จึงซับซ้อน - แต่บางทีฉันแค่ตั้งคำถามผิดทาง อย่างไรก็ตามเมื่อฉันต้องการฟังก์ชั่นที่คล้ายกันฉันใช้:

ls -lL

นั่นเป็นเคล็ดลับในกรณีของฉัน จากlsหน้าคน:

-L, --dereference
     when showing file information for a symbolic link, 
     show  information  for  the file the link references
     rather than for the link itself

ตัวอย่างเช่นฉันได้ทำให้ฉันเป็น/media/stickทางลัดในการเข้าถึงข้อมูลบนแท่ง USB ของฉัน ls -l /media/stickจะแสดงลิงค์จริงในขณะที่ls -lL /media/stickจะแสดงเนื้อหาบนแท่ง USB

หลังจากการค้นคว้าอย่างลึกซึ้งเกี่ยวกับความแตกต่างระหว่างการทำงานภายใน-Hและ-Lในที่สุดฉันก็ได้พบกับบทความที่ยอดเยี่ยมเกี่ยวกับเรื่องนี้ในบล็อกของความคิดตื้น

สิ่งนี้ชี้ให้เห็นถึงความแตกต่างที่ลึกซึ้งระหว่างสองตัวเลือก (วิธีที่ดีกว่าคู่มือดั้งเดิม!) ดังต่อไปนี้:

  • -H - ยกเลิกการอ้างอิงลิงก์เหล่านั้นอย่างชัดเจนในบรรทัดคำสั่ง
  • -L- ลิงก์ที่อ้างอิงถึงแม้ว่าจะไม่ได้กล่าวถึงในบรรทัดคำสั่ง

(เมื่อทั้งสองใช้ร่วมกับงานประจำวันที่เรียบง่ายไม่น่าจะมีความแตกต่างในผลลัพธ์โดยทั่วไป)

นอกจากนี้ควรที่คุณต้องการที่จะจำแบบยาว ( --option) ก็ส่วนใหญ่อาจจะยุ่งยากน้อยลงในการจดจำมากกว่ามอนสเตอร์ที่ยาวมากเกินไป--dereference--dereference-command-line-symlink-to-dir


5
ls -l /rmn/

จะทำหรือ

ls -l /rmn/.

-lอย่างไรก็ตามลักษณะการทำงานที่ไม่ควรจะแตกต่างกันที่มีและไม่มี คุณมีนามแฝงเพื่อlsหรือไม่?


3
lsธงบ้า -lทำให้เริ่มต้นที่จะปิดเช่นเดียวกับ-H -Fดูcoreutils - ไฟล์ใดบ้างที่อยู่ในรายการ
มิเคล

@Mikel ดูเหมือนว่าคุณพูดถูก และใช่นั่นคือถั่ว (เช่นกันฉันไม่มีนามแฝงสำหรับ ls พยายามหลบหนี แต่ผลลัพธ์เหมือนกัน)
RomanSt

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