it-swarm-ru.tech

Какие ваши любимые функции командной строки или трюки?

Поделитесь своими возможностями и приемами командной строки для Unix/Linux. Постарайтесь сохранить его независимым от Shell/Distro, если это возможно. Интересуются просмотром псевдонимов, однострочников, сочетаний клавиш, небольших сценариев оболочки и т.д.

93
cmcginty

Это несколько расширяет !! трюк, упомянутый в этот ответ . На самом деле есть куча связанных с историей команд, о которых обычно забывают (люди, как правило, наносят удар Up 100 раз вместо того, чтобы искать команду, которую они знают, что они напечатали).

  • Команда history покажет список недавно выполненных команд с указателем события слева
  • !N заменит команду, связанную с указателем события N
  • !-N заменит N го самая последняя команда; например !-1 заменит самую последнюю команду, !-2 второй самый последний и т. д.
  • Как уже упоминалось в другом ответе, !! это сокращение от !-1, чтобы быстро подставить последнюю команду
  • !string заменит самую последнюю команду, которая начинается с string
  • !?string? заменит самую последнюю команду, содержащую string

Обозначения слов могут быть добавлены к ! команда истории, чтобы изменить результаты. Двоеточие разделяет обозначения события и Word, например !!:0. Обозначение события !! может быть сокращено до ! при использовании указателя Word, поэтому !!:0 эквивалентно !:0.

  • !:0 получит команду, которая была выполнена
  • !:1 получит первый аргумент (и !:2 второй и т. д.)
  • !:2-3 получит второй и третий аргументы
  • !:^ это еще один способ получить первый аргумент. !:$ получит последнее
  • !:* получит все аргументы (но не команда)

Модификаторы также могут быть добавлены к ! история команды, каждая с префиксом двоеточия. Можно сложить любое число (например, !:t:r:p).

  • h - Линия к основному имени файла
  • t - только базовое имя файла
  • r - Строка с расширением имени файла
  • e - только расширение файла
  • s/search/replacement - Заменить первое вхождение search на replacement
  • gs/search/replacement - Заменить все вхождения search на replacement
88
Michael Mrozek

bash - вставить последний параметр предыдущей строки

alt-. самая полезная комбинация клавиш, попробуйте и посмотрите, почему-то никто не знает об этом.

нажмите ее снова и снова, чтобы выбрать более старые последние параметры.

замечательно, когда вы хотите сделать что-то еще с аргументом/файлом, который вы использовали только минуту назад.

64
chillitom

Мой любимый

man 7 ascii

Просто и очень полезно.

   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 .

Вы также можете посмотреть эти четыре статьи Петериса Круминьша в его блоге.

49
Moeb

Выполните последнюю команду как root:

Sudo !!
46
Alex B

Не уверен, что это считается "уловкой", но люди, похоже, очень не знают о стандартных горячих клавишах readline. Особое применение в оболочках:

  • Ctrl+U - вырезать текущую строку
  • Ctrl+Y - Вставить отрезок с Ctrl+U
  • Ctrl+L - Очистить экран и перерисовать текущую строку
  • Ctrl+G - Получить новую строку и отказаться от текущей
42
Michael Mrozek

CTRL+R в BASH для поиска/активации ранее выполненных команд (содержимое ~/.bash_history).

Это часто очень полезно. Запустив этот псевдоним, вы получите PWD через HTTP (индексированный) через порт 8000:

alias webserver="python -m SimpleHTTPServer"

И поскольку я постоянно запускаю make, слишком быстро набираю и печатаю, эти псевдонимы, вероятно, наиболее часто используются (серьезно):

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

И, вероятно, мой наиболее часто используемый фрагмент BASH - это простой скрипт, который я называю upload. Я использую его для перетаскивания любого типа контента в мой Linode, и он копирует полученный URL-адрес HTTP в мой буфер обмена (средний щелчок). Очень полезно для вставки материала людям в IRC:

scp -r $* [email protected]$Host:public_html && {
    URL="http://$Host/~$user/$(basename $1)"
    echo "$URL"
    xselection -replace PRIMARY "$URL"
}

Просто пара. Я могу опубликовать гораздо больше позже, должен вернуться к работе!

36
Aaron Bockover

diff вывод двух команд без создания временного файла вручную (bash):

diff <(ls dir1) <(ls dir2)
31
Alex B

Довольно простой, но люди, кажется, не знают, возвращает вас к предыдущему каталогу:

cd -
30
Robert Swisher

Расширение скобок :

Разбивка скобок - это механизм, с помощью которого можно генерировать произвольные строки.

Это позволяет заменить утомительные строки, такие как:

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

с более коротким экземпляром

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

некоторые другие применения

# 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 

Арифметическое расширение :

Арифметическое расширение позволяет оценить арифметическое выражение и заменить результат. Формат для арифметического расширения:

$((expression))

Выражение обрабатывается так, как если бы оно было в двойных кавычках, но двойные кавычки в скобках специально не обрабатываются. Все токены в выражении подвергаются раскрытию параметров, расширению строк, подстановке команд и удалению кавычек. Арифметические разложения могут быть вложенными.

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

Обычно это в моем скрипте запуска (.bashrc, .profile, что угодно)

shopt Боже, проверьте комментарии:

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

Псевдоним, который сохраняет нажатия клавиш: mkdir и ​​cd в него:

mkcd () { mkdir -p "[email protected]" && cd "[email protected]"; }

И последнее, но не менее важное: я разочаровался в запоминании синтаксиса tar, поэтому:

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
}
29
Sygo

Две функции bash, которые спасают меня от множества нажатий клавиш.

Делать автоматически и ls после каждого успешного CD:

function cd {
    builtin cd "[email protected]" && ls
}

Поднимитесь на n уровней:

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

Так как я обычно на полпути в командную строку, прежде чем хочу искать (CTRL-R в bash), в моем .bashrc есть следующее

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

Это означает, что если я ввожу cd, затем нажимаю вверх/вниз, я вижу все опции, к которым у меня есть cd'd. В основном я использую это для часто используемых dirs. Как "CD W", и я в конечном итоге пройти через все рабочие места, которые я использую много.

17
mendicant

Одна вещь, которая экономит мне много времени, это команды pushd/popd. Эти ребята позволяют вам создавать стопку каталогов и значительно сокращают количество набираемых текстов:

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

screenкоманда . Это в основном сохраняет ваш сеанс командной строки, когда вы вернетесь. Это своего рода менеджер терминалов, как менеджер окон. Таким образом, в одном терминальном сеансе вы можете использовать несколько виртуальных терминалов. Это очень круто.

Если кто-то использует screen, эту функцию Shell (поместите в .bashrc) чрезвычайно полезно:

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

после ввода scr он проверит, существует ли ваш основной сеанс, и подключится к нему. В противном случае это создаст его.

14
user394

Если вам нужно отредактировать особенно длинную командную строку в bash

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

откроет его в редакторе ($ EDITOR).

В zsh вы можете получить то же поведение, добавив это в .zshrc:

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

Если вы быстро печатаете, это пригодится:

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

Этот макрос помогает вам вычислить итоги столбца вывода: размеры файлов, байты, пакеты, все, что вам нужно сделать, это указать столбец, который вы хотите добавить:

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

Вы используете его, например, без аргументов, он добавляет итог первого столбца:

du | total

Если вы предоставите аргумент, он будет суммировать этот столбец, например, это даст вам общее количество байтов, используемых всеми файлами C # в/tmp:

ls -l /tmp/*cs | total 5

Иногда ваша консоль портится из-за того, что вы случайно просмотрели двоичный файл (например, cat/bin/ls), вы можете восстановить терминал с помощью этой функции Shell:

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

Мне нравится, когда моя ls использует символы, чтобы различать класс файлов, а также скрывать файлы резервных копий, сгенерированные моим редактором (файлы резервных копий заканчиваются символом ~):

alias ls='ls -FB'
12
miguel.de.icaza
alias s='Sudo'
alias r='rake' # i'm a Ruby developer
alias ..='cd ..' # although with autocd feature for zsh this comes packed.

Один из моих любимых, когда я забываю s:

$ s !! # last command with super user priviledges
11
Eimantas

Если команда принимает ввод stdin, вы можете прочитать ввод из файла с помощью <filename. Это может появиться в любом месте команды, поэтому эти строки эквивалентны:

cat filename
cat <filename
<filename cat

Это особенно полезно для grep, так как позволяет поместить выражение в конец строки, поэтому вы можете быстро изменить команду grep, нажав Up, без необходимости прокрутки влево, чтобы пройти имя файла:

<filename grep 'expression'
10
Michael Mrozek

Вы можете использовать CDPATH, чтобы установить эквивалент каталога PATH; если вы попытаетесь cd foo и ​​в текущем каталоге нет foo, оболочка проверит каждый из каталогов в CDPATH, ищет в них foo, и переключится на первый находки:

export CDPATH="/usr"
cd bin # switches to 'bin' if there is one in the current directory, or /usr/bin otherwise
9
Michael Mrozek
vi `which scriptname`

Потому что, когда ты не знаешь, где что-то живет, тебе тоже все равно.

9
Matt Simmons

амперсанд. Это помещает вашу команду в фоновый режим, так что вы можете продолжить печатать.

$> Sudo updatedb &

Работая вместе, и через некоторое время вы видите:

[1] 17403

И ваш процесс завершен! Отлично подходит для вещей, где вам не нужно ждать их окончания.

9
user394

завершение табуляции. Как плохо было бы отстой, если бы вам пришлось печатать все символы каждого пути?

8
user394

У меня есть это в моем .bashrc

#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]"
}

И когда у меня есть исходный код HTML в буфер обмена и хочу найти все ссылки, которые я использую

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

И у меня есть все URL в буфер обмена

У меня тоже есть эта функция

function lsq(){
    ls -lh [email protected] | tr -s ' ' | cut -d' ' -f5,8
}

какой размер дисплея (удобочитаемый) и имя файла.

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

этот псевдоним для показа

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

с помощью этой функции я могу рассчитать произведение или сумму аргументов.

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()))";
}

Это полезная функция, которая разделяет стандартный ввод, разделенный регулярным выражением, и затем объединяет результат.

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

факторная функция

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

Эта функция отображает текст вики над DNS

У меня также есть три функции цвета

function blue() {
    echo -e "\x1b[34m\x1b[1m"[email protected]"\x1b[0m";
}

function green() {
    echo -e "\x1b[32m\x1b[1m"[email protected]"\x1b[0m";
}

function red() {
    echo -e "\x1b[31m\x1b[1m"[email protected]"\x1b[0m";
}

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

Эта функция проверяет хэш-файл md5.

это покажет сообщение об ошибке для данного кода

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

Вы можете распечатать все сообщения с

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

Размонтировать последнее подключенное устройство:

mount /media/whatever
...
u!mo

!mo расширяется до последней команды, которая началась с mo (по крайней мере, в bash). Иногда каждый делает mv посередине, поэтому u!m не будет работать так часто.

7
Roberto Bonvallet

Еще один полезный трюк ZSH:

Обработайте вывод команды как файл:

emacs =(hg cat -r 100 somefile)

Это открывает старую версию отслеживаемого Mercurial файла в emacs для просмотра с подсветкой синтаксиса. Без этого мне пришлось бы возиться с hg revert, hg archive или явным образом отправьте hg cat вывод во временный файл.

Конечно, это работает с любой программой, которая открывает файлы, и любой программой, которая печатает на стандартный вывод.

6
Matthew Flaschen

Специфической особенностью ZSH являются псевдонимы суффиксов, которые задаются с помощью alias the -s флаг:

alias -s ext=program

Если у данного расширения есть псевдоним суффикса, вы можете выполнить файл с этим расширением напрямую, и ZSH запустит данную программу и передаст имя файла в качестве аргумента. Так что, если вышеупомянутый псевдоним действует, эти строки эквивалентны:

/path/to/foo.ext
program /path/to/foo.ext
5
Michael Mrozek

Одна из моих самых любимых функций ZSH - это каталоги. Вы можете экспортировать переменную с заданным именем, со значением, указывающим на определенный путь:

export foo=/usr/bin

Теперь вы можете использовать ~foo в команде для ссылки на /usr/bin:

cd ~foo
~foo/ls
cat ~foo/filename
5
Michael Mrozek
  • Команда "ничего не делать" : как в

    while :; do :; done
    
  • Расширение раскоса в сочетании с петлями для:

    for c in {1..3}; do :; done
    
  • ! оператор и операторы короткого замыкания || а также &&

    [ -d /tmp/dir ] || mkdir /tmp/dir
    
    if ! ping 34.41.34.1; then :; fi
    
  • использование вложенных оболочек вместо pop/Push (удобно в скриптах)

    ~$ ( cd /tmp; echo $PWD )
    /tmp
    ~$
    
  • вид что есть команда type

    ~$ type type
    type is a Shell builtin
    ~$ type ls
    ls is aliased to `ls --color=auto'
    ~$ f(){ :; }
    ~$ type f
    f is a function
    f () 
    { 
         :
    
    }
    
  • тоже очень приятно: вот-нить

    ~$ cat <<<"here $PWD"
    here /home/yourname
    ~$
    
  • и мой любимый: перенаправление на список команд

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

Смотрите это вопрос.

Когда вы запускаете ps ax | grep string:

[[email protected] ~]$ 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

последняя строка, содержащая grep, немного раздражает

Вы можете избавиться от этого, запустив ps ax | grep '[s]tring':

[[email protected] ~]$ 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

обновить : или просто запустить pgrep string

4
Stefan

Иногда настройки bash таковы, что rm имеет псевдоним rm -i и, следовательно, требует подтверждения для каждого удаляемого файла. Когда я иногда работаю с таким аккаунтом, я использую \rm для получения исходного поведения rm без изменения пользовательской конфигурации.

3
mouviciel

Я люблю бросать столько вещей, сколько могу в мою PS1. Несколько полезных вещей для запоминания:

\e[s а также \e[u сохранить и отменить сохранение позиции курсора соответственно. Я использую это для создания "информационной панели" в верхней части экрана, длиной в пару строк, которая может вместить больше материала. Пример:

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

Объединить с alias clear='echo -e "\e[2J\n"'. Попробуйте!

Так же Prompt_COMMAND переменная определяет команду для выполнения перед PS1 каждый раз.

Еще одна команда bg. Если вы забыли поставить & в конце команды, просто нажмите ^Z и введите bg, и он будет работать в фоновом режиме.

3
Lucas Jones

Отобразить ветку Git и статус в приглашении

 export GIT_PS1_SHOWDIRTYSTATE = true 
 
 if ["$ color_Prompt" = yes]; затем 
 PS1 = '$ {debian_chroot: + ($ debian_chroot)}\[\ 033 [01; 32m \]\u @\h\[\ 033 [00m \]:\[\ 033 [01; 34m \]\w\[\ 033 [00m \] $ (__ git_ps1 "#% s")\$ '
 Else 
 PS1 =' $ {debian_chroot: + ($ debian_chroot)}\u @\h:\w $ (__ git_ps1 "#% s")\$ '
 fi 
3
Bauna

Моя любимая команда 'найти', я использую ее везде ... примеры:

find . -name "*.log" -exec ls -l {} \; | grep "$(find . -name "*.log" -exec ls -l {} \;| nawk '{print $5}' | sort -n | tail )"

Просто отобразите тяжелые файлы в формате ls -l (long).

Затем, если вам нужен код с разрешениями 0640, просто выполните поиск:

find . \( \( ! -perm 0640 \) -a \( -name "*.cpp" -o -name "*.h" \) \) -ls | nawk '{print $3"\t"$11}'

или заменить:

find . \( -name "*.cpp" -o -name "*.h" \) | xargs chmod 640

Тогда вам нужен символ и не знаете, где он?

(
  for myObj in $(find . -name "*.o"); do
    gotSym=$(dump -Xany -t $myObj | grep .MY_SYMBOL)
    if ! test "x$gotSym" = "x"
    then
      echo "OBJECT [$myObj] ========================"
      echo "$gotSym"
      echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"^
    fi
  done
)

Новые файлы, чем XFILE ??

find . -newer XFILE -type f

Ага, "найди" рулез!

3
D4RIO

Однажды так часто, когда вы набрали длинную команду и, прежде чем закончить ее, вы поняли, что она не сработает сразу, потому что вам нужно запустить что-то еще до (например, введено git commit -m "long commit message here"), вы можете нажать ^A^K чтобы перейти к началу строки и уничтожить ее (сохранение в буфере), затем запустить команду для исправления и, наконец, ^Y вставить вставленную команду и продолжить. Сохраняет много повторного набора. Все это, конечно, когда readline находится в режиме Emacs.

Еще одна экономия времени: mkdir -p some/nested/dirs/to/be/created создает все каталоги в пути, если они отсутствуют.

3
alex

Отображает красивую графику ascii текущего дерева процессов с выделением наиболее интенсивного процесса.

while true; do 
  clear; 
  pstree $( ps -eo pid --sort %cpu | tail -n 1 ); 
  sleep 1;
done

Убей его с помощью Ctrl + C

3
Stefan

Смотрите вывод команды обновляется каждые n секунд

watch -n 60 df -h (displays df -h every 60 seconds)

Показать статистику о сетевом устройстве wlan0

ip -s link ls wlan0

Показать таблицу маршрутизации для устройства eth1

ip route ls dev eth1

Показать статистику для всех пакетов маршрутизаторов, через которые проходит узел

mtr --interval 5 HOSTNAME

Обратитесь к обратным DNS-записям для имен хостов в сети

nmap -sL NETWORK

Оцените веб-сайт

ab

Получить все ссылки с веб-страницы

lynx -dump http://www.yahoo.com | awk '/http/{print $2}'

Показать шлюз по умолчанию

netstat -rn | awk '/UG/{print $2}'

Записать стандартную ошибку в файл

foo 2> errors.txt

Перенаправить stderr на стандартный вывод

foo 2>&1

Перенаправьте как stderr, так и stdout в один и тот же файл.

foo > file.txt 2>&1
2
boardstretcher
# change chmod to file dowloaded --> $_

wget -c http://link/to/file -O /path/to/save/namefile && chmod 0755 $_

# extract tar.bz2 or tar.gz whit less work
# this avoids having to unpack and then move the files to another location, in this case have # already extracted in the desired location

tar jxvf file.tar.bz2 -C /pat/to/extract

# calculator with bc - in bashrc
calc(){ echo "scale=2;[email protected]" | bc;}

# set magic-space in bashrc
bind Space:magic-space                 # !pin<space>  expand last cmd pin...

# alias to open last edited file in vim
alias lvim="vim -c \"normal '0\""

# alias to show your path set
alias path='echo -e ${PATH//:/\\n}'
2
SergioAraujo

Заменить части предыдущей команды:

^поиск^replace

$ echo a b c d
a b c d
$ ^b c^X
echo a X d
a X d

Отлично подходит для опечаток:

$ mkae
-bash: mkae: command not found
$ ^ka^ak
make
[...]
2
user6362

Суммируйте размер каталога, с уменьшением человеческого размера

du -hs */ | sort -hr

например.

10.2G   foo/
4M      bar/
2
Eric Fortis

раскрытие двойной звезды с помощью zsh (который рекурсивно спускается в дерево каталогов, а не только на один уровень, что-то похожее на $(find ! -type d):

grep string **/*.cc
2
Andre Holzner

моя любимая особенность - нет цвета! знак равно

TERM = xterm-mono или TERM = linux-m зависит от ОС ...

Мне очень нравится черно-белый IRSSI, mc и любой другой инструмент "Текстовый пользовательский интерфейс"

2
holms

ZSH имеет глобальные псевдонимы. Это расширяет псевдоним в любом месте командной строки. Я нашел это полезным для имен хостов:

Например.:

alias -g sub='sub.domain.tld'

Тогда я могу сделать, например:

sftp sub
ssh sub

и т.п.

2
Matthew Flaschen

Не совсем один, но я думаю, что это полезно. Преобразуйте много файлов в верхний регистр, например file_to_upper *php *c. Есть много подобных случаев, таких как преобразование в нижний, переименование всех файлов по суффиксу/префиксу и т.д.

file_to_upper ()
{
    for file in "[email protected]"
    do
        if [ ! -f "$file" ]; then
            echo "File $file does not exist";
        else
            mv -f "$file" "`echo "$file" | tr '[a-z]' '[A-Z]'`"
        fi
    done

    return 0
}
1
sakisk

получить имя файла с самой последней отметкой времени в текущем каталоге:

latest () { ls -lrt | tail -1 | awk '{print $NF}' }

1
Moses Xu
function calc() { echo $* p | dc }

dc - калькулятор RPN; эта функция позволяет мне вводить выражение в качестве аргументов команды:

$ calc 5 3 +
8
1
André Paramés

Покажите подсказку, где имя хоста полужирный. Некоторое время я пробовал цветовые подсказки, но в зависимости от фона цвет иногда выглядел бы плохо. Bold работает для меня на светлом фоне, темном фоне, синем фоне и т.д.

Это в моем .bashrc:

    bold=$(tput bold)
    reset=$(tput sgr0)
    export PS1="\[email protected]\[$bold\]\h\[$reset\]:\w \$ "
1
Stefan Lasiewski

Я нашел следующие полезные при постоянном переключении между Windows и Unix/Linux:

alias dir="ls -l"
alias copy="cp"
alias del="rm"
1
artdanil

Это для zsh, а не bash, fyi (если вы его не использовали, вы не пожалеете, что попробовали). Это действительно полезно для быстрого ввода длинных путей для передачи scp. Он работает так же, как использовать для завершения или список доступных имен файлов/каталогов.

Пример

scp [email protected]:/home/webdev/domains/example.com/http.public/long<tab>

завершит путь к /home/webdev/domains/example.com/http.public/longdirname.

Я плохо разбираюсь в примерах, но это должно дать вам идею. Попробуйте, это действительно может сэкономить ваши пальцы от набора текста.

# SSH Completion
zstyle ':completion:*:scp:*' tag-order \
   files users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:scp:*' group-order \
   files all-files users hosts-domain hosts-Host hosts-ipaddr
zstyle ':completion:*:ssh:*' tag-order \
   users 'hosts:-Host hosts:-domain:domain hosts:-ipaddr"IP\ Address *'
zstyle ':completion:*:ssh:*' group-order \
   hosts-domain hosts-Host users hosts-ipaddr
zstyle '*' single-ignored show
1
pho3nixf1re

ReTTY , что позволяет перемещать запущенную программу с одного терминала на другой. Таким образом, если у вас есть программа ncurses, работающая вне экрана, tmux или ssh, вы можете присоединить ее к сеансу ssh, сетевому экрану или сеансу tmux, запустив ReTTY внутри терминала, где вы хотите использовать данную программу. Другими словами, он похож на screen и tmux, но за исключением того, что (a) он может запускать только одну программу за раз, и (b) его можно запустить после вы запускаете дочерний процесс.

1
mmirate

Мой любимый способ - использовать команду python) для создания временного http-сервера:

python -m SimpleHTTPServer

и доступ к файлам с этого компьютера по локальной сети как:

http://192.168.1.70:80

Другой способ - загрузить tar-файл в распакованном виде:

wget -qO - http://192.168.1.70:8000/test.bz2 | tar xjvf -

Здесь ссылка может быть любой через www, а bz2 может быть gz, tgz или bz2.

1
SHW

Резервное копирование ваших модных точечных файлов автоматически

Модульный .bashrc -> .bashrc.d

mkdir -p ~/.bashrc.d
cat<<'EOF' >> ~/.bashrc
echo ""
echo -n ".bashrc.d warming up: "
for script in ~/.bashrc.d/* ; do
  if [ -x "$script" ] ; then
    echo -n "${script##*/} "
    . "$script"
  fi
done
echo ""
echo ""
echo "  All systems are go."
echo ""
EOF

Более безопасный rm, совместимый с Linux и Mac OS X

rm() {
  local src
  local final_status=0

  for src in "[email protected]"; do
    # Process only non command-line arguments.
    if [[ "$src" != -* ]]; then
      local trash="$HOME/.Trash"
      if [ ! -e "$src" ]; then
        echo "Safer rm: $src: No such file or directory."
        final_status=1
      fi
      # Create the trash directory if needed.
      if [ ! -d "$trash" ]; then
        # Assume Mac trash, but it'll work on *nix too.
        mkdir -p "$trash"
        if [ ! -d "$trash" ]; then
          echo "Safer rm: Unable to create trash directory $trash"
          echo ""
          echo "   Nothing moved or deleted.  Consider carefully:"
          echo ""
          echo "      /bin/rm -rf $src"
          return 1
        fi
      fi
      local dest="$trash/${src##*/}"

      # Find a filename combination which does not already exist.
      if [ -e "$dest" ]; then
        # Try appending ISO datetime.
        dest="$dest.$(date +%Y-%m-%dT%H-%M-%S)"
        if [ -e "$dest" ]; then
          local n=1
          # Try increasing monotony.
          while [ -e "$dest.$n" ]; do
            n = $[n + 1]
          done
          dest="$dest.$n"
        fi
      fi
      echo -n "Safer rm: Trashing $src to $dest ..."
      /bin/mv "$src" "$dest"
      echo " done."
      echo ""
      echo "  To restore:  /bin/mv     '$dest' '$src'"
      echo ""
      echo "  To purge:  /bin/rm -rf '$dest'"
      echo ""
      echo ""
    fi
  done
  return $final_status
}

Супер горячий "cd" up action

# Don't ask why I need 15 levels of cd ..

alias ..='cd ..'
alias .2='cd ../..'
alias ...='.2'
alias .3='cd ../../..'
alias .4='cd ../../../..'
alias .5='cd ../../../../..'
alias .6='cd ../../../../../..'
alias .7='cd ../../../../../../..'
alias .8='cd ../../../../../../../..'
alias .9='cd ../../../../../../../../..'
alias .10='cd ../../../../../../../../../..'
alias .11='cd ../../../../../../../../../../..'
alias .12='cd ../../../../../../../../../../../..'
alias .13='cd ../../../../../../../../../../../../..'
alias .14='cd ../../../../../../../../../../../../../..'
alias .15='cd ../../../../../../../../../../../../../../..'

Readline - твой единственный настоящий бог.

bind -p | egrep -v '(not|self)' # No existential jokes included.

Терминальные шрифты

Посмотрев на миллиарды шрифтов, я использую 14 pt Monaco, Anti-aliased с iTerm2.

На Mac (приложения): попробуйте это приложение, которое дает привязки клавиш.

KeyCue (tm) (r) (c) ($) дает контекст почти ЛЮБОГО запущенного приложения, просто удерживая command,.

1
dhchdhd

функция автоматической отправки в Zsh:

setopt autopushd

и вместе с этим:

alias dirs='dirs -v'

Так что в любой момент я могу набрать dirs и ​​получить историю того, где я был:

0   /var/log
1   /tmp
2   /usr/local/bin
3   ~

и тогда я могу cd вернуться, например, в. /usr/local/bin набрав:

cd ~2
1
Andre Holzner

Ни один из следующих "трюков" не является технически сложным или впечатляющим, но они оказывают некоторое влияние на другого человека. Если мы не можем использовать свою работу, чтобы сделать нашу жизнь счастливее, нам следует подумать еще раз о некоторых вещах.

Мне нравится alias. Мой любимый трюк - отредактировать ~/.bash_aliases на компьютере моей девушки, когда она отсутствует, и добавить строку вроде:

alias gfname='echo Myname is thinking of you'

или другая романтическая цитата.

Еще один "трюк", который мне особенно нравится:

#!/bin/bash
xaa=123`
for ((a=1; a <= xaa; a++))
do
#sleep 1;
mail -s "Happy Birthday $a" [email protected] < mails.txt
done
exit 0`

где 123 - это человек, которому я хотел бы поздравить с днем ​​рождения, а mails.txt содержит сообщение, которое я хотел бы написать как тело письма. Сон 1; иногда необходимо, так как есть ограничение на fork (). Вы также можете использовать аргументы командной строки $1 так далее...

1
Dimitris Leventeas

В моей домашней папке есть папки с именами "Документ", "Загрузки", "Temp" и т.д., Причем первая буква заглавна. Когда я работаю на терминале, раздражает сдвиг, нажимайте первую клавишу, когда вы переходите в каталог. Просто введите следующее в свой терминал, и bash автоматически исправит ситуацию для вас.

shopt -s nocaseglob
1
tsudot

Используйте pgrep foo вместо ps aux | grep foo если вы хотите узнать, сколько экземпляров foo запущено и их pids:

например вместо ps aux | grep firefox, используйте pgrep firefox

1
user1888

Я не могу жить без

set editing-mode vi
set blink-matching-paren on

в моем ~/.inputrc.

Активирует их в каждом приложении с поддержкой readline. Только активация редактирования командной строки vi в командной консоли работает через:

set -o vi

Таким образом, нажав ESC или CTRL + [ вы получите хорошо известный режим vi-command. И вы можете использовать мощные команды vi везде!

1
maxschlepzig

Для этого есть отличный сайт: http://www.commandlinefu.com/commands/browse

1
Andrew Stern

Мой личный фаворит

find . -name <i>filename</i> | xargs grep -in '<i>pattern to search for</i>'

Команда, приведенная выше, находит файл с именем x, а затем ищет в указанном файле любой шаблон, который вы ищете. Невероятно полезно, если вы ищете определенный фрагмент кода в файле, который находится где-то в ваших подкаталогах.

0
Mark D
find path expr -exec ls -ld {} \;

Хороший простой способ увидеть владельца, разрешения, размеры (если файлы) и другие характеристики того, что возвращает ваше выражение 'find'.

0
TCKMusing

Я часто замечаю, сразу после запуска 15-минутной команды, что я хотел бы добавить некоторые другие вещи в командную строку, используя &&. Вместо того, чтобы прерывать уже запущенную работу, я стараюсь использовать at, чтобы поставить в очередь вторую, что дает мне больше времени, и мне не нужно наблюдать за терминалом.

Как правило, at ставит в очередь задания для выполнения в определенный момент времени:

$ at 14:30
> myscript
> anotherscript
> <CTRL-D>

Записи в очереди можно просмотреть с помощью atq и ​​удалить с помощью atrm.

Еще одно дополнение к советам по настройке bash Prompt: Мне нравится инвертировать Prompt, поскольку это дает хорошие визуальные подсказки, где вывод команды начинается и заканчивается в длинных списках терминалов. Это хорошо работает как для яркого, так и для темного фона.

export PS1="\[\e[7m\][\[email protected]\h \w]\[\e[0m\]$ "
0
jstarek

синхронизации; синхронизация; синхронизация; перезагрузка

иногда может быть действительно полезным. Быть осторожен !

0
Tony Lambert

Я считаю, что понимание нажатий клавиш bash ведет к более эффективному обстрелу, и что многие из них прямо из Emacs разъясняют их использование (т. Е. meta-XXX это версия старшего брата ctrl-XXX обычно команда).

Ключ "meta" обычно является ключом "alt", но также может быть ключом "esc". например meta-f можно получить с помощью alt-f или esc f.

Чтобы сработали сопоставления альтернативных клавиш, вам, возможно, придется отключить "ключи доступа к меню" или их эквивалент в опциях консоли. В основном, если вы нажмете alt-f и откроете меню файла, отключите меню доступа к клавише alt.

ctrl-a / ctrl-e : move to start / end of line основы, без которых не обойтись

ctrl-f, meta-f : forward char/Word нажатие alt-f переместит вас вперед на "1 слово", которое в командной строке в значительной степени является командой или аргументом

ctrl-b, meta-b : backwards char/Word то же самое, что и alt-f, но назад для перехода назад через командную строку

ctrl-d, meta-d : delete char/Word нажатие alt-d удалит (до конца) текущее слово под курсором. намного быстрее, чем удерживать клавишу Delete в течение 30 секунд. Полезно, когда вы завершаете вкладку в середине чего-либо и хотите переслать удаление до конца Word.

ctrl-k : kill line удаляет до конца строки

ctrl-u : undo например набирая пароль, и вы знаете, что где-то ошиблись, вместо того, чтобы нажимать клавишу Backspace 20 раз, просто нажмите Ctrl-U. также очищает текущую командную строку.

meta-# : insert comment это отлично подходит для сохранения командной строки, которую вы создаете, в качестве комментария перед ее запуском, если вам нужно сначала сделать что-то еще. это войдет в историю вашей команды, но не запустится.

ctrl-r : reverse search поиск в обратном направлении по вашей истории Shell (повторный ctrl-r для следующего совпадения)

ctrl-g : abort если вы находитесь в середине ctrl-r и ​​хотите просто вернуться туда, где вы печатали, просто прервите поиск с помощью ctrl-g

meta-space / ctrl-x ctrl-x : set mark and jump to mark если вам нужно быстро перейти к позиции в командной строке, сначала установите метку, а затем вернитесь к ней с помощью ctrl-x ctrl-x. Обратите внимание, что вам, возможно, придется использовать esc-space, чтобы получить метку, установленную как alt-space часто связан с отключением консольного меню.

ctrl-] <char> : quick jump to <char> переходит вперед к символу, напечатанному после ctrl-] в командной строке. Большой брат Meta-ctrl-] <char> прыгает назад.

0
markf

Мои любимчики ниже. Я использую большинство из них регулярно

df -k (проверить файловые системы) kill или kill -9 (убить процесс) set -o vi (установить в командной строке значение vi) topas (инструмент производительности) mount/unmount

о да, и как я мог забыть> (перенаправить вывод в файл) ls> /tmp/tmp.txt

Много еще, но некоторые с моей головы.

0
vegasbrianc