📍Shell 이란?
셸(Shell)은 컴퓨터 운영 체제와 사용자 간의 상호 작용을 담당하는 프로그램이다.
사용자는 셸을 통해 운영 체제에 명령을 내리고, 파일을 관리하며, 다양한 프로그램을 실행할 수 있다.
쉽게 말해서 파일 조작, 프로그램 실행, 변수 및 환경 설정, 권한 설정 등 컴퓨터 운영 체제를 Shell을 통해 조작할 수 있다.
다양한 모델 코드를 공부하다보면, 파이썬 py 파일로 구성되어 있는 경우도 있지만 .sh (Shell Script 파일)로 되어있는 경우도 많이 볼 수 있다. 이처럼 Shell Script 파일을 활용하여 다양한 자동화 작업, 프로그램 실행 등을 수행할 수 있다.
📍Shell 종류 : Bash / Zsh
선호하는 셸을 선택하여 개인적인 작업 환경 설정 가능하다. 터미널 또는 명령 프롬프트를 통해 셸과 상호 작용하며, 윈도우즈의 경우 CMD나 PowerShell, Unix 계열의 운영 체제에서는 Bash, Zsh 등이 흔히 사용되는 셸의 종류이다.
sh(최초의 shell), bash(Linux 표준 쉘), zsh(macOS 카탈리나 이상)이 유명하다.
- Bash(Bourne Again Shell)
- Zsh(Z Shell)
Bash와 Zsh의 차이점은 다음과 같다. 개발자들은 Zsh를 선호하는 경우가 많다는데 나는 그냥 MacOS 초기 세팅이 Zsh로 되어 있어 맘편히 사용하기로 하였다.
구분 | 기능 및 확장성 | 자동완성 및 스크립팅 | 테마 및 플러그인 | 사용자 정의 및 설정 |
Bash | 많은 리눅스 시스템 및 macOS에서 기본 셸로 사용되며, Bournce 셸의 확장. 매우 안정적, POSIX 호환성 | Zsh에 비해 다소 제한적 | X 원하는 기능 추가하려면 직접 스크립트 작성해야함 | Zsh에 비해 다소 복잡 |
Zsh | Bash의 확장 버전으로 더 다양한 기능과 확장성 제공. 자동 완성 기능 Good. 플러그인 시스템, 테마 등 포함하여 사용자 친화적 기능 | 자동완성 기능이 좋아 명령어 입력 효율적으로 도와줌 | Oh My Zsh같은 프레임워크로 다양한 테마랑 플러그인 쉽게 추가 가능 | 도구 호환성이 좋아 설정 쉬움 |
[Shell을 사용하는 경우]
- 서버에서 접속해서 사용하는 경우
- crontab 등 Linux의 내장 기능을 활용하는 경우
- 데이터 전처리를 하기 위해 shell command를 사용하는 경우
- Docker를 사용하는 경우수 백대의 서버를 관리할 경우
- Jupyter Notebook의 cell 앞에 !를 붙여서 shell command를 사용하는 경우
- 터미널에서 python3, jupyter notebook을 실행하는 경우
- 배포 파이프라인(Github Action 등)을 실행하는 경우
📍Shell 사용하기
💡어떤 Shell을 사용하고 있을까?
내가 사용하는 기본 Shell의 종류를 알고 싶다면 터미널 /CMD 창에서 다음과 같은 명령어를 입력한다.
echo $SHELL
zsh인지 bash인지 알수 있다.
chsh -s /bin/bash
chsh -s /bin/zsh
각각의 명령어를 통해서는 bash 혹은 zsh로 변경할 수 있다.
💡 자주 사용하는 Shell 명령어
이름 | 설명 |
---|---|
man | command, system call, function 등 다양한 리눅스 명령어의 사용법을 확인할 수 있다. |
mkdir | 디렉토리를 생성한다. (make directory) |
ls | 현재 위치한 디렉토리에 있는 폴더와 파일 확인할 때 사용하며, 여러 옵션을 통해 추가적인 정보를 확인할 수 있다. |
pwd | 현재 위치한 디렉토리를 출력한다. (print working directory) |
cd | 현재 디렉토리 위치를 다른 위치로 변경한다. (change directory) |
echo | 변수 값, 문자열 등 텍스트를 출력한다. |
bash | shell script(쉘 스크립트)를 실행한다. |
sudo | 다른 사용자의 권한을 얻는 것(substitute user do)이며, 관리자 권한으로 특정 명령을 수행해야 할 때 사용한다. |
cp | 파일을 복사한다. (copy) |
mv | 파일을 다른 디렉토리 위치로 이동하며, 파일 이름을 변경할 때도 사용할 수 있다. (move) |
clear | console에 있는 명령어를 모두 지운다. (cls, clean screen) |
cat | 파일의 내용을 텍스트로 출력할 수 있으며, 인자를 여러 개 주어서 여러 파일을 붙여서 출력할 수 있다. (concatenate) |
history | 이전에 사용된 명령어 이력을 볼 수 있다. |
find | 폴더 또는 파일을 검색할 때 사용한다. |
export | 환경변수를 설정한다. |
cut -f -d | delimeter를 기준으로 잘라 field번째 값을 출력한다. (-d: delimeter, -f:field) |
redirection (>, >>) | 프로그램의 출력(stdout)을 다른 파일이나 스트림으로 전달한다. |
pipe ( | ) | 어떤 한 프로그램의 출력을 다른 프로그램의 입력으로 사용한다. |
ps | 현재 실행 중인 process를 확인할 수 있다. (process status) (-f: full format, -e: 모든 프로세스) |
curl | 웹 서버에 요청을 보낼 수 있으며, 주로 웹으로부터 파일을 다운로드받을 때 사용한다. (client URL) |
grep | 파일 또는 텍스트에서 특정 키워드가 포함된 줄만 출력한다. (g / re / p) |
chmod | 파일 권한을 변경한다. (change mode) |
nohup | 터미널 종료 후에도 계속 작업이 유지되도록 백그라운드로 process를 실행할 때 사용한다. (예: nohup helloword.py &) |
scp | ssh로 연결된 호스트 사이에 파일을 복사할 때 사용한다. (secure copy) (-r: 하위 디렉토리를 포함해서 재귀적으로 복사, -P: ssh 포트 지정 -i: SSH 설정을 활용해 실행) |
df | 현재 파일 시스템이 얼만큼의 디스크 용량을 차지하는지 확인할 수 있다. (disk file system) |
wc | 옵션에 따라 파일 또는 stdin 의 바이트, 문자, 단어, 줄 수를 출력할 수 있다. (word count) |
[Reference]
'TIL' 카테고리의 다른 글
[TIL] 웹크롤링 에러 해결 (Enable Javascript and Cookies to Continue) (0) | 2024.05.12 |
---|---|
[MAC / Ubuntu] ssh 원격접속 오류 해결 방법 / MAC 터미널 / WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! (0) | 2023.10.12 |
[Python]Python visualization tool (파이썬 시각화 툴 종류) (0) | 2023.05.23 |
anaconda 명령어 정리 (0) | 2022.10.18 |
[Mac] 맥북에 주피터 랩 (Jupyter lab) 설치하기 / 실행 화면 (0) | 2022.06.02 |