Lệnh l làm gì?


19

Có một lệnh lcó sẵn trên máy của tôi mà dường như không làm gì cả. which lcũng không tạo ra đầu ra. Đây có phải là một lệnh thực sự, và nó thực sự làm bất cứ điều gì?

Câu trả lời:


20

llà một bí danh cho ls -CF, mà hành xử khác với đồng bằngls .

-C

-Clà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 -Ccũ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 | lesstrô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 lsllà do -Fcờ, nguyên nhân lsnố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 lslệ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 ).
  • Sự vắng mặt của bất kỳ chỉ báo nào có nghĩa là mục nhập là một tệp bình thường không thể thực thi được.

Có một số chỉ số khác:

Các --classifylá cờ và --indicator-style=classifytươ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

Tóm lại, l( ls -CF) tương tự nhưng không giống như ls.

Cũng tốt để ghi nhớ:

Cùng một văn bản có thể là một lệnh thông thường và bí danh.

Đ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).

Theo nguyên tắc này, lsbả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
  1. Shell ( 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/bin/ls.
  2. Bí danh có thể chứa bí danh. Độ phân giải bí danh không được đệ quy (một bí danh không thể tự gọi, mặc dù nó có thể gọi một lệnh thông thường có cùng tên). Nhưng nó hỗ trợ làm tổ .

Vì vậy, lgiải quyết ls -CFmà giải quyết để ls --color=auto -CF.

Bí danh có thể được thay đổi.

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 25Phụ 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 .

Liên quan: Những màu sắc khác nhau có ý nghĩa gì trong ls?


6

Thật ra cả hai lslbằ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õ aliasthì 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$ 

Bí ẩn đã được giải quyết :)
Armand

6
@Alison lvà đồng bằng lskhô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).
Eliah Kagan

Bạn có thể thấy, 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.
wjandrea

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.