본문 바로가기

Academy I/Tech Academy

[Linux]Shell 활용 (01)

Shell command interpreter(shell)의 사용은 과거 unix로 부터 거슬러 올라갑니다. 이러한 shell은 환경 변수, aliase, 프로그래밍을 위한 여러 기능등 많은 명령을 수행합니다. Bourne Again Shell(bash)이 Linux에서 가장 일반적으로 많이 사용됩니다(sh, csh, ksh, tcsh 등등도 있습니다).


많은 경우, 이러한 shell들은 다른 shell로의 symbolic link를 가지고 있습니다. Ubuntu에서, sh는 /bin/dash에 symbolic link를 가지고 있습니다. 이러한 sh shell은 run script로 실행시킬 shell script를 호출하는데 중요한 역할을 수행합니다.


Shell 사용하기

Shell이 시작될 때 shell environment가 실행시킨 user 기반으로 설정됩니다. bash shell의 모든 user의 설정은 많은 파일에 저장되어 있습니다. 이러한 시스템 세팅을 무시하고 당신만의 버전으로 만들어 사용할 수 있습니다. 이러한 설정을 포함하는 파일은 다음과 같이 두 종류가 있습니다.
  • startup files
  • initialization files

bash는 로그인 shell으로 부터 startup files를 실행시킵니다. 이 파일은 전체 로그인을 넘나들어 적용되는 설정을 정의합니다. bash는 shell의 초기화를 위해 initialization files를 실행시킵니다. 이는 다시 말하면, shell script를 실행시키는것은 아닙니다.

bash는 startup files을 /etc/profile(이는 system-wide) 혹은 user home directory의 .bash_profile, .bash_login, 그리고 .profile와 같이 개인 설정이 저장된 .으로 시작되는 파일을 찾습니다. (다른 linux 시스템에서 system-wide 파일이 /etc/profile과 /etc/profile.d/에 저장이 되어 있는 경우도 있습니다.)

bash는 initialization files를 /etc/bash.bashrc (이는 system-wide) 혹은 user home directory의 .bashrc에서 찾습니다. (다른 linux 시스템에서 system-wide 파일이 /etc/bashrc에 저장되어 있는 경우도 있습니다.)

shell이 끝날 때 user의 ~/.bash_logout 파일이 실행됩니다. 이러한 파일들을 변경하였지만, 이미 동작하고 있는 shell에는 영향을 미치지는 않습니다.

shell environment를 변경하고 나열할 수 있는 여러 가지 방법이 있는데, 가장 흔한 방법은 user를 변경하는 방법입니다.


bash history 사용하기

bash(Bourne Again Shell)은 Linux에서 일반적으로 쓰이는 기본 shell입니다. 다른 shell과 마찬가지로, bash에 의해 설치된 history를 관리하는 기능이 있어, 과거 실행한 command를 보거나 변경하기, 그리고 재사용할 수 있습니다. 이는 매우 길고 복잡한 Linux command을 처리할때 큰 도움을 줍니다.

bash를 시작할 때, ~/.bash_histroy 파일을 읽어 메모리에 로드하게 됩니다. 이 파일은 $HISTFILE 값에 세팅되어 있습니다.

bash session 동안, command는 메모리에 있는 history에 추가하게 됩니다. 그리고 bash가 종료될 때, 메모리에 있는 history는 .bash_history에 저장하게 됩니다. bash session동안 포함할 command 개수는 $HISTSIZE에 세팅되어 있으며, history에 저장될 개수는 #HISTFILESIZE에 세팅되어 있습니다.

$ echo $HISTFILE $HISTSIZE $HISTFILESIZE
/home/greenfish/.bash_history 1000 2000
$ history 5
  447  ps
  448  head .bash_history
  449  echo $HISTFILE $HISTSIZE $HISTFILESIZE
  450  clear
  451  history 5
$ !!
history 5
  458  ps
  459  head .bash_history
  460  echo $HISTFILE $HISTSIZE $HISTFILESIZE
  461  clear
  462  history 5
$ !458
pwd
/home/greenfish
$ !458 -aux
ps -aux
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3   2664  1608 ?        Ss   16:43   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    16:43   0:00 [kthreadd]
...
$ !?aux?
ps -aux
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3   2664  1608 ?        Ss   16:43   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    16:43   0:00 [kthreadd]
...
$ !ps
ps -aux
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3   2664  1608 ?        Ss   16:43   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    16:43   0:00 [kthreadd]
...
$ !ps:s/aux/A
ps -A
  PID TTY          TIME CMD
    1 ?        00:00:01 init
    2 ?        00:00:00 kthreadd
...

  • history 5
    이전의 command 5개를 보여준다.
  • !!
    바로 직전의 command를 실행한다.
  • !458
    458번째의 command를 실행한다.
  • !458 -aux
    458번째의 command에 -aux를 붙여 실행한다.
  • !?aux?
    이전 command중 aux를 포함하고 있는 것을 실행한다.
  • !ps
    이전 command중 ps인것을 실행한다.
  • !ps:s/aux/A
    이전 command중 ps인것을 실행하되 aux를 A로 치환하여 실행한다.



[출처 : http://greenfishblog.tistory.com/39]