🎯 목표: Linux 시스템을 더 깊이 이해하고 실무에서 필요한 고급 기능들을 마스터하기
⏰ 예상 시간: 2-3시간
📋 준비물: - 기본 명령어에 익숙한 상태 (기본 명령어 가이드 완료) - 터미널 접근 권한
Linux에서 가장 중요한 개념 중 하나가 바로 권한(Permission)입니다. 마치 집의 열쇠처럼, 누가 어떤 파일을 읽고, 쓰고, 실행할 수 있는지를 결정해요.
ls -l
결과를 보면 이런 형태로 나타납니다:
-rw-r--r-- 1 user group 1234 Jan 15 10:30 파일.txt drwxr-xr-x 2 user group 4096 Jan 15 10:30 폴더
권한 부분 해석 (맨 앞 10글자):
-
= 일반 파일d
= 디렉토리(폴더)l
= 심볼릭 링크각 권한의 의미:
r
(read): 읽기 권한w
(write): 쓰기 권한x
(execute): 실행 권한-
: 권한 없음🔍 권한 시스템 상세 설명:
1. 파일 타입별 권한 의미:
r
: 파일 내용 읽기 가능w
: 파일 내용 수정/삭제 가능x
: 파일을 프로그램으로 실행 가능r
: 디렉토리 내용 목록 보기 가능 (ls 명령어)w
: 디렉토리 내 파일 생성/삭제/이름변경 가능x
: 디렉토리로 이동 가능 (cd 명령어)2. 사용자 그룹별 권한:
3. 권한 조합 예시:
rwx
: 읽기 + 쓰기 + 실행 (모든 권한)rw-
: 읽기 + 쓰기 (실행 불가)r-x
: 읽기 + 실행 (쓰기 불가)r–
: 읽기만 가능—
: 권한 없음🔍 예시 해석:
-rw-r--r-- → 소유자는 읽기+쓰기, 그룹과 기타는 읽기만 가능 drwxr-xr-x → 소유자는 모든 권한, 그룹과 기타는 읽기+실행만 가능
의미: “Change Mode” (모드 변경)
🔍 chmod 명령어 상세 설명:
1. 기본 문법:
chmod [옵션] 권한 파일명
2. 권한 표현 방식:
3. 숫자 계산법 상세:
7
= 4+2+1 = rwx (모든 권한)6
= 4+2+0 = rw- (읽기+쓰기)5
= 4+0+1 = r-x (읽기+실행)4
= 4+0+0 = r– (읽기만)3
= 0+2+1 = -wx (쓰기+실행)2
= 0+2+0 = -w- (쓰기만)1
= 0+0+1 = –x (실행만)0
= 0+0+0 = — (권한 없음)📊 숫자 방식 (가장 많이 사용):
# 숫자로 권한 설정 chmod 755 파일.txt # rwxr-xr-x chmod 644 파일.txt # rw-r--r-- chmod 600 파일.txt # rw-------
🎯 자주 사용하는 권한:
chmod 755 스크립트.sh # 실행 파일 (소유자 모든 권한, 다른 사용자는 읽기+실행) chmod 644 문서.txt # 일반 파일 (소유자 읽기+쓰기, 다른 사용자는 읽기만) chmod 600 비밀.txt # 개인 파일 (소유자만 읽기+쓰기) chmod 700 개인폴더/ # 개인 폴더 (소유자만 접근)
📝 문자 방식:
# 소유자에게 실행 권한 추가 chmod u+x 파일.txt # 그룹에서 쓰기 권한 제거 chmod g-w 파일.txt # 모든 사용자에게 읽기 권한 추가 chmod a+r 파일.txt # 여러 권한 한 번에 설정 chmod u+rwx,g+rx,o+r 파일.txt
4. 문자 방식 상세 설명:
5. 재귀적 권한 변경:
# 폴더와 하위 모든 파일에 권한 적용 chmod -R 755 폴더명/ # 특정 파일 타입만 권한 변경 find . -name "*.sh" -exec chmod +x {} \;
💡 실습해보기:
# 1. 테스트 파일 만들기 echo "echo 'Hello World!'" > test.sh # 2. 현재 권한 확인 ls -l test.sh # 3. 실행 권한 추가 chmod +x test.sh # 4. 권한 변경 확인 ls -l test.sh # 5. 스크립트 실행 ./test.sh
의미: “Change Owner” (소유자 변경)
# 파일 소유자 변경 (root 권한 필요) sudo chown 새소유자 파일.txt # 파일 소유자와 그룹 동시 변경 sudo chown 새소유자:새그룹 파일.txt # 폴더와 하위 모든 파일 소유자 변경 sudo chown -R 새소유자:새그룹 폴더/
⚠️ 주의: chown
은 보통 관리자 권한이 필요해서 sudo
를 함께 사용합니다.
의미: “Process Status” (프로세스 상태)
🔍 ps 명령어 상세 설명:
1. 기본 문법:
ps [옵션]
2. 주요 옵션들:
3. 자주 사용하는 조합:
# 현재 터미널의 프로세스만 보기 ps # 모든 프로세스 자세히 보기 ps aux # 특정 프로세스 찾기 ps aux | grep 프로세스명 # 프로세스 트리 형태로 보기 ps auxf # 특정 사용자의 프로세스만 보기 ps -u 사용자명 # 프로세스 ID로 특정 프로세스 보기 ps -p PID번호
결과 해석:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 225868 9876 ? Ss 10:30 0:01 /sbin/init
4. 각 필드 상세 설명:
?
는 터미널 없음)S
: Sleeping (대기 중)R
: Running (실행 중)Z
: Zombie (좀비 프로세스)D
: Uninterruptible sleep (중단 불가능한 대기)5. 프로세스 상태 코드 상세:
S
: 대기 중 (interruptible sleep)R
: 실행 중 또는 실행 대기 중D
: 디스크 I/O 대기 (uninterruptible sleep)Z
: 좀비 프로세스 (종료되었지만 부모가 회수하지 않음)T
: 정지됨 (stopped)X
: 죽은 프로세스 (dead)<
: 높은 우선순위N
: 낮은 우선순위L
: 메모리 페이지가 잠겨있음s
: 세션 리더l
: 멀티스레드+
: 포그라운드 프로세스 그룹의미: 시스템 리소스 사용량을 실시간으로 보여줘요
🔍 top 명령어 상세 설명:
1. 기본 문법:
top [옵션]
2. 주요 옵션들:
3. 기본 사용법:
# 실시간 시스템 모니터링 top # 더 예쁜 버전 (설치 필요) htop # 1초마다 업데이트 top -d 1 # 특정 프로세스만 모니터링 top -p 1234 # 10번만 실행 후 종료 top -n 10
4. 화면 구성:
5. 조작법 상세:
6. 상단 정보 해석:
top - 14:30:15 up 2:45, 2 users, load average: 0.52, 0.58, 0.59 Tasks: 123 total, 1 running, 122 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.7 id, 0.0 wa, 0.0 hi, 0.0 si MiB Mem : 8192.0 total, 2048.0 free, 3072.0 used, 3072.0 buff/cache MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4096.0 avail Mem
us
: 사용자 프로세스sy
: 시스템 프로세스ni
: nice 값이 변경된 프로세스id
: 유휴 상태wa
: I/O 대기hi
: 하드웨어 인터럽트si
: 소프트웨어 인터럽트</code>
의미: “Disk Free” (디스크 여유 공간)
🔍 df 명령어 상세 설명:
1. 기본 문법:
df [옵션] [파일시스템]
2. 주요 옵션들:
3. 기본 사용법:
# 디스크 사용량 보기 df # 사람이 읽기 쉬운 형태로 보기 df -h # 특정 폴더의 디스크 사용량 df -h /home # inode 사용량 확인 df -i # 파일시스템 타입과 함께 표시 df -hT
4. 결과 해석:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 20G 8.5G 11G 45% / /dev/sda2 100G 45G 50G 48% /home
5. 실무 활용:
의미: “Disk Usage” (디스크 사용량)
🔍 du 명령어 상세 설명:
1. 기본 문법:
du [옵션] [경로]
2. 주요 옵션들:
3. 기본 사용법:
# 현재 폴더의 사용량 du -h # 현재 폴더 총 사용량만 보기 du -sh # 하위 폴더별 사용량 보기 du -h --max-depth=1 # 큰 폴더 찾기 (상위 10개) du -h | sort -hr | head -10 # 특정 폴더의 사용량 du -sh /home/user # 모든 파일과 폴더 표시 du -ah | head -20
4. 결과 해석:
4.0K ./폴더1 8.0K ./폴더2 12K .
5. 실무 활용 팁:
find . -mtime +30 -exec du -h {} +
du -sh /backup/source/
💡 실습해보기:
# 1. 시스템 상태 한 번에 확인 echo "=== 디스크 사용량 ===" df -h echo "=== 메모리 사용량 ===" free -h echo "=== 현재 폴더 사용량 ===" du -sh . echo "=== 실행 중인 프로세스 개수 ===" ps aux | wc -l
의미: “Web Get” (웹에서 가져오기)
🔍 wget 명령어 상세 설명:
1. 기본 문법:
wget [옵션] URL
2. 주요 옵션들:
3. 기본 사용법:
# 파일 다운로드 wget https://example.com/file.txt # 다른 이름으로 저장 wget -O 새이름.txt https://example.com/file.txt # 이어받기 (중단된 다운로드 재개) wget -c https://example.com/bigfile.zip # 백그라운드에서 다운로드 wget -b https://example.com/file.txt # 조용한 다운로드 wget -q https://example.com/file.txt # 전체 웹사이트 다운로드 (주의!) wget -r -np https://example.com/
4. 실무 활용:
-c
옵션으로 중단 시 재개 가능-b
옵션으로 터미널 차단 방지-r
옵션으로 전체 사이트 다운로드의미: “Client URL” (클라이언트 URL)
🔍 curl 명령어 상세 설명:
1. 기본 문법:
curl [옵션] URL
2. 주요 옵션들:
3. 기본 사용법:
# 웹페이지 내용 보기 curl https://example.com # 파일 다운로드 curl -O https://example.com/file.txt # POST 요청 보내기 curl -X POST -d "data=value" https://api.example.com # 헤더 정보 포함해서 보기 curl -I https://example.com # JSON 데이터 전송 curl -X POST -H "Content-Type: application/json" \ -d '{"name":"test","value":123}' \ https://api.example.com/data # 쿠키와 함께 요청 curl -b "session=abc123" https://example.com
4. HTTP 메서드별 사용법:
5. 실무 활용:
의미: 네트워크 연결 상태와 응답 시간을 확인하는 도구
🔍 ping 명령어 상세 설명:
1. 기본 문법:
ping [옵션] 호스트명/IP주소
2. 주요 옵션들:
3. 기본 사용법:
# 구글 서버 연결 확인 ping google.com # 4번만 ping 보내기 ping -c 4 google.com # 빠른 ping (간격 줄이기) ping -i 0.5 google.com # 큰 패킷으로 ping ping -s 1024 google.com # 응답 시간 제한 ping -W 5 google.com
4. 결과 해석:
PING google.com (142.250.191.78) 56(84) bytes of data. 64 bytes from 142.250.191.78: icmp_seq=1 time=15.2 ms 64 bytes from 142.250.191.78: icmp_seq=2 time=14.8 ms 64 bytes from 142.250.191.78: icmp_seq=3 time=15.1 ms 64 bytes from 142.250.191.78: icmp_seq=4 time=14.9 ms --- google.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 14.800/15.000/15.200/0.158 ms
5. 실무 활용:
💡 실습해보기:
# 1. 네트워크 상태 확인 ping -c 3 google.com # 2. 간단한 웹페이지 가져오기 curl -s https://httpbin.org/ip # 3. 파일 다운로드 (작은 파일) wget -q https://httpbin.org/robots.txt && cat robots.txt
의미: “Tape Archive” (테이프 아카이브)
🔍 tar 명령어 상세 설명:
1. 기본 문법:
tar [옵션] [파일명] [대상]
2. 주요 옵션들:
3. 압축 방식별 사용법:
# gzip 압축 (가장 일반적) tar -czf 압축파일.tar.gz 폴더명/ # bzip2 압축 (더 높은 압축률) tar -cjf 압축파일.tar.bz2 폴더명/ # xz 압축 (최고 압축률, 느림) tar -cJf 압축파일.tar.xz 폴더명/ # 압축 없이 tar만 생성 tar -cf 압축파일.tar 폴더명/
4. 압축 해제:
# tar.gz 파일 압축 풀기 tar -xzf 압축파일.tar.gz # tar.bz2 파일 압축 풀기 tar -xjf 압축파일.tar.bz2 # tar.xz 파일 압축 풀기 tar -xJf 압축파일.tar.xz # 특정 디렉토리에 압축 풀기 tar -xzf 압축파일.tar.gz -C /target/directory/ # 압축 풀 때 내용 확인하며 풀기 tar -xzf 압축파일.tar.gz -v
5. 압축 파일 내용 확인:
# 압축 파일 내용만 보기 (풀지 않고) tar -tzf 압축파일.tar.gz # 특정 파일만 압축 해제 tar -xzf 압축파일.tar.gz 파일명 # 압축 파일에 파일 추가 tar -rf 압축파일.tar 새파일.txt
6. 실무 활용 팁:
의미: Windows와 호환되는 압축 형식
🔍 zip/unzip 명령어 상세 설명:
1. zip 기본 문법:
zip [옵션] 압축파일.zip [파일/폴더]
2. zip 주요 옵션들:
3. zip 사용법:
# ZIP 파일 만들기 zip -r 압축파일.zip 폴더명/ # 암호 설정 zip -e -r 보안압축.zip 폴더명/ # 최대 압축률 zip -9 -r 최대압축.zip 폴더명/ # 특정 파일만 압축 zip 압축파일.zip file1.txt file2.txt # 압축 파일에 파일 추가 zip 압축파일.zip 새파일.txt
4. unzip 기본 문법:
unzip [옵션] 압축파일.zip
5. unzip 주요 옵션들:
6. unzip 사용법:
# ZIP 파일 풀기 unzip 압축파일.zip # 특정 폴더에 풀기 unzip 압축파일.zip -d 대상폴더/ # ZIP 파일 내용 보기 unzip -l 압축파일.zip # 덮어쓰기하며 압축 해제 unzip -o 압축파일.zip # 암호가 있는 파일 압축 해제 unzip -P 비밀번호 압축파일.zip
💡 실습해보기:
# 1. 테스트 폴더 구조 만들기 mkdir -p 테스트/문서 테스트/이미지 echo "중요한 문서" > 테스트/문서/계획서.txt echo "이미지 파일" > 테스트/이미지/사진.jpg # 2. tar.gz로 압축 tar -czf 테스트백업.tar.gz 테스트/ # 3. 원본 삭제 rm -rf 테스트/ # 4. 압축 파일에서 복원 tar -xzf 테스트백업.tar.gz # 5. 복원 확인 find 테스트/ -type f
의미: 강력한 텍스트 처리 도구
🔍 awk 명령어 상세 설명:
1. 기본 문법:
awk [옵션] '패턴 {액션}' 파일명
2. 주요 옵션들:
3. 기본 개념:
4. 기본 사용법:
# 특정 열만 출력 (공백으로 구분) ps aux | awk '{print $1, $2, $11}' # 사용자, PID, 명령어만 # 조건에 맞는 행만 출력 ps aux | awk '$3 > 5.0 {print $0}' # CPU 사용률 5% 이상 # 계산하기 ls -l | awk '{sum += $5} END {print "총 크기:", sum}' # CSV 파일 처리 (쉼표 구분) awk -F',' '{print $1, $3}' data.csv # 특정 패턴이 있는 행만 출력 awk '/error/ {print}' log.txt # 행 번호와 함께 출력 awk '{print NR, $0}' file.txt
5. 고급 사용법:
# BEGIN, END 블록 사용 awk 'BEGIN {sum=0} {sum+=$1} END {print "총합:", sum}' numbers.txt # 조건문 사용 awk '{if ($1 > 100) print "큰값:", $1; else print "작은값:", $1}' data.txt # 배열 사용 awk '{count[$1]++} END {for (i in count) print i, count[i]}' log.txt # 함수 사용 awk '{print length($0), $0}' file.txt # 각 행의 길이와 내용
6. 실무 활용:
의미: “Stream Editor” (스트림 편집기)
🔍 sed 명령어 상세 설명:
1. 기본 문법:
sed [옵션] '명령어' 파일명
2. 주요 옵션들:
3. 기본 명령어들:
4. 기본 사용법:
# 특정 문자열 바꾸기 sed 's/찾을문자/바꿀문자/g' 파일.txt # 특정 줄 삭제 sed '3d' 파일.txt # 3번째 줄 삭제 # 특정 줄만 출력 sed -n '1,5p' 파일.txt # 1~5번째 줄만 출력 # 파일 직접 수정 sed -i 's/old/new/g' 파일.txt # 여러 명령어 실행 sed -e 's/old/new/g' -e 's/bad/good/g' 파일.txt # 특정 패턴이 있는 행만 출력 sed -n '/pattern/p' 파일.txt
5. 고급 사용법:
# 조건부 치환 (특정 줄에서만) sed '1,10s/old/new/g' 파일.txt # 1~10번째 줄에서만 # 정규표현식 사용 sed 's/[0-9]*/숫자/g' 파일.txt # 모든 숫자를 '숫자'로 변경 # 행 추가 sed '3a\새로운 줄' 파일.txt # 3번째 줄 뒤에 추가 sed '3i\새로운 줄' 파일.txt # 3번째 줄 앞에 추가 # 행 교체 sed '3c\교체된 줄' 파일.txt # 3번째 줄을 교체 # 여러 파일 처리 sed -i 's/old/new/g' *.txt
6. 실무 활용:
의미: 텍스트 데이터를 정렬하는 도구
🔍 sort 명령어 상세 설명:
1. 기본 문법:
sort [옵션] 파일명
2. 주요 옵션들:
3. 기본 사용법:
# 파일 내용 정렬 sort 파일.txt # 숫자로 정렬 sort -n 숫자파일.txt # 역순 정렬 sort -r 파일.txt # 중복 제거하며 정렬 sort -u 파일.txt # 특정 열로 정렬 sort -k 2 파일.txt # 2번째 열로 정렬 # 여러 열로 정렬 sort -k 1,1 -k 2,2n 파일.txt # 1열로 정렬 후 2열로 숫자 정렬
4. 고급 사용법:
# 쉼표로 구분된 파일 정렬 sort -t',' -k2,2n data.csv # 파일 크기로 정렬 (ls -lh 결과) ls -lh | sort -k5,5hr # 날짜로 정렬 sort -M 날짜파일.txt # 사람이 읽기 쉬운 크기로 정렬 du -h | sort -h # 특정 패턴 제외하고 정렬 sort 파일.txt | grep -v "제외할패턴"
5. 실무 활용:
💡 실습해보기:
# 1. 테스트 데이터 만들기 echo -e "사과 100\n바나나 200\n오렌지 50\n포도 150" > 과일.txt # 2. 다양한 방식으로 정렬 echo "=== 이름순 정렬 ===" sort 과일.txt echo "=== 가격순 정렬 ===" sort -k 2 -n 과일.txt echo "=== 가격 높은 순 ===" sort -k 2 -nr 과일.txt # 3. 텍스트 처리 echo "=== 과일 이름만 출력 ===" awk '{print $1}' 과일.txt echo "=== 총 가격 계산 ===" awk '{sum += $2} END {print "총합:", sum}' 과일.txt
의미: 실행 중인 프로세스를 종료하는 명령어
🔍 kill 명령어 상세 설명:
1. 기본 문법:
kill [옵션] PID
2. 주요 옵션들:
3. 시그널 종류:
4. 기본 사용법:
# 프로세스 ID로 종료 kill 1234 # 강제 종료 kill -9 1234 # 시그널 이름으로 종료 kill -TERM 1234 # 시그널 번호로 종료 kill -15 1234 # 프로세스 이름으로 종료 killall 프로세스명 # 특정 프로세스 찾아서 종료 pkill -f "프로세스명" # 특정 사용자의 프로세스 종료 pkill -u 사용자명
5. 프로세스 찾기:
# 프로세스 ID 찾기 pgrep 프로세스명 # 프로세스 정보 확인 ps -p PID번호 # 특정 포트 사용 프로세스 찾기 lsof -i :포트번호 # 프로세스 트리 보기 pstree PID번호
6. 실무 활용:
의미: “No Hang Up” (터미널 종료되어도 계속 실행)
🔍 nohup 명령어 상세 설명:
1. 기본 문법:
nohup 명령어 [옵션] &
2. 주요 특징:
3. 기본 사용법:
# 백그라운드에서 실행 nohup 명령어 & # 출력을 파일로 저장 nohup python script.py > output.log 2>&1 & # 출력을 /dev/null로 버리기 nohup 명령어 > /dev/null 2>&1 & # 특정 파일로 출력 저장 nohup 명령어 > myoutput.log 2>&1 &
4. 백그라운드 작업 관리:
# 실행 중인 백그라운드 작업 확인 jobs # 백그라운드 작업을 포그라운드로 가져오기 fg %1 # 백그라운드 작업 일시 정지 bg %1 # 백그라운드 작업 종료 kill %1 # 모든 백그라운드 작업 확인 ps aux | grep -v grep | grep "nohup"
5. 고급 사용법:
# 여러 명령어를 백그라운드에서 실행 nohup bash -c "command1 && command2 && command3" & # 특정 시간에 실행 nohup at 명령어 & # 로그 로테이션과 함께 실행 nohup 명령어 | tee -a logfile.log & # 환경 변수 설정과 함께 실행 nohup env VAR=value 명령어 &
6. 실무 활용:
# 1. 가상 로그 파일 만들기 cat > access.log << EOF 192.168.1.1 - - [15/Jan/2024:10:30:00] "GET /index.html HTTP/1.1" 200 1234 192.168.1.2 - - [15/Jan/2024:10:30:01] "GET /about.html HTTP/1.1" 404 567 192.168.1.3 - - [15/Jan/2024:10:30:02] "POST /login HTTP/1.1" 500 890 192.168.1.1 - - [15/Jan/2024:10:30:03] "GET /admin.html HTTP/1.1" 403 234 192.168.1.4 - - [15/Jan/2024:10:30:04] "GET /index.html HTTP/1.1" 200 1234 EOF # 2. 로그 분석하기 echo "=== 전체 요청 수 ===" wc -l access.log echo "=== 에러 로그 수 ===" grep -c -i error access.log echo "=== 경고 로그 수 ===" grep -c -i warning access.log echo "=== 최근 10개 에러:" grep -i error access.log | tail -10 echo "=== 가장 많이 요청된 페이지 ===" awk '{print $7}' access.log | sort | uniq -c | sort -nr echo "=== IP별 요청 수 ===" awk '{print $1}' access.log | sort | uniq -c | sort -nr echo "=== 에러율 계산 ===" total=$(wc -l < access.log) errors=$(grep -c -i error access.log) echo "총 요청: $total, 에러: $errors, 에러율: $(echo "scale=2; $errors*100/$total" | bc)%"
상황: 디스크 공간이 부족해서 큰 파일들을 찾아 정리해야 해요.
# 1. 디스크 사용량 확인 df -h # 2. 큰 폴더 찾기 echo "=== 큰 폴더 Top 10 ===" du -h / 2>/dev/null | sort -hr | head -10 # 3. 큰 파일 찾기 (100MB 이상) echo "=== 큰 파일 찾기 ===" find / -size +100M -type f 2>/dev/null | head -10 # 4. 오래된 로그 파일 찾기 (30일 이상) echo "=== 오래된 로그 파일 ===" find /var/log -name "*.log" -mtime +30 2>/dev/null # 5. 임시 파일 정리 echo "=== 임시 파일 정리 ===" find /tmp -type f -mtime +7 2>/dev/null | wc -l
상황: 시스템이 느려졌어요. 원인을 찾아보세요.
# 1. 시스템 부하 확인 echo "=== 시스템 부하 ===" uptime # 2. 메모리 사용량 확인 echo "=== 메모리 사용량 ===" free -h # 3. CPU 사용률 높은 프로세스 echo "=== CPU 사용률 Top 5 ===" ps aux --sort=-%cpu | head -6 # 4. 메모리 사용량 높은 프로세스 echo "=== 메모리 사용량 Top 5 ===" ps aux --sort=-%mem | head -6 # 5. 디스크 I/O 확인 echo "=== 디스크 사용량 ===" df -h # 6. 네트워크 연결 확인 echo "=== 네트워크 연결 수 ===" netstat -an | grep ESTABLISHED | wc -l
🚀 효율성 향상:
1. 파이프라인 활용: 명령어들을 연결해서 강력한 기능 만들기
<code> # 가장 큰 파일 5개 찾기 find . -type f -exec ls -lh {} + | sort -k5 -hr | head -5 # 프로세스 메모리 사용량 순위 ps aux | sort -k4 -nr | head -10 # 로그에서 IP 주소 추출하고 중복 제거 grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq -c | sort -nr </code>
2. 별칭(Alias) 만들기: 자주 사용하는 명령어 단축키 만들기
<code> # ~/.bashrc 파일에 추가 alias ll=''ls -la'' alias la=''ls -la'' alias l=''ls -l'' alias h=''history'' alias df=''df -h'' alias du=''du -h'' alias ps=''ps aux'' alias top=''htop'' </code>
3. 환경 변수 활용: 자주 사용하는 경로 저장
<code> export WORK_DIR="/home/user/projects" export LOG_DIR="/var/log/myapp" # 사용법 cd $WORK_DIR tail -f $LOG_DIR/error.log </code>
⚡ 문제 해결 원리:
1. 로그 파일 위치: 문제가 생기면 여기를 확인하세요
/var/log/syslog
- 시스템 전체 로그/var/log/auth.log
- 인증 관련 로그/var/log/kern.log
- 커널 로그2. 시스템 상태 확인 명령어:
<code> # 한 번에 시스템 상태 확인 echo "=== 시스템 정보 ===" uname -a echo "=== 부팅 시간 ===" uptime echo "=== 디스크 ===" df -h echo "=== 메모리 ===" free -h echo "=== CPU 사용률 ===" top -bn1 | head -20 </code>
3. 네트워크 문제 해결:
<code> # 네트워크 연결 확인 단계별 ping -c 3 8.8.8.8 # 인터넷 연결 ping -c 3 google.com # DNS 해석 curl -I https://google.com # HTTP 연결 </code>
🎯 과제 1: 시스템 모니터링 스크립트 만들기
#!/bin/bash # system_monitor.sh echo "========== 시스템 모니터링 보고서 ==========" echo "날짜: $(date)" echo "" echo "1. 시스템 부하" uptime echo "" echo "2. 디스크 사용량" df -h echo "" echo "3. 메모리 사용량" free -h echo "" echo "4. CPU 사용률 Top 5" ps aux --sort=-%cpu | head -6 echo "" echo "5. 메모리 사용률 Top 5" ps aux --sort=-%mem | head -6 echo "" echo "========== 보고서 끝 =========="
실행하기:
chmod +x system_monitor.sh ./system_monitor.sh
🎯 과제 2: 로그 분석 자동화
#!/bin/bash # log_analyzer.sh LOG_FILE="/var/log/syslog" REPORT_FILE="log_report_$(date +%Y%m%d).txt" echo "로그 분석 보고서 - $(date)" > $REPORT_FILE echo "===========================================" >> $REPORT_FILE echo "1. 총 로그 라인 수: $(wc -l < $LOG_FILE)" >> $REPORT_FILE echo "2. 에러 로그 수: $(grep -c -i error $LOG_FILE)" >> $REPORT_FILE echo "3. 경고 로그 수: $(grep -c -i warning $LOG_FILE)" >> $REPORT_FILE echo "4. 최근 10개 에러:" >> $REPORT_FILE grep -i error $LOG_FILE | tail -10 >> $REPORT_FILE echo "로그 분석 완료: $REPORT_FILE"
🎯 과제 3: 백업 자동화
#!/bin/bash # backup_script.sh BACKUP_DIR="/backup" SOURCE_DIR="/home/user/important" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="backup_$DATE.tar.gz" # 백업 디렉토리 생성 mkdir -p $BACKUP_DIR # 백업 실행 tar -czf $BACKUP_DIR/$BACKUP_FILE $SOURCE_DIR # 결과 확인 if [ $? -eq 0 ]; then echo "백업 성공: $BACKUP_DIR/$BACKUP_FILE" ls -lh $BACKUP_DIR/$BACKUP_FILE else echo "백업 실패!" fi # 7일 이상 된 백업 파일 삭제 find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete echo "오래된 백업 파일 정리 완료"
Linux 고급 명령어를 모두 마스터했습니다! 🎊
이제 할 수 있는 것들:
다음 단계: 이제 쉘 스크립트를 배워서 이 모든 것을 자동화해보세요!
💬 도움이 필요하면:
man 명령어
- 명령어 매뉴얼info 명령어
- 더 자세한 정보명령어 –help
- 간단한 도움말💡 실무 조언: 명령어를 외우려 하지 말고, 필요할 때마다 찾아보면서 자연스럽게 익히세요. 실제 문제를 해결하면서 배우는 것이 가장 효과적입니다!