Do czego służy polecenie mknod?

51

Właśnie zacząłem używać Ubuntu jako mojego głównego systemu operacyjnego i chciałem dowiedzieć się o rzeczach, których nie powinienem robić, i poznać złe rzeczy, które ludzie robili w przeszłości. Natrafiłem na te e-maile o horrorach, które administratorzy systemów UNIX i Linux zrobili w swoim własnym systemie, gdy byli nowi. Wiele z nich wymagało użycia polecenia mknod zarówno w celu sprawdzenia, jak i rozwiązania problemu. Nigdy wcześniej nie słyszałem o tym poleceniu, a strona podręcznika użytkownika w systemie Ubuntu nie jest zbyt pomocna. Więc moje pytanie brzmi: do czego służy to polecenie i jakie są przykłady jego przydatności w codziennym użytkowaniu?

Mark Tomlin
źródło

Odpowiedzi:

47

mknodbył pierwotnie używany do tworzenia postaci i blokowania urządzeń, które się zapełniają /dev/. Obecnie oprogramowanie takie jak udevautomatyczne tworzy i usuwa węzły urządzeń w wirtualnym systemie plików, gdy jądro wykryje odpowiedni sprzęt, ale pierwotnie /devbył to tylko katalog, /który został zapełniony podczas instalacji.

Więc tak, w przypadku niemal kompletnej katastrofy powodującej /devwirtualny system plików nie można załadować i / lub udevbraku spektakularnie, używając mknoddo skrupulatnie repopulate przynajmniej szczątkowe drzewo urządzenie, aby uzyskać coś z powrotem można zrobić ... Ale tak, to administrator horror czas opowieści. Osobiście polecam ratunkową pamięć USB lub płytę CD.

Oprócz tworzenia nazwanych potoków, nie mogę wymyślić jednego możliwego codziennego zastosowania, z którym użytkownik końcowy musiałby się martwić - a nawet to rozszerza definicję „codziennego użytkowania”.

Shadur
źródło
Więc to jest BARDZO wyspecjalizowany sposób tworzenia pliku wirtualnego, który jest naprawdę używany przez urządzenia podłączone do systemu jako sposób komunikacji z systemem bez konieczności uczenia się, jak komunikować się z urządzeniem poprzez jego sterownik?
Mark Tomlin,
1
Ale czy udevjest specyficzny dla Linuksa, prawda? Być może inne systemy uniksowe wciąż ręcznie tworzą urządzenia?
Faheem Mitha
2
@mark Er, no. Tworzenie plików urządzeń wirtualnych to sposób, w jaki oprogramowanie ma komunikować się z urządzeniem za pośrednictwem sterownika. Sterownik tworzy hak w jądrze; mknod tworzy plik urządzenia, który łączy haczyk z plikiem urządzenia, z którym następnie oprogramowanie może się połączyć.
Shadur,
@ Faheem Nie jestem pewien; Wydaje się, że FreeBSD używa devfsi / lub devdnie mam osobistego doświadczenia z żadnym z nich. Podejrzewam, że inne jednorożce opracowały własne sposoby automatyzacji procesu tworzenia węzłów urządzeń.
Shadur,
@mark Na przykład Alsa generuje serię węzłów /dev/sndodpowiadających różnym elementom każdego wykrytego sprzętu dźwiękowego i obsługuje go. Oprogramowanie wykorzystujące dźwięk może wykorzystywać te urządzenia do generowania dźwięku bez konieczności dokładnego wiedzieć, z jaką kartą dźwiękową rozmawiają.
Shadur
7

Za jego pomocą możesz utworzyć nazwaną potok.

Używam go z jednym programem do odczytu, a innym do pisania.

Ułatwia komunikację między procesami.

W przeciwnym razie możesz utworzyć pliki urządzeń dla urządzeń, których nie ma.

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

polemon
źródło
Chociaż odpowiedź była prawidłowa, Shadur udzielił jasnej odpowiedzi dla wszystkich poziomów czytelników, więc uważam, że najlepiej dla osób szukających odpowiedzi na to pytanie.
Mark Tomlin
Wiem, że tak właśnie próbowałem wyjaśnić z praktycznego podejścia. Używanie mknoddo czegoś innego niż tworzenie nazwanych potoków jest więcej niż rzadkie.
polemon
5

Jako wyroczni DBA pracujący na surowych urządzeniach do tworzenia grup dyskowych Oracle ASM, regularnie używamy mknoddo łączenia urządzeń.

Odpowiedzi powyżej były dla mnie bardzo pomocne, ponieważ nie jesteśmy administratorami systemu. Chciałem tylko zauważyć, że z punktu widzenia administratorów pamięci masowej może być rzadkie, mknodale z punktu widzenia Oracle ASM jest to powszechne zastosowanie. (Czy ktoś może wymyślić lepszy sposób dla nas?)

Jay Jee
źródło
1
Używam ASM w systemie Linux i nie miałem żadnego powodu, aby uruchamiać mknod. Mam kilka skryptów udev, które tworzą dowiązania symboliczne, ale nie jestem pewien, do czego potrzebujesz mknod ... Chyba że nie masz Linuksa. oczywiście.
derobert
@JayJee Należy pamiętać, że na nowoczesnych systemach Linux, jeśli dokonać zmian lub uzupełnień /devze mknodzmiany te odejdzie następnym razem, gdy system zostanie uruchomiony ponownie. Będziesz musiał napisać skrypt lub udevplik reguł, który wprowadziłby zmiany / uzupełnienia podczas uruchamiania, aby były trwałe.
telcoM
3

IMHO, nawet do tworzenia nazwanych potoków, polecenie mkfifo jest lepsze niż mknod. Po pierwsze, jest samoopisowy w swojej nazwie, po drugie, pozwala opcji -m zastąpić ustawienia umask.

Tomek
źródło
1
... i istniał dopiero dziesięć lat po nazwanych rurach; wielu z nas nauczyło się, mknod foo pkiedy był to jedyny sposób.
Do niedawna nawet nie słyszałem o mknod, kiedy przeglądałem coreutils. Zawsze używałem mkfifo ...
Six
0

Polecenie „mknod” zostało wydane licencjobiorcom w systemie Unix (tm) w wersji 4 przez AT&T. Polecam wszystkim, że warto poświęcić czas i pieniądze, aby otrzymać kopię

Bell System Technical Journal, 57: 6. lipiec-sierpień 1978 str. 1905–1929. System podziału czasu UNIX. (Ritchie, DM; Thompson, K.)

Ten problem, a zwłaszcza ten artykuł, doprowadzi cię do zrozumienia kilku podstawowych koncepcji, które pozwalają na budowę eleganckiego, kompaktowego, szybkiego, stabilnego, bezpiecznego i wszechstronnego systemu operacyjnego jakim był Unix (tm)). Różne obecnie dostępne systemy są wciąż dość wszechstronne ;-)

Spróbuję tu wymienić kilka z nich.

1) bity setuid i setgid oraz sposób użycia tych bitów pozwala na podział użytkowników na zaufane i niezaufane domeny uprawnień. Hop jest wieczny, że zaufani użytkownicy będą mniej skłonni do polecenia systemowi „# cd /; rm -rf * .o ”, zwróć uwagę zarówno na niewłaściwe użycie przywileju, jak i na„ przestrzeń zniszczenia ”. Zauważ też, że koniec zdania z cytowanym zwrotem dyktuje kolejność kropki i końcowy znak cudzysłowu. Gramatyka angielska do bani (fm). dmr i ken podarowali półroczny patent opinii publicznej, pobłogosław je.

2) dostęp do urządzenia za pośrednictwem tej samej przestrzeni nazw co pliki. Oto, gdzie prosta elegancja małego narzędzia w połączeniu z innymi prostymi narzędziami do wykonywania czynności, o których nie pomyśleli założyciele, staje się potężna.

3) Plik w przestrzeni danych jest ciągiem. Struktura jest narzucana przez programy w przestrzeni programowej i nie jest ściśle związana ze skomplikowanym programem Swiss-Army-Knife. Apple (R), Microsoft (R) i IBM (R) mogły mieć lepsze produkty, gdyby więcej z nich czytało BSTJ.

4) stdin, stdout, stderr.

5) powłoki, interpretacyjne procesory poleceń, zdolne do łatwego korzystania z prostych narzędzi.

6) optymalizuj kod tylko w wewnętrznych pętlach, spędzaj ograniczony czas i pieniądze tam, gdzie się liczy.

7) nie osadzaj składni we / wy w procesorach tłumaczeń języka.

C. <FORTRAN

8) KISS.

9) „Łatwiej jest zaprojektować i zaimplementować rozszerzenie systemu Ayaeem dla wielu użytkowników do dobrego systemu czasu rzeczywistego niż odwrotnie”, ja, rozszerzenie dla RSX-11D z dzielenia czasu, zaimplementowane przy użyciu małych narzędzi, napisanych w MAKRO 11 gdy nieuniknięty, w przeciwnym razie skrypt języka wyższego poziomu był całkiem niezły, 16 użytkowników na 248k bajtowym PDP-11 // 45 (16k pamięci półprzewodnikowej reszta rdzenia). Jednoczesny rozwój programu z FOCAL, BASIC, FORTRAN IV, C, MACRO-11, edycja linków, wykonywanie programu, partia, interaktywność i kontrola / akwizycja danych wielu eksperymentów naukowych przy użyciu LAB-11 i kreatywnych niestandardowych interfejsów do A / D, D / A, zegary wysokiej rozdzielczości, ...

Brak widocznych irytujących opóźnień podczas edycji przy drukarkach CRT 9600 bodów lub drukarkach 120cps DECwriters. Nieco szarpane staccato z drukarką 300 l / min. UT200 i 2780 dla RJE. Rozwój programu Fastesr niż RSX-11M, RSX-11M +, IAS i wczesne wersje VMS.

Naprawdę prosty harmonogram dzielenia czasu zaimplementowany jako zadanie w czasie rzeczywistym, wykorzystujący szczęśliwe cechy priorytetowo powiązanego ATL zaimplementowanego jako dequeue.

Odmiany uniksowe są teraz błyskawiczne, ale tylko dlatego, że procesory mogą wykonać nieskończoną pętlę w trzy sekundy. TFC.

k6mrm
źródło
Przepraszam za błędy w pisaniu. iPhone i Parkinson nie grają dobrze razem. C <FORTRAN <COBOL <PL / 1, lewy jest lepszy.
k6mrm