CS/운영체제

[Linux]입출력, 표준 스트림

용감한 개복치 2022. 2. 11. 17:53

1. 표준 스트림

표준 스트림, 사실 리눅스에서 처음 배우는건 아니다. 프로그래밍 언어를 배우지 않고 바로 리눅스로 들어오는 경우는 잘 없으니까..?! c를 했다면 우린 이미 이걸 알고있다. 표준 입출력 이라는 이름으로 들어봤을 것이다. 그때 그 개념이랑 같다.

내가 그렸다! 출처 없다!

입력장치로부터 바이트 단위로 정보가 들어오면 프로그램이 처리해서 출력장치로 보내는 이 일련의 과정을 스트림이라고 표현할 뿐이다. 이게 프로그램 언어로 가면 표준 입출력이 되는거고, 유닉스 환경에서는 표준 스트림이다.

 

+ ) 이게 옛날에 어려웠던 이유는 각 디바이스 별로 설정이나 소통방식이 달랐던 것을 중간에서 조율해야하니 어려웠지만 그걸 os가 추상화 라는 개념을 도입해 디바이스를 파일로 관리하는 방식을 취해 쉬워졌다.

즉, 이것과 관련한 명령어들은 /dev에 있을 것이다.

궁금할땐 해보자구!

자세한건 os 항목의 다른 포스팅에 적어뒀으니 참고하자.

 

  • stdin : standard input. 유닉스 쉘에서 디폴트 설정은 키보드
  • stdout : standard output. 유닉스 쉘에서 디폴트는 콘솔
  • stderr : standard error. 에러메시지 출력

 

2. 리다이렉션 (Redirection)

유닉스를 딱 켜면 기본적으로 세 개의 표준 스트림인 위의 세 가지를 연결한다.

스트림은 흐르는 방향. 디폴트 값인 키보드 > 프로그램 > 콘솔을

 

명령어 > 파일1

ps aux 결과가 콘솔이 아닌 ps.txt 파일에 적힌걸 볼 수 있다.

 

명령어 >> 파일1

head 명령어는 파일의 처음부터 입력받는 수만큼 라인을 출력하는 명령어. 디폴트는 10.

ps.txt의 10줄을 입력 스트림으로 보냄.

 

명령어 < 파일1

명령어 < 들어오는 파일 > 나가는 파일

를 이용해서 방향을 바꾼다. 콘솔로 나갈 명령어를 파일로 가게 한다 하는 방식들로.

 

3. 파이프라인 

파이프라인은 한 단계의 출력이 다음 단계의 입력이 되는 것을 의미한다.
단순한 명령어는 하나의 명령어로 이루어진 프로그램이지만, 대부분의 프로그램은 다중 명령어로 구성되기 때문에 처리속도와 순서가 중요하다. 하나의 명령어가 처리될 때까지 다른 명령어는 처리되지 않는다면 병렬처리가 불가능해지며 프로그램의 속도가 느려질 것이다.

 

프로세스1 | 프로세스2


실제로 사용하고자 한다면 ls -l | grep ssh 처럼 리스트를 출력하되 이를 콘솔에 출력하는 것이 아닌 다음 프로세스인 grep의 입력으로 사용하는 것이다.

 

3-1) 예시, 그냥 외워서 쓰자..

$ cat messages.txt | grep "<info>" > [파일명.확장자]
// 파일 내용 중 <info> 문자가 들어간 행만 내가 지정한 파일에 출력

$ ps -ef | awk '{print $2, $3}' | grep 23197
//전체 목록 출력하고 2번째, 3번째 인덱스 항목만 뽑아봐, 그 항목이 23197 인것만 뽑아봐

 

3-2) 출력과 관련된 명령어 몇개 소개

wc 앞에 출력했던게 몇 줄 인가
cat
head/tail 앞에서 부터 (기본설정) 10줄, 뒤에서 부터 (기본설정)10줄
grep 특정 문자열을 기준으로 탐색
sed 명령행에서 파일을 인자로 받아 명령어 실행 후 결과를 출력, 치환이든 삭제든 특정 문자열에 대해 원하는 작업을 실행하면 그 결과를 표준 출력으로 보여주되, 원본 파일은 건들ㄴㄴ
cut
paste
sort
awk

https://reakwon.tistory.com/163

 

[리눅스] awk 명령어 사용법과 여러가지 실용적인 예제 모음

AWK(Aho Weinberger Kernighan) 리눅스의 어떤 다른 명령어보다 명령어 이름이 매우 직관적이지 않은 명령어입니다. 이 명령어를 개발한 사람들의 이름 약자(Aho  Weinberger Kernighan)이기 때문에 mkdir(make d..

reakwon.tistory.com

find

xargs

xargs 유틸리티를 사용하여 표준 입력에서 명령을 작성하고 실행가능. 일반적으로 pipe를 통해 다른 명령과 함께 사용.
xargs를 사용하면 mkdir 및 rm과 같은 명령줄 유틸리티에 표준 입력을 인수로 제공가능.

참고
https://jjeongil.tistory.com/1574

 

Linux : Xargs 사용 방법, 예제, 명령어

xargs 유틸리티를 사용하여 표준 입력에서 명령을 작성하고 실행할 수 있습니다. 일반적으로 pipe를 통해 다른 명령과 함께 사용된다. xargs를 사용하면 mkdir 및 rm과 같은 명령줄 유틸리티에 표준 입

jjeongil.tistory.com

 

'CS > 운영체제' 카테고리의 다른 글

[Linux]환경변수&bash 스크립트  (0) 2022.05.13
[Linux]nohup  (0) 2022.05.13
[Linux]패키지&프로세스  (0) 2022.02.10
[os]운영체제  (0) 2022.02.10
[Linux] 리눅스 디렉토리 구조  (1) 2022.02.09