리눅스 파이프(|) 세미콜론(;) 리다이렉트(>) 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
감사합니다
리얼리눅스 관련 수업으로는 리눅스 명령어와 쉘을 공부하는 "리눅스 기초 쉘 스크립트 마스터" 가 있습니다.