리눅스 셸 이해하기
셸에 대해 더 알아봅니다.
셸의 종류
어떤 리눅스 배포판을 사용하던지 여러 종류의 셀이 기본적으로 제공됩니다. 그 중 기본값으로 가장 많이 사용되는 셸은 Bash 셸입니다. Bash 셸의 경우, 일반 프롬프트는 $
이며 루트 계정은 #
입니다. 즉 관리자 계정으로 접속했을 때는 셸이 #
모양으로 표시됨을 알 수 있습니다.
- root 계정 :
#
표시 - 일반 계정 :
$
표시
셸 선택하기
대부분 리눅스에서 사용하는 기본 셸은 Bash 입니다. 기본 셸을 확인하기 위해서 아래와 같은 명령어를 입력하실 수 있습니다.
$ who -u -H
$ ls -l /etc/passwd
$ grep 문자열 /etc/passwd
$ sh
$ exit
who [옵션] [경로]
: 로그인한 사용자의 모든 정보를 보여주는 명령어ls [옵션] [경로]
: 파일 또는 디렉터리 목록(list)을 보여주는 명령어grep [문자열] [경로]
: 특정 파일을 찾아 상응하는 문자열이 있을 경우, 그 라인을 출력하는 명령어(더 자세히 배울 예정)sh
: Bourne 셸(Bash와 호환되는 유닉스 버전 셸)을 실행시키는 명령어 (서브셸)exit
: 셸 종료 명령어
위 스크린샷에서 중요시 봐야할 부분은 grep
명령 결과의 마지막에 보이는 /bin/bash
부분과 sh
부분입니다. /bin/bash
는 해당 유저가 사용하는 기본 셸이 bash
임을 알려주는 것이고, sh
는 현재 셸 내부에 또다른 셸을 여는 것을 의미합니다. 셸 내부에 열린 셸은 서브셸 이라 하며 exit
명령어로 서브셸을 닫을 경우, 기존의 bash
셸로 전환됩니다.
기본적인 셸 명령
셸 명령어는 다양합니다. 아래와 같이 별도의 옵션이나 인수가 필요없는 명령어가 존재합니다.
$ date # 현재 요일 및 날짜와 시간을 보여줌
$ pwd # Print Working Directory. 현재 디렉터리
$ users # 접속한 본인 계정
반면에 명령어에 따라 옵션(option) 이나 인수(argument) 가 필수적인 명령어도 있고, 선택적인 명령어도 있습니다. 옵션은 명령어의 의미나 출력 형태를 다르게 할 때 쓰이고, 명령어의 인수는 명령의 수행 대상을 의미합니다.
명령어의 옵션과 인수
가장 자주 사용되는 옵션의 형태는 유닉스 스타일로 알려진 짧은 옵션입니다. 옵션은 -a와 같이 대시(-)문자 뒤에 알파벳 등을 사용합니다.
특히 여러 옵션을 사용할 경우에는 여러 옵션을 개별적으로 사용할 수도 있고 대시 뒤에 모두 붙여서 사용할 수도 있습니다. 아래는 그 예입니다.
$ ls -lat
$ ls -l -a -t
유닉스 스타일에 따라 두 명령어가 하는 역할은 정확히 같습니다. 그 외에도 GNU 타입과 BSD 스타일도 존재하나 설명은 한참 뒤인 포스트에 하겠습니다.
셸 변수
셸은 셸 변수를 사용하여 정보를 저장할 수 있습니다. 셸 변수는 문자열을 가지며, 셸 스크립트에서 특별한 값을 유지하기 위해 사용됩니다.
현재 사용중인 셸에서 사용중인 셸 변수를 보려면 프롬프트창에 옵션과 인수 없이 set
을 검색해주시면 됩니다.
환경변수
셸 변수와 유사하지만 특별한 면이 있는 환경변수(environment variable)는 보통의 셸 변수와는 다르게 현재 셸로부터 새로운 서브셸이 만들어질 떄 전달되는 변수를 말합니다. 환경변수는 현재 셸과 해당하는 셸의 서브셸에서 공통적으로 사용할 수 있는 전역 변수가 됩니다. 보통은 컨벤션으로 환경 변수명은 대문자로 작성합니다. 환경 변수 목록을 보기 위해서는 터미널에 단순히 env
또는 printenv
명령어를 입력하면 됩니다.
셸 변수를 설정하고 값을 지정하려면 아래 예와 같이 등호(=)를 사용하시면 됩니다. 여기에서는 변수 DUCKCHUN
를 선언하고 good 라는 값을 지정해보겠습니다.
$ DUCKCHUN=good
여기서 셸 변수를 환경변수로 만들려면 export
명령어를 사용하면 됩니다.
$ DUCKCHUN=good
$ export DUCKCHUN
이렇게 셸 변수를 환경변수로 만든다면 서브셸에서는 DUCKCHUN
환경변수를 참조할 수 있게 됩니다.
$ DUCKCHUN=good
$ export DUCKCHUN
$ sh
sh-5.1$ echo $DUCKCHUN
good
또한 위와 같이 unset
변수명 명령어를 이용하면 등록된 셸 변수를 삭제할 수도 있습니다.
자주 사용하는 디폴트 환경변수
아래는 자주 사용되는 디폴트 환경변수 입니다. 이것들 외에도 다양한 환경변수가 존재하니 필요할 때마다 찾아서 쓰는 것도 좋은 선택일 것 같습니다.
BASH
: bash 명령의 완전한 경로. 대개 /bin/bashHISTCMD
: 히스토리 목록에서 가장 최근의 명령을 표시하는 번호HOME
: 홈 디렉터리MAIL
: 메일 박스 디렉터리에 해당하는 파일. 보통 /var/spool/mail/usernameOLDPWD
: cd 명령을 수행하기 전 직전의 작업 디렉터리PATH
: 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록. 디렉터리는 콜론(:)으로 구분되어 설정됨PWD
: 현재 작업 디렉터리PPID
: 셸의 부모 프로세스 IDSHELL
: 사용 중인 기본 셸USER
: 사용자 계정UID
: 현재 사용자 ID
참고
- UNIX 시스템(한국방송통신대학교 교재) - 김희천, 김진욱 공저