명령을 실행하는 과정에서 셸이 화면에 출력하는 메시지는 두 가지이다.
하나는 명령의 정상적인 실행 결과이고, 다른 하나는 명령 실행 중 발생하는 오류 메시지 이다.
정상적인 실행 결과는 표준 출력이고, 오류 메시지는 표준 오류라고 한다.
ex) [user1@localhost ch4]$ ls
out1 --> 표준 출력
user1@localhost ch4]$ ls /abc
ls : cannot access '/abc' : 그런 파일이나 디렉토리가 없습니다. --> 표준 오류
표준 출력과 표준 오류는 다르게 관리된다.
ex) [user1@localhost ch4]$ ls > ls.out : 표준 출력 리다이렉션
[user1@localhost ch4]$ ls /abc > ls.err : 표준 출력 리다이렉션
ls : cannot access '/abc' : 그런 파일이나 디렉토리가 없습니다. : 오류 메시지가 화면에 출력된다.
[user1@localhost ch4]$ cat ls.err : 오류 메시지가 출력되지 않는다. 따라서 저장되지 않았다.
[user1@localhost ch4]$ cat ls.out : 표준 출력 내용이 출력된다.
ls.out
out1
표준 출력은 1번, 표준 오류는 2번 장치 파일이다. '>'는 '1>' 같은 것이기 때문에 '>' 로는 표준 오류가 리다이렉션되지 않는다.
표준 오류를 저장하는 방법은 아래와 같다.
기능 : 표준 오류 메시지를 파일에 저장한다.
형식 : 명령 2>파일명
'2>'는 2번 파일, 즉 stderr 파일로 나갈 내용을 지정한 파일에 저장하라는 것이다.
오류 리다이렉션에서는 파일 디스크립터 번호를 생략할 수 없다. (표준 출력은 '1'을 생략해도 됨)
ex) [user1@localhost ch4]$ ls /abc 2> ls.err : 표준 오류를 리다이렉션 한다.
[user1@localhost ch4]$ cat ls.err
ls : cannot access '/abc' : 그런 파일이나 디렉토리가 없습니다 : ls.err 파일에 저장된 메시지 출력
* 표준 출력과 표준 오류를 한 번에 리다이렉션 하기
명령의 정상적인 실행 결과와 오류 메시지를 한 번에 리다이렉션하여 각각 파일에 저장하려면 '>' 와 '2>'를 함께 사용하면 된다.
ex) [user1@localhost ch4]$ ls . /abc > ls.out 2> ls.err
위에서 '.'은 현재 디렉토리이므로 ls.out에는 현재 디렉토리 내용이 파일로 저장하고 '/abc'라는 디렉토리는 없으므로 ls.err 에는오류 메시지가 저장된다.
* 오류 메시지 버리기
명령 실행 중 나타나는 오류 메시지를 무시하고 싶을 때는 리눅스의 특수 파일인 '/dev/null'을 사용하면 된다.
'/dev/null' 파일은 버리고 싶은 내용을 담는 장치 파일로, 이 파일로 전달된 모든 내용은 시스템에서 사라지고 복구할 수 없다.
ex)[user1@localhost ch4]$ ls /abc 2> /dev/null
* 표준 출력과 표준 오류를 한 파일로 리다이렉션하기
아래와 같이 실행하면 내용을 덮어쓰지 않고 깔끔하게 모든 출력과 오류 메시지를 한 파일로 리다이렉션할 수 있다.
ex) [user1@localhost ch4]$ ls . /abc > ls.out 2>&1
[user1@localhost ch4]$ cat ls.out
ls : cannot access '/abc' : 그런 파일이나 디렉토리가 없습니다 : 오류 메시지를 저장한다.
. : 현재 디렉토리 내용임.
ls.err
ls.out
out1
1. 명령의 정상 실행 결과를 파일로 리다이렉션한다. ('>')
2. 그 명령 전체의 오류 메시지를 1번 파일(표준 출력 파일, &1이라고 표현함)로 리다이렉션한다. ('2>')
위와 같이 1번을 실행하면서 표준 출력이 먼저 변경된다. 표준 출력이 변경된 다음이므로 2번에서는 오류 메시지를 1번파일로 보내기만 하면 된다. 2번은 '2>&1'과 같이 지정한다.
이것은 2번 파일을 1번으로 리다이렉션하라는 뜻이다. '2>&1' 처럼 공백이 있으면 안 됨.
'컴퓨터 세상 > LiNuX' 카테고리의 다른 글
리눅스 기본 - 프롬프트, 홈 디렉토리, 명령의 구조와 사용 (0) | 2022.02.02 |
---|---|
입/출력 방향 변경 - 입력 리다이렉션 (0) | 2022.02.02 |
입/출력 방향 변경 - 출력 리다이렉션 (0) | 2022.01.28 |
셸 사용법 - 출력 명령, 특수 문자 사용 (0) | 2022.01.25 |
셸 기본 사용법 - 셸 변경, 셸 내장 명령 (0) | 2022.01.18 |