일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Stored Procedure
- 그래프
- 이진탐색
- MYSQL
- Dijkstra
- union find
- Trie
- Hash
- two pointer
- String
- 다익스트라
- Brute Force
- DP
- binary search
- SQL
- Two Points
- 스토어드 프로시저
Archives
- Today
- Total
codingfarm
입출력 방향 바꾸기 본문
- 대부분 키보드로 명령을 입력하면 실행결과는 화면에 출력되는 방식으로 시스템을 사용해왔다.
- 입룩과 출력으로 사용하는 장치를 바꾸면 입력을 파일에서 읽어오거나 실행결과를 파일로 저장하는 것들이 가능하다.
표준 입출력 장치
- 리눅스에서는 표준입력장치와 표준출력장치를 아래처럼 정의한다.
- 표준 입력 장치 : 셸이 작업을 수행하는데 필요한 정보를 받아들이는 장치
- 표준 출력 장치 : 실행 결과를 내보내는 장치
- 표준 오류 장치 : 표준 출력과 별도로 오류 메시지를 내보내는 장치
- 기본적으로 표준 입력장치는 키보드로 설정되어있고, 표준 출력 및 오류 장치는 화면(모니터)로 설정된다.
- 리눅스는 모든걸 파일로 관리하며 이는 장치도 마찬가지다.
- 파일 디스크립터(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