리눅스마스터1급 : 리눅스사용자가 사용할 쉘(shell)의 종류와 설정
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,753 조회
- 0 추천
- 목록
본문
리눅스마스터1급 : 리눅스사용자가 사용할 쉘(shell)의 종류와 설정
사용자별 Shell 설정
앞서 설명한 것처럼 리눅스에서 말하는 쉘이란 사용자가 입력한 명령어를 읽어서 해석하는 프로그램으로 명령어 해석기(Command Processor)라고도 볼 수 있고, 프로그래밍 언어로도 사용할 수 있어서 리눅스의 일반적인 명령어뿐만 아니라 특별한 쉘 프로그래밍 언어도 포함시켜서 실행 가능한 스크립트(Script) 파일을 만들 수 있다.
1) 쉘(Shell)의 선택
사용자가 로그인할 때에 특정한 쉘이 실행되는데, 대부분의 쉘은 사용자가 처음 로그인하면 자동적으로 수행되는 프로그램과 사용자가 단말기에서 입력한 각종 명령어들을 읽어 들이고 해석하는 기능을 수행한다.
이러한 쉘은 운영체제의 한 부분이지만 커널과는 분리된 별도의 프로그램으로서 여러 개의 다른 쉘을 필요에 따라 선택해 사용할 수 있으므로, 리눅스 관리자와 각각의 사용자는 자신의 필요나 취향에 따라 사용할 쉘을 선택할 수 있다.
① 쉘 종류 확인 및 선택
최초에 관리자가 사용자 계정을 만들면 시스템 관리자가 사용자의 쉘을 선택해 준다.
그리고 사용자는 필요에 따라 “.profile”, “.bashrc”, “tcshrc” 또는 “.cshrc” 파일을 수정하여 쉘을 변경할 수 있다.
프롬프트가 “$”이면 Bourne 쉘이나 Korn 쉘이고, 그렇지 않고 “%”이면 C 쉘이라고 볼 수 있다.
다음은 각종 쉘의 종류와 각 쉘이 사용하는 프롬프트를 보여주고 있다.
쉘의 종류 | sh | bash | csh | ksh | zsh | tcsh |
개발자 | Steven | Brain fox | Bill joy | David | Paul | Ken |
Bourne | chet Ramey | Korn | Falstad | greer | ||
개발 연도 | 1979 | 1989 | 1981 | 1986 | 1990 | 1982 |
프롬프트 | $ | # | % | $ | % | > |
이와 같이 쉘의 종류는 여러 가지인데 리눅스에서 제공하는 쉘의 종류를 알아보기 위해서는 “/bin” 디렉토리나 “/etc/shells” 파일을 확인하면 된다.
다음은 현재 시스템이 제공하는 쉘 목록을 보여주고 있다.
|
|
|
| # ls -al /bin/*sh -rwxr-xr-x 1 root root 735004 5월 25 2008 /bin/bash lrwxrwxrwx 1 root root 4 6월 19 2010 /bin/csh -> tcsh -rwxr-xr-x 1 root root 1002540 5월 25 2008 /bin/ksh lrwxrwxrwx 1 root root 4 6월 19 2010 /bin/sh -> bash -rwxr-xr-x 1 root root 345348 3월 15 2007 /bin/tcsh # cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh /bin/ksh |
|
|
|
|
“chsh –l” 명령을 통해서도 쉘의 종류를 확인하는 것이 가능한데, 이것은 /etc/shells 파일의 내용을 출력해 주는 것이다.
|
|
|
| # chsh -l /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh /bin/ksh # |
|
|
|
|
앞서 설명한 바와 같이 쉘은 크게 두 가지 기능, 즉 명령어 해석기와 쉘 스크립트를 위한 프로그램 언어를 제공하는데, 명령어 해석기로는 C 쉘이 다소 좋은 작업 환경을 제공한다.
이에 반해 Bourne 쉘은 프로그래밍 언어 측면에서는 C 쉘보다 사용하기가 더 쉽고 편리한 것으로 알려져 있다.
보통 사용자들은 기본적으로 C 쉘을 사용하고 스크립트를 실행하기 위해서는 Bourne 쉘을 사용한다.
그러나 굳이 어느 쉘이 좋다고 할 수는 없기 때문에 각각의 쉘을 사용하고 미묘한 차이점을 발견하고 필요에 따라 사용하면 된다.
이후부터 설명할 내용은 별도의 언급이 없다면 Bash Shell에 관한 것이다.
② 로그인 쉘과 서브쉘
리눅스에서 제공하는 쉘은 크게 로그인 쉘(login shell, 또는 기본사용쉘이라고도 한다)과 서브쉘(sub shell, 현재 사용중인 쉘이라고도 한다)로 나눌 수 있다.
로그인 쉘은 여러 가지 사용 가능한 쉘 중에서 단 한가지를 지정하여 로그인시에 기본으로 지정하여 사용되는 쉘을 말한다.
앞서 설명한 바와 같이, 사용자를 생성하면 “/etc/passwd” 파일에 그 정보가 등록되는데, 다음은 이 파일의 내용을 보여주고 있다.
이 파일에서 root 사용자는 홈디렉토리가 /root이고, 로그인했을 때 사용되는 쉘은 “/bin/bash”인 것을 알 수 있다.
|
|
|
| # cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin ...중략... distcache:x:94:94:Distcache:/:/sbin/nologin named:x:25:25:Named:/var/named:/sbin/nologin mysql:x:27:27::/home/mysql:/bin/bash sulinuxer:x:500:500::/home/sulinuxer:/bin/bash |
|
|
|
|
이에 대해 서브쉘은 로그인 쉘과 다르게 사용자가 필요에 따라 그때그때 임시적으로 변경하여 사용하는, 즉 현재 일시적으로 사용하는 쉘을 말한다.
왜냐하면 쉘마다 저마다의 기능과 사용법이 다르기 때문에 필요에 따라 잠시 다른 쉘을 사용할 때 사용한다.
특정 쉘로 변경하기 위해서는 단지 해당 쉘 프로그램을 실행시키면 되며, 종료하기 위해서는 단지 “exit” 명령만 입력하면 된다.
다음은 각각의 쉘을 바꾸는 방법을 보여주고 있다.
|
|
|
| [freekgb@localhost ~]$ echo $SHELL (현재 로그인쉘은 Bash 쉘) /bin/bash [freekgb@localhost ~]$ /bin/sh (본 쉘로 변경) sh-3.2$ csh (C 쉘로 변경) [freekgb@localhost ~]$ exit (C 쉘에서 빠져나가서 본 쉘 상태로 변경) exit sh-3.2$ exit (본 쉘에서 빠져나가서 Bash 쉘로 변경) exit [freekgb@localhost ~]$ |
|
|
|
|
③ 로그인 쉘의 변경
로그인 쉘을 변경하기 위해서는 “chsh(change shell)” 명령을 사용한다.
이 명령은 root 사용자 및 일반 사용자 모두 사용이 가능하다.
다음 예제는 “chsh”를 사용하여 로그인 쉘을 변경하는 것을 보여주고 있다.
|
|
|
| [freekgb@localhost ~]$ grep freekgb /etc/passwd freekgb:x:574:500::/home/freekgb:/bin/bash [freekgb@localhost ~]$ chsh Changing shell for freekgb. 암호: ******** New shell [/bin/bash]: /bin/sh Shell changed. [freekgb@localhost ~]$ grep freekgb /etc/passwd freekgb:x:574:500::/home/freekgb:/bin/sh [freekgb@localhost ~]$ |
|
|
|
|
chsh 명령에 –s 옵션을 사용하면 조금 더 간편하게 로그인 쉘을 변경할 수 있다.
|
|
|
| [freekgb@localhost ~]$ chsh -s /bin/bash Changing shell for freekgb. 암호: ******** Shell changed. [freekgb@localhost ~]$ |
|
|
|
|
이 명령을 내린 후에 이것이 적용되기 위해서는 다시 로그인해야 한다.
이 명령은 로그인쉘의 설정을 변경하는 것이기 때문이다.
2) 쉘의 운영
쉘은 프로그래밍 언어로도 사용할 수 있어서 리눅스의 일반적인 명령어뿐만 아니라 특별한 쉘 프로그래밍 언어도 포함시켜서 실행 가능한 스크립트(Script) 파일을 만들 수 있다.
다음은 간단한 쉘 스크립트이다.
이 쉘 스크립트는 쉘 지정이 되어 있지 않아서 사용자의 쉘에서 해석이 되며 실행 권한을 주었기 때문에 실행이 가능하다.
이것이 쉘 스크립트처럼 보이지 않겠지만 하나의 훌륭한 쉘 스크립트이다.
쉘 스크립트가 행 단위로 해석이 되기 때문에 ls 명령이 차례대로 내려진 것을 볼 수 있다.
|
|
|
| $ cat test ls ls -l $ chmod +x test $ ./test Desktop mimeinstall.results test xinitrc mail nsmail plugininstall.results vod total 48 drwxr-xr-x 3 root root 4096 Jul 23 04:03 Desktop drwx------ 2 root root 4096 Jul 5 09:36 mail -rw-r--r-- 1 root root 10249 Jul 6 22:21 mimeinstall.results drwx------ 2 root root 4096 Jul 9 19:43 nsmail -rw-r--r-- 1 root root 52 Jul 6 22:21 plugininstall.results -rwxr-xr-x 1 root root 10 Aug 15 13:35 test drwxr-xr-x 2 root root 4096 Jul 23 23:07 vod -rw-r--r-- 1 root root 208 Jul 17 05:03 xinitrc |
|
|
|
|
다음은 예제이다.
실행 권한을 제거했기 때문에 그대로 파일 실행이 거부되었는데, sh 쉘을 지정하여 실행이 되도록 했다.
|
|
|
| # chmod -x test # ./test bash: ./test: Permission denied # /bin/sh ./test Desktop mimeinstall.results test xinitrc mail nsmail plugininstall.results total 48 drwxr-xr-x 3 root root 4096 Jul 23 04:03 Desktop drwx------ 2 root root 4096 Jul 5 09:36 mail -rw-r--r-- 1 root root 10249 Jul 6 22:21 mimeinstall.results drwx------ 2 root root 4096 Jul 9 19:43 nsmail -rw-r--r-- 1 root root 52 Jul 6 22:21 plugininstall.results -rw-r--r-- 1 root root 10 Aug 15 13:35 test -rw-r--r-- 1 root root 208 Jul 17 05:03 xinitrc |
|
|
|
|
이 외에도 쉘 스크립트는 다른 쉘 스크립트를 호출하거나 조건을 붙여 실행 여부를 결정하는 등 프로그래밍의 요소들을 갖추고 있다.
관련자료
-
이전
-
다음