Apa yang dilakukan perintah l?

19

Ada perintah yang ltersedia di komputer saya yang tampaknya tidak melakukan apa-apa. which ljuga tidak menghasilkan output. Apakah ini perintah nyata, dan apakah itu benar-benar melakukan sesuatu?

Armand
sumber

Jawaban:

20

ladalah alias untuk ls -CF, yang berperilaku berbeda dari biasals .

-C

-Cmembuat lshasil cetak dalam bentuk kolom. Ketika stdout adalah terminal (daripada diarahkan ke file atau perangkat non-terminal, atau disalurkan ke perintah lain), -Ctersirat. Jadi berlari ls -Csama dengan berlari ls. Tetapi mereka tidak setara kapanls dialihkan atau disalurkan. Sebagai contoh:

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

...

Sebaliknya, ls -C(atau -l) output dalam bentuk kolom terlepas dari apa jenis perangkat stdoutitu. ls -C | lessterlihat seperti output teratas (tetapi halaman olehless , tentu saja).

-F

Perbedaan utama yang terlihat antara lsdanl adalah karena -Fbendera, yang menyebabkan lsuntuk menambahkan sufiks simbolik (disebut indikator) ke entri yang ditampilkan. Indikator-indikator ini mengidentifikasi jenis file atau direktori mereka.

Bandingkan ini dengan output yang pertama ls perintah atas:

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*

...

Sini:

  • / berarti entri adalah direktori.
  • * berarti entri adalah file normal dan dapat dieksekusi (mis., dapat dieksekusi izin yang ).
  • Tidak adanya indikator berarti entri adalah file normal yang tidak dapat dieksekusi.

Ada beberapa indikator lain:

The --classifybendera dan --indicator-style=classifysetara dengan -F.

Sumber: manual GNU Coreutils , Bagian 10.1.5 Pemformatan output umum

Kesimpulannya, l( ls -CF) mirip dengan tetapi tidak sama denganls .

Ini juga baik untuk diingat:

Teks yang sama dapat berupa perintah biasa dan alias.

Ini biasanya digunakan untuk menentukan opsi yang secara luas dianggap sangat bermanfaat dan tidak berbahaya, seperti pewarnaan otomatis (di mana warna diterapkan saat stdout tidak diarahkan atau merupakan terminal, sehingga kode melarikan diri yang menentukan warna pada dasarnya dijamin tidak akan disalahartikan).

Dengan prinsip ini, lsitu sendiri adalah alias.

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

Jadi perintah apa yang benar - benar dijalankan ketika Anda menjalankan l? Yang ini:

/bin/ls --color=auto -CF
  1. Shell ( bash) menyelesaikan perintah yang tidak mengandung a /ke kecocokan pertama yang muncul PATH, yang untuk Ubuntu lsadalah /bin/ls.
  2. Alias ​​dapat berisi alias. Resolusi Alias ​​tidak bersifat rekursif (alias tidak dapat memanggil dirinya sendiri, meskipun dapat memanggil perintah biasa yang memiliki nama yang sama). Tapi itu mendukung persarangan .

Jadi lputuskan untuk ls -CFyang memutuskan untuk ls --color=auto -CF.

Alias ​​dapat diubah.

Alias ​​ini ada karena diatur secara default, tetapi setiap pengguna dapat mengubah alias mereka. Lihat man alias, Bab 25 dan Lampiran M dalam Panduan Script Bash Lanjutan, dan Bagaimana cara menyimpan entri "alias" saya selamanya .

Terkait: Apa arti perbedaan warna dalam ls?

Eliah Kagan
sumber
6

Sebenarnya kedua lsdan lsama

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

mengapa berarti ada sistem bawaan alias menyebabkan untuk ini. jika Anda ingin melihat, buka terminal Anda dan ketik aliasmaka Anda akan mendapatkan output seperti ini

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$ 
rɑːdʒɑ
sumber
Misteri terpecahkan :)
Armand
6
@Alison ldan polos lsyang tidak sama - mereka hanya terjadi untuk menghasilkan output yang sama untuk file-file tertentu, karena tidak ada yang direktori, executable, symlink, atau perangkat node (dan output standar adalah terminal).
Eliah Kagan
Anda bisa lihat,, alias l='ls -CF'jadi tidak sama. Juga, jika Anda ingin mendapatkan hasil yang lebih ringkas, Anda dapat menjalankannya alias l.
wjandrea