User Tools

Site Tools


zsh

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
zsh [2015/01/17 01:53] – created dongheezsh [2018/07/18 14:10] (current) – external edit 127.0.0.1
Line 1: Line 1:
-== zsh - the Z shell ==+===== zsh - the Z shell =====
  
-여기 저기 [http://zsh.org zsh]에 대한 소개를 바탕으로 정리 했습니다.+여기 저기 [[http://zsh.org|zsh]]에 대한 소개를 바탕으로 정리 했습니다.
  
-=== 0. zsh로 들어가기 ===+==== 0. zsh로 들어가기 ====
 Unix로 대표되는 콘솔의 커맨드형 입력문화는 쉘이 그 대표를 하고 있습니다. 쉘의 캐릭터 라인은 자연언어와 비슷하고 기호적이여서 풍부한 표현을 할 수 있습니다. 맥킨토시를 사랑하고  GUI를 좋아하지만 쉘과 같은 캐릭터라인(CUI)에의한 인터페이스는 어떤 ??의 감동과 미학을 느끼게하며 무엇보다 편리합니다. Unix로 대표되는 콘솔의 커맨드형 입력문화는 쉘이 그 대표를 하고 있습니다. 쉘의 캐릭터 라인은 자연언어와 비슷하고 기호적이여서 풍부한 표현을 할 수 있습니다. 맥킨토시를 사랑하고  GUI를 좋아하지만 쉘과 같은 캐릭터라인(CUI)에의한 인터페이스는 어떤 ??의 감동과 미학을 느끼게하며 무엇보다 편리합니다.
  
Line 10: Line 10:
 편리함은 익숙함이고 선택사항이기 때문에 모든 사람에게 zsh을 사용하라 권하진 않습니다. 다만 zsh을 사용함으로써 보다 편하고 시스템과의 효과적인 커뮤니케이션을 할 수 있기 때문입니다. 편리함은 익숙함이고 선택사항이기 때문에 모든 사람에게 zsh을 사용하라 권하진 않습니다. 다만 zsh을 사용함으로써 보다 편하고 시스템과의 효과적인 커뮤니케이션을 할 수 있기 때문입니다.
  
-=== 1. zsh의 특징 ===+==== 1. zsh의 특징 ====
 zsh은 sh, csh, tcsh, bash 등의 다른 모든 쉘의 기능을 사용가능하며  '마지막 쉘'라고 하는 의미로 zsh 이라 합니다.  zsh은 sh, csh, tcsh, bash 등의 다른 모든 쉘의 기능을 사용가능하며  '마지막 쉘'라고 하는 의미로 zsh 이라 합니다. 
- * csh 형(csh, tcsh) +  * csh 형(csh, tcsh) 
- * sh 형(sh, ksh, bash, zsh)+  * sh 형(sh, ksh, bash, zsh)
  
-zsh은 8bit clean을 지원합니다. 한글을 쓸려면 [http://hangul.kldp.org 패치]를 해야합니다. zsh은 tcsh을 대부분 지원하며 zsh의 기능을 쓴다면 스크립트 작성에서 좀더 간결한 표현을 할 수 있습니다.+zsh은 8bit clean을 지원합니다. 한글을 쓸려면 [[http://hangul.kldp.org|패치]]를 해야합니다. zsh은 tcsh을 대부분 지원하며 zsh의 기능을 쓴다면 스크립트 작성에서 좀더 간결한 표현을 할 수 있습니다.
  
-=== 2. zsh의 기능 ===+==== 2. zsh의 기능 ====
 zsh에서 특별히 유용하다고 생각하는 기능만 간추렷습니다. zsh에서 특별히 유용하다고 생각하는 기능만 간추렷습니다.
  
- * 프로세스 <--> 파일치환 +  * 프로세스 <--> 파일치환 
- * complition +  * complition 
- * 간단한 CD(Change Directory) +  * 간단한 CD(Change Directory) 
- * 커맨드라인스택(방향키로 전의 명령을 가져온다?)+  * 커맨드라인스택(방향키로 전의 명령을 가져온다?)
  
 ==== 2.1 프로세스-파일의 치환 ==== ==== 2.1 프로세스-파일의 치환 ====
-zsh에서 `=(command)' 는 command를 실행하고 그결과를 파일로 보낼는데 사용합니다. +zsh에서 ''=(command)' 는 command를 실행하고 그결과를 파일로 보낼는데 사용합니다. 
-{{{+<code>
 % vi=(finger) % vi=(finger)
-}}}+</code>
 finger의 내용을 vi로 편집합니다. finger의 내용을 vi로 편집합니다.
-{{{+<code>
 % sort +2 -n data1 > data1_sort % sort +2 -n data1 > data1_sort
 % sort +2 -n data2 > data2_sort % sort +2 -n data2 > data2_sort
 % compare.pl data1_sort data2_sort % compare.pl data1_sort data2_sort
-}}}+</code>
 은 zsh위의 기능을 사용하면 아래와 같습니다. 은 zsh위의 기능을 사용하면 아래와 같습니다.
-{{{+<code>
 % compare.pl =(sort +2 -n data1) =(sort +2 -n data2) % compare.pl =(sort +2 -n data1) =(sort +2 -n data2)
-}}}+</code>
 참 편리하죠? 참 편리하죠?
  
Line 48: Line 48:
 ==== 2.2 file selection ==== ==== 2.2 file selection ====
 보통 쉘에서 .sh 만 출력할때 보통 쉘에서 .sh 만 출력할때
-{{{+<code>
 % ls *.sh  % ls *.sh 
-}}}+</code>
 이렇게 하는데 zsh은 뒤에 ()를 붙여서 '''속성'''을 지정합니다(설명이 좀 그러죠? 예제를 보도록 하죠!) 이렇게 하는데 zsh은 뒤에 ()를 붙여서 '''속성'''을 지정합니다(설명이 좀 그러죠? 예제를 보도록 하죠!)
-{{{ +<code> 
-% chmod 755 `ls -l * | awk '/^...x/{ print $9 }'` +% chmod 755 ''ls -l * | awk '/^...x/{ print $9 }''' 
-}}} +</code> 
-awk를 사용하여 `x`이름으로 끝나는 파일의 속성을변하게(chmod) 하는 command입니다+awk를 사용하여 ''x''이름으로 끝나는 파일의 속성을변하게(chmod) 하는 command입니다
  
 흐흐 그런데 zsh에서는 -_-)v 다음과 같습니다 흐흐 그런데 zsh에서는 -_-)v 다음과 같습니다
-{{{+<code>
 % chmod 755 *(x) % chmod 755 *(x)
-}}}+</code>
 그외에도 zsh의 막강한 파일관리는 감동입니다.  그외에도 zsh의 막강한 파일관리는 감동입니다. 
- * a로 시작되는 디렉토리 : a*(/) +  * a로 시작되는 디렉토리 : a*(/) 
- * .bashrc 나 .vimrc 같은 프로그램 시작환경 화일 : .*(.)  +  * .bashrc 나 .vimrc 같은 프로그램 시작환경 화일 : .*(.)  
- * 현재 디렉토리 아래의 파일의 선택은 : **/* +  * 현재 디렉토리 아래의 파일의 선택은 : **/* 
  
 ==== 2.3 cd(change directory) ==== ==== 2.3 cd(change directory) ====
Line 74: Line 74:
 .zshrc에다가 setopt autopushd를 설정하고 alias gd='dirs -v; echo -n "select number: " ; read newdir; cd -"$newdir"' 이렇게 설정 해줍니다. .zshrc에다가 setopt autopushd를 설정하고 alias gd='dirs -v; echo -n "select number: " ; read newdir; cd -"$newdir"' 이렇게 설정 해줍니다.
 '''.zshrc의 예''' '''.zshrc의 예'''
-{{{+<code>
 HISTSIZE=200 #history 기능을 사용하기위해 세줄을 추가한다. HISTSIZE=200 #history 기능을 사용하기위해 세줄을 추가한다.
 HISTFILE=~/.zsh_history HISTFILE=~/.zsh_history
Line 81: Line 81:
 setopt autopushd #추가한 부분 setopt autopushd #추가한 부분
 alias gd='dirs -v; echo -n "select number: " ; read newdir; cd -"$newdir"' #추가한 부분 alias gd='dirs -v; echo -n "select number: " ; read newdir; cd -"$newdir"' #추가한 부분
-}}}+</code>
  
 그럼 사용해보도록 하죠. 그럼 사용해보도록 하죠.
-{{{+<code>
 % cd /foo % cd /foo
 % cd /usr/local % cd /usr/local
Line 95: Line 95:
 % pwd % pwd
 /foo /foo
-}}}+</code>
  
 흐흐 쓸만하네요. 흐흐 쓸만하네요.
Line 102: Line 102:
 컴파일할때나 또는 뮤자게 긴 커맨드를 입력했는데,깜박하고 그전에 했어야할 커맨드를 입력하지 않은것입니다..요럴때 사용하지요.. 컴파일할때나 또는 뮤자게 긴 커맨드를 입력했는데,깜박하고 그전에 했어야할 커맨드를 입력하지 않은것입니다..요럴때 사용하지요..
 그럼 다음의 예와 함께 살펴보도록 하죠. 그럼 다음의 예와 함께 살펴보도록 하죠.
-{{{+<code>
 % gcc -o foo -O foo.c -lm -lnsl -lsocket -l % gcc -o foo -O foo.c -lm -lnsl -lsocket -l
-}}}+</code>
 아..-_- foo.c위치가 여기가 아니지 아.나 zsh쓰지(ㅋㅋ) 아..-_- foo.c위치가 여기가 아니지 아.나 zsh쓰지(ㅋㅋ)
 그러면 M-q(or ESC-q)를 입력하면 그러면 M-q(or ESC-q)를 입력하면
-{{{+<code>
 % _ % _
-}}}+</code>
 이렇게 커맨드를 stack에 저장하지...그리고 foo.c의 위치를 제대로 찾아야지.. 이렇게 커맨드를 stack에 저장하지...그리고 foo.c의 위치를 제대로 찾아야지..
-{{{+<code>
 % cd /usr/local/src % cd /usr/local/src
-}}}+</code>
 foo.c가 있는곳으로 이동한고 엔터를 치면 M-q로 stack에 저장했던 command가 나타납니다(흐흐 예수의부활!) foo.c가 있는곳으로 이동한고 엔터를 치면 M-q로 stack에 저장했던 command가 나타납니다(흐흐 예수의부활!)
  
 음..이와 관련된 팁으로 man이나 help페이지를 볼때 man command 치기 귀찮죠? zsh에서는  음..이와 관련된 팁으로 man이나 help페이지를 볼때 man command 치기 귀찮죠? zsh에서는 
-{{{+<code>
 % command[M-h] % command[M-h]
-}}}+</code>
 이렇게 command 치구 M-h를 누루면 man command와 동일합니다. 이렇게 command 치구 M-h를 누루면 man command와 동일합니다.
  
-=== 응용 팁 ===+==== 응용 팁 ====
  
 1. cd를 치기 귀찮아~ 1. cd를 치기 귀찮아~
Line 132: Line 132:
 4. ./configure --libraries=/lib/include --prefix=/usr/local/dak 을 쳤는데 - 앗.config.h를 편집해야지 -_-했는데 제길 퍼미션..흐흐 그래서 chmod +w config.h 하고 다시 vi config.h -_-앗..ㅜ_ㅠ 다시 처음으로 ./configure 를 ..쳐야지..흑흑..귀찮아.. 4. ./configure --libraries=/lib/include --prefix=/usr/local/dak 을 쳤는데 - 앗.config.h를 편집해야지 -_-했는데 제길 퍼미션..흐흐 그래서 chmod +w config.h 하고 다시 vi config.h -_-앗..ㅜ_ㅠ 다시 처음으로 ./configure 를 ..쳐야지..흑흑..귀찮아..
  ''./.configure --libraries=/lib/include --prefix=/usr/local/dak 하고 아! [M-q] 하고 vi config.h 하고 아! 또 [M-q] chmod +w config.h 하면 vi config가 프롬프트에 자동으로 뜬다 ..편집하고 ZZ 종료 ..하고 나오면..헉! ./configure --libraries=/lib/include --prefix=/usr/local/dak 가 프롬프트에 자동으로 뜬다..ㅜ_ㅠ 엔터.! ''  ''./.configure --libraries=/lib/include --prefix=/usr/local/dak 하고 아! [M-q] 하고 vi config.h 하고 아! 또 [M-q] chmod +w config.h 하면 vi config가 프롬프트에 자동으로 뜬다 ..편집하고 ZZ 종료 ..하고 나오면..헉! ./configure --libraries=/lib/include --prefix=/usr/local/dak 가 프롬프트에 자동으로 뜬다..ㅜ_ㅠ 엔터.! ''
-5. file `which ls`를 간단히?+5. file ''which ls''를 간단히?
  '' file =ls''  '' file =ls''
 6. fix-01.gz ~ fix-11.gz 중에서 4~10만 패치하고 시포 6. fix-01.gz ~ fix-11.gz 중에서 4~10만 패치하고 시포
Line 150: Line 150:
 13. 프롬프트를 좀더 멋지게 할 수 없나요? 13. 프롬프트를 좀더 멋지게 할 수 없나요?
  ''zsh는 RPROMPT라는 변수로 오른쪽에 prompt를 설정할 수 있습니다. RPROMPT는 위치에 대한 정보를 보여주며 각command 화면의 가독성을 높입니다.''  ''zsh는 RPROMPT라는 변수로 오른쪽에 prompt를 설정할 수 있습니다. RPROMPT는 위치에 대한 정보를 보여주며 각command 화면의 가독성을 높입니다.''
-{{{+<code>
 PROMPT="%U$USER@%m%%%u " PROMPT="%U$USER@%m%%%u "
 RPROMPT="[%~]" RPROMPT="[%~]"
-}}}+</code>
 14. setopt hist_ignore_space 이옵션을 켜두면 커맨드라인 앞에 스페이스를 넣어두면 history에 기록되지 않습니다. 14. setopt hist_ignore_space 이옵션을 켜두면 커맨드라인 앞에 스페이스를 넣어두면 history에 기록되지 않습니다.
 15. ./myprogram |./myfilter 와 같은 pipe커맨드 또는 alias커맨드를 실행할때 time에 관한 옵션을 넣을수 있나요?(tcsh과 비교) (실행시간 잴때는 time사용) 15. ./myprogram |./myfilter 와 같은 pipe커맨드 또는 alias커맨드를 실행할때 time에 관한 옵션을 넣을수 있나요?(tcsh과 비교) (실행시간 잴때는 time사용)
-{{{+<code>
 tcsh% alias la 'ls -a' tcsh% alias la 'ls -a'
 tcsh% repeat 3 la tcsh% repeat 3 la
Line 167: Line 167:
 . .. . hoge foo . .. . hoge foo
 잘된다 ^^ 잘된다 ^^
-}}} +</code> 
-16. zsh는 {{{$[ … ]}}} 괄호안을 수식으로 계산 해줍니다. +16. zsh는 ''$[ … ]'' 괄호안을 수식으로 계산 해줍니다. 
 17. escape sequence 을 모아두는방법 : %{ … } 17. escape sequence 을 모아두는방법 : %{ … }
 18.  18. 
-{{{+<code>
 time zsh -c "repeat 10 /tmp/a.out" time zsh -c "repeat 10 /tmp/a.out"
-}}}+</code>
 수행시간 측정하기. tcsh이랑 zsh는 repeat 명령이 있는데, bash는 없는것인가? repeat를 쓰면 꽤 편리하다. :) 음악 한곡만 반복해서 들을때 특히! 수행시간 측정하기. tcsh이랑 zsh는 repeat 명령이 있는데, bash는 없는것인가? repeat를 쓰면 꽤 편리하다. :) 음악 한곡만 반복해서 들을때 특히!
  
  
  
-=== 추천옵션 (.zshrc에 넣어두면 편리하죠) ===+==== 추천옵션 (.zshrc에 넣어두면 편리하죠) ====
 man zsh 하면 옵션이 무지 많은데 어떤것이 편리한지 모르겠죠? 그럼 아래와 같이 써보세요..  man zsh 하면 옵션이 무지 많은데 어떤것이 편리한지 모르겠죠? 그럼 아래와 같이 써보세요.. 
-{{{+<code>
 ### ###
 # Set shell options # Set shell options
Line 189: Line 189:
 setopt extended_glob list_types no_beep always_last_prompt setopt extended_glob list_types no_beep always_last_prompt
 setopt cdable_vars sh_word_split auto_param_keys setopt cdable_vars sh_word_split auto_param_keys
-}}}+</code>
 ---- ----
-[http://www.gentei.org/~yuuji/rec/pc/zshcompctl .zshrc] 다른사람은 어떡게 쓰는지 보세요.+[[http://www.gentei.org/~yuuji/rec/pc/zshcompctl|.zshrc]] 다른사람은 어떡게 쓰는지 보세요.
  
 ---- ----
-zsh은 [http://www.zsh.org/pub/ 여기]에서 더 많은 정보를 얻을 수 있습니다. +zsh은 [[http://www.zsh.org/pub/|여기]]에서 더 많은 정보를 얻을 수 있습니다. 
-[http://zsh.sunsite.dk/Intro/ Introduction to ZSH]+[[[[http://zsh.sunsite.dk/Intro/|Introduction|to|ZSH]]]]
  
-seealso [http://dotfiles.com/ .file] -각종 dot파일 모아났어요. ^^ 유명한 해커들도 많에요. 흐흐 morris chang~+seealso [[http://dotfiles.com/|.file]] -각종 dot파일 모아났어요. ^^ 유명한 해커들도 많에요. 흐흐 morris chang~
  
zsh.1421459633.txt.gz · Last modified: 2018/07/18 14:09 (external edit)