Форуми

Какво, по дяволите, е /dev/null?

аз

имацинтел

Оригинален плакат
12 март 2006 г
  • 30 май 2006 г
Чудех се /dev/null was и какво прави?

Див каубой

Администратор/Редактор
Член на персонала
20 януари 2005 г


  • 30 май 2006 г
http://en.wikipedia.org/wiki/Data_sink

КанадаRAM

11 октомври 2004 г
На левия бряг - Виктория BC Канада
  • 30 май 2006 г
Това е нещо като къде отиват нечии публикации, ако успеят да влязат в моя списък за игнориране...

Дейвей

10 юли 2004 г
Ню Орлиънс / Лафайет, Ла
  • 30 май 2006 г
Това не е ли командата, която използвате в терминала, за да блокирате процесора?

Див каубой

Администратор/Редактор
Член на персонала
20 януари 2005 г
  • 30 май 2006 г
Дейвей каза: Това не е ли командата, която използвате в терминала, за да блокирате процесора?

Обикновено използваната терминална команда е:

да > dev/null

Той инструктира компютъра да изпрати непрекъснат поток от y към черната дупка, която е dev/null.

реалистичен терор

30 август 2003 г
Снелвил, Джорджия
  • 30 май 2006 г
Можете също да го използвате, ако не искате да получавате имейли от cronjob.

Все още не разбирам защо не можете просто да деактивирате имейлите с обикновен флаг в командата cron...

Доктор Q

Администратор
Член на персонала
19 септември 2002 г
На дивана в Лос Анджелис, гледайки Олимпийските игри.
  • 30 май 2006 г
realityisterror каза: Вие също го използвате, ако не искате да получавате имейли от cronjob.

Все още не разбирам защо не можете просто да деактивирате имейлите с обикновен флаг в командата cron...
Само предполагайки какво са имали предвид дизайнерите, но като позволиха произволна команда като задача на cron, те я направиха напълно обща. Тъй като вече имаше един начин за потискане на изхода (насочване на stdout и stderr към /dev/null), те може да не са виждали нужда да затрупват редовете на crontab с други начини за постигане на същото нещо.

MacsRgr8

8 септември 2002 г
Холандия
  • 31 май 2006 г
известен още като пустош...

bousozoku

Почетен модератор
25 юни 2002 г
свинска мас
  • 31 май 2006 г
Това е чудесно място да изпратите вашата информация за отстраняване на грешки, когато в момента не отстранявате грешки и не искате да променяте стотици редове код.

Доктор Q

Администратор
Член на персонала
19 септември 2002 г
На дивана в Лос Анджелис, гледайки Олимпийските игри.
  • 31 май 2006 г
Ако това беше форум за програмиране, форумът Wasteland наистина можеше да бъде наречен /dev/null.

BiikeMike

17 септември 2005 г
  • 31 май 2006 г
WildCowboy каза: Обикновено използваната терминална команда е:

да > dev/null

Той инструктира компютъра да изпрати непрекъснат поток от y към черната дупка, която е dev/null.

Така че, за да го спрете, казвате ли му без dev/null?




Не разбирам смисъла да имаш файл, който просто изхвърля всичките си данни. За какво точно е? Статията в Wiki не обяснява защо съществува....

savar

6 юни 2003 г
окръг Колумбия
  • 31 май 2006 г
BiikeMike каза: Така че, за да го спреш, казваш ли не dev/null?




Не разбирам смисъла да имаш файл, който просто изхвърля всичките си данни. За какво точно е? Статията в Wiki не обяснява защо съществува....

Някои команди генерират текст, дори ако не искате. Например, ако изпълнявате задание, което създава грешки, може да искате да пренасочите този изход за грешка, така че да не го виждате. Можете или да поставите във файл, или ако знаете, че не го искате, можете да го изпратите на /dev/null.

Ето един добър пример, който всъщност използвах на работа наскоро. Исках да търся във файлова система конкретен файл. Начинът да направите това в unix е:

намери / -име

Тази команда ще отпечата всички файлове, съдържащи низа. Но по време на работа споделям система със стотици други хора и тези хора може да са заключили определени директории, така че да не мога да видя какво има вътре в тях. Когато това се случи, командата find изписва съобщение за грешка, в което се казва, че не може да търси в такава и такава директория.

В моя случай не исках да виждам тези съобщения за грешки, така че използвах пренасочване, за да изпратя съобщения за грешка до /dev/null:

намери / -име 2> /dev/null

Глупостта „2>“ означава просто „пренасочване на съобщения за грешка към следното място“. Ако сложа име на файл вместо /dev/null, тези съобщения ще отидат във файл.

Между другото, идеята, че 'yes > /dev/null' по някакъв начин се състезава с процесора е напълно абсурдна. Процесорът има много функционални единици, които не се използват от да, И да също е свързан с IO. Защо хората продължават да разпространяват този мит?

Крис Брайтуел

5 април 2004 г
Хънтсвил, Алабама
  • 31 май 2006 г
imacintel каза: Чудех се /dev/null was и какво прави?
Това е мястото, където парчетата отиват да умрат.

BiikeMike каза: Не разбирам смисъла да имаш файл, който просто изхвърля всичките си данни. За какво точно е?
Така разработчиците могат да изхвърлят потоци от данни (от всякакви източници), без да се налага да пишат манипулатори на специални случаи.

Вместо това те просто го предават (или го предават, или го пишат, или каквото и да е) към /dev/null („нулевото устройство“, буквално) и продължават с това, което правят.

Доктор Q

Администратор
Член на персонала
19 септември 2002 г
На дивана в Лос Анджелис, гледайки Олимпийските игри.
  • 31 май 2006 г
/dev/null също е част от красотата на I/O функцията 'пренасочване' на Unix, която ви позволява да смесвате и съпоставяте начина, по който искате да се обработват вход и изход от вашите програми.

Когато даден процес работи, той може да чете от много източници и да записва до много дестинации. По конвенция обикновено се използват три, наречени стандартен вход (stdin), стандартен изход (stdout) и стандартна грешка (stderr). Използвайки конвенциите на обвивката, можете да изпратите всеки от stdin, stdout и stderr на вашия екран (нещата, които виждате в прозореца на терминала), да ги прикачите към конкретни дискови файлове, да използвате /dev/null (за да направите входа нулев или да хвърлите изход), прикрепете ги към физическо устройство (като лентово устройство) или ги свържете към друг процес (който се нарича тръбопровод).

Например, тази команда на единична обвивка Код: |_+_| може да се използва за показване на думата Здравейте на екрана, запазете го във файл, накарайте го да изчезне, изпратете го на лентово устройство или го изпратете на команда с име lp, която го отпечатва: Код: |_+_| и на изхвърли самата команда не трябва да знае или да се интересува къде отива изходът.

В този случай изборът /dev/null не беше много полезен, но /dev/null е удобен за команди, които генерират изход, който не искате този конкретен момент, включително задачи на cron и примера savar даде. Понякога пренасочвам изхода на rm команда (която премахва файл) към /dev/null, така че да не виждам съобщение за грешка, ако файлът не съществува. Но друг път искам да видя това съобщение, защото е знак за проблем, ако файлът не съществува, в който случай не използвам /dev/null. Код: |_+_| Забележка: Нарочно избягвах да споменавам разликите между обвивките в синтаксиса на пренасочване.