linux shell
bash 5+ / POSIX 2017매일 쓰는 Linux / macOS 셸 명령어 빠른 참조: 파일 작업, 텍스트 처리, 권한, 프로세스, 네트워킹, 아카이브, 스토리지 — 자주 쓰는 옵션과 실전 예시까지 정리했습니다.
명령어 40개
파일 & 탐색
pwd현재 작업 디렉터리의 절대 경로를 출력합니다.
pwdls디렉터리 내용을 나열합니다.
-l long 형식; -a 숨김 포함; -h 사람이 읽기 쉬운 크기; -t mtime 기준 정렬; -r 역순
ls -lah /var/logcd <dir>현재 작업 디렉터리를 변경합니다.
cd ~/-projects/app && pwdtree <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/uicp <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 currenttouch <file>빈 파일을 만들거나 내용 변경 없이 mtime 을 갱신합니다.
touch .gitignore텍스트 & 보기
cat <file>파일 전체 내용을 stdout 으로 출력합니다.
-n 줄 번호; -A 비인쇄 문자 표시; -s 빈 줄 압축
cat -n package.jsonless <file>파일에서 페이저를 엽니다(/, n, N 으로 검색; q 로 종료).
-N 줄 번호; -S 줄 바꿈 없음; +F 자동 follow (tail 처럼)
less -NS /var/log/sysloghead -n 10 <file>파일의 처음 N 줄(기본 10)을 출력합니다.
head -n 30 /etc/passwdtail -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 -deleteawk '<prog>' <file>패턴-액션 텍스트 스캐너 — 컬럼 자르기, 값 합산 등.
-F fs 필드 구분자; -v var=value; -f 스크립트 파일
awk -F'\t' 'NR>1 {sum+=$3} END {print sum}' data.tsvsed 's/<a>/<b>/' <file>스트림 에디터 — 줄 단위 치환, 삭제, 삽입.
-i 제자리 편집; -E 확장 정규식; -e 표현식 결합; s/from/to/[g] [p]
sed -i '' 's/version = "1\.."/version = "1.9"/' pyproject.tomlsort | 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 ./docschown <user>[:<group>] <file>파일 소유자와 그룹 변경.
-R 재귀; -h 심볼릭 링크 자체에 적용(-R 과 함께)
chown -R www-data:www-data /var/www/htmlumask새로 만들어지는 파일의 기본 권한 마스크 표시/설정.
-S 기호형; -p 이식성을 위해 umask 보존
umask 022프로세스 & 시스템
ps aux모든 프로세스를 상세 정보와 함께 표시(BSD 스타일 컬럼).
-e 모두; -f full; -L 스레드; --sort=-%mem
ps auxf | grep -v grep | grep nginxtop / htop실시간 인터랙티브 프로세스 뷰어(htop 이 UI 가 더 좋음; 설치 필요할 수 있음).
P/CPU M/MEM 정렬; k kill; r renice; q 종료
htop -u www-datakill [-9|<sig>] <pid>프로세스에 시그널을 보냅니다. SIGTERM(15) 은 정중, SIGKILL(9) 은 강제.
-9 SIGKILL; -l 시그널 목록; -s 시그널을 이름으로 지정
kill -TERM 12345 && sleep 2 && kill -9 12345jobs / 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.gzssh <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.zipzip 아카이브를 추출, 대상 디렉터리 옵션 가능.
-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'관련 명령어 치트시트
상표 및 사용 안내
본 명령줄 도구 치트시트 모음은 오픈 커뮤니티 참고 자료입니다. 본 문서에서 언급되는 도구의 명칭, 로고, 상표(예: Git™, Docker™, Kubernetes®, kubectl, PostgreSQL®, MySQL®, Redis™, MongoDB®, Linux™, PowerShell™, Vim™ 등)는 각 권리자의 자산이며, 본 문서에서는 식별 및 참고 목적のみで 사용됩니다.
본 치트시트의 모든 내용은 독립적으로 작성된 단순화된 자체 완결형 참고 자료이며, 어떠한 공식 문서와도 계열·인정·출처 관계가 없습니다. 명령 목록, 플래그 설명, 예제는 모두 저자의 원본 단순화이며, 권위 있는 정보가 필요한 경우 각 도구의 공식 문서를 참조하시기 바랍니다.
명령 구문 및 옵션 플래그는 도구 버전에 따라 다를 수 있습니다. 표시되는 버전 태그는 안정 릴리스를 반영하며, 다른 버전에서는 동작이 다를 수 있습니다. 본 치트시트는 상표권자의 어떠한 선호나 권장도 의미하지 않습니다.
상표권자 또는 저작권자가 사이트의 일부 내용에 대해 권리 침해가 있다고 판단하시는 경우 [email protected]으로 이메일을 보내 주십시오. 유효한 권리 증명을 받은 후 합리적인 기간 내에 관련 내용을 수정하거나 삭제하겠습니다.
본 사이트는 사이트 정보의 이용으로 인해 발생하는 어떠한 직접적 또는 간접적 손해에 대해서도 법적 책임을 지지 않습니다.
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