2025-09-18 21:25
Tags: 운영체제
터미널
- 
그래픽 인터페이스(GUI)가 등장하기 전, 텍스트 명령어(Command-Line Interface, CLI)로 컴퓨터와 소통하기 위해 만들어진 핵심 도구
 - 
터미널은 셸(명령어 해석기)이 작동하는 창이며, 사용자의 명령어를 커널(운영체제 핵심)에 전달하는 다리 역할
 - 
파일 시스템 탐색, 프로그램 실행, 서버 관리 등 GUI보다 훨씬 효율적이고 강력한 작업이 가능하여 개발자에게 필수적
 - 
커널 (Kernel):
- 자동차의 ‘엔진’입니다. 실제 자동차를 움직이게 하는 핵심 부품이죠.
 - 운영체제의 핵심으로, 하드웨어 제어, 프로세스 관리 등 모든 실제 작업을 처리합니다.
 - 셸 (Shell):
- 자동차의 ‘운전대, 페달, 기어’입니다.
 - 운전자가 엔진을 제어하기 위해 사용하는 인터페이스입니다.
 - 사용자가 입력한 명령어를 해석해서 커널에 전달하는 역할을 하는 ‘명령어 해석기’입니다.
 
 
 - 
터미널 (Terminal):
- 자동차의 ‘운전석’입니다. 운전자가 운전대와 페달을 조작하는 공간 전체를 의미합니다.
 - 셸이 실행되는 환경, 즉 사용자가 명령어를 입력하고 결과를 보는 창 그 자체입니다.
 
 - 
터미널이라는 창을 열고,
 - 
그 안에서
Bash나Zsh같은 셸에게 명령을 내리면, - 
셸이 그 명령을 해석해서 운영체제의 핵심인 커널에게 전달하여 실제 작업이 이루어지는 것
 
프롬프트(Prompt) 이해하기
username@hostname:~/current_directory$
username: 현재 로그인한 사용자 이름hostname: 현재 사용 중인 컴퓨터의 이름(네트워크상의 이름)~/current_directory: 현재 작업 중인 디렉토리 위치 (~는 홈 디렉토리를 의미하는 약어)$: 현재 사용자가 일반 사용자임을 나타내는 기호 (만약 루트(root) 사용자라면#으로 표시됨)- “누가, 어느 컴퓨터의, 어느 위치에서, 어떤 권한으로” 명령을 내릴 준비가 되었는지 알 수 있습니다.
 
명령어의 기본 구조
명령어 [옵션] [인자]
- 명령어 (Command):
- 실행하고자 하는 프로그램의 이름입니다. (예: 
ls,cd,mkdir) 
 - 실행하고자 하는 프로그램의 이름입니다. (예: 
 - 옵션 (Option):
- 명령어의 동작 방식을 세부적으로 지정합니다.
 - 보통 하이픈(
-)으로 시작하며, 여러 개를 조합할 수 있습니다. (예:ls -l -a또는ls -la) 
 - 인자 (Argument):
- 명령어가 작업을 수행할 대상을 지정합니다.
 - 주로 파일명이나 디렉토리 경로가 해당됩니다. (예: 
ls /home/user/documents) 예를 들어,ls -la ~라는 명령어는 다음과 같이 해석할 수 있습니다. 
 
“ls 라는 명령어를 -l(자세히 보기)과 -a(숨김 파일 포함) 옵션을 사용하여 ~(홈 디렉토리) 라는 인자를 대상으로 실행하라.”
파일 및 디렉토리 관리
| 명령어 | 설명 | 사용 예시 | 
|---|---|---|
pwd | Print Working Directory. 현재 작업 중인 디렉토리의 전체 경로를 출력합니다. | pwd | 
ls | List. 현재 디렉토리의 파일 및 디렉토리 목록을 보여줍니다. | ls, ls -l (자세히), ls -a (숨김 파일 포함) | 
cd | Change Directory. 다른 디렉토리로 이동합니다. | cd /home, cd documents, cd .. (상위 디렉토리), cd ~ (홈 디렉토리) | 
mkdir | Make Directory. 새로운 디렉토리(폴더)를 생성합니다. | mkdir new_project | 
rmdir | Remove Directory. 비어있는 디렉토리를 삭제합니다. | rmdir old_project | 
cp | Copy. 파일이나 디렉토리를 복사합니다. | cp source.txt destination.txt, cp -r source_dir/ dest_dir/ | 
mv | Move. 파일이나 디렉토리를 이동하거나 이름을 변경합니다. | mv old_name.txt new_name.txt, mv file.txt ./target_dir/ | 
rm | Remove. 파일이나 디렉토리를 삭제합니다. (주의! 휴지통 없이 바로 삭제됩니다) | rm file.txt, rm -r directory/ (디렉토리와 내용 모두 삭제) | 
touch | 파일의 수정 시간을 현재 시간으로 변경하거나, 파일이 없으면 빈 파일을 생성합니다. | touch new_file.txt | 
파일 내용 확인
| 명령어 | 설명 | 사용 예시 | 
|---|---|---|
cat | Concatenate. 파일 내용을 화면에 모두 출력합니다. 짧은 파일에 유용합니다. | cat config.txt | 
less | cat과 달리 긴 파일의 내용을 페이지 단위로 보여줍니다. (q로 종료) | less long_log_file.log | 
head | 파일의 앞부분 10줄만 보여줍니다. | head file.txt, head -n 20 file.txt (20줄) | 
tail | 파일의 뒷부분 10줄만 보여줍니다. 실시간 로그 추적에 유용합니다. | tail file.txt, tail -f app.log (파일 변경 실시간 추적) | 
강력한 도구: 파이프와 리다이렉션
터미널이 강력한 이유 중 하나는 명령어들을 서로 연결할 수 있기 때문입니다.
- 파이프 (
|): 한 명령어의 출력 결과를 다른 명령어의 입력으로 전달합니다. 여러 명령어를 체인처럼 연결하여 복잡한 작업을 수행할 수 있습니다.- 예시: 
ls -l | less - 해석: 
ls -l명령어의 결과(파일 목록)가 너무 길어서 화면에 다 안 보일 때, 그 결과를less명령어의 입력으로 넘겨서 페이지 단위로 편하게 볼 수 있습니다. 
 - 예시: 
 - 리다이렉션 (
>,>>): 명령어의 출력 결과를 화면 대신 파일에 저장합니다.>: 파일이 존재하면 덮어쓰고, 없으면 새로 생성하여 저장합니다.- 예시: 
ls -l > file_list.txt - 해석: 
ls -l명령어의 결과를 화면에 출력하는 대신file_list.txt라는 파일에 저장합니다. 
- 예시: 
 >>: 파일이 존재하면 맨 뒤에 내용을 추가하고, 없으면 새로 생성하여 저장합니다.- 예시: 
echo "New log entry" >> app.log - 해석: “New log entry” 라는 텍스트를 
app.log파일의 끝에 추가합니다. 
- 예시: 
 
 
셸 스크립트로 작업 자동화
반복적으로 수행해야 하는 명령어들의 순서가 있다면, 이를 하나의 파일로 만들어 한 번에 실행할 수 있습니다. 이것이 바로 셸 스크립트입니다.
간단한 예시 (backup.sh):
#!/bin/bash
# 이 스크립트는 중요한 파일을 백업 디렉토리에 복사합니다.
 
echo "백업을 시작합니다..."
cp -r /path/to/important_data ~/backup_directory/
echo "백업이 완료되었습니다."위 내용을 backup.sh 파일로 저장한 뒤, bash backup.sh 명령어로 실행하면 스크립트 안의 명령어들이 순서대로 실행됩니다. 복잡한 배포 프로세스나 데이터 처리 작업을 자동화하는 데 매우 유용합니다.
환경 변수(Environment Variables)
셸 환경에서 미리 정의되어 어디서든 사용할 수 있는 변수입니다. 시스템의 중요한 설정값들을 담고 있으며, $ 기호를 붙여 사용합니다.
$HOME: 현재 사용자의 홈 디렉토리 경로$PATH: 셸이 명령어(프로그램)를 찾을 때 참조하는 디렉토리 경로 목록$USER: 현재 사용자 이름
echo $HOME 명령어로 변수값을 확인할 수 있고, export MY_VAR="hello" 와 같이 새로운 환경 변수를 설정할 수 있습니다.
alias: 나만의 단축 명령어 만들기
길고 복잡한 명령어를 짧은 별명(alias)으로 만들어두고 편하게 사용할 수 있습니다.
# 매번 ls -la 를 입력하기 귀찮을 때
alias ll="ls -la"
 
# Git 상태를 확인하는 단축 명령어
alias gs="git status"이렇게 설정해두면, 터미널에 ll 이라고만 입력해도 실제로는 ls -la 명령어가 실행됩니다. 이러한 설정은 보통 ~/.bashrc 또는 ~/.zshrc 같은 셸 설정 파일에 저장하여 터미널을 새로 열 때마다 자동으로 적용되게 합니다.
- 서버 환경: 대부분의 서버는 그래픽 환경(GUI) 없이 오직 터미널로만 접속하고 관리합니다.
 - 개발 도구: Git, Docker, 각종 프레임워크의 CLI 도구들은 모두 터미널 환경에서 가장 효율적으로 작동합니다.
 - 자동화: 셸 스크립트를 통해 빌드, 테스트, 배포 등 개발의 모든 과정을 자동화하여 생산성을 극대화할 수 있습니다.