공공부하자개발 · 영어 학습 노트
리눅스
리눅스 명령어 요약명령어 한 장 요약0/3 완료
  • 01리눅스 명령어 모음
  • 02정규식 명령어 (grep·sed·awk·vi·Java)
  • 03vi · tmux 명령어
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 리눅스 명령어 요약 › 01 / 3

리눅스 명령어 모음

섹션 16진행 0 / 3

리눅스 명령어 모음

리눅스 운영 묶음 9개와 명령어 묶음 8개에서 다룬 명령을 한 장에 모았습니다. 파일·텍스트·권한·프로세스·자원·네트워크·서비스·패키지·로그·자바 진단 순서이고, 각 표는 "명령 · 뜻 · 예" 세 칸입니다. 옵션이 기억나지 않을 때 이 페이지에서 찾고 자세한 설명은 해당 레슨으로 갑니다.

01한눈에 보기
상황 명령
어디에 있나 pwd, ls -la, cd -
파일 찾기 find . -name '*.log' -mtime +7
내용 찾기 grep -rn 'ERROR' logs/
큰 파일 du -sh */ | sort -rh | head
디스크 df -h
프로세스 ps aux --sort=-%mem | head
실시간 top, top -H -p PID
포트 ss -ltnp
연결 확인 curl -s -o /dev/null -w '%{http_code}' URL
서비스 systemctl status myapp
로그 journalctl -u myapp -f
권한 chmod 750, chown app:app
압축 tar czf x.tgz dir, tar xzf x.tgz -C dst
복사 scp f host:/tmp/, rsync -avz src/ host:/dst/
자바 jps -l, jstack PID, jmap -histo:live PID
02파일·디렉터리
명령 뜻 예
pwd 현재 경로
cd - 직전 폴더
ls -la 숨김 포함 상세 ls -lt | head 최신순
ls -lh 사람이 읽는 크기
mkdir -p 중간 폴더까지 mkdir -p a/b/c
touch 빈 파일·시각 갱신
cp -r 폴더 복사 cp -rp src dst 권한 유지
mv 이동·이름 변경 mv -n 덮어쓰기 금지
rm -rf 폴더 삭제, 복구 불가 먼저 ls
rmdir 빈 폴더만
ln -sfn 심볼릭 링크 교체 ln -sfn rel/v2 current
realpath 절대 경로
stat -c '%s %A' 크기·권한
file 종류·인코딩 file x.sh CRLF 확인
bash
find . -name '*.log' -size +100M          # 이름 + 크기
find . -type f -mtime +30 -print          # 30일 넘음, 먼저 보기
find . -type f -mtime +30 -delete         # 같은 조건으로 삭제
find . -name '*.log' -exec gzip {} +      # 찾은 것에 명령
find . -name '*.log' -print0 | xargs -0 grep -c ERROR   # 공백 안전
du -xh --max-depth=1 / | sort -rh | head  # 용량 범인
03텍스트 보기·처리
명령 뜻 예
cat -A 탭·CR 표시 ^I 탭 ^M CR
head -n 20 / tail -n 20 앞·뒤 tail -f 따라가기
less 페이지 보기 /검색 n G q F
wc -l 줄 수 wc -c 바이트
sort -n -r -k2 -t, 숫자·역순·열·구분자 sort -u 중복 제거
uniq -c 연속 중복 세기 항상 sort 뒤
cut -d' ' -f2 열 자르기 cut -c1-10 글자
tr 'a-z' 'A-Z' 글자 변환 tr -d '\r' CR 제거
diff -u a b 차이 - 원본 + 변경
comm -12 공통 줄 정렬된 입력
column -t 열 맞춤
sed -i 's/\r$//' CRLF 고치기
bash
grep -n ERROR app.log                     # 줄 번호
grep -c ERROR app.log                     # 개수
grep -v INFO app.log                      # 제외
grep -A5 'Exception' app.log              # 뒤 5줄 (스택)
grep -E 'ERROR|WARN' app.log              # 정규식 또는
grep -oE '/api/[a-z]+' app.log | sort | uniq -c | sort -rn   # 빈도
grep -rl 'db-dev' conf/                   # 파일 이름만
grep -r --include='*.log' -c ERROR .      # 확장자 제한
zgrep ERROR app.log.1.gz                  # 압축 파일

sed -n '10,20p' f                         # 줄 범위
sed -n '/ERROR/p' f                       # 패턴 줄
sed 's/old/new/g' f                       # 치환 (화면만)
sed -i.bak 's/^server.port=.*/server.port=9090/' f   # 파일 수정 + 백업
sed '/^#/d' f                             # 주석 삭제
sed -E 's/^([0-9-]+) ([0-9:]+) /\2 /' f   # 그룹 재사용

awk '{print $3}' f                        # 3열
awk -F= '{print $1}' f                    # 구분자 =
awk '$3=="ERROR"{print $2}' f             # 조건
awk '{s+=$NF+0} END{print s/NR}' f        # 평균 ($NF+0 숫자 변환)
awk '{c[$6]++} END{for(k in c) print c[k], k}' f | sort -rn   # group by
04vi 최소 키
키 동작
i / Esc 입력 / 명령 모드
:w :q :wq :q! 저장·나가기·저장 후·버리고
dd yy p u 줄 삭제·복사·붙여넣기·되돌리기
x o A 글자 삭제·아래 줄 입력·줄 끝 입력
gg G :10 처음·끝·10번 줄
/단어 n 검색·다음
:%s/old/new/g 전체 치환 (gc 확인)
:set nu 줄 번호
05권한·사용자
명령 뜻 예
id, whoami, groups 나는 누구
chmod 750 d 숫자 권한 644 파일, 755 폴더, 600 비밀
chmod u+x f 기호 권한 go-w, a=r, -R
umask 077 새 파일 기본 022 기본
chown app:app -R d 소유자 root 필요
useradd -r -s /sbin/nologin app 서비스 계정 -m 홈 폴더
usermod -aG wheel kim 그룹 추가 -a 필수
passwd kim 비밀번호
getent passwd app 계정 정보 getent group g
sudo 명령 root 로 한 명령 sudo -u app cmd
sudo -l 허용 목록 visudo 편집
chmod g+s d / +t setgid / sticky 공유 폴더 / /tmp
text
-rwxr-x---  = 750   r=4 w=2 x=1   소유자 그룹 기타
폴더의 x = 들어가기.  x 없으면 안 파일 접근 불가
06프로세스·신호
명령 뜻 예
ps -ef 전체, PPID ps -ef --forest 트리
ps aux --sort=-%cpu CPU 순 --sort=-rss 메모리
ps -o pid,etime,cmd -p PID 열 선택
pgrep -f 'app.jar' PID 찾기 ps | grep '[a]pp'
jps -l 자바 프로세스
kill PID TERM 15 먼저
kill -9 PID KILL 9 마지막 수단
kill -0 PID 생존 확인
pkill -f 'app.jar' 이름으로 범위 주의
nohup cmd & 터미널 무관 disown
jobs bg fg Ctrl+Z 작업 제어 kill %1
nice -n 10 cmd 낮은 우선순위 ionice -c3
$ $! $? 내 PID·백그라운드 PID·종료 코드
종료 코드 뜻
0 정상
1 앱 에러
2 사용법 오류
126 / 127 실행 불가 / 명령 없음
137 128+9 KILL (OOM killer)
143 128+15 TERM (정상 정지)
07자원·디스크
명령 뜻 볼 것
top 실시간 load, us wa, avail
top -b -n 1 | head -n 15 한 화면 스크립트용
top -H -p PID 스레드별 TID → printf '%x'
uptime load average nproc 과 비교
free -m 메모리 available, Swap used
vmstat 1 5 흐름 r so wa
iostat -x 1 3 디스크 I/O %util await
df -h / df -i 파티션 / inode Use%
du -sh */ 폴더별 sort -rh
lsof -p PID 열린 파일 lsof +L1 삭제된 열린 파일
lsof -i :8080 포트 사용 프로세스
ls /proc/PID/fd | wc -l FD 수 /proc/PID/limits
: > file 열린 로그 비우기 rm 대신
08네트워크
명령 뜻 예
ip -br addr 내 IP hostname -I
ip route 게이트웨이 default via
ss -ltnp 듣는 포트 ss -tnp 연결
ss -s 요약 TIME-WAIT
ping -c 3 h ICMP 막힌 망 많음
nc -zv h 1521 포트 열림 timeout 3 bash -c '</dev/tcp/h/1521'
getent hosts h 이름 풀기 dig +short h
traceroute -n h 경로 mtr -n h
scp -P 2222 f h:/tmp/ 복사 -r 폴더
rsync -avz src/ h:/dst/ 동기화 -n 미리, --delete 주의
ssh h 'cmd' 원격 명령 -L 8080:localhost:8080 터널
ssh-keygen -t ed25519 키 ssh-copy-id h
firewall-cmd --add-port=8080/tcp --permanent 방화벽 --reload 필수
tcpdump -i any port 8080 -c 10 패킷 -c 필수
bash
curl -s URL                                       # 본문
curl -s -o /dev/null -w '%{http_code}\n' URL      # 코드만
curl -sI URL                                      # 헤더만
curl -sf -m 5 URL                                 # 실패 시 종료 코드 (7 거부, 22 HTTP, 28 타임아웃)
curl -s -X POST -H 'Content-Type: application/json' -d '{"id":1}' URL
curl -s -o /dev/null -w 'connect=%{time_connect} first=%{time_starttransfer}\n' URL
export http_proxy=http://proxy:3128 no_proxy=localhost,127.0.0.1,.corp
java -Dhttp.proxyHost=proxy -Dhttp.proxyPort=3128 -Dhttp.nonProxyHosts='localhost|*.corp' -jar app.jar
09서비스·systemd
명령 뜻
systemctl daemon-reload 유닛 파일 다시 읽기 (수정 후 필수)
systemctl start/stop/restart myapp 제어
systemctl status myapp 상태·PID·최근 로그
systemctl enable --now myapp 부팅 시작 + 지금 시작
systemctl is-active myapp 스크립트용
systemctl list-units --type=service --state=running 실행 중 목록
systemctl reset-failed myapp 재시작 상한 초기화
journalctl -u myapp -f 실시간 로그
journalctl -u myapp -n 100 --since today 최근·기간
journalctl -k | grep -i oom 커널 OOM
systemd-analyze verify x.service 유닛 문법 검사
ini
[Unit]
Description=MyApp
After=network-online.target
[Service]
User=myapp
WorkingDirectory=/opt/myapp
EnvironmentFile=-/opt/myapp/conf/env
ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/myapp/current/app.jar
SuccessExitStatus=143
Restart=on-failure
RestartSec=5
TimeoutStopSec=30
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target

예약 작업·링크

명령 뜻
crontab -e / crontab -l 내 예약 편집 / 목록
*/5 * * * * /opt/app/chk.sh >> /var/log/chk.log 2>&1 5분마다, 출력은 파일로
0 3 * * 1-5 /opt/app/backup.sh 평일 03:00
@daily @reboot 매일 자정 / 부팅 때
at 23:00 -f job.sh 한 번만 예약
systemctl list-timers systemd 타이머 목록
flock -n /tmp/job.lock cmd 겹침 실행 방지
ln -sfn release-3 current 링크 대상 바꾸기 (배포 전환)
readlink -f current 링크가 가리키는 실제 경로

cron 은 PATH 가 짧으니 명령은 절대 경로로 씁니다. 자세한 사용법은 리눅스 명령어 10 에 있습니다.

10패키지·시스템
명령 뜻
hostnamectl, uname -r -m, nproc 서버 식별
cat /etc/os-release OS 버전
date +%F, date +%Y%m%d_%H%M%S 날짜 형식
date -d '-7 day' +%F 날짜 계산
timedatectl 시간대·NTP
dnf install -y pkg / remove 설치·삭제
dnf update --security 보안 패치
dnf provides */ss 명령의 패키지
dnf history 이력·undo
rpm -qa | grep java 설치 목록
rpm -ql pkg / rpm -qf /path 파일 목록 / 파일의 패키지
dnf install ./x.rpm 파일 설치 (의존성 저장소)
dnf download --resolve pkg 폐쇄망 반입용
last reboot, who 재부팅 이력·접속자
shutdown -r +10 10분 뒤 재부팅
11압축·전송·검증
명령 뜻
tar czf x.tgz dir 묶기+gzip
tar tzf x.tgz 목록 (풀기 전 확인)
tar xzf x.tgz -C dst 지정 폴더에 풀기
tar czf x.tgz -C /opt myapp 상대 경로로 묶기
tar czf x.tgz --exclude='*.log' dir 제외
tar xzOf x.tgz path/file 파일 하나 화면에
gzip -k f / gunzip f.gz 압축·해제 (-k 원본 유지)
zcat f.gz | head 풀지 않고 읽기
zip -r x.zip dir / unzip -l x.zip Windows 호환
unzip -p app.jar META-INF/MANIFEST.MF jar 안 파일
sha256sum f > f.sha256 / sha256sum -c f.sha256 체크섬
split -b 500m f part_ / cat part_* > f 분할·합치기
12로그·디스크 운영
항목 명령·설정
응급 df -h → du -xh --max-depth=2 / → lsof +L1 → : > big.log
오래된 로그 find logs -name '*.log' -mtime +30 -delete
압축 보관 find logs -name '*.log' -mtime +7 ! -name '*.gz' -exec gzip {} +
힙 덤프 정리 find logs -name '*.hprof' -mtime +7 -delete
logrotate 검사 logrotate -d /etc/logrotate.d/myapp
저널 상한 journalctl --disk-usage, --vacuum-size=1G
text
# /etc/logrotate.d/myapp  (자바 stdout·catalina.out 은 copytruncate)
/opt/myapp/logs/stdout.log {
    daily
    rotate 14
    maxsize 200M
    compress
    delaycompress
    copytruncate
    missingok
    notifempty
    dateext
    su myapp myapp
}
text
# cron: 분 시 일 월 요일 (cron.d 는 사용자 칸 추가). 상단 PATH 필수, 출력은 파일로
PATH=/usr/local/bin:/usr/bin:/bin
10 3 * * *   myapp  find /opt/myapp/logs -name 'app.*.log*' -mtime +30 -delete >> /opt/myapp/logs/cleanup.log 2>&1
*/5 * * * *  root   /opt/myapp/bin/check.sh
0 9 * * 1-5  kim    /opt/tools/report.sh       # 평일 09:00
13자바 배포·진단
명령 뜻
java -Xms1g -Xmx1g -Duser.timezone=Asia/Seoul -jar app.jar 기본 옵션
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/ OOM 덤프
-Djava.security.egd=file:/dev/./urandom 시작 지연 방지
-Dspring.profiles.active=prod 프로필
jps -l 자바 PID
jstack PID > td.txt 스레드 덤프 (5초 간격 3장)
jcmd PID Thread.print 같은 것
jstat -gcutil PID 1000 5 GC 사용률 (O, FGC)
jmap -histo:live PID | head -n 20 힙 상위 클래스
jcmd PID GC.heap_dump /path/h.hprof 힙 덤프 (앱 멈춤)
jcmd PID VM.flags 적용된 옵션
sudo -u myapp jstack PID 앱 계정으로
dmesg -T | grep -i 'killed process' 커널 OOM 증거
bash
grep -oE 'Thread.State: [A-Z_]+' td.txt | sort | uniq -c | sort -rn   # 상태 집계
grep -B20 'locked <0x...>' td.txt | grep '^"'                          # 잠금 잡은 스레드
grep -A10 "nid=0x$(printf '%x' TID)" td.txt                            # top -H TID → 스택
14셸 스크립트 뼈대
bash
#!/usr/bin/env bash
set -euo pipefail
WORK=$(mktemp -d); trap 'rm -rf "$WORK"' EXIT
log() { printf '%s [%s] %s\n' "$(date '+%F %T')" "$1" "$2"; }
die() { log ERROR "$1" >&2; exit "${2:-1}"; }
DIR=${1:?사용: $0 <폴더>}
[ -d "$DIR" ] || die "폴더 없음: $DIR"
LOCK=/var/run/job.lock; mkdir "$LOCK" 2>/dev/null || die "이미 실행 중"; trap 'rm -rf "$LOCK" "$WORK"' EXIT
for f in "$DIR"/*.log; do [ -e "$f" ] || continue; gzip "$f"; done
while IFS= read -r line; do echo "$line"; done < file
문법 뜻
${v:-기본} ${v:?메시지} 기본값 · 필수
${p##*/} ${p%/*} ${p%.jar} basename · dirname · 확장자 제거
[ -f f ] [ -d d ] [ -z s ] [ n -gt 3 ] 파일·폴더·빈 문자열·숫자
[[ $f == *.log ]] 패턴
$( ) $(( )) 명령 치환 · 산술
cmd || true 실패 무시
set +e; cmd; rc=$?; set -e 종료 코드 잡기
trap 'cmd' EXIT/ERR/INT 정리·에러 줄·중단
15셸 활용
키·표기 동작
Ctrl+R 히스토리 검색
!! sudo !! !$ 직전 명령 · sudo 로 · 마지막 인자
Ctrl+A/E Ctrl+U/K Ctrl+W 줄 처음/끝 · 앞/뒤 삭제 · 단어 삭제
Ctrl+L Ctrl+C Ctrl+Z Ctrl+D 화면 지움 · 중단 · 멈춤 · 입력 끝
Ctrl+S → Ctrl+Q 화면 멈춤 풀기
Tab Tab Tab 자동 완성 · 후보
alias ll='ls -la' 별칭 (~/.bashrc)
{1..5} {a,b} f{,.bak} 중괄호 확장
* ? [1-3] 글로브
tee f 화면+파일
xargs -0 xargs -I{} 인자 넘기기
watch -n 2 'cmd' 반복 실행
tmux new -s x / Ctrl+B d / tmux attach -t x 세션 유지
PS1='[\u@\h \W]\$ ' 프롬프트
16체크리스트

상황별로 명령을 치는 순서입니다. 각 단계가 통과해야 다음으로 갑니다.

  • 서버 첫 접속: hostnamectl → nproc free -m df -h → timedatectl → ss -ltnp
  • 앱이 안 뜸: systemctl status → journalctl -u -n 50 → sudo -u app java -jar 로 직접 실행
  • 연결 안 됨: ss -ltnp → curl localhost → firewall-cmd --list-all → 원격에서 nc -zv → getent hosts
  • 느림: uptime → top 의 us/wa → top -H -p → jstack 3장 → jstat -gcutil
  • 디스크 참: df -h → du -xh --max-depth=2 → lsof +L1 → : > log → find -mtime +N -delete
  • 앱이 죽음: 종료 코드 137/143 → dmesg -T | grep -i killed → .hprof 유무 → 앱 로그
  • 배포: 체크섬 → releases/ 복사 → ln -sfn current → restart → 헬스 체크 → 실패 시 rollback
  • 설정 변경: 백업 cp f{,.bak} → 수정 → diff → 적용 (nginx -t && reload, daemon-reload)
  • 삭제: find ... -print 로 확인 → 같은 조건으로 -delete
  • 긴 작업: tmux 안에서 시작 → nice ionice → 출력은 로그 파일로
목차
  • 한눈에 보기
  • 파일·디렉터리
  • 텍스트 보기·처리
  • vi 최소 키
  • 권한·사용자
  • 프로세스·신호
  • 자원·디스크
  • 네트워크
  • 서비스·systemd
  • 패키지·시스템
  • 압축·전송·검증
  • 로그·디스크 운영
  • 자바 배포·진단
  • 셸 스크립트 뼈대
  • 셸 활용
  • 체크리스트
참고 영상 · 인터넷 연결 시 유튜브 검색이 열립니다리눅스 리눅스 명령어 모음리눅스 명령어 명령어 요약
이전08 nginx 로드밸런싱과 운영다음02 정규식 명령어 (grep·sed·awk·vi·Java)