승상의 코딩 블로그

[Linux] - 출력 재지정 본문

Linux (리눅스)

[Linux] - 출력 재지정

양승상 2024. 9. 19. 12:09

2023.09.16 - [Linux (리눅스)] - 파일에 데이터를 저장하는 입출력 재지정(I/O redirection) - '>'

 

파일에 데이터를 저장하는 입출력 재지정(I/O redirection) - '>'

터미널에서 명령어를 실행하면, 사용자에게 정보를 보여주기 위해 터미널에 정보들이 시현된다. 이러한 정보는 '한 번' 보여준다. 데이터는 보관해야 하는 상황이 많다. 나의 예시 나의 경우를

seungsang.tistory.com

 

이 글의 추가 포스팅이다.

파일 입출력

리눅스에서 운영체제가 입출력 자원을 추상화하기 위해 File Descriptor(FD) 를 사용한다.

프로세스가 파일을 열면 운영체제가 해당 파일에 대한 File Descriptor 를 할당해준다.

일반적으로, 프로세스가 실행되면 STDIN(FD:0), STDOUT(FD:1), STDERR(FD:2) 를 할당받는다.

* STDOUT 은 표준 출력

* STDERR 는 표준 에러

 

STDOUT와 STDERR 의 출력값들은 다양한 곳에서 활용될 수 있으니 좀 더 알아보자.


들어가기전

현재 경로의 ls 를 입력하면 dump.txt 하나만 존재한다고 가정한다.

seungsang@seungsang:~/Desktop$ ls
dump.txt

 

표준 출력 재지정 Overwrite (1>)

seungsang@seungsang:~/Desktop# ls -l dump.txt 1> stdout.txt
seungsang@seungsang:~/Desktop# ls -l dump.txt > stdout2.txt
seungsang@seungsang:~/Desktop# cat stdout.txt
-rw-rw-r-- 1 1000 seungsang 172032 Sep 16 2023 dump.txt
seungsang@seungsang:~/Desktop# cat stdout2.txt
-rw-rw-r-- 1 1000 seungsang 172032 Sep 16 2023 dump.txt

"1>" 를 사용하면 명령어의 출력 결과를 재지정할 수 있다.

">" 는 기본적으로 1이 생략된 형태이다.

* 1은 File Descriptor 에서 STDOUT 를 의미한다.

표준 출력 재지정 Append (>>)

root@seungsang:~/Desktop# ls -l dump.txt 1>> stdout.txt
root@seungsang:~/Desktop# cat stdout.txt
-rw-rw-r-- 1 1000 seungsang 172032 Sep 16 2023 dump.txt      // 기존에 있던 행
-rw-rw-r-- 1 1000 seungsang 172032 Sep 16 2023 dump.txt      //  추가된 행

">>" 를 사용하면 기존 내용에 데이터가 추가된다. 

표준 에러 재지정(2>)

seungsang@seungsang:~/Desktop$ ls -l dump2.txt 2> stderr.txt
seungsang@seungsang:~/Desktop$ cat stderr.txt
ls: cannot access 'dump2.txt': No such file or directory 

dump2.txt 파일은 존재하지 않으므로 ls 명령시 에러가 발생할 것이다.

"2>" 를 사용하면 에러 메시지의 결과를 재지정할 수 있다.

* 2는 File Descriptor 에서 STDERR 를 의미한다.

표준 출력과 표준 에러 재지정( 1>  ~~~  2>&1)

root@seungsang:~/Desktop# ls -l dump.txt dump2.txt 1> stdout_err.txt 2>&1
root@seungsang:~/Desktop# cat stdout_err.txt
ls: cannot access 'dump2.txt': No such file or directory  // 표준 에러
-rw-rw-r-- 1 1000 seungsang 172032 Sep 16 2023 dump.txt  // 표준 출력

단순히 2>1 을 적으면 1이라는 파일에 저장하라는 의미가 된다.

&1 은 File Descriptor 의 표준 출력(STDOUT)을 의미하므로 2>&1 를 써준다.

모든 출력을 버리고 싶을 때

root@seungsang:~/Desktop# ls -l dump.txt dump2.txt 1> /dev/null 2>&1
root@seungsang:~/Desktop# 

출력할 필요도, 저장할 필요도 없다면 /dev/null 에다가 값을 버릴 수 있다.

/dev/null 은 실제로 존재하지 않는 장치이다. 이곳에 데이터를 기록하면 즉시 삭제된다.

/dev/null 을 읽으면 아무것도 읽히지 않는다.

반응형
Comments