Ada perintah yang l
tersedia di komputer saya yang tampaknya tidak melakukan apa-apa. which l
juga tidak menghasilkan output. Apakah ini perintah nyata, dan apakah itu benar-benar melakukan sesuatu?
l
adalah alias untuk ls -CF
, yang berperilaku berbeda dari biasals
.
-C
-C
membuat ls
hasil cetak dalam bentuk kolom. Ketika stdout adalah terminal (daripada diarahkan ke file atau perangkat non-terminal, atau disalurkan ke perintah lain), -C
tersirat. Jadi berlari ls -C
sama 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 stdout
itu. ls -C | less
terlihat seperti output teratas (tetapi halaman olehless
, tentu saja).
-F
Perbedaan utama yang terlihat antara ls
danl
adalah karena -F
bendera, yang menyebabkan ls
untuk 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 ).Ada beberapa indikator lain:
@
berarti entri adalah tautan simbolik (lihat jugaman symlink
).|
berarti entri adalah perangkat FIFO (ingat, banyak sumber daya di OS mirip Unix diwakili oleh entri sistem file ).=
berarti entri adalah soket .>
berarti entri adalah pintu .The --classify
bendera dan --indicator-style=classify
setara dengan -F
.
Sumber: manual GNU Coreutils , Bagian 10.1.5 Pemformatan output umum
l
( ls -CF
) mirip dengan tetapi tidak sama denganls
.Ini juga baik untuk diingat:
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).
ls
itu 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
bash
) menyelesaikan perintah yang tidak mengandung a /
ke kecocokan pertama yang muncul PATH
, yang untuk Ubuntu ls
adalah /bin/ls
.Jadi l
putuskan untuk ls -CF
yang memutuskan untuk ls --color=auto -CF
.
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?
Sebenarnya kedua ls
dan l
sama
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 alias
maka 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$
l
dan polosls
yang 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).alias l='ls -CF'
jadi tidak sama. Juga, jika Anda ingin mendapatkan hasil yang lebih ringkas, Anda dapat menjalankannyaalias l
.Jika ragu,
type l
:(lihat juga Apa yang dilakukan perintah la )
sumber