Favori komut satırı özellikleri veya püf noktaları nelerdir?


94

Komut satırı özelliklerini ve püf noktalarını Unix / Linux için paylaşın. Mümkünse kabuğunu / dağıtımını agnostik tutmaya çalışın. Takma adları, tek harfleri, klavye kısayollarını, küçük harfli komut dosyalarını vb. Görmekle ilgileniyor.

Yanıtlar:


89

Bu !!, bu cevapta belirtilen numara üzerinde biraz genişler . Aslında, unutulmaya çalışan bir sürü tarihle ilgili komut vardır (insanlar Upyazdıkları bildikleri bir emri yerine 100 kez bıçaklanma eğilimindedir ).

  • historyKomut sola bir olay göstergesiyle birlikte son çalıştırılan komutların bir listesini gösterir
  • !N olay göstergesine bağlı komutu yerine koyacaktır N
  • !-Nen son N inci komutu yerine geçecek ; örneğin !-1, en son komutun yerine, en son !-2ikinci komutun yerine geçecektir .
  • Diğer cevapta belirtildiği gibi, hızlı bir şekilde son komutu yerine koymak !!için!-1
  • !string ile başlayan en son komutun yerini alacak string
  • !?string? içeren en son komutun yerini alacak string

!Sonuçları değiştirmek için sözcük tanımlayıcılar bir tarih komutuna eklenebilir . Bir kolon, olayı ve kelime belirleyicileri ayırır, örn !!:0. Etkinlik tanımlayıcı !!, yalnızca !bir sözcük tanımlayıcı kullanıldığında kısaltılabilir !!:0, buna eşdeğerdir !:0.

  • !:0 idam edilen komutu alacak
  • !:1ilk argümanı alacaksınız (ve !:2ikincisi, vb.)
  • !:2-3 ikinci ve üçüncü argümanları alacak
  • !:^ilk tartışmayı almanın başka bir yolu. !:$son alacak
  • !:*Tüm argümanları alır (ancak komutu değil )

Değiştiriciler ayrıca !her biri iki nokta üst üste eklenmiş bir tarih komutuna eklenebilir . Herhangi bir sayı (örneğin !:t:r:p) üzerine istiflenebilir .

  • h - Temel dosya adına göre sırala
  • t - Sadece temel dosya adı
  • r - Dosya adı uzantısına göre sırala
  • e - Yalnızca dosya adı uzantısı
  • s/search/replacement- ilk geçtiği yerine searchilereplacement
  • gs/search/replacement- tüm oluşumları değiştirin searchilereplacement

3
Eğer Bash kullanıyorsanız (diğer bazı mermiler için aynı olabilir), M- ^ (Meta- ^), aslında neyi kastettiğinizi görmek istemeniz durumunda, sizin için yukarıdaki tarih genişletme operatörlerini genişletir. için.
Eric Smith

1
İçin hiçbir zaman bir kullanım bulamadım! emir vermek. Görmediğim bir emir vermek bana kötü geliyor. ! -4 yerine! -3 yazmanız çok kolay olurdu ve kim ne olacağını bilir. Çalıştırmak istediğim komutun satır numarasını bulmak genellikle değerinden daha fazla acı vericidir. Yine de havalı numaralar, ama onlar için gerçek bir kullanım bulamadım.
Falmarri

1
@Falmarri Ben de asla kullanmam !-#. !stringDizeyle başlayan son komutu çalıştırmak için kullanıyorum , ancak doğru şeyi çalıştırdığımdan emin olmak için genellikle ilk önce tab-tamamladım (zsh)
Michael Mrozek

1
Hayır! :) "Çalıştırma !Nkomutu çalıştırılacak ..." bir açıklama çok dar; aslında, !Nkomutla değiştirilecektir ...; ve cevabındaki tüm açıklamalar için. Daha doğru ve çok daha kullanışlı olasılıklar açılıyor! Örneğin, belirtilen sudo !!.
imz - Ivan Zakharyaschev

1
Önceki komutları çalıştırmak için bir dize tarafından baktım, genellikle sadece Ctrl-R tuşlarına basın. Çoklu Ctrl-R, geçmişe daha derine inecektir. Bu şekilde, bulunan komutu hemen görüyorum, atıp daha ileri bakabiliyorum. Ctrl-G bu moddan kaçar. Tek sıkıntı, Ctrl-R'nin bash; Emacs'ta, giriş komutlarının ve değerlerinin geçmişine göz atmak için (Mx veya diğer okuma değerleri için) biri yerine Meta-R kullanılır (Meta-R, eshellEmacs'ta da kullanılır ). Bu yüzden onları sık sık karıştırırım.
imz - Ivan Zakharyaschev

65

bash - önceki satırın son parametresini ekle

alt- . Şimdiye kadarki en kullanışlı tuş kombinasyonu, denemek ve görmek, nedense kimse bu konuda bilmiyor.

eski son parametreleri seçmek için tekrar tekrar basın.

Sadece bir an önce kullandığınız argümana / dosyaya daha fazla şey yapmak istediğinizde harika.


11
Önceki komuttaki son argümana başvurmak için! $ 'I da kullanabilirsiniz. Bu yararlıdır, çünkü etkileşimli olduğu kadar komut dosyalarında da çalışır. (Bash ve zsh olarak çalışır)

4
Her çarptığınızda alt- .önceki komuta gider ve son argümanı ondan çeker. Üç komutlar önce son argüman istiyorsanız Yani, sadece vurmak alt- .üç kez.
Ağustos'ta kaçacak

2
Bu, yank-last-argreadline komutu için varsayılan anahtar bağlamadır , bu nedenle yalnızca BASH veya ZSH ile değil, readline'a bağlı herhangi bir programla çalışması gerekir.
James Sneeringer

Vi modunda yank-last-arg komutunu şu cevaba göre yeniden bağlamak zorunda kaldım: superuser.com/questions/18498/…
Jeromy Anglim

Xterm'de meta-. ® üretir, ancak meta yerine esc kullanabilirsiniz (genel olarak bash'ta), yani esc-. yerine.
derobert

49

Benim favorim

man 7 ascii

Basit ve çok çok kullanışlı.

   Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
   ────────────────────────────────────────────────────────────────────────
   000   0     00    NUL '\0' (null character)   100   64    40    @
   001   1     01    SOH (start of heading)      101   65    41    A
   002   2     02    STX (start of text)         102   66    42    B
   003   3     03    ETX (end of text)           103   67    43    C
   004   4     04    EOT (end of transmission)   104   68    44    D
   005   5     05    ENQ (enquiry)               105   69    45    E
   006   6     06    ACK (acknowledge)           106   70    46    F
   007   7     07    BEL '\a' (bell)             107   71    47    G
   010   8     08    BS  '\b' (backspace)        110   72    48    H
   011   9     09    HT  '\t' (horizontal tab)   111   73    49    I
   012   10    0A    LF  '\n' (new line)         112   74    4A    J
   013   11    0B    VT  '\v' (vertical tab)     113   75    4B    K
   014   12    0C    FF  '\f' (form feed)        114   76    4C    L
   015   13    0D    CR  '\r' (carriage ret)     115   77    4D    M
   016   14    0E    SO  (shift out)             116   78    4E    N
   017   15    0F    SI  (shift in)              117   79    4F    O
   020   16    10    DLE (data link escape)      120   80    50    P
   021   17    11    DC1 (device control 1)      121   81    51    Q
   022   18    12    DC2 (device control 2)      122   82    52    R
   023   19    13    DC3 (device control 3)      123   83    53    S
   024   20    14    DC4 (device control 4)      124   84    54    T
   025   21    15    NAK (negative ack.)         125   85    55    U
   026   22    16    SYN (synchronous idle)      126   86    56    V
   027   23    17    ETB (end of trans. blk)     127   87    57    W
   030   24    18    CAN (cancel)                130   88    58    X
   031   25    19    EM  (end of medium)         131   89    59    Y
   032   26    1A    SUB (substitute)            132   90    5A    Z
   033   27    1B    ESC (escape)                133   91    5B    [
   034   28    1C    FS  (file separator)        134   92    5C    \  '\\'
   035   29    1D    GS  (group separator)       135   93    5D    ]
   036   30    1E    RS  (record separator)      136   94    5E    ^
   037   31    1F    US  (unit separator)        137   95    5F    _
   040   32    20    SPACE                       140   96    60    `
   041   33    21    !                           141   97    61    a
   042   34    22    "                           142   98    62    b
   043   35    23    #                           143   99    63    c
   044   36    24    $                           144   100   64    d
   045   37    25    %                           145   101   65    e
   046   38    26    &                           146   102   66    f
   047   39    27    '                           147   103   67    g
   050   40    28    (                           150   104   68    h
   051   41    29    )                           151   105   69    i
   052   42    2A    *                           152   106   6A    j
   053   43    2B    +                           153   107   6B    k
   054   44    2C    ,                           154   108   6C    l
   055   45    2D    -                           155   109   6D    m

   056   46    2E    .                           156   110   6E    n
   057   47    2F    /                           157   111   6F    o
   060   48    30    0                           160   112   70    p
   061   49    31    1                           161   113   71    q
   062   50    32    2                           162   114   72    r
   063   51    33    3                           163   115   73    s
   064   52    34    4                           164   116   74    t
   065   53    35    5                           165   117   75    u
   066   54    36    6                           166   118   76    v
   067   55    37    7                           167   119   77    w
   070   56    38    8                           170   120   78    x
   071   57    39    9                           171   121   79    y
   072   58    3A    :                           172   122   7A    z
   073   59    3B    ;                           173   123   7B    {
   074   60    3C    <                           174   124   7C    |
   075   61    3D    =                           175   125   7D    }
   076   62    3E    >                           176   126   7E    ~
   077   63    3F    ?                           177   127   7F    DEL

Commandlinefu.com web sitesine bakınız .

Peteris Krumins'in bu dört makalesine blogunda bakabilirsiniz.


2
Ayrı ascii program da yararlıdır. Tablo yazdırmanın yanı sıra, bir veya daha fazla bireysel karakter için sorgu yapmanızı sağlar.
Matthew Flaschen


42

Bunun bir "hile" olarak sayılıp sayılmadığından emin değiliz, ancak insanlar standart okuma satırı kısayol tuşlarından habersiz görünüyorlar. Özellikle kabuklarda kullanım:

  • Ctrl+ U- Geçerli çizgiyi kes
  • Ctrl+ Y- Ctrl+ ile kesilmiş bir çizgi yapıştırınU
  • Ctrl+ L- Ekranı temizle ve mevcut çizgiyi yeniden çiz
  • Ctrl+ G- Yeni bir satır al ve mevcut olanı bırak

5
Sadece bunlara birkaç tane eklemek için: Ctrl + A satırın başına gitmek için, Ctrl + E satırın sonuna gitmek için, Ctrl-K imleçten satırın sonuna kadar silmek için.
rsuarez

Ctrl+LFormFeed ascii karakterine karşılık gelir. Genellikle ekran pencereli metin uygulamalarında ekranı yeniden çizer (ör. Vim, daha az, mc, vb.). Ekran başka bir programın bir çıktısı tarafından "kirlenmiş" ise, güzel.
Hlovdal

Kısayol tuşları listesine ekleme: Ctrl+Wbir sözcüğü geriye doğru kesmek, bir sözcüğü Alt+Fileri Alt+Bgitmek, bir sözcüğü bir satır geriye doğru gitmek. Seviyorum Ctrl+Yve Shift+Insertçünkü iki kopyalanmış hattınız olabilir. Biri ile Ctrl+U(yapıştırın Ctrl+Y) ve aynı zamanda başka bir kelimeyi kopyalayabilirsiniz (satırı seçin) ile yapıştırın ( Shift+Insert).

36

CTRLRÖnceden yürütülen komutları aramak / etkinleştirmek için BASH içinde + (~ / .bash_history içeriği).

Bu genellikle son derece yararlıdır. Bu diğer adı kullanmak, 8000 numaralı bağlantı noktasında HTTP üzerinden PWD'ye (dizine alınmış) hizmet eder:

alias webserver="python -m SimpleHTTPServer"

Ve her zaman koştuğum ve çok hızlı bir şekilde fırladığım ve yazdığım için, bu takma adlar muhtemelen en çok kullandığım (ciddi):

alias maek=make
alias mkae=make
alias meak=make
alias amka=make
alias akme=make

Muhtemelen en sık kullandığım BASH parçam, yüklediğim basit bir betik. Herhangi bir içeriği Linode'ime karıştırmak için kullanıyorum ve sonuçta ortaya çıkan HTTP URL'sini panoya kopyalar (orta tıklama). IRC’deki insanlara malzeme yapıştırmak için çok kullanışlıdır:

scp -r $* $user@$host:public_html && {
    URL="http://$host/~$user/$(basename $1)"
    echo "$URL"
    xselection -replace PRIMARY "$URL"
}

Sadece bir çift. Daha sonra gönderebilirim, işe geri dönmeliyim!


8
alias mk=makeDaha hızlı yazmaya ve daha az yanlış anlama olasılığı var. Veya bir kısayol tuşu kullanarak editörünüzden derleyin ...
Lars Haugseth

BTW Zsh, basit yazım hatalarını düzeltmede çok iyi olan yerleşik yazım düzeltme özelliğine sahiptir.
Adam Byrtek

Ayrıca, zsh'de sanırım varsayılan, yukarı tuşuna bastığınızda, ctrl r'ye bastığınız gibi geçmiş araması yapar. Varsayılan olmayabilir ama bu bir ayar.
Falmarri

Ben düşünün alias m=makehatta ya m=make -j6zaten kullanmak dışında - ya da benzer alias m=mutt
jmtd

31

diff manuel olarak geçici bir dosya oluşturmadan iki komutun çıktısı (bash):

diff <(ls dir1) <(ls dir2)

Bu aynı zamanda commsadece dosya aldığı için çok faydalıdır , fakat çoğu durumda bu bir inode israfıdır.
Marcin

30

Oldukça basit, ama insanlar bilmiyor gibi gözüküyor, sizi bir önceki yönetime geri veriyor:

cd -

Sana söylüyorum, cd..DOS'tan kas hafızamda DOS kökleşmiş ...
LawrenceC

Bu
itme

Benzer şekilde, cdsizi ana dizininize götüren (tartışmasız) da var.
Mei,

Evet, bu delilik. Man sayfasında nerede - - 'nin genişlemesini gösteriyor? Her zaman pushd / popd kullanmaya çalışıyorum (ve unutuyorum)
Chuck R

29

Brace Genişlemesi :

Ayraç genişletme, rastgele dizelerin üretilebileceği bir mekanizmadır.

Bu gibi sıkıcı satırları değiştirmenize olanak sağlar:

mv loong/and/complex/file/name loong/and/complex/file/name.bacukup

daha kısa sürede

mv loong/and/complex/file/name{,backup}

diğer bazı kullanımlar

# to display the diff between /etc/rc.conf and /etc/rc.conf.pacsave
diff /etc/rc.conf{,.pacsave}

# to list files in both /usr/share and /usr/local/share
ls /usr/{,local}/share 

Aritmetik Genişletme :

Aritmetik genişleme, bir aritmetik ifadenin değerlendirilmesine ve sonucun değiştirilmesine olanak sağlar. Aritmetik genişleme formatı şudur:

$((expression))

İfade, çift tırnak içine alınmış gibi ele alınır, ancak parantez içindeki çift tırnak işareti özel olarak ele alınmaz. İfadedeki tüm simgeler, parametre genişletme, dize genişletme, komut değiştirme ve alıntı kaldırma işleminden geçer. Aritmetik genişlemeler iç içe geçmiş olabilir.

$ a=1
$ b=2
$ echo $(( a+(b*2) ))
5

3
Güzel, bunu unuttuğuma inanamıyorum. Ayrıca foo[123]genişleyeceği daha kompakt bir konu da var foo1 foo2 foo3, ancak bu durumda çalışmak için dosya
isimleri

hehe .. teşekkürler ... her gün bir şeyler öğren +1
Stefan

29

Bu genellikle benim başlangıç ​​betiğimde (.bashrc, .profile, herneyse)

shopt Allahım, yorumları kontrol et:

shopt -s cdspell        # try to correct typos in path
shopt -s dotglob        # include dotfiles in path expansion
shopt -s hostcomplete   # try to autocomplete hostnames

Tuş vuruşlarını kaydeden bir takma ad: mkdirve cdiçine:

mkcd () { mkdir -p "$@" && cd "$@"; }

Ve son fakat en az değil, tar sözdizimini ezberlemekten vazgeçtim.

extract () {
    if [ -f $1 ] ; then
        case $1 in
            *.tar.bz2)  tar xjf $1      ;;
            *.tar.gz)   tar xzf $1      ;;
            *.bz2)      bunzip2 $1      ;;
            *.rar)      rar x $1        ;;
            *.gz)       gunzip $1       ;;
            *.tar)      tar xf $1       ;;
            *.tbz2)     tar xjf $1      ;;
            *.tgz)      tar xzf $1      ;;
            *.zip)      unzip $1        ;;
            *.Z)        uncompress $1   ;;
            *)          echo "'$1' cannot be extracted via extract()" ;;
        esac
    else
        echo "'$1' is not a valid file"
    fi
}

5
+1, neden bunu düşünmedim? (özü)
MAK

mkcdSadece kimliğimi isimle benzer bir işleve sahibim md. Ancak, "$ @" ifadesini cd argümanı olarak kullanmak bir anlam ifade etmez, çünkü birden fazla dizine cd yazamazsınız. "$ @" mkdir için çalışacak, ancak daha sonra mkdir ve cd için farklı argümanlarla md () { mkdir -p "$1"; cd "$1" }
ilgileniyorsunuz

bu komutları nasıl eklerim? .bashrc'ye yapıştırın veya yapıştırmadan önce "takma ad" ekleyin.
Asaf

22

Beni birçok tuş vuruşundan kurtaran iki bash işlevi.

Her başarılı cd'den sonra otomatik olarak bir ls yapın:

function cd {
    builtin cd "$@" && ls
}

Go n seviyeleri:

# Usage .. [n]
function .. (){
    local arg=${1:-1};
    local dir=""
    while [ $arg -gt 0 ]; do
        dir="../$dir"
        arg=$(($arg - 1));
    done
    cd $dir #>&/dev/null
}

4
builtin fooBir işlevi tanımlamaktan kurtulmak için yapabileceğinizi asla anlamadım cd; chdirİşlevlerimde kullanıyorum . Handy
Michael Mrozek

Muhteşem. Sadece cd fonksiyonunda -S'yi ekleyin ve mükemmel (benim için)!
frabjous

2
Cd için de aynısını yapıyorum, ancak birkaç tane daha akıl sağlığı kontrolü var ve etkileşimli olmayan modda ls yapmaktan kaçınıyorum:cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
jmtd

17

Genelde arama yapmak istemeden önce komut satırının yarısı kadar olduğum için (bash'te CTRL-R).

bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward

Bu, eğer cd yazıp yukarı / aşağı basarsam cd yaptığım tüm seçenekleri görebileceğim anlamına gelir. Temelde bunu sıkça kullanılan dir. "Cd w" gibi ve ben de kullandığım tüm çalışma alanlarından geçiyorum.


Bu gerçekten harika! Temel işlevlerini bozmadan okların davranışını genişletir. Teşekkürler!
philfr

17

Bana zaman kazandıran şeylerden biri pushd / popd komutları. Bu adamlar bir yığın dizin oluşturmanıza ve yazmayı çok azaltmanıza izin verir:

/foobar/ > pushd /src/whatever/foo/test
/foobar/src/whatever/foo/test > make run
/foobar/src/whatever/foo/test > popd
/foobar/ > make

2
Evet! takma ad u = pushd; takma ad o = popd
cannedprimates

2
.. ve burada ne yapmak uve odurmak?
deizel

@deizel: Spesifik bir şey yok, yazmaktan kaçınmak için sadece bir kısayol.
Adam Byrtek

2
Komutun ikinci harfi gibi görünüyor, çünkü ikisi de p ile başladığı için, ikisini de kullanamazsınız.
camh

ZSH'de yapabilirsiniz setopt autopushdve tüm dizin değişiklikleri otomatik olarak
zorlanır

14

screen Komut . Temelde geri döndüğünüzde komut satırı oturumunuzu kaydeder. Bir tür terminal yöneticisi, bir pencere yöneticisi gibi. Bu şekilde, tek bir terminal oturumunda, devam eden birden fazla sanal terminaliniz olabilir. Çok havalı.

Biri kullanırsa screen, bu kabuk işlevi (içine koymak .bashrc) son derece kullanışlıdır:

function scr {
    if screen -ls | grep -q Main; then
         # reattach to Main: 
         screen -xr Main
    else
         # name session "Main":
         screen -S Main
    fi
   }

yazarak üzerine scrana oturumu varsa, onu kontrol eder ve ona ekleyecektir. Aksi takdirde onu yaratacaktır.


teknik olarak, bir "komut" değil, kendine ait bir programdır.
unperson325680

1
Ekranda tmux veya dvtm kullanmanızı tavsiye ederim. Onlar daha modern ve daha temiz değiştirmelerdir.
deltaray

Evet, "tmux" tartışmasız ekrandan çok daha iyi.
ColinM

Ayrıca,
sezgisel

13

Bash'ta özellikle uzun bir komut satırı düzenlemeniz gerekirse

^X^E (Ctrl-X Ctrl-E) 

editörde açılacaktır ($ EDITOR).

Zsh'de, bunu .zshrc dosyasına ekleyerek aynı davranışı elde edebilirsiniz:

autoload edit-command-line
zle -N edit-command-line
bindkey '^X^e' edit-command-line 

Vay, bu kişi The Book'a giriyor.
l0b0

Evet ve notlarıma gir!
jyz

12

Hızlı bir daktiloysanız, bunlar işe yarar:

alias grpe='grep --color=tty'
alias gpre='grep --color=tty'
alias rgep='grep --color=tty'
alias gerp='grep --color=tty'

Bu makro bir çıktı sütununun toplamını hesaplamanıza yardımcı olur: dosya boyutları, baytlar, paketler, yapmanız gereken tek şey eklemek istediğiniz sütunu belirtmektir:

total ()
{
        if [ x$1 = x ]; then set `echo 1`; fi
        awk "{total += \$$1} END {print total}"
}

Bunu böyle kullanırsınız, örneğin, argüman olmadan, ilk sütunun toplamını ekler:

du | total

Argümanı sağlarsanız, bu sütunu toplayacaktır, örneğin, bu size / tmp içindeki tüm C # dosyalarının kullandığı toplam bayt sayısını verir:

ls -l /tmp/*cs | total 5

Bazen konsolunuz bozulur çünkü yanlışlıkla bir ikili dosya görüntüleyebilirsiniz (örneğin, cat / bin / ls), terminali şu kabuk işleviyle geri yükleyebilirsiniz:

restaura ()
{
    perl -e 'print "\e)B";'
}

Dosya sınıfını ayırt etmek ve aynı zamanda editörüm tarafından oluşturulan yedekleme dosyalarını gizlemek için (yedekleme dosyaları ~ karakteriyle biten) ls'lerin karakter kullanmasını seviyorum.

alias ls='ls -FB'

Unutma: alias gerp = 'grep --color = tty' Bunu her zaman yaparım ;-)
Robert Swisher

1
Endişelendiğim kadarıyla, "hızlı" doğru değilsem sayılmaz. Ayrıca GREP_COLORS ve GREP_OPTIONS değişkenlerine bakmak isteyebilirsiniz.
Andy Lester

2
s/fast/sloppy/
Josh,

1
Kullandığın resetyeri kullanıyorum restaura.
jmtd

11
alias s='sudo'
alias r='rake' # i'm a ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.

Unuttuğum zaman favorilerimden biri s:

$ s !! # last command with super user priviledges

2
ZSH kullanıyorsanız bindkey -s '\e[12~' "sudo !!\n", bu komutu çalıştırmak için (bu durumda) F2'ye bağlanmak gibi bir şey yapabilirsiniz . Bu bağlayıcılığım var, bu yüzden bir şey çalıştırıp "sudo 'sudo' sesini unuttun" hata mesajını gördüğümde, sadece F2’de sıkıntıdan bıçaklanabiliyorum
Michael Mrozek

Zavallı F2 tuşu ....)
Eimantas,

Bunu her zaman kullanırım. Hosts dosyamı düzenlemeden önce sudo yazmayı sürekli unutuyorum. Bu durumda, sadece sudo çalıştırın! +1
Brian Wigginton

10

Bir komut stdin girişi alırsa, girişi bir dosyadan okuyabilirsiniz <filename. Bu komutun herhangi bir yerinde görünebilir, bu nedenle bu satırlar eşdeğerdir:

cat filename
cat <filename
<filename cat

Bu özellikle grep için kullanışlıdır, çünkü ifadeyi satırın sonuna yerleştirmenize izin verir, böylece bir grep komutunu Updosya ismini geçmek için sola kaydırmaya gerek kalmadan vurarak hızlıca değiştirebilirsiniz :

<filename grep 'expression'

3
İyi bir ipucu! Bunun aslında argümanları emirlere göre değiştirmediğini not etmek gerekir. Bunun yerine dosyayı STDIN işlemine yönlendirir, çünkü grep artık STDIN'den okumak için varsayılan bir dosya argümanına sahip değildir. Bunu anlamak, bu tekniği diğer komutlarla kullanmak için birçok fırsat sunacak ve insanların beklendiği gibi çalışmadığında neler olup bittiğini anlamalarına yardımcı olacak. Daha fazla bilgi için boruları ve yönlendiricileri arayın
chillitom

@ chill İyi puanlar; ipucu aslında aslında yanlış olacak kadar kötü ifade edildi. Senin yorumuna dayanarak yeniden yazdım
Michael Mrozek

Son zamanlarda öğrendiğim bir şey: girişi döngülere yönlendirebilirsiniz (için, süre, vb.). Bkz faqs.org/docs/abs/HTML/redircb.html .
Lucas Jones

Geleneksel olarak, yönlendirmeyi sonlandırırsınız. Boru hattı metaforu daha iyi görünmekle birlikte <input foo | bar | baz >output, gibi whileya forda ortasında bazı kabartma ilmekli ilkellerle karıştırmayı denerseniz işe yaramaz . Ben de pes ettim ve sadece sözleşmeye göre sona erdirdim.
jmtd

jmtd Sonunda koymak, ortadan kaldırır "Bu, özellikle satırın sonuna ifadeyi yerleştirmenize izin verdiği için grep için kullanışlıdır, böylece kaydırmaya gerek kalmadan hızlıca bir grep komutu vurabilirsiniz. dosya
adını atlamak için kaldı

9

CDPATHEşdeğerini ayarlamak için kullanabilirsiniz PATH; denerseniz cd foove foogeçerli dizinde hiçbir şey yoksa , kabuk onları CDPATHbulmak için her bir dizini kontrol fooeder ve bulduğu ilk dizine geçer :

export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise

3
Bu sorunlara neden olabilir. Softpanorama.org/Scripting/Shellorama/cdpath.shtml " Bkz. $ CDPATH ayarlanmışsa, dahili cd mevcut dizine dolaylı olarak eklenmeyecektir . Bu, herhangi bir geçerli dizin adı oluşturulamıyorsa, cd başarısız olacaktır. $ CDPATH içindeki girdilerin listesi, cd için bir argüman olarak verilen isim ile aynı isimde bir dizin mevcut dizinde bulunsa bile. " Bununla ısırıldım, bazı Makefile'ler çalışmayı bıraktı. Ekleniyor açıkça yardımcı olabilir, ancak bununla ilgili bazı sorunlar da var.
ustun

9
vi `which scriptname`

Bir şeyin nerede yaşadığını bilmediğin zaman ve umrunda değil.


8
ZSH özelliklerini korumaya devam etmek istemem, ama başkalarının cevapları gibi onları düşünüyorum :). ZSH'de şunları yapabilirsiniz = whichotomatik olarak çağırmak için foo , yanivi =scriptname
Michael Mrozek

Eğer backtick karakterine bakmakta sorun yaşıyorsanız, şunları da kullanabilirsiniz$(scriptname)
Patrick

9

Ve işareti . Komutunuzu arka planda tutar, böylece yazmaya devam edebilirsiniz.

$> sudo updatedb &

Birlikte çalışmak ve bir süre sonra şunları görürsünüz:

[1] 17403

Ve senin sürecin bitti! Sonlandırmalarını beklemeniz gerekmeyen şeyler için idealdir.


11
Uygulamanız GUI ise, muhtemelen işlerinde kalmasını istemezsiniz. Append &!arka plana işi ve kabuğundan çıkmama!
unperson325680

@progo: Bu benim için işe yaramıyor bash.
Nathan Osman

@George. Görünüşe göre haklısın. Zsh'nin desteklediğini öğrendim ve daha sonra Bash'in de desteklediğini duydum. Oh my :(
unperson325680

1
@ progo: Komutu hazırlamanın bunu başardığı ortaya çıkıyor nohup.
Nathan Osman

8

Sekme tamamlama . Her yolun tüm karakterlerini yazmanız ne kadar kötü olurdu?


5
İntihar linux var. Yanlış komutu yazarsanız - yapar rm -fr /. Yani evet, Tab'ın tamamlanması oldukça önemlidir ...
Eimantas,

Düşündüğün kadar kötü değil (ama yine de kötü), her yere joker karakter serpin:ls /usr/lib/game-d*/rott*
jmtd

@Eimantas rm -rf /Çoğu Linux sisteminde devre dışı değil mi?
Bernhard Heijstek

@phycker - İntihar Linux'undan bahsettim, "hepsi" değil.
Eimantas

7

En son takılan cihazı çıkarın:

mount /media/whatever
...
u!mo

!moile başlayan son komuta genişler mo(en azından bash'te). Bazen biri mvortada yapar, bu yüzden u!msık sık çalışmaz.


Komutu güvenlik önlemi olarak çalıştırmadan genişletmek için Ctrl + Shift + 6 (Ctrl + ^) tuşlarını kullanın
ColinM

7

Bu benim .bashrc içinde var

#shortcut for CTRL+C and CTRL+V
alias c-c='xclip -sel clip'
alias c-v='xclip -o -sel clip'

 

function find-all() {
    python -c "import re
import sys
for i in re.findall('$1', sys.stdin.read()):
    if type(i) == type(''):
        print i
    else:
        print i[0]"
}

Panodaki html kaynak kodum olduğunda ve kullandığım tüm bağlantıları bulmak istediğimde

c-v | find-all 'href="([^"]*)"' | c-c

Ve panodaki tüm URL'lerim var

Bende de bu fonksiyon var

function lsq(){
    ls -lh $@ | tr -s ' ' | cut -d' ' -f5,8
}

hangi boyutta (okunabilir) ve dosya adını gösterir.

alias temp='cat /proc/acpi/thermal_zone/THRM/temperature'

bu takma ad gösteri sıcaklığı içindir

function separate() {
    python -c "import sys,re; print '$1'.join(re.split('\s*', sys.stdin.read().strip()))";
}

Bu fonksiyon ile ürün veya argüman toplamını hesaplayabilirim.

alias sum='separate + | bc'
alias product='separate * | bc'

function split-join() {
    python -c "import sys,re; print '$2'.join(re.split('$1', sys.stdin.read().strip()))";
}

Bu, standart girdiyi regex ile ayıran ve ardından sonucu birleştiren kullanışlı bir işlevdir.

function factorial() {
    seq -s* $1 | bc
}

faktoring işlevi

function wiki() { dig +short txt $1.wp.dg.cx; }

Bu işlev, DNS üzerinden wiki metnini görüntüler

Ayrıca üç renk fonksiyonum var

function blue() {
    echo -e "\x1b[34m\x1b[1m"$@"\x1b[0m";
}

function green() {
    echo -e "\x1b[32m\x1b[1m"$@"\x1b[0m";
}

function red() {
    echo -e "\x1b[31m\x1b[1m"$@"\x1b[0m";
}

 

function md5check() {
    test `md5sum $2 | cut -d' ' -f1` = "$1" && green [OK] || red [FAIL]
}

Bu işlev md5 hash dosyasını doğrular.

bu verilen kod için hata mesajı gösterecektir

function strerror() { python -c "import os; print os.strerror($1)"; }

Tüm mesajları ile yazdırabilirsiniz.

alias all-errors='for i in `seq 131`; do echo -n "$i: "; strerror $i; done'

6

Başka bir yararlı ZSH numarası:

Bir komutun çıktısını bir dosya olarak kabul edin:

emacs =(hg cat -r 100 somefile)

Bu, sözdizimi ile vurgulanan görüntüleme için emacs'ta Mercurial-izlenen bir dosyanın eski bir versiyonunu açar. Bu olmadan, ben etrafında karışıklık olurdu hg revert, hg archiveveya açıkça göndermek hg catgeçici bir dosyaya çıktı.

Tabii ki, bu dosyaları açan herhangi bir program ve standart çıktıya yazdıran herhangi bir program ile çalışır.


5
Bunu, bash olarak <()
ScaryAardvark

5

Bir ZSH özgü bir özellik vererek belirlenen eki takma ad olduğunu bayrak:alias-s

alias -s ext=program

Belirli bir uzantının soneki bir takma adı varsa, doğrudan bu uzantıyla bir dosyayı çalıştırabilir ve ZSH verilen programı başlatacak ve dosya adını bir argüman olarak iletecektir. Bu nedenle, yukarıdaki diğer ad geçerliyse, bu satırlar eşdeğerdir:

/path/to/foo.ext
program /path/to/foo.ext

Bu, Windows hakkında gerçekten özlediğim bir şeydi ... "program" ın her zaman emacs olduğunu fark edene kadar, dosyaları açmak için kabuk kullanmayı bıraktım ve Cx Cf (duh) kullandım.
harpo

5

Tüm zamanların en sevdiğim ZSH özelliklerinden biri dizinler. Belirli bir yola işaret eden bir değere sahip belirli bir adı olan bir değişkeni dışa aktarabilirsiniz:

export foo=/usr/bin

Şimdi ~foobir komutta başvuruda bulunmak için kullanabilirsiniz /usr/bin:

cd ~foo
~foo/ls
cat ~foo/filename

Komut isteminiz geçerli çalışma dizinini gösterirse, değişkenlerin isimleri de hatırladığım kadarıyla orada kullanılacaktır.
Andre Holzner

4

Bu soruya bakınız .

Koşarken ps ax | grep string:

[steve@sage-arch ~]$ ps ax | grep 'openbox'
 3363 ?        Ss     0:00 /usr/bin/openbox
 3382 ?        Ss     0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
 3386 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3388 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3389 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3390 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 5100 pts/0    S+     0:00 grep openbox

içeren son satır grepbiraz can sıkıcı bir şeydir

Bunu çalıştırarak kendinizden kurtulabilirsiniz ps ax | grep '[s]tring':

[steve@sage-arch ~]$ ps ax | grep '[o]penbox'
 3363 ?        Ss     0:00 /usr/bin/openbox
 3382 ?        Ss     0:00 /usr/bin/ssh-agent -- /usr/bin/openbox-session
 3386 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3388 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3389 ?        S      0:00 /bin/sh /usr/bin/openbox-session
 3390 ?        S      0:00 /bin/sh /usr/bin/openbox-session

güncelleme : veya sadece çalıştırınpgrep string


evet, çok faydalı. Ancak openbox'dan alıntı yapmalısınız ( '[o]penbox'). Parantezler bir tür glob gibi çalışacak, bu yüzden eğer dizininizde openbox varsa (içinde olduğunuzu söyleyin /usr/bin) bash sadece grep numaralarını engelleyen openbox kullanacaktır.
Rich Homolka

4
  • Do-nothing komutu :olarak

    while :; do :; done
  • Destekler için kombinasyonda destek genişlemesi:

    for c in {1..3}; do :; done
  • !operatör ve kısa devre operatörleri ||ve&&

    [ -d /tmp/dir ] || mkdir /tmp/dir
    
    if ! ping 34.41.34.1; then :; fi
  • pop / push yerine alt kabukları kullanma (scriptlerde kullanışlıdır)

    ~$ ( cd /tmp; echo $PWD )
    /tmp
    ~$
  • ne türünün emritype

    ~$ type type
    type is a shell builtin
    ~$ type ls
    ls is aliased to `ls --color=auto'
    ~$ f(){ :; }
    ~$ type f
    f is a function
    f () 
    { 
         :
    
    }
  • ayrıca çok hoş: here-string

    ~$ cat <<<"here $PWD"
    here /home/yourname
    ~$
  • ve favorim: bir komut listesinde yönlendirme

    { w; ps; ls /tmp; } 2>/dev/null |less

3

PS1'ime elimden geldiğince fazla şey atmayı çok seviyorum. Hatırlanması gereken bazı şeyler:

\e[sve \e[usırasıyla imleç konumunu kaydedin ve kurtarın. Bunu ekranın en üstünde bir kaç satır uzunluğa sahip bir 'bilgi çubuğu' oluşturmak için kullanıyorum. Örnek:

PS1='\[\e[s\e[7m\e[1;1H\]\w\n\t        \j / \! / \#\[\e[u\e[0m\e[33;1m\][\u@\h \[\e[34m\]\W]\[\e[0m\]\$ '

İle birleştir alias clear='echo -e "\e[2J\n"'. Denemek!

Ayrıca, PROMPT_COMMANDdeğişken her zaman PS1'den önce çalıştırılacak bir komut tanımlar.

Bir diğeri bgkomuttur. &Bir komutun sonuna koymayı unutursanız , sadece basın ^Zve yazın bg, arka planda çalışır.


için teşekkürler bg, arka planda çalışan ve yanlışlıkla fg
basılan

Temizliği severim, PS1bu yüzden istediğim şeylerin çoğunu ekranın en alt satırına
Josh
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.