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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
двумя постами выше))) Ну тогда не забывайте убивать старые потоки, что бы не болтались, хотя, если вы говорите что они сами отваливаются...
Код:
while true; do
  if ! ifconfig eth0 | grep 'UP'; then tcpdump -i eth0; fi
  sleep 30
done
скрипт от рута пускать... Интерфейс вы сами переподнимаете?

----------
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:10 27-05-2011
kostya_rlw

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

Цитата:
 
 Кручу, верчу, запутать хочу!!!  
ifconfig ppp0 2>&1 | grep -i 'UP' > /dev/null  
 Соответственно дальше можете анализировать переменную $?, если хотите конечно.  

 
Да! Спасибо!
как раз и надо анализировать $?..
 
Получается сначала возможные ошибки направляются туда же куда и вывод  2>&1
потом эта смесь вывода и возможных ошибок грепается,  
и даелее при любых вариантах ггрепа (есть'UP' или или нету) а также при ошибках ifconfig -  все летит в  null
Правильно ? )
 
PS. А почему сразу запутать? )

Всего записей: 57 | Зарегистр. 18-01-2006 | Отправлено: 19:16 27-05-2011 | Исправлено: kostya_rlw, 19:18 27-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kostya_rlw
Ну кто же мешал вам пошаманить как мне?) Я тоже методом тыка, за принцип взяло...

----------
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:22 27-05-2011
kostya_rlw

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Я чесно говоря от неожиданности и восторга ), когда попробовал и получилось, даже воскликнул всух там что то...
...почему то в голове как догма было что конструкции типа 2>&1, > /dev/null  всегда в конце связки комманд ставить...

Всего записей: 57 | Зарегистр. 18-01-2006 | Отправлено: 19:30 27-05-2011 | Исправлено: kostya_rlw, 19:35 27-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> А зачем sudo?
ifconfig может быть запущен только рута.
 
> Я мысль не понял
> И кстати, если я правильно вас понял
:D
 
> true и false вы местами перепутали
Нет, там именно что все правильно.
 
> Что вы имеете в виду говоря "инвертировать код возврата"?
Вот это:
$ if sudo ifconfig wlan0 | grep 'UP'; then false; else true; fi
 
И вы мне даже уже почти ответили:
$ ! sudo ifconfig wlan0 | grep 'UP'
 
Я считал, что восклицательный знак — допустимый оператор только для test'а ([ и [[).
 

Цитата:
while true; do  
  if ! ifconfig eth0 | grep 'UP'; then tcpdump -i eth0; fi  
  sleep 30  
done

 
Запустить тисипи-дамп, если интерфейс не поднят — здесь написано.
 
gap5
 
#!/bin/sh
if ps -C tcpdump -o cmd | grep -q '\-i eth0'; then # не берусь судить о позиксности этой строки
 echo >&2 'tcpdump has already started'
 exit 1
fi
while ! ifconfig eth0 | grep -q 'UP'; do
 sleep 30
done
tcpdump -i eth0 &

 
А вот писать о том, что вам не для ГНУ, надо сразу.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:57 27-05-2011 | Исправлено: ASE_DAG, 19:59 27-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
ps у него нет, есть top - его нельзя заюзать?

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 19:57 27-05-2011 | Исправлено: gap5, 20:15 27-05-2011
Alukardd



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

Цитата:
ifconfig может быть запущен только рут
оО Ну не знаю как у вас, но у меня и так работает, если параметры не менять)
 
> :D
Да знаю сам, читал же свой пост, но по другому сказать не мог...  
 

Цитата:
Запустить тисипи-дамп, если интерфейс не поднят — здесь написано.  
Да, точно - но мысль просто дальше ушла - 1. упал 2. опознали падение 3. подняли 4. запустили tcpdump
Я просто выполнил без 3-го пункта)))
 
Ваш скрипт, кстати, тоже не без изъянов - если интерфейс отвалится, то tcpdump сам сразу не отрубится, и таким образом вы не узнаете, что интерфейс упал)
 
В общем уважаемый gap5, если вы хотите получить не просто советы или примеры, то опишите задачу от и до. Кто поднимет за нас интерфейс? Или это тоже надо следить? Мб и нашкрябаем что-то полноценное с проверками со всеми, но не обещаю.

----------
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 | Отправлено: 20:11 27-05-2011 | Исправлено: Alukardd, 20:12 27-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Интерфейс поднимает система когда какая-то софтина обращается к инету.
Я не знаю какая софтина каждую ночь нагибает меня на пару мегабайт трафика и хочу это выяснить.
Опускается интерфейс при простое, после неизвестного таймаута.
 
Соответственно скрипт в цикле должен проверять, поднят ли интерфейс и запущен ли tcpdump...

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 20:17 27-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
А там случаем нету чего-то подобного каталогам if-up.d, if-down.d ??? Тогда дело сильно упростится и уточнится)))

----------
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 | Отправлено: 20:23 27-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
> ps у него нет, есть top - его нельзя заюзать?
Мне казалось, у Цисок (никогда с ними не сталкивался, да) вообще не Позикс-система, я ошибался?
Но такого (ps нет, top есть) быть не может, ну по крайней мере не должно. Вы точно уверены?

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:42 27-05-2011 | Исправлено: ASE_DAG, 20:44 27-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня как всегда гениальные вопросы!
А можно ли в регулярке проверить не просто на наличие 3-х цифр [0-9]{3}, а еще что бы это число было от 0 до 101 например?

----------
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 | Отправлено: 20:50 27-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Именно в такой постановке вопроса — нет. Регэкспы предназначены для поиска соответствия строкам и только строкам.
Но регэксп здесь, очевидно, и не нужен. Пример задачи можно?
 
P.S. Ну, конкретно от нуля до ста одного описать регуляркой-то не сложно: ([0-9]{1,2}|10[01]), но в общем случае — никак.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:55 27-05-2011 | Исправлено: ASE_DAG, 20:58 27-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Нет, без примера. Как решить задачу я знаю и не 1 путём) Возможно и не самые рациональные, но костыли это практически неизбежная часть нашей работы
Волновал сам факт - просто в голову взбрело...
 
Добавлено:
ASE_DAG
Цитата:
[0-9]{1,2}|10[01]
да, башка у вас на регулярках не дурно варит... Это весьма обощенный способ вы предложили, так можно много чего формализовать... Спасибо.

----------
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 | Отправлено: 20:58 27-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
В dev есть такое:
 
aes_0 io8logmt tty.gas-gauge
bpf0  klog tty.iap
bpf1  mux.spi-baseband  tty.umts
bpf2  null ttyp0
bpf3  pf   ttyp1
btreset  ptmx ttyp2
btwake   ptyp0    ttyp3
console  ptyp1    ttyp4
cu.bluetooth  ptyp2    ttyp5
cu.debug  ptyp3    ttyp6
cu.gas-gauge  ptyp4    ttyp7
cu.iap   ptyp5    ttyp8
cu.umts  ptyp6    ttyp9
disk0 ptyp7    ttypa
disk0s1  ptyp8    ttypb
disk0s2  ptyp9    ttypc
disk0s2s1     ptypa    ttypd
dlci.spi-baseband.call ptypb    ttype
dlci.spi-baseband.chatty   ptypc    ttypf
dlci.spi-baseband.cl1  ptypd    ttys000
dlci.spi-baseband.extra_0  ptype    ttys001
dlci.spi-baseband.iq   ptypf    uart.bluetooth
dlci.spi-baseband.low  random   uart.debug
dlci.spi-baseband.pdp_0    rdisk0   uart.gas-gauge
dlci.spi-baseband.pdp_1    rdisk0s1 uart.iap
dlci.spi-baseband.pdp_2    rdisk0s2 uart.umts
dlci.spi-baseband.pdp_3    rdisk0s2s1    urandom
dlci.spi-baseband.pdp_ctl  sha1_0   vn0
dlci.spi-baseband.reg  tty  vn1
dlci.spi-baseband.sms  tty.bluetooth zero
io8log   tty.debug
 
ASE_DAG
Под IOS я имел ввиду не цисковский софт, а IphoneOS Top я отдельно накатывал, сейчас нашел пак adv-cmds там ps md finger.
 
В итоге при запуске:

Цитата:
#!/bin/sh
if ps -C tcpdump -o cmd | grep -q '\-i pdp_ip0'; then
 echo >&2 'tcpdump has already started'
 exit 1
fi
while ! ifconfig pdp_ip0 | grep -q 'UP'; do
 sleep 30
done
tcpdump -i pdp_ip0 -s 1450 -w /var/mobile/27.txt  
&
 

 
ругается ps:

Цитата:
root# ./tcp.sh
ps: illegal argument: tcpdump
usage: ps [-AaCcEefhjlMmrSTvwXx] [-O fmt | -o fmt] [-G gid[,gid...]]
          [-g grp[,grp...]] [-u [uid,uid...]]
          [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]
       ps [-L]
root# tcpdump: WARNING: pdp_ip0: no IPv4 address assigned
tcpdump: listening on pdp_ip0, link-type NULL (BSD loopback), capture size 1450 bytes
 

 
p.s. подскажите, чтобы вывод tcpdump'a был в файл с названием текущей даты как должна команда выглядеть?
что-то вроде  
 
tcpdump -i pdp_ip0 -s 1450 -w /var/mobile/%DD-%MM.txt ?

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 00:20 28-05-2011 | Исправлено: gap5, 00:29 28-05-2011
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
А зачем мне dev?

Цитата:
Под IOS я имел ввиду не цисковский софт, а IphoneOS
OMG! Вас покарать мало!!! Я всё еще гадал откуда у вас обычная командная оболочка и где там скрипты никсовые можно юзать... Там конечно есть tclsh, но синтаксис у него совсем другой. И как с ним общаться я тоже хз.
 
А почему нету IPv4 адреса назначенного интерфейсу?
/var/mobile/`date +%x`.log, если date есть... %x можно менять по вкусу на что желаете. (курить man date)

----------
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 | Отправлено: 00:47 28-05-2011 | Исправлено: Alukardd, 00:51 28-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Поиском (find / -name if*) нашелся только /sbin/ifconfig
 
Видимо специфика GPRS интернета, сначала поднимается интерфейс, потом получается IP...
 

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 12:32 28-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
> специфика GPRS интернета, сначала поднимается интерфейс, потом получается IP
DHCP это называется.
 
> IphoneOS
iPhone. iOS и IOS — разница небольшая, но есть.
 
> Поиском (find / -name if*) нашелся только /sbin/ifconfig  
Вы это к чему?
Плюс звездочки и знаки вопроса, если хотите их передать к.-либо программе, надо экранировать или закавычивать — иначе начинается угадайка: если в текущей директории будет соответствие паттерну if*, он раскроется шеллом, если не будет — повезло.
 
> ругается ps
Судя по выводу с описанием синтаксиса это фряшный ps. Ну что ж, переложим и фильтрацию по имени команды на греп:
ps -U root -o command | grep -q 'tcpdump.* \-i pdp_ip0'
а если процесс внезапно не принадлежит руту, то  
ps -a -o command | grep -q 'tcpdump.* \-i pdp_ip0'

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:45 28-05-2011 | Исправлено: ASE_DAG, 03:46 29-05-2011
gap5



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

Цитата:
#!/bin/sh
if ps -U root -o command | grep -q 'tcpdump.*\-i pdp_ip0'; then
 echo >&2 'tcpdump has already started'
 exit 1
fi
while ! ifconfig pdp_ip0 | grep -q 'UP'; do
 sleep 30
done
tcpdump -i pdp_ip0 -s 1450 -w /var/mobile/'date +%m-%d'.txt &
 

 
Запускаю скрипт, если tcpdump запущен, то сообщает об этом и выходит, если нет, то запускает tcpdump и ждет.  
 
Для теста вручную убиваю пид tcpdump'а, после этого перезапуска tcpdump'а не происходит, интерфейс поднят. Или перезапуск произойдет только после изменения статуса интерфейса?
 
 
 

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 21:34 28-05-2011 | Исправлено: gap5, 21:35 28-05-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
gap5
А где здесь вообще что-то про перезапуск? Это для запуска при старте системы, на случай если интерфейс еще не поднялся.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 22:42 28-05-2011 | Исправлено: ASE_DAG, 22:42 28-05-2011
gap5



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А можно туда еще и перезапуск в цикле прикрутить, если незапущен tcpdump но интерфейс поднят?

Всего записей: 1033 | Зарегистр. 30-05-2006 | Отправлено: 22:44 28-05-2011 | Исправлено: gap5, 22:55 28-05-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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