Ngay cả khi bạn là người dùng dòng lệnh Linux ở mức trung bình, bạn hẳn phải biết đến các đường ống, một tính năng cơ bản của dòng lệnh cho phép các tiến trình giao tiếp. Sau đó, có một khái niệm về các đường ống được đặt tên (vâng, các đường ống có tên, để bạn có thể làm nhiều hơn với các đường ống). Lệnh mkfifo cho phép bạn tạo các đường ống được đặt tên như vậy.
Trong hướng dẫn này, chúng ta sẽ thảo luận về những điều cơ bản của mkfifo bằng một số ví dụ dễ hiểu. Nhưng trước khi làm điều đó, chúng ta nên đề cập rằng tất cả các ví dụ ở đây đều đã được thử nghiệm trên Ubuntu 22.04 LTS.
Và đây là cách trang hướng dẫn của công cụ giải thích về lệnh này:
Sau đây là một số ví dụ theo kiểu Hỏi & Đáp sẽ giúp bạn hiểu rõ hơn về cách mkfifo hoạt động.
Ví dụ:
Lệnh được đề cập ở trên bao gồm hai chương trình: ls và grep. Cả hai chương trình này đều được phân tách bằng đường ống (|). Vậy thì chức năng của đường ống ở đây là tạo ra một kênh giao tiếp giữa các chương trình này - khi lệnh đã đề cập ở trên được thực thi, đầu ra của ls được đưa vào làm đầu vào cho grep. Cuối cùng, đầu ra được hiển thị trên thiết bị đầu cuối chỉ bao gồm các mục có chuỗi '.txt' trong đó.
Vậy là chúng ta đã ôn lại nhanh về đường ống thông thường. Bây giờ đến khái niệm đường ống có tên. Như tên gọi của nó, đây là đường ống có tên. Bạn có thể tạo đường ống có tên bằng lệnh mkfifo. Ví dụ:
Vậy thì 'pipe2' giờ là một đường ống có tên. Bây giờ đến câu hỏi đường ống có tên hữu ích hơn như thế nào? Hãy xem xét trường hợp bạn có một quy trình đang chạy trong một thiết bị đầu cuối và tạo ra đầu ra, và điều bạn muốn là chuyển hướng đầu ra đó sang một thiết bị đầu cuối khác. Vì vậy, ở đây, một đường ống có tên có thể giúp ích rất nhiều.
Ví dụ, giả sử ls là quy trình đang chạy trong thiết bị đầu cuối đầu tiên và bạn muốn xem đầu ra của nó trong một thiết bị đầu cuối khác.. Vì vậy, đây là những gì bạn có thể làm:
và đây là những gì bạn có thể làm trong thiết bị đầu cuối thứ hai:
Ví dụ:
Ảnh chụp màn hình sau đây xác nhận các quyền tùy chỉnh đã được thiết lập:
Để biết thêm về mkfifo, bạn có thể sử dụng tùy chọn --help và --version.
Trong hướng dẫn này, chúng ta sẽ thảo luận về những điều cơ bản của mkfifo bằng một số ví dụ dễ hiểu. Nhưng trước khi làm điều đó, chúng ta nên đề cập rằng tất cả các ví dụ ở đây đều đã được thử nghiệm trên Ubuntu 22.04 LTS.
Lệnh mkfifo trên Linux
Về cơ bản, lệnh mkfifo cho phép bạn tạo FIFO (hay còn gọi là named pipe). Sau đây là cú pháp của lệnh:
Mã:
mkfifo [OPTION]... NAME...
Mã:
Tạo named pipe (FIFO) với các NAME đã cho.
Câu hỏi 1. Đường ống có tên chính xác là gì?
Để hiểu điều này, trước tiên bạn cần biết khái niệm về đường ống cơ bản. Bạn đã thấy các lệnh có chứa thanh dọc (|). Thanh này được gọi là đường ống. Chức năng của nó là tạo ra một kênh giao tiếp giữa hai quy trình (khi lệnh hoàn chỉnh được thực thi).Ví dụ:
Mã:
ls | grep .txt
Vậy là chúng ta đã ôn lại nhanh về đường ống thông thường. Bây giờ đến khái niệm đường ống có tên. Như tên gọi của nó, đây là đường ống có tên. Bạn có thể tạo đường ống có tên bằng lệnh mkfifo. Ví dụ:
Mã:
mkfifo pipe2
Ví dụ, giả sử ls là quy trình đang chạy trong thiết bị đầu cuối đầu tiên và bạn muốn xem đầu ra của nó trong một thiết bị đầu cuối khác.. Vì vậy, đây là những gì bạn có thể làm:
Mã:
ls > pipe2
Mã:
cat < pipe2
Câu hỏi 2. Làm thế nào để xác định đường ống có tên?
Đường ống có tên có thể được truy cập bình thường như các tệp. Vì vậy, điều đó có nghĩa là bạn có thể sử dụng lệnh ls để truy cập chúng. Nếu bạn thấy quyền truy cập cho một đường ống được đặt tên, bạn sẽ thấy chữ 'p' ở đầu. Điều này biểu thị tệp đang đề cập là một đường ống được đặt tên. Sau đây là một ví dụ:Câu hỏi 3. Làm thế nào để thiết lập quyền truy cập tùy chỉnh?
Như bạn có thể thấy trong phần Hỏi & Đáp trước, quyền truy cập mặc định cho các đường ống được đặt tên là 'rw', 'rw' và 'r' (tương ứng với người dùng, nhóm và những người khác). Tuy nhiên, nếu muốn, bạn cũng có thể thiết lập custompermissions, một việc bạn có thể làm bằng cách sử dụng tùy chọn -m.Ví dụ:
Mã:
mkfifo pipe3 -m700
Để biết thêm về mkfifo, bạn có thể sử dụng tùy chọn --help và --version.