По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В 2012 году Джим Роскинд разработал новый транспортный протокол, основной целью которого было увеличение скорости, с которой данные могут передаваться по относительно стабильным высокоскоростным сетям. В частности: Сокращение трехстороннего рукопожатия до запуска одного пакета (нулевое рукопожатие) Уменьшение количества повторно передаваемых пакетов, необходимых для передачи данных Уменьшение блокировки заголовка между несколькими потоками данных в пределах одного потока TCP, вызванной потерей пакетов Уменьшение рукопожатия при запуске Как правило, значение rtt нельзя изменить, поскольку оно обычно ограничено физическим расстоянием и скоростью соединения между отправителем и получателем. Таким образом, один из лучших способов сократить общее время передачи данных - просто уменьшить количество циклов обмена, необходимых между отправителем и получателем для передачи заданного потока или блока данных. QUIC разработан для сокращения количества циклов приема-передачи, необходимых для установки нового соединения, от трехстороннего подтверждения TCP до процесса запуска с нулевым временем приема-передачи. Для этого QUIC использует серию криптографических ключей и хэшей; процесс состоит из: Клиент отправляет серверу приветствие (CHLO), содержащее требование подтверждения, которое представляет собой список типов сертификатов, которые клиент примет для проверки идентичности сервера; набор сертификатов, к которым у клиента есть доступ; и хэш сертификата, который клиент намеревается использовать в этом соединении. Одно конкретное поле, маркер адреса источника (STK) будет оставлено пустым, потому что раньше с этим сервером не было связи. Сервер будет использовать эту информацию для создания STK на основе информации, предоставленной в первоначальном приветствии клиента и исходном IP-адресе клиента. Сервер отправляет отклонение (REJ), которое содержит этот STK. Как только клиент получает STK, он включает его в будущие пакеты приветствия. Если STK совпадает с ранее использованным STK с этого IP-адреса, сервер примет приветствие. Примечание: Эта пара IP-адрес / STK может быть украдена, и, следовательно, исходный IP-адрес может быть подменен злоумышленником с доступом к любой связи с этой парой. Это известная проблема в QUIC, которая рассматривается в документации QUIC. Для сравнения, TCP требует, как минимум полтора rtts для создания нового сеанса: SYN, SYN-ACK, а затем следующий ACK. Сколько времени экономит при переходе на одно соединение rtt? Конечно, это зависит от реализации клиентского и серверного приложений. Однако многие веб-страницы и приложения для мобильных устройств должны подключаться к множеству разных серверов (возможно, к сотням) для создания единой веб-страницы. Если каждое из этих подключений уменьшить с полутора до одного RTT, это может значительно снизить производительность. Сокращение повторных передач QUIC использует ряд различных механизмов для уменьшения количества повторно передаваемых пакетов: Включая Forward Error Correction (FEC) во все пакеты; это позволяет получателю (часто) восстанавливать поврежденную информацию, а не запрашивать ее повторно. Использование отрицательных подтверждений (NACK) вместо SACK или механизма тройного ACK для запроса повторной передачи определенных порядковых номеров; это предотвращает неоднозначность между запросом на повторную передачу и условиями сети, которые вызывают отправку нескольких подтверждений. Использование быстрых подтверждений, как описано ранее для TCP. Использование управления окном предотвращения перегрузки CUBIC. Механизм предотвращения перегрузки CUBIC - самый интересный из них. CUBIC пытается выполнить двоичный поиск между последним размером окна перед отбрасыванием пакета и некоторым меньшим размером окна, рассчитанным с использованием множительного коэффициента. Когда обнаруживается потеря пакета (либо через тайм-аут RTO, либо через NACK), максимальный размер окна (WMAX) устанавливается равным текущему размеру окна, и вычисляется новый минимальный размер окна (WMIN). Окно отправителя устанавливается на WMIN, а затем быстро увеличивается до размера окна посередине между WMIN и WMAX. Как только окно достигает этой средней точки, размер окна очень медленно увеличивается при так называемом зондировании, пока не встретится следующий сброс пакета. Этот процесс позволяет CUBIC находить максимальную скорость передачи чуть ниже точки, в которой сеть начинает довольно быстро отбрасывать пакеты. Исключение блокировки начала строки "Единая транзакция" в Интернете часто является не "отдельной транзакцией", а скорее большим набором транзакций на нескольких разных серверах. Например, чтобы создать единую веб-страницу, сотни элементов, таких как изображения, скрипты, элементы каскадной таблицы стилей (CSS) и файлы языка гипертекстовой разметки (HTML), должны быть переданы с сервера на клиент. Эти файлы можно передавать двумя способами: последовательно или параллельно. Рисунок 1 иллюстрирует это. На рисунке 1 показаны три варианта передачи нескольких элементов от сервера к клиенту: В serialized варианте элементы передаются по одному в течение одного сеанса. Это самый медленный из трех возможных вариантов, так как вся страница должна быть построена поэлементно, при этом меньшие элементы ждут передачи больших, прежде чем их можно будет отобразить. В варианте с несколькими потоками (multiple streams) каждый элемент передается через отдельное соединение (например, сеанс TCP). Это намного быстрее, но требует создания нескольких подключений, что может негативно повлиять на ресурсы клиента и сервера. В мультиплексном (multiplexed) варианте каждый элемент передается отдельно через одно соединение. Это позволяет передавать каждый элемент с его собственной скоростью, но с дополнительными расходами ресурсов из-за опции нескольких потоков. Некоторые формы механизма мультиплексной передачи имеют тенденцию обеспечивать максимальную скорость передачи при наиболее эффективном использовании ресурсов, но как это мультиплексирование должно быть реализовано? Протокол передачи гипертекста версии 2 (HTTPv2) позволяет веб-серверу мультиплексировать несколько элементов в одном сеансе HTTP; поскольку HTTP работает поверх TCP, это означает, что один поток TCP может использоваться для параллельной передачи нескольких элементов веб-страницы. Однако один отброшенный пакет на уровне TCP означает, что каждая параллельная передача в потоке HTTP должна быть приостановлена на время восстановления TCP. QUICK решает эту проблему, позволяя нескольким потокам HTTP v2 находиться в одном быстром соединении. Это уменьшает транспортные издержки на клиенте и сервере, обеспечивая при этом оптимальную доставку элементов веб - страницы. Обнаружение MTU пути Одним из основных вопросов спора между асинхронным режимом передачи (ATM) и интернет-протоколом (IP) был фиксированный размер ячейки. В то время как IP-сети полагаются на пакеты переменной длины, ATM, чтобы обеспечить более высокую скорость коммутации и улучшить взаимодействие с множеством различных физических уровней Time Division Multiplexing (TDM), задал ячейки фиксированной длины. В частности, IPv4 обеспечивает не только пакет переменной длины, но и фрагментацию в процессе передачи. Рисунок 2 иллюстрирует это. На рис. 2 показано, что если A посылает пакет в направлении E, то какого размера он должен быть? Единственный канал, о котором действительно знает А, - это канал между собой и В, которое помечено как имеющее максимальный размер блока передачи 1500 октетов (Maximum Transmission Unit- MTU). Однако если A отправляет пакет длиной 1500 октетов, то этот пакет не сможет пройти через канал [C,D]. Есть два способа решить эту проблему. Первый заключается в том, что C фрагментирует пакет на два меньших пакета. Это возможно в IPv4; C может определить, что пакет не поместится на следующем канале, по которому пакет должен быть передан, и разбить пакет на два меньших пакета. Конечно, с этим решением есть ряд проблем. Например, процесс фрагментации пакета требует гораздо больше работы со стороны C, возможно, даже перемещение пакета из аппаратного пути коммутации в программный путь коммутации. Во-вторых, A никогда не отправляет пакет, превышающий минимальный MTU, по всему пути к E. Для этого A должен определить минимальный MTU на пути, и он должен иметь возможность фрагментировать информацию, отправляемую из протоколов верхнего уровня на несколько пакетов перед передачей. IPv6 выбирает этот последний вариант, полагаясь на обнаружение Path MTU (PMTU), чтобы найти минимальный MTU на пути (при условии, что PMTU действительно работает), и позволяя процессу IPv6 в A фрагментировать информацию из протоколов верхнего уровня на несколько пакетов, которые затем повторно собираются в исходный блок данных верхнего уровня в приемнике. Это решение, однако, также является проблемным. В недавней работе с системой доменных имен (DNS) исследователи обнаружили, что около 37% всех DNS- resolvers отбрасывают фрагментированные пакеты IPv6. Почему это происходит? Самый простой способ понять это-рассмотреть структуру фрагментированного пакета, а также природу DoS и DDoS атак. При передаче пакета, в пакет помещается заголовок, указывающий принимающую услугу (номер сокета или протокола какого-либо рода), а также информацию о передаваемой услуге. Эта информация важна для фильтрации пакета на основе различных политик безопасности, особенно если политика безопасности гласит: "разрешать только пакеты инициации сеанса в сеть, если пакет не принадлежит существующему сеансу." Другими словами, типичный фильтр с отслеживанием состояния, защищающий сервер, будет иметь некоторые основные правила, которым он следует: Если пакет инициирует новый сеанс, пересылайте его и создайте новую запись сеанса. Если пакет является частью существующего сеанса, перенаправьте его и сбросьте таймер сеанса. Если пакет не является частью существующего сеанса, отбросьте его. Время от времени очищайте старые сеансы. Возможно подделать пакет, похожий на настоящий, но это очень сложно, т.к. используются различные nonce и другие методы, чтобы препятствовать подобному поведению. Но фрагментация пакета удаляет заголовок из второй половины пакета, что фактически означает, что второй пакет во фрагментированной паре может быть присоединен только к определенному сеансу или потоку, отслеживая часть пакета, которая имеет полный заголовок. Как маршрутизатор или middlebox могут выполнить это? Он должен каким-то образом хранить копию каждого фрагмента пакета с заголовком где-нибудь в памяти, чтобы на пакет с заголовком можно было ссылаться для обработки любых будущих фрагментов. Как долго он должен хранить эти фрагменты с заголовками? На это нет ответа. Проще просто отбросить любые фрагменты, чем поддерживать состояние, необходимое для их обработки. Каков результат? Похоже, что даже фрагментация на основе исходного кода не очень полезна на уровне IP. Это должно напомнить об одном из основополагающих принципов пакета Интернет-протоколов: end-to-end принципе. End-to-end принцип гласит, что сеть не должна изменять трафик, передаваемый между двумя оконечными устройствами; или, скорее, сеть должна работать как черный ящик, соединяющий два устройства, никогда не изменяя данные, полученные от конечного хоста. Означает ли это, что вся фильтрация трафика должна быть запрещена в общедоступном Интернете, всерьез навязывая end-to-end правило, оставляя всю безопасность конечным хостам? Это представляет собой первоначальное обсуждения фильтрации пакетов в IPv6 с отслеживанием состояния. Однако это менее реалистичный вариант; более сильная защита - это не один идеальный файрволл, а скорее серия неидеальных файрволлов. Другая альтернатива - принять еще одну частичку реальности, о которой часто забывают в мире сетевой инженерии: утечка абстракций. Сквозной принцип описывает идеально абстрактную систему, способную передавать трафик от одного хоста к другому, и совершенно абстрагированный набор хостов, между которыми переносится трафик. Но утекают все нетривиальные абстракции; проблема MTU и фрагментации - это просто утечка состояния из сети в хост, а система на хосте пытается абстрагировать эту утечку в приложение, отправляющее трафик по сети. В такой ситуации лучше всего просто признать утечку и официально отправить информацию в стек, чтобы приложение могло лучше принять решение о том, как отправлять трафик. Другая альтернатива-принять еще одну частицу реальности, часто забываемую в мире сетевой инженерии: утечку абстракций. Сквозной принцип описывает идеально абстрагированную систему, способную передавать трафик от одного хоста к другому, и идеально абстрагированный набор хостов, между которыми осуществляется трафик. Но все нетривиальные абстракции протекают; проблема MTU и фрагментации-это просто утечка состояния из сети в хост, и система на хосте пытается абстрагировать эту утечку в приложение, отправляющее трафик по сети. В такой ситуации, возможно, лучше всего просто признать утечку и официально продвинуть информацию вверх по стеку, чтобы приложение могло принять лучшее решение о том, как отправлять трафик. Но это приводит к еще одному интересному вопросу для размышления: является ли описанная здесь фильтрация состояний предательством end-to-end принципа? Ответ зависит от того, считаете ли вы протокол верхнего уровня, отправляющий данные, конечной точкой, или систему, на которой работает приложение (следовательно, включая сам стек IP), конечной точкой. Так или иначе, эта двусмысленность преследовала Интернет с самых ранних дней, хотя мир сетевой инженерии не всегда серьезно задумывался о разнице между этими двумя точками зрения. ICMP Хотя транспортные протоколы, такие как TCP и QUIC, обычно привлекают наибольшее внимание среди протоколов среднего уровня, существует ряд других протоколов, которые не менее важны для работы сети на основе IP. Среди них - протокол ICMP, который, можно сказать, предоставляет метаданные о самой сети. ICMP - это простой протокол, который используется для запроса информации о конкретном состоянии или для отправки сетевыми устройствами информации о том, почему определенный пакет отбрасывается в какой-либо точке сети. В частности: ICMP может использоваться для отправки эхо-запроса или эхо-ответа. Эта функция используется для проверки связи с конкретным адресом назначения, который можно использовать для определения доступности адреса без использования слишком большого количества ресурсов на приемнике. ICMP можно использовать для отправки уведомления об отброшенном пакете из-за того, что он слишком велик для передачи по каналу (слишком большой пакет). ICMP может использоваться для отправки уведомления о том, что пакет был отброшен, поскольку его время жизни (TTL) достигло 0 (срок действия пакета истек при передаче). Ответ на слишком большой пакет можно использовать для определения максимального размера передаваемого блока (MTU) в сети; отправитель может передать большой пакет и дождаться, чтобы увидеть, не отправит ли какое-либо устройство в сети уведомление о слишком большом пакете через ICMP. Если такое уведомление приходит, отправитель может попробовать постепенно уменьшать пакеты, чтобы определить самый большой пакет, который может быть передан из конца в конец по сети. Ответ с истекшим транзитом может использоваться для отслеживания маршрута от источника до пункта назначения в сети (это называется трассировкой маршрута). Отправитель может передать пакет в конкретное место назначения, используя любой протокол транспортного уровня (включая TCP, UDP или QUIC), но с TTL равным 1. Сетевое устройство первого перехода должно уменьшить TTL и отправить обратно ICMP-сообщение с истекшим сроком действия в транзитном уведомлении отправителю. Отправляя серию пакетов, каждый с TTL на один больше, чем предыдущий, каждое устройство на пути может быть вынуждено передать отправителю сообщение ICMP с истекшим сроком действия в транзитном уведомлении, открывая весь путь пакета.
img
Существует множество различных решений для управления Asterisk, основой которых, является FreePBX. К ним относятся - Elastix, PBX in a Flash (PIAF), Trixbox, AsteriskNOW и FreePBX Distro. Однако, с момента первого релиза FreePBX многое изменилось и большинство перечисленных проектов по-просту перестали существовать. Trixbox перестал поддерживать открытое ПО и переориентировался на коммерческую редакцию Trixbox Pro. Elastix и PIAF вообще дружно сменили свой движок с Asterisk на 3CX и для этих продуктов обновлений также больше нет. Кроме того, есть компании, которые до сих пор используют старые не поддерживаемые версии FreePBX и ежедневно испытывают трудности с их работой, а также те, кто установил FreePBX вручную на не поддерживаемые операционные системы. Единственный продукт, который до сих пор обновляется и поддерживается разработчиком - это сам проект FreePBX и FreePBX Distro. Принимая это во внимание, разработчики FreePBX создали решение, которое позволяет сделать миграцию любой системы на базе FreePBX, (начиная с версии 2.9 до и включая версию 14) на свеженькую FreePBX Distro на базе ОС SNG 7, со всеми настройками и конфигурацией! Итак, можно мигрировать с: Elastix; PBX in A Flash; AsteriskNOW; вручную установленного FreePBX (в том числе установленного на не поддерживаемой ОС); FreePBX Distro При этом система, с которой производится миграция не требует остановки эксплуатации или перезагрузки, так как инструмент всего лишь считывает конфигурацию с системы "донора" на свежую систему FreePBX Distro. Как это работает: Вам нужно будет установить свежую версию свежую версию FreePBX Distro , на которую будет происходить миграция и активировать её; Запустить на новом сервере с FreePBX Distro скрипт конвертации командой: curl -s https://convert.freepbx.org | bash Этой командой сервер запросит место (слот) в очереди на конвертацию. Когда слот будет успешно занят сгенерируется ключ, вида 2beb181b-14ed-4f56-a86b-f6e564ba6c43; После этого, нужно запустить такую же команду на сервере - доноре, с которого вы хотите мигрировать и ввести полученный ключ; Конвертер извлечёт необходимые данные с донора и загрузит их на новый сервер. Этот процесс не окажет никого влияния на донора, не внесёт на нем никаких изменений и не потребует выключения; Скрипт также будет пробовать стянуть с донора всякие кастомные данные, такие как пользовательские голосовые файлы и данные провиженинга; Все транки на новом сервере будут выключены, чтобы избежать конфликта с зарегистрированными линиями к провайдеру на старом сервере. О том, как установить FreePBX читайте в нашей статье Какие данные будут перенесены на новый сервер: Внутренние номера (Extensions); Маршруты (Inbound/Outbound Routes); Линии к провайдеру (Trunks); Музыка на ожидании (MoH); Голосовые меню (IVR); Группы вызова (Ring Groups); Очереди (Queues); Любые другие настройки, являющиеся стандартной частью FreePBX; Звуковые файлы, включая: загруженную пользователем музыку на ожидании (MoH), записи голосовой почты и приветствия для голосовой почты, а также системные записи (System Recordings) Какие данные не будут перенесены на новый сервер: История звонков, то есть Call Data Report (CDR) и таблица Call Event Log (CEL); Вы можете самостоятельно перенести эти данные на новый сервер, экспортируя их с помощью 'mysqldump' или аналогичной утилиты. Эти данные могут быть очень тяжёлыми, поэтому пользователь сам должен позаботиться об их переносе. Настройки факса; Эта часть претерпела огромные изменения с момента первого релиза FreePBX, поэтому придется самостоятельно перенастроить почты пользователей, которым нужен функционал факса. Кастомные изменения конфигурационных файлов; То есть всё, что было изменено в файлах вида *_custom.conf, например /etc/asterisk/extensions_custom.conf. Если у вас есть такие настройки, то переносить их на новый сервер нужно будет вручную. Настройки не FreePBXовых модулей; Ну например Elastix Call Center Module, Queue Metrics и остальные модули, которые не являются стандартными для FreePBX. В общем и целом, звучит неплохо, правда? Мы можем безболезненно перенести большинство необходимых данных с неподдерживаемой системы и продолжить работу на новой, получая все актуальные обновления. Процесс миграции не представляется чем-то сверх сложным, так что давайте попробуем? Процесс миграции Итак, первое с чего нужно начать - это подготовка нового сервера с FreePBX Distro. Важно устанавливать именно 64-битную версию, поскольку 32-битная больше не поддерживается. О том как установить FreePBX Distro подробно читайте в нашей статье. Как только FreePBX Distro будет установлен, его необходимо активировать. Активация требуется для того чтобы сгенерировать криптографический ключ для защиты ваших данных для передачи на сервер конвертации https://convert.freepbx.org. Данные передаются в зашифрованном виде, чтобы исключить возможность их утечки в случае атаки типа Man-in-the-Middle. Затем необходимо настроить NAT. FreePBX Distro имеет свой встроенный модуль Firewall, который автоматически настраивает параметры NAT и Firewall через специальный помощник при первом запуске FreePBX. О том как настраивать Firewall читайте в нашей статье. После того как сервер с чистым FreePBX Distro настроен, необходимо зарезервировать слот для конвертации. Это делается с помощью специального скрипта: curl -s https://convert.freepbx.org | bash. Когда Вам предложат ввести reservation ID, просто нажмите 'Enter'. По окончанию процесса резервации слота, будет сгенерирован уникальный код конвертации вида: 2beb181b-14ed-4f56-a86b-f6e564ba6c43. Его потом нужно будет ввести на доноре. После этого, новый сервер будет ожидать ответа от донора. Не останавливайте скрипт, нужно чтобы на экране была надпись Waiting for Donor…. Теперь нужно запустить такую же команду на сервере - доноре, с которого вы хотите мигрировать и ввести полученный ключ; Возвращаемся на сервер-донор (Elastix, PIAF и так) с которого мы хотим мигрировать и запускаем тот же самый скрипт: curl -s https://convert.freepbx.org | bash Когда вас попросят ввести ID, введите то что было сгенерировано при запуске скрипта на новом FreePBX Distro. Это запускает процедуру экспорта всех данных и настроек с сервера донора и создание сжатого, криптографически защищённого архива с этими данными для отправки на новый сервер. В зависимости от того, насколько давно был развёрнут старый сервер, существует возможность неудачной обработки команды скрипта, поскольку сервер может не поддерживать обработку TLS сертификатов. Если после запуска скрипта ничего не происходит, попробуйте запустить команду с отключением верификации TLS сертификата: curl --insecure https://convert.freepbx.org | bash Как только процесс завершится, новый сервер будет иметь все настройки и данные, которые были на сервере доноре. Вы получаете полностью рабочий сервер со свежей версией FreePBX Distro, которая будет получать актуальные обновления софта и безопасности со всеми настройками, которые были на старом сервере!
img
Изначально разработанный для Unix-систем grep, является одной из наиболее широко используемых утилит командной строки в среде Linux. grep расшифровывается как "глобальный поиск строк, соответствующих регулярному выражению и их вывод" (globally search for a regular expression and print matching lines). grep в основном ищет на основе указанного посредством стандартного ввода или файла шаблона, или регулярного выражения и печатает строки, соответствующие заданным критериям. Часто используется для фильтрации ненужных деталей при печати только необходимой информации из больших файлов журнала. Это возможно благодаря совместной работе регулярных выражений и поддерживаемых grep параметров. Здесь мы рассмотрим некоторые из часто используемых сисадминами или разработчиками команд grep в различных сценариях. Синтаксис grep Команда grep принимает шаблон и необязательные аргументы вместе со перечислять файлов, если используется без трубопровода. $ grep [options] pattern [files] Простой пример: $ grep my file.txt my_file 1. Поиск среди нескольких файлов grep позволяет выполнять поиск заданного шаблона не только в одном, но и среди нескольких файлах. Для этого можно использовать подстановочный символ *. $ sudo grep -i err /var/log/messages Как видно из вывода, утилита перед результатом искомого шаблона выводит также название файла, что позволяет определить где именно было найдено совпадение. 2. Регистронезависимый поиск grep позволяет искать шаблон без учета регистра. Чтобы указать grep игнорировать регистр используется флаг –i. $ grep -i [pattern] [file] 3. Поиск слова Иногда появляется необходимость поиска не части, а целого слова. В таких случаях утилита запускается с флагом -w. $ grep -w [pattern] [file] 4. Вывод количества совпадений Не всегда нужно выводить результат совпадения. Иногда достаточно только количества совпадений с заданным шаблоном. Эту информацию мы можем получить с помощью параметра -c. $ grep -c [pattern] [file] 5. Поиск в поддиректориях Часто необходимо искать файлы не только в текущей директории, но и в подкаталогах. grep позволяет легко сделать это с флагом -r. $ grep -r [pattern] * 6. Инверсивный поиск Если вы хотите найти что-то, что не соответствует заданному шаблону, grep позволяет сделать только это с флагом -v. $ grep -v [pattern] [file] Можно сравнить выходные резултаты grep для одного и того же шаблона и файла с флагом -v и без него. С параметром -v выводятся любые строки, которые не соответствуют образцу. 7. Вывод нумерации строк grep позволяет нумеровать совпавшие строки, что позволяет легко определить, где строка находится в файле. Чтобы получить номера строк в выходных данных. используйте параметр –n: $ grep -n [pattern] [file] 8. Ограничение вывода Результат вывода grep для файлов вроде журналов событий и т.д. может быть длинным, и вам может просто понадобиться фиксированное количество строк. Мы можем использовать -m [num], чтобы ограничить выводимые строки. $ grep -m[num] [pattern] [file] Обратите внимание, как использование флага -m влияет на вывод grep для одного и того же набора условий в примере ниже: 9. Вывод дополнительных строк Часто нам нужны не только строки, которые совпали с шаблоном, но некоторые строки выше или ниже их для понимания контекста. С помощью флагов -A, -B или -C со значением num можно выводить строки выше или ниже (или и то, и другое) совпавшей строки. Здесь число обозначает количество дополнительных печатаемых строк, которое находится чуть выше или ниже соответствующей строки. Это применимо ко всем совпадениям, найденным grep в указанном файле или списке файлов. $ grep -A[num] [pattern] [file] $ grep -B[num] [pattern] [file] $ grep -C[num] [pattern] [file] Ниже показан обычный вывод grep, а также вывод с флагом -A, -B и -C один за другим. Обратите внимание, как grep интерпретирует флаги и их значения, а также изменения в соответствующих выходных данных. С флагом -A1 grep печатает 1 строку, которая следует сразу после соответствующей строки. Аналогично, с флагом -B1 он печатает 1 строку непосредственно перед соответствующей строкой. С флагом -C1 он печатает 1 строку, которая находится до и после соответствующей строки. 10. Вывод списка файлов Чтобы напечатать только имя файлов, в которых найден образец, а не сами совпадающие строки, используйте флаг -l. $ grep -l [pattern] [file] 11. Вывод абсолютных совпадений Иногда нам нужно печатать строки, которые точно соответствуют заданному образцу, а не какой-то его части. Флаг -x grep позволяет делать именно это. $ grep -x [pattern] [file] В приведенном ниже примере файл file.txt содержит строку только с одним словом «support», что соответствует требованию grep с флагом –x. При этом игнорируются строки, которые могут содержать слова «support» с сопутствующим текстом. 12. Поиск совпадения в начале строки С помощью регулярных выражений можно найти последовательность в начале строки. Вот как это сделать. Обратите внимание, как с помощью символ каретки ^ изменяет выходные данные. Символ каретки указывает grep выводить результат, только если искомое слово находится в начале строки. Если в шаблоне есть пробелы, то можно заключить весь образец в кавычки. 13. Поиск совпадения в конце строки Другим распространенным регулярным выражением является поиск шаблона в конце строки. $ grep [options] "[string]$" [file] В данном примере мы искали точку в конце строки. Поскольку точка . является значимым символом, нужно её экранировать, чтобы среда интерпретировала точку как команду. Обратите внимание, как изменяется вывод, когда мы просто ищем совпадения . и когда мы используем $ для указания grep искать только те строки, которые заканчиваются на . (не те, которые могут содержать его где-либо между ними). 14. Использования файла шаблонов Могут возникнуть ситуации, когда у вас есть сложный список шаблонов, которые вы часто используете. Вместо записи его каждый раз можно указать список этих образцов в файле и использовать с флагом -f. Файл должен содержать по одному образцу на каждой строке. $ grep -f [pattern_file] [file_to_match] В нашем примере мы создали файла шаблона с названием pattern.txt со следующим содержимым: Для его использования используйте флаг -f. 15. Поиск по нескольким шаблонам grep позволяет задать несколько шаблонов с помощью флага -e. $ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file] 16. Указание расширенных регулярных выражений grep также поддерживает расширенные регулярные выражения (Extended Regular Expressions – ERE) или с использованием флага -E. Это похоже на команду egrep в Linux. Использование ERE имеет преимущество, когда вы хотите рассматривать метасимволы как есть и не хотите экранировать их. При этом использование -E с grep эквивалентно команде egrep. $ grep -E '[Extended RegEx]' [file] Ниже приведён пример использование ERE, для вывода не пустых и не закомментированных строк. Это особенно полезно для поиска чего-то в больших конфигурационных файлах. Здесь дополнительно использован флаг –v, чтобы НЕ выводить строки, соответствующих шаблону '^ (# | $)'. Заключение Приведенные выше примеры являются лишь верхушкой айсберга. grep поддерживает ряд вариантов и может быть очень полезным инструментом в руке человека, который знает, как его эффективно использовать. Мы можем не только использовать приведенные выше примеры, но и комбинировать их различными способами, чтобы получить то, что нам нужно. Для получения дополнительной информации можно воспользоваться встроенной системой справки Linux – man.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59