มีคำสั่งl
อยู่ในเครื่องของฉันซึ่งดูเหมือนจะไม่ทำอะไรเลย which l
ยังไม่มีผลผลิต นี่เป็นคำสั่งจริงและมันทำอะไรจริงหรือ
มีคำสั่งl
อยู่ในเครื่องของฉันซึ่งดูเหมือนจะไม่ทำอะไรเลย which l
ยังไม่มีผลผลิต นี่เป็นคำสั่งจริงและมันทำอะไรจริงหรือ
คำตอบ:
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*
...
ที่นี่:
/
หมายถึงรายการเป็นไดเรกทอรี*
หมายถึงรายการเป็นไฟล์ปกติและสามารถดำเนินการได้ (เช่นมีสิทธิ์ในการปฏิบัติการ)มีตัวบ่งชี้อื่น ๆ :
@
หมายถึงรายการเป็นลิงค์สัญลักษณ์ (ดูเพิ่มเติมที่man symlink
)|
หมายถึงรายการที่เป็นอุปกรณ์FIFO (จำไว้ว่าทรัพยากรจำนวนมากในระบบปฏิบัติการเหมือน Unix จะถูกแสดงโดยรายการระบบไฟล์ )=
หมายถึงการเข้าเป็นซ็อกเก็ต>
หมายถึงการเข้าเป็นประตู--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
bash
) แก้ไขคำสั่งที่ไม่ได้มี/
การแข่งขันครั้งแรกที่ปรากฏในPATH
ซึ่งใน Ubuntu สำหรับมีls
/bin/ls
ดังนั้นl
มติที่หายไปls -CF
ls --color=auto -CF
นามแฝงเหล่านี้มีอยู่เนื่องจากพวกเขาตั้งค่าด้วยวิธีนั้นตามค่าเริ่มต้น แต่ผู้ใช้ทุกคนสามารถเปลี่ยนนามแฝงได้ ดูman alias
, บทที่ 25และภาคผนวก Mในคู่มือขั้นสูงทุบตีการเขียนสคริปต์และวิธีประหยัด "สมญานาม" ของฉันตลอดรายการ
ที่เกี่ยวข้อง: สีที่แตกต่างหมายถึงอะไรใน ls?
ที่จริงทั้งสอง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$
l
และธรรมดาls
มีไม่เหมือนกัน - พวกเขาเพียงแค่เกิดขึ้นในการผลิตการส่งออกเหมือนกันสำหรับไฟล์เหล่านั้นโดยเฉพาะตั้งแต่ไม่มีใครไดเรกทอรีปฏิบัติการ symlinks หรือโหนดอุปกรณ์ (และมาตรฐานการส่งออกเป็นขั้ว)
alias l='ls -CF'
ดังนั้นจึงไม่เหมือนกัน alias l
นอกจากนี้ถ้าคุณต้องการที่จะได้รับผลรวบรัดมากขึ้นคุณสามารถเรียกใช้