LINUX.ORG.RU

В сотый раз про кодировку


0

1

Добрый вечер, коллеги.

Имею вопрос не шибко важный, да и не шибко сложный. На уже весьма старом файловом серваке старый администратор настраивал самбу под досовский чарсет. В связи с этим искать файлы на кириллице мне приходилось глазами.

Сейчас активиризировались шифровальщики, и я пару раз по удачным стечениям обстоятельств обнаруживал их первые следы раньше, чем они успевали наносить какой-либо вред. Для пущей бдительности написал простенький скрипт по поиску всякого подозрительного бобра:

#!/bin/bash
my_admin=admin@jabber.domain.com
#Создаем временный файл, в котором будут результаты поиска:
rm -rf /tmp/tmp2.xmpp
echo "Strange activity on fileserver:" >> /tmp/tmp2.xmpp

find $1 ! \( -name *.txt \
-o -name *.doc \
-o -name *.swf \
-o -name *.docx \
-o -name *.xlsx \
-o -name *.xls \
-o -name *.pdf \
-o -name *.zip \
-o -name *.rtf -o -name *.RTF \
-o -name *.rar -o -name *.RAR \
-o -name *.txt -o -name *.TXT \
-o -name *.jpg -o -name *.jpeg -o -name *.JPG -o -name *.JPEG \
-o -name *.bmp -o -name *.BMP \
-o -name *.partial -o -name *.PARTIAL \
-o -name *.sig \
-o -name *.mno \
-o -name *.eml \
-o -name *.__deleted__ \
-o -name *.crdownload \
-o -name *.dat \
-o -name *.png \
-o -name *.shs \
-o -name *.lnk \
-o -name *.pgp \
-o -name *.htm \
-o -name *.URL \
-o -name *.tif \
-o -name *.enc \
-o -name *.xml \)`
` \( -name *.xlsx.* \
-o -name *.xls.* \
-o -name *.doc.* \
-o -name *.docx.* \
-o -name *.pdf.* \
-o -name *.jpg.* \
-o -name *.rar.* \
-o -name *.txt.* \
-o -name *.zip.* \) -exec ls -l {} \; >> /tmp/tmp2.xmpp

#И если найдено:
if grep -q -e docx -e xls -e xlsx -e doc -e rar -e zip -e txt -e pdf -e jpg /tmp/tmp2.xmpp
then
/home/scripts/send_jabber_notification.sh $my_admin "$( cat /tmp/tmp2.xmpp | iconv -c -f cp1251 )"

#А если нет, то завершаем скрипт
else
exit 0
fi
Собственно в чем вопрос? Он в том, что когда скрипт идет из крона, я не вижу кириллицу, а при ручном запуске из консоли iconv отрабатывает. В чем тут дело? Попробовал указать полный путь до iconv, жду результата.

И второй вопрос на внимательность. Что в скрипте не так, если find не игнорирует zip файлы в одной из директорий, как должен бы?

Strange activity on fileserver:
-rwxrwxrwx+ 1 root 10090 297576 May 20  2010 /share/dogovor/2254__/. .xls.
-rwxrwxrw-+ 1 root 513 450328 Nov 15  2012 /share/dogovor/2435 / /  / 12.11.12    6/6. . .  . 6 rev5.xls.zip
-rwxrwxrw-+ 1 root 513 290896 Nov 15  2012 /share/dogovor/2435 / /  / 12.11.12    6/6.  - 4.xls.zip
-rwxrwxrwx+ 1 root 10090 19421 Sep  3  2009 /share/dogovor/2015 -//  / .xlsx.zip

Дело, очевидно, в настройках локали по-умолчанию в cron. Вообще, cron не берет настройки окружения от пользователя, чей кронтаб он запускает. Локаль можно задать либо явно прописав в кронтаб пользователя соответствующие переменные окружения, либо записав их в /etc/default/locale. Есть еще устаревший файл /etc/environment.

Строку find не распарсил. Зачем там backticks?

Kiborg ★★★
()
Ответ на: комментарий от proud_anon

Да самый новый файл это уже environmentd

anonymous
()

В скрипт прописать

export LANG=ru_RU.UTF-8
и cron начнёт понимать кириллицу.

Allakka ★★★★
()
Ответ на: комментарий от Kiborg

Дефолтной локалью был utf-8

[root@filesrv ~]# cat /etc/sysconfig/i18n
LANG=«ru_RU.UTF-8»
SYSFONT=«latarcyrheb-sun16»
Добавил в скрипт export LANG, вижу кириллицу. Большое спасибо, Allakka.

backticks тупо разбивает строку аналогично «\», я так визуально отделил часть «не выводить *.расширение» и «искать *.расширение.любое_подозрительное_расширение».

Остался только вопрос с zip-архивами на выходе.

mrPresedent
() автор топика
Ответ на: комментарий от mrPresedent

Насчет zip-архивов сложно точно сказать, самый простой способ - воспроизводить проблему на минимальном примере. Есть одно предположение, что в директории, из которой запускается скрипт кроном, откуда-то уже есть файл с именем blabla.zip. Тогда *.zip в первой части при запуске интерпретатором развернется в это имя, и первая проверка будет выглядеть как «не ... и не blabla.zip и не ...». Попробуй закавычить шаблоны.

Kiborg ★★★
()
find .  -maxdepth 1 -iname "*.txt"
./test.txt
./test.TXT
./test.Txt
sin_a ★★★★★
()

попробуй в кроне както так:

* * * * * export LANG=ru_RU.UTF-8; /home/skript/skript.sh
CHIPOK ★★★
()
Ответ на: комментарий от no-such-file

Нет, дело не в этом. Я попробовал.

Да, дело не в этом, в пути ничего странного нет. Больше похоже, что после zip есть некоторый некорректный символ, поэтому не отрабатывает.

[root@filesrv ~]# find /share/dogovor/ ! \( -name *.zip \) \( -name *.xlsx.* \) | iconv -c -f cp1251
/share/dogovor/2400 Дом №3 с.Дмитровское, Красногорский р-н/Спецификации/КП от 26.06.2012/Жилой дом №3_Спецификации от 20.07.12.xlsx.xls
/share/dogovor/2400 Дом №3 с.Дмитровское, Красногорский р-н/Спецификации/КП от 26.06.2012/Жилой дом №3_Спецификации от 09.07.12.xlsx.xls
/share/dogovor/2405 ГПБ Киров СМР/Управление проектом/Архив/Предварительный бюджет график платежей 29.05.12.xlsx.xls
/share/dogovor/2405 ГПБ Киров СМР/Управление проектом/Архив/Предварительный бюджет график платежей 24.05.12.xlsx.xls
/share/dogovor/2015 Дворец-Единоборств/Сметы/Безопасность и Информатизация/новая спека.xlsx.zip


[root@filesrv ~]# find /share/dogovor/ ! \( -name '*.zip*' \) \( -name *.xlsx.* \) | iconv -c -f cp1251
/share/dogovor/2400 Дом №3 с.Дмитровское, Красногорский р-н/Спецификации/КП от 26.06.2012/Жилой дом №3_Спецификации от 20.07.12.xlsx.xls
/share/dogovor/2400 Дом №3 с.Дмитровское, Красногорский р-н/Спецификации/КП от 26.06.2012/Жилой дом №3_Спецификации от 09.07.12.xlsx.xls
/share/dogovor/2405 ГПБ Киров СМР/Управление проектом/Архив/Предварительный бюджет график платежей 29.05.12.xlsx.xls
/share/dogovor/2405 ГПБ Киров СМР/Управление проектом/Архив/Предварительный бюджет график платежей 24.05.12.xlsx.xls

Из вывода двух запросов find видно, что это единичный случай с конкретными файлами, скрипт работает корректно. Ради интереса я переименовал файл руками в *.zip, однако вопреки ожиданиям не получил положительных результатов.

В общем и целом, можно считать второй запрос find педальным решением проблемы, хотя остается риск получить вирусняк, который превратит мое добро в *.zip_FCKING_CRYPTED

mrPresedent
() автор топика
Ответ на: комментарий от Kiborg

Есть одно предположение, что в директории, из которой запускается скрипт кроном, откуда-то уже есть файл с именем blabla.zip

Приношу глубочайшие извинения. Дело именно в этом. Не заметил, что у меня в каталоге запуска скрипта лежит zip архив. Удалил - заработало.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Я и спросил, как ты запускал этот скрипт, чтобы у себя воспроизвести. По шагам: mkdir test; cd test; echo 111 > test.zip и т. д.

Kiborg ★★★
()
Ответ на: комментарий от mrPresedent

Из вывода двух запросов find видно, что это единичный случай с конкретными файлами, скрипт работает корректно. Ради интереса я переименовал файл руками в *.zip, однако вопреки ожиданиям не получил положительных результатов.

Не распарсил. В выдаче второго запроса .zip отсутствует, в первом присутствует, что и требовалось, не так разве?

ls ~/*.zip

что говорит?

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

Что и требовалось, но это немного некорректный способ решения проблемы, потому как я оставляю лазейку для дополнительных расширений zip*, к примеру .zipPSDNsbly@gmail_com. В принципе с этим можно смириться, т.к. вероятность получения такого «подарка» мала.

[root@filesrv ~]# ls -l /share/dogovor/*.zip | iconv -c -f cp1251
-rwxrwxrw-+ 1 root пользователи домена 19421 Сен  3  2009 /share/dogovor/новая спека.xlsx.zip
т.е. zip он находит. Моя теория корявого написания «zip» несостоятельна.

mrPresedent
() автор топика
Ответ на: комментарий от mrPresedent

некорректный способ решения проблемы, потому как я оставляю лазейку для дополнительных расширений zip*

Только сейчас заметил вот это:

\( -name *.zip \)
\( -name '*.zip*' \)

Зачем во втором случае астериск, я же говорил только про кавычки?

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

В случае с фильтром по *.zip* архив не выводится. Не понимаю, почему использование фильтра по *.zip такого результата не дает.

Попробовал забрать в ковычки \( -name '*.zip' \), сработало, zip архив не вывалился в результатах

mrPresedent
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.