[입출력 리다이렉션과 파이프]파일 디스크립터와 관련된 기능 설명

Bash 쉘에서 입출력 리다이렉션과 파이프는 파일 디스크립터를 사용하여 다양한 기능을 제공합니다. 파일 디스크립터는 표준 입력 (0), 표준 출력 (1), 표준 에러 (2)를 나타내는 정수 값으로 사용됩니다.

입출력 리다이렉션을 통해 표준 입력 및 출력을 파일로 리다이렉트하거나 파일 디스크립터를 재지정할 수 있습니다. 다음은 주요한 기능과 관련된 설명과 샘플 코드입니다.

  1. 파일 리다이렉션
  • 표준 입력 리다이렉션 (<): 파일을 표준 입력으로 사용합니다.
  • 표준 출력 리다이렉션 (>): 표준 출력을 파일로 리다이렉트합니다.
  • 표준 에러 리다이렉션 (2>): 표준 에러를 파일로 리다이렉트합니다.
  • 추가 모드 출력 리다이렉션 (>>): 기존 파일에 내용을 추가합니다.
# 파일 리다이렉션 예시: 표준 출력을 파일에 저장
command > output.txt

# 표준 에러 리다이렉션 예시: 에러 메시지를 파일에 저장
command 2> error.txt

# 추가 모드 출력 리다이렉션 예시: 기존 파일에 내용 추가
command >> file.txt
  1. 파일 디스크립터 재지정
  • 특정 파일 디스크립터 재지정: 명령어의 입력 또는 출력을 특정 파일 디스크립터로 지정합니다.
# 파일 디스크립터 재지정 예시: 표준 출력을 파일 디스크립터 3으로 지정
command >&3
  1. 파이프
  • 파이프 (|): 한 명령어의 출력을 다른 명령어의 입력으로 전달합니다.
# 파이프 예시: 명령어 출력을 다른 명령어로 전달
command1 | command2

[응용 코드]

함수와 함께 사용하는 예시:

# 함수와 함께 사용 예시: 파일 내 특정 패턴 개수 카운트
count_pattern() {
  pattern=$1
  file=$2
  
  grep -o "$pattern" $file | wc -l
}

count_pattern "keyword" file.txt

# 파일 디스크립터를 사용하는 함수 예시: 파일 내용을 파일 디스크립터로 출력
read_file() {
  file=$1
  exec 3< $file
  cat <&3
  exec 3<&-
}

read_file file.txt

조건문과 반복문과 함께 사용하는

예시:

# 조건문과 함께 사용 예시: 파일 존재 여부 확인 후 처리
file="file.txt"
if [ -f "$file" ]; then
  cat "$file" | grep "pattern"
fi

# 반복문과 함께 사용 예시: 디렉토리 내 파일 탐색 및 처리
directory="path/to/directory"
for file in "$directory"/*; do
  if [ -f "$file" ]; then
    cat "$file" | wc -l
  fi
done

[성능 향상을 위한 팁]

  • 입출력 리다이렉션과 파이프는 필요한 경우에만 사용하세요. 불필요한 리다이렉션 작업은 성능을 저하시킬 수 있습니다.
  • 필요한 경우 파일 디스크립터를 잘 활용하여 입출력 리다이렉션 작업을 최적화하세요. 파일 디스크립터를 효과적으로 재사용하면 시스템 리소스를 절약할 수 있습니다.

[성능 향상을 위한 팁 샘플 코드]

# 임시 파일 사용 예시: 파이프 대신 임시 파일을 사용하여 중간 결과 저장
command1 > temp.txt
command2 < temp.txt
rm temp.txt