강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 리눅스사용자가 사용할 쉘(shell)의 종류와 설정

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터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 525 2008 /bin/bash

lrwxrwxrwx 1 root root 4 619 2010 /bin/csh -> tcsh

-rwxr-xr-x 1 root root 1002540 525 2008 /bin/ksh

lrwxrwxrwx 1 root root 4 619 2010 /bin/sh -> bash

-rwxr-xr-x 1 root root 345348 315 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

 

 

 

 

 

 

 

 

 

 

 

이 외에도 쉘 스크립트는 다른 쉘 스크립트를 호출하거나 조건을 붙여 실행 여부를 결정하는 등 프로그래밍의 요소들을 갖추고 있다

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,134 명
  • 현재 강좌수 :  36,188 개
  • 현재 접속자 :  367 명