5 ví dụ về lệnh mknod trên Centos / Ubuntu / Debian / Fedora

Cú pháp lệnh mknod:

Cú pháp của lệnh mknod có chút khác biệt so với các lệnh Linux khác. Sự khác biệt chính là chúng ta cần chỉ định các số major và minor khi tạo tệp thiết bị ký tự và tệp thiết bị khối: 

$ mknod [OPTIONS]   [MAJOR] [MINOR] ...

Trong cú pháp trên, dấu ngoặc vuông ([]) đại diện cho các đối số tùy chọn trong khi dấu ngoặc nhọn (<>) đại diện cho các đối số bắt buộc.

Trong Linux, số major được sử dụng để chỉ định trình điều khiển thiết bị cần sử dụng. Số này được gán khi đăng ký một trình điều khiển thiết bị. Tương tự, số minor được sử dụng để chỉ định thiết bị thực tế. Chúng ta có thể tìm thấy các số major và minor được dành riêng trong tài liệu của nhân Linux.

Tạo Pipe không tên trong Linux

Trong Linux, chúng ta sử dụng ống để cho phép giao tiếp giữa các tiến trình. Trong Shell, ống được đại diện bằng dấu thẳng đứng (|). Nó đọc đầu ra của quá trình trước và gửi nó làm đầu vào cho quá trình tiếp theo.

Hãy hiểu điều này với một ví dụ đơn giản: 

$ echo "tecmint.com" | wc -c

Trong ví dụ này, chúng tôi sử dụng ống để đọc đầu ra của lệnh echo và gửi nó làm đầu vào cho lệnh wc để xử lý tiếp.

Ở đây, chúng tôi đã sử dụng dấu thẳng đứng (|) để tạo một ống. Tuy nhiên, điều này tạo ra một ống không tên và phạm vi của nó chỉ giới hạn trong lệnh hiện tại. Trong ví dụ tiếp theo, chúng ta sẽ xem cách tạo một ống có tên.

Tạo Pipe có tên trong Linux

Chúng ta có thể sử dụng lệnh mknod để tạo một ống có tên. Ống có tên cư trú trên hệ thống tệp như bất kỳ tệp thông thường nào khác. Tuy nhiên, mục đích chính của nó là cho phép giao tiếp giữa các tiến trình không liên quan nhau. 

Đầu tiên, hãy chỉ định loại thiết bị là p để tạo một ống có tên: 

$ mknod /tmp/named-pipe p
$ ls -l /tmp/named-pipe 

Bây giờ, hãy thử đọc tệp: 

$ cat /tmp/named-pipe  

Ở đây, chúng ta có thể thấy rằng lệnh cat đang chờ vô hạn: 

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Đọc tệp đường pipe được đặt tên

Tiếp theo, hãy mở một cửa sổ dòng lệnh khác và ghi dữ liệu vào tệp /tmp/named-pipe: 

$ echo "tecmint.com" > /tmp/named-pipe

Cuối cùng, quay trở lại cửa sổ dòng lệnh đầu tiên để xem kết quả: 

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Xem tệp pipe được đặt tên

Ở đây, chúng ta có thể thấy rằng lệnh echo và cat có thể giao tiếp với nhau bằng cách sử dụng ống có tên.

Tạo tệp thiết bị ký tự trong Linux

Tương tự, chúng ta có thể sử dụng loại thiết bị là c để tạo tệp thiết bị ký tự. Tuy nhiên, chúng ta phải sử dụng các số major và minor khi tạo tệp thiết bị ký tự. Hãy sử dụng lệnh ls để tìm số major và minor của thiết bị /dev/full: 

$ ls -l /dev/full

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Tìm tệp major và minor

Trong đầu ra trên, cặp số được phân tách bằng dấu phẩy, ví dụ 1, 7 đại diện cho số major và minor tương ứng. Trong Linux, thiết bị /dev/full luôn trả về lỗi "No space left on the device" (Không còn không gian trên thiết bị). Để hiểu điều này, hãy ghi một số dữ liệu vào thiết bị này:

$ echo "tecmint.com" > /dev/full

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Ghi dữ liệu vào tệp thiết bị

Bây giờ, hãy sử dụng lệnh mknod để tạo một thiết bị mới hoạt động giống như thiết bị /dev/full: 

$ sudo mknod /tmp/full-device c 1 7

Tiếp theo, hãy thay đổi quyền tệp: 

$ sudo chmod 666 /tmp/full-device 
$ ls -l /tmp/full-device

Cuối cùng, hãy ghi một số dữ liệu vào thiết bị mới tạo: 

$ echo "tecmint" > /tmp/full-device

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Tạo tập tin thiết bị mới

Quan trọng lưu ý rằng, tệp thiết bị ký tự mới tạo ra cư xử giống như thiết bị /dev/full nhờ cùng số major và minor.

Tạo tệp thiết bị khối trong Linux

Ngoài ra, chúng ta có thể chỉ định loại thiết bị là b để tạo tệp thiết bị khối. Để tạo một tệp thiết bị khối, chúng ta phải sử dụng các số major và minor.

Trong Linux, /dev/sr0 đại diện cho thiết bị CD/DVD ROM. Bây giờ, hãy tạo một thiết bị khối mới hoạt động giống như /dev/sr Trước tiên, hãy tìm các số major và minor của /dev/sr0: 

$ ls -l /dev/sr0

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Kiểm tra tệp thiết bị số major và minor

Trong đầu ra trên, chúng ta có thể thấy số major và minor lần lượt là 11 và Bây giờ, hãy tạo một thiết bị khối mới với các số major và minor giống như trên: 

$ sudo mknod /tmp/dvd-rom b 11 0
$ ls -l /tmp/dvd-rom 

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Tạo thiết bị khối mới

Tiếp theo, hãy gắn kết hình ảnh ISO từ ổ CD/DVD ROM vào thư mục /mnt và xác minh rằng thao tác gắn kết thành công: 

$ sudo mount /tmp/dvd-rom /mnt/
$ ls -1 /mnt/

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Gắn thiết bị khối mới

Trong ví dụ này, chúng ta có thể thấy rằng thiết bị khối /tmp/dvd-rom có thể truy cập hình ảnh ISO từ ổ CD/DVD ROM.

Tạo Tệp thiết bị với quyền truy cập

Đôi khi, chúng ta cần thay đổi quyền truy cập của tệp thiết bị trước khi sử dụng nó. Trong những trường hợp như vậy, chúng ta phải sử dụng lệnh chmod. Tuy nhiên, chúng ta có thể đạt được cùng kết quả bằng cách sử dụng lệnh mknod thay vì sử dụng hai lệnh riêng biệt.

Để hiểu điều này, hãy sử dụng tùy chọn -m để đặt quyền truy cập khi tạo một ống có tên: 

$ sudo mknod -m 444 /tmp/pipe-with-permissions p

Bây giờ, hãy xác minh rằng quyền truy cập đã được đặt đúng: 

$ ls -l /tmp/pipe-with-permissions

5 ví dụ về lệnh mknod trên Centos/Ubuntu/Debian/Fedora

Tạo tệp thiết bị có quyền truy cập

Trong ví dụ này, chúng ta đã sử dụng tùy chọn -m với ống có tên. Tuy nhiên, chúng ta cũng có thể sử dụng nó với các thiết bị ký tự và khối.