Sh와 Bash의 차이점
이 튜토리얼은 쉘이 무엇인지, 현재 사용되는 쉘을 알고, 사용 가능한 모든 쉘 목록을 확인하고, sh
와 bash
의 차이점에 대해 설명합니다.
쉘이란 무엇입니까?
쉘은 명령을 받는 컴퓨터 프로그램입니다. 또한 명령을 해석하고 처리를 위해 운영 체제에 전달합니다. 사용자가 운영 체제와 상호 작용할 수 있도록 사용자와 운영 체제 간의 인터페이스 역할을 합니다.
대부분의 Linux 운영 체제에는 최소한 하나의 셸 프로그램이 함께 제공됩니다. 쉘 프로그램은 Bash
, Dash
또는 둘 다입니다.
현재 쉘을 찾는 방법
현재 Linux 시스템에서 사용 중인 쉘을 알기 위해 /etc/passwd
파일을 읽을 수 있습니다. 사용자 계정 정보가 저장되어 있기 때문입니다. 현재 쉘을 알기 위해 아래 명령어를 실행해보자.
grep
명령은 지정된 파일에서 문자열을 검색하는 데 사용됩니다. 아래 명령은 /etc
에 있는 passwd
파일에서 사용자 fumba
를 검색합니다. grep
명령이 일치하는 항목을 찾으면 결과가 포함된 행을 인쇄합니다.
$ grep fumba /etc/passwd
W는 사용자 fumba
의 기본 셸이 bash임을 아래 출력에서 볼 수 있습니다.
fumba:x:1000:1000:,,,:/home/fumba:/bin/bash
사용 가능한 쉘을 찾는 방법
Linux 시스템에서 사용 가능한 모든 쉘은 /etc/shells
파일에 나열됩니다. 아래 cat
명령을 사용하여 /etc/shells
파일의 내용을 표시합니다.
cat /etc/shells
아래 출력은 시스템에서 사용 가능한 모든 셸 목록을 표시합니다.
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
sh
명령 및 사용
sh
는 Bourne 쉘의 명령 이름입니다. Unix 계열 운영 체제를 위한 표준 명령 언어 인터프리터입니다. 명령줄 문자열, 표준 입력 또는 지정된 파일에서 명령을 실행합니다. sh
는 POSIX 표준을 따릅니다.
POSIX(Portable Operating System Interface)는 운영 체제 간의 호환성을 유지하기 위해 IEEE Computer Society에서 지정한 표준 제품군입니다. 이러한 표준은 일단 표준을 따랐다면 여러 운영 체제용 크로스 플랫폼 소프트웨어를 개발하는 데 도움이 됩니다.
대부분의 시스템에는 /bin/sh
파일이 있지만 이는 심볼릭 링크이며 sh
를 호출하지 않습니다. Ubuntu에서 /bin/sh
는 Dash
셸에 대한 심볼릭 링크입니다. 아래 명령을 실행하여 확인할 수 있습니다.
$ file -h /bin/sh
아래 출력은 /bin/sh
가 dash
에 대한 심볼릭 링크임을 보여줍니다.
/bin/sh: symbolic link to dash
스크립트에 #!/bin/sh
를 추가해 보겠습니다.
#!/bin/sh
printf "sh points to dash!\n"
위의 스크립트는 /bin/sh
를 인터프리터로 지정합니다. 그러나 /bin/sh
는 dash
를 가리키므로 dash
셸은 스크립트를 인터프리터로 실행합니다.
Bash
와 그 사용법
Bash
는 Bourne Again Shell 의미합니다. sh
와 마찬가지로 명령 언어 프로세서이자 쉘입니다. 그러나 bash는 sh
의 상위 집합입니다. sh
의 기능을 지원하며 더 많은 확장 기능과 기능을 제공합니다. ‘Bash’는 Linux 운영 체제의 기본 셸입니다.
초기에 Bash
는 POSIX 표준을 준수했지만 시간이 지남에 따라 더 많은 기능과 확장이 추가되면서 POSIX 표준을 따르지 않게 되었습니다. 그러나 bash는 아래와 같이 -posix
플래그를 설정하여 POSIX 모드에서 계속 사용할 수 있습니다.
$ bash --posix
POSIX 표준을 준수하는 bash 스크립트를 작성해 보겠습니다.
#!/bin/bash
set -o posix
printf "we are using bash shell!\n"
bash
인터프리터는 첫 번째 줄 #!/bin/bash
에 지정되었으므로 위의 스크립트를 실행합니다.
set
명령은 스크립트에서 옵션을 활성화합니다. 이 경우 bash 셸이 POSIX 모드에서 스크립트를 실행할 수 있습니다.