쉘(shell)
쉘(shell)은 명령어 해석기, 명령행 인터페이스이자 스크립트 언어이다.
유닉스 계열의 운영체제는 보통 텍스트 모드의 터미널 화면에서 명령행에 명령어를 타이핑 하여 사용한다. 이 명령어를 해석하는 프로그램이 쉘(shell)이다. 즉 쉘은 명령어 해석기 또는 명령행 인터페이스를 의미한다. 쉘을 사용하는 것은 윈도우의 '명령 프롬프트'에서 명령을 실행하는 것과 유사하지만 리눅스의 쉘은 훨씬 강력한 기능을 제공한다. 쉘 명령은 GUI 도구로는 수행하기 어려운 다양한 고급 기능을 제공한다. 또한 쉘은 스크립트 언어이기도 하다. 쉘 명령어로 구성된 쉘 스크립트 프로그램을 작성하면 쉘이 스크립트 파일을 읽어 일련의 명령을 수행할 수 있다.
쉘은 운영체제의 일부이며 커널과는 분리된 프로그램이다. 쉘의 종류에 따라 alias 설정, 초기화 파일, 스크립트 작성 등에서 다른 특성을 가질 수 있다. 리눅스 사용자는 자신이 선호하는 쉘을 기본 쉘로 설정하여 사용할 수 있다.
쉘의 종류
리눅스 배포판 마다 여러 종류의 쉘이 제공되는데 CentOS를 비롯한 많은 리눅스 배포판에서 기본 쉘로 사용되는 것이 'bash(Bourne Again Shell) 쉘'이다. bash 쉘은 초기 유닉스 쉘인 'Bourne 쉘'과 호환되며 속도와 편의성을 개선한 GNU 무료 공개용 버전이다. 명령을 입력할 수 있는 라인을 '명령 행'이라 하며 커서(_) 좌측 프롬프트가 '명령 대기중'임을 표시한다. bash 쉘의 경우 기본 프롬프트는 $이며 root 는 #이다.(이는 변경이 가능하다.)
쉘 이름 | 실행 명령 | 설명 |
Bourne Shell | sh | 유닉스 초기부터 사용된 쉘로 대부분의 유닉스 계열 운영체제에서 지원한다. 많은 쉘 스크립트가 이에 기반을 두고 있다. |
C Shell | csh | 스크립트 작성 형식이 C언어 구문과 비슷하며 BSD 계열의 유닉스 사용자들이 많이 사용했다. Bourne 쉘의 기능을 확장했다. |
TC Shell | tcsh | C 쉘을 확장 개선한 버전으로 '명령 행 완성'과 '명령 행 편집' 기능이 추가됐다. |
Korn Shell | ksh | 호환성을 유지하면서 Bourne 쉘을 확장하고 C 쉘의 많은 기능을 추가했다. System V 계열 유닉스 사용자들에게 인기가 많았다. |
Bourne Again Shell(bash) | bash | 리눅스에서 가장 많이 사용되는 쉘이다. Bourne 쉘을 토대로 개발됐으며 C 쉘과 Korn 쉘의 유용한 기능을 가져왔다. GPL 라이센스를 따른다. |
표 - 주요 쉘의 특징
이후 내용은 bash 쉘을 기준으로 한다.
쉘의 구분 - 로그인 쉘, 비 로그인 쉘, 서브 쉘
로그인 쉘
로그인 쉘은 로그인할 때 수행되는 기본 쉘이다. 로그인 쉘은 logout 명령으로 로그아웃하여 쉘을 종료할 수 있다.(비 로그인 쉘에서는 logout 명령을 사용할 수 없다.) 텍스트 모드에서 사용자 계정으로 로그인할 때 수행되는 쉘이 로그인 쉘이다. 또한 다른 사용자 계정으로 전환하는 su -l username 명령으로 수행되는 서브 쉘도 로그인 쉘이다. -l 옵션은 지정된 사용자의 로그인 쉘을 시작하는 옵션이다.
[user1@localhost ~]$ whoami user1 [user1@localhost ~]$ su -l user2 Password: [user2@localhost ~]$ whoami user2 [user2@localhost ~]$ logout [user1@localhost ~]$ |
cs |
su -l user2 명령으로 사용자 user2의 로그인 쉘을 실행하며 사용자를 전환한다. logout 명령으로 user2의 로그인 쉘을 종료하고 user1의 쉘로 돌아간다.
비 로그인 쉘
말그대로 로그인 쉘이 아닌 쉘이다. logout 명령이 아닌 exit 명령으로 쉘을 종료한다. GUI 환경(그래픽 모드)에서 터미널을 띄우면 수행되는 쉘이 비 로그인 쉘이다. 또한 다른 사용자 계정으로 전환하는 su username 명령으로 수행되는 서브 쉘도 비 로그인 쉘이다.
[user1@localhost ~]$ whoami user1 [user1@localhost ~]$ su user2 Password: [user2@localhost ~]$ whoami user2 [user2@localhost ~]$ logout [user2@localhost ~]$ bash: logout: not login shell: use 'exit' [user2@localhost ~]$ exit [user1@localhost ~]$ Colored by Color Scripter |
cs |
su user2 명령으로 사용자 user2로 단순 전환한다. 로그인 쉘을 실행하지 않으므로 관련된 초기화 스크립트가 실행되지 않고 단지 사용자만 전환된다. 로그인 쉘이 아니므로 logout으로 쉘을 종료할 수 없고 exit 명령으로 쉘을 종료한다.
서브 쉘
현재 쉘 안에서 실행되는 쉘이다. 현재 쉘의 자식 프로세스로 실행된다. exit 명령으로 서브 쉘을 종료하고 부모 쉘로 돌아간다. 서브 쉘은 부모 쉘의 환경 변수를 전달받아 공통적으로 사용할 수 있다. 예를 들어 현재 쉘에서 sh 명령으로 bourne 쉘을 실행할 수 있는데, 이렇게 실행된 쉘을 서브 쉘이라고 한다.
[user1@localhost ~]$ export FOO=bar [user1@localhost ~]$ sh sh-4.1$ echo $FOO bar sh-4.1$ exit exit [user1@localhost ~]$ unset FOO [user1@localhost ~]$ echo $FOO [user1@localhost ~]$ |
cs |
위와 같이 부모 쉘에서 만든 환경 변수 FOO가 서브 쉘에서도 사용할 수 있음을 확인할 수 있다.
※ [참고] 각 명령어의 의미
export FOO=bar : 문자열 bar를 갖는 환경 변수 FOO 만듦
sh : bourne 쉘을 서브 쉘로 실행
echo $FOO : 변수 FOO 값 출력
exit : 서브 쉘 종료
unset FOO : 변수 삭제
리눅스 기본(로그인) 쉘 확인
grep username /etc/password | cs |
[user1@localhost ~]$ grep user1 /etc/passwd user1:x:502:502:General User:/home/user1/bin/bash |
cs |
grep을 이용한 리눅스 기본 쉘 확인 방법
grep 계정명 /etc/passwd를 통해 해당 사용자의 기본 쉘을 확인할 수 있다. 결과의 마지막 항목인 /bin/bash가 user1 사용자의 기본 쉘이 bash임을 의미한다.
리눅스 기본(로그인) 쉘 변경 - chsh
chsh -s /bin/tcsh # 현재 사용자의 기본 쉘을 tcsh로 변경 chsh -s /bin/tcsh user1 # user1의 기본 쉘을 tcsh로 변경 chsh -l # 사용 가능한 쉘 출력 |
cs |
대상 username이 생략되면 현재 로그인한 사용자를 대상으로 한다. 다른 사용자의 쉘을 바꾸려면 권한이 있어야 한다.
[user1@localhost ~]$ chsh -l /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh |
cs |
사용 가능한 쉘 확인
옵션 | 내용 |
-l | 사용 가능한 쉘을 나열(/etc/shells 파일 내용과 동일) |
-s shell | 로그인 쉘 변경 ex: chsh -s /bin/tcsh |
-u | 도움말(usage) |
표 - chsh 명령어 옵션
'Server > Linux' 카테고리의 다른 글
[Linux] 자주 사용하는 cmd 명령어(명령 프롬프트) 알아보기. (0) | 2021.05.26 |
---|---|
[Linux] 쉘 사용하기 [리눅스 쉘의 기능과 종류] (0) | 2021.05.26 |
[Linux] 디렉토리와 파일 사용하기 [디렉토리를 다루는 명령어] (0) | 2021.05.26 |
[Linux] 꼭 알아야 할 리눅스 기본 명령어 10가지 (0) | 2021.05.26 |
[Linux] 리눅스 쉘과 명령어 기초 (0) | 2021.05.26 |
댓글