คำสั่ง mknod ใช้ทำอะไร?


51

ฉันเพิ่งเริ่มใช้ Ubuntu เป็นระบบปฏิบัติการหลักของฉันและฉันต้องการเรียนรู้เกี่ยวกับสิ่งที่ฉันไม่ควรทำและเรียนรู้จากสิ่งเลวร้ายที่ผู้คนเคยทำในอดีต ฉันเจออีเมลเหล่านี้เกี่ยวกับเรื่องราวสยองขวัญที่ผู้ดูแลระบบ UNIX และ Linuxได้ทำในระบบของตนเองเมื่อพวกเขาอยู่ที่ใหม่ หลายคนที่เกี่ยวข้องกับการใช้คำสั่ง mknod เพื่อ distory และแก้ไขปัญหา ฉันไม่เคยได้ยินเกี่ยวกับคำสั่งนี้มาก่อนและหน้า man ภายใน Ubuntu ไม่ได้มีประโยชน์มาก ดังนั้นคำถามของฉันคือคำสั่งนี้ใช้อะไรและมีตัวอย่างอะไรบ้างที่เป็นประโยชน์ในการใช้งานในแต่ละวัน?

คำตอบ:


47

mknod/dev/แต่เดิมที่ใช้ในการสร้างตัวละครและป้องกันอุปกรณ์ที่เติม ปัจจุบันซอฟต์แวร์เช่นudevสร้างและลบโหนดอุปกรณ์โดยอัตโนมัติในระบบไฟล์เสมือนเมื่อตรวจพบฮาร์ดแวร์ที่เกี่ยวข้องโดยเคอร์เนล แต่เดิม/devเป็นเพียงไดเรกทอรีใน/ที่ถูกบรรจุระหว่างการติดตั้ง

ใช่ในกรณีที่เกิดภัยพิบัติใกล้เสร็จทำให้/devระบบไฟล์เสมือนไม่สามารถโหลดและ / หรือudevล้มเหลวอย่างน่าทึ่งการใช้mknodrepopulate อย่างระมัดระวังอย่างน้อยต้นไม้อุปกรณ์พื้นฐานเพื่อรับบางสิ่งบางอย่างสำรองสามารถทำได้ ... แต่ใช่นั่นคือความน่ากลัวของระบบ เวลาเรื่อง ส่วนตัวผมขอแนะนำแท่ง USB หรือซีดีช่วยเหลือ

นอกเหนือจากการสร้างไปป์ที่มีชื่อแล้วฉันไม่สามารถนึกถึงการใช้งานแบบวันต่อวันที่เป็นไปได้สำหรับผู้ใช้จะต้องกังวลกับตัวเอง - และแม้กระทั่งที่ยืดคำจำกัดความของ 'การใช้งานแบบวันต่อวัน'


ดังนั้นมันจึงเป็นวิธีที่พิเศษมากในการสร้างไฟล์เสมือนที่อุปกรณ์ใช้เชื่อมต่อกับระบบเป็นวิธีการสื่อสารกับระบบโดยไม่ต้องเรียนรู้วิธีสื่อสารกับอุปกรณ์ผ่านทางไดร์เวอร์?
Mark Tomlin

1
แต่udevเฉพาะลินุกซ์ไม่ใช่เหรอ? บางทีระบบที่คล้าย Unix อื่น ๆ ยังคงสร้างอุปกรณ์ด้วยตนเอง
Faheem Mitha

2
@mark Er เลขที่ การสร้างไฟล์อุปกรณ์เสมือนเป็นซอฟต์แวร์ที่ควรสื่อสารกับอุปกรณ์ผ่านทางไดรเวอร์ ไดรเวอร์สร้างเบ็ดในเคอร์เนล mknod สร้างไฟล์อุปกรณ์ที่เชื่อมโยงเบ็ดไปยังไฟล์อุปกรณ์ที่ซอฟต์แวร์สามารถเชื่อมต่อได้ในภายหลัง
Shadur

@Faheem ฉันไม่แน่ใจ; FreeBSD ดูเหมือนจะใช้devfsและ / หรือdevdแต่ฉันไม่มีประสบการณ์ส่วนตัวด้วยเช่นกัน ฉันสงสัยว่า Unices อื่น ๆ ได้ใช้วิธีการของตนเองในการทำให้กระบวนการของโหนดอุปกรณ์โดยอัตโนมัติ
Shadur

@mark ตัวอย่างเช่น Alsa สร้างชุดของโหนดที่/dev/sndสอดคล้องกับองค์ประกอบต่าง ๆ ของฮาร์ดแวร์เสียงแต่ละบิตที่ตรวจพบและสนับสนุน ซอฟต์แวร์ที่ใช้เสียงสามารถใช้อุปกรณ์เหล่านั้นในการสร้างเสียงโดยไม่ต้องรู้ว่าต้องใช้การ์ดเสียงชนิดใด
Shadur

7

คุณสามารถสร้างไพพ์ที่มีชื่อได้

ฉันใช้มันกับโปรแกรมหนึ่งเพื่ออ่านจากมันและอีกอันหนึ่งเขียนลงไป

ทำให้การสื่อสารระหว่างกระบวนการง่ายขึ้น

มิฉะนั้นคุณสามารถสร้างไฟล์อุปกรณ์สำหรับอุปกรณ์ที่ไม่มีอยู่

นอกจากนี้: http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds3/mknod.htm


ในขณะที่คุณตอบถูกต้อง Shadur ให้คำตอบที่ชัดเจนสำหรับผู้อ่านทุกระดับดังนั้นฉันรู้สึกว่ามันดีที่สุดสำหรับคนที่กำลังมองหาคำตอบสำหรับคำถามนี้
Mark Tomlin

ฉันรู้ว่าฉันแค่พยายามอธิบายจากวิธีการปฏิบัติที่ฉันทำ การใช้mknodอย่างอื่นที่ไม่ใช่การสร้างท่อที่ตั้งชื่อนั้นเป็นอะไรที่หายาก
polemon

5

ในฐานะ oracle DBA ที่ทำงานกับอุปกรณ์ดิบเพื่อสร้างกลุ่มดิสก์ Oracle ASM เราจึงใช้mknodเชื่อมโยงอุปกรณ์เป็นประจำ

คำตอบข้างต้นมีประโยชน์มากสำหรับฉันเนื่องจากเราไม่ใช่ผู้ดูแลระบบ ฉันแค่อยากจะชี้ให้เห็นว่ามันอาจเป็นเรื่องยากจากมุมมองของผู้ดูแลระบบสตอเรจที่จะใช้mknodแต่จากมุมมองของ Oracle ASM เป็นการใช้งานทั่วไป (อาจเป็นคนที่คิดวิธีที่ดีกว่าสำหรับเราได้ไหม)


1
ฉันใช้ ASM บน Linux และไม่มีเหตุผลใดที่จะเรียกใช้ mknod ฉันมีสคริปต์ udev ที่สร้าง symlink แต่ไม่แน่ใจว่าคุณต้องการอะไร mknod สำหรับ ... ถ้าคุณไม่ได้ใช้ Linux แน่นอน.
Derobert

@JayJee โปรดทราบว่าในระบบ Linux ที่ทันสมัยหากคุณทำการเปลี่ยนแปลงหรือเพิ่มเติม/devด้วยmknodการเปลี่ยนแปลงเหล่านั้นจะหายไปในครั้งต่อไปที่ระบบรีบูต คุณจะต้องเขียนสคริปต์หรือudevไฟล์กฎที่จะทำการเปลี่ยนแปลง / เพิ่มเติมสำหรับคุณในเวลาบูตเพื่อให้ถาวร
telcoM

3

IMHO แม้จะสร้างชื่อไปป์แล้วคำสั่ง mkfifo ก็ดีกว่า mknod หนึ่งมันอธิบายด้วยตนเองในชื่อของมันที่สองก็อนุญาตให้ตัวเลือก -m เพื่อแทนที่การตั้งค่า umask


1
... และมันไม่ได้มีอยู่จนกระทั่งทศวรรษที่ผ่านมาหลังจากท่อชื่อ พวกเราหลายคนเรียนรู้mknod foo pเมื่อมันเป็นหนทางเดียว

ฉันไม่เคยได้ยินแม้แต่ mknod จนกระทั่งเมื่อเร็ว ๆ นี้เมื่อฉันมองผ่าน coreutils ฉันมักจะใช้ mkfifo เสมอ ...
6

0

คำสั่ง“ mknod” ได้รับการปล่อยตัวให้ผู้ใช้ลิขสิทธิ์ใน Unix (tm) เวอร์ชั่น 4 โดย AT&T ฉันอยากจะแนะนำว่าคุณควรใช้เวลาและเงินในการรับสำเนา

วารสารเทคนิคระบบกระดิ่ง, 57: 6. กรกฎาคม - สิงหาคม 2521 pp 2448-2472 ระบบการแบ่งปันเวลา UNIX (Ritchie, DM; Thompson, K. )

ปัญหานั้นและโดยเฉพาะอย่างยิ่งบทความนั้นจะนำคุณไปสู่การชื่นชมแนวคิดพื้นฐานหลายประการที่ช่วยให้การสร้างระบบปฏิบัติการที่สง่างามกะทัดรัดรวดเร็วมั่นคงปลอดภัยและใช้งานได้อเนกประสงค์ที่ Unix (tm) เป็น ระบบต่าง ๆ ที่มีวางจำหน่ายในขณะนี้ยังมีความหลากหลาย ;-)

ฉันจะพยายามพูดถึงไม่กี่คนที่นี่

1) บิต setuid และ setgid และวิธีการใช้บิตดังกล่าวอนุญาตให้แยกผู้ใช้ออกเป็นโดเมนสิทธิ์ที่เชื่อถือได้และไม่น่าเชื่อถือ กระโดดไปเรื่อย ๆ ซึ่งผู้ใช้ที่เชื่อถือได้จะมีโอกาสน้อยที่จะสั่งระบบเป็น“ # cd /; rm -rf * .o” สังเกตการใช้สิทธิ์และ“ พื้นที่แห่งการทำลาย” อย่างไม่เหมาะสมโปรดสังเกตว่าการสิ้นสุดประโยคด้วยวลีที่ยกมานั้นทำให้คำสั่งของเครื่องหมายคำพูดแบบเต็มหยุดและปิด ไวยากรณ์ภาษาอังกฤษ sucks (fm) dmr และ ken บริจาคสิทธิบัตร semnal ให้กับประชาชนและอวยพรพวกเขา

2) การเข้าถึงอุปกรณ์ผ่านเนมสเปซเดียวกันกับไฟล์ นี่คือที่ที่ความเรียบง่ายสง่างามของเครื่องมือขนาดเล็กรวมกับเครื่องมืออย่างง่ายอื่น ๆ เพื่อทำกิจกรรมที่ผู้ก่อตั้งไม่ได้คิดว่ามีประสิทธิภาพ

3) ไฟล์ในพื้นที่ข้อมูลเป็นสตริง โครงสร้างถูกกำหนดโดยโปรแกรมในพื้นที่โปรแกรมและไม่ผูกพันกับโปรแกรม Swiss-Army-Knife ที่ซับซ้อน Apple (R), Microsoft (R), และ IBM (R) อาจมีผลิตภัณฑ์ที่ดีกว่าหากพวกเขาอ่าน BSTJ มากขึ้น

4) stdin, stdout, stderr

5) เชลล์ตัวประมวลผลคำสั่งแบบตีความสามารถใช้เครื่องมือง่ายๆได้อย่างง่ายดาย

6) เพิ่มประสิทธิภาพโค้ดในลูปด้านในเท่านั้นใช้เวลาและเงินที่ จำกัด ของคุณในการนับ

7) อย่าฝังไวยากรณ์ i / o ในโปรแกรมแปลภาษา

C. <FORTRAN

8) KISS

9)“ มันง่ายกว่าที่จะออกแบบ ans ใช้ส่วนขยาย timesharing ayaeem system หลายผู้ใช้กับระบบเรียลไทม์ที่ดีกว่าอีกทางหนึ่ง 'round,' me, A timesharing extension to RSX-11D, ใช้งานด้วยเครื่องมือขนาดเล็กเขียนใน MACRO 11 เมื่อไม่สามารถหลีกเลี่ยงได้ภาษาสคริปต์ระดับสูงกว่านั้นค่อนข้างดีทีเดียวผู้ใช้ 16 คนบน 248k ไบต์ PDP-11 // 45 (หน่วยความจำโซลิดสเตต 16k หลักที่เหลือ) การพัฒนาโปรแกรมพร้อมกันด้วย FOCAL, BASIC, FORTRAN IV, C, MACRO-11, การแก้ไขลิงก์, การทำงานของโปรแกรม, แบทช์, การโต้ตอบและการควบคุม / การรับข้อมูลของการทดลองทางวิทยาศาสตร์หลายครั้งโดยใช้ LAB-11 และอินเทอร์เฟซ D / A, นาฬิกาความละเอียดสูง, ...

ไม่มีการแก้ไขความล่าช้าที่น่ารำคาญที่สังเกตเห็นได้ด้วย 9600 baud CRTs หรือ 120cps พรินเตอร์ 30cps DECwriters staccato เล็กน้อยกระตุกด้วยเครื่องพิมพ์ 300 lpm UT200 และ 2780 สำหรับ RJE การพัฒนาโปรแกรม Fastesr กว่า RSX-11M, RSX-11M +, IAS และ VMS รุ่นแรก ๆ

ตัวกำหนดตารางเวลาการแบ่งเวลาที่ใช้งานง่ายมากนำมาใช้เป็นงานตามเวลาจริงโดยใช้คุณลักษณะความสุขของลำดับความสำคัญที่เชื่อมโยง ATL ที่ใช้เป็น dequeue

ทุกวันนี้ยูนิกซ์มีสายพันธุ์ที่รวดเร็ว แต่เพียงเพราะซีพียูสามารถทำลูปไม่สิ้นสุดภายในสามวินาที TFC


โปรดแก้ตัวให้ฉันพิมพ์ข้อผิดพลาด iPhone และ Parkinson เล่นด้วยกันไม่ได้ C <FORTRAN <COBOL <PL / 1 เหลือดีกว่า
k6mrm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.