사용자 도구

사이트 도구


wiki:it:linux:advanced_commands

권한 설정 & 고급 명령어

🎯 목표: 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글자):

  1. 첫 번째 글자: 파일 타입
    1. - = 일반 파일
    2. d = 디렉토리(폴더)
    3. l = 심볼릭 링크
  1. 나머지 9글자: 권한 (3글자씩 3그룹)
  2. 처음 3글자: 소유자(Owner) 권한
  3. 다음 3글자: 그룹(Group) 권한
  4. 마지막 3글자: 기타(Others) 권한

각 권한의 의미:

  1. r (read): 읽기 권한
  2. w (write): 쓰기 권한
  3. x (execute): 실행 권한
  4. -: 권한 없음

🔍 권한 시스템 상세 설명:

1. 파일 타입별 권한 의미:

  1. 일반 파일 (-):
    1. r: 파일 내용 읽기 가능
    2. w: 파일 내용 수정/삭제 가능
    3. x: 파일을 프로그램으로 실행 가능
  1. 디렉토리 (d):
  2. r: 디렉토리 내용 목록 보기 가능 (ls 명령어)
  3. w: 디렉토리 내 파일 생성/삭제/이름변경 가능
  4. x: 디렉토리로 이동 가능 (cd 명령어)

2. 사용자 그룹별 권한:

  1. 소유자 (Owner): 파일을 만든 사용자
  2. 그룹 (Group): 파일이 속한 그룹의 멤버들
  3. 기타 (Others): 소유자와 그룹에 속하지 않은 모든 사용자

3. 권한 조합 예시:

  1. rwx: 읽기 + 쓰기 + 실행 (모든 권한)
  2. rw-: 읽기 + 쓰기 (실행 불가)
  3. r-x: 읽기 + 실행 (쓰기 불가)
  4. r–: 읽기만 가능
  5. : 권한 없음

🔍 예시 해석:

-rw-r--r--  → 소유자는 읽기+쓰기, 그룹과 기타는 읽기만 가능
drwxr-xr-x  → 소유자는 모든 권한, 그룹과 기타는 읽기+실행만 가능

chmod - 권한 변경하기

의미: “Change Mode” (모드 변경)

🔍 chmod 명령어 상세 설명:

1. 기본 문법:

chmod [옵션] 권한 파일명

2. 권한 표현 방식:

  1. 숫자 방식: 8진수로 권한 표현 (가장 많이 사용)
  2. 문자 방식: r, w, x 문자로 권한 표현

3. 숫자 계산법 상세:

  1. 읽기® = 4: 파일 내용을 볼 수 있음
  2. 쓰기(w) = 2: 파일을 수정할 수 있음
  3. 실행(x) = 1: 파일을 실행할 수 있음
  4. 권한 조합: 각 권한을 더해서 표현
    1. 7 = 4+2+1 = rwx (모든 권한)
    2. 6 = 4+2+0 = rw- (읽기+쓰기)
    3. 5 = 4+0+1 = r-x (읽기+실행)
    4. 4 = 4+0+0 = r– (읽기만)
    5. 3 = 0+2+1 = -wx (쓰기+실행)
    6. 2 = 0+2+0 = -w- (쓰기만)
    7. 1 = 0+0+1 = –x (실행만)
    8. 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. 문자 방식 상세 설명:

  1. u: user (소유자)
  2. g: group (그룹)
  3. o: others (기타 사용자)
  4. a: all (모든 사용자)
  5. +: 권한 추가
  6. -: 권한 제거
  7. =: 권한 설정 (기존 권한 무시하고 새로 설정)

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. 주요 옵션들:

  1. a: 모든 사용자의 프로세스 표시
  2. u: 사용자 정보 포함 (CPU, 메모리 사용률 등)
  3. x: 터미널에 연결되지 않은 프로세스도 표시
  4. f: 프로세스 트리 형태로 표시
  5. e: 모든 프로세스 표시 (a와 유사)
  6. 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. 각 필드 상세 설명:

  1. USER: 프로세스를 실행한 사용자
  2. PID: 프로세스 ID (고유 번호, 프로세스 종료 시 사용)
  3. %CPU: CPU 사용률 (전체 CPU 대비)
  4. %MEM: 메모리 사용률 (전체 메모리 대비)
  5. VSZ: 가상 메모리 크기 (KB)
  6. RSS: 실제 물리 메모리 사용량 (KB)
  7. TTY: 터미널 장치 (?는 터미널 없음)
  8. STAT: 프로세스 상태
    1. S: Sleeping (대기 중)
    2. R: Running (실행 중)
    3. Z: Zombie (좀비 프로세스)
    4. D: Uninterruptible sleep (중단 불가능한 대기)
  9. START: 프로세스 시작 시간
  10. TIME: CPU 사용 시간
  11. COMMAND: 실행 중인 명령어

5. 프로세스 상태 코드 상세:

  1. 첫 번째 문자: 프로세스 상태
    1. S: 대기 중 (interruptible sleep)
    2. R: 실행 중 또는 실행 대기 중
    3. D: 디스크 I/O 대기 (uninterruptible sleep)
    4. Z: 좀비 프로세스 (종료되었지만 부모가 회수하지 않음)
    5. T: 정지됨 (stopped)
    6. X: 죽은 프로세스 (dead)
  1. 두 번째 문자: 추가 정보
  2. <: 높은 우선순위
  3. N: 낮은 우선순위
  4. L: 메모리 페이지가 잠겨있음
  5. s: 세션 리더
  6. l: 멀티스레드
  7. +: 포그라운드 프로세스 그룹

top - 실시간 시스템 상태 보기

의미: 시스템 리소스 사용량을 실시간으로 보여줘요

🔍 top 명령어 상세 설명:

1. 기본 문법:

top [옵션]

2. 주요 옵션들:

  1. -d 초: 업데이트 간격 설정 (기본 3초)
  2. -n 횟수: 지정된 횟수만 실행 후 종료
  3. -p PID: 특정 프로세스만 모니터링
  4. -u 사용자: 특정 사용자의 프로세스만 모니터링
  5. -b: 배치 모드 (파이프라인에서 사용)

3. 기본 사용법:

# 실시간 시스템 모니터링
top

# 더 예쁜 버전 (설치 필요)
htop

# 1초마다 업데이트
top -d 1

# 특정 프로세스만 모니터링
top -p 1234

# 10번만 실행 후 종료
top -n 10

4. 화면 구성:

  1. 상단: 시스템 전체 정보 (부하, 프로세스 수, CPU/메모리 사용률)
  2. 중간: 프로세스 목록 (CPU 사용률 순 정렬)
  3. 하단: 키보드 단축키 도움말

5. 조작법 상세:

  1. q: 종료
  2. k: 프로세스 종료 (PID 입력 후 시그널 선택)
  3. r: 프로세스 우선순위 변경 (renice)
  4. M: 메모리 사용량 순 정렬
  5. P: CPU 사용량 순 정렬
  6. T: 실행 시간 순 정렬
  7. 1: CPU 코어별 사용량 보기
  8. c: 명령어 전체 경로 표시/숨김
  9. m: 메모리 정보 표시/숨김
  10. t: 프로세스/CPU 정보 표시/숨김
  11. i: 유휴 프로세스 표시/숨김
  12. z: 색상 표시/숨김
  13. W: 현재 설정을 ~/.toprc에 저장
  14. 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
  1. load average: 시스템 부하 (1분, 5분, 15분 평균)
  2. Tasks: 프로세스 상태별 개수
  3. %Cpu(s): CPU 사용률 세부 정보
    1. us: 사용자 프로세스
    2. sy: 시스템 프로세스
    3. ni: nice 값이 변경된 프로세스
    4. id: 유휴 상태
    5. wa: I/O 대기
    6. hi: 하드웨어 인터럽트
    7. si: 소프트웨어 인터럽트
  4. Mem: 메모리 사용량
  5. Swap: 스왑 메모리 사용량

</code>

df - 디스크 사용량 확인

의미: “Disk Free” (디스크 여유 공간)

🔍 df 명령어 상세 설명:

1. 기본 문법:

df [옵션] [파일시스템]

2. 주요 옵션들:

  1. -h: 사람이 읽기 쉬운 형태로 표시 (KB, MB, GB)
  2. -i: inode 정보 표시 (파일 개수 제한 확인)
  3. -T: 파일시스템 타입 표시
  4. -a: 모든 파일시스템 표시 (가상 파일시스템 포함)
  5. -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
  1. Filesystem: 디바이스 이름 또는 마운트 포인트
  2. Size: 전체 크기
  3. Used: 사용된 공간
  4. Avail: 사용 가능한 공간
  5. Use%: 사용률
  6. Mounted on: 마운트 포인트

5. 실무 활용:

  1. 디스크 공간 부족 확인: Use%가 90% 이상이면 주의
  2. 파일시스템별 사용량 파악: 각 파티션별 사용량 확인
  3. inode 부족 확인: 파일은 적지만 inode가 부족한 경우

du - 폴더별 사용량 확인

의미: “Disk Usage” (디스크 사용량)

🔍 du 명령어 상세 설명:

1. 기본 문법:

du [옵션] [경로]

2. 주요 옵션들:

  1. -h: 사람이 읽기 쉬운 형태로 표시
  2. -s: 요약 정보만 표시 (summary)
  3. -a: 모든 파일 표시 (all)
  4. –max-depth=N: 지정된 깊이까지만 표시
  5. -c: 총합 표시 (total)
  6. -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     .
  1. 첫 번째 열: 사용량 (기본 단위 KB)
  2. 두 번째 열: 경로
  3. 마지막 행: 총합 (현재 디렉토리 기준)

5. 실무 활용 팁:

  1. 큰 파일/폴더 찾기: `du -h | sort -hr | head -10`
  2. 특정 크기 이상 찾기: `find . -size +100M -exec du -h {} +`
  3. 오래된 파일 정리: find . -mtime +30 -exec du -h {} +
  4. 백업 전 용량 확인: 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. 주요 옵션들:

  1. -O 파일명: 다른 이름으로 저장
  2. -c: 이어받기 (중단된 다운로드 재개)
  3. -b: 백그라운드에서 다운로드
  4. -q: 조용한 모드 (진행률 표시 안함)
  5. -r: 재귀적 다운로드 (링크 따라가기)
  6. -np: 상위 디렉토리로 이동하지 않음
  7. -w 초: 다운로드 간 대기 시간
  8. -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. 실무 활용:

  1. 대용량 파일 다운로드: -c 옵션으로 중단 시 재개 가능
  2. 백그라운드 다운로드: -b 옵션으로 터미널 차단 방지
  3. 웹사이트 백업: -r 옵션으로 전체 사이트 다운로드
  4. 정기 다운로드: 스크립트에서 자동화

curl - HTTP 요청 보내기

의미: “Client URL” (클라이언트 URL)

🔍 curl 명령어 상세 설명:

1. 기본 문법:

curl [옵션] URL

2. 주요 옵션들:

  1. -O: 원본 파일명으로 저장
  2. -o 파일명: 지정한 파일명으로 저장
  3. -X 메서드: HTTP 메서드 지정 (GET, POST, PUT 등)
  4. -d 데이터: POST 데이터 전송
  5. -H 헤더: HTTP 헤더 추가
  6. -I: 헤더 정보만 가져오기
  7. -s: 조용한 모드 (진행률 표시 안함)
  8. -k: SSL 인증서 검증 무시
  9. -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 메서드별 사용법:

  1. GET: 기본 메서드, 데이터 조회
  2. POST: 데이터 전송, 새 리소스 생성
  3. PUT: 리소스 전체 교체
  4. PATCH: 리소스 부분 수정
  5. DELETE: 리소스 삭제

5. 실무 활용:

  1. API 테스트: REST API 엔드포인트 테스트
  2. 웹 스크래핑: 간단한 웹 데이터 수집
  3. 파일 다운로드: 프로그래밍 방식 다운로드
  4. 서버 상태 확인: 헬스체크, 모니터링

ping - 네트워크 연결 확인

의미: 네트워크 연결 상태와 응답 시간을 확인하는 도구

🔍 ping 명령어 상세 설명:

1. 기본 문법:

ping [옵션] 호스트명/IP주소

2. 주요 옵션들:

  1. -c 횟수: 지정된 횟수만 ping 보내기
  2. -i 간격: ping 간격 설정 (초 단위)
  3. -s 크기: 패킷 크기 설정 (바이트)
  4. -t TTL: TTL 값 설정
  5. -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
  1. icmp_seq: 패킷 순서 번호
  2. time: 응답 시간 (밀리초)
  3. packet loss: 패킷 손실률
  4. rtt: Round Trip Time (왕복 시간)
    1. min: 최소 응답 시간
    2. avg: 평균 응답 시간
    3. max: 최대 응답 시간
    4. mdev: 평균 편차

5. 실무 활용:

  1. 네트워크 연결 확인: 기본적인 연결 상태 점검
  2. 응답 시간 측정: 서버 성능 및 네트워크 품질 확인
  3. 패킷 손실 확인: 네트워크 안정성 검증
  4. 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. 주요 옵션들:

  1. c: create (압축 파일 생성)
  2. x: extract (압축 파일 해제)
  3. t: list (압축 파일 내용 보기)
  4. f: file (파일명 지정)
  5. v: verbose (자세한 출력)
  6. z: gzip 압축/해제
  7. j: bzip2 압축/해제
  8. J: xz 압축/해제
  9. C: 디렉토리 변경 후 작업
  10. r: 기존 압축 파일에 추가
  11. 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. 실무 활용 팁:

  1. 백업: 중요한 데이터를 압축하여 저장
  2. 전송: 네트워크 전송 시 용량 절약
  3. 아카이브: 오래된 파일들을 압축하여 보관
  4. 배포: 소프트웨어 배포 시 압축 파일 사용

zip/unzip - ZIP 파일 다루기

의미: Windows와 호환되는 압축 형식

🔍 zip/unzip 명령어 상세 설명:

1. zip 기본 문법:

zip [옵션] 압축파일.zip [파일/폴더]

2. zip 주요 옵션들:

  1. -r: 재귀적 압축 (하위 폴더 포함)
  2. -q: 조용한 모드
  3. -9: 최대 압축률
  4. -0: 압축 없이 저장
  5. -e: 암호 설정
  6. -u: 업데이트 (변경된 파일만)
  7. -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 주요 옵션들:

  1. -d 디렉토리: 특정 디렉토리에 압축 해제
  2. -l: 내용만 보기 (압축 해제 안함)
  3. -q: 조용한 모드
  4. -o: 덮어쓰기 (기존 파일 덮어씀)
  5. -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. 주요 옵션들:

  1. -F 구분자: 필드 구분자 설정 (기본: 공백)
  2. -v 변수=값: 변수 설정
  3. -f 스크립트파일: awk 스크립트 파일 실행

3. 기본 개념:

  1. $0: 전체 행
  2. $1, $2, …: 1번째, 2번째 필드
  3. NF: 필드 개수
  4. NR: 행 번호
  5. FS: 필드 구분자
  6. 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. 실무 활용:

  1. 로그 분석: 특정 패턴이나 에러 찾기
  2. 데이터 변환: CSV, TSV 파일 처리
  3. 통계 계산: 합계, 평균, 개수 계산
  4. 텍스트 정제: 불필요한 데이터 제거

sed - 텍스트 편집

의미: “Stream Editor” (스트림 편집기)

🔍 sed 명령어 상세 설명:

1. 기본 문법:

sed [옵션] '명령어' 파일명

2. 주요 옵션들:

  1. -i: 파일 직접 수정
  2. -n: 자동 출력 억제
  3. -e: 여러 명령어 실행
  4. -f: 스크립트 파일 실행

3. 기본 명령어들:

  1. s/패턴/치환/g: 문자열 치환
  2. d: 행 삭제
  3. p: 행 출력
  4. a\: 행 뒤에 추가
  5. i\: 행 앞에 추가
  6. 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. 실무 활용:

  1. 로그 파일 정리: 불필요한 정보 제거
  2. 설정 파일 수정: 자동화된 설정 변경
  3. 데이터 정제: 형식 통일, 오타 수정
  4. 배치 처리: 여러 파일 동시 처리

sort - 정렬하기

의미: 텍스트 데이터를 정렬하는 도구

🔍 sort 명령어 상세 설명:

1. 기본 문법:

sort [옵션] 파일명

2. 주요 옵션들:

  1. -n: 숫자로 정렬
  2. -r: 역순 정렬
  3. -u: 중복 제거
  4. -k N: N번째 필드로 정렬
  5. -t 구분자: 필드 구분자 설정
  6. -f: 대소문자 구분 없음
  7. -M: 월 이름으로 정렬
  8. -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. 로그 분석: 시간순, 우선순위별 정렬
  2. 데이터 분석: 통계 데이터 정렬
  3. 파일 관리: 크기, 날짜별 정렬
  4. 중복 제거: 유니크한 데이터 추출

💡 실습해보기:

# 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. 주요 옵션들:

  1. -l: 사용 가능한 시그널 목록 표시
  2. -s 시그널: 특정 시그널 지정
  3. -n 시그널번호: 시그널 번호로 지정

3. 시그널 종류:

  1. TERM (15): 정상 종료 (기본값)
  2. KILL (9): 강제 종료
  3. HUP (1): 재시작 (SIGHUP)
  4. INT (2): 인터럽트 (Ctrl+C)
  5. STOP (19): 일시 정지
  6. 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. 실무 활용:

  1. 응답 없는 프로그램 종료: kill -9 사용
  2. 서비스 재시작: kill -HUP으로 설정 파일 재로드
  3. 배치 작업 관리: 여러 프로세스 동시 종료
  4. 시스템 정리: 좀비 프로세스 제거

nohup - 백그라운드 실행

의미: “No Hang Up” (터미널 종료되어도 계속 실행)

🔍 nohup 명령어 상세 설명:

1. 기본 문법:

nohup 명령어 [옵션] &

2. 주요 특징:

  1. 터미널 독립: 터미널을 닫아도 프로세스 계속 실행
  2. 시그널 무시: SIGHUP 시그널 무시
  3. 출력 리다이렉션: 기본적으로 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. 장시간 실행 작업: 데이터 처리, 백업 등
  2. 서버 관리: 원격 서버에서 작업 실행
  3. 배치 작업: 정기적으로 실행되는 작업
  4. 로그 수집: 지속적인 모니터링 작업

🎯 실전 시나리오

시나리오 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. 로그 파일 위치: 문제가 생기면 여기를 확인하세요

  1. /var/log/syslog - 시스템 전체 로그
  2. /var/log/auth.log - 인증 관련 로그
  3. /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 고급 명령어를 모두 마스터했습니다! 🎊

이제 할 수 있는 것들:

  1. ✅ 파일 권한을 자유자재로 설정하기
  2. ✅ 시스템 리소스 모니터링하기
  3. ✅ 네트워크 문제 진단하기
  4. ✅ 압축 파일 다루기
  5. ✅ 고급 텍스트 처리하기
  6. ✅ 프로세스 관리하기
  7. ✅ 실무 문제 해결하기

다음 단계: 이제 쉘 스크립트를 배워서 이 모든 것을 자동화해보세요!

👉 🤖 쉘 스크립트로 업무 자동화

📚 참고자료

  1. Linux 명령어 레퍼런스: https://linux.die.net/man/
  2. 시스템 관리 가이드: https://www.tldp.org/LDP/sag/html/
  3. 정규표현식 연습: https://regexr.com/
  4. 쉘 스크립트 가이드: https://www.shellscript.sh/

💬 도움이 필요하면:

  1. man 명령어 - 명령어 매뉴얼
  2. info 명령어 - 더 자세한 정보
  3. 명령어 –help - 간단한 도움말

💡 실무 조언: 명령어를 외우려 하지 말고, 필요할 때마다 찾아보면서 자연스럽게 익히세요. 실제 문제를 해결하면서 배우는 것이 가장 효과적입니다!

wiki/it/linux/advanced_commands.txt · 마지막으로 수정됨: 저자 syjang0803

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki