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:
Đọ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ả:
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
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
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
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
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
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/
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
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.