목차
권한 설정 & 고급 명령어
🎯 목표: Linux 시스템을 더 깊이 이해하고 실무에서 필요한 고급 기능들을 마스터하기
⏰ 예상 시간: 2-3시간
📋 준비물: - 기본 명령어에 익숙한 상태 (기본 명령어 가이드 완료) - 터미널 접근 권한
🔐 1단계: 파일 권한 시스템 이해하기
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
= 심볼릭 링크
- 나머지 9글자: 권한 (3글자씩 3그룹)
- 처음 3글자: 소유자(Owner) 권한
- 다음 3글자: 그룹(Group) 권한
- 마지막 3글자: 기타(Others) 권한
각 권한의 의미:
r
(read): 읽기 권한w
(write): 쓰기 권한x
(execute): 실행 권한-
: 권한 없음
🔍 권한 시스템 상세 설명:
1. 파일 타입별 권한 의미:
- 일반 파일 (-):
r
: 파일 내용 읽기 가능w
: 파일 내용 수정/삭제 가능x
: 파일을 프로그램으로 실행 가능
- 디렉토리 (d):
r
: 디렉토리 내용 목록 보기 가능 (ls 명령어)w
: 디렉토리 내 파일 생성/삭제/이름변경 가능x
: 디렉토리로 이동 가능 (cd 명령어)
2. 사용자 그룹별 권한:
- 소유자 (Owner): 파일을 만든 사용자
- 그룹 (Group): 파일이 속한 그룹의 멤버들
- 기타 (Others): 소유자와 그룹에 속하지 않은 모든 사용자
3. 권한 조합 예시:
rwx
: 읽기 + 쓰기 + 실행 (모든 권한)rw-
: 읽기 + 쓰기 (실행 불가)r-x
: 읽기 + 실행 (쓰기 불가)r–
: 읽기만 가능—
: 권한 없음
🔍 예시 해석:
-rw-r--r-- → 소유자는 읽기+쓰기, 그룹과 기타는 읽기만 가능 drwxr-xr-x → 소유자는 모든 권한, 그룹과 기타는 읽기+실행만 가능
chmod - 권한 변경하기
의미: “Change Mode” (모드 변경)
🔍 chmod 명령어 상세 설명:
1. 기본 문법:
chmod [옵션] 권한 파일명
2. 권한 표현 방식:
- 숫자 방식: 8진수로 권한 표현 (가장 많이 사용)
- 문자 방식: r, w, x 문자로 권한 표현
3. 숫자 계산법 상세:
- 읽기® = 4: 파일 내용을 볼 수 있음
- 쓰기(w) = 2: 파일을 수정할 수 있음
- 실행(x) = 1: 파일을 실행할 수 있음
- 권한 조합: 각 권한을 더해서 표현
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. 문자 방식 상세 설명:
- u: user (소유자)
- g: group (그룹)
- o: others (기타 사용자)
- a: all (모든 사용자)
- +: 권한 추가
- -: 권한 제거
- =: 권한 설정 (기존 권한 무시하고 새로 설정)
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
chown - 소유자 변경하기
의미: “Change Owner” (소유자 변경)
# 파일 소유자 변경 (root 권한 필요) sudo chown 새소유자 파일.txt # 파일 소유자와 그룹 동시 변경 sudo chown 새소유자:새그룹 파일.txt # 폴더와 하위 모든 파일 소유자 변경 sudo chown -R 새소유자:새그룹 폴더/
⚠️ 주의: chown
은 보통 관리자 권한이 필요해서 sudo
를 함께 사용합니다.
📊 2단계: 시스템 모니터링
ps - 실행 중인 프로세스 보기
의미: “Process Status” (프로세스 상태)
🔍 ps 명령어 상세 설명:
1. 기본 문법:
ps [옵션]
2. 주요 옵션들:
- a: 모든 사용자의 프로세스 표시
- u: 사용자 정보 포함 (CPU, 메모리 사용률 등)
- x: 터미널에 연결되지 않은 프로세스도 표시
- f: 프로세스 트리 형태로 표시
- e: 모든 프로세스 표시 (a와 유사)
- l: 긴 형태로 표시
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. 각 필드 상세 설명:
- USER: 프로세스를 실행한 사용자
- PID: 프로세스 ID (고유 번호, 프로세스 종료 시 사용)
- %CPU: CPU 사용률 (전체 CPU 대비)
- %MEM: 메모리 사용률 (전체 메모리 대비)
- VSZ: 가상 메모리 크기 (KB)
- RSS: 실제 물리 메모리 사용량 (KB)
- TTY: 터미널 장치 (
?
는 터미널 없음) - STAT: 프로세스 상태
S
: Sleeping (대기 중)R
: Running (실행 중)Z
: Zombie (좀비 프로세스)D
: Uninterruptible sleep (중단 불가능한 대기)
- START: 프로세스 시작 시간
- TIME: CPU 사용 시간
- COMMAND: 실행 중인 명령어
5. 프로세스 상태 코드 상세:
- 첫 번째 문자: 프로세스 상태
S
: 대기 중 (interruptible sleep)R
: 실행 중 또는 실행 대기 중D
: 디스크 I/O 대기 (uninterruptible sleep)Z
: 좀비 프로세스 (종료되었지만 부모가 회수하지 않음)T
: 정지됨 (stopped)X
: 죽은 프로세스 (dead)
- 두 번째 문자: 추가 정보
<
: 높은 우선순위N
: 낮은 우선순위L
: 메모리 페이지가 잠겨있음s
: 세션 리더l
: 멀티스레드+
: 포그라운드 프로세스 그룹
top - 실시간 시스템 상태 보기
의미: 시스템 리소스 사용량을 실시간으로 보여줘요
🔍 top 명령어 상세 설명:
1. 기본 문법:
top [옵션]
2. 주요 옵션들:
- -d 초: 업데이트 간격 설정 (기본 3초)
- -n 횟수: 지정된 횟수만 실행 후 종료
- -p PID: 특정 프로세스만 모니터링
- -u 사용자: 특정 사용자의 프로세스만 모니터링
- -b: 배치 모드 (파이프라인에서 사용)
3. 기본 사용법:
# 실시간 시스템 모니터링 top # 더 예쁜 버전 (설치 필요) htop # 1초마다 업데이트 top -d 1 # 특정 프로세스만 모니터링 top -p 1234 # 10번만 실행 후 종료 top -n 10
4. 화면 구성:
- 상단: 시스템 전체 정보 (부하, 프로세스 수, CPU/메모리 사용률)
- 중간: 프로세스 목록 (CPU 사용률 순 정렬)
- 하단: 키보드 단축키 도움말
5. 조작법 상세:
- q: 종료
- k: 프로세스 종료 (PID 입력 후 시그널 선택)
- r: 프로세스 우선순위 변경 (renice)
- M: 메모리 사용량 순 정렬
- P: CPU 사용량 순 정렬
- T: 실행 시간 순 정렬
- 1: CPU 코어별 사용량 보기
- c: 명령어 전체 경로 표시/숨김
- m: 메모리 정보 표시/숨김
- t: 프로세스/CPU 정보 표시/숨김
- i: 유휴 프로세스 표시/숨김
- z: 색상 표시/숨김
- W: 현재 설정을 ~/.toprc에 저장
- h: 도움말
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
- load average: 시스템 부하 (1분, 5분, 15분 평균)
- Tasks: 프로세스 상태별 개수
- %Cpu(s): CPU 사용률 세부 정보
us
: 사용자 프로세스sy
: 시스템 프로세스ni
: nice 값이 변경된 프로세스id
: 유휴 상태wa
: I/O 대기hi
: 하드웨어 인터럽트si
: 소프트웨어 인터럽트
- Mem: 메모리 사용량
- Swap: 스왑 메모리 사용량
</code>
df - 디스크 사용량 확인
의미: “Disk Free” (디스크 여유 공간)
🔍 df 명령어 상세 설명:
1. 기본 문법:
df [옵션] [파일시스템]
2. 주요 옵션들:
- -h: 사람이 읽기 쉬운 형태로 표시 (KB, MB, GB)
- -i: inode 정보 표시 (파일 개수 제한 확인)
- -T: 파일시스템 타입 표시
- -a: 모든 파일시스템 표시 (가상 파일시스템 포함)
- -x: 특정 파일시스템 타입 제외
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
- Filesystem: 디바이스 이름 또는 마운트 포인트
- Size: 전체 크기
- Used: 사용된 공간
- Avail: 사용 가능한 공간
- Use%: 사용률
- Mounted on: 마운트 포인트
5. 실무 활용:
- 디스크 공간 부족 확인: Use%가 90% 이상이면 주의
- 파일시스템별 사용량 파악: 각 파티션별 사용량 확인
- inode 부족 확인: 파일은 적지만 inode가 부족한 경우
du - 폴더별 사용량 확인
의미: “Disk Usage” (디스크 사용량)
🔍 du 명령어 상세 설명:
1. 기본 문법:
du [옵션] [경로]
2. 주요 옵션들:
- -h: 사람이 읽기 쉬운 형태로 표시
- -s: 요약 정보만 표시 (summary)
- -a: 모든 파일 표시 (all)
- –max-depth=N: 지정된 깊이까지만 표시
- -c: 총합 표시 (total)
- -S: 하위 디렉토리 크기 제외 (separate)
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 .
- 첫 번째 열: 사용량 (기본 단위 KB)
- 두 번째 열: 경로
- 마지막 행: 총합 (현재 디렉토리 기준)
5. 실무 활용 팁:
- 큰 파일/폴더 찾기: `du -h | sort -hr | head -10`
- 특정 크기 이상 찾기: `find . -size +100M -exec du -h {} +`
- 오래된 파일 정리:
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
🌐 3단계: 네트워크 도구
wget - 파일 다운로드
의미: “Web Get” (웹에서 가져오기)
🔍 wget 명령어 상세 설명:
1. 기본 문법:
wget [옵션] URL
2. 주요 옵션들:
- -O 파일명: 다른 이름으로 저장
- -c: 이어받기 (중단된 다운로드 재개)
- -b: 백그라운드에서 다운로드
- -q: 조용한 모드 (진행률 표시 안함)
- -r: 재귀적 다운로드 (링크 따라가기)
- -np: 상위 디렉토리로 이동하지 않음
- -w 초: 다운로드 간 대기 시간
- -U 문자열: User-Agent 설정
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
옵션으로 전체 사이트 다운로드 - 정기 다운로드: 스크립트에서 자동화
curl - HTTP 요청 보내기
의미: “Client URL” (클라이언트 URL)
🔍 curl 명령어 상세 설명:
1. 기본 문법:
curl [옵션] URL
2. 주요 옵션들:
- -O: 원본 파일명으로 저장
- -o 파일명: 지정한 파일명으로 저장
- -X 메서드: HTTP 메서드 지정 (GET, POST, PUT 등)
- -d 데이터: POST 데이터 전송
- -H 헤더: HTTP 헤더 추가
- -I: 헤더 정보만 가져오기
- -s: 조용한 모드 (진행률 표시 안함)
- -k: SSL 인증서 검증 무시
- -L: 리다이렉트 따라가기
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 메서드별 사용법:
- GET: 기본 메서드, 데이터 조회
- POST: 데이터 전송, 새 리소스 생성
- PUT: 리소스 전체 교체
- PATCH: 리소스 부분 수정
- DELETE: 리소스 삭제
5. 실무 활용:
- API 테스트: REST API 엔드포인트 테스트
- 웹 스크래핑: 간단한 웹 데이터 수집
- 파일 다운로드: 프로그래밍 방식 다운로드
- 서버 상태 확인: 헬스체크, 모니터링
ping - 네트워크 연결 확인
의미: 네트워크 연결 상태와 응답 시간을 확인하는 도구
🔍 ping 명령어 상세 설명:
1. 기본 문법:
ping [옵션] 호스트명/IP주소
2. 주요 옵션들:
- -c 횟수: 지정된 횟수만 ping 보내기
- -i 간격: ping 간격 설정 (초 단위)
- -s 크기: 패킷 크기 설정 (바이트)
- -t TTL: TTL 값 설정
- -W 초: 응답 대기 시간 설정
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
- icmp_seq: 패킷 순서 번호
- time: 응답 시간 (밀리초)
- packet loss: 패킷 손실률
- rtt: Round Trip Time (왕복 시간)
- min: 최소 응답 시간
- avg: 평균 응답 시간
- max: 최대 응답 시간
- mdev: 평균 편차
5. 실무 활용:
- 네트워크 연결 확인: 기본적인 연결 상태 점검
- 응답 시간 측정: 서버 성능 및 네트워크 품질 확인
- 패킷 손실 확인: 네트워크 안정성 검증
- DNS 해석 확인: 도메인 이름이 IP로 변환되는지 확인
💡 실습해보기:
# 1. 네트워크 상태 확인 ping -c 3 google.com # 2. 간단한 웹페이지 가져오기 curl -s https://httpbin.org/ip # 3. 파일 다운로드 (작은 파일) wget -q https://httpbin.org/robots.txt && cat robots.txt
📦 4단계: 압축 파일 다루기
tar - 압축 파일 만들고 풀기
의미: “Tape Archive” (테이프 아카이브)
🔍 tar 명령어 상세 설명:
1. 기본 문법:
tar [옵션] [파일명] [대상]
2. 주요 옵션들:
- c: create (압축 파일 생성)
- x: extract (압축 파일 해제)
- t: list (압축 파일 내용 보기)
- f: file (파일명 지정)
- v: verbose (자세한 출력)
- z: gzip 압축/해제
- j: bzip2 압축/해제
- J: xz 압축/해제
- C: 디렉토리 변경 후 작업
- r: 기존 압축 파일에 추가
- u: 업데이트 (새로운 파일만 추가)
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. 실무 활용 팁:
- 백업: 중요한 데이터를 압축하여 저장
- 전송: 네트워크 전송 시 용량 절약
- 아카이브: 오래된 파일들을 압축하여 보관
- 배포: 소프트웨어 배포 시 압축 파일 사용
zip/unzip - ZIP 파일 다루기
의미: Windows와 호환되는 압축 형식
🔍 zip/unzip 명령어 상세 설명:
1. zip 기본 문법:
zip [옵션] 압축파일.zip [파일/폴더]
2. zip 주요 옵션들:
- -r: 재귀적 압축 (하위 폴더 포함)
- -q: 조용한 모드
- -9: 최대 압축률
- -0: 압축 없이 저장
- -e: 암호 설정
- -u: 업데이트 (변경된 파일만)
- -d: 압축 파일에서 파일 삭제
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 주요 옵션들:
- -d 디렉토리: 특정 디렉토리에 압축 해제
- -l: 내용만 보기 (압축 해제 안함)
- -q: 조용한 모드
- -o: 덮어쓰기 (기존 파일 덮어씀)
- -n: 덮어쓰기 안함 (기존 파일 보존)
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
🔧 5단계: 고급 텍스트 처리
awk - 텍스트 데이터 처리
의미: 강력한 텍스트 처리 도구
🔍 awk 명령어 상세 설명:
1. 기본 문법:
awk [옵션] '패턴 {액션}' 파일명
2. 주요 옵션들:
- -F 구분자: 필드 구분자 설정 (기본: 공백)
- -v 변수=값: 변수 설정
- -f 스크립트파일: awk 스크립트 파일 실행
3. 기본 개념:
- $0: 전체 행
- $1, $2, …: 1번째, 2번째 필드
- NF: 필드 개수
- NR: 행 번호
- FS: 필드 구분자
- OFS: 출력 필드 구분자
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. 실무 활용:
- 로그 분석: 특정 패턴이나 에러 찾기
- 데이터 변환: CSV, TSV 파일 처리
- 통계 계산: 합계, 평균, 개수 계산
- 텍스트 정제: 불필요한 데이터 제거
sed - 텍스트 편집
의미: “Stream Editor” (스트림 편집기)
🔍 sed 명령어 상세 설명:
1. 기본 문법:
sed [옵션] '명령어' 파일명
2. 주요 옵션들:
- -i: 파일 직접 수정
- -n: 자동 출력 억제
- -e: 여러 명령어 실행
- -f: 스크립트 파일 실행
3. 기본 명령어들:
- s/패턴/치환/g: 문자열 치환
- d: 행 삭제
- p: 행 출력
- a\: 행 뒤에 추가
- i\: 행 앞에 추가
- c\: 행 교체
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 - 정렬하기
의미: 텍스트 데이터를 정렬하는 도구
🔍 sort 명령어 상세 설명:
1. 기본 문법:
sort [옵션] 파일명
2. 주요 옵션들:
- -n: 숫자로 정렬
- -r: 역순 정렬
- -u: 중복 제거
- -k N: N번째 필드로 정렬
- -t 구분자: 필드 구분자 설정
- -f: 대소문자 구분 없음
- -M: 월 이름으로 정렬
- -h: 사람이 읽기 쉬운 크기로 정렬
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
⚡ 6단계: 프로세스 관리
kill - 프로세스 종료
의미: 실행 중인 프로세스를 종료하는 명령어
🔍 kill 명령어 상세 설명:
1. 기본 문법:
kill [옵션] PID
2. 주요 옵션들:
- -l: 사용 가능한 시그널 목록 표시
- -s 시그널: 특정 시그널 지정
- -n 시그널번호: 시그널 번호로 지정
3. 시그널 종류:
- TERM (15): 정상 종료 (기본값)
- KILL (9): 강제 종료
- HUP (1): 재시작 (SIGHUP)
- INT (2): 인터럽트 (Ctrl+C)
- STOP (19): 일시 정지
- CONT (18): 재개
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. 실무 활용:
- 응답 없는 프로그램 종료: kill -9 사용
- 서비스 재시작: kill -HUP으로 설정 파일 재로드
- 배치 작업 관리: 여러 프로세스 동시 종료
- 시스템 정리: 좀비 프로세스 제거
nohup - 백그라운드 실행
의미: “No Hang Up” (터미널 종료되어도 계속 실행)
🔍 nohup 명령어 상세 설명:
1. 기본 문법:
nohup 명령어 [옵션] &
2. 주요 특징:
- 터미널 독립: 터미널을 닫아도 프로세스 계속 실행
- 시그널 무시: SIGHUP 시그널 무시
- 출력 리다이렉션: 기본적으로 nohup.out 파일로 출력
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: 서버 로그 분석
# 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)%"
시나리오 2: 디스크 공간 부족 해결
상황: 디스크 공간이 부족해서 큰 파일들을 찾아 정리해야 해요.
# 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
시나리오 3: 시스템 성능 모니터링
상황: 시스템이 느려졌어요. 원인을 찾아보세요.
# 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 고급 명령어를 모두 마스터했습니다! 🎊
이제 할 수 있는 것들:
- ✅ 파일 권한을 자유자재로 설정하기
- ✅ 시스템 리소스 모니터링하기
- ✅ 네트워크 문제 진단하기
- ✅ 압축 파일 다루기
- ✅ 고급 텍스트 처리하기
- ✅ 프로세스 관리하기
- ✅ 실무 문제 해결하기
다음 단계: 이제 쉘 스크립트를 배워서 이 모든 것을 자동화해보세요!
📚 참고자료
- Linux 명령어 레퍼런스: https://linux.die.net/man/
- 시스템 관리 가이드: https://www.tldp.org/LDP/sag/html/
- 정규표현식 연습: https://regexr.com/
- 쉘 스크립트 가이드: https://www.shellscript.sh/
💬 도움이 필요하면:
man 명령어
- 명령어 매뉴얼info 명령어
- 더 자세한 정보명령어 –help
- 간단한 도움말
💡 실무 조언: 명령어를 외우려 하지 말고, 필요할 때마다 찾아보면서 자연스럽게 익히세요. 실제 문제를 해결하면서 배우는 것이 가장 효과적입니다!