L komutu ne işe yarar?


19

Makinemde lhiçbir şey yapmıyor gibi görünen bir komut var. which layrıca çıktı üretmez. Bu gerçek bir komut mu ve aslında bir şey yapıyor mu?

Yanıtlar:


20

lBir olan takma için ls -CF, düz farklı davranırls .

-C

-Clsçıktıyı sütun biçiminde yapar . Tüm stdout'u bir terminal (yerine bir dosya ya da olmayan terminal cihazına yönlendirilir ya da başka bir komuta yöneltilen) 'dir, -Cima edilir. Yani koşmak koşmakla ls -Caynıdır ls. Ancak yönlendirildiklerinde veya yönlendirildiğinde eşdeğer değildirlerls . Örneğin:

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

...

Aksine, ls -C(veya -l) ne tür bir cihaz olduğuna bakılmaksızın sütun biçiminde çıktılar stdout. ls -C | lessüst çıktıya benziyor (ancak lesselbette tarafından sayfalandırıldı ).

-F

Arasındaki temel görünür fark lsvel bağlı olmaktır -Fneden olan bayrak, lsgirdileri o görüntüler sembolik ekleri (denilen göstergeler) eklemek için. Bu göstergeler ne tür bir dosya veya dizin olduklarını belirler.

Bunu lsyukarıdaki ilk komutun çıktısıyla karşılaştırı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*

...

Buraya:

  • / girişin bir dizin olduğu anlamına gelir.
  • *girişin normal bir dosya olduğu ve yürütülebilir (yani yürütülebilir izinleri olduğu ) anlamına gelir.
  • Herhangi bir göstergenin olmaması, girişin yürütülebilir olmayan normal bir dosya olduğu anlamına gelir.

Başka göstergeler de var:

--classifyBayrak ve --indicator-style=classifyeşdeğerdir -F.

Kaynak: GNU Coreutils kılavuzu , Bölüm 10.1.5 Genel çıktı biçimlendirmesi

Sonuç olarak, l( ls -CF) benzer ama aynı değildir olarakls .

Akılda tutulması da iyidir:

Aynı metin hem normal bir komut hem de bir takma ad olabilir.

Bu, otomatik renklendirme (rengin ne zaman uygulandığı yerlerde) gibi hem son derece yararlı hem de zararsız olarak kabul edilen seçenekleri belirtmek için yaygın olarak kullanılır stdout değiştirilmediğinde veya bir terminal olduğu , bu nedenle renkleri belirten kaçış kodlarının yanlış yorumlanmamaları neredeyse garanti .

Bu ilke ile, lskendisi bir takma addır.

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

Peki , çalıştırdığınızda hangi komut gerçekten çalıştırılır l? Bu:

/bin/ls --color=auto -CF
  1. Kabuk ( bash) bir içermeyen komutlar giderir /belirdiğini eşleşmeye PATH, burada Ubuntu'da için lsIS/bin/ls .
  2. Takma adlar takma ad içerebilir. Takma ad çözünürlüğü özyinelemeli değildir (bir takma ad aynı adı taşıyan normal bir komutu çağırabilir ancak kendisini çağıramaz). Ancak yuvalamayı destekler .

Yani lgiderir için ls -CFhangi giderir ls --color=auto -CF.

Takma adlar değiştirilebilir.

Bu takma adlar, varsayılan olarak bu şekilde ayarlandıkları için mevcuttur, ancak her kullanıcı takma adlarını değiştirebilir. Bkz man alias, Bölüm 25 ve Ek M Gelişmiş Bash-Komut Kılavuzu'nda ve nasıl "takma" girdileri tasarruf sonsuza .

İlgili: Farklı renkler ls'de ne anlama geliyor?


6

Aslında, her iki lsve leşittir

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

neden buna sebep olan yerleşik bir sistem takma adı olduğu anlamına gelir. görmek istiyorsanız, terminalinizi açın ve yazın, aliassonra böyle bir çıktı alırsınız

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$ 

Gizem çözüldü :)
Armand

6
@Alison lKayar lsolan değil aynı - sadece ne yok dizinleri, çalıştırılabilir, sembolik veya aygıt düğümleri (ve standart çıkış terminali olarak) olduğu için, bu özel dosyalar için aynı çıktı üretmek için.
Eliah Kagan

Gördüğünüz gibi alias l='ls -CF', bu aynı değil. Ayrıca, daha özlü çıktı almak istiyorsanız, çalıştırabilirsiniz alias l.
wjandrea

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.