리눅스에서 사용되는 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 | $ chsh -s /bin/sh |
alias 별명=기존명령어
해당 명령어는 별칭으로 사용하고자 하는 명령어를 설정하며, 쉘 중에서 bash, sh에서만 가능하다. 예시를 보자.
1 | $ alias up=uptime |
위의 명령어를 터미널에 입력하면 uptime
이라는 명령어는 up
만 입력해도 사용 가능하다.
prompt 설정
터미널에서 사용하는 리눅스 프롬프트도 원하는 형태로 변경할 수 있다. 터미널에 아래와 같이 입력해보자.
1 | $ PS1='[\d]\u@\h:\w' |
위 패턴은 정규표현식이며, 해석하면 다음과 같다. [날짜]사용자@호스트:지금 사용중인 디렉토리
만약 터미널을 다시 껐다가 켜도 해당 프롬프트를 유지하고 싶다면 환경변수로 셋팅하면 된다.
1 | $ vi /etc/bashrc |
enviroment variable
환경 변수는 해당 서버의 운영체제에서 명령어를 실행할 때 참조하는 변수이다. 지정된 변수들은 $변수이름
으로 사용된다.
현재 서버에서 지정된 환경 변수는 아래의 명령어를 입력하여 볼 수 있다.
1 | $ env |
위의 예시는 환경 변수들 중에 몇 가지만 가져온 것이며, env
를 입력하면 위와 같이 환경 변수들을 볼 수 있다.
만약 환경 변수를 새로 지정하려면 어떻게 해야 할까? 바로 export
를 사용하여 선언한다.
1 | $ export 변수이름=변수 값 |
하지만 위 방법은 해당 서버가 재부팅되면 변수가 사라진다. 재부팅되어도 계속 변수를 유지하려면 어떻게 하면 될까?bashrc
에서 변수를 해당 명령어를 추가한 후 적용하면 된다. 적용은 재부팅을 하거나 source
라는 명령어를 사용한다.
1 | $ vi ~/.bashrc |
path variable
path
는 해당 서버에 깔려 있는 프로그램이 어디 디렉토리에 존재하는지 경로를 설정하는 변수이다. 현재 추가되어 있는 경로를 보고 싶다면 아래의 명령어를 입력해보자.
1 | $ echo $PATH |
각 경로들은 콜론(:)으로 나눠져 있으며, 해당 경로에 존재하는 프로그램은 절대경로를 쓰지 않고도 바로 실행이 가능하다.
만약 프로그램의 path를 알고 싶다면 아래와 같이 입력해보자.
1 | $ which java |
위의 결과는 명령어 which
를 통해서 java 실행파일의 절대 경로를 보여준 예시이다. which
는 경로가 있는 실행파일들의 위치를 보여준다.