Перенаправление ввода и вывода

Введение

Итак, Вы решили встать на путь построения карьеры системного администратора. Или уже стоите на этом пути но не знаете, куда двигаться дальше.

Для начала, давайте определимся. Кто такой системный администратор? Какие у Вас в голове возникают ассоциации при упоминании этого термина?

В России этот термин понимается не верно. На западе ему соответствует термин System Engineer, а Администратор это кто-то по выше. То есть человек, который возится с настройкой, обслуживанием и отладкой систем это именно инженер. Администратор, по сути своей, должен спланировать и спроектировать инфраструктуру, набор и состав сервисов и т.д. И следить за дальнейшей судьбой всего этого хозяйства. Но раз в РФ прижился этот термин — остановимся на нем.

Итак — системный администратор. Кто это? Если в Вашем сознании рисуется картинка типа такой:

тогда Я разочарую Вас:

  • на первой изображен типичный «эникей», он же мальчик на побегушках в мире системного администрирования. «Личинка сисадмина», которая может вырасти в прекрасную бабочку, то есть высококлассного специалиста, может разочароваться в сфере и уйти из нее, но самое худшее- может застрять в таком состоянии на долгие годы. Сидеть на одном месте, подпирая свои системы
  • на второй- какой-то домашний задрот. Человек который фанатеет от компьютерных систем, но не знает им применения и при этом не хочет чему то поучиться. Он шарится по форумам таких же как он, читает «умные» советы, пользуется «правильными» сборками Windows или каждые 2 месяца меняет дистрибутив Linux (не разобравшись ни с одним и не изучив систему в целом).
  • на третьей — застарелый алкаш. Тут комментарии излишни. Как раз тот самый эникей, который когда-то застрял на одной ступени развития. Дальше идти лень, пользователи несут починить компьютеры за пиво, свитер уже прирос к животу, в бороде скоро заведется жизнь))

Ни один из них не соответствует термину «Системный администратор». Если в Вашем преставлении сисадмин — это человек, который занимается ремонтом и заправкой принтеров одной рукой, второй переставляет на компьютерах пользователей «эти постоянно глючащие Винды (естественно лелея влажные мечты пересадить всех на православно-верный Linux… Вот жизнь то была бы сразу), и наконец правой пяткой гоняющий из сети вирусы и что-то делающий с 1С… Отойдите на 10 шагов от ближайшей стены, повернитесь к ней лицом, закройте глаза и с разбегу убейтесь об нее. Правда. Вам нечего делать в этой области и этой профессии.

Введение

Скажу сразу, что в целом книга мне понравилась и я нашел ее полезной. К сожалению, она прилично устарела и где-то треть ее практически неактуальна. Это касается технических моментов, которые описываются в самом конце. Оно и понятно, книга была написана в 2007 году. Забавно, что привычных нам пользователей (юзеров), автор называет клиентами, а руководителей шефами. Мне каждый раз резало ухо эти слова в тексте.

Читая книгу, с радостью отмечал, какой же я все-таки умный :) Навскидку, половину, может даже больше советов, которые приводит автор, я сам использую в повседневной работе и жизни. Причем придумал я все этом сам, так как никаких книг по тайм менеджменту никогда не читал.

Некоторые советы я не понял и не считаю, что они как-то помогают и упрощают жизнь. Об этом буду писать отдельно, когда по пунктам буду перечислять основные моменты книги. Пойду прямо по оглавлению.

C++

Потоки ввода-вывода в эмуляторе терминала

Эмулятор терминала общается с пользователем только по двум каналам:

  • Ввод данных с помощью клавиатуры (буфера обмена)
  • Вывод текстовых (и псевдографических) данных на экран терминала

Если специальных действий не было предпринято, тогда

  • Поток событий с клавиатуры передаётся на стандартный поток ввода
  • Содержимое потоков и выводится на экран в истории

С точки зрения пользователя потоки и выводятся общим текстовым потоком

Если данные с потоков приходят одновременно, то возможно их пересечение

Использование потоками приложением

Приложение не использует стандартный поток ввода, данные ему передаются исключительно через аргументы

  • используется для вывода списка файлов
  • используется для вывода информации об ошибках

Пример вывода на стандартный поток вывода:

Пример вывода на поток ошибок:

Без применения специальных действий различить два вывода мы не сможем

Хранение данных

Не мало важный аспект практических знаний — хранение данных. Под этим понимается работа с хранилищами, базовые знания по сетям и системам хранения данных, резервное копирование и все из этой оперы. Ест довольно неплохой базовый курс от компании EMC — если выкинуть все то маркетинговое дерьмо и рекламу их решений, которые они напихали в этот курс, получается неплохая вводная. Плюс для начала я бы порекомендовал статьи от компании Veeam. Далеко не все там посвящено резервному копированию, но несколько статей там точно полезны. не привожу конкретных ссылок просто по той причине, что к моменту прочтения Вами моей повести, полезных статей там может прибавиться.

Данный раздел получился самым скромным из всех, приведенных тут по двум причинам:

  • Так или иначе, вопросы хранения, защиты и резервного копирования данных освящаются и в курсах по Microsoft Windows, и по Linux.
  • К моменту, когда Вам понадобится больше знаний в этой области,  думаю вы уже будете знать технологии и решения вендора, которые Вам нужно изучать.

Поэтому, вряли он понадобится Вам по началу большой объем информации (за редким исключением).

Обнаружение перенаправления в скрипте

Мы обсудили, как команда может обнаружить, перенаправлен ли какой-либо из потоков, и может соответствующим образом изменить свое поведение. Можем ли мы сделать это в наших собственных сценариях? Да мы можем. И это очень простая техника для понимания и применения.

Введите следующий текст в редактор и сохраните его как input.sh.

  #! / Bin / Баш

 если ;  тогда

   эхо ввода с клавиатуры
 
 еще

   эхо стандартного ввода из трубы или файла
 
 фи 

Используйте следующую команду, чтобы сделать его исполняемым:

  chmod + x input.sh 

Умная часть — это проверка в квадратных скобках . Опция (терминал) возвращает истину (0), если файл, связанный с дескриптором файла, заканчивается в окне терминала . Мы использовали дескриптор файла 0 в качестве аргумента теста, который представляет стандартный .

Если подключен к окну терминала, тест подтвердится. Если подключен к файлу или каналу, тест не пройден.

Мы можем использовать любой удобный текстовый файл для генерации ввода в скрипт. Здесь мы используем файл с именем dummy.txt.

  ./input.sh <dummy.txt 

Вывод показывает, что скрипт распознает, что ввод не с клавиатуры, а с файла. Если вы захотите, вы можете соответствующим образом изменить поведение вашего скрипта.

Это было с перенаправлением файла, давайте попробуем это с каналом.

  кот dummy.txt |  ./input.sh 

Сценарий распознает, что его вход передается по каналу. Точнее, он еще раз распознает, что поток не подключен к окну терминала.

Давайте запустим скрипт без каналов и перенаправлений.

  ./input.sh 

Поток подключен к окну терминала, и скрипт сообщает об этом соответственно.

Чтобы проверить то же самое с выходным потоком, нам нужен новый скрипт. Введите следующее в редактор и сохраните его как output.sh.

  #! / Bin / Баш

 если ;  тогда

 echo stdout собирается в окно терминала
 
 еще

 echo stdout перенаправляется или передается по каналу
 
 фи 

Используйте следующую команду, чтобы сделать его исполняемым:

  chmod + x input.sh 

Единственное существенное изменение в этом скрипте — в тесте в квадратных скобках. Мы используем цифру 1 для представления дескриптора файла для .

Давайте попробуем это. Мы передадим вывод через .

  ./output |  Кот 

Скрипт распознает, что его вывод не идет прямо в окно терминала.

Мы также можем протестировать скрипт, перенаправив вывод в файл.

  ./output.sh> capture.txt 

Нет вывода в окно терминала, мы молча возвращаемся в командную строку. Как и следовало ожидать.

Мы можем заглянуть внутрь файла capture.txt, чтобы увидеть, что было захвачено. Используйте следующую команду, чтобы сделать это.

  кошка захват.ш 

Опять же, простой тест в нашем скрипте обнаруживает, что поток не отправляется непосредственно в окно терминала.

Если мы запустим скрипт без каких-либо каналов или перенаправлений, он должен обнаружить, что стандартный доставляется непосредственно в окно терминала.

  ./output.sh 

И это именно то, что мы видим.

Сосредоточенность как средство против прерываний

Для продуктивной работы нужно сосредоточиться. Сосредоточиться невозможно, когда вас постоянно отвлекают. Необходимо проанализировать свою обстановку и по максимуму устранять отвлекающие факторы.

Кстати, к отвлекающему фактору автор относит музыку. Я с ним очень согласен. Когда работал в офисе, постоянно возникал конфликт на этой почве. Кому-то хочется одну музыку слушать, кому-то другую, а мне не хочется вообще никакую. Я продуктивно работаю только в тишине. Последнее время я работаю в берушах, даже если один в помещении и никто не шумит рядом. Беруши защищают от посторонних шумов за окном, от работы кулеров ноутбука или компьютера, от шума за стеной и т.д. Невозможность работать в спокойной и тихой обстановке — одна из причин, почему я завязал с работой в офисе. Я нигде в офисе не видел комфортной рабочей обстановки. Мне там всегда тяжело сосредоточиться. Даже сейчас, когда приезжаю в какой-нибудь офис, не могу ничего серьезного там делать. Откладываю на потом, в офисе выполняю текучку, ради которой приехал. Вся основная работа — только в полной тишине.

Пробовал работать в коворкингах. Прятался там в индивидуальных кабинках, которые предназначены для общения голосом. Иначе работать тоже тяжело. Открытые пространства, постоянно посторонние шумы. Все это мешает сосредоточиться. По себе заметил, что в те дни, когда мне получается поработать в уединенном месте одному в помещении, где в течении дня меня никто не отвлекает вообще, я выполняю работу, на которую уходит 2-3 дня дерганного графика.

К отвлекающим факторам автор так же относит бардак на рабочем столе и компьютере. Для продуктивной работы не должно быть ничего лишнего. Кстати, я эту фишку тоже понял некоторое время назад и обрадовался, когда в Windows 10 появились отдельные рабочие столы. Когда надо сосредоточиться на какой-то задаче, я перекидываю все необходимое на отдельный рабочий стол и там решаю задачу. Таким образом, от задачи не отвлекают даже приложения, открытые в фоне.

Еще один момент, на котором акцентируется автор. У каждого человека свое время максимальной умственной активности. Нужно выявить это время и тратить его на решение самых сложных задач. Я не знаю, когда у меня максимальная активность, не замечал. Но точно знаю, что после обеда я засыпаю даже сидя. На это время точно ничего нельзя планировать.

Если вы видите, что задачу можно делегировать, то сразу это делайте и забывайте ее. Не держите в голове не свои задачи, освобождайте ее для своих дел. Если нужно проконтролировать делегированную задачу, то сделайте себе пометку на этот счет. Вообще все всегда записывайте, даже мелочи

Это важно. Мелочи тоже нагружают мозг и расходуют энергию

Я лично давно убедился в этом и записываю все, даже не относящееся к работе:

  • Какие книги и фильмы скачать.
  • Что заказать в магазине.
  • Куда поехать с семьей в выходные.
  • Какое интересное место посетить летом.
  • Список вещей для поездки в отпуск.
  • Какую статью запланировать к написанию.

И так далее. Все эти простые вещи отнимают вашу энергию. Когда я захожу на алиэкспресс, я не начинаю перебирать в памяти, что же я хотел купить. Я просто открываю список и покупаю. Кончились книги в телефоне — открываю список и по нему загружаю новые. Надо ехать в отпуск — мне не надо ломать голову, что с собой взять, чтобы ничего не забыть. Я открываю прошлогодний список, который мог редактироваться в течении года, проверяю его и по нему собираю вещи. Это все очень облегчает жизнь, особенно, если у вас много всяких дел.

По этому разделу я не узнал ничего нового. Все, что предлагает автор я сам применяю в повседневной жизни. Было приятно получить подтверждение своим находкам. Автор с самого начала завоевал мое доверие. Так что дальше я его внимательно читал.

Английский

Английский язык, это один из основополагающих скилов для любого айтишника. Очень скоро Вы понимаете, что объем материалов на русском языке скуден. А толковых еще меньше. Если из толковых мы отберем те, что еще не успели устареть — остается просто пшик. Вот и получается, что знать английский необходимо как минимум для того, чтобы пользоваться хорошей и актуальной документацией. Читать хорошие книги на айти тематику на языке оригинала сразу после выхода в печать, а не ждать 3-5 лет, когда ее переведут ( и она устареет), если вообще дождаться перевода.

Еще одним пунктом в мотивации изучения английского языка, не только в плане чтения технической документации, но и в плане переписки, живого общения, является возможность устроиться на хорошую, высокооплачиваемую работу в международные компании.

Итак, английский знать надо. Не просто надо, а НАДО!!!! Но что делать, если у Вас с ним плохо? Учить самому. Пойти на курсы, найти репетитора… И конечно проводить самостоятельное обучение. Небольшое отступление — как понять, какой у Вас уровень английского? Вот Вам пара таблиц, описывающих наиболее популярную классификацию:

Итак, что же касается самостоятельного обучения… Я думаю с одной стороны, Вам поможет пара обучающих (а скорее посвящающих) видео от GeekBrains:

Если с базой у Вас совсем плохо ( ну мало ли что у кого было в школе) — есть много очень интересных видео курсов, например «Полиглот» — английский за 16 часов:

https://youtube.com/watch?v=y9fFDpSqKdQ

В дополнение к этому курсу видео, на том же канале есть небольшие дополнения:

  1. Повторите английский по сокращенным урокам
  2. Посмотрите тематические выпуски английского
  3. Пересмотрите расширенные уроки английского

Полезные ссылки

Как и обещал, размещаю список полезных на мой взгляд ресурсов (разделение очень условно):

  1. Блоги (людей и компаний(
    1. Записки IT специалиста — блог компании Interface31, посвященный всему подряд в системном администрировании. Очень полезен порой.
    2. Авторские статьи об OpenSource — постоянно обновляемый блог с небольшими мануалами, обзорами новостей и прочим в мире Linux и открытого ПО
    3. Блог Администратора Debian — просто блог дебианщика админа.
    4. Системное администрирование. Просто о сложном. — шикарный блог по системному администрированию. По очень разным аспектам.
    5. Losst — групповой блог (много авторов) которые пишут статьи про Linux и все около него. Очень хорошо подходит для новичков в мире Linux, для опытных администраторов и пользователей — скорее развлекательное чтиво.
    6. Блог любителя экспериментов — очень хороший но к сожалению редко обновляемый блог про виртуализацию и Linux решения. Выгодно отличается тем, что если там рассказывается про что-то, в дополнение к этому там идет неплохой теоретический материал
  2. Новостные порталы
    1. Opennet — главный сайт с новостями про мир открытых IT технологий и решений, содержащий огромный архив мануалов, технических статей и прочего.
  3. Вики
    1. xgu.ru
    2. Айти бубен
    3. Windows/Linux википедия
  4. Тематические сайты
    1. WinITPro — сайт посвященный (как утверждает автор) Windows, linux и виртуализации, однако для меня он ценен как кладезь информации именно по Windows
    2. vmgu.ru —  как уже писал выше, сайт посвященный виртуализации.
    3. Хакер — журнал про иб безопасность, однако есть два раздела, которые интересны нам- это Admin и Linuxoid
    4. oszone.net — сайт так же интересный в превую очередь с т.з. статей про Windows, а так же богатого форума
    5. ru-board — крупнейший и старейший в рунете IT форум. Тут без комментариев)

П.С. Я намеренно не указывал здесь англоязычные ресурсы, т.к. подразумевается что эта статья рассчитана на начинающих администраторов. Глупо давать ссылки  на англ ресурсы, если один из разделов статьи посвящен базовому освоению английского языка.

Двойные кавычки

Если строку или ее часть поместить в двойные кавычки, то все пробелы и переносы строк внутри будут сохранены.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

 
$ echo «test     test
>
> test»
test     test
 
test
$ echo «test test»test
test testtest
$ echo «$(cal)»
    November 2014  
Su Mo Tu We Th Fr Sa
                   1
2  3  4  5  6  7  8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30                  
$
 

Как мы видим внутри двойных кавычек работает развертывание строк. Но разворачиваются лишь подстановки, начинающиеся с символа «$» или с обратными одинарными кавычками.

Подстановки файлов по шаблону или подстановки последовательностей воспринимаются как обычные строки без их развертывания.

1
2
3
4
5

 
$ echo «* test {a,b,c}»
* test {a,b,c}
$
 

Чтобы развернуть последовательность, нужно вынести ее за пределы кавычек.

1
2
3
4
5

 
$ echo «* test «{a,b,c}
* test a * test b * test c
$
 

Как мы видим, часть, которая осталась в кавычках, была воспринята как окружающий текст (между кавычкой и фигурной скобкой не должно быть пробела). Это позволяет нам использовать пробелы и результат развертывания в окружающем тексте при подстановке последовательностей

3.2 Добавить

условное обозначение использование
>> Добавить правильный вывод
2>> Добавить вывод ошибок
&>> Добавить весь вывод

## Добавить правильный вывод ## Добавить вывод ошибок ## Добавить весь вывод

Результаты эксперимента: Содержание исходного файла — 1 строкаПосле добавления правильного вывода он становится 3 строками (включая 1 строку исходного содержимого и 2 строки правильного вывода)После добавления вывода ошибок становится 17 строк (включая 1 строку исходного содержимого, 2 строки правильного вывода и 14 строк вывода ошибок)После добавления всех выходных данных становится 33 строки (включая 1 строку исходного содержимого, 2 строки правильного вывода, 14 строк вывода ошибок, 16 строк всего вывода)

4. Трубопроводный выход

Конвейер: превратить вывод предыдущей команды во ввод следующей команды

условное обозначение использование
I Трубный персонаж
2.>&1 Преобразовать выходные числа от 1 до 2
tee Скопируйте вывод в указанное место

## По умолчанию может передаваться только правильный вывод ## Направить вывод ошибок в правильное место хранения вывода, а затем подсчитать ## Скопируйте вывод в файл, а затем передайте статистику по конвейеру.

Эксперимент 1. Подсчитайте, сколько файлов находится в / bin:

Эксперимент 2. Статистически правильный вывод:

Эксперимент 3. Вывод ошибок направляется в правильное место хранения вывода, а затем подсчитывается

test4. Скопируйте выходные данные в файл, а затем передайте статистику по конвейеру.

5. Перенаправление ввода (неинтерактивная генерация)

Экспериментальная среда: супер пользователь Как переключать суперпользователей из обычных пользователей (1) Выход из интерфейса (2) gnome-session-quit (запросит, используйте -force, чтобы не спрашивать)

условное обозначение использование
< Перенаправление одного входа
<< Перенаправление многострочного ввода

Эксперимент 1: однократное перенаправление ввода

Другие экспериментальные скриншоты:Эксперимент 2: Многострочный ввод (запись повторяющегося процесса системы)

Сети

Итак, в плане морального выбора — сети, это самый простой вопрос. Сети используются повсеместно, большинство протоколов открыты и стандартизованы, а потому имеют реализации для всех операционных систем и сетевого оборудования. Поэтому изучение сетевых технологий обязательно и в то же время полезно как для администраторов, так  и для любых других IT специалистов (например программистов- да, да). Вопрос только в том, на сколько глубоко Вы хотите (или Вам нужно) их изучить.  Итак, вначале я дам несколько рекомендаций по поводу источников для изучения. А потом уже сконцентрируюсь на том, какие технологии, аспекты, моменты ( и прочие детали) Вы должны учить.

CCNA

Итак, самый лучший ( в плане полноты, структуры, формата подачи материала и практики) является курс Cisco CCNA. Курс меняется каждые несколько лет — что-то добавляется, что-то убирается, но суть курса остается неизменной. Пройдя его, человек, который не был способен даже настроить домашний роутер, сможет планировать и строить (а так же обслуживать) довольно крупные корпоративные сети. А главное, закладывается очень прочный фундамент для дальнейшего изучения.

Большинстве системных администраторов этого курса будет более чем достаточно в их профессиональной карьере. Дальше — лишь более глубокое практическое изучение и накопление опыта. Если Вы не хотите специализироваться в сетевых технологиях, CCNA это то, что математики называют «необходимо и достаточно».

Отдельно хочу отметить, что практическая сторона курса построена на использовании эмулятора сетей Cisco Packet Tracer. Великолепная штука на мой взгляд (с точки зрения обучения).

К сожалению, найти этот курс в открытом виде довольно сложно. Официальный курс, со всеми методическими материалами, лекциями и лабораторнымис расчитан на год изучения в неспешном темпе (2 занятия в неделю по 2 академ. часа примерно). В случае интенсивного освоения его можно пройти за 3 месяца (личный опыт, закончившийся успешной сдачей на сертификат).

Альтернативой (конечно частичной и не полной) может служить т.н. «курс молодого бойца» от Компании NetSkils.

Еще одна альтернатива очному курсу- подготовка по офф. печатным руководствам. То есть книгам:

  •  Уэнделл Одом. Официальное руководство Cisco по подготовке к сертификационным экзаменам CCENT/CCNA ICND1 100-101
  •  Уэнделл Одом. Официальное руководство Cisco по подготовке к сертификационным экзаменам CCNA ICND2 200-101. 

Альтернативные варианты

Если по какой-то причине описанное выше не для Вас, я могу предложить Вам пару альтернативных вариантов.

Вариант 1 — курс от ребят с Хабрахабр «Сети для самых маленьких».  Небольшой практико-теоретический курс. Глубоких знаний не даст, но позволит немного прояснить ситуацию для себя.

Вариант 2 — изучение по книгам — их две:

  • Эндрю Таненбаум. Компьютерные сети. Очень крупный, подробный академический труд.
  • Супруги Олифер. Компьютерные сети. Это больше учебник для вузов. Но очень хорошая книжка тем не менее.

В Linux всё является файлами

Часто цитируемая фраза о том, что всё в Linux является файлом, является своего рода правдой. Файл представляет собой набор байтов. Программы и устройства (принтер, экран, клавиатура, мышь, терминал, сетевая карта) могут генерировать или принимать потоки байт, и в этом качестве они сами проявляются как файлы. Многие системные компоненты, такие как клавиатуры, сокеты, принтеры и коммуникационные процессы, принимают или генерируют потоки байтов. Поскольку они принимают, генерируют или принимают и генерируют потоки байтов, эти устройства могут обрабатываться — на очень низком уровне — как файлы. Кроме обычных файлов, файлами также являются директории (папки), сетевые сокеты (подключения по сети), устройства (диски, терминалы, клавиатура, мышь и прочее — это всё файлы), pipe (технология обмена данными между процессами).

Эта концепция устройства упростила реализацию операционной системы Unix. Это означало, что небольшой набор обработчиков, инструментов и API-интерфейсов может быть создан для обработки широкого спектра различных ресурсов.

Файлы данных и программ, которые находятся на вашем жёстком диске, являются обычными файлами файловой системы. Мы можем использовать команду ls, чтобы вывести их и узнать некоторые детали о них. Но как мы узнаем обо всех других процессах и устройствах, которые рассматриваются как файлы? Для этого используется команда lsof. Она выводит списки открытых файлов в системе. То есть она перечисляет всё, что обрабатывается, как если бы это был файл.

Перенаправление сообщений об ошибках

А что же произойдёт, если ваша команда выдала ошибку? Сам текст ошибки не является стандартным выводом, результатом корректной работы команды. Поэтому в Unix есть отдельное понятие для потока ошибок: STDERR.

Это, на самом деле, очень умная штука в Unix/Linux системах: сообщения об ошибках будут считаться отдельным типом текстовой информации. Так что в консоли вы видите и ошибки, и сами результаты команды, идущими подряд. Но для операционной системы они являются двумя отдельными потоками данных.

Вот вам пример, я пытаюсь посмотреть содержимое не существующего файла:

Эта строчка “cat: /tmp/try.hello3: No such file or directory” является сообщением об ошибке, а не выводом содержимого файла /tmp/try.hello3. Поэтому, когда я перенаправлю стандартный вывод в другой файл, ничего не произойдёт (в файл вывода /tmp/redirected.out ничего не запишется) :

Здорово, правда?

Для того, чтобы заполучить и перенаправить сообщения об ошибке, нужно воспользоваться специальным синтаксисом перенаправления. А именно: указать цифру 2 перед знаком перенаправления >, вот так:

Произошло сразу две интересных вещи:

  1. Наша команда cat не показала никакого стандартного вывода. Это логично: файл не найдет, поэтому ничего не было прочитано. А сообщение об ошибке теперь перенаправлено в файл /tmp/redirected.out.
  2. В файле /tmp/redirected.out теперь хранится наше сообщение об ошибке

Для первого поста на эту дему – вполне достаточно. Добавлю часть этого контента в Unix Redirects Reference страницу и как-нибудь расскажу ещё.

Всем пока!

Примеры перенаправления ввода-вывода

Теперь, когда вы ознакомились с основными понятиями и механизмами перенаправления, рассмотрим несколько базовых примеров их использования.

команда > файл

Такой шаблон перенаправляет стандартный вывод команды в файл.

Эта команда передает содержимое root каталога системы в качестве стандартного вывода и записывает вывод в файл root_dir_contents. Это удалит все предыдущее содержимое в файле, так как в команде использована одна угловая скобка.

команда > /dev/null

/dev/null – это специальный файл (так называемое «пустое устройство»), который используется для подавления стандартного потока вывода или диагностики, чтобы избежать нежелательного вывода в консоль. Все данные, попадающие в /dev/null, сбрасываются. Перенаправление в /dev/null обычно используется в сценариях оболочки.

Такая команда сбрасывает стандартный выходной поток, возвращаемый командой ls, передав его в /dev/null.

команда 2 > файл

Этот шаблон перенаправляет стандартный поток ошибок команды в файл, перезаписывая его текущее содержимое.

Эта команда перенаправит ошибку, вызванную неверным именем каталога, и запишет её в log.txt

Обратите внимание: ошибка по-прежнему отображается в терминале

команда >> файл

Этот шаблон перенаправляет стандартный выход команды в файл, не переписывая текущего содержимого файла.

Эта пара команд сначала перенаправляет вводимый пользователем текст в новый файл, а затем вставляет его в существующий файл, не переписывая его содержимого.

команда 2>>файл

Этот шаблон перенаправляет стандартный поток ошибок команды в файл, не перезаписывая существующего содержимого файла. Он подходит для создания логов ошибок программы или сервиса, поскольку содержимое лога не будет постоянно обновляться.

Приведенная выше команда перенаправляет сообщение об ошибке, вызванное неверным аргументом find, в файл stderr_log.txt, а затем добавляет в него сообщение об ошибке, вызванной недействительным аргументом wc.

команда | команда

Этот шаблон перенаправляет стандартный выход первой команды на стандартный вход второй команды.

Эта команда ищет в каталоге /var и его подкаталогах имена файлов и расширения deb и возвращает пути к файлам, выделяя шаблон поиска красным цветом.

команда | tee файл

Такой шаблон перенаправляет стандартный вывод команды в файл и переписывает его содержимое, а затем отображает перенаправленный выход в терминале. Если указанного файла не существует, он создает новый файл.

В данном шаблоне команда tee, как правило, используется для просмотра вывода программы и одновременного сохранения его в файл.

Такая команда передаёт количество символов, строк и слов в файле magic (Linux использует его для определения типов файлов) команде tee, которая отправляет эти данные в терминал и в файл magic_count.txt.

команда | команда | команда >> файл

Этот шаблон перенаправляет стандартный вывод первой команды и фильтрует ее через следующие две команды, а затем добавляет окончательный результат в файл.

Такая команда отправляет вывод ls для каталога root команде grep. В свою очередь, grep ищет в полученных данных файлы tar. После этого результат grep передаётся команде tr, которая заменит все символы е символом Е. Полученный результат будет добавлен в файл ls_log.txt (если такого файла не существует, команда создаст его автоматически).

Потоки ввода-вывода

Ввод и вывод в окружении Linux распределяется между тремя потоками:

  • Стандартный ввод (standard input, stdin, поток номер 0)
  • Стандартный вывод (standard output, stdout, номер 1)
  • Стандартная ошибка, или поток диагностики (standard error, stderr, номер 2)

При взаимодействии пользователя с терминалом стандартный ввод передается через клавиатуру пользователя. Стандартный вывод и стандартная ошибка отображаются на терминале пользователя в виде текста. Все эти три потока называются стандартными потоками.

Стандартный ввод

Стандартный входной поток обычно передаёт данные от пользователя к программе. Программы, которые предполагают стандартный ввод, обычно получают входные данные от устройства (например, клавиатуры). Стандартный ввод прекращается по достижении EOF (end-of-file, конец файла). EOF указывает на то, что больше данных для чтения нет.

Чтобы увидеть, как работает стандартный ввод, запустите программу cat. Название этого инструмента означает «concatenate» (связать или объединить что-либо). Обычно этот инструмент используется для объединения содержимого двух файлов. При запуске без аргументов cat открывает командную строку и принимает содержание стандартного ввода.

Теперь введите несколько цифр:

Вводя цифру и нажимая enter, вы отправляете стандартный ввод запущенной программе cat, которая принимает эти данные. В свою очередь, программа cat отображает полученный ввод в стандартном выводе.

Пользователь может задать EOF, нажав ctrl-d, после чего программа cat остановится.

Стандартный вывод

Стандартный вывод записывает данные, сгенерированные программой. Если стандартный выходной поток не был перенаправлен, он выведет текст в терминал. Попробуйте запустить следующую команду для примера:

Команда echo без дополнительных опций отображает на экране все аргументы, переданные ей в командной строке.

Теперь запустите echo без аргументов:

Команда вернёт пустую строку.

Стандартная ошибка

Этот стандартный поток записывает ошибки, создаваемые программой, которая вышла из строя. Как и стандартный вывод, этот поток отправляет данные в терминал.

Рассмотрим пример потока ошибок команды ls. Команда ls отображает содержимое каталогов.

Без аргументов эта команда возвращает содержимое текущего каталога. Если указать в качестве аргумента ls имя каталога, команда вернёт его содержимое.

Поскольку каталога % не существует, команда вернёт стандартную ошибку:

Заключение

Системный администратор – это тот человек, без которого невозможно представить крупную корпорацию. Его работа может быть и незаметна, а вот отсутствие специалиста сильно бьет по компании. Мудрые и опытные руководители не экономят на сисадмине и хотят видеть в штате профессионала.

Если ваша цель – это высокая заработная плата и престижная должность, то не теряйте времени и начинайте учиться и приобретать навыки системного администратора как можно скорее. Но только при условии, что у вас лежит душа к техническим направлениям деятельности и есть любовь к компьютерному оборудованию.

Сохраняйте статью, делитесь ею с друзьями и не забывайте знакомиться с новыми публикациями блога iklife.ru.

Еще увидимся, друзья!

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: