IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Пингвинятник (ОС *NIX) (http://www.imho.ws/forumdisplay.php?f=76)
-   -   скриптуем в shell (http://www.imho.ws/showthread.php?t=62009)

shuron 17.06.2004 22:01

скриптуем в shell
 
Вот это собственно и вопрос..
Я подметил что
iptables после перезапуска надо заного прописывать,
а перезагружаюсь я часто;))

Как же мне эти вечно вводимые три строчки:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
echo 1 > /proc/sys/net/ipv4/ip_forward


правильно прописать в файл( назовём его "forward"), да так,
чтобы потом просто набрав
$ forward
выполнялись именно эти три стррочки

тоесь как писать скрипты в bash?

P.S. пробовал просто запихать в файл, не вышло...
Файл создавал с vi
$ vi forward

Для вас профи вопрос то легчайший ;)) спасибо! :beer: :yees:

Drakosha 17.06.2004 23:01

файл такой:

1. chmod 755 forward

2:
----------------
#!/bin/bash

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
echo 1 > /proc/sys/net/ipv4/ip_forward

---------------------------------------------------

shuron 17.06.2004 23:55

Странно только что попробовал..
в своем root каталоге это сделал
файл назвал forwarding
cmod на него сделал теперь он -rwxr-xr-x
и в файле #!/bin/bash рописал..

но не хочет выполнятся говорит
bash: forwarding: command not found

сорри всё работает вроде разобрался..
он просто работает немного не так..
надо прописывать полный путь
хотя я в том коталоге и находился он всёравно не выполнялся..
а теперь ок..
спасибо...
лови "одобрение"

Drakosha 18.06.2004 00:22

а... у тебя в path '.' не прописана:

попробуй:
>./forwarding

и можеш добавить "." в path:

export PATH=${PATH}:.

shuron 18.06.2004 01:48

ок спасибо! сделаю
добавлю туда точку..
а что твоя строчка
export PATH=${PATH}:.
делает? и куда её?

Я добавил в файл
" etc/profile

теперь там Path так выглядит:
PATH="/usr/localbin/: ..blabla.. :/usr/gaemes:."

обрати внимание в конце точка, ты так имел в виду?

Drakosha 18.06.2004 04:07

ага, так и имел ввиду.
http://imho.ws/images/smilies2/thumbsup.gif

KalaSh 18.06.2004 08:33

На самом деле лучшим вариантом будет назвать файл rc.forward и положить его в /etc/rc.d/ (конфигурация для RH и ей подобных), тогда файл будет запускаться при загрузке системы.
Если решите запускать систему без этого файла, то всё, что будете добавлять в правила iptables желательно сохранять при помощи iptables-save, тогда их система при запуске будет восстанавливать.

shuron 18.06.2004 18:28

Образоватись теперь вопросы ;))
1. Тоесть все файлы в каталоге /etc/rc.d/ которые могут выполнятся.. будут выполнятся..
должны они обязательно начинатся с rc.?

2. посмотрел я в свой /etc/
там у меня нет каталога rc
но зато есть rc.boot (он пустой) и rc0.d , rc1.d .. до rc6.d и ещё rcS.d
Я так понимаю rc1.d по rc6.d связаны с командой init.. или как?
но тогда что жеделают rc.boot и rcS.d ?
куда мне писать мой файл..

3. iptables-save действует так что запоминает текущие настройки?

Roma Duke 22.06.2004 23:27

shuron
1. Файлы в каталоге /etc/rc.d могут выполняться. А вот должны ли ?.... это зависит от уровня загрузки. а названия у них может быть любым.
2. rc0.d ... rc6.d это каталоги в которых лежат символические ссылки на программы размещенные в rc.d (хотя они могут быть и в другом месте)
Но правило названия этих сим. ссылок строго регламентировано.
Если они начинаются на S - то программа загружается (запускается), если на K - выгружается (stop). Цыфры после букв обозначают приоретет загрузки.
3. Да

А что у тебя за дистрибутив?

shuron 23.06.2004 02:10

У меня debian.
Да я уже немного поразбирался..
rc.d все там так как ты сказал и скрипты интресные..
надо ещё бы в свободное время попробовать написать свой

Дайте пожалуйста ссылочки где про скрипты на bash хорошо написано!!
санкс

Borland 23.06.2004 11:18

Вложений: 1
shuron
Цитата:

Дайте пожалуйста ссылочки где про скрипты на bash хорошо написано!!
Ссылочку не дам (где брал - не помню), приклеиваю сюда Advanced bash scripring Guide (на русском!).

Drakosha 23.06.2004 17:09

а сидит он тут:

http://gazette.linux.ru.net/rus/arti...abs-guide.html

filonovd 02.07.2004 07:05

Цитата:

Сообщение от Roma Duke
shuron
1. Файлы в каталоге /etc/rc.d могут выполняться. А вот должны ли ?.... это зависит от уровня загрузки. а названия у них может быть любым.
2. rc0.d ... rc6.d это каталоги в которых лежат символические ссылки на программы размещенные в rc.d (хотя они могут быть и в другом месте)

Вообще-то в шапке скрипты лежат в /etc/init.d а /etc/rc.d - это в слаквари.

Bek 05.07.2004 13:36

filonovd
rc.d это стандартный каталог.
в шапке просто симлинк для init.d сделан

filonovd 07.07.2004 08:21

ой, и правда симлинк... в /etc/rc.d/init.d
То есть скрипты прямо в /etc/rc.d не кладутся. Чего не скажешь про слаку. :)

shuron 07.07.2004 12:26

с этим я уже тоже разобрался.. ;)

Plague 18.12.2007 18:59

народ, помогите, туплю второй день.
дано - лог вида:
Код:

  xxx.xxx.xxx.13:  12.2 M
  xxx.xxx.xxx.34:    32975
  xxx.xxx.xxx.16:    3825
  xxx.xxx.xxx.118:    6511
  xxx.xxx.xxx.16:    5753
  xxx.xxx.xxx.16:    2552
  xxx.xxx.xxx.13:    1788
  xxx.xxx.xxx.55:      628
  xxx.xxx.xxx.16:    1.1 M
  xxx.xxx.xxx.10:      635
  xxx.xxx.xxx.13:    1671
  xxx.xxx.xxx.13:    1199
  xxx.xxx.xxx.253:    12687
  xxx.xxx.xxx.13:      967
  xxx.xxx.xxx.253:      827
  xxx.xxx.xxx.253:    71321
  xxx.xxx.xxx.16:    3669
  xxx.xxx.xxx.16:    31975
  xxx.xxx.xxx.13:      958
  xxx.xxx.xxx.13:    3.2 M

как видно, во второй колонке единицы измерения разные: байты - без буквенных обозначений, и мегабайты, обозначенные буквой "M" (теоретически могут быть и "Жо", тоесть "G", но если разберемся с М, значит и с Жо понятно будет)
задача: средствами sh привести вторую колонку к общему знаменателю, байтам. тоесть те значения, после которых стоит "M" заменить на цифирное_значение*1048576
чтоб получилось так:
Код:

  xxx.xxx.xxx.13:  12792627.2
  xxx.xxx.xxx.34:    32975
  xxx.xxx.xxx.16:    3825
  xxx.xxx.xxx.118:    6511
  xxx.xxx.xxx.16:    5753
  xxx.xxx.xxx.16:    2552
  xxx.xxx.xxx.13:    1788
  xxx.xxx.xxx.55:      628
  xxx.xxx.xxx.16:    1153433.6
  xxx.xxx.xxx.10:      635
  xxx.xxx.xxx.13:    1671
  xxx.xxx.xxx.13:    1199
  xxx.xxx.xxx.253:    12687
  xxx.xxx.xxx.13:      967
  xxx.xxx.xxx.253:      827
  xxx.xxx.xxx.253:    71321
  xxx.xxx.xxx.16:    3669
  xxx.xxx.xxx.16:    31975
  xxx.xxx.xxx.13:      958
  xxx.xxx.xxx.13:    3355443.2

:help:

helldomain 18.12.2007 20:11

#!/bin/bash

while read i; do
i=$(echo $i | tr -s ' ')
ud_ip=$(echo $i | cut -d ' ' -f 1 | tr -d ':')
ud_ta=$(echo $i | cut -d ' ' -f 2)
ud_tu=""; [ "$ud_ta" = "$(echo $ud_ta | tr -d ';')" ] && ud_tu=$(echo $i | cut -d ' ' -f 3 | tr A-Za-z a-za-z | tr -d ';')
ud_ta=$(echo $ud_ta | tr -d ';')

# Convert units
[ "$ud_tu" = "m" ] && ud_ta=$(echo $ud_ta*1024|bc)
[ "$ud_tu" = "g" ] && ud_ta=$(echo $ud_ta*1024^2|bc)
echo $ud_ip $ud_ta
done < <(cat records)

noname 18.12.2007 20:16

cat LOG | awk '{if( $3 eq 'M'){print $2*1024*1024} else {print $2}}'

Plague 20.12.2007 17:44

Цитата:

Сообщение от noname (Сообщение 1498909)
cat LOG | awk '{if( $3 eq 'M'){print $2*1024*1024} else {print $2}}'

теряет первый столбик. это решаемо:
Код:

awk '{if( $3 eq 'M'){print $1 "\t"  $2*1024*1024} else {print $1 "\t" $2}}
а вот то, что не видит десятичные (12.2 M) - плохо

Хэлловский вариант еще невкурил :cool:

Hubbitus 09.01.2008 05:32

Цитата:

Сообщение от Plague (Сообщение 1499912)
а вот то, что не видит десятичные (12.2 M) - плохо

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

awk '{ printf "%s\t %.10g\n", $1, ($3 eq 'M' ? gensub("\\.", ",", "", $2)*1024*1024 : $2); }' LOG

ftpd 11.01.2008 01:03

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

Код:

#! /usr/bin/awk -f


    BEGIN{ Kilo=1024; Mega=Kilo*Kilo; Giga=Mega*Kilo;}
        { value=0
          if (NF < 2) next
          if (NF < 3 ) value=$2
          else {
                if ($3 == "M") value=$2*Mega;
                if ($3 == "G") value=$2*Giga;
                if (value == 0) {next;}
              }
          printf "%s\t%20.4f\n", $1, value
        }

ахтунг со строками
Код:

if (NF < 2) next

и
 if (value == 0) {next;}

это пропуск строк !!!


проверено на
www# uname -a
FreeBSD www.home 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 11:05:30 UTC 2007 root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP i386
www#

KalaSh 22.04.2008 22:22

Вложений: 1
Итак, вопрос знатокам. Есть машина на 4-м debian с двумя интерфейсами, которая в силу сложившихся обстоятельств выполняет роль шлюза и файлсервера. Есть демон ipcad, который считает весь проходящий трафик и кладёт его в файл ipcad.dump. У меня есть простенький скрипт traff.acc4, который обрабатывает файл дампа и выдаёт файл типа febstat. Мне кажется тут ещё трафик самбы примешан в кучу, как бы его отделить? Может кто-то более гибкий скрипт предложит?

Все три файла во вложении.

Plague 23.04.2008 12:48

самба по 139 порту идет вроде.
соответственно, добавить в скрипт
grep -v " 139 "
типа
Код:

[11:44:27:/home/plague]$ cat febstat | grep -v " 139 "


Часовой пояс GMT +4, время: 11:31.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.