💡 이 문서는 한빛미디어 - 이것이 우분투/리눅스다를 기반으로 공부하면서 체화를 위해 정리하는 글입니다. 💡
리눅스의 셸은 명령어와 프로그램을 실행할 때 사용하는 인터페이스입니다.
셸은 사용자가 입력한 명령을 해석해 커널로 전달하거나, 커널의 처리 결과를 사용자에게 전달하는 역할을 합니다.
셸의 구조
사용자와 커널 사이에서 명령을 해석하여 전달 (대화식 사용)
셸 자체 내에 프로그래밍 기능이 있어서 프로그램을 작성할 수 있음
셸 프로그래밍 기능을 이용하면 여러 명령을 사용해 반복적으로 수행하는 작업을 하나의 프로그램으로 제작 가능
초기화 파일 기능을 이용해 사용자의 환경을 설정할 수 있음
로그인할 때 이 초기화 파일이 실행되서 사용자의 초기 환경이 설정됨.
셸을 공부하는데 가장 중요한 것 중 하나가 환경변수의 이해
리눅스의 셰션 변수들을 정의하여 사용자가 리눅스 환경을 설정 가능
유닉스 셸의 오리지널, 최초의 본격적인 셸
모든 유닉스 시스템에서 사용할 수 있지만 미흡한 점이 많음
1974년 ‘Stephen Bourne’이 개발한 최초의 셸
가장 큰 단점은 상호대화식 방식을 취하고 있지 않음
프롬프트 - 일반 유저는 $
프롬프트 / root 유저는 #
프롬프트 사용
/bin/sh
1983년 AT&T사의 벨 연구소에서 근무하던 데이비드 콘이 개발했음
Korn Shell 역시 오리지널 bourne shell (sh) 을 확장해서 만들었고, 벨 연구소 사용자들의 요청으로 C 셸의 많은 기능들을 추가
C 셸의 특징들을 모두 제공하면서 처리 속도도 빠른 장점
/bin/ksh
1989년 브라이언 폭스가 GNU 프로젝트를 위해 개발
우분투와 페도라에서 기본적으로 사용하는 셸 (Linux 표준 셸로 채택)
korn shell과 다르게 무료여서 급속히 전파됐음
Bourne Shell (sh)
을 기반으로 Korn Shell(ksh)
과 C shell (csh)
의 좋은 점만 합한 것이라고 보면 됨
bash는 리눅스 뿐만 아니라 GNU 운영체제, 맥 OS X 등 다양한 OS에서 사용중
/bin/bash
프롬프트 - 일반 유저는 $ 프롬프트 / root 유저는 # 프롬프트 사용
특징
Alias 기능 (명령 단축 기능)
History 기능 ( ↑
또는 ↓
)
연산 기능
Job Control 기능
자동 이름 완성 기능 (tab)
프롬프트 제어 기능
명령 편집 기능
POSIX
와 호환 가능
확장형 Bourne Shell, Korn Shell의 재작성 셸
강력한 history기능
향상된 명령행 편집 기능
/bin/zsh
1978년 버클리 대학의 빌 조이가 C 언어로 개발
Bourne Shell의 사용성을 높인 셸
강력한 프로그램 작성 기능을 가지고 있고 C와 비슷
크기가 커지고, 속도가 느려진 단점
편리한 기능 때문에 일반 사용자들이 즐겨 사용했던 셸
/bin/csh
csh의 기능을 강화한 Shell
확장 C 셸로, BSD 계열에서 많이 사용
명령어 편집 기능 제공
/bin/tcsh
echo $SHELL
or
env | grep SHELL
셸 명령문은 명령문과 함께 여러 가지 옵션이나 인자(Argument)를 사용할 수 있으며 형식은 다음과 같습니다.
(프롬프트) 명령 [옵션...] [인자...]
e.g.
# ls -l
# rm -rf /mydir
# find . / -name "*.conf"
셸은 여러가지 환경 변수 값을 갖는데, 설정된 환경 변수는 echo $환경변수이름
형식으로 명령을 실행하면 확인 가능
예를 들어 호스트 이름을 출력하려면 echo $HOSTNAME
명령 실행
💡 환경 변수란 ?? 💡
- 환경 변수란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임
- OS(ex) 윈도우, 리눅스 등)의 환경변수는 시스템의 실행 파일이 놓여 있는 디렉터리의 지정 등 OS 상세서 동작하는 응용소프트웨어가 참조하기 위한 설정이 기록된다
- 깊숙이 있는 응용프로그램을 쉽게 꺼내쓰기 위해서 미리 변수로 등록해 놓는 것을 말한다.
환경 변수 예시
환경 변수 값을 변경하려면 export 환경변수=값
형식을 실행
그 외의 환경 변수는 printenv
명령을 실행하면 출력됨
일부 환경 변수는 printenv
명령을 실행해도 나타나지 않음