리눅스에서 거의 모든 것이 파일 로 간주 될 수 있지만, 일반 파일 과 명명 된 파이프 의 주요 차이점은 명명 된 파이프는 파일 시스템에 내용이없는 파일의 특별한 인스턴스라는 것입니다.
인용은 다음과 같습니다 man fifo
.
FIFO 특수 파일 (명명 된 파이프)은 파일 시스템의 일부로 액세스된다는 점을 제외하면 파이프와 유사합니다. 읽기 또는 쓰기를 위해 여러 프로세스에서 열 수 있습니다. 프로세스가 FIFO를 통해 데이터를 교환 할 때 커널은 모든 데이터를 파일 시스템에 쓰지 않고 내부적으로 전달합니다. 따라서 FIFO 특수 파일에는 파일 시스템에 내용이 없습니다. 파일 시스템 항목은 프로세스가 파일 시스템의 이름을 사용하여 파이프에 액세스 할 수 있도록 단지 참조 점 역할을합니다.
커널은 최소한 하나의 프로세스에서 열린 각 FIFO 특수 파일에 대해 정확히 하나의 파이프 객체를 유지 관리합니다. FIFO는 데이터를 전달하기 전에 양쪽 끝 (읽기 및 쓰기)에서 열어야합니다. 일반적으로 다른 쪽 끝도 열릴 때까지 FIFO 블록을 엽니 다.
따라서 실제로 명명 된 파이프는 일부 프로세스가 읽고 쓸 때까지 아무것도하지 않습니다. 약간의 메타 정보를 제외하고 하드 디스크의 공간을 차지하지 않으며 CPU를 사용하지 않습니다.
다음을 수행하여 확인할 수 있습니다.
명명 된 파이프 만들기
$ mkfifo /tmp/testpipe
예를 들어 일부 디렉토리로 이동 /home/user/Documents
하여 명명 된 파이프를 사용하여 그 안에있는 모든 것을 압축하십시오.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
여기 gzip 프로세스의 PID가 표시됩니다. 이 예에서는 28584입니다.
이제이 PID가 무엇을하고 있는지 확인하십시오.
$ ps u -P 28584
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
c0rp 28584 0.0 0.0 29276 7800 pts/8 S 00:08 0:00 bash
자원 이 사용 되지 않음을 알 수 있습니다 . CPU 사용량 0 %, 메모리 사용량 0 %
파일 공간 사용에 대한 직감 확인
$ du -h /tmp/testpipe
0 testpipe
그리고 다시 0
, 아무것도. 필요한 경우 테스트 파이프를 다시 사용할 수 있습니다.
를 사용하여 gzip을 죽이는 것을 잊지 마십시오 kill -15 28584
. 그리고 명명 된 파이프를 사용하여 제거하십시오rm /tmp/testpipe
사용법 예
명명 된 파이프를 사용하여 거의 모든 것을 리디렉션 할 수 있습니다. 예를 들어이 한 줄 프록시를 볼 수 있습니다 .
또한 여기에 하나 더 명명 된 파이프 사용의 좋은 설명. TCP / IP 스택 대신 명명 된 파이프를 사용하여 통신하도록 한 서버에서 두 개의 프로세스를 구성 할 수 있습니다. 훨씬 빠르며 네트워크 리소스를로드하지 않습니다. 예를 들어, 웹 서버는 localhost
주소 를 사용 하거나 일부 포트를 수신하는 대신 명명 된 파이프를 사용하여 데이터베이스와 직접 통신 할 수 있습니다 .