데이터로그😎

[Linux] 2. IO Redirection - output 본문

Data Engineering

[Linux] 2. IO Redirection - output

지연v'_'v 2024. 1. 15. 15:11

Unix Process

Unix Process

  • Standard Input = 명령어 (예:  ls-l)
  • Standard Input의 결과물 의 종류 (Output의 종류)
    1. Standard Output
      • 예를 들면, Input으로 ls -l 명령어를 입력했다면  "현재 디렉토리에 위치한 파일명을 출력" 한 것이 output이 된다.
      • 기본적으로 모니터에 output이 출력된다.
        Standard Input 예시
    2. Standard Error
      • 만약 Input의 명령어가 잘못되었다면? Error가 출력된다.
        Standard Error 예시

 

 

 

Redirection - output

Redirection 이란?

리눅스에서의 리다이렉션은 명령어의 입력이나 출력을 다른 위치로 전환하거나 저장하는 것을 의미합니다. 쉘에서 사용되는 명령어의 입출력을 조절하는 데 사용됩니다. 주로 파일 또는 다른 프로세스와의 통신에 활용됩니다.

 

1. Standard Output을 redirection 할 때

Standard output을 모니터에 출력하는 것 대신 다른 곳으로 출력되게 하고 싶다면? 즉, 출력 방향을 바꾸고싶다면?

예를 들어, ls -l의 결과물을 모니터에 출력하는 것 대신 file에 출력하게 하고 싶다면 아래와 같은 명령어를 사용할 수 있다.

  • > 를 사용하여 redirection할 수 있으며, 1> 도 같은 의미이다.
    ls -l > result.txt
    ls -l 1> result.txt

2. Standard Error를 redirection 할 때

현재 디렉토리에 red1.txt 라는 파일이 존재하지 않는다고 가정해보자.

이 때 만약 rm red1.txt 명령어를 실행하면 당연히 아래와 같은 오류가 난다.

 

이 때 오류메시지를 result.txt로 저장하고 싶다면 어떻게 할까?

Standard Ouput의 redirection 시에는 > 를 사용하니 >를 사용하여 저장하면 될까?

그렇지 않다. 오류가 난다. 왜냐하면 > 는 1>과 같은 의미이기 때문에 출력 output이 있어야 실행될 수 있다.

그러나 rm red1.txt는 Standard Error를 출력한다. 따라서 이러한 에러를 파일로 저장하려면 2> 를 사용하면 된다.

> 로 error 저장
2> 로 에러 저장

 

nano를 통해 확인해보면 result.txt에 에러 메세지가 저장된 것을 볼 수 있다.

nano

 

3. Standard output & Standard Erorr 둘 다 redirection하기

만약 rm red1.txt 명령어를 실행한 결과, Standard output이 나오면 텍스트 파일로 저장하고 Standard error가 나오면 error.log에 저장하고 싶을 땐? rm red1.txt 뒤에 둘 다 쓰면 된다.