표준 입출력 장치
- 표준 입력 장치: 셸이 작업을 수행하는 데 필요한 정보를 받아들이는 장치
- 표준 출력 장치: 실행 결과(오류 메세지 제외 정상출력만)를 내보내는 장치
- 표준 오류 장치: 표준 출력과 별도로 오류 메세지를 내보내는 장치
| 파일 디스크립터 | 파일 디스크립터 대신 사용하는 이름 | 정의 |
| 0 | stdin | 명령의 표준 입력 |
| 1 | stdout | 명령의 표준 출력 |
| 2 | stderr | 명령의 표준 오류 |
파일 디스크립터
리눅스는 장치도 파일로 관리하며 파일마다 일련번호를 붙여서 관리하고 이 번호가 파일 디스크립터이다.
출력 리다이렉션 >, >>
파일 덮어쓰기 >
명령 1> 파일명
명령 > 파일명
여기서 1은 파일 디스크립터 1번을 의미한다. 즉, 지정한 파일을 1번 파일로 간주하겠다는 것이다. 1번이 표준 출력(콘솔)이므로 이를 대신하여 지정한 파일을 사용한다는 것은 결과적으로 표준 출력의 공간이 해당 파일로 바뀌는 것을 의미한다.

ls -al 명령의 표준 출력 값을 out1로 리다이렉션 해 저장한다. out1 파일이 없기 때문에 새로 생성되었다.
date 명령의 표준 출력 값을 out1로 리다이렉션 해 저장한다. 이 때는 out1 파일이 있기 때문에 overwrite 되었다.
set 명령을 사용하면 예상치 않게 파일 내용을 덮어쓰는 일을 예방할 수 있다. 항상 적용하기 위해서는 사용자 초기화 파일에 해당 설정을 추가하면 된다. 해제를 위해서는 +옵션을 사용한다.

set -o 옵션을 이용해서 사용자 파일에 덮어쓰지 못하도록 추가해주었다. set 옵션은 일회성임에 유의해야 한다.
set +o 옵션을 이용해서 사용자 파일에 덮어쓰는 게 가능해졌으므로 >을 사용해도 에러가 나오지 않는다.
파일에 내용 추가하기 >>
명령 >> 파일명
>과는 파일을 덮어쓰지 않고 뒤에 이어 붙여준다는 차이점만 있다.
오류 리다이렉션 2>
명령 2> 파일명

ls 명령의 표준 출력을 ls.out에 저장하고 ls /abc의 표준 출력을 ls.err에 저장한다.
ls /abc는 표준 에러만 발생하기 때문에 >을 이용했을 때는 ls.err에 아무 값도 저장되지 않는다.
2>을 이용해야 표준 에러가 ls.err에 저장되는 것을 볼 수 있다.
표준 출력과 표준 오류 한 번에 리다이렉션

>와 2>을 한 줄에 입력해서 표준 출력과 표준 에러를 한 번에 각각 다른 파일로 리다이렉션 할 수 있다.
오류 메시지 버리기

ls /abc의 표준 에러를 /dev/null에 출력시켜서 오류 메시지를 버렸다.
/dev/null은 리눅스에서 사용하는 특수 파일인데, 이 파일에 담긴 내용은 복구할 수 없이 버려진다. 필요 없는 내용을 거르고 싶을 때 사용한다.
표준 출력과 표준 오류를 한 파일로 리다이렉션 2>&1

>을 이용해 ls . /abc의 표준 출력(정상 결과)를 ls.out 파일로 리다이렉션한다.
ls . /abc > ls.out 명령의 오류 메세지를 1번 파일(표준 출력 파일, &1)로 리다이렉션(2>)한다.
입력 리다이렉션 <
명령 0< 파일명
명령 < 파일명

cat은 파일의 내용이나 키보드로 입력받은 값을 화면에 출력하는 명령이다. 매번<을 붙이는 것이 번거로우므로 <을 붙이는 것을 생략해서 사용하는 것이다.
1번은 cat 명령에 대한 표준 입력을 out1로 지정(<이 생략됨, 보통 이렇게 사용)
2번도 마찬가지로 cat 명령에 대한 표준 입력을 out1로 지정
3번은 cat 명령의 결과값에 대한 표준 출력(지정된 표준 입력 파일이 없으므로 키보드 입력을 받음)를 out1에 저장(> 이용)
4번은 cat 명령에 대한 표준 입력을 out1로 지정. 3번에 의해 out1의 내용이 변경된 것을 볼 수 있다.