Напечатать n строк до и m строк после сопоставления с pdfgrep

Решил сам. Похоже, очень мало информации о сетевых вещах, которые вы можете делать с Linux, поэтому я решил задокументировать и объяснить свое решение в деталях. Это моя последняя настройка:

  • 3 сетевых адаптера: eth0 (провод), wlan0 (встроенный Wi-Fi, слабый), wlan1 (USB-адаптер Wi-Fi , более сильный сигнал, чем wlan0)
  • Все они включены одна подсеть, каждая из них со своим собственным IP-адресом.
  • По умолчанию eth0 должен использоваться как для входящего, так и для исходящего трафика.
  • В случае сбоя eth0 следует использовать wlan1.
  • В случае сбоя wlan1 следует использовать wlan0.

Первый шаг : Создайте новую таблицу маршрутов для каждого интерфейса в / etc / iproute2 / rt_tables . Назовем их rt1, rt2 и rt3

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1  inr.ruhep
1 rt1
2 rt2
3 rt3

Второй шаг : Конфигурация сети в / etc / network / interfaces . Это основная часть, и я постараюсь объяснить как можно больше:

auto eth0 wlan0
allow-hotplug wlan1

iface lo inet loopback

iface eth0 inet static
address 192.168.178.99
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.99 table rt1
    post-up ip route add default via 192.168.178.1 dev eth0 table rt1
    post-up ip rule add from 192.168.178.99/32 table rt1
    post-up ip rule add to 192.168.178.99/32 table rt1
    post-up ip route add default via 192.168.178.1 metric 100 dev eth0
    post-down ip rule del from 0/0 to 0/0 table rt1
    post-down ip rule del from 0/0 to 0/0 table rt1

iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.97 table rt2
    post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
    post-up ip rule add from 192.168.178.97/32 table rt2
    post-up ip rule add to 192.168.178.97/32 table rt2
    post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
    post-down ip rule del from 0/0 to 0/0 table rt2
    post-down ip rule del from 0/0 to 0/0 table rt2

iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
    post-up ip route add 192.168.178.0/24 dev wlan1 src 192.168.178.98 table rt3
    post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
    post-up ip rule add from 192.168.178.98/32 table rt3
    post-up ip rule add to 192.168.178.98/32 table rt3
    post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
    post-down ip rule del from 0/0 to 0/0 table rt3
    post-down ip rule del from 0/0 to 0/0 table rt3

Если вы наберете ip rule show , вы должны увидеть следующее:

0:  from all lookup local 
32756:  from all to 192.168.178.98 lookup rt3 
32757:  from 192.168.178.98 lookup rt3 
32758:  from all to 192.168.178.99 lookup rt1 
32759:  from 192.168.178.99 lookup rt1 
32762:  from all to 192.168.178.97 lookup rt2 
32763:  from 192.168.178.97 lookup rt2 
32766:  from all lookup main 
32767:  from all lookup default 

Это говорит нам, что входящий или исходящий трафик с IP-адреса «192.168.178.99» будет использоваться таблица маршрутов rt1. Все идет нормально. Но трафик, который генерируется локально (например, вы хотите отправить ping или ssh с машины в другое место), требует особой обработки (см. Большую цитату в вопросе).

Первые четыре строки post-up в / etc / network / interfaces просты, и их объяснения можно найти в Интернете, пятая и последняя строка post-up - та, которая заставляет волшебство происходить:

post-up ip r add default via 192.168.178.1 metric 100 dev eth0

Обратите внимание на то, что мы не указали таблицу маршрутов для этой последующей линии. Если вы не укажете таблицу маршрутов, информация будет сохранена в основной таблице маршрутов, которую мы видели в ip rule show . Эта пост-восходящая линия помещает маршрут по умолчанию в «основную» таблицу маршрутов, которая используется для локально сгенерированного трафика, который не является ответом на входящий трафик. (Например, MTA на вашем сервере пытается отправить электронное письмо.)

Все три интерфейса помещают маршрут по умолчанию в основную таблицу маршрутов, хотя и с разными показателями.Давайте посмотрим на таблицу маршрутов main с ip route show :

default via 192.168.178.1 dev eth0  metric 100 
default via 192.168.178.1 dev wlan1  metric 101 
default via 192.168.178.1 dev wlan0  metric 102 
192.168.178.0/24 dev wlan0  proto kernel  scope link  src 192.168.178.97 
192.168.178.0/24 dev eth0  proto kernel  scope link  src 192.168.178.99 
192.168.178.0/24 dev wlan1  proto kernel  scope link  src 192.168.178.98

Мы видим, что основная таблица маршрутов имеет три маршрута по умолчанию, хотя и с разными метриками. Наивысший приоритет - это eth0, затем wlan1 и затем wlan0, потому что более низкие значения метрики указывают на более высокий приоритет. Поскольку eth0 имеет самую низкую метрику, это маршрут по умолчанию, который будет использоваться, пока работает eth0 . Если eth0 выйдет из строя, исходящий трафик переключится на wlan1 .

При такой настройке мы можем ввести ping 8.8.8.8 на одном терминале и ifdown eth0 на другом. ping должен работать, потому что поскольку ifdown eth0 удалит маршрут по умолчанию, связанный с eth0 , исходящий трафик переключится на wlan1 .

Линии post-down обеспечивают удаление связанных таблиц маршрутов из базы данных политики маршрутизации ( ip rule show ), когда интерфейс выходит из строя, чтобы все было в порядке.

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

Последний шаг : введите ifplugd .Это демон, который наблюдает за интерфейсами и выполняет ifup / ifdown , если вы отключите кабель или возникла проблема с подключением к Wi-Fi / etc / default / ifplugd :

INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

Теперь вы можете вытащить подключите eth0 , исходящий трафик переключится на wlan1 , и если вы снова вставите плагин, исходящий трафик переключится обратно на eth0 . Ваш сервер будет оставаться в сети, пока работает любой из трех интерфейсов. Для подключения к серверу вы можете использовать IP-адрес eth0, а в случае сбоя - IP-адрес wlan1 или wlan0.

1
07.09.2017, 16:35
1 ответ

-A, -B, -Cработают правильно и как у меня с GNU grepс pdfgrep 2.0.

Вы всегда можете использовать (, предполагая, что GNUgrep):

pdftotext file.pdf - | grep -A/B/C...

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

Или для работы с более чем одним файлом, сделайте как zgrep:

for file in./*.pdf; do
  pdftotext "$file" - | grep --label="$file" -H...
done

(добавление опции -layoutк pdftotext, по-видимому, дает результат, более близкий к pdfgrep. Вы также можете захотеть сжать последовательности символов пробела в один пробел, чтобы облегчить поиск строк из нескольких -слов, передав вывод от pdftotextдо tr -s '[[:space:]]' '[ *]')

.
1
27.01.2020, 23:44

Теги

Похожие вопросы