Unix 쉘
Unix shellUnix 쉘은 Unix 계열 운영 체제용 명령줄 사용자 인터페이스를 제공하는 명령줄 인터프리터 또는 셸입니다.셸은 대화형 명령어 언어이자 스크립트 언어이며 운영 체제에서 [2]셸 스크립트를 사용하여 시스템의 실행을 제어하기 위해 사용됩니다.
사용자는 일반적으로 터미널 에뮬레이터를 사용하여 Unix 쉘과 상호 작용하지만 서버 시스템에서는 시리얼 하드웨어 연결 또는 시큐어 셸을 통한 직접 조작이 일반적입니다.모든 Unix 쉘은 조건 테스트 및 반복을 위한 파일 이름 와일드카드, 파이프, 문서, 명령어 대체, 변수 및 제어 구조를 제공합니다.
개념.
셸이라는 용어의 가장 일반적인 의미는 사용자가 명령을 입력하기 위해 사용하는 모든 프로그램을 의미합니다.셸은 기본 운영 체제의 세부 정보를 숨기고 해당 운영 체제에서 실행되는 프로그램이 사용하는 운영 체제의 수준인 운영 체제의 애플리케이션 프로그래밍 인터페이스의 기술적 세부 정보를 관리합니다.
Unix와 같은 운영체제에서는 일반적으로 인터랙티브세션용으로 명령줄 인터프리터를 선택할 수 있습니다.사용자가 대화식으로 시스템에 로그인하면 세션 기간 동안 셸 프로그램이 자동으로 실행됩니다.각 사용자에 맞게 커스터마이즈할 수 있는 셸 유형은 일반적으로 사용자 프로파일에 저장됩니다(예: 로컬).passwd 파일 또는 NIS나 LDAP 등의 분산 구성 시스템에서 사용할 수 있습니다.단, 사용자는 사용 가능한 다른 셸을 대화형으로 실행할 수 있습니다.
MacOS와 같은 윈도우 시스템이 있는 호스트에서는 일부 사용자가 셸을 직접 사용하지 않을 수 있습니다.Unix 시스템에서 셸은 지금까지 윈도 시스템을 시작하고 네트워킹을 설정하며 기타 많은 필수 기능을 구성하는 프로그램을 포함하여 시스템 시작 스크립트의 구현 언어였습니다.그러나 일부 시스템 벤더는 기존의 셸 기반 스타트업 시스템(init)을 systemd와 같은 다른 접근법으로 대체했습니다.
초기 조개껍질
최초의 Unix 쉘은 1971년부터 [3]1975년까지 Bell Labs의 Ken Thompson에 의해 작성되어 Unix 버전1 ~ 6과 함께 배포된 Thompson 쉘입니다.현대 표준에서는 기초적이지만 배관, 간단한 제어 구조 등 이후의 모든 Unix 쉘에 공통되는 많은 기본 기능을 도입했습니다.if
그리고.goto
및 파일명 와일드카드화.현재 사용되지는 않지만 일부 고대 UNIX 시스템의 일부로 사용할 수 있습니다.
1965년 미국의 소프트웨어 엔지니어 Glenda Schroeder에 의해 개발된 Multics 쉘을 본뜬 것입니다.Schroeder의 Multics 쉘은 Louis Pouzin이 Multics Team에 보여준 RUNCOM 프로그램을 본떠 만든 것입니다.일부 Unix 컨피규레이션파일(예를 들어 ".vimrc")의 "rc" 서픽스는 Unix [1][4]쉘의 RUNCOM 조상의 일부입니다.
PWB 쉘 또는 Mashey 쉘은 Thompson 쉘의 상위 호환 버전으로, John Mashey와 다른 사람들에 의해 강화되어 1975-1977년 경 Programmer's Workbench UNIX와 함께 배포되었습니다.특히 대규모 공유 컴퓨팅 센터에서 셸 프로그래밍을 실용화하는 데 초점을 맞췄습니다.셸 변수($PATH로 진화한 검색 경로 메커니즘을 포함한 환경 변수의 필수 요소), 사용자가 실행할 수 있는 셸 스크립트 및 인터럽트 처리가 추가되었습니다.제어구조가 if/goto에서 if/then/else/endif, switch/breaksw/endsw 및 while/end/break/continue로 확장되었습니다.셸 프로그래밍이 널리 보급됨에 따라 이러한 외부 명령어는 성능을 위해 셸 자체에 통합되었습니다.
그러나 초기 Unix 쉘 중 가장 널리 배포되고 영향을 미친 것은 Bourne 쉘과 C 쉘이었습니다.두 셸 모두 확장된 피쳐 세트를 [5]가진 많은 파생 셸 및 작업 유사 셸의 코딩 기반 및 모델로 사용되어 왔습니다.
본 셸
Bourne 쉘, sh는 Bell [6]Labs의 Stephen Bourne이 만든 새로운 Unix 쉘이었습니다.1979년 UNIX 버전7의 셸로서 배포된 이 제품은 이후의 모든 Unix 쉘에서 공통으로 간주되는 나머지 기본 기능들을 도입하였습니다.여기에는 문서, 명령어 대체, 보다 일반적인 변수, 보다 광범위한 내장 제어 구조 등이 포함됩니다.블록의 끝을 표시하기 위한 반전 키워드의 사용을 포함한 언어는 ALGOL [7]68의 영향을 받았습니다.지금까지 Bourne 쉘 프로그램명은 sh이고 UNIX 파일시스템 계층 내 경로는 /bin/sh 입니다.그러나 다양한 개선사항과 추가 기능을 갖춘 호환성이 있는 많은 워크라이크도 이용할 수 있습니다.많은 시스템에서 sh는 다음 중 하나의 대안으로 심볼릭링크 또는 하드링크일 수 있습니다.
- Almquist 쉘(애쉬): Bourne Shell의 BSD 라이선스를 대체하기 위해 작성되었습니다.자원이 제한된 환경에서 자주 사용됩니다.FreeBSD, NetBSD(및 그 파생 모델)의 sh는 POSIX 준거용으로 강화된 애쉬를 기반으로 합니다.
- Busybox: 소형 및 임베디드 시스템용 Unix 유틸리티 세트. 2개의 셸을 포함합니다.Ash는 Almquist 쉘의 파생형이며, Hush는 Bourne 쉘의 독립 구현입니다.
- Debian Almquist 쉘(대시): Debian과 Ubuntu의 화산재를 현대적으로 대체하는 제품
- Bourne-Again 쉘(bash): GNU 프로젝트의 일부로 작성되어 Bourne 쉘 기능의 슈퍼셋을 제공합니다.이 셸은 설치되어 있으며 대부분의 Linux 시스템에서 사용자에게 기본 대화형 셸입니다.
- KornShell (ksh): Bell Labs에서 작업하는 동안 Bourne 쉘 소스를[8] 기반으로 David Korn이 작성했습니다.
- 퍼블릭 도메인 Korn 쉘(pdksh)
- MirBSD Korn 쉘(mksh): OpenBSD /bin/ksh 및 pdksh의 후속 제품으로, MirOS BSD의 일부로 개발되었습니다.
- Z 쉘(zsh): bash와 하위 호환성이 있는 비교적 최신 셸.Kali Linux에서는 2020.4 이후, macOS에서는 10.15 Catalina 이후 기본 셸입니다.
POSIX 표준은 표준 셸을 Bourne 셸의 확장 버전인 Korn 셸의 엄밀한 서브셋으로 지정합니다.사용자의 관점에서 Bourne 쉘은 활성화 시 특유의 기본 명령줄 프롬프트 문자인 달러 기호($)에 의해 즉시 인식되었습니다.
C 쉘
C 쉘, csh는 제어 구조와 표현 문법을 포함한 C 프로그래밍 언어를 기반으로 모델링되었습니다.Bill Joy가 캘리포니아 대학교 버클리 대학원생으로 집필했으며 BSD [9]Unix와 함께 널리 배포되었습니다.
또한 C 쉘은 이력 및 편집 메커니즘, 에일리어스, 디렉토리 스택, 칠드 표기법, cdpath, 작업 제어 및 경로 해시를 포함한 인터랙티브 작업에 많은 기능을 도입했습니다.많은 시스템에서 csh는 Joy 오리지널 버전의 개량 버전인 TENEX C 쉘(tcsh)에 대한 심볼릭 링크 또는 하드 링크일 수 있습니다.CSH의 인터랙티브 기능은 대부분의 다른 셸에 복사되어 있지만 언어 구조는 널리 복사되어 있지 않습니다.유일한 유사 제품은 Nicole Hamilton이 작성한Hamilton C 쉘로 1988년 OS/2에 처음 배포되었으며 1992년 [10]이후 Windows에 배포되었습니다.
컨피규레이션파일
셸은 다양한 상황에서 구성 파일을 읽습니다.이 파일들은 보통 셸용 명령어를 포함하고 있으며 로드 시 실행됩니다.이 파일들은 $PATH와 같이 셸의 동작과 외관을 제어하는 실행 파일을 찾는 데 사용되는 중요한 변수들을 설정하는데 사용됩니다.이 섹션의 표에는 일반적인 [11]셸의 컨피규레이션파일이 표시되어 있습니다.
컨피규레이션파일 | 쉿 | ksh | csh | tcsh | 때리다 | zsh |
---|---|---|---|---|---|---|
/etc/.filename | 로그 인. | 로그 인. | ||||
/etc/csh.cshrc | 네. | 네. | ||||
/etc/csh.disples | 로그 인. | 로그 인. | ||||
~/.tcshrc | 네. | |||||
~/.cshrc | 네. | 네[a] | ||||
~/etc/ksh.kshrc | int. | |||||
/etc/sh.shrc | int.[b] | |||||
$ENV (일반적으로 ~/.kshrc)[12] | int.[c][d] | int. | int.[e] | |||
~/.2011년 | 로그 인. | 로그 인. | ||||
~/.로그아웃 | 로그 인. | 로그 인. | ||||
/etc/profile | 로그 인. | 로그 인. | 로그 인. | 로그인[f] | ||
~/.프로파일 | 로그 인. | 로그 인. | 로그인[g] | 로그인[f] | ||
~/.prefile_profile | 로그인[g] | |||||
~/.contract_contractions_contracts | 로그인[g] | |||||
~/.disc_logout | 로그 인. | |||||
~/.twrcrc | 내부 + n/interface | |||||
/etc/zhenv | 네. | |||||
/etc/zprofile | 로그 인. | |||||
/etc/zshrc | int. | |||||
/etc/zlogin | 로그 인. | |||||
/etc/zlogout | 로그 인. | |||||
~/.zhenv | 네. | |||||
~/.zprofile | 로그 인. | |||||
~/.zshrc | int. | |||||
~/.zlogin | 로그 인. |
설명:
- 공백은 파일이 셸에 의해 전혀 읽히지 않음을 의미합니다.
- "yes"는 부팅 시 셸에 의해 항상 파일이 읽힌다는 것을 의미합니다.
- "filename"은 셸이 로그인 셸인 경우 파일을 읽는 것을 의미합니다.
- "n/filename"은 셸이 로그인 셸이 아닌 경우 파일을 읽는 것을 의미합니다.
- "int"는 셸이 인터랙티브한 경우 파일을 읽는 것을 의미합니다.
- ^ ~/.tcshrc를 찾을 수 없는 경우에만
- ^ Bourne Shell의 새로운 버전만
- ^ "사용자 이식성 유틸리티 옵션"을 지원하는 시스템에서 사용 가능. 변수 값은 절대 경로여야 하며 "사용자의 실제 유효 사용자 ID 또는 실제 유효 그룹 ID가 [13]다른 경우" 무시됩니다.
- ^ 새로운 버전의 Bourne Shell에서는 $ENV는 $HOME/.shrc입니다.
- ^ sh와 같은 동작이지만 sh(bash 2+)로 호출된 경우만 또는 bash 4.2 이후 POSIX 호환성 모드에서 명시적으로 호출된 경우(옵션 --posix 또는 [14]-o posix 포함).
- ^ a b sh/ksh 호환성 모드만(bash, sh, ksh로 호출되는 경우)
- ^ a b c ~/.bash_profile, ~/.bash_login 및 ~/.profile 순으로 읽을 수 있는 첫 번째 파일. sh로 호출된 경우, 또는 POSIX 호환성 모드에서 명시적으로 호출된 경우(옵션 --posix 또는 -o posix 포함)
기타 셸
Bourne 쉘 또는 C 쉘에서 파생되지 않은 Unix 쉘 개념의 변형은 다음과 같습니다.[15]
- es – 1990년대 중반에 작성된 기능성 프로그래밍 RC 호환 셸.
- 친숙한 인터랙티브 쉘(물고기)– 2005년에 처음 출시되었습니다.
- PowerShell – 원래 Windows OS용으로 개발된 객체 지향 쉘로 현재는 MacOS 및 Linux에서 사용할 수 있습니다.
- Qshell – POSIX 및 X/Open 표준을 기반으로 하는 IBM i 운영 체제의 셸입니다.
- rc – Tom Duff가 작성한 Bell Labs 및 버전 10 Unix의 Plan 9 기본 셸.포트는 다양한 Unix 계열 운영체제로 만들어져 있습니다.
- scsh : 스킴셸
- wish : Tcl/Tk용 윈도 셸.
「 」를 참조해 주세요.
레퍼런스
- ^ a b Tom Van Vleck (1995-02-05). "Unix and Multics". Multicians.org. Retrieved 2012-08-14.
- ^ Bourne, Stephen R. (October 1983). "The Unix Shell". BYTE. p. 187. Retrieved 30 January 2015.
- ^ "V6 Thompson Shell Port - History". V6shell.org. Retrieved 2012-08-14.
- ^ Louis Pouzin (2000-11-25). "The Origin of the Shell". Multicians.org. Retrieved 2012-08-14.
- ^ Nikolai Bezroukov (2015-08-13). "Introduction to the Unix shell history". Softpanorama. Retrieved 2016-08-21.
- ^ "Bourne shell, or sh". Interview with Steve Bourne. Computerworld. 2009-03-05. Retrieved 2016-08-21.
- ^ "Re: Late Bloomers Revisited". Retrieved 20 September 2014.
- ^ Korn, David G. (October 26, 1994), "ksh - An Extensible High Level Language", Proceedings of the USENIX 1994 Very High Level Languages Symposium, USENIX Association, retrieved February 5, 2015,
Instead of inventing a new script language, we built a form entry system by modifying the Bourne shell, adding built-in commands as necessary.
- ^ 할리 한, Unix and Linux에 대한 할리 한의 가이드.
- ^ "Hamilton C shell for Windows Release Notes 4.0". Retrieved 20 September 2014.
- ^ "Different UNIX Shells". unixnote.com. 2010. Retrieved 2016-08-21.
- ^ SCO Unix Group, SCO Unixware 7 매뉴얼(2004년 4월 22일)은 2012년 10월 18일을 취득했습니다.
- ^ "Shell Command Language". opengroup.org. Retrieved 15 June 2015.
- ^ "Bash Reference Manual: Bash Startup Files". gnu.org. Retrieved 15 June 2015.
- ^ "FreeBSD Ports: Shells". Freebsd.org. 2014-03-30. Retrieved 2014-04-05.