Linux I/O (입출력) 리디렉션 작동 기초 배우기

리눅스 관리에서 가장 중요하고 흥미로운 주제 중 하나는 I/O 리다이렉션입니다. 명령줄의 이 기능은 명령의 입력과/또는 출력을 파일로 리다이렉션하거나, 파이프를 사용하여 여러 명령을 결합하여 “명령 파이프라인”이라고 불리는 것을 형성할 수 있도록 합니다.

기본적으로 실행하는 모든 명령은 두 가지 종류의 출력을 생성합니다.

  1. 명령 결과 – 프로그램이 생성하도록 설계된 데이터와
  2. 프로그램 상태 및 오류 메시지 – 프로그램 실행 세부 정보를 사용자에게 알려줍니다.

리눅스 및 기타 유닉스 계열 시스템에서는 아래와 같이 파일 이름과 파일 서술자 번호로 식별되는 세 개의 기본 파일이 있습니다.

  1. 표준 입력(stdin) 또는 0 – 키보드에 연결되어 있으며, 대부분의 프로그램이 이 파일에서 입력을 읽습니다.
  2. 표준 출력(stdout) 또는 1 – 화면에 연결되어 있으며, 모든 프로그램이 결과를 이 파일에 보냅니다.
  3. 표준 오류(stderr) 또는 2 – 프로그램이 상태/오류 메시지를 이 파일에 보내며, 이 파일은 화면에도 연결되어 있습니다.

따라서 I/O 리다이렉션을 사용하면 명령의 입력 소스를 변경하고 출력 및 오류 메시지를 보내는 위치를 변경할 수 있습니다. 이는 "<"">" 리다이렉션 연산자를 사용하여 가능해집니다.

리눅스에서 표준 출력을 파일로 리다이렉션하는 방법

다음 텍스트를 한국어로 번역하겠습니다. 번역된 텍스트만 반환할 것이며 어떤 설명도 포함하지 않습니다. 번역은 언어 사용 습관에 준수해야 합니다. top command의 출력을 나중에 검사하기 위해 저장하려면 표준 출력을 리디렉션할 수 있습니다. 여기 예시에서는 top command의 출력을 저장하려고 합니다:

$ top -bn 5 >top.log

다음과 같이 플래그를 사용합니다:

  1. -btop을 일괄 처리 모드로 실행하여 출력을 파일이나 다른 명령어로 리디렉션할 수 있습니다.
  2. -n – 명령이 종료되기 전에 반복되는 횟수를 지정합니다.

top.log 파일의 내용을 확인하려면 다음과 같이 cat command를 사용할 수 있습니다:

$ cat top.log

명령의 출력을 추가하려면 “>>” 연산자를 사용합니다.

예를 들어, 스크립트(또는 명령줄) 내에서 특히 top.log 파일에 top command의 출력을 추가하려면 아래 줄을 입력합니다:

$ top -bn 5 >>top.log

참고: 파일 기술자 번호를 사용하여 위의 출력 리디렉션 명령은 다음과 같습니다:

$ top -bn 5 1>top.log

리눅스에서 표준 오류를 파일로 리디렉션하는 방법

명령의 표준 오류를 리디렉션하려면 쉘이 무엇을 시도하는지 이해하도록 파일 기술자 번호인 2를 명시적으로 지정해야 합니다.

ls 명령어는 루트 권한이 없는 일반 시스템 사용자에 의해 실행될 때 오류가 발생합니다.

$ ls -l /root/

다음과 같이 표준 오류를 파일로 리다이렉트할 수 있습니다:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 
Redirect Standard Error to File

표준 오류를 추가하려면 다음 명령을 사용하십시오:

$ ls -l /root/ 2>>ls-error.log

표준 출력/오류를 하나의 파일로 리다이렉트하는 방법

명령의 모든 출력(표준 출력 및 표준 오류)을 단일 파일로 캡처하는 것도 가능합니다. 이는 파일 디스크립터 번호를 지정하여 두 가지 방법으로 수행할 수 있습니다:

1. 첫 번째 방법은 다음과 같이 작동하는 비교적 오래된 방법입니다:

$ ls -l /root/ >ls-error.log 2>&1

위 명령은 쉘이 먼저 ls 명령어의 출력을 ls-error.log 파일로 보내고( >ls-error.log 사용), 그런 다음 모든 오류 메시지를 파일 디스크립터 2(표준 출력)로 리다이렉트하여 ls-error.log 파일로 보냅니다( 2>&1 사용). 즉, 표준 오류도 표준 출력과 동일한 파일로 전송됩니다.

2. 두 번째 직접적인 방법은 다음과 같습니다:

$ ls -l /root/ &>ls-error.log

표준 출력과 표준 오류를 단일 파일에 추가할 수도 있습니다:

$ ls -l /root/ &>>ls-error.log

파일로 표준 입력 리다이렉트하는 방법

대부분의 경우 표준 입력은 표준 입력에서 입력을 받으며, 기본적으로 표준 입력은 키보드에 연결됩니다.

키보드 이외의 파일에서 표준 입력을 리디렉션하려면 다음과 같이 “<” 연산자를 사용하십시오:

$ cat <domains.list 
Redirect Standard Input to File

파일로 표준 입력/출력 리디렉션하는 방법

sort 명령어를 사용하여 동시에 표준 입력, 표준 출력 리디렉션을 수행할 수 있습니다:

$ sort <domains.list >sort.output

파이프를 사용한 I/O 리디렉션 방법

한 명령어의 출력을 다른 명령어의 입력으로 리디렉션하려면 파이프를 사용할 수 있습니다. 이는 복잡한 작업을 위한 유용한 명령어 라인을 구축하는 강력한 수단입니다.

예를 들어, 아래 명령은 가장 최근에 수정된 상위 다섯 파일을 나열합니다.

$ ls -lt | head -n 5 

여기서 옵션:

  1. -l – 긴 목록 형식을 활성화합니다
  2. -t최신 파일로 수정 시간순으로 정렬이 먼저 표시됩니다
  3. -n – 헤더 라인 수를 지정합니다

파이프라인 구축을 위한 중요한 명령어

여기서, 명령어 파이프라인을 구축하는 데 중요한 두 가지 명령어를 간단히 검토하겠습니다.

xargs는 표준 입력에서 명령줄을 작성하고 실행하는 데 사용됩니다. 아래는 xargs를 사용하는 파이프라인의 예입니다. 이 명령은 Linux에서 파일을 여러 디렉토리로 복사하는 데 사용됩니다:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh
Copy Files to Multiple Directories

그리고 옵션:

  1. -n 1 – xargs에게 명령줄 당 최대 하나의 인수를 사용하도록 지시하고 cp 명령로 보냅니다.
  2. cp – 파일을 복사합니다.
  3. -v복사 명령의 진행 상황을 표시합니다.

더 많은 사용 옵션 및 정보는 xargs 매뉴얼 페이지를 참조하십시오:

$ man xargs 

A tee command reads from standard input and writes to standard output and files. We can demonstrate how tee works as follows:

$ echo "Testing how tee command works" | tee file1 
tee Command Example

파일 또는 텍스트 필터효과적인 리눅스 파일 작업을 위해 파이프와 함께 일반적으로 사용되며, 명령의 출력을 재구성하는 등 강력한 방식으로 정보를 처리하여 유용한 리눅스 보고서 생성에 중요할 수 있습니다. 또한 파일 내의 텍스트 수정 및 여러 리눅스 시스템 관리 작업을 수행할 수 있습니다.

리눅스 필터 및 파이프에 대해 더 알아보려면, 이 기사 Apache 서버에 액세스하는 상위 10개 IP 주소 찾기를 읽어보세요. 이는 필터와 파이프를 사용하는 유용한 예제를 보여줍니다.

이 기사에서는 리눅스에서의 입출력 리다이렉션의 기본을 설명했습니다. 아래 피드백 섹션을 통해 의견을 공유해 주십시오.

Source:
https://www.tecmint.com/linux-io-input-output-redirection-operators/