Linux에서 파이프 문자 "|"의 기능은 여러 명령을 연결하는 것입니다. 명령 형식은 "명령 1 | 명령 2 | ...". 이 명령 후자의 명령은 실행되기 전에 표준 입력 스트림 명령을 수신할 수 있어야 합니다. 파이프 문자는 주로 다중 명령 처리에 사용되며, 이전 명령의 인쇄된 결과는 후속 명령의 입력으로 사용됩니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
파이프라인은 Linux에서 매우 중요한 통신 방법으로 한 프로그램의 출력을 다른 프로그램의 입력에 직접 연결합니다. 파이프는 이름이 없는 파이프를 참조하는 경우가 많습니다. 이름이 없는 파이프는 관련된 프로세스 간에만 사용할 수 있습니다. 이것이 이름이 지정된 파이프와 가장 큰 차이점입니다.
유명한 파이프는 Named Pipe 또는 FIFO(선입 선출)라고 하며, mkfifo() 함수를 사용하여 생성할 수 있습니다.
|
파이프 문자는 여러 명령어를 연결하는 데 사용됩니다. 이전 명령어의 출력 스트림은 후속 명령어의 작업 개체로 사용됩니다. 명령 형식은 " "Command 1 | Command 2 | ..."이며, 이 명령 뒤의 명령은 실행되기 전에 표준 입력 스트림 명령을 수신할 수 있어야 합니다. |
管道符的作用是连接多条指令,前一条指令的输出流会作为后一条指令的操作对象,其命令格式为“指令1 | 指令2 | …”,该命令的后一条指令,必须能够接收标准输入流命令才能执行。
管道命令的操作符是:”|
|
"입니다. 이전 명령에서 보낸 올바른 출력 정보만 처리할 수 있으며 오류 정보에 대한 직접적인 처리 기능은 없습니다. 그런 다음 작업 개체로 다음 명령어에 전달됩니다. 구문:
指令1 | 指令2 | …
예: hello.sh 파일을 정렬하여 " 더 나은 "라인
명령은 다음과 같습니다. cat hello.sh | sort | sort | uniq | grep 'better'love text
[root@linuxforliuhj test]# cat hello.sh hello this is linux be better be better i am lhj hello this is linux i am lhj i am lhj be better i am lhj have a nice day have a nice day hello this is linux hello this is linux have a nice day zzzzzzzzzzzzzz dddddddd gggggggggggggggggggg[root@linuxforliuhj test]#
이전 cat 명령으로 출력된 결과를 파이프라인을 통해 sort 명령에 던져서 sort 명령이 이전 cat 명령으로 텍스트 출력을 정렬하도록 합니다.
[root@linuxforliuhj test]# cat hello.sh | sortbe better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz[root@linuxforliuhj test]#
[3] 세 번째 프로세스 - 중복 제거
에서 언급한 대로 uniq를 소개한 이전 글에서는 sort를 uniq와 조합해서 사용하는데, 효과적으로 중복을 제거하기 위해 정렬 후 출력된 텍스트를 uniq로 보내 파이프라인을 통해 처리하므로 uniq가 정렬된 텍스트를 처리하므로 효과적으로 중복을 제거할 수 있습니다
[root@linuxforliuhj test]# cat hello.sh | sort | uniqbe better dddddddd gggggggggggggggggggg have a nice day hello this is linux i am lhj zzzzzzzzzzzzzz[root@linuxforliuhj test]#
[4] 네 번째 과정 - 필터링
필터링의 마지막 단계는 이전 명령인 uniq 명령으로 처리한 후 텍스트 출력을 필터링하는 것입니다.
[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better'be better[root@linuxforliuhj test]#
위의 cat, sort, uniq, grep 및 기타 명령은 모두 파이프 문자를 지원합니다. 왜냐하면 이러한 명령은 표준 입력에서 처리할 텍스트를 읽을 수 있기 때문입니다(즉, , 표준 입력에서 매개변수 읽기) rm과 같은 일부 명령의 경우 kill과 같은 명령은 표준 입력에서 매개변수 읽기를 지원하지 않지만 명령줄(예: 삭제할 파일 또는 디렉터리)에서만 매개변수 읽기를 지원합니다. rm 명령 뒤에 지정해야 하고, kill 명령 뒤에 죽일 프로세스 번호를 지정해야 하는 등)
그렇다면 파이프라인을 지원하는 명령은 무엇이고 파이프라인을 지원하지 않는 명령은 무엇일까요?
일반적으로 sort, uniq, grep, awk, sed 등과 같이 텍스트를 처리하는 명령은 모두 파이프를 지원하고, rm 및 ls와 같이 텍스트를 처리하지 않는 명령은 파이프를 지원하지 않습니다.있습니다. sort 이후에 매개변수가 없으면 파이프 문자에 의해 던져진 이전 명령의 출력이 처리됩니다(즉, 이전 명령의 표준 출력이 이 명령의 표준 입력으로 사용됩니다)[root@linuxforliuhj test]# cat hello.sh | sortbe better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz[root@linuxforliuhj test]#로그인 후 복사로그인 후 복사
표준 입력 매개변수와 명령줄 매개변수 중 무엇이 우선합니까?[root@linuxforliuhj test]# lsbeifen.txt hello.sh mk read.ln read.sh read.txt sub.sh[root@linuxforliuhj test]# ls | grep read.shread.sh[root@linuxforliuhj test]# ls | grep read.sh | rmrm: missing operand Try 'rm --help' for more information.[root@linuxforliuhj test]#로그인 후 복사파일이 rm 후에 삭제가 지정되지 않으면 오류가 보고됩니다. 매개변수가 손실되므로 rm과 같은 명령은 표준 입력에서 매개변수 읽기를 지원하지 않습니다. 이는 명령줄에서 매개변수 지정, 즉 삭제할 파일 지정만 지원합니다.
[root@linuxforliuhj test]# cat a.txt aaaa dddd cccc bbbb[root@linuxforliuhj test]# cat b.txt 1111333344442222[root@linuxforliuhj test]#
[root@linuxforliuhj test]# cat a.txt | sortaaaa bbbb cccc dddd[root@linuxforliuhj test]#
실행 명령: cat a.txt | sort b.txt
[root@linuxforliuhj test]# cat a.txt | sort b.txt 1111222233334444[root@linuxforliuhj test]#
sort의 명령줄 매개변수(여기서는 b.txt)가 비어 있지 않으면 sort가 표준 입력의 매개변수를 읽지 않는다는 것을 알 수 있습니다. , 그리고 명령줄 매개변수를 읽을 때
명령을 실행합니다: cat a.txt | sort b.txt -
[root@linuxforliuhj test]# cat a.txt | sort b.txt -1111222233334444aaaa bbbb cccc dddd[root@linuxforliuhj test]#
" - "표준 입력, 즉 cat a.txt 명령의 출력을 나타냅니다. b.txt 파일과 표준 입력을 함께 사용하는 것과 같습니다. 정렬은 a.txt b.txt를 정렬하는 것과 같습니다
[root@linuxforliuhj test]# sort a.txt b.txt1111222233334444aaaa bbbb cccc dddd[root@linuxforliuhj test]#
思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!
相关推荐:《Linux视频教程》
위 내용은 리눅스 파이프 캐릭터는 무엇을 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!