[Centos 7] Standard I/O Redirection
2022. 11. 16. 13:41ㆍ리눅스(Linux)
표준 입력과 출력
$ 표준 입출력 기능은 입력/출력을 다루는 기본적인 방법을 제공
- 기본 입출력 스트린(I/O stream)에는 표준 입력, 표준 출력, 표준 에러 가 있다
- 표준 입력 ( 0 ) ---> 키보드
- 표준 출력 ( 1 ) ---> 모니터
- 포준 에러 ( 2 ) ---> 모니터
$ 표준 입력 사용
- 일반적으로 키보드를 주로 사용하며, 파일을 직접 열수 있는 명령은 표준입력 스트림을 지정하지 않아도되지만 파일을 직접 열수 없는 명령어 에서는 표준 입력 스트림을 유용하게 사용할 수 있다
# cat test_file
# mail user1 < send.txt
- 일반적으로 키보드를 주로 사용하며, 파일을 직접 열수 있는 명령은
표준입력 스트림을 지정하지 않아도되지만 파일을 직접 열수 없는 명령어
에서는 표준 입력 스트림을 유용하게 사용할 수 있다
# cat << c > test_file
- 지정된 문자열 "C" 가 입력되면 입력 중지
$ 표준 출력 사용
# cat
# cat test_file
# cat < test_file
- 키보드나 파일로 부터 입력 받은 값을 표준 출력 장치(모니터)로 출력
# cat > output
# cat test_file > output1
# cat < test_file > output2
- 리다이렉션 기호를 사용하면 표준 출력 장치가 아닌 파일로 출력
# cat >> output
# cat test_file >> output1
# cat < test_file >> output2
- 더블 리다이렉션 기호를 사용하면 표준 출력 되어질 파일에 내용 추가
Redirection 사용예제
$ 명령어 예제
# find / -name “*.c” > foundit 2> /dev/null
- 루트 디렉터리에서 .c 로 끝나는 파일 이름들을 검색하여, 찾아진 이름들을
foundit 파일로 출력하며, find 명령어의 에러는 /dev/null 파일로 보내진다
# find / -name “*.c” > foundit 2>&1
- 루트 디렉터리에서 .c 로 끝나는 파일 이름들을 검색하여 foundit 파일로
출력하며 발생하는 에러 메시지는 표준출력 (파일식별자 1)과 같은 곳(foundit)으로 보낸다
# ls /etc/passwd /etc/password 2>&1 > result.txt
- Command 수행 결과 에러메시지를 표준출력(화면)으로 보내고 나머지
수행 결과를 result.txt 파일로 출력
# ls /etc/passwd /etc/password > result.txt 2>&1
- 순서를 바꾸면 동작하지 않는다, 에러메시지 및 수행 결과 모두
result.txt 파일로 출력됨
$ 파이프(pipe)
- 한 프로그램의 출력을 중간 파일 없이 다른 파일의 입력으로 바로 보내는 유닉스 매커니즘
- 파이프는 파이프( | ) 기호 왼쪽 명령어의 출력을 오른쪽 명령어의 입력으로 보낸다
- 파이프라인은 하나 이상의 파이프로 구성된다
$ 명령어 예제
# cat /etc/profile | more
- /etc/profile의 내용을 한페이지 단위로 출력
# cat /etc/passwd | sort -r | more
- /etc/passwd 파일의 내용을 역으로 정렬하면서 한 페이지 단위로 출력
$ Pipe 와 Redirection 사용예제
# ls /etc/rc5.d | sort -r | grep S > result.txt
- 파일 목록을 역으로 정렬하며 목록 중“S”를 포함하는 라인을 추출하여
그 결과를 result.txt에 출력
# ls /etc/rc5.d | sort -r > result.txt | grep S
- 출력이 result.txt 로 향해 있기 때문에 grep 명령어의 입력으로 전달되지 않는다(X)
# who | wc -l
3
# du -ch | sort -n | sed -n '$p'
4.8M 합계
- 시스템에 로그인한 사용자수 확인
# ls /etc/rc5.d | sort -r | tee result.txt | grep S
- Tee 명령어는 표준 입력으로부터 읽은 결과를 표준 출력 및 파일에 쓰기를
하므로 grep 까지 결과값이 도달한다
$ 이름있는 파이프(FIFO : First In First Out)
- 서로 연관되지 않은 두 프로세스 사이에서 데이터를 주고받을 수 있는것이 이름있는 파이프라고 한다
- 명령행에서 파이프 기호( | )를 사용할 때는 파이프를 통해서 데이터를 주고받는 두 프로세스가 같은 쉘에서 시작된 것이어야 한다
# mkfifo /down/fifo
# cat < /down/fifo
2009. 05. 22. (금) 22:21:45 KST
2009. 05. 22. (금) 22:21:48 KST
2009. 05. 22. (금) 22:21:51 KST
2009. 05. 22. (금) 22:21:54 KST
2009. 05. 22. (금) 22:21:57 KST
2009. 05. 22. (금) 22:22:00 KST
- Process 1
# cat > /down/fifo.test
while sleep 3
do date
done
Ctrl +d
# . /down/fifo.test > /down/fifo
- Process 2
# find / -user root -perm -4000 -exec ls -l {} \; > ./setuid 2> /dev/null
- 허가되지 않은 특수권한 실행파일이 있는지 검사해서 당장 지워야한다
-user root -perm -4000 → 특수권한 4000 setuid 의미
2> → 에러메세지가 뜨면 오른쪽으로 보내라
/dev/null → 휴지통
> ./setuid 2> /dev/null → setuid를 생성하고 만약 오류 메세지가 뜨는 부분은 휴지통으로 보내라
'리눅스(Linux)' 카테고리의 다른 글
[Centos 7] String Process(문자열 프로세스) - Grep, Egrep, Fgrep, Awk (0) | 2022.11.16 |
---|---|
[Centos 7] Regular Expression(정규 표현식) (0) | 2022.11.16 |
[Centos 7] Shell & 변수 (0) | 2022.11.15 |
[Centos 7] Vi Editor (0) | 2022.11.15 |
[Centos 7] Browsing the Filesystem & 주요 디렉터리 계층 구조 (0) | 2022.11.15 |