이번 시간에는 리눅스 쉘(shell)을 알아보도록 하겠습니다.
리눅스 쉘은 사용자와 시스템 커널 사이에서 중추적인 역할을 하며,
사용자의 명령을 해석하여 그에 따른 작업을 실행하는 인터페이스입니다.
쉘 환경
쉘은 사용자의 환경을 관리하는 역할도 합니다.
예를 들어, 환경 변수는 사용자의 세션에 대한 정보를 저장하고,
이 정보는 쉘 스크립트나 다른 프로그램에서 사용될 수 있습니다.
환경 변수는 'export' 명령어를 사용해 설정할 수 있습니다.
명령어 확장
쉘은 명령어를 입력할 때 다양한 확장 기능을 제공합니다.
예를 들어, '*'와 '?'는 와일드카드 문자로,
여러 파일이나 디렉토리에 대한 명령어를 간편하게 입력할 수 있게 도와줍니다.
또한, 명령어의 결과를 다른 명령어의 입력으로 사용하는 파이프라인 기능도 제공합니다.
리눅스에서는 bash, csh, ksh, zsh 등의 다양한 쉘을 이용할 수 있습니다.
이들은 각각 고유한 특징과 기능을 가지고 있으며, 사용자의 필요에 따라 선택하여 사용할 수 있습니다.
1. Bash (Bourne Again Shell)
- 가장 널리 사용되는 쉘
- Bourne Shell을 기반으로 개발되었음
- 명령어 구문, 변수 사용 등 기본적인 쉘 기능 제공
- 사용자 정의 함수, 별칭, 스크립팅 지원
- 인터페이스는 간결하지만 기능적
- history, alias, jobs, fg, bg 등
- #!/bin/bash
echo "Hello, World!" # 화면에 문자열 출력
# 변수 사용
niceday="Hello, Tistory!"
echo $ niceday
2. Csh (C Shell)
- C 언어 스타일의 구문 사용
- 명령 완성, 역사 검색 등 편리한 기능 제공
- 별칭, 함수 정의 지원
- Bourne Shell보다 복잡한 구문
- 일부 유닉스 시스템 기본 쉘
- set, unset, history, alias, source, which 등
- #!/bin/csh
alias dm 'tcpdump -i eth0 -nn not port 22'
# dm 명령어에 -i eth0 -nn not port 22 옵션을 기본적으로 적용하는 별칭 설정
3. Ksh (Korn Shell)
- Bourne Shell과 C Shell의 기능 통합
- Bourne Shell보다 확장된 기능 제공 (job control, alias, scripting)
- C Shell과 유사한 구문 일부 사용
- 일부 상업용 리눅스 배포판 기본 쉘
- job, fg, bg, typeset, alias, unalias 등
- #!/bin/ksh
set -A fruits apple banana cherry # 배열 생성
echo ${fruits[1]} # 배열의 두 번째 요소 출력 (출력: banana)
4. Zsh (Z Shell)
- Zsh 프레임워크 기반의 강력한 쉘
- 플러그인 시스템을 통해 다양한 기능 확장 가능
- 자동 완성, 문법 강조, 테마 설정 등 사용자 경험 향상
- 다양하고 강력한 기능 제공
- 일부 개발자 커뮤니티에서 선호
- autoload, compinit, zstyle, zle, bindkey 등
- # 명령어 자동완성
l + Tab # ls로 자동완성
각 쉘의 장단점 비교
쉘 | 장점 | 단점 |
Bash | 가장 널리 사용되어 지원 많음, 간결한 인터페이스 | 기능 상대적으로 기본 |
Csh | 편리한 기능 제공, 사용자 정의 기능 지원 | 복잡한 구문, 일부 시스템에서만 기본 |
Ksh | 다양한 기능 통합, Bourne Shell과 C Shell 기능 모두 이용 가능 | 일부 상업용 시스템에서만 기본 |
Zsh | 강력한 기능 확장성, 사용자 경험 향상 | 시스템 기본 쉘로 사용되지는 않음, 복잡한 환경 설정 필요 |
쉘의 기본 원리
사용자가 명령어를 입력하면 쉘은 이를 해석하고, 해당 명령어를 실행시키는 프로세스를 생성합니다.
예를 들어, 'ls'라는 명령어를 입력하면, 쉘은 'ls' 프로그램을 실행시키는 새로운 프로세스를 생성하고,
이 프로세스는 현재 디렉토리의 파일 목록을 출력합니다.
쉘 스크립트
쉘은 단순히 명령어를 실행시키는 것뿐만 아니라, 쉘 스크립트라는 프로그래밍 언어도 제공합니다.
쉘 스크립트는 명령어를 연속적으로 실행시키는 것을 가능하게 하며,
변수, 조건문, 반복문 등의 프로그래밍 요소를 포함할 수 있습니다.
예를 들어, 다음은 간단한 쉘 스크립트의 예시입니다.
bash
#!/bin/bash
for i in {1..10}
do
echo "Number is $i"
done
위의 스크립트는 1부터 10까지의 숫자를 출력하는 간단한 프로그램입니다.
또한, 쉘은 단순히 명령어를 실행시키는 것 이상의 기능을 가지고 있습니다.
쉘 스크립트라는 프로그래밍 언어를 제공하는데,
이를 통해 사용자는 명령어를 연속적으로 실행시키는 것을 가능하게 하며,
변수, 조건문, 반복문 등의 프로그래밍 요소를 포함할 수 있습니다.
쉘은 사용자의 환경을 관리하는 역할도 수행합니다.
환경 변수를 통해 사용자의 세션 정보를 저장하고,
이 정보는 쉘 스크립트나 다른 프로그램에서 활용될 수 있습니다.
환경 변수는 'export' 명령어를 사용해 설정 가능합니다.
오늘은 리눅스 쉘(shell)에 대해서 알아봤습니다.
쉘은 처음에는 GUI처럼 화면에서 보이는 것이 아닌, 명령어를 입력해야 하기 때문에
처음 접하는 사람은 어려움을 느낄 수 있습니다.
하지만 명령어에 익숙해지다 보면 훨씬 빠른 작업이 수행이 가능하기 때문에
리눅스와 친해지시려면 실습을 통해 숙달하시어 리눅스마스터가 되시길 바랍니다.
'IT > 리눅스' 카테고리의 다른 글
리눅스를 알아보기 (0) | 2024.02.10 |
---|---|
리눅스 iptables 알아보기 (1) | 2024.01.31 |
[squid] proxy 서버 쉽게 만들기 (0) | 2024.01.21 |
let's encrypt 인증서 발급 및 적용 (0) | 2024.01.21 |
리눅스(우분투) root 권한 얻는 방법 (0) | 2024.01.21 |