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

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



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

Цитата:
не работает в шелле sh(FreeBSD)

Это первое что следовало прочитать в шапке. Написано черным по белому

Всего записей: 4595 | Зарегистр. 14-09-2007 | Отправлено: 14:51 11-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
 
> прошу прощения, что не указал сразу ... [—] для теста скрипт пишется на Bash, но ... в итоге скрипт должен работать на чистом sh
 
Печаль.
 
И зачем так делать (тестировать на другом интерпретаторе), если не секрет?
 
> поэтому:
>> cm='\x11\0\x0D\xE0'
>> echo -ne "$cm"
> и  
>> ii=$((ii + 1))
> не работает в шелле sh (FreeBSD)
 
ORLY? Какой у вас версии sh / Фряха, что оно там не работает? (А let не будет, да.)
 
> Весь вывод STDOUT перенаправляю в /dev/null
 
А что вы на нем ожидаете, если при помощи of вы его уже отправили в /tmp/request?
 
> От dd мне нужно вычитка из порта всего пакета данных.
 
И для чего тогда именно dd? Или даже с dd, коли он вам так нравится, зачем по одному байту читать, вместо всего пакета данных?
 
cat "$device" > /tmp/request
dd 2>&- if="$device" of=/tmp/request

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:29 11-07-2015 | Исправлено: ASE_DAG, 17:35 11-07-2015
kpp77

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

Цитата:
И зачем так делать (тестировать на другом интерпретаторе), если не секрет?  
... 
>> ii=$((ii + 1))  
> не работает в шелле sh (FreeBSD)  
 
ORLY? Какой у вас версии sh / Фряха, что оно там не работает? (А let не будет, да.)  
...
И для чего тогда именно dd? Или даже с dd, коли он вам так нравится, зачем по одному байту читать, вместо всего пакета данных?  
 

 
Есть ф-ция расчета контрольной суммы(модбас реализована на bash) которую я пока не придумал как реализовать на sh.
FreeBSD 8.4, sh идет вместе с ней, как посмотреть версию sh - не нашел.
Ошибочка вышла - ii=$((ii + 1)) - работает.
Если пробовать читать все одним блоком сразу, т.е. значения(согласно ману) count=1, bs=512, вообще ничего не вычитывается, если выставить bs=255 - вычитывается, но результат ничем не отличается от побайтового считывания.

Всего записей: 72 | Зарегистр. 29-08-2012 | Отправлено: 23:32 11-07-2015
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброй ночи, есть такой вопрос
Как сделать автоподъем скрипта при запуске сервер на базе Centos?
нужно чтоб при запуске, выполнялась команда:
 

Код:
nohup python mysql_sok.py </dev/null &>/dev/null &

я так понимаю, что прописывать нужно в файл

Код:
/etc/rc.local

но что-то не получается сделать.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 23:54 15-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
 
> автоподъем скрипта при запуске
 
При запуске чего? Вернее даже спросить так — после запуска чего?  
 
> прописывать нужно в файл /etc/rc.local, но что-то не получается
 
Не получается что — дописать строчку в файл?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:01 16-07-2015
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо уже писать systemd unit для запуска oneshot service...

----------
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:12 16-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpp77
 
> Ошибочка вышла - ii=$((ii + 1)) - работает.
 
А echo -ne таки нет?
 
> Если пробовать читать все одним блоком сразу, т.е. значения(согласно ману) count=1, bs=512
 
Я решительно не понимаю, зачем вы вообще задаете размеры блока для символьного устройства. И как следствие, зачем вам сдался dd.
 
Что до проблеме с 48-ю байтами и т. д. — мне нечего сказать в рамках этой ветки, UNIX Shell, — если на простое $ cat /dev/${chardev} — устройство возвращает что-то не то, что вы от него ожидаете — это проблема не с шеллом.
 
Разве что спрошу — /dev/cua* — это ведь старый интерфейс, сейчас везде используются /dev/tty* — у вашего устройства его нет, или что?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:34 16-07-2015 | Исправлено: ASE_DAG, 00:39 16-07-2015
Vania

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть VPS с виртуализацией OpenVZ. Постоянно через четыре часа, бывает и раньше, VPS замедляется. Теряет доступность, не пингуется, войти через Putty возможно только со второй третьей попытки. Привести его в рабочее состояние можно только перезагрузкой. Подробно я описывал в этой теме Падает (замедляется) VPS
Нужен скрипт, который отслеживал бы его состояние. Когда произойдёт замедление, автоматически происходит перезагрузка. Проверка замедления проверяется по пингу сервера в USA. После замедления почти все сервера из USA недоступны для пинга с VPS.
Скрипт должен пинговать сервер в USA, и если он не пингуется, запускать перезагрузку. Нашёл здесь http://www.commandlinefu.com/commands/view/3876/check-a-server-is-up.-if-it-isnt-mail-me. подходящий скрипт, который посылает e-mail когда сервер не пингуется. Заменил отправку e-mail на перезагрузку. И -c1 на -c5 что бы пять раз пробовал пинговать.  
 

Код:

ping -q -c5 -w3 69.164.200.202 2&>1 /dev/null || /sbin/reboot

 

 
Проверил в работе, перезагрузка происходит в любом случае. Когда 69.164.200.202 пингуется и не пингуется. Нужно что-то исправить.
 
Буду запускать этот скрипт через Cron каждые 5 или 10 минут. Если не пингуется, перезагружаем сервер. Если пингуется, ничего не делаем.
 
Если будут предложения как приводить VPS в рабочее состояние без перезагрузки, пишите в эту тему  Падает (замедляется) VPS
Спасибо.

Всего записей: 1941 | Зарегистр. 30-12-2005 | Отправлено: 15:58 16-07-2015 | Исправлено: Vania, 16:34 16-07-2015
Sutar



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

Цитата:
При запуске чего? Вернее даже спросить так — после запуска чего?  

При запуске сервера
 

Цитата:
Не получается что — дописать строчку в файл?

я её дописал, и обновил. Но эффекта нету.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 20:02 16-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vania
 
> ping -q -c5 -w3 69.164.200.202 2&>1 /dev/null
> Проверил в работе, перезагрузка происходит в любом случае.
 
Ну так конечно — для начала просто посмотрите внимательно, что вы понаписали — пинговать 69.164.200.202, 2, и /dev/null, перенаправляя STDOUT и STDERR в файл 1. В силу реализации, ping берет только последний узел из списка, так что в файле 1 в текущем каталоге должно быть написано ping: unknown host /dev/null.
 
Но у вас там есть и еще одна проблема, вызванная тем, что вы забыли, что ping отправляет запросы не подряд, но с некоторым интервалом -i, что по-умолчанию равен целой одной секунде.
 
Добавлено:
Sutar
 
>> При запуске чего? Вернее даже спросить так — после запуска чего?
> При запуске сервера
 
И что такое «сервер»? Я почему спрашиваю, название этого вашего скрипта — mysql_sok; что бы ни значили буквы sok, буквы mysql намекают, что он должен запускаться не раньше, чем подымется mysqld.
 
А что до того, как правильно сделать, то т. Алукард верно сказал — набросайте модуль для Систем-Д.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 20:28 16-07-2015 | Исправлено: ASE_DAG, 20:38 16-07-2015
Sutar



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

Цитата:
И что такое «сервер»

VPS сервер.
 

Цитата:
что бы ни значили буквы sok

писал, что в голову пришло.
 

Цитата:
буквы mysql намекают

скрипт подключается к MySQL. Но тут тоже нюанс, там циклическое соединение.
Т.е. если соединение не удастся, то будет повторный конект, через 5сек. И так, пока не будет полноценное соединение. Так что по поводу "Очередности" запуска, можно не волноваться.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 22:09 16-07-2015
Vania

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я этот скрипт запускал для проверки как команду. Да, в текущем каталоге root создался файл 1 с содержимым ping: unknown host /dev/null
Я хотел найти готовый скрип для своей задачи. Так как я сам его не напишу. Вот здесь есть ещё варианты подходящие для моей задачи https://debian.pro/176
Вот такой скрипт. Он подойдёт для моей задачи? Или если не подойдёт, как его доработать под мою задачу?

Код:

if ping -c 5 69.164.200.202 >> /dev/null
then
echo "Internet is connected"
exit 0
else
/sbin/reboot
echo "Reboot"
fi

 

Всего записей: 1941 | Зарегистр. 30-12-2005 | Отправлено: 23:27 16-07-2015 | Исправлено: Vania, 23:30 16-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vania, «скриптом», который вы не осилите написать, вы называете одно условие (ЕСЛИ-НЕ)-ТО? Ну тогда даже не знаю, чем вам помочь.
 
> 2&>1 /dev/null
 
То перенаправление выводных потоков, что вы пытались написать, выглядит так: >/dev/null 2>&1 (именно в таком порядке), плюс для перенаправления обоих выводов есть краткая форма записи: &>/dev/null, однако нет никакой необходимости выводы куда-либо перенаправлять, когда можно просто перекрыть: 1>&- 2>&- (краткой формы нет).
 
> ping -q -c5 -w3 69.164.200.202
> Заменил ... -c1 на -c5, чтобы пять раз пробовал пинговать
 
Но, как я уже сказал, не учли, что ping отправляет запросы не подряд, но с некоторым интервалом -i, что по-умолчанию равен целой одной секунде.

       -i interval
              Wait interval seconds between sending each packet.  The  default
              is  to  wait for one second between each packet normally, or not
              to wait in flood mode. Only super-user may set interval to  val-
              ues less 0.2 seconds.

 
Либо же вовсе забыли посмотреть, что такое -w3, а это таймаут.

       -w deadline
              Specify  a  timeout, in seconds, before ping exits regardless of
              how many packets have been sent or received. In this  case  ping
              does  not  stop after count packet are sent, it waits either for
              deadline expire or until count probes are answered or  for  some
              error notification from network.

 
Таким образом, вы приказали отправить пять пакетов с интервалом в одну секунду и получить на все пять ответы за три секунды. Как вы думаете, насколько это возможно?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 23:56 16-07-2015 | Исправлено: ASE_DAG, 04:25 17-07-2015
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Vania
А чем вам так вывод пинг не угодил, что вы его все в девнуль собираетесь отправить? Он что вам оверлеем поверх всего на моник выводится?

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 09:54 17-07-2015
Vania

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

Код:

ping -q -c5 -w6 69.164.200.202 2&>1 /dev/null || /sbin/reboot

 

Исправил таймайт на 6 секунд. Но это не помогло перезагружается при успешном пинге.
 
Вот этот вроде нормально работает.

Код:

if ping -c 5 69.164.200.202 >> /dev/null
then
echo "Internet is connected"
exit 0
else
/sbin/reboot
echo "Reboot"
fi

 

Если адрес пингуется, то пишет "Internet is connected" и продолжает работать. Как замедлится, проверю что получится.
 
 

Цитата:
А чем вам так вывод пинг не угодил, что вы его все в девнуль собираетесь отправить? Он что вам оверлеем поверх всего на моник выводится?

 
Как я писал уже выше я хотел найти готовый скрипт не вникая в детали. В том скрипте что я нашёл, так было написано. Я стараюсь менять минимум. Вдруг девнуль для чего-то нужен, а я его удалю.
Но если вникать, то девнуль  действительно не нужен, там даже в комментариях написано что это применяется "чтобы в консоль выводом не срало."

Всего записей: 1941 | Зарегистр. 30-12-2005 | Отправлено: 13:24 17-07-2015 | Исправлено: Vania, 13:25 17-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vania
 
> ping -q -c5 -w6 69.164.200.202 2&>1 /dev/null || /sbin/reboot
> Исправил таймайт на 6 секунд. Но это не помогло перезагружается при успешном пинге.
 
> 2&>1 /dev/null
 
Вы не помните, о чем мы говорили даже два реплики тому назад?

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 21:48 17-07-2015
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
а мне вы поможете?

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 22:40 17-07-2015
Alukardd



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
Вообще по нормальному Вашу команду надо бы превратить в init скрипт и в зависимостях для chkconfig описать mysql. Тогда он и так будет стартовать после mysql'я и всё будет прекрасно.

----------
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 | Отправлено: 02:01 18-07-2015
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar> а мне вы поможете?
 
А че сразу я-то? Почему вы т. Алукарда игнорируете? Он дело говорит — в зависимости от того, насколько у вас старая Центось, надо написать либо модуль (unit) для Систем-Д (только не oneshot, a simple), либо инит-скрипт для Систем-V (пять).
 
Ничего сложного тут нет абсолютно, вот набросок модуля для Систем-Д:

[Unit]
Description=Optical axis cleaning daemon
After=mysql.service
Requisite=mysql.service
 
[Service]
Type=simple
ExecStart=/usr/local/bin/mysql_sok
StandardInput=null
StandardOutput=null
StandardError=null
 
[Install]
WantedBy=multi-user.target

 
Писать $ interpreter script ($ python script.py, $ sh script.sh, $ perl script.pl) — моветон; убедитесь, что правильно прописан хэшбанг и дайте срипту бит исполняемости.
 
mysql.service — это в Дебиане так называется, в Центоси может быть и mysqld.service — поверьте.
 
Но вообще, неплохо бы этот ваш скрипт видеть и понимать, что он делает. Так, например, он постоянно должен работать или рано или поздно завершиться? И соответственно, что с ним нужно делать, когда он внезапно завершился? И разумно ли его запускать со сверхпользовательскими (superuser) правами? Что-то мне подсказывает, что нет.

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

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 05:24 18-07-2015 | Исправлено: ASE_DAG, 06:19 18-07-2015
Sutar



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

Цитата:
 Так, например, он постоянно должен работать или рано или поздно завершиться?

должен работать постоянно.
 

Цитата:
И соответственно, что с ним нужно делать, когда он внезапно завершился?

желательно, запустить ещё раз
 

Цитата:
И разумно ли его запускать со сверхпользовательскими (superuser) правами?

думаю что нет.
 
Добавлено:
Alukardd

Цитата:
Вашу команду надо бы превратить в init скрипт и в зависимостях для chkconfig описать mysql.

Я в этом мало что знаю. Просто, нужно сделать автоапуск при запуске сервера. И желательно, повторый запуск, при внезапной остановке скрипта.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 10:34 18-07-2015
Открыть новую тему     Написать ответ в эту тему

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