-리눅스의 I/O Redirection의 개념과 사용법을 알아본다.
-생활코딩의 리눅스 강의를 바탕으로 학습하였다.
-ubuntu 12.10을 사용하였다.
I/O Redirection이란?
직역하는대로 Input/Output의 재방향(화)이다. 입력과 출력의 기본적인 방향을 바꿔 입력값을 모니터 출력(기본출력)이 아닌 파일에 출력하여 저장하거나 파일값을 출력하는 등 입출력 방향을 재설정할 수 있다.
리눅스의 기본 입출력은 다음과 같다.
- 표준입력(stdin: 키보드)
- 표준출력(stdout: 모니터)
- 표준에러(stderr: 모니터)
즉, 기본적으로 키보드의 표준입력값은 모니터에 출력된다. 또한 에러 역시 모니터에 기본적으로 출력된다. I/O Redirection 명령어를 사용하면 이런 표준값들을 변경하여 다양한 방식으로 입출력할 수 있다.
I/O Redirection 명령어 - 표준출력을 파일에 저장하기
우선 표준입력 후 표준출력 값을 모니터가 아닌 파일로 출력(저장)해본다. 꺽쇠표시 > 를 사용하면 입력값을 다른 출력값으로 리다이렉션 시켜준다.
- ls -l > redirect.txt : redirect.txt라는 파일에 ls -l의 출력값을 저장한다.
이후 nano redirect.txt 명령어를 통해 편집기로 파일을 열어보면 다음과 같이 결과가 저장되었음을 확인할 수 있다.
여기서 기존에 mkdir 등으로 만들어진 파일에 리다이렉션이 안 되던데 왜 안 되는지 잘 모르겠다. 리다이렉션 명령어 실행시 새로만들 파일에 저장하도록 해야하는 것 같다.
다음은 입력 명령어를 실패했을 때의 경우이다. 예를들어 rm nonefile.txt > redirect2.txt라는 명령어를 실행해보자. 여기서 nonfile.txt는 아직 없는 파일이다. 없는 파일을 rm 명령어로 삭제하려고 하면 에러가 발생한다. 표준에러는 일반적인 > 명령어로 저장이 안 된다. 다음과 같이 2> 를 사용해야 한다.
에러출력은 > 앞에 2가 붙어 2>를 사용해야 하며, 일반출력은 >나 1>를 사용하면 된다. 아래 예시를 보면 첫번째 명령어는 에러가 발생하지만, 두번째 명령어는 에러가 발생하지 않는다.
위의 결과를 nano redirect2.txt로 실행해보면 아래와 같이 에러가 저장되었음을 확인할 수 있다.
1>명령어와 2>명령어를 같이 써서 입력값이 정상 동작하면 1>로 실행되고 에러가 발생하면 2>로 실행되게 동시 명령어를 입력할 수 있다. 다음과 같다.
I/O Redirection 명령어 - 파일 내용 출력하기
반대로 파일의 내용을 입력값으로 하여 표준출력을 할 수 있다.
위에서 에러가 저장된 errorresult.txt를 표준출력으로 사용하려면 > 를 반대로 < 로 사용하면 된다.
아래와 같다.
errorresult.txt의 내용을 표준입력(standard input)으로 출력(cat)한다. 그런데 잘 생각해보면 cat 명령어 자체가 입력한 내용의 출력이다. 즉 cat errorresult.txt와 cat < errorresult.txt가 화면에 보이는 결과가 같다. 다음 블로그를 참고하여 좀 더 이유를 살펴보았다.
shoark7.github.io/programming/shell-programming/IO-Redirection-in-Shell
위의 블로거님 설명에 따르면 'cat 명령어에는 파일의 이름을 인자로 주면 입력을 그쪽으로 전환하도록 cat 내부에 설정되어 있기 때문에 결과적으로 두 명령어의 결과가 같은 것'이라고 한다. 출력방식을 여러 방법으로 알아두면 좋다고 하시니 알아두는게 확실히 좋을 것 같다.
그리고 head라는 명령어가 있다.
- head -n[숫자] 파일명 : 파일의 첫 숫자만큼의 줄을 출력한다. head -5 파일명으로 하면 5줄만 출력한다.
테스트를 위해 errorresult.txt를 복붙으로 내용을 다음과 같이 수정했다.
위와 같이 만든 파일을 아래처럼 테스트해보았다.
head의 -n옵션만큼 출력됨을 확인할 수 있다.
이제 head와 I/O Redirection을 활용하여 아래와 같이 파일에 데이터를 저장하였다.
errorresult.txt의 첫 5줄을 입력값으로 head로 출력한 후, 이 출력한 값을 입력값으로 하여 redirect3.txt에 출력값을 저장했다. nano redirect3.txt를 통해 다음 결과를 확인할 수 있다.
출처: https://gracefulprograming.tistory.com/100, shoark7.github.io/programming/shell-programming/IO-Redirection-in-Shell
'개발자 일지 > Linux' 카테고리의 다른 글
[리눅스 기초]파일을 찾는 방법(location,find,whereis) (0) | 2021.05.04 |
---|---|
[리눅스 기초]프로세스 확인하기(ps, top) (0) | 2021.05.03 |
[리눅스 기초]리눅스 디렉토리 구조 (0) | 2021.03.18 |
[리눅스 기초]쉘 스크립트(Shell Script) 개념 및 사용법, 컴파일 언어와 인터프리터 언어의 차이점 (0) | 2021.03.14 |
[리눅스 기초]CLI 개념 및 사용 이유, 다중명령어(세미콜론,파이프라인 등) (0) | 2021.03.09 |
[리눅스 기초]다운로드 방법 - wget, git clone (2) | 2021.03.07 |
[리눅스 기초]패키지 매니저(Package Manager) (0) | 2021.03.07 |
[리눅스 기초]파일 편집(nano,vi) 이용하기 (0) | 2021.03.02 |