2023. 3. 10. 11:39ㆍ부트캠프/DevOps 과제
파이프라인
데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조를 가리킨다. 이렇게 연결된 데이터 처리 단계는 한 여러 단계가 서로 동시에, 또는 병렬적으로 수행될 수 있어 효율성의 향상을 꾀할 수 있다. 각 단계 사이의 입출력을 중계하기 위해 버퍼가 사용될 수 있다.
대표적인 파이프라인 구조는 다음과 같은 것이 있다.
이중에서 linux에 사용할 파이프 용어의 정의는 소프트웨어 파이프라인인 것 같습니다.
파이프는 프로세스1의 출력 스트림을 프로세스2의 입력 스트림으로 사용할 때 파이프 기호 | 를 사용하여 아래와 같은 형식으로 작성합니다.
$ process1 | process2
예를 들어 터미널에서 '/bin'으로 이동하여 'ls -l'을 작성하면 많은 파일이 나타납니다. 이 중에서 ssh라는 문자열을 포함한 것들만 확인 하려고 합니다.
다시 말해, ls -l 명령으로 표준 출력을 하고, 출력 된 내용을 ssh 이라는 인자를 전달 받는 grep 명령에 표준 입력으로 전달시키는 파이프를 만들어 보겠습니다.
$ ls -l | grep ssh
이와 같이 프로세스 간 입/출력을 연결 하고 싶으면 파이프 |를 이용합니다.
이처럼 입/출력을 연결하여 자료를 간편화 등 자주 사용되기 때문에 꼭 알아둬야 합니다.
리다이렉션(redirection)
컴퓨팅에서 표준 스트림을 사용자 지정 위치로 우회할 수 있는 다양한 유닉스 셸을 포함한 대부분의 명령어 인터프리터에 일반적인 명령이다. 방향 지정, 방향 변경으로도 부른다.
리다이렉션은 특정한 문자열들을 명령어 사이에 두어서 추가되는 것이 보통이다. 일반적으로, 이러한 문자열들의 문법은 다음과 같다.
명령어1 > 파일1
위의 줄은 명령어1을 실행하며 이로써 나오는 출력물을 파일1로 내보낸다. 기존에 파일1의 존재하는 경우 기존의 파일 내용은 지우고 새롭게 추가된다.
파일의 끝에 출력물을 추가하려면 >> 연산자를 이용한다:
명령어1 >> 파일1
다음을 이용하면
명령어1 < 파일1
명령어1을 실행하되, 파일1이 입력의 대상이 된다. (자판을 이용하는 것과는 반대로)
명령어1 < 들어오는파일 > 나가는파일
위의 줄은 두 개의 기능을 수행한다: 명령어1은 들어오는파일에서 내용을 불러들인 뒤 나가는파일에 기록한다.
예를 들어보자
$ ps aux > ps.txt
# 명령어 > 파일
ps aux 명령의 출력 결과를 ps.txt 파일에 저장합니다. 정확하게 말하자면, ps aux 의 출력 스트림을 ps.txt 이라는 파일로 전환하여 저장하는 것을 의미합니다. 따라서 아래 캡쳐와 같이 ps aux 의 명령의 결과는 콘솔이 아닌 ps.txt 파일에 기록됩니다.
반대의 경우도 가능합니다 예를 들어
$ head < ps.txt
# 명령어 < 파일
head 명령은 파일의 처음 부분을 설명한 라인(line)만큼 출력하는 명령입니다. 기본값으로 10줄이 세팅 되어 있습니다. 따라서 위의 명령을 실행하면 아래 캡쳐본과 같이 ps.txt 의 처음 10줄을 head 의 입력 스트림으로 전환하여 보내게 됩니다.
조금 더 응용하자면 다음과 같이 사용할 수도 있습니다.
$ head < ps.txt > sample.txt
# 명령어1 < 들어오는 파일 > 나가는 파일
이와 같은 기호를 정리하면 아래와 같습니다.
리다이렉션 기호 | 방향 | 의미 |
> | 표준 출력 | 명령의 결과를 파일로 저장(기존 파일에 덮어씀) |
>> | 표준 출력(append) | 명령의 결과를 기존 파일에 추가 |
< | 표준 입력 | 파일의 데이터를 명령에 입력 |
파이프와 리다이렉션은 같이 사용도 가능하다.
예를 들어 test폴더에 test1, test2, test3 총 세 개의 파일이 있다고 할 때 test폴더의 파일 리스트 중 test2 파일 이름을 test3 파일에 넣고 싶을 때 파이프와 리다이렉션을 사용할 수 있다.
/test$ ls | grep test2.txt > test3.txt
명령어 cat을 사용해 test3 파일에 test2.txt.가 들어있는 것을 확인 할 수 있었다.
출처
https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%EC%85%98
https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%ED%94%84_(%EC%9C%A0%EB%8B%89%EC%8A%A4)
05_터미널에서 nslookup 명령을 실행 했을 때 나오는 결과값에 대한 설명을 작성하세요. (0) | 2023.03.15 |
---|---|
05_public IP와 Private IP의 차이점을 설명하세요 (0) | 2023.03.15 |
04_표준스트림과 stdin, stdout, stderr이 무엇인가요? (0) | 2023.03.10 |
03_리눅스의 디렉토리 구조를 학습하고, 이를 정리하세요. (0) | 2023.03.09 |
03_CLI로 ‘test’ 폴더를 만들고, 그 안에 ‘sample.txt’를 생성하는 작업을 하기 위해서는 어떤 명령이 필요한지 적고, 설명하세요. (0) | 2023.03.09 |