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

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

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

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
      Шпаргалка по частым синтаксическим оборотам.

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

 

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

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



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Да в том то и дело что уже и shopt huponexit попробовал
Сейчас перепробую и с логами отпишу, может получится разобраться.

Всего записей: 139 | Зарегистр. 14-07-2004 | Отправлено: 11:21 30-07-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MakPol
Гляньте еще вместо pstree на такой вывод: ps -eo ppid,pid,cmd | grep 'bash\|tcpdump'
 
А так же для эксперимента попробуйте запустить в bg не весь скрипт а именно tcpdump.

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 11:38 30-07-2012
MakPol



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

Цитата:
Гляньте еще вместо pstree на такой вывод: ps -eo ppid,pid,cmd | grep 'bash\|tcpdump'

 

Код:
# ps -eo ppid,pid,cmd | grep 'bash\|tcpdump'
    1  2572 /bin/bash /usr/sbin/ksmtuned
 5678  5679 /bin/bash
 5678  5691 /bin/bash
 5678  5882 /bin/bash
 5678  5981 /bin/bash
17997 18001 -bash
18026 18030 -bash
18054 18055 -bash
18030 26714 /bin/bash /tmp/sborkatestscript.sh
    1 26716 /bin/bash /tmp/starttestscript.sh
26716 26718 tcpdump
18001 26722 grep bash\|tcpdump

 

Цитата:
Хм. Ну гляньте для надёжности что в переменной о которой говорил т.ASE_DAG: shopt huponexit

 

Код:
# shopt huponexit
huponexit       off

 

Цитата:
А так же для эксперимента попробуйте запустить в bg не весь скрипт а именно tcpdump.

 Точнно такая же ситуация, тоже пробовал
 
Спасибо огромное за помощь! То что предлагаете варианты. Просто очень надо разобраться.

Всего записей: 139 | Зарегистр. 14-07-2004 | Отправлено: 12:22 30-07-2012 | Исправлено: MakPol, 12:27 30-07-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MakPol
Такс, Ваше счастье — у меня в Debian так же всё завершается по Ctrl+C и есть некоторое свободное время, так что щас раскопаем, ну или хотя бы попробуем раскопать)

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 12:40 30-07-2012 | Исправлено: Alukardd, 12:40 30-07-2012
MakPol



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

Цитата:
MakPol
Такс, Ваше счастье — у меня в Debian так же всё завершается по Ctrl+C и есть некоторое свободное время, так что щас раскопаем, ну или хотя бы попробуем раскопать)

Спасибо огромнное! Еще есть OpenSUSE там проверил знакомый, так у него не убивается процесс. А у меня как и писал выше на CentOS 6.2, 6.3 и на Fedora 16 убивается...
 
P.S. Если убрать tail, то скрипт отрабатывает и после чего tcpdump работает как ни в чем ни бывало (в связке starttestscript-->tcpdump), только если убить запущеный tail эта цепочка прерывается.

Всего записей: 139 | Зарегистр. 14-07-2004 | Отправлено: 12:49 30-07-2012 | Исправлено: MakPol, 12:56 30-07-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MakPol
Хрень вся в том, что SIGINT получает не tail, а скрипт. Таково управление процессами. И почему оно в Ubuntu другое я хз.
Решение такое: изменить строку вызова в init крипте на такую: setsid /tmp/starttestscript.sh &
 
Добавлено:
Куря man bash нашёл еще вариант.
        set -m
         /tmp/starttestscript.sh &

 
Соответсвенно что бы Вам было понятнее о чём это я — выполните такую команду при запущенных скриптах: ps -eo ppid,pid,pgid,cmd | grep 'bash\|tcpdump'.
И увидите что pgid у них у всех одинаковый, а именно он и получает SIGINT.

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 14:10 30-07-2012 | Исправлено: Alukardd, 17:35 30-07-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> что SIGINT получает не tail, а скрипт
Не совсем. Это SIGHUP получал бы только скрипт (и вызывал бы цепную реакцию hang-up’oв по дочернему дереву, которую можно было бы пресечь). А хрень в том, что по ^C SIGINT получает вся группа процессов (PGID).  
 
Сравните результат:
# /tmp/sborkatestscript.sh
nohup: appending output to `nohup.out'
 
^Z
[1]+  Stopped                 /tmp/sborkatestscript.sh
# jobs -l
[1]+ 11896 Stopped                 /tmp/sborkatestscript.sh
# ps -C sborkatestscript.sh -C tcpdump -O pgid
  PID  PGID S TTY          TIME COMMAND
11896 11896 T pts/7    00:00:00 /bin/bash /tmp/sborkatestscript.sh
11900 11896 T pts/7    00:00:00 tcpdump
# kill -KILL 11896
# ps -C sborkatestscript.sh -C tcpdump -O pgid
  PID  PGID S TTY          TIME COMMAND
11900 11896 S pts/7    00:00:00 tcpdump
[1]+  Killed                  /tmp/sborkatestscript.sh
# kill -KILL -11896 # N.B. минус PID — это PGID
# ps -C sborkatestscript.sh -C tcpdump -O pgid
  PID  PGID S TTY          TIME COMMAND
#

 
KILL вместо не действующего на остановленные процессы INT’а использован, чтоб оставаться в одном терминале.
 
Таким образом, действительно, для иммунности tcpdump’а к ^C придется использовать setsid.
 
MakPol
Замечу все-таки, что SIGINT — сигнал аварийного останова и использовать его для штатного выхода не вполне правильно. Если бы вы использовали для завершения tail’а SIGQUIT (на клавиатуре: ^\ или ^4), то получили бы желаемое поведение безо всяких уловок.
 
P. S. За первоначальный ложный ответ прошу прощения.
 
P. P. S. А почему же все-таки в Убунте ситуация иная?

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

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



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Цитата:
А хрень в том, что по ^C SIGINT получает вся группа процессов (PGID).  
Я позже уточнил. Просто не убрал старый текст(
Цитата:
P. P. S. А почему же все-таки в Убунте ситуация иная?
и это я предположил. Там в ~/.bashrc, например или еще где описано set -m

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 17:33 30-07-2012 | Исправлено: Alukardd, 17:34 30-07-2012
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
> в ~/.bashrc, например или еще где описано set -m
Если бы... Опции, задаваемые set’ом, не наследуются.

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

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



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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 18:43 30-07-2012
MakPol



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alukardd, ASE_DAG, спасибо огромное за помощь. Очень помогли. А самое главное разжевали все. Отдельное огромное спасибо за терпение!

Всего записей: 139 | Зарегистр. 14-07-2004 | Отправлено: 23:25 30-07-2012
ck80

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу помочь в написании простенького скрипта на bash.
 
Вводное. Каждый час на фтп складываются файлы из нескольких источников.
Задача. Проверять время создания файлов в этой папке и если время создания какого-либо файла отличается от остальных(или в сравнении с текущим временем), то высылать уведомление админу на почту.
 
Структура каталога /home/ftp/exchange/:
 
-rw-r--r--  1 ftp nogroup  8096 2012-08-02 10:00 in1.zip
-rw-r--r--  1 ftp nogroup  4330 2012-08-02 10:00 in2.zip
-rw-r--r--  1 ftp nogroup  2737 2012-08-02 10:00 in3.zip
 
 

Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 08:08 02-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ck80
Эм? Так там разные же партии файлов будут иметь разные timestamp'ы... По какому критерию определять что файлы из одной группы?
К тому же на сколько точно надо сравнивать время? Нету ли зазора что копирование может продлится больше минуты? В общем насколько точно надо сравнивать времена.

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 10:39 02-08-2012
ck80

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
Я неправильно изъяснился.  
 
На ftp лежат файлы. В начале каждого часа (в 00 минут) они перезаписываются новыми файлами, каждый из своего источника. Нужно контролировать, все ли файлы из всех ли источников появились вовремя. Сейчас я каждый час захожу на фтп и проверяю, все ли файлы на месте. А хочется скриптом, если файла вовремя нет - бить тревогу.  
Скрипт я предполагаю поместить в cron, ежечасно в 15 минут каждого часа. 15 минут хватит на копирование.
 
Как я себе это представляю
 
if timestamp_file in1.zip => curenttime-15min then exit
    esle mailto root -subject "Файл из источника 1 не скопировался!"

Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 13:35 02-08-2012 | Исправлено: ck80, 13:44 02-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ck80
Ну тогда можно проверять только дату и час, т.к. это однозначно ответит на ваш вопрос — копировалось или нет.
Щас накидаю.

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 14:08 02-08-2012
bga83



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Коллеги, нужна помощь.
идея следующая: надо задать переменную окружения на выполнение одной команды.  
А именно надо для одной команды(скорее все wget будет) указать другой прокси в http_proxy, но так чтобы это не затронуло работу остальных сервисов.

Всего записей: 2008 | Зарегистр. 30-11-2007 | Отправлено: 14:20 02-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ck80
Извини, что в одну строку, но я писал это прямо в терминале)вотЪ

Код:
#!/bin/bash
IFS=$'\n';
for file in $(ls -l /tmp/testdir/|grep -v 'итого'); do
    name=$(echo "$file" | awk '{print $NF}');
    res=$(echo "$file" | awk '{gsub(/:[0-9][0-9]/,"",$8); print $6" "$7" "$8}');
    now=$(date | awk '{gsub(/:[0-9][0-9]/,"",$4);
    print $2" "$3" "$4}');
    if [ $res != $now ]; then
        echo alarm - $name;
    fi
done

 
Добавлено:
bga83
Указываете её прямо в строке перед командой и всё. Или есть подвох?)..

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 14:55 02-08-2012 | Исправлено: Alukardd, 15:02 02-08-2012
bga83



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

Всего записей: 2008 | Зарегистр. 30-11-2007 | Отправлено: 15:38 02-08-2012
ck80

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alukardd
 
Спасибо сейчас попробую.
 
Встретил ещё вот такой вариант:
 
#!/bin/bash
if [[ $(find /home/ftp/*1.zip -mmin +15) ]]; then
   mail -s "Тревога!" root
fi

Всего записей: 247 | Зарегистр. 03-07-2007 | Отправлено: 08:32 03-08-2012
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ck80
Да норм вариант. Правда он Вам не покажет какой именно файл, но это уже мелочи.
Лучше используйте вариант с find. Способов почти всегда несколько, мне в голову взбрёл не самый короткий...

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

Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 11:27 03-08-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 154

Компьютерный форум 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