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


94

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

답변:


89

이것은 이 답변!! 에서 언급 된 트릭을 다소 확장 합니다. 실제로 잊혀지는 경향이있는 여러 가지 히스토리 관련 명령이 있습니다 (사람은 입력 한 명령을 찾는 대신 100 번 찌르는 경향이 있습니다 ).Up

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

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

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

!각 명령 앞에 콜론이 붙은 히스토리 명령에 수정자를 추가 할 수도 있습니다 . 임의의 숫자가 쌓일 수 있습니다 (예 :) !:t:r:p.

  • h -기본 파일 이름으로 정렬
  • t -기본 파일 이름 만
  • r -파일 이름 확장자에 맞춰
  • e -파일 이름 확장자 만
  • s/search/replacement- 처음 나타나는 교체 search와를replacement
  • gs/search/replacement- 모든 항목 바꾸기 searchreplacement

3
Bash를 사용하는 경우 (다른 쉘과 동일 할 수 있음) M- ^ (Meta- ^)는 실제로 참조하는 것을보고 싶을 경우를 위해 위의 기록 확장 연산자를 확장합니다. 에.
Eric Smith

1
나는에 대한 사용을 찾지 못했습니다! 명령 사물. 내가 보지 못한 명령을 실행하는 것은 나에게 나쁜 것 같습니다. ! -4 대신! -3을 입력하는 것이 매우 쉬울 것이며 누가 어떤 일이 일어날 지 알고 있습니다. 실행하려는 명령의 줄 번호를 찾는 것이 일반적으로 가치가 있습니다. 멋진 요령이지만, 실제 사용 방법을 찾지 못했습니다.
Falmarri

1
@ 팔 마리 나도 사용하지 않습니다 !-#. !string문자열로 시작하는 마지막 명령을 실행하는 데 사용 하지만 일반적으로 올바른 탭을 먼저 실행하여 (zsh) 완료합니다.
Michael Mrozek

1
아니! :) "실행 !N하면 명령이 실행 됩니다 ..."는 너무 좁은 설명입니다. 실제로 !N는 다음 명령으로 대체됩니다 ...; 답변의 모든 설명에 대해서도 마찬가지입니다. 더 정확하고 훨씬 더 유용한 가능성을 열어보세요! 예를 들어 sudo !!.
imz-Ivan Zakharyaschev 1

1
문자열로 조회 된 이전 명령을 실행하려면 보통 Ctrl-R을 누르면됩니다. 여러 개의 Ctrl-R이 이력을 더 깊이 파고 들게됩니다. 이렇게하면 found 명령을 즉시 볼 수 있으며 삭제하고 더 자세히 볼 수 있습니다. 이 모드에서 Ctrl-G가 빠져 나옵니다. 유일한 불편은 Ctrl-R이 bash; Emacs에서 입력 명령 및 값 기록을 탐색하려면 (Mx 또는 기타 읽기 값의 경우) 대신 Meta-R을 사용하십시오 (Meta-R은 eshellEmacs 에서도 사용됨 ). 그래서 나는 종종 그들을 엉망으로 만듭니다.
imz-Ivan Zakharyaschev 1

65

bash-선행 줄의 최종 매개 변수 삽입

alt- . 가장 유용한 키 조합, 시도해보십시오. 어떤 이유로 든 아무도 이것에 대해 알지 못합니다.

이전의 마지막 매개 변수를 선택하려면이 키를 반복해서 누릅니다.

방금 전에 사용한 인수 / 파일에 대해 더 많은 작업을 수행 할 때 유용합니다.


11
! $를 사용하여 이전 명령의 마지막 인수를 참조 할 수도 있습니다. 이것은 대화식으로뿐만 아니라 스크립트에서도 작동하기 때문에 유용합니다. (bash & zsh에서 작동)

4
당신이 공격 할 때마다 alt- .그것은 이전 명령에 가서에서 마지막 인수를 가져옵니다. 따라서 세 명령의 마지막 인수를 원하면 alt- .세 번 누르십시오 .
clee

2
이것은 yank-last-argreadline 명령 의 기본 키 바인딩 이므로 BASH 또는 ZSH뿐만 아니라 readline에 연결된 모든 프로그램에서 작동해야합니다.
James Sneeringer

vi 모드에서는이 답변에 따라 yank-last-arg를 리 바인드해야했습니다. superuser.com/questions/18498/…
Jeromy Anglim

xterm에서 meta-. ®를 생성하지만 메타 대신 일반적으로 bash에서 esc를 사용할 수 있으므로 esc-. 대신에.
derobert

49

내가 가장 좋아하는 것은

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 가지 기사를 볼 수도 있습니다.


2
별도의 ascii 프로그램 도 유용합니다. 테이블을 인쇄하는 것 외에도 하나 이상의 개별 문자를 쿼리 할 수 ​​있습니다.
Matthew Flaschen


42

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

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

5
Ctrl + A를 사용하여 줄의 시작 부분으로 이동하고 Ctrl + E를 사용하여 줄 끝으로 이동하고 Ctrl-K를 누르면 커서에서 줄 끝까지 지울 수 있습니다.
rsuarez

Ctrl+LFormFeed ASCII 문자에 해당합니다. 일반적으로 화면 창 (예 : vim, less, mc 등)이있는 텍스트 응용 프로그램에서 화면을 다시 그립니다. 화면이 다른 프로그램의 일부 출력에 의해 "오염"된 경우에 좋습니다.
hlovdal

단축키 목록에 추가 : Ctrl+W한 단어를 뒤로 자르고, 한 단어 Alt+F앞으로 이동하고, Alt+B한 단어를 한 줄 뒤로 이동합니다. 내가 좋아 Ctrl+Y하고 Shift+Insert당신이 개 복사 라인을 가질 수 있기 때문이다. 로 Ctrl+U붙여 넣기 ( Ctrl+Y)하고 다른 단어로 붙여 넣기 ( Shift+Insert)를 사용하여 다른 단어를 복사 (줄 선택) 할 수 있습니다 .

36

CTRLRBASH에서 + 이전에 실행 된 명령 (~ / .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 $* $user@$host:public_html && {
    URL="http://$host/~$user/$(basename $1)"
    echo "$URL"
    xselection -replace PRIMARY "$URL"
}

그냥 몇 나중에 더 게시 할 수 있습니다. 다시 일해야합니다!


8
alias mk=make입력 속도가 빠르고 잘못 될 가능성이 줄어 듭니다. 또는 핫키를 사용하여 편집기에서 컴파일하십시오.
Lars Haugseth

BTW Zsh에는 간단한 오타를 수정하는 데 매우 유용한 맞춤법 교정 기능이 내장되어 있습니다.
Adam Byrtek

또한 zsh에서 기본값은 업 키를 누를 때 ctrl r을 누르는 것처럼 히스토리 검색을 수행한다고 생각합니다. 기본값이 아닐 수도 있지만 설정입니다.
Falmarri

나는 이미 ☺를 사용한다는 점을 제외 하고는 고려 alias m=make하거나 심지어 m=make -j6비슷하거나 유사합니다.alias m=mutt
jmtd

31

diff 임시 파일을 수동으로 만들지 않고 두 명령의 출력 (bash) :

diff <(ls dir1) <(ls dir2)

이것은 comm파일 만 가져 오기 때문에 매우 유용 하지만 많은 경우 inode가 낭비됩니다.
Marcin

30

꽤 기본적이지만 사람들은 알지 못하는 것 같습니다. 이전 디렉토리로 돌아갑니다.

cd -

나는 당신을 말할 cd..DOS 내 근육 기억에 깊이 배어 있습니다에서 ...
LawrenceC

이 ...하지만 PUSHD와 popd 명령의 싼 버전이다
로버트 Massaioli

마찬가지로 cd홈 디렉토리로 이동하는 인수가 없습니다.
Mei

그래, 미쳤어 매뉴얼 페이지의 어디에서 '-'의 확장이 표시됩니까? 나는 항상 pushd / popd를 사용하려고 노력하고 있습니다.
Chuck R

29

버팀대 확장 :

중괄호 확장은 임의의 문자열을 생성 할 수있는 메커니즘입니다.

다음과 같이 지루한 줄을 바꿀 수 있습니다.

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

3
좋아, 나는 이것에 대해 잊었다 믿을 수 없다. foo[123]확장 할 수 있는 더 컴팩트 한 것도 foo1 foo2 foo3있지만이 경우 작동하려면 파일 이름이 필요합니다
Michael Mrozek

hehe .. 감사합니다 ... 매일 무언가를 배우십시오 +1
Stefan

29

이것은 일반적으로 시작 스크립트 (.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

: 키 입력을 저장 별칭 mkdircd그것으로를 :

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

그리고 마지막으로, 나는 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
}

5
+1, 왜 그렇게 생각하지 않았습니까? (추출)
MAK

나는 mkcdid라는 이름 과 비슷한 기능을 가지고 있습니다 md. 그러나 "$ @"를 cd의 인수로 사용하면 둘 이상의 단일 디렉토리로 cd 할 수 없으므로 의미가 없습니다. "$ @"는 mkdir에 대해 작동하지만 mkdir과 ​​cd에 대해 다른 인수를 처리하고 있으므로 오히려 제안합니다.md () { mkdir -p "$1"; cd "$1" }
hlovdal

해당 명령을 어떻게 추가합니까? .bashrc에 그대로 붙여 넣거나 앞에 "별칭"을 추가 하시겠습니까?
Asaf

22

많은 키 입력을 저장하는 두 개의 bash 함수.

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

function cd {
    builtin cd "$@" && 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
}

4
나는 builtin foo함수가 정의되어있는 것을 회피 할 수 있다는 것을 결코 깨닫지 못했다 cd. chdir내 기능 에 사용 하고 있습니다. 핸디
Michael Mrozek

대박. cd 함수에서 -F를 ls에 추가하면 완벽합니다.
frabjous

2
나는 cd를 위해 당신과 똑같이하지만, 몇 가지 더 많은 온전한 검사가 있고 비 대화식 모드에서 ls를하지 마십시오 :cd() { builtin cd -- "$@" && { [ "$PS1" = "" ] || ls -hrt --color; }; }
jmtd

17

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

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

이것은 내가 cd를 입력 한 다음 위 / 아래로 누르면 CD에 있던 모든 옵션을 볼 수 있음을 의미합니다. 기본적으로 나는 이것을 자주 사용되는 dirs에 사용합니다. "cd w"와 같이 나는 많이 사용하는 모든 작업 공간을 거치게됩니다.


이건 정말 대단해! 기본 기능을 손상시키지 않고 화살표 동작을 확장합니다. 감사합니다!
philfr

17

많은 시간을 절약 할 수있는 것은 푸시 / 팝 명령입니다. 이 사람들을 사용하면 디렉토리 스택을 만들고 많이 입력하는 것을 줄일 수 있습니다.

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

2
예! 별명 u = pushd; alias o = popd
통조림 메이트

2
... 그리고 무엇을해야 u하고 o여기에 대한 서?
deizel

@deizel : 구체적이지 않고 입력을 피하는 바로 가기입니다.
Adam Byrtek

2
명령의 두 번째 문자처럼 보입니다. 둘 다 p로 시작하므로 두 문자 모두에 사용할 수 없습니다.
camh

ZSH에서는 setopt autopushd모든 디렉토리 변경 사항이 자동으로 적용됩니다.
Michael Mrozek

14

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

을 사용 screen하면이 쉘 함수 (에 넣음 .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하면 기본 세션이 존재하는지 확인하고 연결됩니다. 그렇지 않으면 생성됩니다.


기술적으로 이것은 "명령"이 아닌 자체 프로그램입니다.
unperson325680

1
화면에서 tmux 또는 dvtm을 권장합니다. 그들은 더 현대적이고 깨끗한 교체입니다.
deltaray

예, "tmux"는 화면보다 훨씬 좋습니다.
ColinM

또한 직관적이지
않고

13

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 

와, 저 책에 들어갑니다.
l0b0

그래, 내 노트에!
jyz

12

빠른 타이피스트라면 편리합니다.

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'

잊지 마세요 : 별칭 gerp = '그렙 --color = tty를'내가 하나 모든 시간 ;-)
로버트 스위셔

1
내가 걱정하는 한, "빠른"은 정확하지 않으면 계산되지 않습니다. GREP_COLORS 및 GREP_OPTIONS 변수를 볼 수도 있습니다.
Andy Lester

2
s/fast/sloppy/
Josh

1
나는 reset당신이 사용 하는 곳을 사용 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.

내가 잊었을 때 가장 좋아하는 것 중 하나 s:

$ s !! # last command with super user priviledges

2
ZSH를 사용하면 bindkey -s '\e[12~' "sudo !!\n"(이 경우) F2를 바인딩하여 해당 명령을 실행할 수 있습니다. 나는 그 바인딩을 가지고 있기 때문에 내가 무언가를 실행하고 "당신은 '스 도우를 잊어 버렸다", 바보를 잊어 버렸다 "오류 메시지를 볼 때, 나는 성가신 F2를 찌를 수있다
Michael Mrozek

불쌍한 F2 키 ....)
Eimantas

나는 이것을 항상 사용합니다. 호스트 파일을 편집하기 전에 sudo를 입력하는 것을 끊임없이 잊습니다. 그런 일이 발생하면 sudo !!를 실행하십시오. +1
Brian Wigginton

10

명령이 stdin 입력을 받으면을 사용하여 파일에서 입력을 읽을 수 있습니다 <filename. 이것은 명령의 어느 곳에 나 나타날 수 있으므로 다음 행은 동일합니다.

cat filename
cat <filename
<filename cat

이것은 grep에 특히 유용합니다. 행의 끝에 표현식을 배치 할 수 있으므로 Up파일 이름을 지나기 위해 왼쪽으로 스크롤 할 필요없이을 누르면 grep 명령을 빠르게 수정할 수 있습니다 .

<filename grep 'expression'

3
좋은 팁! 이것이 실제로 인수를 명령에 재정렬하지는 않는다는 점에 주목할 가치가 있습니다. 대신 grep에 파일 인수가 없으므로 파일을 프로세스의 STDIN으로 파이프합니다. 기본적으로 STDIN에서 읽습니다. 이것을 이해하면 다른 명령과 함께이 기술을 사용할 수있는 많은 기회가 열리고 사람들이 예상대로 작동하지 않을 때 발생하는 상황을 사람들이 이해하도록 도울 수 있습니다. 더 많은 정보를 위해 파이프와 리디렉터를 조회 : dsj.net/compedge/shellbasics1.html
chillitom

@chill 좋은 포인트; 팁은 실제로 본질적으로 틀릴 정도로 나쁘게 표현되었습니다. 나는 당신의 의견에 근거하여 그것을 다시 썼습니다
Michael Mrozek

내가 최근에 발견 한 것 : 입력을 루프 (for, while 등)로 리디렉션 할 수 있습니다. faqs.org/docs/abs/HTML/redircb.html을 참조하십시오 .
Lucas Jones

일반적으로 리디렉션을 마지막에 놓습니다. 파이프 라인 은유가 더 좋아 보이지만 중간 또는 중간 <input foo | bar | baz >output에 일부 셸 루핑 프리미티브에서 혼합을 시도하면 작동하지 않습니다 . 그래서 나는 포기하고 컨벤션에 따라 끝까지 넣었습니다. whilefor
jmtd

@jmtd 글쎄, 끝 부분에 놓으면 "줄 끝에 줄을 배치 할 수 있으므로 grep에 특히 유용합니다. 따라서 스크롤 할 필요없이 Up 키를 눌러 grep 명령을 빠르게 수정할 수 있습니다. 파일 이름을지나 왼쪽으로 "
Michael Mrozek

9

다음 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

3
문제가 발생할 수 있습니다. 참조 softpanorama.org/Scripting/Shellorama/cdpath.shtml은 $ CDPATH가 설정되어있는 경우, "CD가 내장 된 암시 적으로 여기에 현재 디렉토리를 추가하지 않습니다. 이는 유효한 디렉토리 이름이 어떤으로 구성 할 수없는 경우 해당 CD가 실패합니다 의미 cd에 인수로 지정된 이름과 동일한 이름의 디렉토리가 현재 디렉토리에 존재하더라도 $ CDPATH에있는 항목 중 " 나는 이것에 물 렸고 일부 Makefile이 작동을 멈췄습니다. 추가 중입니다. 명시 적으로 도움이 될 수 있지만 그것에도 몇 가지 문제가 있습니다.
ustun

9
vi `which scriptname`

당신이 무언가가 어디에 있는지 알지 못하고 신경 쓰지 않을 때.


8
ZSH 기능을 계속 연결한다는 의미는 아니지만 다른 사람들이 대답하는 것처럼 계속 생각합니다. :) ZSH에서는 = foo를 사용하여 which자동으로 호출 할 수 있습니다.vi =scriptname
Michael Mrozek

백틱 문자를 찾는 데 문제가있는 경우 다음을 사용할 수도 있습니다.$(scriptname)
Patrick

9

앰퍼샌드 . 백그라운드에서 명령을 입력하므로 계속 입력 할 수 있습니다.

$> sudo updatedb &

함께 일하고 잠시 후 다음을 보게됩니다.

[1] 17403

그리고 당신의 과정은 끝났습니다! 종료 될 때까지 기다릴 필요가없는 경우에 좋습니다.


11
그리고 앱이 GUI라면 작업을 유지하고 싶지 않을 것입니다. 추가 &!배경에 작업을 하고 쉘에서 그것을 부인!
unperson325680

@progo :에서 작동하지 않습니다 bash.
Nathan Osman

@성 조지. 당신이 옳은 것 같습니다. 나는 zsh가 그것을 지원한다는 것을 배웠고 나중에 bash도 그것을 지원한다고 들었습니다. 오 마이 :(
unperson325680

1
@progo : 명령 앞에 추가하면 nohup이 작업이 수행됩니다.
Nathan Osman

8

탭 완성 . 모든 경로의 모든 문자를 입력해야한다면 얼마나 나쁜가?


5
자살 리눅스가 있습니다. 명령을 잘못 입력하면 rm -fr /됩니다. 네, 탭 완성은 매우 중요합니다 ...
Eimantas

생각만큼 나쁘지는 않지만 (아직 나쁘다), 어디에나 와일드 카드를 뿌린다 :ls /usr/lib/game-d*/rott*
jmtd

@Eimantas rm -rf /대부분의 Linux 시스템에서 비활성화 되지 않습니까?
Bernhard Heijstek

@phycker- "모두"가 아니라 자살 리눅스에 대해 언급했습니다.
Eimantas

7

마지막으로 마운트 된 장치 마운트 :

mount /media/whatever
...
u!mo

!momo적어도 bash에서 시작한 마지막 명령으로 확장됩니다 . 때로는 mv중간에 있기 때문에 u!m자주 작동하지 않습니다.


안전 예방책으로 명령을 실행하지 않고 확장하려면 Ctrl + Shift + 6 (Ctrl + ^)을 사용하십시오.
ColinM

7

나는 이것을 .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 $@ | 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"$@"\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]
}

이 함수는 파일 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'

6

또 다른 유용한 ZSH 트릭 :

명령 출력을 파일로 취급하십시오.

emacs =(hg cat -r 100 somefile)

구문 강조 표시를 위해 이전 버전의 Mercurial 추적 파일을 emacs로 엽니 다. 그없이, 나는 주변에 엉망 것 hg revert, hg archive또는 명시 적으로 보낼 hg cat임시 파일에 출력합니다.

물론 이것은 파일을 여는 모든 프로그램과 표준 출력으로 인쇄하는 모든 프로그램에서 작동합니다.


5
당신은 <()와 bash는이 작업을 수행 할 수 있습니다
ScaryAardvark

5

zsh을 특정 기능을 제공하여 설정 접미사 별명이다 플래그 :alias-s

alias -s ext=program

주어진 확장자에 접미사 별명이있는 경우 해당 확장자를 가진 파일을 직접 실행할 수 있으며 ZSH는 주어진 프로그램을 시작하고 파일 이름을 인수로 전달합니다. 따라서 위의 별칭이 적용되면 다음 행은 동일합니다.

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

이것은 "프로그램"이 항상 emacs라는 것을 깨달을 때까지 Windows에서 정말로 놓친 것 중 하나입니다. 그래서 파일을 열기 위해 쉘 사용을 중단하고 Cx Cf (duh)를 사용했습니다.
harpo

5

내가 가장 좋아하는 ZSH 기능 중 하나는 디렉토리입니다. 특정 이름을 가진 변수를 특정 경로를 가리키는 값으로 내보낼 수 있습니다.

export foo=/usr/bin

이제 ~foo명령에서 다음을 참조 할 수 있습니다 /usr/bin.

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

프롬프트에 현재 작업 디렉토리가 표시되면 내가 기억하는 한 변수 이름도 사용됩니다.
Andre Holzner

4

질문을 참조하십시오 .

실행할 때 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

마지막 줄 grep은 약간 성가신 것입니다.

다음을 실행하여이를 제거 할 수 있습니다 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

업데이트 : 또는 그냥 실행pgrep string


예, 매우 유용합니다. 하지만 열기 상자 ( '[o]penbox')를 인용해야합니다 . 대괄호는 일종의 glob처럼 작동하므로 디렉토리에 openbox가있는 경우 (예 /usr/bin:) bash는 openbox를 사용하여 grep 트릭을 방지합니다.
Rich Homolka

4
  • 아무것도 실시하지 않는 명령 :에서와 같이

    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
  • 팝 / 푸시 대신 하위 쉘 사용 (스크립트에서 편리함)

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

    ~$ cat <<<"here $PWD"
    here /home/yourname
    ~$
  • 그리고 내가 좋아하는 것 : 명령 목록에서 리디렉션

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

3

나는 PS1에 가능한 한 많은 것을 척킹하는 것을 좋아합니다. 기억해야 할 유용한 사항 :

\e[s\e[u커서 위치를 각각 저장 하고 저장하십시오. 나는 이것을 사용하여 화면 상단에 '정보 표시 줄'을 만들고 몇 줄을 더 길게 만들 수 있습니다. 예:

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\]\$ '

와 결합하십시오 alias clear='echo -e "\e[2J\n"'. 사용해보십시오!

또한 PROMPT_COMMAND변수는 PS1 전에 매번 실행할 명령을 정의합니다.

다른 하나는 bg명령입니다. &명령의 끝 을 잊어 버린 경우를 누르고 ^Z입력 bg하면 백그라운드에서 실행됩니다.


감사 bg합니다. 백그라운드에서 프로그램을 실행하고 실수로 누르면 프로그램 fg을 다시 밀어 넣는 방법을 모르겠습니다. D
phunehehe

나는 깨끗한 것을 PS1좋아해서 내가 원하는 것을 대부분 내 스크린 하단에 넣었다.
Josh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.