it-swarm-ko.tech

가장 좋아하는 명령 줄 기능이나 요령은 무엇입니까?

유닉스/리눅스에 대한 명령 줄 기능과 요령을 공유하십시오. 가능하면 쉘/디스트로를 불가지론 적으로 유지하십시오. 별칭, 원 라이너, 키보드 단축키, 작은 쉘 스크립트 등을 보는 데 관심이 있습니다.

93
cmcginty

이것은 this answer 에 언급 된 !! 트릭에서 다소 확장됩니다. 실제로 잊혀지는 경향이있는 많은 역사 관련 명령들이 있습니다 (사람들은 찌르는 경향이 있습니다) Up 대신 100 번 입력 한 명령을 찾습니다).

  • history 명령은 왼쪽에 이벤트 지정자가있는 최근 실행 명령 목록을 표시합니다.
  • !N는 이벤트 지정자 N와 관련된 명령을 대체합니다.
  • !-NN를 대체합니다.  가장 최근의 명령; 예 : !-1는 가장 최근의 명령을 대체하고 !-2는 두 번째로 가장 최근의 명령을 대체합니다.
  • 다른 답변에서 언급했듯이 !!!-1의 약어로 마지막 명령을 빠르게 대체합니다.
  • !stringstring로 시작하는 가장 최근의 명령을 대체합니다.
  • !?string?string를 포함하는 가장 최근의 명령을 대체합니다

단어 지정자를 ! 기록 명령에 추가하여 결과를 수정할 수 있습니다. 콜론은 이벤트와 Word 지정자를 분리합니다 (예 : !!:0. Word 지정자를 사용할 때 이벤트 지정자 !!!로 간단히 표시 될 수 있으므로 !!:0!:0와 같습니다.

  • !:0는 실행 된 명령을받습니다.
  • !:1는 첫 번째 인수를 얻습니다 (그리고 두 번째 등 !:2).
  • !:2-3는 두 번째와 세 번째 인수를받습니다.
  • !:^는 첫 번째 인수를 얻는 또 다른 방법입니다. !:$는 마지막을 얻을 것이다
  • !:*는 모든 인수를 얻습니다 (그러나 not 명령)

수정자는 ! history 명령에 추가 될 수 있으며 각 명령 앞에 콜론이 붙습니다. 어떤 숫자 든 쌓을 수 있습니다 (예 : !: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 .

Peteris Krumins의 블로그에서이 4 가지 기사를 볼 수도 있습니다.

49
Moeb

마지막 명령을 루트로 실행하십시오.

Sudo !!
46
Alex B

이것이 "트릭"으로 계산되는지 확실하지 않지만 사람들은 표준 readline 단축 키를 잘 모르는 것 같습니다. 쉘에서 특히 사용 :

  • Ctrl+U -현재 라인을 잘라
  • Ctrl+Y -라인 컷 붙여 넣기 Ctrl+U
  • Ctrl+L -화면을 지우고 현재 줄을 다시 그립니다
  • Ctrl+G -새 줄을 가져 와서 현재 줄을 버립니다.
42
Michael Mrozek

CTRL+R BASH에서 이전에 실행 된 명령 (~/.bash_history의 내용)을 검색/활성화합니다.

이것은 종종 매우 도움이됩니다. 이 별명을 실행하면 포트 8000에서 HTTP (인덱싱 된)를 통해 PWD를 제공합니다.

alias webserver="python -m SimpleHTTPServer"

그리고 나는 항상 make를 실행하고 spaz out하고 너무 빨리 입력하기 때문에이 별칭은 아마도 가장 많이 사용됩니다.

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

그리고 아마도 가장 자주 사용되는 BASH는 업로드라고 부르는 간단한 스크립트입니다. 나는 그것을 사용하여 Linode에 모든 종류의 컨텐츠를 블리 팅하고 결과 HTTP URL을 클립 보드에 복사합니다 (중간 클릭). 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 goodness, 의견을 확인하십시오 :

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

키 입력을 저장하는 별명 : mkdircd :

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 함수.

CD가 성공한 후 자동으로 ls를 수행하십시오.

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

검색을 원하기 전에 일반적으로 명령 줄의 중간에 있기 때문에 (bash의 CTRL-R) 내 .bashrc에 다음이 있습니다.

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

이것은 내가 cd를 입력 한 다음 위/아래로 누르면 내가했던 모든 옵션을 볼 수 있음을 의미합니다. 기본적으로 나는 이것을 자주 사용되는 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

screencommand . 기본적으로 당신이 돌아올 때 명령 행 세션을 저장합니다. 창 관리자와 같은 일종의 터미널 관리자입니다. 이렇게하면 단일 터미널 세션에서 여러 개의 가상 터미널을 진행할 수 있습니다. 정말 멋있어.

만약 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

인수를 제공하면 해당 열을 합산합니다 (예 :/tmp의 모든 C # 파일에 사용 된 총 바이트 수).

ls -l /tmp/*cs | total 5

이진 파일 (예 : cat/bin/ls)을 실수로 보았 기 때문에 콘솔이 엉망이되는 경우 다음 셸 기능으로 터미널을 복원 할 수 있습니다.

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

!momo (최소한 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-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 루프와 함께 브레이스 확장 :

    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
    ~$
    
  • 종류 what-is 명령 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 () 
    { 
         :
    
    }
    
  • 또한 아주 좋은 : here-strings

    ~$ 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를 포함하는 마지막 줄은 약간 anoying

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

update : 또는 그냥 pgrep string를 실행하십시오

4
Stefan

Bash 설정은 때때로 rmrm -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 명령입니다. 명령 끝에 &를 입력하지 않은 경우 ^Zbg를 입력하면 백그라운드에서 실행됩니다.

3
Lucas Jones

프롬프트에서 Git 브랜치 및 상태 표시

 내보내기 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는 모든 dirs가 누락 된 경로에 작성합니다.

3
alex

가장 CPU 집약적 인 프로세스가 강조 표시된 현재 프로세스 트리의 멋진 아스키 아트를 표시합니다.

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

NETWORK에서 호스트 이름에 대한 역방향 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를 stdout으로 리디렉션

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

이전 명령의 일부를 교체하십시오.

^검색^바꾸다

$ 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

내가 가장 좋아하는 기능은 NO COLORS입니다! =)

TERM = xterm-mono 또는 TERM = linux-m은 OS에 따라 다릅니다 ...

저는 흑백 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

이것은 bash, fyi가 아닌 zsh를위한 것입니다. 이것은 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 , 실행중인 프로그램을 한 터미널에서 다른 터미널로 이동할 수 있습니다. 이렇게하면 화면, tmux 또는 ssh 외부에서 실행중인 ncurses 프로그램이있는 경우 해당 프로그램을 사용하려는 터미널에서 ReTTY를 실행하여 ssh 세션 또는 네트워크 화면 또는 tmux 세션에 연결할 수 있습니다. 즉, screen 및 tmux와 비슷하지만 (a) 한 번에 하나의 프로그램 만 실행할 수 있고 (b) 실행할 수 있다는 점을 제외하고는 after 자식 프로세스.

1
mmirate

가장 좋아하는 것은 python 명령을 사용하여 임시 http 서버를 만드는 것입니다.

python -m SimpleHTTPServer

lAN으로이 컴퓨터에서 다음과 같은 파일에 액세스합니다.

http://192.168.1.70:80

또 다른 방법은 tar 파일을 다음과 같이 추출 된 형식으로 다운로드하는 것입니다.

wget -qO- http://192.168.1.70:8000/test.bz2 | 타르 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'업 액션

# 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.

터미널 글꼴

Bazillions의 글꼴을 살펴본 후 14 pt Monaco, Anti-aliasediTerm2.

Mac (앱) : 키 바인딩을 제공하는이 앱을 사용해보십시오.

키큐 (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를 좋아합니다. 내가 가장 좋아하는 트릭은 누락 된 gf 컴퓨터에서 ~/.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

첫 번째 문자가 대문자 인 홈 폴더에 Document, Downloads, Temp 등의 폴더 이름이 있습니다. 터미널에서 작업 할 때 디렉토리로 cd 할 때 첫 번째 키를 누르는 것은 성가신 일입니다. 터미널에 다음을 입력하면 bash가 자동으로 사례를 수정합니다.

shopt -s nocaseglob
1
tsudot

사용하다 pgrep foo 대신에 ps aux | grep foo 실행중인 foo 인스턴스 수와 해당 pid를 찾으려면 다음을 수행하십시오.

예 : 대신에 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 명령 모드가됩니다. 그리고 모든 곳에서 강력한 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 {} \;

소유권, 권한, 크기 (파일 인 경우) 및 '찾기'식이 반환하는 기타 특성을 쉽게 확인할 수있는 좋은 방법입니다.

0
TCKMusing

15 분 명령을 시작한 직후 &&를 사용하여 명령 줄에 다른 항목을 추가하고 싶었을 때가 종종 있습니다. 이미 실행중인 작업을 중단하는 대신 at를 사용하여 두 번째 작업을 대기열에 넣는 경향이 있으므로 터미널을 볼 필요가없는 시간이 더 길어집니다.

일반적으로 at는 주어진 시간에 실행할 작업을 대기열에 넣습니다.

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

대기열에 대한 항목은 atq로보고 atrm로 제거 할 수 있습니다.

Bash 프롬프트 사용자 정의 팁에 대한 또 다른 추가 사항 : 프롬프트 출력을 전환하는 것이 좋습니다. 명령 출력이 긴 터미널 목록에서 시작하고 끝나는 곳을 시각적으로 알 수 있습니다. 밝은 배경과 어두운 배경 모두에 적합합니다.

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

동기화; 동기화; 동기화; 재부팅

때로는 정말 유용 할 수 있습니다. 조심해 !

0
Tony Lambert

나는 bash 키 스트로크를 이해하면보다 효율적인 쉘링을 얻을 수 있으며, 많은 것들이 emacs에서 곧바로 사용법을 분명히합니다 (즉, meta-XXXctrl-XXX 명령의 가장 큰 버전입니다).

"메타"키는 일반적으로 "alt"키이지만 "esc"키일 수도 있습니다. 예 : meta-falt-f 또는 esc f로 얻을 수 있습니다.

Alt 키 매핑이 작동하려면 콘솔 옵션에서 "메뉴 액세스 키"또는 이와 동등한 키를 설정 해제해야 할 수 있습니다. 기본적으로 alt-f를 누르고 파일 메뉴 프롬프트가 표시되면 alt 키 액세스 메뉴를 끕니다.

ctrl-a / ctrl-e : move to start / end of line 없이는 할 수없는 기본 사항

ctrl-f, meta-f : forward char/Word alt-f를 누르면 명령 행에서 거의 명령 또는 인수 인 "1 Word"로 이동합니다.

ctrl-b, meta-b : backwards char/Word alt-f와 동일하지만 명령 행을 통해 뒤로 점프하려면 뒤로 이동

ctrl-d, meta-d : delete char/Word alt-d를 누르면 커서 아래의 현재 단어가 삭제됩니다. 30 초 동안 삭제를 누른 상태에서 훨씬 더 빠릅니다. 중간에 탭 완성을하고 Word의 끝으로 삭제를 전달하려는 경우에 유용합니다.

ctrl-k : kill line 줄 끝까지 삭제

ctrl-u : undo 예 : 암호를 입력하면 백 스페이스를 20 번 누르는 대신 어딘가에 잘못되었다는 것을 알고 ctrl-u를 누르십시오. 또한 현재 명령 행을 지 웁니다.

meta-# : insert comment 이것은 다른 것을 먼저해야하는 경우 명령 행을 실행하기 전에 주석으로 작성하는 데 좋습니다. 명령 기록으로 이동하지만 실행되지는 않습니다.

ctrl-r : reverse search 쉘 기록을 거꾸로 검색 (다음 일치를 위해 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 (성능 도구) 마운트/마운트 해제

오 예 그리고 어떻게> (출력을 파일로 리디렉션하기 위해) ls> /tmp/tmp.txt를 잊어 버릴 수 있습니까?

더 많은 것이 있지만 일부는 내 머리 꼭대기에 있습니다.

0
vegasbrianc