0%

Linux shell

리눅스에서 사용되는 shell의 종류와 bash에 대해 정리합니다.

shell이란

셀(shell)이란 사람이 사용하는 명령어를 프로그램이 실행할 수 있도록 만들어주는 인터페이스이다. 좀 더 쉽게 설명하면 터미널에서 사용하는 명령어들은 전부 쉘 언어이다. 쉘에서는 프로그램에 직접 명령어를 전달할 수도 있고, 내부에서 함수도 짤 수 있으며, 또 초기 환경 셋팅도 가능하다.

shell 종류

요즘은 대부분 bash를 쓰지만, 쉘에는 생각보다 종류가 많다. 각 이름들은 다음과 같다.

  • Bourne shell (sh) : 최초로 쓰인 쉘, 스크립트만 지원
  • C shell (csh or tcsh): C 언어 위주의 쉘
  • korn shell (ksh): sh을 확장한 쉘, sh의 명령어 + 히스토리, 작업제어, alias 등이 추가
  • Z shell (zsh): ksh보다 개선된 기능을 가진 쉘
  • Bourne again shell (bash): 가장 많이 쓰이는 쉘, sh 호환 가능

chsh

만약 쉘을 변경하여 사용하고 싶다면 터미널에 chsh를 입력하면 된다. 뒤에 -s 옵션을 붙인 후 바꾸려는 쉘을 입력하면 바로 변경 가능하다. 쉘을 바꿀 때는 해당 서버의 비밀번호가 요구된다. 예시는 아래와 같다.

1
2
3
$ chsh -s /bin/sh
암호 : *******
Shell changed

alias 별명=기존명령어

해당 명령어는 별칭으로 사용하고자 하는 명령어를 설정하며, 쉘 중에서 bash, sh에서만 가능하다. 예시를 보자.

1
$ alias up=uptime

위의 명령어를 터미널에 입력하면 uptime이라는 명령어는 up만 입력해도 사용 가능하다.

prompt 설정

터미널에서 사용하는 리눅스 프롬프트도 원하는 형태로 변경할 수 있다. 터미널에 아래와 같이 입력해보자.

1
$ PS1='[\d]\u@\h:\w'

위 패턴은 정규표현식이며, 해석하면 다음과 같다. [날짜]사용자@호스트:지금 사용중인 디렉토리
만약 터미널을 다시 껐다가 켜도 해당 프롬프트를 유지하고 싶다면 환경변수로 셋팅하면 된다.

1
2
$ vi /etc/bashrc
echo 'PS1=[\d]\u@\h:\w'

enviroment variable

환경 변수는 해당 서버의 운영체제에서 명령어를 실행할 때 참조하는 변수이다. 지정된 변수들은 $변수이름으로 사용된다.
현재 서버에서 지정된 환경 변수는 아래의 명령어를 입력하여 볼 수 있다.

1
2
3
4
5
6
7
8
$ env
TERM_PROGRAM=터미널 프로그램 종류
USER=사용자 이름
PATH=저장된 실행파일 경로들
LANG=지원되는 언어
SHELL=사용되는 쉘 이름
HOME=사용자 홈 디렉토리
OSTYPE=운영체제 종류

위의 예시는 환경 변수들 중에 몇 가지만 가져온 것이며, env를 입력하면 위와 같이 환경 변수들을 볼 수 있다.
만약 환경 변수를 새로 지정하려면 어떻게 해야 할까? 바로 export를 사용하여 선언한다.

1
$ export 변수이름=변수 값

하지만 위 방법은 해당 서버가 재부팅되면 변수가 사라진다. 재부팅되어도 계속 변수를 유지하려면 어떻게 하면 될까?
bashrc에서 변수를 해당 명령어를 추가한 후 적용하면 된다. 적용은 재부팅을 하거나 source라는 명령어를 사용한다.

1
2
3
$ vi ~/.bashrc
export 변수이름=변수 값
$ source ~/.bashrc

path variable

path는 해당 서버에 깔려 있는 프로그램이 어디 디렉토리에 존재하는지 경로를 설정하는 변수이다. 현재 추가되어 있는 경로를 보고 싶다면 아래의 명령어를 입력해보자.

1
2
$ echo $PATH
:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

각 경로들은 콜론(:)으로 나눠져 있으며, 해당 경로에 존재하는 프로그램은 절대경로를 쓰지 않고도 바로 실행이 가능하다.
만약 프로그램의 path를 알고 싶다면 아래와 같이 입력해보자.

1
2
$ which java
/usr/bin/java

위의 결과는 명령어 which를 통해서 java 실행파일의 절대 경로를 보여준 예시이다. which는 경로가 있는 실행파일들의 위치를 보여준다.