คำสั่ง l ทำอะไร


19

มีคำสั่งlอยู่ในเครื่องของฉันซึ่งดูเหมือนจะไม่ทำอะไรเลย which lยังไม่มีผลผลิต นี่เป็นคำสั่งจริงและมันทำอะไรจริงหรือ

คำตอบ:


20

lเป็นนามแฝงสำหรับls -CFซึ่งมีลักษณะการทำงานที่แตกต่างจากธรรมดาls

-C

-Cทำให้lsผลงานพิมพ์ในรูปแบบคอลัมน์ เมื่อstdoutเป็นเทอร์มินัล (แทนที่จะถูกเปลี่ยนเส้นทางไปยังไฟล์หรืออุปกรณ์ที่ไม่ใช่เทอร์มินัลหรือถูกส่งไปยังคำสั่งอื่น) -Cจะมีความหมายโดยนัย ดังนั้นการทำงานเป็นเช่นเดียวกับการทำงานls -C lsแต่พวกเขาจะไม่เทียบเท่าเมื่อlsมีการเปลี่ยนเส้นทางหรือประปา ตัวอย่างเช่น:

ek@Kip:~/firefox$ ls
application.ini             libfreebl3.chk    libxpcom.so
blocklist.xml               libfreebl3.so     libxul.so
chrome                      libmozalloc.so    mozilla-xremote-client
chrome.manifest             libmozsqlite3.so  omni.ja
components                  libnspr4.so       platform.ini
crashreporter               libnss3.so        plugin-container

...

ek@Kip:~/firefox$ ls | less

application.ini
blocklist.xml
chrome
chrome.manifest
components
crashreporter

...

ในทางตรงกันข้ามls -C(หรือ-l) เอาท์พุทในรูปแบบคอลัมน์คำนึงถึงชนิดของอุปกรณ์stdoutคือ ls -C | lessดูเหมือนว่าผลผลิตสูงสุด (แต่หน้าโดยlessแน่นอน)

-F

ความแตกต่างหลักที่มองเห็นได้ระหว่างlsและlเกิดจากการ-Fตั้งค่าสถานะซึ่งทำให้lsผนวกส่วนต่อท้ายที่เป็นสัญลักษณ์ (เรียกว่าตัวบ่งชี้) ไปยังรายการที่แสดง ตัวบ่งชี้เหล่านี้ระบุชนิดของไฟล์หรือไดเรกทอรี

เปรียบเทียบสิ่งนี้กับเอาท์พุทของlsคำสั่งแรกข้างต้น:

ek@Kip:~/firefox$ ls -F
application.ini             libfreebl3.chk     libxpcom.so*
blocklist.xml               libfreebl3.so*     libxul.so*
chrome/                     libmozalloc.so*    mozilla-xremote-client*
chrome.manifest             libmozsqlite3.so*  omni.ja
components/                 libnspr4.so*       platform.ini
crashreporter*              libnss3.so*        plugin-container*

...

ที่นี่:

  • / หมายถึงรายการเป็นไดเรกทอรี
  • *หมายถึงรายการเป็นไฟล์ปกติและสามารถดำเนินการได้ (เช่นมีสิทธิ์ในการปฏิบัติการ)
  • การไม่มีตัวบ่งชี้ใด ๆ หมายถึงรายการเป็นไฟล์ปกติที่ไม่สามารถเรียกใช้งานได้

มีตัวบ่งชี้อื่น ๆ :

--classifyธงและเทียบเท่ากับ--indicator-style=classify-F

ที่มา: คู่มือ GNU Coreutils , มาตรา 10.1.5 การจัดรูปแบบเอาต์พุตทั่วไป

โดยสรุปl( ls -CF) คล้ายกับ แต่ไม่เหมือนกันlsเป็น

นอกจากนี้ยังควรระลึกไว้เสมอ:

ข้อความเดียวกันสามารถเป็นได้ทั้งคำสั่งปกติและนามแฝง

นี่เป็นเรื่องปกติที่ใช้เพื่อระบุตัวเลือกที่มีการพิจารณาอย่างกว้างขวางทั้งมีประโยชน์สูงและไม่เป็นอันตรายเช่นการปรับสีอัตโนมัติ (โดยที่สีจะถูกนำไปใช้เมื่อstdoutไม่มีการเปลี่ยนทิศทางหรือเป็นเทอร์มินัล

โดยหลักการlsนี้มันเป็นนามแฝง

ek@Kip:/$ alias ls
alias ls='ls --color=auto'

ดังนั้นสิ่งที่คำสั่งมันได้รับการดำเนินการเมื่อคุณเรียกใช้l? อันนี้:

/bin/ls --color=auto -CF
  1. เปลือก ( bash) แก้ไขคำสั่งที่ไม่ได้มี/การแข่งขันครั้งแรกที่ปรากฏในPATHซึ่งใน Ubuntu สำหรับมีls/bin/ls
  2. นามแฝงสามารถมีนามแฝง การแก้ไขนามแฝงไม่สามารถเรียกซ้ำได้(นามแฝงไม่สามารถเรียกตัวเองได้แม้ว่าจะสามารถเรียกคำสั่งปกติที่มีชื่อเหมือนกัน) แต่มันก็ไม่สนับสนุนการทำรัง

ดังนั้นlมติที่หายไปls -CFls --color=auto -CF

นามแฝงสามารถเปลี่ยนแปลงได้

นามแฝงเหล่านี้มีอยู่เนื่องจากพวกเขาตั้งค่าด้วยวิธีนั้นตามค่าเริ่มต้น แต่ผู้ใช้ทุกคนสามารถเปลี่ยนนามแฝงได้ ดูman alias, บทที่ 25และภาคผนวก Mในคู่มือขั้นสูงทุบตีการเขียนสคริปต์และวิธีประหยัด "สมญานาม" ของฉันตลอดรายการ

ที่เกี่ยวข้อง: สีที่แตกต่างหมายถึงอะไรใน ls?


6

ที่จริงทั้งสองlsและlเท่ากัน

raja@badfox:~/Pictures$ l
des.png
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png
Untitled.png
raja@badfox:~/Pictures$ ls
des.png
Screenshot from 2012-09-22 19:37:03.png
Screenshot from 2012-09-22 19:37:11.png
Screenshot from 2012-09-22 19:37:12.png
Untitled.png

เหตุใดจึงมีนามแฝงของระบบในตัวที่ก่อให้เกิดสิ่งนี้ หากคุณต้องการดูให้เปิดเทอร์มินัลaliasแล้วพิมพ์จากนั้นคุณจะได้ผลลัพธ์เช่นนี้

raja@badfox:~/Pictures$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias lock='gnome-screensaver-command -l'
alias ls='ls --color=auto'
alias sms='php .sms.php'
raja@badfox:~/Pictures$ 

ไขปริศนาได้แล้ว :)
อาร์มันด์

6
@Alison lและธรรมดาlsมีไม่เหมือนกัน - พวกเขาเพียงแค่เกิดขึ้นในการผลิตการส่งออกเหมือนกันสำหรับไฟล์เหล่านั้นโดยเฉพาะตั้งแต่ไม่มีใครไดเรกทอรีปฏิบัติการ symlinks หรือโหนดอุปกรณ์ (และมาตรฐานการส่งออกเป็นขั้ว)
Eliah Kagan

คุณสามารถเห็นได้alias l='ls -CF'ดังนั้นจึงไม่เหมือนกัน alias lนอกจากนี้ถ้าคุณต้องการที่จะได้รับผลรวบรัดมากขึ้นคุณสามารถเรียกใช้
wjandrea

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