Linux Bash shell script

Bash Shell Script 파이프라인(Pipeline)을 활용한 명령어 조합

임베디드 친구 2025. 2. 2. 10:20
반응형

Bash 스크립트는 효율적이고 강력한 방식으로 작업을 자동화할 수 있는 도구입니다. 이 중에서도 파이프라인(Pipeline)은 여러 명령어를 연결하여 데이터를 처리하는 강력한 방법을 제공합니다. 이번 포스팅에서는 파이프라인의 기본 개념과 활용 예제를 소개하겠습니다.

파이프라인(Pipeline)이란?

파이프라인은 하나의 명령어 출력 결과를 다음 명령어의 입력으로 전달하는 방식입니다. Bash에서 파이프라인은 | 기호를 사용하여 구현합니다.

명령어1 | 명령어2 | 명령어3

위와 같은 방식으로 여러 명령어를 연결하여 실행할 수 있습니다. 파이프라인은 데이터 처리를 단계적으로 수행할 때 매우 유용합니다.


파이프라인의 기본 예제

1. 텍스트 처리

cat, grep, sort 등의 명령어를 조합하여 텍스트 데이터를 처리할 수 있습니다.

예제: 특정 단어를 포함한 텍스트 정렬하기

# sample.txt 파일에서 'error' 단어가 포함된 줄을 추출하고, 중복을 제거한 후 정렬
cat sample.txt | grep 'error' | sort | uniq

설명:

  • cat sample.txt: 파일 내용을 출력합니다.
  • grep 'error': 'error' 단어가 포함된 줄을 필터링합니다.
  • sort: 줄을 정렬합니다.
  • uniq: 중복된 줄을 제거합니다.

2. 시스템 모니터링 데이터 처리

ps, grep, awk 등을 활용하여 실행 중인 프로세스를 필터링할 수 있습니다.

예제: 특정 프로세스 메모리 사용량 확인

# 'python' 프로세스의 메모리 사용량 출력
ps aux | grep 'python' | grep -v 'grep' | awk '{print $2, $4, $11}'

설명:

  • ps aux: 현재 실행 중인 모든 프로세스를 출력합니다.
  • grep 'python': 'python'이 포함된 프로세스를 필터링합니다.
  • grep -v 'grep': grep 자체 프로세스를 제외합니다.
  • awk '{print $2, $4, $11}': 프로세스 ID(PID), 메모리 사용량(%MEM), 실행 명령어를 출력합니다.

복잡한 파이프라인 조합

1. 디렉토리 크기 분석

dusort를 조합하여 디렉토리 크기를 분석할 수 있습니다.

예제: 상위 5개의 대용량 디렉토리 찾기

# 현재 디렉토리에서 상위 5개의 대용량 디렉토리 찾기
du -ah . | sort -rh | head -n 5

설명:

  • du -ah .: 현재 디렉토리와 하위 디렉토리의 크기를 바이트 단위로 출력합니다.
  • sort -rh: 크기 기준으로 역순 정렬합니다.
  • head -n 5: 상위 5개 항목만 출력합니다.

2. 로그 파일 분석

서버 로그를 분석할 때 파이프라인을 활용하면 효율적으로 데이터를 처리할 수 있습니다.

예제: 가장 많이 요청된 URL 찾기

# access.log에서 가장 많이 요청된 URL 상위 10개 찾기
cat access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -n 10

설명:

  • cat access.log: 로그 파일 내용을 출력합니다.
  • awk '{print $7}': 로그 파일의 7번째 필드(URL)를 추출합니다.
  • sort: URL을 정렬합니다.
  • uniq -c: URL별 발생 빈도를 계산합니다.
  • sort -nr: 발생 빈도를 기준으로 내림차순 정렬합니다.
  • head -n 10: 상위 10개 항목을 출력합니다.

파이프라인과 리다이렉션의 결합

파이프라인은 리다이렉션(>, >>, <)과 결합하여 더욱 강력한 스크립트를 작성할 수 있습니다.

예제: 로그 필터링 결과를 파일로 저장

# error_log.txt 파일에 'error' 단어가 포함된 로그 저장
cat access.log | grep 'error' > error_log.txt

예제: 프로세스 목록을 파일로 저장

# 현재 실행 중인 프로세스 정보를 process_list.txt에 저장
ps aux | sort -k 4 -nr > process_list.txt

파이프라인 사용 시 유용한 팁

  1. 작업을 단계별로 디버깅하기
    • 각 명령어의 출력 결과를 중간 단계에서 확인하며 디버깅합니다.
      cat access.log | awk '{print $7}' | head -n 10
  2. 명령어 옵션 활용
    • 명령어 옵션을 잘 활용하면 필요 없는 데이터를 줄이고, 파이프라인의 효율을 높일 수 있습니다.
  3. 파일 대신 명령어 조합 사용
    • 임시 파일 생성 없이 파이프라인으로 데이터를 처리하면 효율적입니다.

정리

Bash 파이프라인은 데이터를 단계적으로 처리하여 효율적이고 가독성 높은 스크립트를 작성할 수 있게 도와줍니다. 위에서 소개한 예제와 함께 다양한 명령어를 조합해보며 실력을 쌓아보세요. 필요에 따라 중간 출력 결과를 확인하고, 명령어 옵션을 잘 활용하는 것이 핵심입니다.

반응형