Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

codingfarm

입출력 방향 바꾸기 본문

Linux/Ubuntu

입출력 방향 바꾸기

scarecrow1992 2020. 11. 15. 23:10
  • 대부분 키보드로 명령을 입력하면 실행결과는 화면에 출력되는 방식으로 시스템을 사용해왔다.
  • 입룩과 출력으로 사용하는 장치를 바꾸면 입력을 파일에서 읽어오거나 실행결과를 파일로 저장하는 것들이 가능하다.

 


표준 입출력 장치

  • 리눅스에서는 표준입력장치와 표준출력장치를 아래처럼 정의한다.
    • 표준 입력 장치 : 셸이 작업을 수행하는데 필요한 정보를 받아들이는 장치
    • 표준 출력 장치 : 실행 결과를 내보내는 장치
    • 표준 오류 장치 : 표준 출력과 별도로 오류 메시지를 내보내는 장치
  • 기본적으로 표준 입력장치는 키보드로 설정되어있고, 표준 출력 및 오류 장치는 화면(모니터)로 설정된다.
  • 리눅스는 모든걸 파일로 관리하며 이는 장치도 마찬가지다.
    • 파일 디스크립터(file descriptor) : 셸이 작업에 필요한 파일을 관리하기위해 붙이는 일련번호
    • 표준 입$\cdot$출력 장치도 파일로 관리되기 때문에 파일 디스크립터가 부여된다.
    • 입출력 장치를 변경할 때는 이 파일 디스크립터를 사용한다.
파일 디스크립터 파일 디스크립터 대신 사용하는 이름 정의
0 stdin 명령의 표준 입력
1 stdout 명령의 표준 출력
2 stderr 명령의 표준 오류
  • 표준 입출력 장치를 파일로 바꾸기 위해선 >, <, >> 특수문자를 사용한다.
  • 리다이렉션(redirection) : 표준 입출력 장치를 파일로 바꾸는 것
ls -l > res

 


출력 리다이렉션

  • 출력 리다이렉션에는 2가지 방법이 있다.
    • 두 방법의 차이점은 기존 파일의 내용을 유지할것인지 여부이다.
    • > : 기존 파일의 내용을 삭제하고 새료 결과를 저장한다.
    • >> : 기존 파일의 내용 뒤에 결과를 추가한다.

 

파일 덮어쓰기: >

command 1> file
command > file
  • 첫번째 형식의 1은 파일 디스크립터 1번을 의미한다.
    • 즉, 지정한 파일을 1번 파일로 간주하겠다는 것이다.
    • 파일디스크립터 1은 생략가능하며 보통 두번째 형식을 사용한다.
  • 셸은 >를 사용한 리다이렉션에서 지정한 파일명의 파일이 없으면 파일을 생성하여 명령의 수행결과를 저장한다.
  • 만약 해당 파일이 있으면 기존 내용이 없어지고 명령의 수행 결과로 대체된다.
    • 출력 리다이렉션을 사용할때는 먼저 해당 파일이 있는지 확인해야 한다.

 

  • 오늘 날짜를 out1 파일에 저장하려면 아래 명령문을 적는다.
date > out1       
  • 아래는 표준 입력(키보드)을 받아 출력을 out1파일에 저장하는 명령문이다.
cat > out1

 

 

 

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

  • 파일에 내용을 추가한다.
command >> file
  • 지정한 파일명이 없으면 파일을 생성하여 내용을 넣고, 파일이 이미 있으면 그 파일 내용의 끝에 명령의 실행 결과를 추가한다.

 

 


오류 리다이렉션

command 2> file
  • command의 실행결과 나오는 오류 메시지를 file에 저장한다.

 

  • 셸이 출력하는 메시지는 두가지다. 정상적인 출력과 오류 메시지.
  • 각각 표준출력, 표준오류라 부른다.
  • 표준오류도 화면에 출력되며, 표준출력처럼 리다이렉션이 가능하다.

  • 위 그림에서 첫번째 출력은 표준출력, 두번째 출력은 표준오류이다.
  • 표준출력과 표준오류 모두 기본 장치가 화면으로 지정되있어서 같은것처럼 보이지만, 실은 다르게 관리된다.

  • 현재 경로에 a, b, c 3가지 파일이 있다.
  • ls의 실행결과를 ls.out에 저장한결과, ls.out 파일의 생성과 함께 표준출력이 저장되었음을 확인할 수 있다.
  • 하지만 ls /abc의 표준 오류는 화면에 그대로 출력되며 ls.err 또한 생성은 되었지만 내부가 비었음을 볼 수 있다.

 

  • 2> 리다이렉션과 함께 사용한결과 표준오류가 ls.err 파일에 쓰였음을 확인할 수 있다.

 


표준 출력과 표준 오류를 한번에 리다이렉션 하기

command > file.out 2> file.err
  • command의 결과가 표준출력인지, 오류인지 명확하지 않을 경우 한번에 리다이렉션 하려면 위와같은 방법을 쓴다.
  • 주의할점은 출력이 발생하지 않는 파일은 안의 내용이 다 지워지게된다.

 


오류 메시지 버리기

cmd 2> /dev/null
  • 명령 실행중 나타나는 오류 메시지를 무시하고 싶을때는 리눅스의 특후 파일인 /dev/null을 사용하면된다.
  • /dev/null 파일을 버리고 싶은 내용을 담는 장치 파일로, 이 파일로 전달된 모든 내용은 시스템에서 사라져 복구할 수 없다.

 


4. 입력 리다이렉션

command 0< file
command < file
  • <는 표준 입력 장치 파일을 리다이렉션하는 기능을 제공하는 특수문자이다.
  • cat 명령은 파일의 내용이나 키보드로 입력을 받아 화면에 출력하는 명령이다.
  • cat 명령이 파일을 읽어서 출력하는 기능은 <를 생략한것으로, 표준 입력이 자동으로 파일로 리다이렉션한 것이다.

 

 

 

 

'Linux > Ubuntu' 카테고리의 다른 글

프로세스 관리 - 개념, 관리 도구  (0) 2021.03.06
특수 접근 권한 SetUID, SetGID  (0) 2021.03.05
shell  (0) 2020.11.04
vi  (0) 2020.11.03
파일 링크(file link)  (0) 2020.10.31
Comments