По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Операционные системы Unix традиционно используют такие понятия, как стандартный ввод, вывод и вывод ошибки. Чаще всего ввод — это клавиатура, а вывод это на кран. Но конечно же мы можем выводить исполнение какой-то команды в файл и передавать другой команде, потому что работая в Linux, создается такая последовательность из команд, т.е результат предыдущей мы отправляем следующей и т.д Целью данной статьи является рассмотреть: Перенаправление стандартных ввода, вывода и ошибок; Передача вывода одной команды в качестве аргументов другой; Получение выходных данных в файл и на стандартный вывод; Основные понятия: Stdin (0) – ввод Stdout(1) – вывод Stderr (2) – вывод ошибки > - передать в >> - дописать в list.txt. По сути означает выполнить команду, а результат передать в файл. Фал можно посмотреть командой cat list.txt. И мы можем убедится, что в данном файле находится перечень, всего что находилось в данной папке. Если мы выполним еще раз команду ls > list.txt, то данный файл каждый раз будет перезаписываться. Если же мы хотим, чтобы наш файл не перезаписывался, а дописывался, используем другую стрелочку ls >> list.txt. И теперь вы можете видеть, что файл стал больше. Т.е. у нас записалось, то что было, а затем еще раз добавилось. Если опять выполнить команду со стрелочками >> , то опять допишется информация в файл. Вот таким образом работают “стрелочки”. Стандартный вывод ошибок. Мы можем, например, сказать машине, выведи нам содержимое папки bob, которая не существует ls bob > result.txt, естественно мы получим ошибку которую система вывела на экран. Экран является стандартным выводом ошибок. В нашем случае нет папки bob и нет файла resut.txt. Если мы хотим отправить ошибку в файл, так же как результат выполнения команды, то ls bob 2> result.txt, вспоминаем основные понятия, в которых было указанно, что 2 – это стандартный вывод ошибки. Следовательно, на экране мы уже не видим ошибки, потому что она отправилась в указанный файл. Кстати мы можем объединить стандартный вывод команды и стандартный вывод ошибки. Например: ls bob > result.txt 2> error.txt. Выведи содержимое папки bob в файл result.txt, а если возникнет ошибка внеси в файл error.txt. В таком случае и команда выполнится и что-то будет в файле и если ошибка возникнет, то она будет записана в файл error.txt. Это можно применять на практике, когда мы что-то делаем и предполагаем, что в процессе выполнения возникнут ошибки, то используя данную конструкцию данные ошибки мы все можем отправить в отдельный файл. Конвейер Конвейер умеет передавать выходные данные из одной программы, как входные данные для другой. Т.е. выполняется команда, мы получаем результат и передаем эти данные далее на обработку другой программе. Например, выполнить команду ls и далее мы могли стрелочкой отправлять результаты выполнения команды в файл, т.е. мы меняли только стандартный вывод, а не передавали другой программе. А можем выполнить ls | grep r , т.е. получить содержимое и передать по конвейеру команде сортировки и сказать отсортировать по наличию буквы r, а если перенаправить еще вывод в файл, то cat имя файла , мы сможем увидеть информацию в файле. Но есть другая команда tee которая позволяет работать немного удобнее. Например: ls | tee output.txt. Те данная команда выводит информацию сразу на экран и в указанный файл. Что достаточно удобно с точки зрения работы с выводами. И еще одна команда xargs – она построчно работает с выводами. Если у нас есть какая-то команда, которая выдает нам вывод в виде нескольких строк ответа, то мы можем эти строки построчно передавать этой команде, т.е. не одной кашей, а построчно. Например find . –name “*.txt” найти все файлы в текущем каталоге с расширением txt. И если бы мы захотели удалить все эти файлы нам бы пришлось построчно их удалять, но мы можем сказать, чтобы выходные данные были переданы по конвейеру xargs и удалить. find . –name “*.txt” | xargs rm -f Как видите после данной конструкции команд файлов не осталось. Т.е. данные построчно передались на команду удаления, которая построчно каждый файл с ключом –f (принудительно) их и удалила.
img
Чтобы начать наше знакомство с регулярными выражениями, давайте взглянем на них поближе. Регулярные выражения являются шаблоном, который выполняет сравнение последовательности текста слева направо. Выражние "регулярные выражения" используют не очень часто, чаще всего применяют "regex" либо "regexp". В общем и целом, регулярные выражения предназначены для изменения текста в строке, а также они выполняют проверку некоторых форм, и т.д. К примеру, у вас в разработке ведется некое приложение, и вам понадобилось выявить какие-то правила, по которым юзер уже будет выбирать собственное наименование. Важным условием будет ограничение в количестве символов и написании самого имени, которое должно состоять из букв, цифр, дефиса и нижнего подчеркивания. Для того, чтобы решить данную задачу, можно воспользоваться представленным ниже решением: john_doe; jo-hn_doe; john12_as. Но если наименование юзера будет состоять из прописной буквы, например Jo, то оно никак не будет соответствовать данному условию. Основные совпадения Регулярные выражения являются шаблоном, который состоит из неких символов, с помощью которого разработчики выполняют поиск в тексте. К примеру, условие "The" будет означать букву "t", за которой идет "h", затем - "e". "the" => The fat cat sat onthemat. Метасимволы Строительными блоками регулярных выражений являются метасимволы, которые являются независимыми, и обычно используются любыми способами. Некоторое количество из них могут иметь особое предназначение, поэтому они выделяются квадратными скобками. Ниже вы можете ознакомиться с метасимволами. Метасимволы Описание . Любой единичный символ, исключая новую строку. [ ] Поиск набора символов, помещенных в скобки. [^ ] Отрицательный класс символов. Соответствует любому символу, не заключенному в квадратные скобки. * 0 или больше повторений предшествующего символа. + 1 или больше повторений предшествующего символа. ? Делает предшествующий символ опциональным. {n,m} Возвращает как минимум "n", но не более "m" повторений предшествующего символа. (xyz) Находит группу символа в строго заданном порядке. | Разделяет допустимые варианты. Исключает следующий символ. Позволяет искать служебные символы [ ] ( ) { } . * + ? ^ $ | ^ Находит начало введенной строки. $ Находит конец введенной строки. Сокращения для обозначения символов В регулярных выражениях также существуют некоторые сокращения для символов, что в несколько раз повышает комфортность при работе. Ниже приведен список сокращений: Сокращение Описание . Любой символ, кроме новой строки w Соответствует буквенно-цифровым символам: [a-zA-Z0-9_] W Соответствует не буквенно-цифровым символам: [^w] d Соответствует цифрам: [0-9] D Соответствует нецифровым знакам: [^d] s Соответствует знаку пробела: [ f p{Z}] S Соответствует символам без пробела: [^s] Look Around Позиционная проверка Look Around представляет собой набор некоторых групп, которые предназначены для поиска в тексте, но сами в него не входят. Позиционная проверка используется в том случае, если в определенном условии существует шаблон, который либо предшествует, либо идет следующим. Символ Описание ?= Положительный Lookahead ?! Отрицательный Lookahead ?<= Положительный Lookbehind ? Отрицательный Lookbehind Флаги Флаги также часто называют модификаторами, так как они могут изменять выходные данные регулярного выражения. Флаги ниже являются неотъемлемой частью и могут использоваться в любом порядке или комбинации регулярных выражений. Флаг Описание i Нечувствительность к регистру: делает выражение нечувствительным к регистру. g Глобальный поиск: поиск шаблона во всей строке ввода. m Многострочность: анкер метасимвола работает в каждой строке. Жадные vs. ленивые выражения По умолчанию регулярные выражения выполняются благодаря "жадным" квантификаторам, им соответствует максимально длинная строка из всех возможных. "/(.*at)/" => The fat cat sat on the mat. Чтобы получить "ленивое" выражение, нужно использовать знак "?". Так будет получена максимально короткая строка. "/(.*?at)/" => The fat cat sat on the mat.
img
В этой заключительной статье о перераспределении маршрутов мы проверим работу Route redistribution с помощью IPv6 и увидим небольшое отличие в настройке routes redistributed IPv6 от routes redistributed IPv4. Предыдущие статьи из цикла: Часть 1. Перераспределение маршрутов (Route redistribution) Часть 2. Фильтрация маршрутов с помощью карт маршрутов Часть 3. Перераспределение маршрутов между автономными системами (AS) Перераспределение подключенных сетей Во-первых, рассмотрим маршрутизатор, выполняющий маршрутизацию, предположим, что используется протокол OSPF. Кроме того, предположим, что маршрутизатор имеет несколько интерфейсов, которые участвуют в маршрутизации OSPF. Представьте, что на этом же маршрутизаторе мы запускаем другой протокол маршрутизации (скажем, EIGRP), и мы делаем взаимное перераспределение маршрутов. Вот что удивительно. Если мы делаем перераспределение маршрута на этом маршрутизаторе, сети IPv4, связанные с интерфейсами этого маршрутизатора, участвующими в OSPF в нашем примере, будут перераспределены в EIGRP. Однако сети IPv6, будут вести себя по-другому. В частности, в сетях IPv6 мы должны ввести дополнительный параметр в нашу конфигурацию перераспределения маршрутов, явно указывая, что мы хотим перераспределить подключенные сети. В противном случае эти маршруты IPv6, связанные с непосредственно с подключенными интерфейсами, не перераспределяются. Логика такого поведения вытекает из понимания того, что для перераспределения маршрута данный маршрут должен появиться в таблице IP-маршрутизации маршрутизатора. Конечно, когда посмотрим таблицу IP-маршрутизации маршрутизатора и увидим непосредственно подключенные сети, эти сети отображаются как подключенные сети, а не сети, которые были изучены с помощью определенного протокола маршрутизации. В то время как route redistribution для IPv4 понимает, что сеть напрямую подключена, но участвует в процессе маршрутизации и поэтому будет перераспределена, route redistribution для IPv6 не делает такого предположения. В частности, если мы перераспределяем сети IPv6 из одного протокола маршрутизации в другой, эти сети должны отображаться в таблице маршрутизации IPv6 маршрутизатора вместе с указанием, что они были изучены с помощью перераспределяемого протокола маршрутизации. Конечно, мы можем добавить дополнительный параметр к нашей команде redistribute, чтобы заставить эти непосредственно подключенные сети IPv6 (участвующие в распространяемом протоколе) также быть перераспределенными. Эта настройка будет продемонстрирована немного позже. Перераспределение в OSPF В прошлой статье мы обсуждали потенциальную проблему, с которой вы можете столкнуться при распространении в OSPF (в зависимости от вашей версии Cisco IOS). Проблема была связана с подсетями. В частности, по умолчанию в более старых версиях Cisco IOS OSPF только перераспределяет классовые сети в OSPF, если мы не добавим параметр subnets к команде redistribute. Добавление этого параметра позволило перераспределить сети в OSPF, даже если у них не было классовой маски. Пожалуйста, имейте в виду, что последние версии Cisco IOS автоматически добавляют параметр подсети, не требуя от вас ручного ввода. Однако параметр подсети в IPv6 route redistribution отсутствует. Причина в том, что IPv6 не имеет понятия о подсетях. Пример route redistribution IPv6 Чтобы продемонстрировать перераспределение маршрутов IPv6, рассмотрим следующую топологию: Протоколы маршрутизации OSPFv3 и EIGRP для IPv6 уже были настроены на всех маршрутизаторах. Теперь давайте перейдем к маршрутизатору CENTR и настроим взаимное route redistribution между этими двумя автономными системами. Убедимся в этом, проверив таблицу маршрутизации IPv6 маршрутизатора CENTR. Приведенные выше выходные данные показывают, что мы изучили две сети IPv6 через OSPF, две сети IPv6 через EIGRP, а CENTR напрямую подключен к двум сетям IPv6. Далее, давайте настроим взаимное перераспределение маршрутов между OSPFv3 и EIGRP для IPv6. CENTR # conf term Enter configuration commands, one per line. End with CNTL/Z. CENTR (config)# ipv6 router eigrp 1 CENTR (config-rtr) # redistribute ospf 1 metric 1000000 2 255 1 1500? include-connected Include connected match Redistribution of OSPF routes route-map Route map reference cr CENTR (config-rtr) #redistribute ospf 1 metric 1000000 2 255 1 1500 include-connected CENTR (config-rtr) #exit CENTR (config) # ipv6 router ospf 1 CENTR (config-rtr) #redistribute eigrp 1? include-connected Include connected metric Metric f or redistributed routes metric-type OSPF/IS-IS exterior metric type for redistributed routes nssa-only Limit redistributed routes to NSSA areas route-map Route map reference tag Set tag for routes redistributed into OSPF cr CENTR (config-rtr) #redistribute eigrp 1 include-connected CENTR (config-rtr) #end CENTR# Обратите внимание, что конфигурация взаимного перераспределения маршрутов, используемая для маршрутов IPv6, почти идентична нашей предыдущей конфигурации для перераспределения маршрутов IPv4. Однако для обеих команд перераспределения был указан параметр include-connected. Это позволило маршрутизатору CENTR перераспределить сеть 2003::/64 (непосредственно подключенную к интерфейсу Gig0/1 маршрутизатора CENTR и участвующую в OSPF) в EIGRP. Это также позволило маршрутизатору CENTR перераспределить сеть 2004::/64 (непосредственно подключенную к интерфейсу Gig0/2 маршрутизатора CENTR и участвующую в EIGRP) в OSPF. Чтобы убедиться, что наша конфигурация рабочая, давайте перейдем на оба маршрутизатора OFF1 и OFF2, убедившись, что каждый из них знает, как достичь всех шести сетей IPv6 в нашей топологии. Вышеприведенные выходные данные подтверждают, что маршрутизаторы OFF1 и OFF2 знают о своих трех непосредственно связанных маршрутах и трех маршрутах, перераспределенных в процессе маршрутизации. Итак, как мы видим, что когда речь заходит о routes redistributed IPv6, то не так уж много нового нужно узнать по сравнению с routes redistributed IPv4.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59