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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
Во-первых, & внутри скрипта уже лишний.
Во-вторых, Что значит "не работает? В лог-то хоть что-то попадает? Ну или вам в консоль, хотя бы.
В-третьих, вообще-то, переписывать ни чего не надо, всё и так должно работать, будь то sh или bash.

----------
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:45 04-11-2018
dvk54

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
"во-первых" - я уже пробовал разные варианты...
"во-вторых" - вот как это выглядит:

Код:
 
root@host1:~ # ssh host2 'nohup /bin/sh -s /root/u.sh >> /var/log/test.log 2>&1 &'
Неоднозначное перенаправление вывода.
root@host1:~ # ssh host2 "nohup /bin/sh -s /root/u.sh >> /var/log/test.log 2>&1 &"
Неоднозначное перенаправление вывода.
root@host1:~ #
 

"В-третьих" - ну вот не работает...
 
а portsdb отрабатывает вот как:
root@host1:~ # ssh host2 '"nohup cd /usr/ports&&portsdb -uU &"'
на хосте2 в htop, на пару секунд возникает картина:

Код:
 
  PID USER      PRI  NI  VIRT   RES S CPU% MEM%   TIME+  Command
    0 root      -16   0     0   272 S  0.0  0.0  4:01.50 kernel
    1 root       52   0  5428  1152 S  0.0  0.1  0:00.04 L- /sbin/init --
 7880 root       52   0  7484  3460 S  1.5  0.2  0:00.00    +- csh -c nohup cd /usr/ports&&portsdb -uU &
 7882 root       72   0 14944  9136 R  4.9  0.5  0:00.15    ¦  L- /usr/local/bin/ruby24 /usr/local/sbin/portsdb -uU
 

и всё. в логах ничего нет. на консоли host2 - ничего не выводится.
я чего-то главного не понимаю, похоже

Всего записей: 178 | Зарегистр. 18-06-2005 | Отправлено: 20:15 04-11-2018 | Исправлено: dvk54, 20:27 04-11-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dvk54
А зачем вы по ssh ещё дополнительно вызываете /bin/sh?
Да ещё и зачем-то с ключлм -s, это же stdin читать, а  у Вас его нету.

----------
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:42 04-11-2018
CKOPnuOH



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здравствуйте уважаемые Гуру!
 
ASE_DAG

Цитата:
> Скрипт снял с меня рутиную работу ... анализировать логи и добавлять нарушителей в конфиг. В принципе большего пока от него не требуется.
> Думаю, тех знаний, которые я получил, ... мне теперь вполне хватит.  
 
Ну и славненько! Обращайтесь, если что.

 
И снова я
Прошло не мало времени и наш с Вами написанный скрипт исправно работает по сей день.
 
Параллельно ему трудился еще один скрипт но на sh:

Код:
 
#!/bin/sh
 
DIR=/usr/local/etc
RCFG=/usr/local/etc/rinetd.conf
 
ping -n -c 1 -s 1 172.17.2.10 >/dev/null 2>&1
    if [ $? -ne 0 ]; then
    ping -n -c 1 -s 1 172.17.2.11 >/dev/null 2>&1
    if [ $? -ne 0 ]; then
        if [ -f $DIR/.default.key ]; then
        rm $DIR/.default.key
        fi
        if [ -f $DIR/.reserve.key ]; then
        rm $DIR/.reserve.key
        fi
        date | xargs echo >> $DIR/vpn_error.log
    else
        if [ -f $DIR/.default.key ]; then
        rm $DIR/.default.key
        fi
        if [ -f $DIR/.reserve.key ]; then
        else
        echo > $RCFG
        echo logfile /var/log/rinetd.log >> $RCFG
        echo >> $RCFG
        echo 0.0.0.0 3389    172.17.2.11    50000 >> $RCFG
        echo >> $RCFG
        service rinetd restart
        date | xargs echo > $DIR/.reserve.key
        fi
    fi
    else
    if [ -f $DIR/.reserve.key ]; then
        rm $DIR/.reserve.key
    fi
    if [ -f $DIR/.default.key ]; then
    else
        echo > $RCFG
        echo logfile /var/log/rinetd.log >> $RCFG
        echo >> $RCFG
        echo 0.0.0.0 3389    172.17.2.10    50000 >> $RCFG
        echo >> $RCFG
        service rinetd restart
        date | xargs echo > $DIR/.default.key
    fi
    fi
 
 

 
Который проверял наличия пинга двух тунелей и в зависимости от их работоспособности конфигурировал rinetd.
 
Вообщем в последнее время второй скрипт стал себя как-то странно вести. ОЧЕНЬ! МНОГО!! ложных срабатываний.
И решил я его переписать на что-то новое по типу Вашей серии:

Код:
 
if ping -c "$c" "$host" \
| awk -v c="$c" \
'$3 == "transmitted," && c == $1 && $1 == $4 { success = 1 }
END { if (!success) exit 3 }'
then
echo 'OK'
else
echo 'FAIL'
fi  
 

Но так как мои знания awk скудны - прошу помочь перевести скрипт из sh в скрипт awk который был написан ранее.
 
ADD. Имеется ввиду объединить оба скрипта в один.  
 
Добавлено:
Сами print-ы да передергивания rinetd я переписать то смогу, а вот как правильно и в каком месте того скрипта прописать проверку пинга на подобие Вашего скрипта - что-то собразить не получается.

Всего записей: 339 | Зарегистр. 28-05-2004 | Отправлено: 08:55 06-11-2018 | Исправлено: CKOPnuOH, 08:59 06-11-2018
redson



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как реализовать в bash скрипте логирование ошибок (плохих errorlevel) при выполнение команд. Например при выполнение команды, произошла ошибка, нужно сохранить ошибку в error.log
 
Например сейчас я после каждой команды, пишу условие:
 
#если errorlevel больше 0, то пишем в лог ошибок
if [[ $? -gt 0 ]];then
echo -e >> $ERROR_LOG
echo -e "Erorr!!! Problem ! (`date +%Y_%m_%d-%H_%M_%S`)" >> $ERROR_LOG
 
все работает отлично, но в скрипте получается много строк, хочется как то по компактней

Всего записей: 1336 | Зарегистр. 23-04-2007 | Отправлено: 10:04 07-11-2018 | Исправлено: redson, 10:07 07-11-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
redson
ну начнём с того что сам stderr команды надо писать в лог.
Это просто exec 2>"$ERROR_LOG" в начале скрипта.
 
А вообще можете что-то типа такого использовать

Код:
 

#!/bin/bash
 
ERROR_LOG="/tmp/errlog"
 
exec 2>>"$ERROR_LOG"
 
function err() {
  echo -e "[$(date +%Y_%m_%d-%H_%M_%S)] ERROR: $*" >&2
}
 
function run() {
  $*
  if [[ $? -ne 0 ]]; then
    err "Command failed: '$*'"
  fi
}
 
run true
run false
run ls -l
run false 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.

Всего записей: 6562 | Зарегистр. 28-08-2008 | Отправлено: 18:12 07-11-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А вообще, если забить на exit_code, то просто красиво ловить stderr и писать можно так

Код:

ERROR_LOG="/tmp/errlog2"
exec 2> >( cat | xargs -I {} echo -e "[$(date +%Y_%m_%d-%H_%M_%S)] ERROR: {}" >>"$ERROR_LOG"; )


----------
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 | Отправлено: 00:26 08-11-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возможно кто-нибудь подскажет: как скачать при помощи curl?
https://urlhaus.abuse.ch/downloads/csv/
https://urlhaus.abuse.ch/downloads/text/

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 14:30 14-12-2018
karavan



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

Код:
curl -s https://urlhaus.abuse.ch/downloads/text/ > urlhaus.abuse.ch.txt

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 14:45 14-12-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan,
Спасибо. Буду со своим curlrc разбираться, ибо с ним не работает.

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 15:36 14-12-2018
mithridat1



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выпуск GNU Grep 3.2 и Sed 4.6

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 09:20 22-12-2018
karavan



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Прошу совета по корректировке скрипта с целью ускорения его работы.
Задача:
Есть файл с миллионом записей FQDN, которые необходимо отресолвить и если есть значение типа A или CNAME, то сложить в отдельный файлик.
Ресолв осуществляется на локально установленном unbound.
Сам скрипт:
 
 
Проблема в том, что я не понимаю причин, по которым скрипт обрабатывает не более 10-15 входных строк за секунду.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 03:02 23-12-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karavan
Ой что-то вы намудрили мне кажется. Более того писать в файл из параллельных процессов без блокировки нельзя.
 

Код:
MAX_JOBS=15; cat /tmp/domains | parallel --jobs=$MAX_JOBS -I {{}} 'dig +short {{}} @127.0.0.1;' >> /tmp/result.file

Ключи parallel: -k, --lb и --group добавлять по желанию после прочтения man'а.
 
Добавлено:
К томуже какой continue внутри subshell'а в if?.. Он там просто не отработает же.

----------
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 | Отправлено: 16:36 24-12-2018
karavan



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

Цитата:
Ключи parallel

Спасибо!

Цитата:
какой continue внутри subshell'а в if?

Да, прочитав вопрос, осознал казус. Самое интересное, что оно работало ))
Правда, недолго, через 15-20 тысяч доменов родитель загружал проц на 100, а дети (ps, grep и wc) об'являлись зомбиками.

Всего записей: 1962 | Зарегистр. 02-12-2011 | Отправлено: 18:36 24-12-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ссылка для примера:
https://raw.githubusercontent.com/carsonoid/sublime_man_page_support/master/Man%20Page/Man%20Page.sublime-syntax
при помощи wget скачивается как Man Page.sublime-syntax
при помощи curl как Man%20Page.sublime-syntax
добавлял ключи -O, -J безуспешно. Как заставить curl скачивать с именем без "%20"?

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 12:48 29-12-2018
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
Ну как бы об этом сказано прямо в man curl
There is no URL decoding done on the file name. If it has %20 or other URL encoded parts of the name, they will end up as-is as file name.
 
Добавлено:
Как с этим потом работать в bash'е?
Есть весьма простой ответ и на чистой bash'е — https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell#answer-37840948

----------
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 | Отправлено: 14:57 29-12-2018
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd,
Благодарю. Буду для таких ссылок использовать wget

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 15:38 29-12-2018
mithridat1



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

Всего записей: 4924 | Зарегистр. 05-01-2006 | Отправлено: 13:29 08-01-2019
los

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь использует программы bmake, bsdmake и т.п.?
Нужна помощь с настройкой.

Всего записей: 7322 | Зарегистр. 08-09-2001 | Отправлено: 15:50 02-03-2019
newhk



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, помогите советом плиз...
 
Хотел сделать пинговалку заданного диапазона, но не по IP-адресу, а по имени:

Код:
 
#!/bin/bash
for (( count=000; count<131; count++ ))
do
ping -c 1 host-$count
done
 

Идея в том, чтобы пинговалка начинала с имени host-000, далее host-001 и т.д., но она упорно не воспринимает впереди стоящие нули.
Вопрос. Как заставить скрипт делать то что мне нужно?

Всего записей: 400 | Зарегистр. 02-02-2009 | Отправлено: 11:40 16-03-2019
Открыть новую тему     Написать ответ в эту тему

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