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
이름을 바꾸다
예:
$ 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 fileb
vi !$
둘: 는는:::: :::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
에 의해, 의 탭 완성이 유효하게 를 들면, 커맨드 이 「」로 , 탭 합니다).evince
evince가 열 수 있는 파일만 표시되며 명령줄 옵션 탭 완성도 표시됩니다).
도 잘 요.~/.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+eecho 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
'programing' 카테고리의 다른 글
RE 오류: Mac OS X에서 잘못된 바이트 시퀀스 (0) | 2023.04.19 |
---|---|
Excel vba에서 python 스크립트를 호출하는 방법 (0) | 2023.04.19 |
ToList()를 호출할 때 퍼포먼스에 영향이 있습니까? (0) | 2023.04.19 |
sep=";" 문이 XSL에서 생성된 CSV 파일에서 utf8 BOM을 차단합니다. (0) | 2023.04.14 |
WPF 라디오 버튼(2)(부울 값에 바인딩) (0) | 2023.04.14 |