Lệnh mknod được sử dụng để làm gì?


52

Tôi mới bắt đầu sử dụng Ubuntu làm hệ điều hành chính của mình và tôi muốn tìm hiểu về những điều tôi không nên làm và học theo những điều tồi tệ mà mọi người đã làm trong quá khứ. Tôi đã xem qua những email này về những câu chuyện kinh dị mà các quản trị viên hệ thống UNIX và Linux đã thực hiện trên hệ thống của chính họ khi chúng mới xuất hiện. Nhiều người trong số họ liên quan đến việc sử dụng lệnh mknod để vừa làm phiền vừa khắc phục sự cố. Tôi chưa bao giờ nghe lệnh này trước đây và trang man trong Ubuntu không hữu ích lắm. Vì vậy, câu hỏi của tôi là, lệnh này được sử dụng để làm gì, và một số ví dụ mà nó hữu ích trong việc sử dụng hàng ngày là gì?

Câu trả lời:


48

mknodban đầu được sử dụng để tạo ký tự và chặn các thiết bị cư trú /dev/. Ngày nay, phần mềm như udevtự động tạo và loại bỏ các nút thiết bị trên hệ thống tệp ảo khi phần cứng tương ứng được phát hiện bởi kernel, nhưng ban đầu /devchỉ là một thư mục /được cài đặt trong quá trình cài đặt.

Vì vậy, trong trường hợp thảm họa sắp hoàn thành khiến /devhệ thống tập tin ảo không tải và / hoặc udevthất bại một cách ngoạn mục, sử dụng mknodđể tái tạo một cách khó khăn ít nhất một cây thiết bị thô sơ để lấy lại thứ gì đó có thể được thực hiện ... Nhưng vâng, đó là nỗi kinh hoàng giờ kể chuyện. Cá nhân, tôi khuyên bạn nên sử dụng một thanh USB hoặc CD cứu hộ.

Ngoài việc tạo ra các đường ống có tên, tôi không thể nghĩ đến việc sử dụng hàng ngày có thể có cho người dùng cuối mà họ cần quan tâm - và thậm chí điều đó còn kéo dài định nghĩa về 'sử dụng hàng ngày'.


Vì vậy, đó là cách RẤT chuyên biệt để tạo một tệp ảo thực sự được sử dụng bởi các thiết bị được kết nối với hệ thống như một cách giao tiếp với hệ thống mà không cần phải học cách giao tiếp với thiết bị thông qua trình điều khiển?
Đánh dấu Tomlin

1
Nhưng udevLinux có phải là đặc thù không? Có lẽ các hệ thống tương tự Unix khác vẫn tự tạo các thiết bị?
Faheem Mitha

2
@mark Er, không. Tạo tập tin thiết bị ảo là cách phần mềm được cho là giao tiếp với thiết bị thông qua trình điều khiển. Trình điều khiển tạo ra hook trong kernel; mknod tạo tệp thiết bị liên kết móc với tệp thiết bị mà phần mềm sau đó có thể kết nối với.
Shadur

@Faheem Tôi không chắc chắn; FreeBSD dường như sử dụng devfsvà / hoặc devdnhưng tôi không có kinh nghiệm cá nhân với một trong hai. Tôi nghi ngờ các đơn vị khác đã tìm ra cách riêng để tự động hóa quá trình tạo các nút thiết bị.
Shadur

@mark Ví dụ, Alsa tạo ra một loạt các nút /dev/sndtương ứng với các yếu tố khác nhau của từng bit phần cứng âm thanh mà nó phát hiện và hỗ trợ. Phần mềm sử dụng âm thanh có thể sử dụng các thiết bị đó để tạo âm thanh mà không cần phải biết chính xác loại âm thanh mà chúng đang nói đến.
Shadur

7

Bạn có thể làm một đường ống có tên với nó.

Tôi sử dụng nó với một chương trình để đọc từ nó, và một chương trình khác để viết vào nó.

Làm cho nó dễ dàng hơn để giao tiếp giữa các quá trình.

Mặt khác, bạn có thể tạo tệp thiết bị cho các thiết bị không có mặt.

Ngoài ra: http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds3/mknod.htm


Trong khi bạn trả lời đúng, Shadur đã cung cấp một câu trả lời rõ ràng cho tất cả các cấp độc giả để tôi cảm thấy đó là cách tốt nhất cho những người đang tìm kiếm câu trả lời cho câu hỏi này.
Đánh dấu Tomlin

Tôi biết, tôi chỉ cố gắng giải thích từ một cách tiếp cận thực tế khi tôi làm điều đó. Sử dụng mknodcho một cái gì đó khác hơn là làm ống có tên là hiếm hơn.
Polemon

5

Khi các DBA tiên phong hoạt động trên các thiết bị thô để tạo các nhóm đĩa Oracle ASM, chúng tôi thường sử dụng mknodđể liên kết các thiết bị.

Các câu trả lời ở trên rất hữu ích với tôi vì chúng tôi không phải là quản trị viên hệ thống. Tôi chỉ muốn chỉ ra rằng có thể hiếm khi theo quan điểm của quản trị viên lưu trữ để sử dụng mknodnhưng theo quan điểm của Oracle ASM thì đây là cách sử dụng phổ biến. (Có thể ai đó có thể đưa ra một cách tốt hơn cho chúng ta?)


1
Tôi đang chạy ASM trên Linux và không có bất kỳ lý do nào để chạy mknod. Tôi có một số tập lệnh udev tạo liên kết tượng trưng, ​​nhưng không chắc chắn những gì bạn cần mknod cho ... Trừ khi bạn không ở trên Linux. tất nhiên.
derobert

@JayJee Lưu ý rằng trên các hệ thống Linux hiện đại, nếu bạn thực hiện thay đổi hoặc bổ sung /devvới mknod, những thay đổi đó sẽ biến mất trong thời gian tới hệ thống được khởi động lại. Bạn sẽ cần phải viết một tập lệnh hoặc một udevtập tin quy tắc để thực hiện các thay đổi / bổ sung cho bạn khi khởi động để làm cho chúng bền bỉ.
telcoM

3

IMHO, ngay cả để tạo các đường ống có tên, lệnh mkfifo vẫn tốt hơn mknod. Thứ nhất, nó tự mô tả trong tên của nó, Thứ hai, nó cho phép tùy chọn -m để ghi đè cài đặt ô.


1
... và nó đã không tồn tại cho đến một thập kỷ sau khi đặt tên ống; rất nhiều người trong chúng ta đã học mknod foo pkhi đó là cách duy nhất.

Tôi thậm chí chưa bao giờ nghe nói về mknod cho đến gần đây khi tôi đang xem qua coreutils. Tôi đã luôn sử dụng mkfifo ...
Sáu

0

Lệnh Mknod đã được phát hành cho những người được cấp phép trong Unix (tm) Phiên bản 4 bởi AT & T. Tôi muốn giới thiệu với bạn rằng đáng để dành thời gian và tiền bạc để có được một bản sao của

Tạp chí kỹ thuật hệ thống Bell, 57: 6. Tháng 7-Tháng 8 năm 1978 Trang 1905-1929. Hệ thống chia sẻ thời gian UNIX. (Ritchie, DM; Thompson, K.)

Vấn đề đó, và đặc biệt là bài viết đó, sẽ đưa bạn đến sự đánh giá cao một số khái niệm cơ bản cho phép xây dựng hệ điều hành thanh lịch, nhỏ gọn, nhanh, ổn định, an toàn và linh hoạt mà Unix (tm)) đã có. Các hệ thống khác nhau hiện có sẵn vẫn còn khá linh hoạt ;-)

Tôi sẽ cố gắng đề cập đến một vài trong số đó ở đây.

1) các bit setuid và setgid và cách sử dụng các bit đã nói cho phép tách người dùng thành các miền đặc quyền đáng tin cậy và không đáng tin cậy. Hop lò xo vĩnh cửu mà người dùng đáng tin cậy sẽ ít có khả năng ra lệnh cho hệ thống tới # # / /; rm -rf * .o, chú ý cả việc sử dụng đặc quyền và không gian hủy diệt không đúng cách. Chú ý cũng kết thúc câu với cụm từ được trích dẫn chỉ ra lệnh dừng hoàn toàn và dấu ngoặc kép đóng. Ngữ pháp tiếng Anh hút (fm). dmr và ken tặng bằng sáng chế nửa năm cho công chúng, chúc lành cho họ.

2) thiết bị truy cập thông qua không gian tên giống như tập tin. Đây là nơi mà sự thanh lịch đơn giản của một công cụ nhỏ kết hợp với các công cụ đơn giản khác để thực hiện các hoạt động mà những người sáng lập không nghĩ đến trở nên mạnh mẽ.

3) Một tệp trong không gian dữ liệu là một chuỗi. Cấu trúc được áp đặt bởi các chương trình trong không gian chương trình và không bị ràng buộc chặt chẽ với chương trình Swiss-Army-Knife phức tạp. Apple (R), Microsoft (R) và IBM (R) có thể đã có những sản phẩm tốt hơn có nhiều người trong số họ đọc BSTJ.

4) stdin, stdout, stderr.

5) shell, bộ xử lý lệnh diễn giải, có thể dễ dàng tìm thấy các công cụ đơn giản.

6) chỉ tối ưu hóa mã trong các vòng lặp bên trong, dành thời gian và tiền bạc có hạn của bạn ở nơi nó được tính.

7) không nhúng cú pháp i / o trong bộ xử lý dịch ngôn ngữ.

C. <GIỚI THIỆU

8) HÔN.

9) Thiết kế ans dễ dàng hơn khi thực hiện mở rộng hệ thống chia sẻ thời gian nhiều người dùng sang hệ thống thời gian thực tốt hơn so với cách khác, vòng tròn, tôi, Một tiện ích mở rộng thời gian cho RSX-11D, được thực hiện bằng các công cụ nhỏ, được viết bằng MACRO 11 khi không thể tránh khỏi, nếu không, kịch bản pr ngôn ngữ cấp cao hơn là khá tốt, 16 người dùng trên PDP-11 // 45 byte (bộ nhớ trạng thái rắn 16k lõi còn lại). Phát triển chương trình đồng thời với FOCAL, BASIC, FORTRAN IV, C, MACRO-11, chỉnh sửa liên kết, thực hiện chương trình, lô, tương tác và kiểm soát / thu thập dữ liệu của nhiều thử nghiệm khoa học bằng LAB-11 và giao diện tùy chỉnh sáng tạo cho A / D, D / A, đồng hồ độ phân giải cao, ...

Không thể chỉnh sửa độ trễ khó chịu có thể quan sát được với CRT 9600baud hoặc máy in 120cps 30cps DECwriters. Một staccato giật một chút với máy in 300 lpm. UT200 và 2780 cho RJE. Phát triển chương trình Fastesr hơn RSX-11M, RSX-11M +, IAS và các phiên bản đầu tiên của VMS.

Một bộ lập lịch chia sẻ thời gian thực sự đơn giản được triển khai như một nhiệm vụ thời gian thực bằng cách sử dụng các đặc điểm hạnh phúc của ATL được liên kết ưu tiên được triển khai như một công cụ.

Các loại Unix ngày nay nhanh như chớp, nhưng chỉ vì CPU có thể thực hiện một vòng lặp vô hạn trong ba giây. TFC.


Xin thứ lỗi cho tôi gõ sai. iPhone và Parkinson không chơi tốt với nhau. C <FORTRAN <COBOL <PL / 1, còn lại tốt hơn.
k6mrm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.