Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Открыть новую тему     Написать ответ в эту тему

digital422

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Товарищи вопрошающие! Если ваша система отлична от ГНУ, и в то же время вы желаете обойтись только дефолтными средствами, указывайте и то и другое сразу, пожалуйста.


UNIX Shell

 
   Это глобальная тема по юниксовой командной оболочке, как по интерактивной работе в командной строке, так и по шелл-скриптам. Ключевые слова: sh, bash, zsh, tcsh, busybox, readline, coreutils, cp, mv, ln, rm, ls, readlink, mkdir, touch, stat, date, test, sleep, chown, chmod, chattr, dd, df, du, env, echo, cat, less, man, grep, sort, findutils, find, locate, xargs, md5sum, cmp, diff, patch, ps, kill, killall, tar, gzip, bzip2, xz, mount, fdisk, parted, mkfs, fsck, e2fsprogs, mtools, ss, netcat, netstat, rsync, ssh, scp, sftp, lftp, ncftp, time, strace.
   Неинтерактивная обработка текста (sed, awk, perl) пока тоже здесь.
   Смотри в других ветках: wget, convert, montage, mogrify и др., gs, git, 7z, p7zip, soffice, mplayer, mencoder, vlc, vim, mc, mcedit, kioclient.
 
 

Hint! Русские маны (подустаревшие, не всегда полные и не всегда для вашей системы) можно попытаться найти на Опеннете, к примеру: bash, tar, grep.

 
Готовые решения:
  • commandlinefu.com
    Крупнейшая база полезных однострочников на командной оболочке с ранжированием на основе пользовательского голосования.
     
  • shell-fu.org
    Аналогично, но поменьше и формат записей более свободный, поэтому встречаются и однострочники, и развернутые скрипты, и просто советы.
     
  • Useful one-line scripts for sed
    Почти исчерпывающий список решений для тех случаев, когда sed незаменим. Более сложные скрипты с sed.sf.net — только для тех, кто знает толк... :)

 
Учебная литература:
  • Greg’s Wiki (http://mywiki.wooledge.org)
    Наиболее обширный авторский сборник постоянно обновляющихся материалов по Башу.

    1. Bash Pitfalls
      (Частые ошибки программирования на Баше: [1], [2], [3], [4], [5] — пер. на русский по сост. на дек. 2008 г.).
      Рассмотрены преимущественно ошибки, возникающие из-за непонимания отличия шелла от «нормальных» скриптовых языков. Если вы уже владеете, например, Перлом, то это вполне может быть ваше первое руководство для ознакомления с Башем.
    2. Bash FAQ
    3. Bash Guide
    4. Bash Reference Sheet
      Шпаргалка по частым синтаксическим оборотам.

 
Классическая учебная литература:
С одной стороны не упомянуть эти издания нельзя, с другой — они настолько устарели, что едва ли их можно рекомендовать в роли учебника.

 

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

Всего записей: 351 | Зарегистр. 19-04-2003 | Отправлено: 18:51 16-05-2008 | Исправлено: qw12, 09:42 24-03-2020
i81

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Если изначально правило было добавлено при загрузке системы:

Правило я добавляю изначально при старте wg0
Если дописать 1 - не работает - ошибку на эту 1 говорит

Код:
May 16 20:49:17 vpn.amigo-mgn.ru wg-quick[8551]: [#] iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
May 16 20:49:17 vpn.amigo-mgn.ru wg-quick[8551]: [#] iptables -A FORWARD -i wg0 -o wg0 -j ACCEPT
May 16 20:49:17 vpn.amigo-mgn.ru wg-quick[8551]: [#] iptables -t nat -A PREROUTING 1 -d 11.11.11.11/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.3.18:8123
May 16 20:49:17 vpn.amigo-mgn.ru wg-quick[8551]: Bad argument `1'
May 16 20:49:17 vpn.amigo-mgn.ru wg-quick[8551]: Try `iptables -h' or 'iptables --help' for more information.

Всего записей: 329 | Зарегистр. 08-04-2006 | Отправлено: 18:52 16-05-2022 | Исправлено: i81, 18:53 16-05-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
i81
Потому что у -A (aka --append) нет опционального аргумента в виде номера правила.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 19:06 16-05-2022 | Исправлено: Alukardd, 23:18 16-05-2022
i81

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Вот так сделал - работает вроде

Код:
#!/bin/bash
 
MAIN_IP='192.168.3.18'
SECONDARY_IP='10.8.1.5'
 
OUR_EXTERNAL_IP='11.11.11.11'
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
RULE="PREROUTING -d $OUR_EXTERNAL_IP/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination $SECONDARY_IP:8123"
 
if ping -q -c 4 -W 1 "$MAIN_IP" &>/dev/null; then
  iptables -t nat -R PREROUTING 1 -d $OUR_EXTERNAL_IP/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination $MAIN_IP:8123
else
  iptables -t nat -R PREROUTING 1 -d $OUR_EXTERNAL_IP/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination $SECONDARY_IP:8123
fi
 
 
 

Всего записей: 329 | Зарегистр. 08-04-2006 | Отправлено: 05:43 17-05-2022 | Исправлено: i81, 05:43 17-05-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
i81
Переменную RULE можно удалить. она больше не используется. Ну и помним что скрипт перетирает первое правила в -t nat PREROUTING, посему следим что бы там не оказалось что-то нужное и не имеющее отношение к  решаемой задачи failover'а какого-то web-сервиса.
 
НО я всё ещё утверждаю, что весь этот огород, включая policy base routing, надо унести в nginx. Хотя в бесплатной версии там и будут некоторые неудобства и топорность в работе, которые Вы вероятно можете захотеть превратить из простого конфига в что-то управляемое скриптом или модулем.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 12:22 17-05-2022
i81

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
включая policy base routing, надо унести в nginx.

не-не-не... Только с этим разобрались вроде...

Цитата:
посему следим что бы там не оказалось что-то нужное и не имеющее отношение к  решаемой задачи failover'а какого-то web-сервиса.

а как бы за этим следить? Может есть возможность это правило заводить под своим каким-то отдельным номером, который точно не пересечется?

Всего записей: 329 | Зарегистр. 08-04-2006 | Отправлено: 13:26 17-05-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
i81
Нет, заводить под фиксированным номером не выйдет. Можно не полагаться на --replace (-R) и написать проверку наличия правила в вывод iptables-save. Ещё можно всегда перед добавлением актуального правила пробовать удалять 2 возможных.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 13:43 17-05-2022
i81

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ещё можно всегда перед добавлением актуального правила пробовать удалять 2 возможных.

Думаю это было бы верное решение, вот бы знать как сделать

Всего записей: 329 | Зарегистр. 08-04-2006 | Отправлено: 13:56 17-05-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
i81
Цитата:
вот бы знать как сделать
ну нет, Вы эти команды уже третий день по кругу вводите, как добавить/удалить/заменить правило в iptables с известными фильтрами Вы уже должны знать лучше меня.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 14:19 17-05-2022
i81

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
А, понял. Мне перед вашими правилами просто вставить удаление двух существующих. Попробую чуть позже

Всего записей: 329 | Зарегистр. 08-04-2006 | Отправлено: 14:21 17-05-2022
i81

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Вы уже должны знать лучше меня.

Сделал так:

Код:
 
#!/bin/bash
 
MAIN_IP='192.168.3.18'
SECONDARY_IP='10.8.1.5'
 
OUR_EXTERNAL_IP='11.11.11.11'
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
RULE="PREROUTING -d $OUR_EXTERNAL_IP/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination $SECONDARY_IP:8123"
 
#if ping -q -c 4 -W 1 "$MAIN_IP" &>/dev/null; then
#  # don't quote RULE variable
#  # shellcheck disable=SC2086
#  iptables -t nat -D $RULE 2>/dev/null # hide error about absent rule
#else
#  # don't quote RULE variable
#  # shellcheck disable=SC2086
#  iptables -t nat -I $RULE
#fi
 
 
if ping -q -c 4 -W 1 "$MAIN_IP" &>/dev/null; then
  iptables -t nat -D PREROUTING -d 11.11.11.11/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.3.18:8123 2>/dev/null
  iptables -t nat -D PREROUTING -d 11.11.11.11/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.8.1.5:8123 2>/dev/null
  iptables -t nat -I PREROUTING -d $OUR_EXTERNAL_IP/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination $MAIN_IP:8123 2>/dev/null
else
  iptables -t nat -D PREROUTING -d 11.11.11.11/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.3.18:8123 2>/dev/null
  iptables -t nat -D PREROUTING -d 11.11.11.11/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 10.8.1.5:8123 2>/dev/null
  iptables -t nat -I PREROUTING -d $OUR_EXTERNAL_IP/32 -p tcp -m tcp --dport 8080 -j DNAT --to-destination $SECONDARY_IP:8123 2>/dev/null
fi
 
 
 

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

Всего записей: 329 | Зарегистр. 08-04-2006 | Отправлено: 06:57 18-05-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
i81
Цитата:
каждые две минуты крон будет перезаписывать все правила
не  все а только те 2 с которыми данный скрипт работает. Сойдёт, только вот переменную RULE так и не удалили, а ещё не стоит прятать ошибки insert команд.
 
Ну, хорошо что хоть что-то работает ¯\_(ツ)_/¯

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 10:37 18-05-2022
i81

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Сойдёт, только вот переменную RULE так и не удалили, а ещё не стоит прятать ошибки insert команд.
 

принял.

Всего записей: 329 | Зарегистр. 08-04-2006 | Отправлено: 16:38 18-05-2022
yuriko1158

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем привет.
нужно вырезать ненужное из этой команды:

Код:
#!/bin/sh
if ! ping 8.8.8.8 -c 1 -w 3 > /dev/null 2>&1; then #- проверка интернета по пингу, если пропадет пинг -
ifdown 3G #- останавливаем интерфейс 3G
sleep 5 #- ждем 5 секунд
ifup 3G #- снова запускаем интерфейс 3G
sleep 5 #- ждем 5 секунд
fi
if ! ping 8.8.8.8 -c 1 -w 3 > /dev/null 2>&1; then #-снова проверяем интернет, если не появился -
usbreset 001/003 #- "передергиваем" модем
fi

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

Всего записей: 1078 | Зарегистр. 27-02-2015 | Отправлено: 17:07 21-05-2022 | Исправлено: yuriko1158, 17:10 21-05-2022
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yuriko1158
не понятно зачем просто пинговать, но допустим соединение хочет постоянно какой-то трафик...
 
cron умеет вызываться только с точностью до минуты, если очень хочется секунды то надо использовать systemd.timer, но не вижу смысла, можно просто сделать ping бесконечным, но подстраховаться через cron. Итого запускаем раз в минуту ping который будет пытаться что-то пинговать в течении 59 секунд и потом умирать. Дальше на границе минуты cron вызовет новый ping.
 
Скрипт в таком случае не нужен, просто прямо в cron написать вместо пути до скрипта ping -q -w 59 1.1 >/dev/null  2>&1
Расписание cron'а в таком случае будет (все звёздочки): * * * * *.
 
(полную строку не привёл, потому что в зависимости от того пользовательский это crontab файл или системный. меняет синтаксис, в системных присутствует дополнительное поле в виде имени пользователя от имени которого запускается команда.

----------
Microsoft gives you windows, linuх gives you the whole house...
I've been using Vim for about 4 years now, mostly because I can't figure out how to exit it.

Всего записей: 6563 | Зарегистр. 28-08-2008 | Отправлено: 22:54 21-05-2022
yuriko1158

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd

Цитата:
не понятно зачем просто пинговать

есть у меня крайне странный 3G модем.который работает по устаревшей технологии,при этом сам модем новый.
так вот,с завидной периодичностью,если модем не "пнуть",он засыпает.
на windows я обходил это простым пингованием.раз в 3-4 с пинается модем.пакеты небольшие,чтоб не гадить.

Цитата:
можно просто сделать ping бесконечным

пусть будет бесконечным.так как пока работает система,он постоянно подключен к интернету.даже если система не выключается сутками.
да и надоело каждый раз запускать консоль и вводить mtr -i 4 tele2.ru
поставщик интернета теле2,вот пусть и пинается.

Всего записей: 1078 | Зарегистр. 27-02-2015 | Отправлено: 05:55 22-05-2022
fscpsd



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yuriko1158
Цитата:
нужно вырезать ненужное из этой команды
Если этот скрипт у вас уже где-то прописан в системе и всё прекрасно работает, тогда, чтобы ничего не перенастраивать и как-нибудь нечаянно не поломать, можно просто удалить из него всё (кроме верхней строчки, её не трогайте), и в теле скрипта оставить только:
Код:
ping 8.8.8.8 -q -w 59 > /dev/null 2>&1

Цитата:
чтоб не гадить
Тогда пингуйте шлюз вашего провайдера, ведь это ближайший к вам внешний адрес, для этого замените 8.8.8.8 (это адрес днс-сервера от гугл) на адрес шлюза.  
Не забудьте сохранить куда-нибудь и исходный скрипт, вдруг пригодится ещё когда-нибудь.
 
 
Добавлено:
Alukardd
Цитата:
ping 1.1
А почему "1.1", что это за нотация такая?

Всего записей: 1823 | Зарегистр. 16-09-2010 | Отправлено: 06:29 22-05-2022 | Исправлено: fscpsd, 07:06 22-05-2022
yuriko1158

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fscpsd

Цитата:
и в теле скрипта оставить только

нужно добавить временной интервал.я пока с этим не в ладах ...

Цитата:
Тогда пингуйте шлюз вашего провайдера

ну в сообщеннии выше я так и указал.просто скрипт был для всех.

Всего записей: 1078 | Зарегистр. 27-02-2015 | Отправлено: 06:53 22-05-2022
fscpsd



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yuriko1158
Цитата:
нужно добавить временной интервал.я пока с этим не в ладах
Цифра "59", стоящая после ключа "-w" — это как раз и есть временной интервал в секундах. Вот здесь можно почитать справку по команде ping на русском:
https://www.opennet.ru/man.shtml?topic=ping
 
Ещё вроде бы в Астра-линуксе все справочные страницы должны быть хорошо переведены, но что-то не получается найти их через гугл, может подскажет кто.
 
 
 
Добавлено:

Цитата:
в сообщеннии выше я так и указал
В сообщении выше вы указали адрес сайта Теле2. Во-первых, это всё-таки не ближайший шлюз, а тоже далёкий-далёкий внешний ресурс, возможно даже, что зарубежный, а во-вторых, лучше всё-таки айпи-адрес пинговать, чтобы избежать возможных накладок и недоразумений с днс.

Всего записей: 1823 | Зарегистр. 16-09-2010 | Отправлено: 07:02 22-05-2022 | Исправлено: fscpsd, 07:09 22-05-2022
yuriko1158

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fscpsd

Цитата:
Цифра "59", стоящая после ключа "-w" — это как раз и есть временной интервал в секундах.

я имел ввиду аргумент -i
интервал между пакетами.

Цитата:
В сообщении выше вы указали адрес сайта Теле2. Во-первых, это всё-таки не ближайший шлюз,

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

Всего записей: 1078 | Зарегистр. 27-02-2015 | Отправлено: 07:44 22-05-2022 | Исправлено: yuriko1158, 07:51 22-05-2022
fscpsd



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yuriko1158
Цитата:
интервал между пакетами

Код:
ping 8.8.8.8 -i 4 -w 56 -q > /dev/null 2>&1  
Ключ "-i 4" — это интервал четыре секунды. Ключ "-w 56" — это общее время работы, 56 секунд. Ключ "-q" сокращает количество выводимой информации.

Всего записей: 1823 | Зарегистр. 16-09-2010 | Отправлено: 07:50 22-05-2022 | Исправлено: fscpsd, 07:51 22-05-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

Компьютерный форум Ru.Board » Операционные системы » UNIX » UNIX Shell: sh, bash, zsh; Coreutils и ко.; sed, awk, perl;


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru