본문 바로가기
개발자 일지/Linux

[리눅스 기초]I/O Redirection 개념 및 사용법

by 네빌링 2021. 3. 12.
반응형

-리눅스의 I/O Redirection의 개념과 사용법을 알아본다.

-생활코딩의 리눅스 강의를 바탕으로 학습하였다.

-ubuntu 12.10을 사용하였다.


I/O Redirection이란?

 

 직역하는대로 Input/Output의 재방향(화)이다. 입력과 출력의 기본적인 방향을 바꿔 입력값을 모니터 출력(기본출력)이 아닌 파일에 출력하여 저장하거나 파일값을 출력하는 등 입출력 방향을 재설정할 수 있다.

 

리눅스의 기본 입출력은 다음과 같다.

 

  • 표준입력(stdin: 키보드)
  • 표준출력(stdout: 모니터)
  • 표준에러(stderr: 모니터)

 즉, 기본적으로 키보드의 표준입력값은 모니터에 출력된다. 또한 에러 역시 모니터에 기본적으로 출력된다. I/O Redirection 명령어를 사용하면 이런 표준값들을 변경하여 다양한 방식으로 입출력할 수 있다.

 

I/O Redirection 명령어 - 표준출력을 파일에 저장하기

 

 우선 표준입력 후 표준출력 값을 모니터가 아닌 파일로 출력(저장)해본다. 꺽쇠표시 > 를 사용하면 입력값을 다른 출력값으로 리다이렉션 시켜준다. 

 

  • ls -l > redirect.txt : redirect.txt라는 파일에 ls -l의 출력값을 저장한다. 

ls -l의 출력값을 redirect.txt에 저장

 

 이후 nano redirect.txt 명령어를 통해 편집기로 파일을 열어보면 다음과 같이 결과가 저장되었음을 확인할 수 있다.

 

 

 여기서 기존에 mkdir 등으로 만들어진 파일에 리다이렉션이 안 되던데 왜 안 되는지 잘 모르겠다. 리다이렉션 명령어 실행시 새로만들 파일에 저장하도록 해야하는 것 같다.

 

 

 다음은 입력 명령어를 실패했을 때의 경우이다. 예를들어 rm nonefile.txt > redirect2.txt라는 명령어를 실행해보자. 여기서 nonfile.txt는 아직 없는 파일이다. 없는 파일을 rm 명령어로 삭제하려고 하면 에러가 발생한다. 표준에러는 일반적인 > 명령어로 저장이 안 된다. 다음과 같이 2> 를 사용해야 한다.

 

 에러출력은 > 앞에 2가 붙어 2>를 사용해야 하며, 일반출력은 >1>를 사용하면 된다. 아래 예시를 보면 첫번째 명령어는 에러가 발생하지만, 두번째 명령어는 에러가 발생하지 않는다.

 

첫번째 명령어 >는 에러가 발생하지만 두번째 2>명령어는 정상적으로 명령어가 실행 됨

위의 결과를 nano redirect2.txt로 실행해보면 아래와 같이 에러가 저장되었음을 확인할 수 있다.

 

 

 1>명령어와 2>명령어를 같이 써서 입력값이 정상 동작하면 1>로 실행되고 에러가 발생하면 2>로 실행되게 동시 명령어를 입력할 수 있다. 다음과 같다.

 

nonfile.txt는 없는 파일이기 때문에 rm 명령어 에러가 발생하며 2> 명령어를 통해 errorresult.txt에 에러결과가 저장됨

 

 

I/O Redirection 명령어 - 파일 내용 출력하기

 

 반대로 파일의 내용을 입력값으로 하여 표준출력을 할 수 있다.

위에서 에러가 저장된 errorresult.txt를 표준출력으로 사용하려면 > 를 반대로 < 로 사용하면 된다.

아래와 같다.

 

 

errorresult.txt의 내용을 표준입력(standard input)으로 출력(cat)한다. 그런데 잘 생각해보면 cat 명령어 자체가 입력한 내용의 출력이다. 즉 cat errorresult.txt와 cat < errorresult.txt가 화면에 보이는 결과가 같다. 다음 블로그를 참고하여 좀 더 이유를 살펴보았다.

 

shoark7.github.io/programming/shell-programming/IO-Redirection-in-Shell

 

[중요] Shell: I/O Redirection

리눅스 쉘을 활용하는 데 필수적인 Redirection 개념에 대해 자세히 살펴봅니다.

shoark7.github.io

위의 블로거님 설명에 따르면 'cat 명령어에는 파일의 이름을 인자로 주면 입력을 그쪽으로 전환하도록 cat 내부에 설정되어 있기 때문에 결과적으로 두 명령어의 결과가 같은 것'이라고 한다. 출력방식을 여러 방법으로 알아두면 좋다고 하시니 알아두는게 확실히 좋을 것 같다.

 

그리고 head라는 명령어가 있다.

 

  • head -n[숫자] 파일명 : 파일의 첫 숫자만큼의 줄을 출력한다. head -5 파일명으로 하면 5줄만 출력한다.

테스트를 위해 errorresult.txt를 복붙으로 내용을 다음과 같이 수정했다.

 

위와 같이 만든 파일을 아래처럼 테스트해보았다.

 

 

head의 -n옵션만큼 출력됨을 확인할 수 있다.

 

이제 head와 I/O Redirection을 활용하여 아래와 같이 파일에 데이터를 저장하였다.

 

 

errorresult.txt의 첫 5줄을 입력값으로 head로 출력한 후, 이 출력한 값을 입력값으로 하여 redirect3.txt에 출력값을 저장했다. nano redirect3.txt를 통해 다음 결과를 확인할 수 있다.

 

5줄만 redirect3.txt에 저장

 

 



출처: https://gracefulprograming.tistory.com/100, shoark7.github.io/programming/shell-programming/IO-Redirection-in-Shell

 

반응형