programing

Bash를 사용하는 가장 좋아하는 명령줄 트릭은 무엇입니까?

oldcodes 2023. 4. 19. 23:26
반응형

Bash를 사용하는 가장 좋아하는 명령줄 트릭은 무엇입니까?

.<ctrl>-R '역 검색'을 사용할 수 계십니까?<ctrl>-S[ 전송()]를 stty stop ""또, 리스트 되고 있는 키보드숏컷을 모두 표시하기 위해서, bind-p 를 실행해 본 적이 있습니까?Mac OS X는 455입니다.

bash를 사용한 애매한 트릭, 키보드 단축키 또는 shopt 구성은 무엇입니까?

" " " " " " / " :
cp /home/foo/realllylongname.cpp{,-old}

확장하면 다음과 됩니다
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old

cd -

이것은 뒤로 버튼과 동일한 명령줄입니다(이전 디렉토리로 이동).

또 다른 즐겨찾기:

!!

마지막 명령을 반복합니다.다음 형식으로 가장 유용합니다.

sudo !!

내가 가장 좋아하는 것은 마지막 명령을 받아 문자열을 string2로 대체하고 실행하는 '^string^string2'입니다.

$ ehco foo bar baz
bash: ehco: command not found
$ ^ehco^echo
foo bar baz

Bash 명령줄 이력 가이드

이름을 바꾸다

예:

$ ls
this_has_text_to_find_1.txt
this_has_text_to_find_2.txt
this_has_text_to_find_3.txt
this_has_text_to_find_4.txt

$ rename 's/text_to_find/been_renamed/' *.txt
$ ls
this_has_been_renamed_1.txt
this_has_been_renamed_2.txt
this_has_been_renamed_3.txt
this_has_been_renamed_4.txt

매우 편리하다

저저 of of of of 의 팬입니다.!$,!^ ★★★★★★★★★★★★★★★★★」!* 및 all items, "non-command items", "non-command items", "non-command items", "non-command items", "command"를 합니다.To wit(위트)

$ echo foo bar baz
foo bar baz
$ echo bang-dollar: !$ bang-hat: !^ bang-star: !*
echo bang-dollar: baz bang-hat: foo bang-star: foo bar baz
bang-dollar: baz bang-hat: foo bang-star: foo bar baz

를 들면 「 」라고 하는 합니다.ls filea filebvi !$ 둘: 는는:::: :::vimdiff !*. '더'로n 논법, 즉 'th' 논법, 'th' 논법, '' 논증이다.

$ echo foo bar baz
$ echo !:2
echo bar
bar

경로 이름을 수 .:h ★★★★★★★★★★★★★★★★★」:t하다

$ ls /usr/bin/id
/usr/bin/id
$ echo Head: !$:h  Tail: !$:t
echo Head: /usr/bin Tail: id
Head: /usr/bin Tail: id

명령을 실행할 때 이전 인수를 사용하여 명령을 실행할 수 있습니다.그러기 위해서는, 다음의 숏컷을 사용할 수 있습니다.

$ mkdir /tmp/new
$ cd !!:*

파일 목록에서 여러 명령을 실행해야 할 경우 find를 사용하는 대신 한 줄의 루프를 분리할 수 있습니다.

for file in *.wav; do lame "$file" "$(basename "$file" .wav).mp3" ; done;

.bash_login(또는 .bashrc)에서 명령줄 이력 옵션을 설정하면 매우 편리합니다.다음은 Macbook Pro에서 사용하는 설정 목록입니다.

다음을 설정하면 bash가 이력에서 중복된 명령을 지웁니다.

export HISTCONTROL="erasedups:ignoreboth"

나도 내 이력서를 꽤 높이 올려놨어.왜 안 되나요?오늘날의 마이크로프로세서에서는 속도가 느려지지 않는 것 같습니다.

export HISTFILESIZE=500000
export HISTSIZE=100000

또 다른 일은 내 이력에서 몇 가지 명령을 무시하는 것입니다.exit 명령어는 기억할 필요가 없습니다.

export HISTIGNORE="&:[ ]*:exit"

반드시 histappend를 설정해야 합니다.그렇지 않으면 종료 시 bash가 이력을 덮어씁니다.

shopt -s histappend

제가 사용하는 또 다른 옵션은 cmdhist입니다.이렇게 하면 여러 줄의 명령어를 하나의 명령어로 기록에 저장할 수 있습니다.

shopt -s cmdhist

마지막으로 Mac OS X(vi 모드를 사용하지 않는 경우)에서는 <CTRL>-S를 스크롤 중지에서 리셋할 수 있습니다.이로 인해 bash는 이를 순방향 검색으로 해석할 수 없습니다.

stty stop ""

현재 디렉토리에서 서브 디렉토리만 나열하려면 어떻게 해야 합니까?

ls -d */

간단한 속임수지만, 그걸 찾는데 얼마나 많은 시간이 필요한지 넌 모를 거야!

ESC.

마지막 bash 명령어의 마지막 인수를 삽입합니다.생각보다 편리하네요.

cp file /to/some/long/path

CD

'아, 아, 아, 아, 아, 맞다' 이렇게 할 수 있어요diff file1.txt file2.txt" 단, Bash는 프로세스 대체를 지원하므로 다음과 같은 작업을 수행할 수 있습니다.diff명령어 출력.

예를 들어, 스크립트에서 기대하는 출력을 얻을 수 있도록 해야 합니다.에 <( )>에만 하면 됩니다.diff빠르고 더러운 장치 테스트를 받는 방법:

$ cat myscript.sh
#!/bin/sh
echo -e "one\nthree"
$
$ ./myscript.sh 
one
three
$
$ cat expected_output.txt
one
two
three
$
$ diff <(./myscript.sh) expected_output.txt
1a2
> two
$

다른 예로서, 2대의 서버에 같은 RPM 리스트가 인스톨 되어 있는지를 확인합니다.의 각 파일에 RPM을 합니다.diff '나'나 '나'나 '나'나 '나'나 '나'나 '나'나 하면 돼diff ★★★★★★★★★★★★★★★★★★★★★★★★★★★:

$ diff <(ssh server1 'rpm -qa | sort') <(ssh server2 'rpm -qa | sort')
241c240
< kernel-2.6.18-92.1.6.el5
---
> kernel-2.6.18-92.el5
317d315
< libsmi-0.4.5-2.el5
727,728d724
< wireshark-0.99.7-1.el5
< wireshark-gnome-0.99.7-1.el5
$

상세한 것에 대하여는, http://tldp.org/LDP/abs/html/process-sub.html 의 「Advanced Bash-Scripting Guide 」를 참조해 주세요.

가장 좋아하는 명령어는 "ls - thor"입니다.

가장 최근에 수정된 파일을 읽기 쉬운 형식으로 나열하는 신의 힘을 불러옵니다.

좀 더 신기하긴 하지만, 똑똑해...

사용된 명령어 상위 10개:

$ history | awk '{print $2}' | awk 'BEGIN {FS="|"}{print $1}' | sort | uniq -c | sort -nr | head

샘플 출력:

 242 git
  83 rake
  43 cd
  33 ss
  24 ls
  15 rsg
  11 cap
  10 dig
   9 ping
   3 vi

^R 역검색^R을 누르고 일치시킬 이전 명령의 일부를 입력한 다음 원하는 명령어를 찾을 때까지 ^R을 누릅니다.그러면 내 이력에 남아 있는 최근에 사용한 명령어를 기억할 필요가 없습니다.bash뿐만 아니라 ^E는 줄 끝, ^A는 줄 끝, ^U는 커서 앞, ^K는 커서 뒤에 각각 삭제합니다.

나는 종종 vi, ls 등의 에일리어스를 가지고 있지만, 때때로 당신은 에일리어스를 피하고 싶어 한다.앞에 있는 명령어에 백슬래시를 추가합니다.

예:

$ alias vi=vim
$ # To escape the alias for vi:
$ \vi # This doesn't open VIM

멋지죠?

다음은 구성을 몇 가지 수정한 예입니다.

~/.inputrc:

"\C-[[A": history-search-backward
"\C-[[B": history-search-forward

방법은 '이렇게 하다.^R대신 화살표 키를 사용합니다. ( ), (예: ), (예: )를 입력할 수 .cd /media/ 화살표를 내가 으로 할 을 찾아간다.cd는 'd' 안에 요./media/더입니니다다

(저는 Gnome Terminal을 사용하고 있습니다.다른 터미널 에뮬레이터의 이스케이프 코드를 변경해야 할 수 있습니다.)

Bash의 완성도 매우 유용하지만, 훨씬 더 미묘한 추가입니다. »~/.bashrc:

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi

에 의해, 의 탭 완성이 유효하게 를 들면, 커맨드 이 「」로 , 탭 합니다).evinceevince가 열 수 있는 파일만 표시되며 명령줄 옵션 탭 완성도 표시됩니다).

도 잘 요.~/.inputrc:

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

저는 다음을 많이 사용합니다.

:p를 들어 ★★★★★★★★★★★★★★★★★★★★★★★★★.

!!:p

마지막 명령을 인쇄하여 다시 실행하기 전에 해당 명령이 올바른지 확인합니다. " " " 라고 입력해 주세요.!!실행할 수 있습니다.

비슷한 맥락에서:

!?foo?:p

이력을 검색하여 'foo' 문자열이 포함된 최신 명령을 인쇄합니다.

인쇄할 필요가 없다면

!?foo

검색을 수행하고 바로 실행합니다.

내게는 비밀 무기가 있다: 조개껍데기.

대부분의 시간을 한 줄에 담을 수 있는 수천 가지 유용한 팁, 멋진 요령 및 효율적인 레시피가 있습니다.

마음에 드는 것 중 하나(하지만 Python이 현재 대부분의 Unix 시스템에 설치되어 있기 때문에 조금 속였습니다):

alias webshare='python -m SimpleHTTPServer'

이제 "webshare"를 입력할 때마다 포트 8000을 통해 현재 디렉토리를 사용할 수 있습니다.usb 키나 리모트 dir를 사용하지 않고 로컬 네트워크에 있는 친구와 파일을 공유하고 싶을 때 매우 적합합니다.동영상이나 음악 스트리밍도 가능합니다.

물론 전혀 쓸모없지만 여전히 재미있는 전형적인 포크 폭탄도 있다.

$ :(){ :|:& };:

프로덕션 서버에서 시도하지 마십시오.

watch 명령어를 다른 명령어와 조합하여 사용하여 변경을 검색할 수 있습니다.예를 들어 라우터를 테스트하고 있을 때 신호 대 잡음 비 등에 관한 최신 수치를 얻고 싶다고 생각했습니다.

watch --interval=10 lynx -dump http://dslrouter/stats.html
type -a PROG

PROG를 사용할 수 있는 모든 위치를 찾기 위해 일반적으로 /usr/bin/PROG가 아닌 ~/bin의 어딘가에서 예상할 수 있습니다.

에코를 사용하여 명령어를 작성하고 셸에 파이핑하는 것을 좋아합니다.

$ find dir -name \*~ | xargs echo rm
...
$ find dir -name \*~ | xargs echo rm | ksh -s

왜일까요? 제가 하기 전에 어떤 일이 일어날지 볼 수 있기 때문입니다.이렇게 하면 홈 디렉토리 삭제 등의 중대한 오류가 발생했을 경우 홈 디렉토리가 발생하기 전에 잡을 수 있습니다.분명히, 이것은 파괴적이거나 되돌릴 수 없는 행동에 가장 중요하다.

대용량 파일을 다운로드 할 때는, 다음과 같은 조작을 자주 실시합니다.

while ls -la <filename>; do sleep 5; done

ctrl "ctrl+c"의 경우).ls이 아닌이 반환됩니다.watch에 이 은 플랫폼 합니다.watch.

다른 즉 넷캣이다.nc 경우 ★★★★★★★★★★★★★★★★★★=

nc -l -p 9100 > printjob.prn

그런 다음 다른 컴퓨터에 프린터를 설정하고 대신 넷캣을 실행하는 컴퓨터의 IP 주소를 사용할 수 있습니다.되면, 하고 있는 되어 「」, 「」, 「」, 「」에 덤프 .printjob.prn.

pushd ★★★★★★★★★★★★★★★★★」popd

트리 계층 내에서 서로 다른 장소에서 여러 디렉토리를 사용할 때 선호하는 탐색 방법 중 하나는 acf_func.sh(아래 목록)를 사용하는 것입니다.일단 정의되면

cd --

숫자 메뉴와 함께 최근 디렉터리 목록을 봅니다.

cd - 2

두 번째 최신 디렉토리로 이동합니다.

매우 사용하기 쉽고, 매우 편리합니다.

코드는 다음과 같습니다.

# do ". acd_func.sh"
# acd_func 1.0.5, 10-nov-2004
# petar marinov, http:/geocities.com/h2428, this is public domain

cd_func ()
{
  local x2 the_new_dir adir index
  local -i cnt

  if [[ $1 ==  "--" ]]; then
    dirs -v
    return 0
  fi

  the_new_dir=$1
  [[ -z $1 ]] && the_new_dir=$HOME

  if [[ ${the_new_dir:0:1} == '-' ]]; then
    #
    # Extract dir N from dirs
    index=${the_new_dir:1}
    [[ -z $index ]] && index=1
    adir=$(dirs +$index)
    [[ -z $adir ]] && return 1
    the_new_dir=$adir
  fi

  #
  # '~' has to be substituted by ${HOME}
  [[ ${the_new_dir:0:1} == '~' ]] && the_new_dir="${HOME}${the_new_dir:1}"

  #
  # Now change to the new dir and add to the top of the stack
  pushd "${the_new_dir}" > /dev/null
  [[ $? -ne 0 ]] && return 1
  the_new_dir=$(pwd)

  #
  # Trim down everything beyond 11th entry
  popd -n +11 2>/dev/null 1>/dev/null

  #
  # Remove any other occurence of this dir, skipping the top of the stack
  for ((cnt=1; cnt <= 10; cnt++)); do
    x2=$(dirs +${cnt} 2>/dev/null)
    [[ $? -ne 0 ]] && return 0
    [[ ${x2:0:1} == '~' ]] && x2="${HOME}${x2:1}"
    if [[ "${x2}" == "${the_new_dir}" ]]; then
      popd -n +$cnt 2>/dev/null 1>/dev/null
      cnt=cnt-1
    fi
  done

  return 0
}

alias cd=cd_func

if [[ $BASH_VERSION > "2.05a" ]]; then
  # ctrl+w shows the menu
  bind -x "\"\C-w\":cd_func -- ;"
fi

위험한 진입로를 누르기 전에 복잡한 선을 확장합니다.

  • Alt++Ctrle - 셸 라인 (키보드 상에서 e+ 를 사용해야 할 수 있습니다)
  • Ctrl+_ : 실행 취소
  • Ctrl+,x : 글로벌 단어

echo !$ !-2^ * Alt+Ctrl+e
echo aword someotherword * Ctrl+_
echo !$ !-2^ * Ctrl+x, *
echo !$ !-2^ LOG Makefile bar.c foo.h

&c.

저는 항상 다음을 좋아합니다.

ctrl-E # move cursor to end of line
ctrl-A # move cursor to beginning of line

도 ★★★★★★★★★★★★★★★★★★★★★★★★★」shopt -s cdable_vars배시그래서 회사의 소스 트리에 대해 다음과 같은 변수를 많이 만듭니다.

export Dcentmain="/var/localdata/p4ws/centaur/main/apps/core"

그 할 수 있습니다.cd Dcentmain.

pbcopy

그러면 Mac 시스템 클립보드에 복사됩니다.명령을 파이프에 연결할 수 있습니다.시험:

pwd | pbcopy

$ touch {1,2}.txt
$ ls [12].txt
1.txt  2.txt
$ rm !:1
rm [12].txt
$ history | tail -10
...
10007  touch {1,2}.txt
...
$ !10007
touch {1,2}.txt
$ for f in *.txt; do mv $f ${f/txt/doc}; done

명령줄에서 'set -o vi' 또는 .bashrc에서 더 나은 방법을 사용하면 명령줄에서 vi 편집 모드가 됩니다.정상적으로 입력 및 백스페이스를 입력할 수 있도록 'insert' 모드로 시작합니다만, 큰 실수를 한 경우 esc 키를 누른 다음 vi. cw에서처럼 'b'와 'f'를 사용하여 이동할 수 있습니다.변경할 history 명령을 실행한 후 특히 유용합니다.

위의 많은 것들과 마찬가지로, 현재 내가 가장 좋아하는 것은 키 스트로크이다.(Alt 키와 "." 키를 함께 누름) 이것은 $!(이전 명령어의 마지막 인수를 삽입함)와 같습니다.다만, 즉시 입력할 수 있어 편리합니다.(스크립트에서는 사용할 수 없습니다)

예:

mkdir -p /tmp/test/blah/oops/something
cd [alt].

& & 명령을 사용하여 여러 명령을 함께 문자열화합니다.

./run.sh && tail -f log.txt

또는

kill -9 1111 && ./start.sh

언급URL : https://stackoverflow.com/questions/68372/what-is-your-single-most-favorite-command-line-trick-using-bash

반응형