2. Мониторинг сайта, постановку задачи см. здесь http://sysadminonline.ru/prostoy-skript-mo...inga-veb-sayta/ (там же и ответ
реальные задачи на bash (киньте линк, или дайти ваши :))
Модераторы: /dev/random, Модераторы разделов
-
SantaClausRpm
- Сообщения: 58
Re: реальные задачи на bash
1. Мониторинг свободного дискового пространства, как только занятость достигает 99% или выше - емайл админу.
2. Мониторинг сайта, постановку задачи см. здесь http://sysadminonline.ru/prostoy-skript-mo...inga-veb-sayta/ (там же и ответ
2. Мониторинг сайта, постановку задачи см. здесь http://sysadminonline.ru/prostoy-skript-mo...inga-veb-sayta/ (там же и ответ
In FOSS we trust
-
fox-contra
- Сообщения: 33
-
curtdp
- Сообщения: 1
- ОС: Windows, Ubuntu
Re: реальные задачи на bash
Парни, если тема жива - помогите решить задачу, очень прикладная 
Есть хостинг с кучей сайтов на одинаковой CMS, по нему прошелся вирус и подобавлял в index.php (бывает и в другие файлы) свой злобный код.
Задача - пройтись по всем папкам с сайтами найти все файлы по заданным условиям, имя (например тот же index.php или home.php - желательно чтоб было понятно как поменять
) найти в этих файлах зловредный код и удалить его (этот код, а не файл целиком
)
Еще вариант, есть все тот же хост с кучей сайтов, обновляется движок сайта, я заливаю архив на сервер, нужно пройтись по всем папкам и распаковать туда этот архив, естественно заныриваем в папку на 1 уровень, без рекурсий
Буду очень благодарен за помощь! Спасибо
Есть хостинг с кучей сайтов на одинаковой CMS, по нему прошелся вирус и подобавлял в index.php (бывает и в другие файлы) свой злобный код.
Задача - пройтись по всем папкам с сайтами найти все файлы по заданным условиям, имя (например тот же index.php или home.php - желательно чтоб было понятно как поменять
Еще вариант, есть все тот же хост с кучей сайтов, обновляется движок сайта, я заливаю архив на сервер, нужно пройтись по всем папкам и распаковать туда этот архив, естественно заныриваем в папку на 1 уровень, без рекурсий
Буду очень благодарен за помощь! Спасибо
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: реальные задачи на bash
куча скриптов == куча текста.
исправить == отредактировать
редактор называется sed
подскажите какие строки надо найти и убрать из файлов, я и команду напишу. Здесь достаточно всего одной команды:
Код: Выделить всё
sed 'что ищем в тексте и как исправляем' -i *.phpДа. для поиска логично юзать find
Однако я часто использую связку ls+sed(первая даёт список файлов, вторая отбирает нужные)
sed может запустить другую sed для того что-бы отредактировать нужный файл( s/ / /e )
-
butch
- Сообщения: 331
- ОС: :OC
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: реальные задачи на bash
вас обманули, ls как раз и является командой для получения списка файлов
sed тут непричём, ls тоже
подобные файлы доводилось видеть всего несколько раз, что в пределах статистической погрешности в сравнении с общим количеством - и в принципе если их надо тоже обработать, то легко можно сделать, опять же ls тут не причём.
-
butch
- Сообщения: 331
- ОС: :OC
Re: реальные задачи на bash
вы молодец =))))
так же можно по статистике прикинуть, сколько кирпичей падает на головы строителям, после чего отказаться от касок =))))
замечаетльный пример из часто встречаемых ошибок (самый первый)
кнчно можно использовать и ls =) но вот только нужно очень многие вещи предусмотреть
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: реальные задачи на bash
а я использую. и ни на какие грабли не натыкаюсь
Уважаемый diesel уже ответил почему.
Что до пробелов и минусов, дык их можно и нужно экранировать силами той-же sed, что я успешно и делаю(это же касается звёздочек и т.д.)
Что до find, то там граблей тоже много, и ман длинный и не понятный. Пока я в find вижу всего 1 преимущество: можно искать файлы по времени, а то sed считать не умеет, найти файл за 14 мая может, а вот те что младше 1 часа - проблема... Тоже можно, только сложно больно.
За то sed может выполнить любые, самые запутанные сценарии, вроде удаления файлов с нечётным именем:
Алла
Лена
Маша
Яна
Как удалить файлы Алла и Маша?
ну это так, первое что в голову взбрело...
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: реальные задачи на bash
ладно, вот вам эксперимент:
Код: Выделить всё
diesel@debian:/tmp/tmpc$ ls
file -file
diesel@debian:/tmp/tmpc$ for i in *; do sed -i -r -e '/^$/d' "$i"; done
sed: couldn't open file ile: No such file or directory
diesel@debian:/tmp/tmpc$ for i in `ls`; do sed -i -r -e '/^$/d' "$i"; done
sed: couldn't open file ile: No such file or directoryпотому как дело не в ls, а в:
Код: Выделить всё
diesel@debian:/tmp/tmpc$ for i in *; do sed -i -r -e '/^$/d' -- "$i"; done
diesel@debian:/tmp/tmpc$ for i in `ls`; do sed -i -r -e '/^$/d' -- "$i"; done
diesel@debian:/tmp/tmpc$более другой вариант для этого:
Код: Выделить всё
diesel@debian:/tmp/tmpc$ find -type f -exec sed -i -r -e '/^$/d' {} \;
diesel@debian:/tmp/tmpc$но он не всегда удобен.
Внимание вопрос, как часто вы отделяете опции команды от имен файлов с помощью "--"? речь идет не только о sed, а о любой команде, которая хочет иметь имя файла на входе. правильно, "почти никогда"
butch писал(а): ↑19.05.2009 12:03
замечаетльный пример из часто встречаемых ошибок (самый первый)
кнчно можно использовать и ls =) но вот только нужно очень многие вещи предусмотреть
эта ошибка означает "не используйте ls в for", а не "не используйте ls совсем" - это разные вещи. конструкцию типа ls | while read i; do ... никто не отменял, и она работает в 99% случаев. та доля процента в случае которой оно может глючить мне пока не встречалась _совсем_.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: реальные задачи на bash
ну и шутки у вас...
я не стал удалять, я решил переименовать файлы. Проблема вовсе не в ls и не в sed!
они как раз минусы отлично обработали. А вот для mv пришлось доки почитать, как такое переименовывать...
Оказалось - очень просто:
Shell
$ ls -1
Алла
-Зина
Лена
Маша
Наташа или Натали
Яна
$ ls | sed = | sed -r 'N; s/[] ()*]/\\&/g; s/([0-9]+)\n(.+)/\2 \1_\2/; s/^-/-- -/; s/.+/mv &/e'
$ ls -1
1_Алла
2_-Зина
3_Лена
4_Маша
5_Наташа или Натали
6_Яна
просто надо вставить перед файлом с - в начале --, и все дела... Но вот тех, кто такие файлы создаёт, поубивал бы
впрочем, я ведь могу и ls -i юзать
Без минусов намного проще:
ls | sed = | sed -r 'N; s/[] ()*]/\\&/g; s/([0-9]+)\n(.+)/mv \2 \1_\2/e'
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: реальные задачи на bash
можно и в for... проблема в том, что вообще-то ls разделяет файлы \n, а вот for считает что аргументы разделены $IFS, которая равна \x20 \x09 \x0a, потому и делит for не только по \n но и по пробелам. Но причём тут for??
давайте ещё такие файлы насоздаём, а потом будем удивляться!?
Shell
$ ll
итого 0
-rw-r--r-- 1 doc doc 0 2009-05-19 13:33
-rw-r--r-- 1 doc doc 0 2009-05-19 13:33 *
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: реальные задачи на bash
На случай, если встретится:
bash+GNU tools
$ touch $'\e[31mцветной\e[0m файл с %s, \'" и\nв две строки'
$ ls
$ ls --quoting-style=c |sed 's/%/%%/g' |while read -r n; do arg=$(eval printf $n); echo "$arg"; doneМои розовые очки
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: реальные задачи на bash
watashiwa_daredeska писал(а): ↑19.05.2009 13:30На случай, если встретится:bash+GNU tools
$ touch $'\e[31mцветной\e[0m файл с %s, \'" и\nв две строки' $ ls $ ls --quoting-style=c |sed 's/%/%%/g' |while read -r n; do arg=$(eval printf $n); echo "$arg"; done
гы
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: реальные задачи на bash
watashiwa_darede... писал(а): ↑19.05.2009 13:30touch $'\e[31mцветной\e[0m файл с %s, \'" и\nв две строки'
да вроде любые можно символы в имени. кроме \x00
я тоже...
понравилось $ ls --quoting-style=escape
-
butch
- Сообщения: 331
- ОС: :OC
Re: реальные задачи на bash
мы всетаки говорим о том, как правильно, или о том как мы делаем в повседневной жизни?
детей вот мы учим переходить на зеленый. а сами дорогу перебегаем как прийдется =) и так и так делают. но это не значит что и так и так - правильно.
да и примеры ваши ls не используют =)) а про двойной дефис кнчно верно отмечено.
-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: реальные задачи на bash
говорить о shell'е и забывать о повседневной жизни - глупо
Вам, например, рассказали, что for `ls`; do - это плохо, потому что в именах файлах могут быть пробелы, и рассказали что for *; do - это хорошо потому что проблемы пробелов можно избежать. Но вот незадача, хочется получать список файлов не от команды ls, а от другой команды... идеологически верный вариант будет? - если да - подставьте в него вместо той другой команды ls, и попытайтесь объяснить почему ls там нельзя (:
используют, там два цикла for, которые в данной ситуации ведут себя абсолютно одинаково, хотя в одном из них таки ls.
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: реальные задачи на bash
и кроме '/'. Идея была в том, чтобы показать, что можно работать с файлами достаточно универсально, не закладывая в скрипты грабли в виде неумения работать с пробелами, кавычками и прочими спец. символами.
Мои розовые очки
-
butch
- Сообщения: 331
- ОС: :OC
Re: реальные задачи на bash
вы почему то считаете, что я только носом тыкнутый в какое то правило способен иго применять. и шаг влево - и я уже теряюсь =))
ls - частности =)
я вот щас свои скрипты, написанные более года назад, переписываю =)) задачи хоть и тривиальные. но это не значит что не нужно предусматривать разные ситуации..
в общем дальше - флейм =)
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: реальные задачи на bash
ну вы предлагаете мне учить сына правильно биться головой об стену?! типа - "в жизни всё пригодится"? не должно быть таких файлов. Правильно - самому таких файлов не создавать, ОС их и так не создаёт(правильно настроенная), а если они берутся откуда-то из вне, например из ED2K, то их надо прямо там и переименовывать, как скачаются(или ещё раньше). Тогда будет всё хорошо.
-
butch
- Сообщения: 331
- ОС: :OC
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: реальные задачи на bash
У вас слишком сложно...watashiwa_darede... писал(а): ↑19.05.2009 15:13и кроме '/'. Идея была в том, чтобы показать, что можно работать с файлами достаточно универсально, не закладывая в скрипты грабли в виде неумения работать с пробелами, кавычками и прочими спец. символами.
В нашем примитивном случае это оправданно, однако если всё так писать, то скрипты будут огромными, не понимаемыми, и следовательно - с ошибками. (В книжках про надёжное программирование это уже, как я понял, доказано, жаль книжку найти не могу...)
К тому-же, с вашим подходом возможны другие(возможно более опасные) грабли - совместимость. Вот, в новой sed уже есть новая команда z, вот только у меня ещё старая. Да и у вас наверное тоже. Не факт, что используемые вами дополнительные возможности есть у всех. Потому ваш скрипт может вообще не сработать во многих системах(причём не факт, что область систем которые не поддерживаются вашим скриптом меньше). Хотя конечно спасибо, ваш подход тоже очень полезен.
грабли можно обходить по разному. имя - это всего-лишь атрибут файла, его используют для массовой обработки файлов, с одним файлом можно и без имени работать, по inode к примеру. Ничего странного, если мы пытаемся использовать кривые атрибуты, в конце концов, ни один из ваших скриптов не прочитает файл с правами 000, вы же не считаете это недостатком скрипта? Так и с именем - если кто-то или что-то создаёт такие файлы, то нужно либо отказаться от этого, либо настроить это, либо переименовывать такое, как выше было написано watashiwa_darede... или по inode.
да. только смайл наверное такой должен быть