2DC BLOG

리눅스 셸 이해하기

05/10/2024

셸에 대해 더 알아봅니다.

os
KNOU

셸의 종류

어떤 리눅스 배포판을 사용하던지 여러 종류의 셀이 기본적으로 제공됩니다. 그 중 기본값으로 가장 많이 사용되는 셸은 Bash 셸입니다. Bash 셸의 경우, 일반 프롬프트는 $이며 루트 계정은 # 입니다. 즉 관리자 계정으로 접속했을 때는 셸이 # 모양으로 표시됨을 알 수 있습니다.

  • root 계정 : # 표시
  • 일반 계정 : $ 표시
image

셸 선택하기

대부분 리눅스에서 사용하는 기본 셸은 Bash 입니다. 기본 셸을 확인하기 위해서 아래와 같은 명령어를 입력하실 수 있습니다.

$ who -u -H

$ ls -l /etc/passwd

$ grep 문자열 /etc/passwd

$ sh

$ exit
  • who [옵션] [경로]: 로그인한 사용자의 모든 정보를 보여주는 명령어
  • ls [옵션] [경로] : 파일 또는 디렉터리 목록(list)을 보여주는 명령어
  • grep [문자열] [경로] : 특정 파일을 찾아 상응하는 문자열이 있을 경우, 그 라인을 출력하는 명령어(더 자세히 배울 예정)
  • sh : Bourne 셸(Bash와 호환되는 유닉스 버전 셸)을 실행시키는 명령어 (서브셸)
  • exit : 셸 종료 명령어
image

위 스크린샷에서 중요시 봐야할 부분은 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을 검색해주시면 됩니다.

image

환경변수

셸 변수와 유사하지만 특별한 면이 있는 환경변수(environment variable)는 보통의 셸 변수와는 다르게 현재 셸로부터 새로운 서브셸이 만들어질 떄 전달되는 변수를 말합니다. 환경변수는 현재 셸과 해당하는 셸의 서브셸에서 공통적으로 사용할 수 있는 전역 변수가 됩니다. 보통은 컨벤션으로 환경 변수명은 대문자로 작성합니다. 환경 변수 목록을 보기 위해서는 터미널에 단순히 env 또는 printenv 명령어를 입력하면 됩니다.

image

셸 변수를 설정하고 값을 지정하려면 아래 예와 같이 등호(=)를 사용하시면 됩니다. 여기에서는 변수 DUCKCHUN를 선언하고 good 라는 값을 지정해보겠습니다.

$ DUCKCHUN=good

여기서 셸 변수를 환경변수로 만들려면 export 명령어를 사용하면 됩니다.

$ DUCKCHUN=good

$ export DUCKCHUN

이렇게 셸 변수를 환경변수로 만든다면 서브셸에서는 DUCKCHUN 환경변수를 참조할 수 있게 됩니다.

$ DUCKCHUN=good

$ export DUCKCHUN

$ sh

sh-5.1$ echo $DUCKCHUN
good
image

또한 위와 같이 unset 변수명 명령어를 이용하면 등록된 셸 변수를 삭제할 수도 있습니다.

자주 사용하는 디폴트 환경변수

아래는 자주 사용되는 디폴트 환경변수 입니다. 이것들 외에도 다양한 환경변수가 존재하니 필요할 때마다 찾아서 쓰는 것도 좋은 선택일 것 같습니다.

  • BASH : bash 명령의 완전한 경로. 대개 /bin/bash
  • HISTCMD : 히스토리 목록에서 가장 최근의 명령을 표시하는 번호
  • HOME : 홈 디렉터리
  • MAIL : 메일 박스 디렉터리에 해당하는 파일. 보통 /var/spool/mail/username
  • OLDPWD : cd 명령을 수행하기 전 직전의 작업 디렉터리
  • PATH : 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록. 디렉터리는 콜론(:)으로 구분되어 설정됨
  • PWD : 현재 작업 디렉터리
  • PPID : 셸의 부모 프로세스 ID
  • SHELL : 사용 중인 기본 셸
  • USER : 사용자 계정
  • UID : 현재 사용자 ID

참고

  1. UNIX 시스템(한국방송통신대학교 교재) - 김희천, 김진욱 공저