На самых невстроенных установках Linux и многих встроенных установках, /dev
находится в поддержанной RAM файловой системе, не в корневом разделе. Актуальнейшие установки имеют /dev
как tmpfs файловая система, с udev демоном, создающим записи при уведомлении ядром, что некоторые аппаратные средства доступны. Недавнее предложение ядра возможность наличия /dev
смонтированный как devtmpfs файловая система, которая непосредственно заполняется ядром.
Я думаю, что Ubuntu 12.10 все еще использует udev. Так или иначе, /dev
не должен быть на корневом разделе (как показано выводом df /dev
), это должно быть в его собственной файловой системе. Вы случайно размонтировались /dev
?
Первая вещь, которую необходимо попробовать, состоит в том, чтобы перезагрузить: это должно смонтироваться /dev
правильно. Перед этим проверьте, что Вы не добавили запись для /dev
в /etc/fstab
(не должно быть никакой строки с /dev
во втором столбце).
Даже с /dev
на корневом разделе можно создать /dev/sdb
путем выполнения
cd /dev
sudo MAKEDEV sdb
Но не наличие /dev
управляемый динамично не стабильная конфигурация, Вы столкнетесь с подобными проблемами для большого количества других аппаратных средств.
Когда Вы работаете:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Вы чрезвычайно только перенаправляете вывод Потока 1 (т.е. stdout
) к /dev/null
.
Это прекрасно, когда Вы хотите перенаправить вывод, который производится нормальным осуществлением программы. Однако в случае, если Вы также хотите перенаправить вывод, вызванный всеми ошибками, предупреждениями или отказами, необходимо также перенаправить stderr
или поток Стандартной погрешности к /dev/null
.
Один способ сделать это предварительно ожидает количество потока, который Вы хотите перенаправить к оператору перенаправления, >
как это: Command 2> /dev/null
Следовательно, Ваша команда была бы похожа:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Но, заметьте, что мы уже перенаправили один поток к /dev/null
. Почему не просто автожелезнодорожные перевозки на том же перенаправлении? Bash позволяет нам делать это путем определения потокового числа, к которому можно перенаправить к. 2>&1
.
Заметьте &
символ после оператора перенаправления. Это говорит оболочку, которая, что появляется затем, не имя файла, а идентификатор для потока вывода.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Будьте осторожны с операторами перенаправления, их порядок имеет большое значение. Если необходимо было перенаправить в неправильном порядке, Вы закончите с неожиданными результатами.
Иначе, в котором можно достигнуть полной тишины, путем перенаправления всех потоков вывода к /dev/null
использование этого ярлыка: &>/dev/null
(или перенаправление к файлу журнала с &>/path/to/file.log
).
Следовательно, запишите свою команду как:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
Необходимо перенаправить оба стандартных вывода (>
или 1>
) и стандартная погрешность (2>
):
ping -q -c 1 google.com > /dev/null 2>/dev/null && echo online || echo offline
или, перенаправьте тот к другому:
ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline
$ ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline
$ ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline
online
$ ping -q -c 1 googleadf.com > /dev/null 2>&1 && echo online || echo offline
offline
В зависимости от Вашего ping
реализация Вы можете быть ограничены единственным количеством -c 1
. Некоторые реализации позволят Вам понизиться это, но необходимо по существу ожидать плохих поисков к тайм-ауту. Таким образом вместо использования ping
Вы могли бы хотеть использовать fing
вместо этого.
замедление сбоя ping
$ date; ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:51:10 EST 2014
online
Tue Jan 28 13:51:10 EST 2014
$ date; ping -q -c 1 googleadf.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:51:15 EST 2014
offline
Tue Jan 28 13:51:25 EST 2014
fing намного быстрее для сбоя
$ date; fing -p google.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:49:21 EST 2014
online
Tue Jan 28 13:49:22 EST 2014
$ date; fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:49:35 EST 2014
online
Tue Jan 28 13:49:38 EST 2014
time
команда, чем вручную вычислительная разница во времени с date
: time { fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; }
– Ruslan
29.01.2014, 13:44
date
. Это легче, IMO, для кого-то еще для чтения сгенерированного вывода.
– slm♦
29.01.2014, 15:22
&>/dev/null
это. Спасибо всем за мгновенную справку! А-ч – operalala 28.01.2014, 21:10Be careful with the redirection operators, their order matters a lot.
, но Вы не включали пример фактического использования2>&1
– Izkata 29.01.2014, 00:55