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

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



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

Цитата:
Обрисуйте задачу, которая перед вами стоит.

Mikrotik Router OS / RouterBoard and Snort IDS/IPS
Краснненьким я выделил свою проблему.
Задача настроить связку Mikrotik + Snort.
 
Вижу 2 варианта:
1. Решить задачу текущим способом, может производители trafr чем-то смогут помочь - написал в support.
2. Поидее можно стартануть Snort обычным способом, пускай слушает eth0 и ловит пакеты в promiscuous mode - всё равно нужный трафик я направил на этот сервер и Snort его должен увидеть.
Хотел избежать этого и ловить только нужный поток.
 
Добавлено:

Цитата:
@dk: daemon(). Из минусов: закрываются stdin, stdout и stderr

Т.е. это в принципе невозможно ?

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 12:08 17-02-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
slech
Прочитал. Не вполне понял, честно говоря, какую задачу выполняет здесь trafr и что это такое вообще (никогда раньше о нем не слышал) — если не лень, расскажите или дайте полезную ссылку. Но к делу это не относится.
 
Важно, что непонятно иное — зачем вам запускать snort как демон? Ну т.е., допустим, запустите вы его демоном, заставите принимать трафик из потока, формируемого trafr’ом (ничего невозможного тут нет, можно воспользоваться, например, именованным каналом (FIFO)) — дальше-то что? Trafr же, как я понял, запускаться демоном не умеет. Итого у вас один из работающих в связке процессов запущен демоном, а второй — обычным процессом. Какой в этом смысл?
 
Так что народную мудрость «лучшее — враг хорошего» и не морочьте себе голову — используйте так, как есть. :-) GNU Screen в помощь. Если нужен инит-скрипт для всего этого безобразия, то посмотрите как он реализован для rtorrent’a, последний вообще интерактивное приложение на ncurses’ах — и ничего, работает не хуже демона.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:40 17-02-2012 | Исправлено: ASE_DAG, 17:49 17-02-2012
slech



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Есть рутер Mikrotik
На нём установлен пакет calea
calea формирует поток необходимого мне трафика и шлёт всё это добро куда я говорю - данном случае на мой сервер с установленным Snort.
 
Поток этот можно принимать утилиткой под именем trafr(написааной ребятами из Mikrotik) и далее по stdiout на другое приложение, в моём случае на snort.
 
Разработчики trafr посоветовали мне:

Цитата:
 
attach trafr to screen:
screen -dmS mytrafr ./trafr
 
list all attached apps:
screen -list
 
connect to screen
screen -r
 

 
Т.е. то что посоветовали и вы.
Сначала потестирую как оно в обычном режиме, позже может доберусь и до screen.
 
Спасибо за помощь.

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 18:07 17-02-2012
Weinaum



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

Код:
#!/bin/sh
 
BACKUPFILE=/home/путь_к_дампу_бд/dumps/db_`date "+%y%m%d_%H%M"`.sql.gz  
mysqldump -u user1 -ppassword1 dbase1 -h host1 | gzip > ${BACKUPFILE}  
vim -c '%s/\"archiv/\"http:\\\\\/\\\\\/mysite.net\\\\\/archiv/g' -c 'wq!' ${BACKUPFILE}
/bin/gunzip < ${BACKUPFILE} | /usr/bin/mysql -u user2 -ppassword2 dbase2 -h host2
a=$(ls -ltr /home/путь_к_дампу_бд/dumps|wc -l);cd /home/путь_к_дампу_бд/dumps; rm $(ls -rt1 .|head -$(($a-4)))    

в принципе, может, от того что я его несколько раз почти подряд запускал, поскольку тестировал...
Да, и последнее,  
вот эта строчка с vim-
vim -c '%s/\"archiv/\"http:\\\\\/\\\\\/mysite.net\\\\\/archiv/g' -c 'wq!' ${BACKUPFILE}
что тут не хватает в случае консольного vim-a под windows?
Под cygwin-ом работает но только с незапакованным файлом.
Без cygwin не работает никак
Под юникс сейчас проблем нет никаких.
Еще раз спасибо за помощь и науку.

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 19:38 17-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
Про windows боюсь что-либо сказать...
Меняйте такого хостера к чёртовой матери - что за бред блокировать чужие процессы - я бы еще и п**шь поднял... Если не хочет что бы вы лишнего ели, то пускай ограничивает ресурсы, а не стопит процессы! Все эти операции будут жрать много процессорного времени, оперативки им много не надо, хотя это зависит от размера дампа. Vim, конечно не самое экономичное решение, но не думаю что он отъедает больше чем gzip.

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 21:18 17-02-2012 | Исправлено: Alukardd, 21:18 17-02-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> Vim, конечно не самое экономичное решение, но не думаю что он отъедает больше чем gzip.
Определенно больше. Гнузип не грузит весь дамп в память, а работает «на лету». А Вим грузит.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:30 17-02-2012 | Исправлено: ASE_DAG, 21:31 17-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Что-то мне подсказывает, что дамп вряд ли на столько огромен, что он съел больше оперативки, чем положено пользователю.
В любом случае эти операции более накладны для проца нежели для памяти.

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 23:00 17-02-2012
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
дамп и вправду небольшой совсем, может, mysqldump или mysql время проца занимает...
в общем, не столь важно...главное, работает..

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 01:19 18-02-2012
slech



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите пожалуйста как можно округлить результат умножения $5/1024/1024 ?
Там появляется иногда 22.4533, хоется видеть не более 2-ух цифр после запятой:
 

Код:
 
awk '{print $1"-"$3 " " $5/1024/1024}' speed-test-report-`date +"%m-%Y"`.txt | sed ....
 


Код:
 
2012-02-18 - 13:36:59 - 23544026.45 bit/s
2012-02-18 - 14:10:20 - 22341659.30 bit/s
2012-02-18 - 14:14:13 - 17951621.12 bit/s
2012-02-18 - 14:50:50 - 20887633.92 bit/s
 

 
Спасибо.

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 17:00 18-02-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
slech
Вывод с заданной точностью (как и все, что относится к выводу) во си-подобных языках — задача функции printf().
 
$ gawk 'BEGIN{ printf ("%.2f\n", 1/3) }'
0.33

 
А если хотите задать формат вывода чисел, который будет использоваться функцией print(), то это делается переменной OFMT.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:10 18-02-2012 | Исправлено: ASE_DAG, 19:11 18-02-2012
slech



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Спасибо.
 
Вот так зарабтало:

Код:
awk '{printf "%s%s %.2f\n", $1"-", $3, $5/1024/1024}' speed-test-report-`date +"%m-%Y"`.txt
#
# echo 2012-02-18 - 14:50:50 - 20887633.92 bit/s | awk '{printf "%s%s %.2f\n", $1"-", $3, $5/1024/1024}'

 
По поводу OFMT
 
вот так работает как нужно:

Код:
awk  'BEGIN{OFMT="%.2f"; print 12.3456789012 }'

а вот так не хочет

Код:
echo 12.3456789012 | awk  'BEGIN{OFMT="%.2f"; print $1 }'

Находил упоминание о том что $1 это строка, а не число.

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 21:04 18-02-2012 | Исправлено: slech, 21:07 18-02-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
slech
так фигли вы print $1 в BEGIN за толкали - он на вход ни чего не получает К тому же awk сам не догадается, что это число... Поэтому должно так:
echo "12.3456789012" | gawk 'BEGIN{OFMT="%.2f"}{print $1+0}'
Возможно т.ASE_DAG расскажет покрасивше что-нить... А вообще юзайте лучше printf

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 23:12 18-02-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите решить следующую задачу. Есть куча файлов, из разных папок, надо их скопировать на виндовую шару. Как скопировать я знаю, мне хотелось бы видеть процесс в динамике. Идеально организовать это так, как это делает тот же Krusader. Жмакаем "копировать", появляется уведомление с прогрессбаром и сам Krusader можно закрывать. Вот такой же функционал, но только через bash-скрипт, можно организовать?

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 12:57 05-03-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
$ man kioclient
 
$ kioclient --commands # или сразу так

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:03 05-03-2012 | Исправлено: ASE_DAG, 19:05 05-03-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Спасибо. Попробую. Странно, когда рыл сеть, не натыкался на эту прогу. И ман у неё, надо заметить, весьма куцый. Хотя там для меня всего одной команды должно хватить - cp откуда куда. И вроде обещают наглядность.
 
Upd
Ииииииаааахуууу! Это оно!

Код:
kioclient cp failo.ext smb://192.168.1.25/Рабочий\ стол/

И над треем стандартное уведомление с прогрессбаром. Крастотища!

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 23:15 05-03-2012 | Исправлено: Maximus777, 08:24 06-03-2012
slech



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

Код:
 
ProjectName=test
ProjectBkDir="$ProjectName-`date +"%Y.%m.%d"`"
#
lastn=$(find -maxdepth 1 -type d -name "*$ProjectBkDir*" -print | sed -e "s/\.\/$ProjectBkDir"_"//" | sort  -nuibr | head -n 1)
nextn=$(echo lastn+1 | bc)
echo $nextn
 

Можно ли получить nextn одной строкой вместо 2-ух ?
 
Спасибо.

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 15:45 15-03-2012 | Исправлено: slech, 15:46 15-03-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
slech
1. Вы это сюда по памяти набирали что-ли?
> sort  -nuibr
sort: options `-in' are incompatible
 
> echo lastn+1 | bc
$lastn
 
2. Допустим, что эти опечатки исправлены — никаких двух строк на выходе нет.
$ echo $nextn
4

 
3. А вообще, это у вас жесть какая-то. nextn=$(echo lastn+1 | bc) — в особенности.
 

Код:
#!/bin/bash
ProjectName="test"
ProjectBkDir="$ProjectName-$(date "+%Y.%m.%d")"
for f in "$ProjectBkDir"*; do # добавьте «*» в начало, если она там таки нужна
    n=${f##*_} # номер, надеюсь, подчеркивания не содержит
    ((lastn < n)) && lastn=$n
done
echo $((lastn+1))



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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:33 15-03-2012 | Исправлено: ASE_DAG, 18:36 15-03-2012
slech



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

Цитата:
1. Вы это сюда по памяти набирали что-ли?  


Цитата:
> sort  -nuibr
sort: options `-in' are incompatible


Код:
 
-i, --ignore-nonprinting    consider only printable characters
-n, --numeric-sort          compare according to string numerical value
 

вроде всё совместимо. в справке не нашёл упоминания о несовместимости этих опций.
 

Цитата:
> echo lastn+1 | bc

из текстового файлика. в скрипте нет такой ошибочки.

Цитата:
2. Допустим, что эти опечатки исправлены — никаких двух строк на выходе нет.  


Код:
lastn=$(find -maxdepth 1 -type d -name "*$ProjectBkDir*" -print | sed -e "s/\.\/$ProjectBkDir"_"//" | sort  -nuibr | head -n 1)
nextn=$(echo $lastn+1 | bc)  
 

вот тут 2 строки сейчас используются. сначала получаем lastn а затем увеличиваем его на 1 и получаем nextn.  
Вот об этом я и спрашивал, а можно ли в одну строку эти два действия выполнить ?
 

Цитата:
3. А вообще, это у вас жесть какая-то. nextn=$(echo lastn+1 | bc) — в особенности.  

А в чём жесть ?
Навреное в этом ?

Код:
 
echo $((lastn+1))
 

Буду обходиться без bc.
 
Спасибо за ваш вариант вырешения вопроса, буду разбираться как она работает.

Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 19:06 15-03-2012 | Исправлено: slech, 19:07 15-03-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
${f##*_}
ух... полезно иногда man bash перечитывать...
slech
Цитата:
А в чём жесть ?  
жесть в find + sed + sort + head...

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 19:09 15-03-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос
comerun
Во первых в  выражении grep стоит использовать кавычки одинарные, а вообще grep перед awk совсем не нужен. AWK и без того вумный язык.
Во вторых, второй сайт отдаёт 2 ответа на поиск hiiden поля, по сему надо бы взять только один.
И того на выходе получаем следующее
Код:
#!/bin/bash
 
URL1="https://www.voipdiscount.com/login/"
URL2="https://www.voipdiscount.com/recent_calls/"
HIDDEN=$(curl -s -k -c /tmp/cookie.txt "$URL1" | awk -F\" '/input.*hidden/{print $6"="$8}')
curl -s -b /tmp/cookie.txt -c /tmp/cookienew.txt --data "login[username]=provider21&login[password]=sev94kam55tar89rau88&$HIDDEN" "$URL1" > /dev/null
curl -s -b /tmp/cookienew.txt "$URL2" | grep "Remaining credit:" | awk -F\< '{print $3}' | awk -F" " '{print $3}'  
 
URL1="https://www.sipdiscount.com/login/"
URL2="https://www.sipdiscount.com/recent_calls/"
HIDDEN=$(curl -s -k -c /tmp/cookie.txt "$URL1" | awk -F\" '/input.*hidden/{print $6"="$8; exit;}')
curl -s -b /tmp/cookie.txt -c /tmp/cookienew.txt --data "login[username]=test2011_2&login[password]=test2011&$HIDDEN" "$URL1" > /dev/null
curl -s -b /tmp/cookienew.txt "$URL2" | grep "Your credit:" | awk -F\< '{print $3}' | awk -F" " '{print $3}'  
А вообще не стоит указывать реальные учётки... Это мне они не нужны, а кому-о могут и пригодиться... Хотя вторая у вас левая, но первая рабочая (хотя мб она и тестовая)...

----------
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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 17:21 16-03-2012
Открыть новую тему     Написать ответ в эту тему

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