#5 리다이렉션과 파이프
리다이렉션과 파이브를 배우기전에 파일 디스크립터 ( File Descriptor , fd )에 대해 알아두어야 합니다.
※ 파일 디스크립터 ( File Descriptor , fd ) ※
- 명령어를 사용한다는 것은 명령어 파일을 실행하여
커널에게 처리해야 할 작업을 요청 합니다. 즉 프로세스 ( Process )를 생성합니다.
- 리눅스에서 프로세스가 만들어지면 해당 프로세스는 파일 디스크립터를 생성합니다.
- 파일디스크립터는 "파일 기술자"라고도 부르며 , 데이터의 출입구 역할을 합니다.
( 커널이 프로세스를 관리하는 방법 )
- 프로세스의 출력을 다른 프로세스에 입력하거나 , 파일 또는 터미널등으로 출력하는데 사용합니다.
표준 입력 0 stdin
표준 출력 1 stdout
표준 에러 2 stderr
* 리다이렉션 ( redirection )
- 표준 입력과 표준 출력의 방향을 재 지정하는 방법입니다.
1) 출력 리다이렉션
#[명령어] 1> [파일]
ex) #echo "Linux" 1> file
ex) #echo "Linux" > file
기존에 파일이 없다면 생성을 해주지만 , 기존의 존재하는 파일을 지정하면
출력의 결과가 파일안으로 저장되어 덮어쓰기 됩니다.
#set -o noclobber 덮어쓰기를 방지하는 기능을 활성화시키는 명령어
#set +o noclobber 덮어쓰기를 방지하는 기능을 비활성화시키는 명령어
2. 추가 리다이렉션
#[명령어] >> [파일]
- 기존 파일 내용 하단에 출력의 결과가 추가되는 형태입니다.
3. 입력 리다이렉션
#[명령어] 0<[파일]
#ex) cat 0< /etc/passwd
#ex) cat < /etc/passwd
#ex) cat /etc/passwd
※ 원활한 이해를 돕기위한 응용문제 1 ※
(1) #sort < a.txt > b.txt
해당 명령어의 결과는?
=> a.txt를 sort명령어를 통해서 정렬한 결과가 b.txt에 저장된다.
(2) #cat < a.txt > b.txt
해당 명령어의 결과는?
=> a.txt를 cat명령어를 통해서 출력되는 결과가 b.txt에 저장된다.
4. 오류 다이렉션
#[명령어] 2> [파일]
의도적으로 에러메세지를 화면에 출력하고 싶지 않을 때 사용합니다.
+@ /dev/null ( 아무값도 가지고 있지 않도록 만들어진 파일 )
해당 파일로 입력된 데이터는 모두 사라지게 됩니다.
null == 아무값도 없다.
즉 /dev/null 파일로 모든 오류메세지를 보내면 오류메시지를 스킵할 수 있습니다.
5. 파이프 ( Pipe )
- 프로세스와 프로세스를 연결시키는 방식
# [명령어1] | [명령어2] -> 명령어1의 출력을 다음 명령어인 명령어2의 입력으로 전달합니다.
# [명령어1] | [명령어2] | ... [명령어 n]
※ 원활한 이해를 돕기위한 응용문제 2 ※
퀴즈 - (1) #cat /etc/services | grep udp | wc -l
-> /etc/services파일에 udp라는 문자열이 들어간 라인의 수를 확인
(2) #cat /etc/services | grep tcp | head -1
-> /etc/services파일에 tcp라는 문자열이 들어간 가장 첫번째 줄을 확인
(3) #cat /etc/services | grep tcp | tail -1
-> /etc/services파일에 tcp라는 문자열이 들어간 가장 마지막 줄을 확인
(4) #cat /etc/passwd | sort > /root/passwd.txt
-> /etc/passwd파일의 내용을 출력하고 출력의 결과를 알파벳 기준으로
정렬한 내용을 /root/passwd.txt파일로 저장
※ 다중명령사용법 ※
1. CMD1 ; CMD2
- 첫번째 명령어 부터 순차적으로 실행합니다.
- 첫번째 명령어가 실패하여도 반드시 실행합니다.
[CMD1] ; [ERR1] ; [CMD2] -> CMD1,2 실행 , 에러메세지출력
[ERR1] ; [CMD1] ; [CMD2] -> CMD1,2 실행 , 에러메세지출력
2. CMD1 && CMD2
- 첫번째 명령어가 에러가 아닐시에 두번째 명령을 실행합니다.
[CMD1] && [CMD2] && [CMD3] -> CMD 1,2,3을 정상 출력합니다.
[ERR1] && [CMD2] && [CMD3] -> 에러 메세지
[CMD1] && [ERR2] && [CMD3] -> CMD1 출력 , 에러메세지 출력합니다.
[CMD1] && [CMD2] && [ERR3] -> CMD1,2출력 , 에러메세지 출력합니다.
즉, 에러가 발생하는 시점에서 명령 실행 종료
3. CMD1 || CMD2
- 첫번째 명령어가 정상으로 실행될 경우 종료합니다.
[CMD1] || [CMD2] || [CMD3] -> CMD1
[CMD1] || [ERR2] || [CMD3] -> CMD1
[CMD1] || [CMD2] || [ERR3] -> CMD1
[ERR1] || [ERR2] || [CMD3] -> 에러메세지출력, CMD3
'예전 포스팅 (~2018)' 카테고리의 다른 글
vSphere ESXi / vCenter 란 (0) | 2021.10.01 |
---|---|
[Linux] Hardlink & symbolic link (0) | 2021.10.01 |
[Linux] user permission (0) | 2021.10.01 |
ADMT를 이용하여 IDC -> AWS AD Migration 구성 (0) | 2021.09.23 |
Private Cloud - Openstack (0) | 2021.09.23 |
댓글