- Что такое /dev/null и как его использовать в Bash
- Предварительно
- Использование /dev/null
- Перенаправление вывода в /dev/null
- Перенаправить весь вывод в /dev/null
- Другие примеры
- Как выполнить стресс-тест процессора и системы охлаждения вашего Mac
- Для чего нужен стресс-тест
- В каком случае стоит выполнить стресс-тест
- Как выполнить стресс-тест Mac с помощью Терминала
- Как провести нагрузочный тест в режиме работы всех ядер
- Как оценить результаты теста
- Выводы
- Question: Q: piping stderr & stdout to /dev/null
- Исправляем ошибки форматирования диска
- Файлы устройств в OS X
Что такое /dev/null и как его использовать в Bash
Linux — это интересная операционная система, в которой размещены некоторые виртуальные устройства для различных целей. Для программ, работающих в системе, эти виртуальные устройства действуют так, как будто это реальные файлы. Инструменты могут запрашивать и получать данные из этих источников. Данные генерируются ОС вместо того, чтобы считывать их с диска.
Одним из таких примеров является /dev/null . Это специальный файл, который присутствует в каждой системе Linux. Однако, в отличие от большинства других виртуальных файлов, вместо чтения он используется для записи. Все, что вы запишете в /dev/null , будет отброшено, забыто в пустоте. В системе UNIX он известен как нулевое устройство.
Зачем вам выбрасывать что-то в пустоту? Давайте посмотрим, что такое /dev/null и как он используется.
Предварительно
Прежде чем углубиться в использование /dev/null , мы должны иметь четкое представление о потоке данных stdout и stderr . Ознакомьтесь с этим коротким руководством по stdin, stderr и stdout.
Давайте сделаем небольшое уточнение. При запуске любой утилиты командной строки она генерирует два вывода. Вывод идет на stdout , а ошибка (если она возникла) — на stderr . По умолчанию оба этих потока данных связаны с терминалом.
Например, следующая команда выведет строку, заключенную в двойные кавычки. Здесь вывод сохраняется в stdout .
Следующая команда покажет нам статус выхода ранее запущенной команды.
Поскольку предыдущая команда была выполнена успешно, статус выхода равен 0. В противном случае статус выхода будет другим. Что произойдет, если вы попытаетесь выполнить недопустимую команду?
Теперь нам нужно разобраться в файловом дескрипторе. В экосистеме UNIX это целочисленные значения, присвоенные файлу. И stdout (дескриптор файла = 1), и stderr (дескриптор файла = 2) имеют определенный дескриптор файла. Используя дескриптор файла (1 и 2), мы можем перенаправить stdout и stderr в другие файлы.
Для начала, следующий пример перенаправит stdout команды echo в текстовый файл. Здесь мы не указали дескриптор файла. Если он не указан, bash будет использовать stdout по умолчанию.
Следующая команда перенаправит stderr в текстовый файл.
меню
Использование /dev/null
Перенаправление вывода в /dev/null
Теперь мы готовы узнать, как использовать /dev/null . Сначала давайте проверим, как фильтровать обычный вывод и ошибки. В следующей команде grep попытается найти строку (hello, в данном случае) в каталоге «/sys».
Однако это вызовет множество ошибок, поскольку без привилегий root grep не может получить доступ к ряду файлов. В этом случае он выдаст ошибку «Permission denied». Теперь, используя перенаправление, мы можем получить более четкий результат.
Вывод выглядит намного лучше, верно? Ничего! В этом случае у grep нет доступа ко многим файлам, а в тех, что есть, нет строки «hello».
В следующем примере мы будем пинговать Google.
Однако мы не хотим видеть все эти успешные результаты пинга. Вместо этого мы хотим сосредоточиться только на ошибках, когда ping не смог достичь Google. Как нам это сделать?
Здесь содержимое stdout сбрасывается в /dev/null , оставляя только ошибки.
Перенаправить весь вывод в /dev/null
В некоторых ситуациях вывод может оказаться бесполезным. Используя перенаправление, мы можем сбросить весь вывод в пустоту.
Давайте немного разобьем эту команду. Сначала мы сбрасываем весь stdout в /dev/null . Затем, во второй части, мы говорим bash отправить stderr в stdout . В этом примере выводить нечего. Однако, если вы запутались, вы всегда можете проверить, успешно ли выполнилась команда.
Значение равно 2, потому что команда выдала много ошибок.
Если вы склонны забывать файловый дескриптор stdout и stderr, следующая команда подойдет как нельзя лучше. Это более обобщенный формат предыдущей команды. И stdout, и stderr будут перенаправлены в /dev/null.
меню
Другие примеры
Это интересный пример. Знаете инструмент dd ? Это мощный инструмент для преобразования и копирования файлов. Узнайте больше о dd . Используя dd , мы можем проверить скорость последовательного чтения вашего диска. Конечно, это не точное измерение. Однако для быстрого теста это довольно полезно.
Здесь я использовал Ubuntu 18.04.4 ISO в качестве большого файла.
Аналогичным образом вы также можете проверить скорость загрузки вашего интернет-соединения.
Надеемся, у вас есть четкое понимание того, что такое файл /dev/null. Это специальное устройство, которое при записи в него отбрасывает, а при чтении из него считывает null. Истинный потенциал этой интересной возможности заключается в интересных bash-скриптах.
Источник
Как выполнить стресс-тест процессора и системы охлаждения вашего Mac
Есть вероятность, хотя и незначительная, что процессор или система охлаждения вашего компьютера неожиданно выйдут из строя. В данной статье приводится метод проверки состояния основных компонентов Mac средствами стандартных инструментов OS X. При помощи обычного Терминала можно провести стресс-тест подсистем компьютера, чтобы проверить их на стабильность и надежность работы.
Для чего нужен стресс-тест
Если вам кажется, что кулер или процессор ПК работают не должным образом, то вам стоит провести быстрый тест этих компонентов. Его результаты покажут, исправно ли работают компоненты вашего Mac.
Тест достаточно простой. В ходе этого испытания процессор будет подвержен 100%-ной нагрузке. Учитывая температуру чипа при работе в таком режиме, можно будет понять, справляется ли система охлаждения со своей задачей или нет. Способ пригодится пользователям, желающим выявить скрытые проблемы Mac еще до того, как машину придется нести в сервисный центр.
Если процессор не может работать стабильно при нагрузке в 100%, то он неисправен. Если ваша система охлаждения не способна поддерживать корректный уровень температуры внутренних систем, а компьютер самостоятельно выключается из-за нагрева, то требуется замена вентилятора.
В каком случае стоит выполнить стресс-тест
Во-первых, если ваш Mac греется. Длительная работа процессора в таких условиях ускоряет его изнашивание и приближает его поломку. Во-вторых, если компьютер работает слишком медленно, и вы провели диагностику и уверены, что проблема не касается программного обеспечения.
Как выполнить стресс-тест Mac с помощью Терминала
Вам понадобятся только два приложения — Терминал и Мониторинг системы. Первое нужно для выполнения команд, а второе — для отслеживания состояния процессора во время теста.
Запустите Мониторинг системы и откройте вкладку ЦП, чтобы вы могли наблюдать за уровнем загрузки процессора. В этом окне можно просматривать все запущенные процессы в режиме реального времени, график загрузки центрального процессора, время простоя и использования системы.
Теперь запустите Терминал и наберите команду и нажмите кнопку Return:
Это действие приведет к созданию нового процесса под названием «yes». Чтобы убедиться в этом, вернитесь в Мониторинг активности и найдите созданный процесс в списке.
Как видите, процесс нагружает процессор на 100%, но в нижней части окна отображается уровень загрузки 12%. Дело в том, что процесс потребляет ресурсы одного ядра, но в нашем случае используется четырехъядерный чип с технологией Hyper-Threading, то есть система работает с 8 логическими ядрами, а если 100% поделить на 8, то получится примерно 12%.
Теперь необходимо завершить созданный нами процесс, чтобы перейти к многоядерному стресс-тесту.
Наберите следующую команду:
Нажмите кнопку Return.
Эта команда «убьет» все экземпляры процесса «yes» в системе, вернув центральный процессор в режим ожидания и пониженного энергопотребления.
Как провести нагрузочный тест в режиме работы всех ядер
Снова запустите Терминал, но на этот раз введите следующую команду:
yes > /dev/null & yes > /dev/null & yes > /dev/null & yes > /dev/null &
и нажмите клавишу Return.
Данная команда является аналогом первой, но запущенной в четырех экземплярах. В результате в окне Терминала вы увидите четыре активных процесса «yes»:
Мониторинг системы показывает, что общая загрузка четырехъядерного процессора достигает 50%. Не забывайте, что благодаря технологии Hyper-Threading система «видит» 8 виртуальных ядер. Именно поэтому необходимо вернуться в Терминал и запустить 8 копий процесса yes:
В результате этих действий нам удалось добиться уровня загрузки процессора практически в 100%.
Как оценить результаты теста
При выполнении команд не забывайте постоянно прислушиваться к компьютеру. Вы не должны слышать никаких скрипов и других посторонних шумов. Если таковые имеются — машина в скором времени может выйти из строя. Посторонними шумами могут быть звуки или щелчки лопастей вентилятора в тот момент, когда кулер пытается охладить процессор при нагрузке, превышающей 50%.
В таком случае вам необходимо отнести свой Mac в сервисный центр. Если компьютер находится на гарантии, то в этом случае починка обойдется вам бесплатно.
Выводы
Это простой способ диагностики основных компонентов Mac и потенциальных проблем с системой охлаждения. Используйте приведенные выше команды, отслеживая работу процессора в Мониторинге системы. Так вы сможете избежать серьезной поломки и дорогостоящего ремонта Mac. Способ пригодится всем пользователям, которые желают выявить скрытые проблемы компьютеров еще до того, как рабочую станцию придется нести в сервисный центр.
Источник
Question: Q: piping stderr & stdout to /dev/null
I’ve never worked with stderr and stdout before. I have an application that sends an obscene number of messages to the Console log, so implemented the following shell script to launch it in future:
/Volumes/Storage/Shared/Games/UrbanTerror/ioUrbanTerror.app/Contents/MacOS/ioUrb anTerror.ub >> 2&>1 /dev/null
No further entries appeared in the Console so I thought I was sorted, but then I discovered two files in the root of my Home directory called 1 and 2 respectively, and these contained the log outputs. I thought /dev/null was supposed to be the computer equivalent of «oblivion,» so have I implemented the shell script incorrectly?
Also, can someone further modify my script so that stdout goes to /dev/null and stderr goes to a log file in a location of my choosing?
MacBook Pro MB470LL/A, 4GB RAM, Mac OS X (10.6.5), ; Mac Pro 2010 10.6.5; iPhone 3GS 16GB iOS4.0.2; AEBS MA053LL/A
Posted on Feb 3, 2011 1:04 AM
No further entries appeared in the Console so I thought I was sorted, but then I discovered two files in the root of my Home directory called 1 and 2 respectively, and these contained the log outputs. I thought /dev/null was supposed to be the computer equivalent of «oblivion,» so have I implemented the shell script incorrectly?
The >> should have been next to /dev/null, the & was in the wrong place, and the 2>&1 should follow the >>/dev/null. Understanding the 2>&1 behavior is a bit tricky.
You could have also just redirected stdout and stderr separately to /dev/null
Also, can someone further modify my script so that stdout goes to /dev/null and stderr goes to a log file in a location of my choosing?
This will overwrite file.log every time you invoke the script. Or if you want to append to the file you can use:
Or if you want to use dated log files for each running of the script:
Источник
Исправляем ошибки форматирования диска
Благодаря преимуществам журналируемой файловой системы в Mac OS X, вероятность повреждения и потери данных довольно мала, но всё же бывают случаи, когда доступ к диску получить не удается. Обычно возможностей Дисковой утилиты вполне хватает, чтобы обнаружить и исправить ошибки диска, или, как крайнее средство, отформатировать его, но всё же иногда и этого оказывается недостаточно.
При появлении подобных проблем ваш диск может отображаться в Finder, но его содержимое будет недоступно, или же он может присутствовать только в окне Дисковой утилиты, а при попытке его подключить или взаимодействовать с ним иным образом возникают различные сообщения об ошибках, например, «ресурс занят» или «не удалось отключить диск».
К сожалению, во многих случаях такое поведение может означать, что диск неисправен и его необходимо заменить. Однако, если диск работал и продолжает работать бесшумно, и не проявляются иные признаки аппаратных неисправностей, можно предположить, что проблема заключается в ошибках форматирования. В этом случае можно воспользоваться другой операционной системой для форматирования диска. Для этого подойдет Windows, установленная на ваш Mac через Bootcamp, виртуальная машина, если вы пользуетесь Parallels Desktop или иными похожими программами, или же вы можете подключить диск как внешний к персональному компьютеру под управлением Windows. Однако, не у всех под рукой есть устройство или виртуальная машина под управлением другой операционной системы.
Второй вариант предусматривает использование Терминала, через который можно взаимодействовать со специальными файлами, соответствующими вашему проблемному диску.
Файлы устройств в OS X
Файлы устройств в OS X — это наборы драйверов для определенных устройств, которые хранятся в в скрытой папке «dev». С их помощью осуществляется взаимодействие с этими устройствами посредством наборов соответствующих команд (открытие, чтение, запись, закрытие и прочие). Это позволяет программам обращаться к устройствам без необходимости пользователю инициировать каждое действие вручную и дает возможность пользоваться более удобными инструментами (к примеру, файловыми менеджерами или Дисковой утилитой). Загрузочный диск в вашем устройстве всегда будет пронумерован в первую очередь, поэтому соответствующему ему файлу будет присвоено имя «disk0», а полный путь к нему будет выглядеть так: «/dev/disk0». Вы всегда можете посмотреть список накопителей подключенных к вашему компьютеру, введя в Терминале команду diskutil list А узнав имя файла интересующего вас диска вы можете запросить информацию о нем при помощи команды diskutil info /dev/disk1
В OS X, как и в остальных Unix системах, существуют специальные файлы, которые, вместо того чтобы предоставлять доступ к определенным устройствам, дают дополнительные возможности. Например, «/dev/null» удаляет все данные которые будут ему отправлены (часто используется при написании скриптов и программ), а «/dev/random» при обращении к нему выдает случайные данные. Вы можете посмотреть, как работает «/dev/random», введя в Терминале команду cat /dev/random Для отмены команды зажмите сочетание клавиш Control + C
Если с вашим диском возникли проблемы, связанные с форматированием, можно попробовать воспользоваться этим генератором случайных данных, чтобы принудительно переписать содержимое накопителя. Таким образом разметка диска и все данные на нем будут удалены, а сам накопитель отобразится в системе как пустой. Это может помочь избежать возникновения ошибок системы при обращении к проблемному диску.
- Запустите Терминал из папки «Утилиты» и войдите в режим администратора при помощи команды sudo su
- Чтобы отобразился список доступных устройств и соответствующих им специальных файлов, введите команду diskutil list
- В полученной таблице найдите проблемный диск (например, ориентируясь по объему и названиям логических разделов) и определите соответствующий ему файл устройства
- Начните запись произвольных данных на проблемный диск при помощи команды cat /dev/random >/dev/disk1 заменив /dev/disk1 на файл проблемного устройства, полученный на предыдущем шаге.
- При успешном вводе команды курсор перейдет на новую строку, которая останется пустой. В это время система как раз и производит запись данных на диск. Через несколько минут прервите выполнение команды сочетанием клавиш Control + C.
Весьма вероятно, что после ввода последней команды возникнет ошибка с сообщением, что запрашиваемый ресурс уже используется. Часто это означает, что система успела подключиться к устройству и, вероятно, «застопорилась» в процессе его монтирования.
- При открытом окне Терминала нажмите на клавиатуре курсорную клавишу ↑ (Вверх), чтобы подготовить повторный ввод предыдущей команды
- Отсоедините диск от компьютера
- Повторно подключите диск и сразу же нажмите клавишу ⏎Enter для ввода команды.
Получиться может не с первого раза, поэтому стоит попробовать несколько раз, пока курсор не переместится на новую строку, которая останется пустой.
Вы можете попробовать отключить и подключить диск через Терминал, что может быть полезно, если проблема связана не с внешним, а с внутренним диском.
Для того чтобы отключить диск введите команду diskutil unmountDisk /dev/disk1 заменив /dev/disk1 на файл проблемного устройства
Подключить диск можно командой diskutil mountDisk /dev/disk1
Вы также можете объединить эти две команды и добавить команду на запись произвольных даных на диск diskutil unmountDisk /dev/disk1;diskutil mountDisk /dev/disk1;cat /dev/random > /dev/disk1
Стоит заметить, что такой способ срабатывает не всегда и иногда проще подключить диск, как внешний, и воспользоваться инструкцией, приведенной выше.
После этого подождите 2-3 минуты и нажмите сочетание клавиш Control + C, чтобы прервать выполнение команды. В результате, если проблема действительно заключалась в ошибках форматирования, проблемный диск должен отобразиться в Дисковой утилите как пустой, и вы сможете отформатировать его и при необходимости разбить на разделы, чтобы подготовить к дальнейшему использованию с Mac OS X.
За оригинальный материал, послуживший основой при написании данной статьи, в очередной раз благодарим Кристофера Кесслера.
Источник