본문 바로가기
리눅스 이야기

리눅스 파이프(|) 세미콜론(;) 리다이렉트(>) AND(&&) 차이점

by reallinux1 2023. 12. 14.

리눅스 파이프(|) 세미콜론(;) 리다이렉트(>) AND(&&) 차이점

리눅스 명령어를 두개이상 연속해서 실행할때 활용 가능한 ; | && > 다양한 연산자들의 차이점을 이해해보자

 

안녕하세요. 리얼리눅스 입니다.

Q: 리눅스 (linux) 이 2개 명령 차이가 뭔가요???

 

"|"는 파이프(pipe)라고 하고 명령어의 출력을 다른 명령어의 입력으로 전달하는 데 사용됩니다.이를 통해 여러 명령어를 결합하여 복잡한 작업을 수행할 수 있습니다.

파이프(|)의 작동 원리:
1. 왼쪽의 명령어 실행: 파이프 앞에 있는 명령어가 먼저 실행되고, 그 결과가 표준 출력(stdout)으로 나옵니다.

2. 표준 출력의 전달: 표준 출력은 파이프(|)를 통해 다음 명령어의 표준 입력(stdin)으로 전달됩니다.

3. 오른쪽의 명령어 실행: 파이프 뒤에 오는 명령어가 실행되고, 그 명령어는 표준 입력으로부터 데이터를 받아와 처리합니다.

$  ls | cat a.txt

 

하지만 아래와 같이 ";" 을 사용해서 2개의 명령어를 실행한다면
왼쪽부터 차례대로 2개의 명령어가 독립적으로 실행이 됩니다.

$ ls ; cat a.txt

 

(추가 답변 1)
만약에 질문자님 의도가 ls 의 출력 결과를 그저 표준출력(stdout) 으로 터미널에 출력하려는게 아니라 ls 의 출력결과를 a.txt 텍스트 파일안에 적고 싶은 의도이셨다면 아래와 같이 리다이렉트(">")를 활용해야합니다.
(리다리렉트(">")활용시 ls 의 출력은 표준출력(stdout)이 아닌 a.txt 파일안으로 출력이 됩니다.)

 

$ ls > a.txt

 

그리고 cat 명령어는 기본적으로 인자(argument) 로 주어지는 특정 파일의 내용을 읽어서 표준출력(stdout)으로 출력하기 때문에 ls | cat a.txt 와 같이 파이프(|)를 통해 ls 의 결과를 cat 의 표준입력(stdin)으로 넘겼다고 해도 a.txt 을 먼저 읽어 표준출력(stdout)에 출력하게됩니다.

(추가 답변 2)
만약에 ls 명령어 결과가 "에러없이" 수행이 완료된 후에 다음명령어를 실행시키고 싶다면 "&&" 을 사용하셔야 합니다. 만약 아래처럼 ls 결과가 오류(존재하지 않는 폴더예시: /nothing )가 난다면  && 뒤에 연결된 두번째 명령어(cat) 은 실행되지 않습니다.

$ ls /nothing && cat a.txt
ls: cannot access '/abc': No such file or directory

 

감사합니다
리얼리눅스 관련 수업으로는 리눅스 명령어와 쉘을 공부하는 "리눅스 기초 쉘 스크립트 마스터" 가 있습니다.

https://reallinux.co.kr/course/se_shell

 

Real Linux | 최신트렌드 리눅스 전문교육|임베디드|서버

직장인을 위한 리눅스교육

reallinux.co.kr

https://www.youtube.com/watch?v=oiziTgDDqmU&source_ve_path=Mjg2NjY&feature=emb_logo