리눅스의 주요 명령어는 탐색(pwd, ls, cd), 파일 작업(cp, mv, rm, mkdir), 권한(chmod, chown), 패키지(apt), 프로세스(ps, top, kill), 검색과 텍스트 처리(find, grep, sed, awk), 네트워크(ip, ss, curl), 서비스(systemctl, journalctl)로 나뉩니다. 아래 표에서 명령어와 예제를 확인할 수 있으며, 터미널의 일상 작업 대부분을 다룹니다.
이 리눅스 명령어 치트시트는 작업 종류별로 묶었습니다. 파일을 찾고, 패키지를 설치하고, 멈춘 프로세스를 끝내고, 로그에서 한 줄을 꺼내고, 포트를 확인하는 작업에 필요한 명령들입니다. Ubuntu와 Debian에서 검증했으며, 거의 모든 명령은 다른 배포판에서도 동작합니다. 차이는 주로 패키지 관리자에 있습니다.
도움말과 팁
| ead> | | 명령어 | 기능 |
man ls | 명령어의 전체 매뉴얼; 종료는 q, 검색은 /단어 |
ls --help | 옵션의 간단한 요약 |
type cd | 내장 명령, 별칭, 파일 중 무엇인지 알려 줌 |
which python3 | 실행 파일의 경로 |
history | 명령 기록; !123은 123번 명령을 다시 실행 |
Ctrl+R | 기록에서 검색 |
Ctrl+C / Ctrl+D | 명령 중단 / 셸 종료 |
파일 시스템 탐색
| ead> | | 명령어 | 기능 |
pwd | 현재 디렉터리 |
ls -la | 숨김 파일 포함 전체, 권한과 크기 함께 |
ls -lh | 크기를 보기 좋게 (K, M, G) |
ls -lt | 수정 시각 기준 정렬 |
cd /var/log | 절대 경로로 이동 |
cd .. / cd ~ / cd - | 상위 디렉터리 / 홈 / 이전 디렉터리 |
tree -L 2 | 2단계까지 디렉터리 트리 (tree 패키지) |
파일과 디렉터리 작업
| ead> | | 명령어 | 기능 |
touch file.txt | 빈 파일 생성 또는 수정 시각 갱신 |
mkdir -p a/b/c | 상위 디렉터리까지 함께 생성 |
cp file.txt backup.txt | 파일 복사 |
cp -r src/ dst/ | 디렉터리를 재귀적으로 복사 |
mv old.txt new.txt | 이름 변경 또는 이동 |
rm file.txt | 파일 삭제 (휴지통 없음) |
rm -r dir/ | 디렉터리와 내용 삭제; -f는 묻지 않음, 주의 |
rmdir dir | 빈 디렉터리 삭제 |
ln -s /opt/app/current app | 심볼릭 링크 생성 |
stat file.txt | 크기, 권한, inode, 날짜 등 상세 정보 |
file image.bin | 내용으로 파일 종류 판별 |
내용 보기
| ead> | | 명령어 | 기능 |
cat file | 파일 전체 출력 |
less file | 페이지 단위 보기, 검색 /, 종료 q |
head -n 20 file | 처음 20줄 |
tail -n 50 file | 마지막 50줄 |
tail -f /var/log/syslog | 파일을 실시간으로 지켜보기 |
wc -l file | 줄 수 |
diff a.conf b.conf | 두 파일의 차이 |
권한과 소유자
| ead> | | 명령어 | 기능 |
chmod +x script.sh | 실행 권한 부여 |
chmod 644 file | rw-r--r--: 소유자는 쓰고, 나머지는 읽기 |
chmod 755 dir | rwxr-xr-x: 디렉터리와 스크립트에 일반적 |
chmod 600 ~/.ssh/id_ed25519 | 소유자만: 개인 키용 |
sudo chown www-data:www-data file | 소유자와 그룹 변경 |
sudo chown -R alice /srv/app | 소유자를 재귀적으로 변경 |
id | 내 UID, GID, 그룹 |
sudo -i | root 셸 |
sudo usermod -aG docker alice | 사용자를 그룹에 추가 |
패키지 (apt, Debian과 Ubuntu)
| ead> | | 명령어 | 기능 |
sudo apt update | 저장소의 패키지 목록 갱신 |
sudo apt upgrade | 설치된 패키지 업그레이드 |
sudo apt install nginx | 패키지 설치 |
sudo apt remove nginx | 설정을 남기고 제거; purge는 설정까지 제거 |
sudo apt autoremove | 불필요한 의존 패키지 제거 |
apt search htop | 패키지 검색 |
apt show nginx | 설명과 버전 |
dpkg -l | grep nginx | 설치 여부 확인 |
dpkg -L nginx | 패키지가 설치한 파일 목록 |
RHEL, Fedora, Rocky Linux에서는 dnf install, dnf remove, dnf upgrade, rpm -qa를 사용합니다.
환경과 프로필
| ead> | | 명령어 | 기능 |
echo $PATH | 셸이 프로그램을 찾는 디렉터리 목록 |
env | 모든 환경 변수 |
export APP_ENV=prod | 현재 세션과 자식 프로세스에 변수 설정 |
alias ll='ls -la' | 명령어 단축 이름 |
source ~/.bashrc | 재로그인 없이 프로필 다시 읽기 |
crontab -e / crontab -l | cron 작업 편집 / 목록 보기 |
프로세스
| ead> | | 명령어 | 기능 |
ps aux | 모든 프로세스, 사용자, CPU와 메모리 포함 |
ps aux | grep nginx | 프로세스 찾기 |
pgrep -a nginx | 이름으로 PID와 명령줄 확인 |
top / htop | 실시간 부하 |
kill 1234 | 프로세스에 종료 요청 (SIGTERM) |
kill -9 1234 | 강제 종료 (SIGKILL) — 최후의 수단 |
pkill -f "python app.py" | 명령줄 일치로 종료 |
command &, jobs, fg | 백그라운드 실행과 작업 관리 |
nohup ./job.sh & | 터미널을 닫아도 프로세스 유지 |
free -h | 메모리와 swap |
uptime | 가동 시간과 평균 부하 |
strace -p 1234 | 프로세스의 시스템 호출 추적 |
서비스와 로그 (systemd)
| ead> | | 명령어 | 기능 |
systemctl status nginx | 서비스 상태와 로그 마지막 줄 |
sudo systemctl start|stop|restart nginx | 시작, 중지, 재시작 |
sudo systemctl reload nginx | 중지 없이 설정 다시 읽기 |
sudo systemctl enable --now nginx | 자동 시작 등록과 즉시 시작 |
systemctl --failed | 실패한 유닛 목록 |
journalctl -u nginx -f | 서비스 로그 실시간 보기 |
journalctl -u nginx --since "1 hour ago" | 최근 한 시간 로그 |
journalctl -p err -b | 부팅 이후의 오류 |
파일 찾기
| ead> | | 명령어 | 기능 |
find /var/log -name "*.log" | 이름으로 찾기 |
find . -type f -mtime -1 | 최근 하루 안에 수정된 파일 |
find / -size +500M 2>/dev/null | 큰 파일 찾기; 접근 오류는 숨김 |
find . -name "*.tmp" -delete | 찾아서 삭제 |
du -sh * | 디렉터리 안 각 항목의 크기 |
df -h | 파일 시스템별 남은 공간 |
텍스트 검색과 처리: grep, sed, awk, jq
| ead> | | 명령어 | 기능 |
grep "error" app.log | 단어가 포함된 줄 |
grep -i -n "error" app.log | 대소문자 무시, 줄 번호 포함 |
grep -r "listen" /etc/nginx/ | 디렉터리를 재귀적으로 검색 |
grep -v "DEBUG" app.log | 단어가 없는 줄 |
grep -c "500" access.log | 일치 횟수 |
grep -E "warn|error" app.log | 확장 정규 표현식 |
sed 's/old/new/g' file | 바꾼 결과를 출력 |
sed -i 's/8080/9090/' app.conf | 파일에서 바로 치환 |
sed -n '10,20p' file | 10번째부터 20번째 줄 출력 |
awk '{print $1}' access.log | 각 줄의 첫 번째 필드 |
awk -F: '{print $1}' /etc/passwd | 사용자 이름 (구분자 :) |
awk '$9 == 500' access.log | 아홉 번째 필드가 500인 줄 |
sort | uniq -c | sort -rn | 중복 세기와 빈도순 정렬 |
cut -d, -f2 data.csv | CSV의 두 번째 열 |
jq '.items[].name' data.json | JSON에서 필드 추출 |
파이프라인 예: nginx에 요청을 가장 많이 보낸 IP 주소 열 개.
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
리디렉션과 파이프
| ead> | | 구문 | 기능 |
cmd > out.txt | 출력을 파일에 쓰기 (덮어쓰기) |
cmd >> out.txt | 파일 끝에 추가 |
cmd 2> err.txt | 오류만 리디렉션 |
cmd > all.log 2>&1 | 출력과 오류를 한 파일에 |
cmd1 | cmd2 | 한 명령의 출력을 다른 명령의 입력으로 |
cmd | tee out.txt | 화면에 보여 주면서 저장 |
cmd1 && cmd2 | 첫 번째가 성공했을 때만 두 번째 실행 |
cmd1 || cmd2 | 첫 번째가 실패했을 때 두 번째 실행 |
압축 파일
| ead> | | 명령어 | 기능 |
tar -czf backup.tar.gz dir/ | 묶고 gzip으로 압축 |
tar -xzf backup.tar.gz | 풀기 |
tar -tzf backup.tar.gz | 내용 보기 |
zip -r site.zip site/ / unzip site.zip | zip 아카이브 |
네트워크
| ead> | | 명령어 | 기능 |
ip a | 인터페이스와 IP 주소 |
ip r | 라우팅 테이블 |
ping -c 4 8.8.8.8 | 호스트 응답 여부 |
ss -tulpn | 열린 포트와 그 포트를 쓰는 프로세스 |
dig example.com / nslookup example.com | DNS 조회 |
curl -I https://example.com | 응답 헤더만 |
curl -s https://api.example.com | jq | API 요청과 보기 좋은 JSON |
wget URL | 파일 다운로드 |
traceroute example.com | 호스트까지 패킷 경로 |
ssh user@host | 서버에 접속 |
ssh-keygen -t ed25519 | SSH 키 쌍 생성 |
scp file user@host:/tmp/ | 서버로 파일 복사 |
rsync -avz dir/ user@host:/srv/dir/ | 디렉터리 동기화 |
sudo ufw status | 방화벽 규칙 |
시스템과 디스크
| ead> | | 명령어 | 기능 |
uname -a | 커널과 아키텍처 |
cat /etc/os-release | 배포판과 버전 |
hostnamectl | 호스트 이름과 시스템 정보 |
lsblk | 디스크와 파티션 |
sudo mount /dev/sdb1 /mnt | 파티션 마운트 |
who / w | 지금 접속한 사용자 |
sudo reboot / sudo shutdown -h now | 재부팅 / 종료 |
요약
일상 작업에는 스무 개 남짓한 명령이면 충분합니다: ls, cd, cp, mv, rm, chmod, sudo, apt, ps, kill, systemctl, journalctl, grep, find, ss, curl, ssh. 이 리눅스 명령어 정리를 저장해 두고, 명령이 손에 익을 때까지 참고하세요. 명령어 그룹 전체는 강의에서 실습과 함께 다룹니다.