Bash, Zsh 및 기타 Linux 셸의 차이점은 무엇입니까?

게시 됨: 2022-01-29

대부분의 Linux 배포판에는 기본적으로 bash 셸이 포함되어 있지만 다른 셸 환경으로 전환할 수도 있습니다. Zsh는 특히 인기 있는 대안이며 ash, dash, fish 및 tcsh와 같은 다른 셸이 있습니다. 그러나 차이점은 무엇이며 왜 그렇게 많은가요?

쉘은 무엇을합니까?

명령줄에서 로그인하거나 Linux에서 터미널 창을 시작하면 시스템이 셸 프로그램을 시작합니다. 셸은 명령줄 환경을 확장하는 표준 방법을 제공합니다. 원하는 경우 기본 셸을 다른 셸로 교체할 수 있습니다.

첫 번째 셸 환경은 Bell Labs에서 개발되어 1971년에 출시된 Thompson Shell이었습니다. 이후로 Shell 환경은 다양한 새로운 기능, 기능 및 속도 개선 사항을 추가하면서 개념을 기반으로 구축되었습니다.

예를 들어, Bash는 명령 및 파일 이름 완성, 고급 스크립팅 기능, 명령 기록, 구성 가능한 색상, 명령 별칭 및 첫 번째 셸이 릴리스된 1971년에는 사용할 수 없었던 다양한 기타 기능을 제공합니다.

쉘은 또한 다양한 시스템 서비스에서 백그라운드에서 사용됩니다. Linux 배포판에는 셸 스크립트로 작성된 많은 기능이 포함되어 있습니다. 이러한 스크립트는 쉘 환경을 통해 실행되는 명령 및 기타 고급 쉘 스크립팅 기능입니다.

Bash로 이어지는 셸: sh, csh, tsh 및 ksh

관련: 유닉스란 무엇이며 왜 중요한가요?

현대 쉘의 가장 눈에 띄는 조상은 "sh"라고도 알려진 Bourne 쉘로, AT&T의 Bell Labs에서 근무한 제작자 Stephen Bourne의 이름을 따서 명명되었습니다. 1979년에 출시되었으며 다른 기능과 함께 명령 대체, 파이핑, 변수, 조건 테스트 및 루핑을 지원하기 때문에 Unix의 기본 명령 인터프리터가 되었습니다. 사용자를 위한 많은 사용자 정의를 제공하지 않았으며 별칭, 명령 완성 및 셸 기능과 같은 최신 기능을 지원하지 않았습니다(이 마지막 기능이 결국 추가되었지만).

광고

C 쉘 또는 "csh"는 1970년대 후반 버클리 캘리포니아 대학교의 Bill Joy에 의해 개발되었습니다. 별칭(긴 명령에 대한 바로 가기), 작업 관리 기능, 명령 기록 등과 같이 사용자가 시스템을 제어할 수 있는 대화형 요소를 많이 추가했습니다. 이것은 Unix 운영 체제 자체가 작성된 C 프로그래밍 언어를 모델로 했습니다. 이는 또한 Bourne 셸 사용자가 C를 배워야 명령을 입력할 수 있다는 것을 의미했습니다. 또한 csh에는 오랜 기간 동안 사용자와 제작자가 모두 해결해야 하는 버그가 꽤 있었습니다. 사람들은 비대화형 명령을 더 잘 처리하기 때문에 스크립트에 Bourne 셸을 사용하게 되었지만 일반적인 사용에는 C 셸을 사용했습니다.

시간이 지남에 따라 많은 사람들이 C 셸의 버그를 수정하고 기능을 추가하여 "tcsh"로 알려진 개선된 csh 버전으로 절정에 이르렀습니다. 그러나 csh는 여전히 Unix 기반 컴퓨터에서 기본이었고 일부 비표준 기능을 추가했습니다. Bell Labs의 David Korn은 Bourne 셸의 언어와 역호환되지만 csh 셸의 많은 기능을 추가하여 상황을 개선하려는 KornShell 또는 "ksh"에서 작업했습니다. 1983년에 출시되었지만 독점 라이선스 하에 있었습니다. 다양한 오픈 소스 라이선스로 출시된 2000년대까지는 자유 소프트웨어가 아니었습니다.

배쉬의 탄생

Unix 또는 POSIX용 휴대용 운영 체제 인터페이스는 바쁜 독점 csh 구현에 대한 또 다른 응답이었습니다. 명령 해석을 위한 표준을 성공적으로 만들었으며(무엇보다도) 결국 KornShell의 많은 기능을 반영했습니다. 동시에 GNU 프로젝트는 유닉스와 호환되는 무료 운영 체제를 만들려고 했습니다. GNU 프로젝트는 무료 운영 체제의 일부로 무료 소프트웨어 셸을 개발하고 "Bourne Again Shell" 또는 "bash"라는 이름을 지정했습니다.

Bash는 1989년 첫 릴리스 이후 수십 년 동안 개선되었지만 오늘날 대부분의 Linux 배포판에서 여전히 기본 셸입니다. 또한 Apple macOS의 기본 셸이며 Microsoft Windows 10에 설치할 수 있습니다.

최신 쉘: ash, dash, zsh 및 fish

Linux 커뮤니티는 이후 몇 년 동안 Bash에 정착했지만 Bash가 28년 전에 처음 출시되었을 때 개발자들은 새로운 셸 생성을 멈추지 않았습니다.

광고

Kenneth Almquist는 Almquish shell, A Shell, "ash" 또는 때로는 그냥 "sh"로 알려진 Bourne 쉘 클론을 만들었습니다. 또한 POSIX와 호환되며 Unix의 다른 분기인 BSD의 기본 셸이 되었습니다. ash 셸은 bash보다 가볍기 때문에 임베디드 Linux 시스템에서 널리 사용됩니다. BusyBox가 설치된 루팅된 Android 휴대전화 또는 BusyBox 소프트웨어 제품군이 있는 다른 기기가 있는 경우 ash의 코드를 사용하고 있습니다.

데비안은 ash를 기반으로 하는 쉘 환경을 개발했고 그것을 "dash"라고 불렀습니다. POSIX 호환 및 경량으로 설계되었으므로 Bash보다 빠르지만 모든 기능이 있는 것은 아닙니다. Ubuntu는 대시 셸을 비대화형 작업의 기본 셸로 사용하여 셸 스크립트 및 백그라운드에서 실행되는 기타 작업의 속도를 높입니다. 그러나 Ubuntu는 여전히 대화형 셸에 bash를 사용하므로 사용자는 여전히 모든 기능을 갖춘 대화형 환경을 사용할 수 있습니다.

가장 인기 있는 최신 셸 중 하나는 Z 셸 또는 "zsh"입니다. 1990년 Paul Falstad가 만든 zsh는 bash에서 찾을 수 있는 기능과 그 이상을 포함하는 Bourne 스타일의 셸입니다. 예를 들어, zsh에는 맞춤법 검사, 로그인/로그아웃 감시 기능, 바이트코드와 같은 일부 내장 프로그래밍 기능, 구문의 과학적 표기법 지원, 부동 소수점 산술 허용 및 더 많은 기능이 있습니다.

또 다른 새로운 셸은 2005년에 출시된 Friendly Interactive Shell 또는 “fish”입니다. 이 셸에는 배우기 쉽도록 설계된 고유한 명령줄 구문이 있지만 Bourne 셸이나 C 셸에서 파생되지 않았습니다. 흥미로운 아이디어지만 물고기를 사용하여 배운 내용이 bash 및 기타 Bourne 파생 쉘을 사용하는 데 반드시 도움이 되는 것은 아닙니다.

어떤 것을 선택해야 할까요? (그리고 Zsh가 인기 있는 이유)

쉘을 선택할 필요가 없습니다. 운영 체제는 기본 셸을 선택하고 그 선택은 거의 항상 bash입니다. Linux 배포판(심지어 Mac) 앞에 앉으면 거의 항상 bash 셸 환경을 갖게 됩니다. Bash에는 몇 가지 고급 기능이 있지만 쉘 스크립트를 프로그래밍하지 않는 한 사용하지 않을 것입니다.

임베디드 Linux 시스템이나 BSD 시스템에서는 결국 ash 셸이 됩니다. 그러나 ash는 Bourne 기반 셸이며 bash와 대부분 호환됩니다. 이 경량 쉘에서는 일부 고급 스크립팅 기능을 사용할 수 없지만 bash 사용에 대한 모든 지식은 ash 또는 dash 쉘 사용으로 이전됩니다.

광고

마주하게 될 거의 모든 셸은 Bourne 기반이며 zsh를 포함하여 유사하게 작동합니다.

이것이 zsh가 인기 있는 이유입니다. 이 최신 쉘은 bash와 호환되지만 더 많은 기능을 포함합니다. zsh 셸은 기본 제공 철자 수정, 향상된 명령줄 완성 기능, 셸의 플러그인 역할을 하는 로드 가능한 모듈, 명령 대신 명령줄에서 파일 이름 또는 기타 항목의 별칭을 지정할 수 있는 전역 별칭을 제공합니다. 더 많은 테마 지원. bash와 비슷하지만 많은 추가 기능, 추가 기능 및 구성 가능한 옵션이 있어 명령줄에서 많은 시간을 보낸다면 감사할 수 있습니다.

bash에 익숙하다면 다른 구문을 배우지 않고도 zsh로 전환할 수 있습니다. 추가 기능만 얻을 수 있습니다. zsh에 익숙하다면 다른 구문을 배우지 않고도 bash로 전환할 수 있습니다.

"Oh My ZSH"는 zsh 플러그인을 보다 쉽게 ​​활성화하고 미리 만들어진 테마 간에 전환하여 몇 시간을 조정하지 않고도 zsh 셸을 빠르게 사용자 지정할 수 있도록 도와주는 도구입니다.

다른 껍질도 있습니다. 예를 들어, tcsh 쉘은 여전히 ​​주변에 있으며 여전히 옵션입니다. FreeBSD는 tsch를 기본 루트 셸로 사용하고 ash를 기본 대화형 셸로 사용합니다. C 프로그래밍을 정기적으로 사용하는 경우 tsch가 더 적합할 수 있습니다. 그러나 bash 또는 zsh만큼 일반적으로 사용되는 것은 아닙니다.

쉘 간 전환 방법

새로운 셸로 쉽게 전환하여 사용해 볼 수 있습니다. Linux 배포판의 패키지 관리자에서 셸을 설치하고 명령을 입력하여 셸을 시작하기만 하면 됩니다.

광고

예를 들어 Ubuntu에서 zsh를 시도한다고 가정해 보겠습니다. 다음 명령을 실행하여 설치하고 실행합니다.

 sudo apt 설치 zsh

zsh

그러면 zsh 쉘에 앉아 있을 것입니다. 쉘에서 나가서 현재 쉘로 돌아가려면 " exit "를 입력하십시오.

이것은 일시적일 뿐입니다. 새 터미널 창을 열거나 명령줄에서 시스템에 로그인할 때마다 기본 셸이 표시됩니다. 로그인할 때 표시되는 셸(로그인 셸이라고 함)을 변경하려면 일반적으로 chsh 또는 "셸 변경" 명령을 사용할 수 있습니다.

이 명령을 사용하려면 먼저 which 명령을 사용하여 셸의 전체 경로를 찾아야 합니다. 예를 들어, zsh 쉘로 변경하고 싶다고 가정해 봅시다. 다음 명령을 실행합니다.

 어떤 zsh

Ubuntu에서 이것은 zsh 바이너리가 /usr/bin/zsh에 저장되어 있음을 알려줍니다.

다음 명령을 실행하고 암호를 입력하면 새 로그인 셸을 선택하라는 메시지가 표시됩니다.

광고

위의 명령에 따라 /usr/bin/zsh 를 입력합니다. 그러면 chsh 명령을 실행하고 다시 변경할 때까지 zsh 셸이 기본값이 됩니다.