본문 바로가기

[OS]Operating System/[Linux]

[Linux] 리디렉션 및 파이프 명령어

728x90
반응형

리디렉션 및 파이프 명령어

표준 입력 및 출력

UNIX 및 Linux 시스템에는 세 가지 표준 스트림이 있다.

https://ko.wikipedia.org/wiki/%ED%91%9C%EC%A4%80_%EC%8A%A4%ED%8A%B8%EB%A6%BC

 

표준 스트림 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 입력, 출력, 오류를 위한 표준 스트림 표준 스트림(standard streams)은 특정한 프로그래밍 언어 인터페이스뿐 아니라 유닉스 및 유닉스 계열 운영 체제(어느 정도까

ko.wikipedia.org

 

stdio.h 라이브러리를 통해 프로그램이 정보를 입력하거나 출력하는 데 사용된다.
이러한 스트림을 X 채널 또는 X 파일 디스크립터라고 한다.

  • 키보드는 stdin이라고 하는 채널 0의 입력 장치다.
  • 화면은 stdout 및 stderr라고 하는 채널 1과 2의 출력 장치다.
  • stderr는 명령에 의해 반환된 오류 스트림을 수신한다. 다른 스트림은 stdout으로 전달된다.

이러한 스트림은 파일을 가리키지만 UNIX/Linux에서는 모든 것이 파일이기 때문에 I/O 스트림을 다른 파일로 쉽게 전환할 수 있다. 이 원리가 쉘의 강점이다.

 

입력 리디렉션

문자 < 또는 <<를 사용하여 입력 스트림을 다른 파일로 리디렉션할 수 있다.

명령은 키보드 대신 파일을 읽는다.

ftp -in serverftp << ftp-commands.txt

입력 리디렉션은 사용자 상호 작용을 시뮬레이션하는 데에도 사용할 수 있다.

명령은 입력 리디렉션 이후 정의된 키워드를 만날 때까지 입력 스트림을 읽는다.

 

대화형 명령을 스크립팅하는데 사용

$ ftp -in serverftp << END
user alice password
put file
bye
END

 

키워드 END는 다른 단어로 대체 가능

$ ftp -in serverftp << STOP
user alice password
put file
bye
STOP

 

이렇게 쉘은 키워드가 포함된 줄을 받으면 ftp 명령을 종료한다.

종료 키워드인 END 또는 STOP은 행의 유일한 단어로, 시작 부분에 있어야한다.

 

wc 명령은 다음과 같이 사용 가능하다.

$ wc -l .bash_profile
27 .bash_profile # 파일 이름 뒤에 줄 수가 표시
$ wc -l < .bash_profile
27 # 줄 수만 반환

 

출력 리디렉션

표준 출력은 > 또는 >> 문자를 사용하여 다른 파일로 리디렉션할 수 있다.

간단한 > 리디렉션은 출력 파일의 내용을 덮어쓴다.

date +%F > date_file

 

>> 문자를 사용하면 명령의 출력 결과가 파일 내용에 추가되는 것을 나타낸다.

date +%F >> date_file

위의 두 경우 모두 파일이 없으면 자동으로 생성된다.

 

표준 오류 출력을 다른 파일로 리디렉션할 수도 있다.

이 경우 채널 번호를 지정해야 한다. (채널 0과 1은 생략할 수 있음)

ls -R / 2> errors_file

ls -R / 2>> errors_file

 

리디렉션의 예

2개의 출력을 2개의 파일로 리디렉션:

$ ls -R / >> ok_file 2>> nok_file

 

2개의 출력을 하나의 파일로 리디렉션:

$ ls -R / &>> output_file

 

_stderr_을 "무제한"으로 리디렉션하기(/dev/null):

$ ls -R / >> log_file 2>&1

 

 출력 리디렉션과 동시에 표시하려면 tee 명령어를 사용해야한다.

 

파이프

파이프는 첫 번째 명령의 표준 출력을 두 번째 명령의 표준 입력에 연결할 수 있는 메커니즘이다.
이 통신은 단방향이며 파이프(|) 기호로 수행된다.

파이프 왼쪽의 제어에서 표준 출력 채널을 통해 보내진 모든 데이터는 오른쪽의 제어의 표준 입력 채널로 전송된다.
특히 파이프 이후에 사용되는 명령어를 필터라고 한다.

 

예시

시작 부분만 표시:

$ ls -lia / | head

 

끝 부분만 표시:

$ ls -lia / | tail

 

결과 정렬:

$ ls -lia / | sort

 

단어/문자 수 세기:

$ ls -lia / | wc

 


Reference

반응형

'[OS]Operating System > [Linux]' 카테고리의 다른 글

[Linux] bin vs. sbin  (0) 2024.06.26
[Linux] 특별한 명령어  (0) 2024.06.25
[Linux] 검색 명령어  (0) 2024.06.23
[Linux] 시각화 명령어  (0) 2024.06.22
[Linux] 파일 트리 명령어  (0) 2024.06.21