> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > 리눅스 파이프 캐릭터는 무엇을 합니까?

리눅스 파이프 캐릭터는 무엇을 합니까?

青灯夜游
풀어 주다: 2023-04-14 11:36:57
원래의
4464명이 탐색했습니다.

Linux에서 파이프 문자 "|"의 기능은 여러 명령을 연결하는 것입니다. 명령 형식은 "명령 1 | 명령 2 | ...". 이 명령 후자의 명령은 실행되기 전에 표준 입력 스트림 명령을 수신할 수 있어야 합니다. 파이프 문자는 주로 다중 명령 처리에 사용되며, 이전 명령의 인쇄된 결과는 후속 명령의 입력으로 사용됩니다.

리눅스 파이프 캐릭터는 무엇을 합니까?

이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.

파이프라인은 Linux에서 매우 중요한 통신 방법으로 한 프로그램의 출력을 다른 프로그램의 입력에 직접 연결합니다. 파이프는 이름이 없는 파이프를 참조하는 경우가 많습니다. 이름이 없는 파이프는 관련된 프로세스 간에만 사용할 수 있습니다. 이것이 이름이 지정된 파이프와 가장 큰 차이점입니다.

유명한 파이프는 Named Pipe 또는 FIFO(선입 선출)라고 하며, mkfifo() 함수를 사용하여 생성할 수 있습니다.

Linux의 |파이프 문자

| 파이프 문자는 여러 명령어를 연결하는 데 사용됩니다. 이전 명령어의 출력 스트림은 후속 명령어의 작업 개체로 사용됩니다. 명령 형식은 " "Command 1 | Command 2 | ..."이며, 이 명령 뒤의 명령은 실행되기 전에 표준 입력 스트림 명령을 수신할 수 있어야 합니다. | 管道符的作用是连接多条指令,前一条指令的输出流会作为后一条指令的操作对象,其命令格式为“指令1 | 指令2 | …”,该命令的后一条指令,必须能够接收标准输入流命令才能执行。

管道命令的操作符是:”|

파이프라인 명령의 연산자는 "|"입니다. 이전 명령에서 보낸 올바른 출력 정보만 처리할 수 있으며 오류 정보에 대한 직접적인 처리 기능은 없습니다. 그런 다음 작업 개체로 다음 명령어에 전달됩니다.

구문: ​​

指令1 | 指令2 | …
로그인 후 복사

파이프 문자는 주로 다중 명령 처리에 사용됩니다. 이전 명령의 인쇄 결과는 후속 명령의 입력으로 사용됩니다. 쉽게 말하면 공장 조립 라인과 같습니다. 하나의 공정이 완료되면 계속해서 다음 공정으로 보내집니다...

예: hello.sh 파일을 정렬하여 " 더 나은 "라인

명령은 다음과 같습니다. cat hello.sh | sort | sort | uniq | grep 'better'love text

    sort
  • remove duplicates

  • 【1】 1번 프로세스 - 텍스트 보기
먼저 cat 명령을 사용하여 텍스트를 보고, 화면에 인쇄되는 내용은 cat 명령의 출력 결과입니다

[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]#
로그인 후 복사
리눅스 파이프 캐릭터는 무엇을 합니까?[2] 두 번째 프로세스 - 정렬

이전 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]#
로그인 후 복사

여기서 요점이 나옵니다!

여기에 있습니다. point!

여기에 요점이 있습니다!

위의 cat, sort, uniq, grep 및 기타 명령은 모두 파이프 문자를 지원합니다. 왜냐하면 이러한 명령은 표준 입력에서 처리할 텍스트를 읽을 수 있기 때문입니다(즉, , 표준 입력에서 매개변수 읽기) rm과 같은 일부 명령의 경우 kill과 같은 명령은 표준 입력에서 매개변수 읽기를 지원하지 않지만 명령줄(예: 삭제할 파일 또는 디렉터리)에서만 매개변수 읽기를 지원합니다. rm 명령 뒤에 지정해야 하고, kill 명령 뒤에 죽일 프로세스 번호를 지정해야 하는 등)

그렇다면 파이프라인을 지원하는 명령은 무엇이고 파이프라인을 지원하지 않는 명령은 무엇일까요?
일반적으로 sort, uniq, grep, awk, sed 등과 같이 텍스트를 처리하는 명령은 모두 파이프를 지원하고, rm 및 ls와 같이 텍스트를 처리하지 않는 명령은 파이프를 지원하지 않습니다.

[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]#
로그인 후 복사
로그인 후 복사
있습니다. sort 이후에 매개변수가 없으면 파이프 문자에 의해 던져진 이전 명령의 출력이 처리됩니다(즉, 이전 명령의 표준 출력이 이 명령의 표준 입력으로 사용됩니다)
[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]#
로그인 후 복사
명령을 실행합니다: cat a.txt | sort
[root@linuxforliuhj test]# cat a.txt | sortaaaa
bbbb
cccc
dddd[root@linuxforliuhj test]#
로그인 후 복사
sort의 명령줄 매개변수가 비어 있으면 이전 명령의 출력이 이 명령의 입력으로 사용됩니다. 기본적으로

실행 명령: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿