Hầu hết mọi thứ trong Linux đều có thể được coi là một tệp , nhưng sự khác biệt chính giữa tệp thông thường và ống có tên là ống có tên là một phiên bản đặc biệt của tệp không có nội dung trên hệ thống tệp.
Đây là trích dẫn từ man fifo
:
Một tệp đặc biệt của FIFO (một ống có tên) tương tự như một ống, ngoại trừ việc nó được truy cập như một phần của hệ thống tệp. Nó có thể được mở bằng nhiều quá trình để đọc hoặc viết. Khi các quá trình đang trao đổi dữ liệu thông qua FIFO, kernel sẽ chuyển tất cả dữ liệu bên trong mà không ghi nó vào hệ thống tập tin. Do đó, tệp đặc biệt FIFO không có nội dung trên hệ thống tệp; mục hệ thống tập tin chỉ đóng vai trò là điểm tham chiếu để các quy trình có thể truy cập vào đường ống bằng cách sử dụng tên trong hệ thống tập tin.
Hạt nhân duy trì chính xác một đối tượng ống cho mỗi tệp đặc biệt FIFO được mở bằng ít nhất một quy trình. FIFO phải được mở ở cả hai đầu (đọc và viết) trước khi dữ liệu có thể được thông qua. Thông thường, mở các khối FIFO cho đến khi đầu kia cũng được mở.
Vì vậy, thực sự một ống có tên không làm gì cho đến khi một số quá trình đọc và ghi vào nó. Nó không chiếm bất kỳ dung lượng nào trên đĩa cứng (ngoại trừ một chút thông tin meta), nó không sử dụng CPU.
Bạn có thể kiểm tra nó bằng cách làm điều này:
Tạo một đường ống có tên
$ mkfifo /tmp/testpipe
Đi đến một số thư mục, ví dụ /home/user/Documents
, và gzip mọi thứ bên trong nó, sử dụng ống có tên.
$ cd /home/user/Documents
$ tar cvf - . | gzip > /tmp/testpipe &
[1] 28584
Ở đây bạn sẽ thấy PID của quá trình gzip. Trong ví dụ của chúng tôi, nó là 28584.
Bây giờ hãy kiểm tra xem PID này đang làm gì
$ 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
Bạn sẽ thấy rằng nó đang sử dụng không có tài nguyên . Sử dụng CPU 0%, sử dụng bộ nhớ 0%.
Xác minh linh cảm về việc sử dụng không gian tệp
$ du -h /tmp/testpipe
0 testpipe
Và một lần nữa 0
, không có gì. Testpipe có thể được sử dụng lại nếu cần.
Đừng quên giết gzip, sử dụng kill -15 28584
. Và loại bỏ đường ống được đặt tên của chúng tôi bằng cách sử dụngrm /tmp/testpipe
Ví dụ sử dụng
Bạn có thể chuyển hướng hầu hết mọi thứ bằng cách sử dụng ống có tên. Ví dụ, bạn có thể thấy proxy một dòng này .
Ngoài ra đây là một lời giải thích tốt hơn về việc sử dụng đường ống được đặt tên. Bạn có thể định cấu hình hai quy trình trên một máy chủ để liên lạc bằng cách sử dụng đường ống có tên thay vì ngăn xếp TCP / IP. Nó nhanh hơn nhiều và không tải tài nguyên mạng. Ví dụ: Máy chủ Web của bạn có thể giao tiếp với cơ sở dữ liệu trực tiếp bằng cách sử dụng một đường ống có tên, thay vì sử dụng localhost
địa chỉ hoặc nghe một số cổng.