lsตัวเลือก--group-directories-firstทำให้ไดเรกทอรีที่จะแสดงรายการอยู่ด้านบนซึ่งทำให้การส่งออกของlsดีและสะอาด:
ls -l --group-directories-first
อย่างไรก็ตามมันไม่ได้ดำเนินการกับsymlinksซึ่งเป็นsymlinksไดเรกทอรีจริงๆ มีความเป็นไปได้ที่จะใช้เป็น
ls -l -L --group-directories-first
ซึ่งจะแสดงรายการทั้งสองประเภทของไดเรกทอรีที่ด้านบน แต่จะไม่แยกความแตกต่างระหว่างไดเรกทอรีที่เหมาะสมและไดเรกทอรี symlinked ซึ่งทำให้เกิดความสับสนอีกครั้ง
สามารถlsแสดงไดเรกทอรี symlinked ด้านบนในขณะที่ยังคงแตกต่างจากไดเรกทอรีปกติได้หรือไม่
แก้ไข:bashฉันใช้
lsทำlstat()(และreadlinkสำหรับ symlink) ยกเว้นว่าคุณใช้-Lตัวเลือก (ซึ่งในกรณีนี้ใช้stat())
S_ISLNK(st_mode)ส่งคืนจริงด้วยstat()เช่นกัน แต่ไม่ได้ทำเช่นนั้นผ่านlstat()เท่านั้น นอกจากนี้ ISLNK จะไม่ส่งคืนค่าจริงผ่านทางสถิติแม้ว่าลิงก์จะเป็นลิงก์ไปยังลิงก์ก็ตาม หมายความว่าISLNKไม่อาจกลับจริงผ่านทางสถิติ แต่ที่ไม่ได้ระบุชนิดของ ...
statให้คุณสมบัติของไฟล์ในตอนท้ายของ symlink หากไม่มีอยู่หรือไม่สามารถเข้าถึงได้การstatส่งคืน ENOENT ดังนั้นสิ่งที่ส่งคืนโดยstatจะไม่เป็น symlink stat()จะไม่บอกอะไรเกี่ยวกับ symlinks เช่นเดียวกับที่openจะไม่เปิด symlink หรือchmod()จะไม่เปลี่ยนสิทธิ์ของ symlink ... ฯลฯ
lsนี่คือการทำงานที่มีนิสัยแปลกในส่วนของ ตามการstat()เรียกของระบบลิงก์สัญลักษณ์ไปยังไดเร็กทอรียังคงเป็นไดเร็กทอรี (S_ISDIR(st_mode)จะคืนค่าจริง) evidentiallylsส่วนลด symlinks ก่อนที่มันจะตรวจสอบนี้