전체 치트시트시스템 명령

linux shell

bash 5+ / POSIX 2017

매일 쓰는 Linux / macOS 셸 명령어 빠른 참조: 파일 작업, 텍스트 처리, 권한, 프로세스, 네트워킹, 아카이브, 스토리지 — 자주 쓰는 옵션과 실전 예시까지 정리했습니다.

명령어 40개

파일 & 탐색

pwd

현재 작업 디렉터리의 절대 경로를 출력합니다.

pwd
ls

디렉터리 내용을 나열합니다.

-l long 형식; -a 숨김 포함; -h 사람이 읽기 쉬운 크기; -t mtime 기준 정렬; -r 역순

ls -lah /var/log
cd <dir>

현재 작업 디렉터리를 변경합니다.

cd ~/-projects/app && pwd
tree <dir>

디렉터리를 트리 형태로 재귀 나열; 개요 파악에 최고(설치 필요할 수 있음).

-L <n> 최대 깊이; -a 숨김 표시; -d 디렉터리만; -I 패턴

tree -L 2 -I 'node_modules|.git' .

파일 작업

mkdir -p <dir>

디렉터리(와 누락된 부모까지)를 한 번에 만듭니다.

-p 부모 생성; -v verbose; -m <mode> 권한 설정

mkdir -p src/components/ui
cp <src> <dest>

파일 또는 디렉터리를 복사합니다.

-r 재귀(디렉터리용); -i 대화형; -v verbose; -p mode/time 보존

cp -rv src/ backup/
mv <src> <dest>

파일 또는 디렉터리를 이동(이름 변경).

-i 대화형; -v verbose; -n 덮어쓰지 않음

mv README.md readme.md && mv ../tmp .
rm <path>

파일 또는 디렉터리를 삭제합니다. ⚠️ 휴지통이 없습니다 — 경로를 다시 확인하세요.

-r 재귀; -f force; -i 대화형; -v verbose

rm -rf build/ node_modules/
ln -s <target> <link>

<link> 위치에 <target> 으로 가리키는 심볼릭 링크를 만듭니다.

-s 심볼릭(기본: 하드); -f 기존 덮어쓰기; -n 기존 링크 추적 안 함

ln -s /opt/app-v2 current
touch <file>

빈 파일을 만들거나 내용 변경 없이 mtime 을 갱신합니다.

touch .gitignore

텍스트 & 보기

cat <file>

파일 전체 내용을 stdout 으로 출력합니다.

-n 줄 번호; -A 비인쇄 문자 표시; -s 빈 줄 압축

cat -n package.json
less <file>

파일에서 페이저를 엽니다(/, n, N 으로 검색; q 로 종료).

-N 줄 번호; -S 줄 바꿈 없음; +F 자동 follow (tail 처럼)

less -NS /var/log/syslog
head -n 10 <file>

파일의 처음 N 줄(기본 10)을 출력합니다.

head -n 30 /etc/passwd
tail -n 50 -f <file>

파일의 마지막 N 줄을 보여주고 파일이 늘어나면 따라갑니다(로그용).

-f follow; -F follow & 재시도; -n 줄 수(기본 10); -c 바이트; --pid=PID PID 종료 시 중단

tail -f -n 50 /var/log/nginx/access.log

검색 & 필터

grep <pattern> <files>

패턴에 매치되는 줄을 검색; 확장/PCRE 정규식 지원.

-i 대소문자 무시; -r 재귀; -n 줄 번호; -v 반전; -E 확장 정규식

grep -rni "TODO" src/
find <path> -name <pattern>

디렉터리 트리를 순회하며 조건에 매치되는 파일을 나열합니다.

-type f|d; -name glob; -iname 대소문자 무시; -size +1M; -mtime -7; -maxdepth

find . -type f -name "*.log" -mtime +7 -delete
awk '<prog>' <file>

패턴-액션 텍스트 스캐너 — 컬럼 자르기, 값 합산 등.

-F fs 필드 구분자; -v var=value; -f 스크립트 파일

awk -F'\t' 'NR>1 {sum+=$3} END {print sum}' data.tsv
sed 's/<a>/<b>/' <file>

스트림 에디터 — 줄 단위 치환, 삭제, 삽입.

-i 제자리 편집; -E 확장 정규식; -e 표현식 결합; s/from/to/[g] [p]

sed -i '' 's/version = "1\.."/version = "1.9"/' pyproject.toml
sort | uniq -c | sort -nr

파이프라인 관용구: 출현 횟수를 세고 빈도 내림차순으로 정렬.

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head

권한

chmod <mode> <file>

파일 권한 변경(예: 755, u+x, g-w, o=r).

-R 재귀; --reference=<file> 모드 복사

chmod -R u=rwX,go=r ./docs
chown <user>[:<group>] <file>

파일 소유자와 그룹 변경.

-R 재귀; -h 심볼릭 링크 자체에 적용(-R 과 함께)

chown -R www-data:www-data /var/www/html
umask

새로 만들어지는 파일의 기본 권한 마스크 표시/설정.

-S 기호형; -p 이식성을 위해 umask 보존

umask 022

프로세스 & 시스템

ps aux

모든 프로세스를 상세 정보와 함께 표시(BSD 스타일 컬럼).

-e 모두; -f full; -L 스레드; --sort=-%mem

ps auxf | grep -v grep | grep nginx
top / htop

실시간 인터랙티브 프로세스 뷰어(htop 이 UI 가 더 좋음; 설치 필요할 수 있음).

P/CPU M/MEM 정렬; k kill; r renice; q 종료

htop -u www-data
kill [-9|<sig>] <pid>

프로세스에 시그널을 보냅니다. SIGTERM(15) 은 정중, SIGKILL(9) 은 강제.

-9 SIGKILL; -l 시그널 목록; -s 시그널을 이름으로 지정

kill -TERM 12345 && sleep 2 && kill -9 12345
jobs / bg / fg / nohup

잡 제어 관리 — 목록, 백그라운드, 포어그라운드, 행업 면역으로 실행.

nohup ./long-task.sh > out.log 2>&1 &
systemctl <verb> <unit>

systemd 서비스와 유닛 제어(status, start, stop, enable, logs).

status / start / stop / restart / enable / disable; -u <user>

systemctl status nginx && systemctl reload nginx

네트워크

wget <url>

비대화형 다운로더; 재귀 / 미러에 친화적.

-c continue; -q quiet; --no-check-certificate; -r 재귀

wget -c https://example.com/big-archive.tar.gz
ssh <user>@<host> [cmd]

원격 호스트에 SSH 세션을 열거나 1회성 명령을 실행합니다.

-p <port>; -i <key>; -L / -R / -D 포트 포워딩; -N 원격 명령 없음; -f 백그라운드

ssh -i ~/.ssh/id_ed25519 user@host 'sudo systemctl restart nginx'
scp / rsync

원격 호스트로/로부터 파일 복사. 부분/반복 전송에는 rsync 가 더 빠릅니다.

scp -r / rsync -avz --progress src/ user@host:/dst/

rsync -avz --progress ./build/ deploy@server:/srv/app/
ping / traceroute / ss

도달 가능성, 경로, 리스닝 소켓을 진단합니다.

ping -c N 횟수; ss -tulnp 리슨 정보; ss -s 요약

ss -tulnp | grep -E ':80|:443'

아카이브 & 압축

tar -czf out.tgz <paths>

tar 아카이브 생성/추출, 선택적으로 gzip/bzip2/xz 사용.

-c 생성; -x 추출; -t 목록; -z gzip; -j bzip2; -J xz; -v verbose; -C <dir>

tar -czf - src/ | ssh server 'tar -xzf - -C /srv/app'
zip -r out.zip <paths>

재귀적으로 zip 아카이브를 만듭니다.

-r 재귀; -9 최대 압축; -e 암호화; -j 경로 제거

zip -r9 build-$(date +%Y%m%d).zip dist/
unzip [-d <dir>] file.zip

zip 아카이브를 추출, 대상 디렉터리 옵션 가능.

-d 대상 디렉터리; -o 덮어쓰기; -l 목록; -p stdout 으로; -q quiet

unzip -o build.zip -d ./extracted

디스크 & 스토리지

df -h

마운트된 파일 시스템의 디스크 사용량을 사람이 읽기 쉬운 단위로 표시.

-h human; -T 파일 시스템 타입 출력; -i inodes

df -hT /
du -sh <path>

파일 공간 사용량 추정; -s 는 디렉터리를 요약합니다.

-s 요약; -h human; -a 모두; --max-depth=N; -x 동일 fs 내에서만

du -sh node_modules/ build/ .

셸 빌트인

history / !! / !$

이전 명령을 탐색, 재실행, 재사용합니다.

history N; !<n> N 번째 줄 재실행; !$ 는 직전 명령의 마지막 인자; !! 는 직전 명령 재실행

git add . && git commit -m "$(!!)"
alias / unalias

셸 명령 단축 별칭을 정의하거나 나열합니다(주로 ~/.bashrc / ~/.zshrc).

alias ll='ls -lah' && alias gs='git status'
env / export / unset

자식 프로세스의 환경변수 나열, 설정, 해제.

export DATABASE_URL=postgres://localhost/dev && env | grep DATABASE

도움말

man <cmd> / <cmd> --help

매뉴얼 페이지(man) 또는 명령의 내장 도움말을 봅니다.

man -k keyword 검색; man -t <cmd> PDF 로 출력; --help 짧은 사용법

man -k 'tar archive'

관련 명령어 치트시트

Linux / POSIX 셸 소개

셸은 키 입력을 운영 체제 동작으로 변환하는 명령 인터프리터로, 모든 Unix 계열 시스템 — Linux, macOS, BSD, Windows의 WSL — 에 존재합니다. 가장 흔한 셸은 bash(GNU Bourne-again 셸, 대부분의 Linux 배포판 기본, 현재 5.2+), zsh(Catalina 이후 macOS 기본), 그리고 많은 임베디드 Linux를 구동하는 POSIX 호환 dash / ash입니다. 셸은 작은 명령들을 강력한 파이프라인(`grep`·`awk`·`sed`·`find`·`xargs`·`sort`·`uniq`·`tee`)으로 묶고, 변수·제어 흐름·함수·프로세스 치환을 갖춘 스크립트 언어를 제공합니다. Linux 셸은 POSIX 1003.1 표준을 따르므로 bash 전용 문법을 피하면 스크립트가 배포판 간에 이식 가능합니다. 일회성 파일 처리, 시스템 관리, 빌드 자동화, 이식 가능한 스크립트 작성 — 모두 셸의 영역입니다. 파일 이름에 공백이 있을 수 있다면 `xargs` 단독이 아니라 `xargs -0`를, 변수는 반드시 `"$var"`로 인용해 단어 분할을 방지하세요. 셸은 로컬 도구이므로, 네트워크로 나가는 명령(`curl`, `ssh` 등)을 명시적으로 호출하지 않는 한 입력한 내용은 외부로 전송되지 않습니다.

치트시트 버전 1.0.0