Untuk apa perintah mknod?

52

Saya baru saja mulai menggunakan Ubuntu sebagai OS utama saya dan saya ingin belajar tentang hal-hal yang seharusnya tidak saya lakukan, dan belajar dari hal-hal buruk yang telah dilakukan orang di masa lalu. Saya menemukan email-email ini tentang kisah-kisah horor yang dilakukan oleh admin sys UNIX & Linux di sistem mereka sendiri ketika mereka baru. Banyak dari mereka melibatkan penggunaan perintah mknod untuk menyimpangkan dan memperbaiki masalah. Saya belum pernah mendengar perintah ini sebelumnya dan halaman manual dalam Ubuntu tidak terlalu membantu. Jadi pertanyaan saya adalah, untuk apa perintah ini digunakan, dan apa saja contoh di mana itu berguna dalam penggunaan sehari-hari?

Mark Tomlin
sumber

Jawaban:

48

mknodpada awalnya digunakan untuk membuat karakter dan memblokir perangkat yang terisi /dev/. Saat ini perangkat lunak seperti udevsecara otomatis membuat dan menghapus node perangkat pada sistem file virtual ketika perangkat keras yang sesuai terdeteksi oleh kernel, tetapi pada awalnya /devhanyalah sebuah direktori /yang dihuni selama instalasi.

Jadi ya, dalam kasus bencana yang hampir lengkap menyebabkan /devsistem file virtual tidak memuat dan / atau udevgagal secara spektakuler, menggunakan mknoduntuk dengan susah payah mengisi kembali setidaknya satu perangkat pohon yang belum sempurna untuk mendapatkan sesuatu kembali dapat dilakukan ... Tapi ya, itu sysadmin horor waktu cerita. Secara pribadi, saya merekomendasikan USB stick atau CD penyelamat.

Selain membuat pipa bernama, saya tidak bisa memikirkan satu kemungkinan penggunaan sehari-hari untuk itu yang perlu diperhatikan oleh pengguna akhir - dan bahkan itu memperluas definisi 'penggunaan sehari-hari'.

Shadur
sumber
Jadi ini adalah cara yang SANGAT khusus untuk membuat file virtual yang benar-benar digunakan oleh perangkat yang terhubung ke sistem sebagai cara berkomunikasi dengan sistem tanpa harus belajar cara berkomunikasi dengan perangkat melalui drivernya?
Mark Tomlin
1
Tetapi udevapakah Linux itu spesifik, bukan? Mungkin sistem mirip Unix lainnya masih secara manual membuat perangkat?
Faheem Mitha
2
@mark Er, tidak. Membuat file perangkat virtual adalah cara perangkat lunak seharusnya berkomunikasi dengan perangkat melalui drivernya. Driver membuat hook di kernel; mknod membuat file perangkat yang menautkan kait ke file perangkat yang selanjutnya dapat dihubungkan oleh perangkat lunak.
Shadur
@ Faheem saya tidak yakin; FreeBSD tampaknya menggunakan devfsdan / atau devdtetapi saya tidak punya pengalaman pribadi dengan baik. Saya curiga beberapa unix lain telah bekerja dengan cara mereka sendiri untuk mengotomatiskan proses pembuatan node perangkat.
Shadur
@mark Sebagai contoh, Alsa menghasilkan serangkaian node yang /dev/sndsesuai dengan berbagai elemen dari setiap bit perangkat keras suara yang terdeteksi dan didukungnya. Perangkat lunak yang menggunakan suara dapat menggunakan perangkat itu untuk menghasilkan suara tanpa harus tahu persis apa jenis kartu suara yang mereka ajak bicara.
Shadur
7

Anda dapat membuat pipa bernama dengan itu.

Saya menggunakannya dengan satu program untuk membacanya, dan satu lagi untuk menuliskannya.

Membuatnya lebih mudah untuk berkomunikasi antar proses.

Jika tidak, Anda dapat membuat file perangkat, untuk perangkat yang tidak ada.

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

polemon
sumber
Meskipun jawaban Anda benar, Shadur memberikan jawaban yang jelas untuk semua tingkat pembaca sehingga saya merasa itu yang terbaik bagi orang yang mencari jawaban untuk pertanyaan ini.
Mark Tomlin
Saya tahu, saya hanya mencoba menjelaskan dari pendekatan praktis ketika saya melakukannya. Menggunakan mknodsesuatu selain membuat pipa bernama lebih dari jarang.
polemon
5

Sebagai DBA oracle yang bekerja pada perangkat mentah untuk membuat grup disk Oracle ASM, kami secara rutin digunakan mknoduntuk menautkan perangkat.

Balasan di atas sangat membantu saya karena kami bukan admin sistem. Saya hanya ingin menunjukkan bahwa itu mungkin jarang dari sudut pandang admin penyimpanan untuk digunakan mknodtetapi dari sudut pandang Oracle ASM yang umum digunakan. (Mungkin seseorang bisa menemukan cara yang lebih baik untuk kita?)

Jay Jee
sumber
1
Saya menjalankan ASM di Linux dan belum punya alasan untuk menjalankan mknod. Saya punya beberapa skrip udev yang membuat symlink, tetapi tidak yakin apa yang Anda butuhkan mknod untuk ... Kecuali Anda tidak di Linux. tentu saja.
derobert
@JayJee Maklum bahwa pada sistem Linux modern, jika Anda melakukan perubahan atau penambahan /devdengan mknod, perubahan tersebut akan hilang pada saat sistem reboot. Anda perlu menulis skrip atau udevfile aturan yang akan membuat perubahan / penambahan untuk Anda saat boot untuk membuatnya persisten.
telcoM
3

IMHO, bahkan untuk membuat pipa bernama, perintah mkfifo lebih baik dari mknod. Satu, itu deskriptif sendiri dalam namanya, Kedua, itu memungkinkan opsi -m untuk menimpa pengaturan umask.

Tom
sumber
1
... dan itu tidak ada sampai satu dekade setelah pipa bernama; banyak dari kita belajar mknod foo pketika itu satu-satunya cara.
Saya bahkan belum pernah mendengar tentang mknod sampai baru-baru ini ketika saya melihat melalui coreutils. Saya selalu menggunakan mkfifo ...
Six
0

Perintah "mknod" dirilis ke pemegang lisensi di Unix (tm) Versi 4 oleh AT&T. Saya akan merekomendasikan kepada Anda semua bahwa ada baiknya menghabiskan waktu dan uang untuk mendapatkan salinannya

Bell System Technical Journal, 57: 6. Juli-Agustus 1978 hlm 1905-1929. Sistem Berbagi Waktu UNIX. (Ritchie, DM; Thompson, K.)

Masalah itu, dan terutama artikel itu, akan mengarahkan Anda pada apresiasi terhadap beberapa konsep dasar yang memungkinkan pembangunan sistem operasi yang elegan, kompak, cepat, stabil, aman, dan serbaguna seperti Unix (tm)). Berbagai sistem yang sekarang tersedia masih cukup serbaguna ;-)

Saya akan mencoba menyebutkan beberapa di sini.

1) bit setuid dan setgid dan bagaimana penggunaan bit tersebut memungkinkan pemisahan pengguna ke dalam domain privilege tepercaya dan tidak dipercaya. Hop springs abadi bahwa pengguna tepercaya akan cenderung cenderung memerintahkan sistem untuk "# cd /; rm -rf * .o ”, perhatikan penggunaan hak istimewa yang tidak tepat dan“ ruang penghancuran. ”Perhatikan juga bahwa akhir kalimat dengan frasa yang dikutip menentukan urutan tanda titik penuh dan tanda kutip penutup. Tata bahasa Inggris menyebalkan (fm). dmr dan ken menyumbangkan paten semnal kepada publik, memberkati mereka.

2) akses perangkat melalui namespace yang sama dengan file. Di sinilah keanggunan sederhana dari alat kecil yang dikombinasikan dengan alat sederhana lainnya untuk melakukan kegiatan yang tidak dipikirkan oleh pendiri menjadi kuat.

3) File dalam ruang data adalah string. Struktur dipaksakan oleh program-program di ruang program dan tidak terikat erat pada program Swiss-Army-Knife yang rumit. Apple (R), Microsoft (R), dan IBM (R) mungkin memiliki produk yang lebih baik jika lebih banyak dari mereka membaca BSTJ.

4) stdin, stdout, stderr.

5) cangkang, pemroses perintah interpretif, dapat dengan mudah membuat alat sederhana.

6) hanya optimalkan kode di loop batin, habiskan waktu dan uang Anda yang terbatas di tempat yang penting.

7) jangan menyematkan sintaksis i / o dalam prosesor terjemahan bahasa.

C. <FORTRAN

8) CIUMAN.

9) “Lebih mudah untuk merancang dan mengimplementasikan ekstensi sistem ayaeem timesharing multi-pengguna ke sistem real-time yang baik daripada sebaliknya,” saya, ekstensi timesharing ke RSX-11D, diimplementasikan menggunakan alat kecil, yang ditulis dalam MACRO 11 ketika tidak terhindarkan, jika tidak, skrip bahasa tingkat yang lebih tinggi cukup baik, 16 pengguna pada 248k byte PDP-11 // 45 (memori 16k solid state sisanya inti). Pengembangan program bersamaan dengan FOCAL, BASIC, FORTRAN IV, C, MACRO-11, pengeditan tautan, eksekusi program, batch, interaktif, dan akuisisi data / akuisisi dari beberapa percobaan ilmiah menggunakan LAB-11 dan antarmuka yang dapat dikustomisasi secara kreatif untuk A / D, D / A, jam resolusi tinggi, ...

Tidak ada keterlambatan pengeditan yang dapat dilihat dengan CRT 9600baud atau printer 120cps 30cps DECwriters. Staccato agak tersentak-sentak dengan printer 300 lpm. UT200 dan 2780 untuk RJE. Pengembangan program Fastesr daripada RSX-11M, RSX-11M +, IAS, dan versi awal VMS.

Penjadwal pembagian waktu yang sangat sederhana diimplementasikan sebagai tugas waktu nyata menggunakan karakteristik bahagia ATL terkait prioritas yang diimplementasikan sebagai dequeue.

Varietas Unix cepat kilat saat ini, tetapi hanya karena CPU dapat melakukan loop tak terbatas dalam tiga detik. TFC.

k6mrm
sumber
Maaf, saya salah mengetik. iPhone dan Parkinson tidak bermain bersama dengan baik. C <FORTRAN <COBOL <PL / 1, lebih baik.
k6mrm