Какво е / dev / null и как може да ви помогне?

Ако вече имаме някои понятия за дървото на директориите на GNU / Linux, трябва поне да сме запознати с / dev / reference, който е на практика там, където всички файлове, свързани с хардуерни устройства.

Ако погледнем в директорията / dev / ще видим "файл", наречен нула, но ако искаме да го отворим, за да видим съдържанието му, системата ще ни каже, че не е възможно, тъй като не е обикновено съдържание. Приложих думата файл, защото, както всички знаете за Linux, всичко (хардуер и софтуер) е представено като файл.

Това е принос на Даниел Дюранте, като по този начин се превръща в един от победителите в нашето седмично състезание: «Споделете какво знаете за Linux«. Честито Даниел!

На какво устройство отговаря / dev / null?

За практически цели си представете кофа за боклук, бездънна яма или космическо пространство, в което да хвърлите каквото и да било, без възможността да го възстановите (колкото и да се опитват хората от НАСА).

Но ако вече имам команди като rm, защо искам нещо ново, което да изтрия?

Защото начинът, по който работят и двете „черни дупки“, е напълно различен: как бихте могли да замените стандартния изход на грешка в команда в скрипта на черупката по време на изпълнение? Тук влиза / dev / null.

Нека го видим с пример.

Създадохме файл, наречен тестове, съдържащ низа "Hello World". Ако искаме да представим съдържанието на този файл в командния ред, можем да го направим по следния начин:

потребител @ лаптоп: ~ $ тест за котка
Здравей свят

Ако файлът не съществуваше или беше именуван като тестове (с 's' в края), щяхме да получим следната грешка в конзолата:

user @ laptop: ~ $ тестове за котки
cat: tests: Файлът или директорията не съществуват

Какво бихме могли да направим, за да избегнем съобщението за грешка? Е, просто пренасочете изхода на командата, в случай на грешка, към "кошче за боклук", тоест на / dev / null

Как да го посочим в случай на грешка? Тук въвеждате стандартните стойности за вход, изход и грешка за програма: STDIN, STDOUT и STDERR (които могат да бъдат заменени съответно на 0, 1 и 2). По този начин, ако сложим ...

потребител @ лаптоп: ~ $ cat тестове 2> / dev / null
потребител @ лаптоп: ~ $

... Ще видим, че съобщението за грешка няма да бъде изведено на конзолата.

Трябва да внимавате, защото синтаксисът е от съществено значение: между символите 2 и> не трябва да има интервал. В противен случай ще даде следното:

потребител @ лаптоп: ~ $ cat тестове 2> / dev / null
cat: tests: Файлът или директорията не съществуват
cat: 2: Файлът или директорията не съществуват

За разлика от това, интервал между> и / dev / null няма да повлияе отрицателно на резултата.

Можем също да използваме пренасочване на грешки, например, за улавяне на грешки в регистрационен файл, както следва:

потребител @ лаптоп: ~ $ cat тестове 2> err.log

Друг интересен случай би бил събирането на резултати в друг файл, стига да не възникне грешка, за което бихме поставили:

потребител @ лаптоп: ~ $ тест за котка 1> output_result 2> err.log

И накрая, възможно е да се постави израза «> / dev / null 2> & 1», в който се комбинират стандартният изход и изходът за грешка, като ги пренасочва, така че в никакъв случай не се получава изходна информация.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

      Гуидо Игнасио Игнасио каза той

    А, но липсва една от най-използваните помощни програми, която / dev / null има, което изпразва файлове: $ cat / dev / null> file.log По този начин файлът file.log ще бъде празен. Добавете го!

         Едуардо Х. каза той

      Точно обяснението търсеше.
      Подкрепям предложението за добавяне =)

      Saludos!

      Пабло каза той

    Здравейте, първо статията е много добра! второто бих искал да допринеса нещо с тази връзка по темата cron работа в php от Cpanel и третото поздравление за блога!

      Пабло каза той

    Хубава статия за dev / null, какъв срам мисля, че погрешно коментирах на грешното място преди! извинявам се

      анонимен каза той

    благодаря добър принос

      Джерси каза той

    Поздрави получавам нулева атака. Използвам andrirc и получавам private от псевдонима си с думата Null. 2 секунди след затварянето на програмата чета и от това, което виждам, това може да се направи само от Shell, а не от някой външен. Опитах се да се игнорирам / игнорирам -lrpcntikd и нищо не ме изненадва, командата продължава да идва. Ако имате някакъв начин да се опитате да го блокирате, ще го оценя. Наздраве

      София мартинес каза той

    Какво се случва, ако при изпълнение на изречението символът> не е поставен?

    Може ли някой да ме насочи, моля?

      нула каза той

    Добро утро, инсталирах Debian netinst в ACER Extensa 5620Z – 32 bit. След като инсталацията от USB приключи и флаш устройството се извади, така че да се стартира от твърдия диск (не преинсталирайте от писалката), но в момента на зареждане системата тя ме пита:
    Вход в debian: xxxxxxxx (ОК)
    Парола: xxxxxxxx (ОК)
    nil@debian:~$ ???? какво е това? Какво да сложа там?

    Без тази команда не мога да продължа със зареждането на системата.
    Можеш ли да ми помогнеш? Не знам как да продължа.
    Благодаря ти много. Поздрави.