OS/Linux - Ubuntu

[Linux - 리눅스] 입출력 장치, 파일 디스크립터(File Descriptor), 리다이렉션(Redirection)

주누다 2014. 12. 25. 00:18
반응형

표준 입출력 장치

- 정보를 받아들이는 장치 : 표준 입력 장치

- 정보를 출력하는 장치 : 표준 출력 장치

- 오류 메시지를 내보내느 장치 : 표준 오류 장치



파일 디스크립터(File Descriptor)

- 리눅스는 장치도 파일로 관리.

- 쉘은 작업 중 필요한 파일에 일련번호를 붙여서 관리.

- 이를 '파일 디스크립터(File Descriptor)라고 함.

- 표준 입출력 장치도 파일로 관리되고 있으며,

  입출력 장치를 변경할 때는 이 파일 디스크립터를 사용함.


표준 입출력 장치의 파일 디스크립터

파일 디스크립터

파일 디스크립터 대신 사용하는이름

정의

0

stdin

명령어의 표준 입력

1

stdout

명령어의 표준 출력

2

stderr

명령어의 표준 오류



리다이렉션(Redirection)

- 표준 입출력 장치를 파일로 바꾸는 것을 '리다이렉션'이라고 함.


출력 리다이렉션

- 출력의 방향을 바꾸는 출력 리다이렉션은 두가지 방법이 있음.

- 저장할 파일이 이미 존재하는 파일일 경우, 기존 파일의 내용을 유지할 것인지 여부.

- '>' 은 기존 파일의 내용을 삭제하고 새로 결과를 저장할 때.

- '>>' 은 기존 파일의 내용 뒤에 결과를 추가할 때.

파일 덮어쓰기 '>'

- 표준 출력 파일을 바꾸는 특수 문자.

- 기능 : 파일 리다이렉션(덮어쓰기)

- 형식 : 명령 1 > 파일 이름

           명령 > 파일 이름

- 형식의 '1'은 파일 디스크립터의 1번을 의미.

- 1번이 표준 출력(화면)이므로 이를 대신하여 지정한 파일을 대신해 표준 출력이 파일로 바뀌는 것을 의미.

- 파일 디스크립터 1은 생략 가능하며, 보통 생략된 형식을 사용

- 쉘은 '>'을 사용한 리다이렉션에서 지정한 이름의 파일이 없으면

  파일을 생성하여 명령의 수행 결과를 저장.

- 만약 지정한 이름의 파일이 있으면 이전의 내용이 없어지고 명령의 수행 결과로 대체되므로,

  출력 리다이렉션을 사용할 때는 먼저 같은 이름의 파일이 있는지 확인.

- 예상치 않게 파일 내용을 덮어쓰는 상황을 예방하는 방법으로는 set 명령을 사용해서 예방할 수 있음.

  -> set -o noclobber

  -> set +o noclobber(해제)


- 일반적으로 cat 명령은 파일 내용을 화면으로 출력할 때 사용하지만,

  cat 명령은 표준 입력으로부터 입력을 받아 표준 출력으로 보낼 수 있음.

  cat 명령의 결과를 파일로 리다이렉션하면 키보드의 입력을 새로운 파일로 저장할 수 있음.

  ex)

    user1@ubuntu:~/ch4$ cat > out1 => 표준 입력을 받아  out1에 저장

    Ubuntu Linux    => 내용 입력

    I love Linux

    ^D    => 입력을 종료(Ctrl + d)

    user1@ubuntu:~/ch4$ cat out1  => 파일 내용 확인

    Ubuntu Linux

    I love Linux

파일에 내용 추가하기 '>>'

 - '>>'는 명령의 실행 결과를 지정한 파일의 끝에 덧붙이는데 사용.

- 기능 : 파일에 내용을 추가함.

- 형식 : 명령 >> 파일 이름

- 지정한 파일이 없으면 파일을 생성하고,

  파일이 있으면 기존 파일의 끝에 명령의 실행 결과를 추가.



오류 리다이렉션 

- 명령 실행 중 발생하는 오류 메세지를 기본적으로 화면에 출력.

- 표준 출력과 표준 오류 모드 기본 장치가 화면으로 지정되어  같은 것처럼 보이지만 사실은 다르게 관리.

- 파일 디스크립터를 보면, 표준 출력은 1번, 표준 오류는 2번 장치 파일.

- '>' 는 '1>'과 같은 것으로, 오류 메세지를 리다이렉션 할려면 '2>' 으로 하여야함.

'2>'

- 기능 : 표준 오류 메시지를 파일에 저장.

- 형식 : 명령 2> 파일 이름

- '>2'는 2번파일, 즉 stderr파일로 나갈 내용을 지정할 파일에 저장하라고 쉘에 알려주는 것.

- 오류 리다이렉션에서는 파일 디스크립터 번호를 생략할 수 없음.


오류 메세지 버리기

- 오류 메세지가 귀찮아서 무시하고 싶을 때는, 리눅스의 특수 파일인

  '/dev/null'을 사용하면 됨.

- '/dev/null' 파일은 버리고 싶은 내용을 담는 장치 파일로,

  이 파일에 전달된 모든 내용은 시스템에서 사라지고 복구 할 수 없음.


표준 출력과 표준 오류를 한 파일로 리다이렉션하기

1) 명령의 정상 실행 결과를 파일로 리다이렉션.

2) 그 명령 전체의 오류 메시지를 1번파일(표준 출력 파일, '&1'이라고 표현함)로 리다이렉션

- '1)'을 실행하면서 표준 출력이 먼저 변경되어 정상적인 실행결과가 파일로 저장됨.

- 표준 출력이 변경된 다음이므로 '2)'에서는 오류 메시지를 1번 파일로 보내기만 하면 됨.

- '2)' 는 '2>&1' 과 같이 지정.

  2번 파일을 1번으로 리다이렉션하라는 뜻.

  '2>'와 '&1' 사이에 공백이 있으면 안 됨.



입력 리다이렉션

- '<'는 표준 입력 장치 파일을 리다이렉션 하는 기능을 제공하는 특수 문자.

'<'

- 기능 : 표준 입력을 바꿈.

- 형식 : 명령 0< 파일 이름

              명령 < 파일 이름

cat 명령어

- 파일의 내용이나 키보드에서 입력을 받아 화면에 출력하는 것.

- cat 명령은 파일을 읽어서 출력하는 기능

- 표준 입력을 자동으로 파일로 리다이렉션한 것.

- '<' 를 생략한것

사용 예

user@ubuntu:~/ch4$ cat out1  =>  파일 내용을 출력함('<' 생략)

Ubuntu Linux

I Love Linux.

user@ubuntu:~/ch4$ cat < out1  =>  표준 입력을 리다이렉션함('<' 사용)

Ubuntu Linux

I Love Linux.

user@ubuntu:~/ch4$ cat 0< out1  => 표준 입력을 리다이렉션함('0<' 사용)

Ubuntu Linux

I Love Linux.




반응형