Câu trả lời:
l
là một bí danh cho ls -CF
, mà hành xử khác với đồng bằngls
.
-C
-C
làm cho ls
đầu ra in ở dạng cột. Khi thiết bị xuất chuẩn là một thiết bị đầu cuối (thay vì được chuyển hướng đến một tệp hoặc thiết bị không đầu cuối, hoặc được dẫn đến một lệnh khác), -C
được ngụ ý. Vì vậy, chạy ls -C
cũng giống như chạy ls
. Nhưng chúng không tương đương khi ls
được chuyển hướng hoặc đường ống. Ví dụ:
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
...
Ngược lại, ls -C
(hoặc -l
) đầu ra ở dạng cột bất kể loại thiết bị nào stdout
. ls -C | less
trông giống như đầu ra hàng đầu (tất nhiên được phân trang bởi less
).
-F
Sự khác biệt chính có thể nhìn thấy giữa ls
và l
là do -F
cờ, nguyên nhân ls
nối thêm các hậu tố tượng trưng (được gọi là các chỉ số) vào các mục mà nó hiển thị. Các chỉ số này xác định loại tập tin hoặc thư mục họ đang có.
So sánh điều này với đầu ra của ls
lệnh đầu tiên ở trên:
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*
...
Đây:
/
có nghĩa là mục nhập là một thư mục.*
có nghĩa là mục nhập là một tệp bình thường và có thể thực thi được (nghĩa là có quyền thực thi ).Có một số chỉ số khác:
@
có nghĩa là mục nhập là một liên kết tượng trưng (xem thêm man symlink
).|
có nghĩa là mục nhập là một thiết bị FIFO (hãy nhớ rằng, nhiều tài nguyên trong các hệ điều hành giống như Unix được thể hiện bằng các mục hệ thống tệp ).=
có nghĩa là mục nhập là một ổ cắm .>
có nghĩa là lối vào là một cánh cửa .Các --classify
lá cờ và --indicator-style=classify
tương đương với -F
.
Nguồn: Hướng dẫn sử dụng GNU Coreutils , Phần 10.1.5 Định dạng đầu ra chung
l
( ls -CF
) tương tự nhưng không giống như ls
.Cũng tốt để ghi nhớ:
Điều này thường được sử dụng để chỉ định các tùy chọn được coi là rất hữu ích và vô hại, chẳng hạn như tự động tô màu (trong đó màu được áp dụng khi không stdout
được xác định hoặc là một thiết bị đầu cuối, vì vậy các mã thoát xác định màu hầu như không được giải thích sai).
ls
bản thân nó là một bí danh.ek@Kip:/$ alias ls
alias ls='ls --color=auto'
Vì vậy, lệnh nào thực sự được thực thi khi bạn chạy l
? Cái này:
/bin/ls --color=auto -CF
bash
) giải quyết các lệnh không chứa a /
đến trận đấu đầu tiên xuất hiện PATH
, trong Ubuntu ls
là /bin/ls
.Vì vậy, l
giải quyết ls -CF
mà giải quyết để ls --color=auto -CF
.
Các bí danh này tồn tại bởi vì chúng được thiết lập theo cách đó theo mặc định, nhưng mọi người dùng có thể thay đổi bí danh của họ. Xem man alias
, Chương 25 và Phụ lục M trong Hướng dẫn về Bash-Scripting nâng cao và Cách lưu các mục "bí danh" của tôi mãi mãi .
Thật ra cả hai ls
và l
bằng nhau
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
tại sao có nghĩa là có một bí danh hệ thống được xây dựng gây ra cho việc này. Nếu bạn muốn xem, hãy mở terminal của bạn và gõ alias
thì bạn sẽ nhận được đầu ra như thế này
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
và đồng bằng ls
là không giống nhau - họ chỉ cần xảy ra để tạo đầu ra tương tự cho các tập tin đặc biệt, vì không ai là thư mục, thực thi, liên kết tượng trưng, hoặc các nút thiết bị (và đầu ra tiêu chuẩn là một thiết bị đầu cuối).
alias l='ls -CF'
vì vậy nó không giống nhau. Ngoài ra, nếu bạn muốn có được đầu ra ngắn gọn hơn, bạn có thể chạy alias l
.