выбор строки

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
hammer68
мл. сержант
Сообщения: 107
Зарегистрирован: 2007-10-25 16:52:17
Откуда: tambov это в России
Контактная информация:

выбор строки

Непрочитанное сообщение hammer68 » 2008-02-20 22:53:42

народ подскажите как можно из /var/log/secure выдрать по маске определенные строки ?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


hammer68
мл. сержант
Сообщения: 107
Зарегистрирован: 2007-10-25 16:52:17
Откуда: tambov это в России
Контактная информация:

Re: выбор строки

Непрочитанное сообщение hammer68 » 2008-02-21 0:09:07

Код: Выделить всё

for I in `cat /var/log/secure`
do
        echo $I 
done
вот хотел сделать так но не строки выводит а слова а мне всю стоку надо


hammer68
мл. сержант
Сообщения: 107
Зарегистрирован: 2007-10-25 16:52:17
Откуда: tambov это в России
Контактная информация:

Re: выбор строки

Непрочитанное сообщение hammer68 » 2008-02-21 0:35:26

paranoidchaos писал(а):
чет непонял

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: выбор строки

Непрочитанное сообщение Alex Keda » 2008-02-21 1:22:19

hammer68 писал(а):
paranoidchaos писал(а):
чет непонял
=))))))))))))))))))))
Убей их всех! Бог потом рассортирует...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: выбор строки

Непрочитанное сообщение zg » 2008-02-21 7:57:17

hammer68 писал(а):вот хотел сделать так но не строки выводит а слова а мне всю стоку надо
для этого специальная прога есть
paranoidchaos писал(а):grep or egrep
в твоём случае

Код: Выделить всё

grep "шаблон" /var/log/secure
про шаблоны и синтаксис вызова

Код: Выделить всё

man grep

hammer68
мл. сержант
Сообщения: 107
Зарегистрирован: 2007-10-25 16:52:17
Откуда: tambov это в России
Контактная информация:

Re: выбор строки

Непрочитанное сообщение hammer68 » 2008-02-21 16:43:31

zg писал(а):
hammer68 писал(а):вот хотел сделать так но не строки выводит а слова а мне всю стоку надо
для этого специальная прога есть
paranoidchaos писал(а):grep or egrep
в твоём случае

Код: Выделить всё

grep "шаблон" /var/log/secure
про шаблоны и синтаксис вызова

Код: Выделить всё

man grep
да я понимаю но в том то и дело я когда цикл делаю то вывод у мну не такой как
grep "шаблон" /var/log/secure а получается каждое слово с новой строки
а мне надо построчный вывод

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: выбор строки

Непрочитанное сообщение Alex Keda » 2008-02-21 16:51:20

lissyara писал(а):
hammer68 писал(а):
paranoidchaos писал(а):
чет непонял
=))))))))))))))))))))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: выбор строки

Непрочитанное сообщение dikens3 » 2008-02-21 18:42:18

Напиши что есть в файле(какие записи) и что хочешь чтобы получилось. (итог)
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

hammer68
мл. сержант
Сообщения: 107
Зарегистрирован: 2007-10-25 16:52:17
Откуда: tambov это в России
Контактная информация:

Re: выбор строки

Непрочитанное сообщение hammer68 » 2008-02-22 15:11:17

вот кусок лога

Код: Выделить всё

Feb 22 10:00:49 cluster sshd[31279]: Accepted password for olimp_belikov from 82.179.145.50 port 1881 ssh2
Feb 22 13:01:41 cluster sshd[31337]: reverse mapping checking getaddrinfo for ip-82-179-145-50.apte.tstu.ru failed - POSSIBLE BREAKIN ATTEMPT!
Feb 22 13:01:47 cluster sshd[31337]: Failed password for olimp_belikov from 82.179.145.50 port 1882 ssh2
Feb 22 10:01:47 cluster sshd[31338]: Failed password for olimp_belikov from 82.179.145.50 port 1882 ssh2
Feb 22 10:01:53 cluster sshd[31338]: Failed password for olimp_belikov from 82.179.145.50 port 1882 ssh2
Feb 22 13:01:53 cluster sshd[31337]: Failed password for olimp_belikov from 82.179.145.50 port 1882 ssh2
Feb 22 10:01:57 cluster sshd[31338]: Accepted password for olimp_belikov from 82.179.145.50 port 1882 ssh2
Feb 22 13:01:57 cluster sshd[31337]: Accepted password for olimp_belikov from 82.179.145.50 port 1882 ssh2
Feb 22 10:33:14 cluster sshd[31573]: Accepted password for pchela9091 from 82.179.158.249 port 40524 ssh2
Feb 22 13:33:14 cluster sshd[31572]: Accepted password for pchela9091 from 82.179.158.249 port 40524 ssh2
grep 'Accepted password' /var/log/secure >file делаю сортировку т.е. выбираю ток нужные логи
но теперь еще надо кинуть в крон его и наладить статистику таким образом что бы была дневная статистика
вот такая

Код: Выделить всё

Feb 22 13:01:41 olimp_belikov 82.179.145.50
и так далее

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: выбор строки

Непрочитанное сообщение dikens3 » 2008-02-22 16:40:32

crontab -e
И добавь запуск (твой grep ... ) в 23-59 и делов.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
paranoidchaos
мл. сержант
Сообщения: 80
Зарегистрирован: 2007-12-13 10:58:23

Re: выбор строки

Непрочитанное сообщение paranoidchaos » 2008-02-22 20:54:35

как я понял из этой строки

Код: Выделить всё

Feb 22 10:01:57 cluster sshd[31338]: Accepted password for olimp_belikov from 82.179.145.50 port 1882 ssh2
нужно достать эту

Код: Выделить всё

Feb 22 13:01:41 olimp_belikov 82.179.145.50
так вот в этом случае лучше использовать авк (awk)

Код: Выделить всё

grep 'Accepted password' /var/log/secure > file_name

while read parametr
do
par1=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $1}'`
par2=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $2}'`
par3=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $3}'`
par4=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $4}'`
par5=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $5}'`
par6=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $6}'`
par7=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $7}'`
par8=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $8}'`
par9=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $9}'`
par10=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $10}'`
par11=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $11}'`
par12=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $12}'`
par13=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $13}'`
par14=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $14}'`

str="$par1 $par2 $par3 $par9 $par11\n"

echo $str > output_file

done < file_name
вот кусок кода в цикле разбивается строка по пробелам и все параметры на руках и пихать можно как угодно и куда угодно

hammer68
мл. сержант
Сообщения: 107
Зарегистрирован: 2007-10-25 16:52:17
Откуда: tambov это в России
Контактная информация:

Re: выбор строки

Непрочитанное сообщение hammer68 » 2008-02-22 22:16:02

paranoidchaos писал(а):как я понял из этой строки

Код: Выделить всё

Feb 22 10:01:57 cluster sshd[31338]: Accepted password for olimp_belikov from 82.179.145.50 port 1882 ssh2
нужно достать эту

Код: Выделить всё

Feb 22 13:01:41 olimp_belikov 82.179.145.50
так вот в этом случае лучше использовать авк (awk)

Код: Выделить всё

grep 'Accepted password' /var/log/secure > file_name

while read parametr
do
par1=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $1}'`
par2=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $2}'`
par3=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $3}'`
par4=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $4}'`
par5=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $5}'`
par6=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $6}'`
par7=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $7}'`
par8=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $8}'`
par9=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $9}'`
par10=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $10}'`
par11=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $11}'`
par12=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $12}'`
par13=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $13}'`
par14=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $14}'`

str="$par1 $par2 $par3 $par9 $par11\n"

echo $str > output_file

done < file_name
вот кусок кода в цикле разбивается строка по пробелам и все параметры на руках и пихать можно как угодно и куда угодно
спасибочки в общем окнчательно скрипт выглядит так

Код: Выделить всё

#!/bin/sh
day="`date +%d-%m-%y`"
chislo="`date +%b" "%e`"
grep "$chislo" /var/log/secure >tmp$day.txt
grep 'Accepted password' tmp$day.txt > temp$day

while read parametr
do
par1=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $1}'`
par2=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $2}'`
par3=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $3}'`
par4=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $4}'`
par5=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $5}'`
par6=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $6}'`
par7=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $7}'`
par8=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $8}'`
par9=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $9}'`
par10=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $10}'`
par11=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $11}'`
par12=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $12}'`
par13=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $13}'`
par14=`echo "$parametr" | awk 'BEGIN{FS=" "}{print $14}'`

str="$par1 $par2 $par3 $par9 $par11"

echo $str >> /var/log/access/access$day.txt

done < temp$day


rm -rf tmp$day.txt
rm -rf temp$day

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: выбор строки

Непрочитанное сообщение dikens3 » 2008-02-22 23:14:50

Код: Выделить всё

cat /var/log/secure | grep 'Accepted password' | awk '{print $1,$2,$3,$9,$11}' > file_name
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Гость
проходил мимо

Re: выбор строки

Непрочитанное сообщение Гость » 2008-02-23 0:51:15

dikens3 писал(а):

Код: Выделить всё

cat /var/log/secure | grep 'Accepted password' | awk '{print $1,$2,$3,$9,$11}' > file_name
а одним awk'ом обойтись не судьба?

Код: Выделить всё

awk '/Accepted password/ { print $1, $2, $3, $9, $11 }' /var/log/secure >file_name
А для простого форматирования можно вообще обойтись

Код: Выделить всё

cut -sd\  -f1,2,3,9,11 /var/log/secure
Или по воробьям из пушки удобнее?

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: выбор строки

Непрочитанное сообщение dikens3 » 2008-02-23 10:22:53

Гость писал(а):Или по воробьям из пушки удобнее?
Удобнее... На скрипт выше посмотри. Я лишь показал альтернативу, которая гораздо удобнее и при этом никого не оскорбляя. Чего ты добиваешься? Хочешь продемонстрировать свои знания программирования? И что это тебе даст, если результат всё равно один и тот же? Для простейших операций вполне подойдёт ЛЮБОЕ решение сделанное своими руками.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Гость
проходил мимо

Re: выбор строки

Непрочитанное сообщение Гость » 2008-02-23 12:41:38

я не программер, но продолжу флеймить... ;)
dikens3 писал(а):Для простейших операций вполне подойдёт ЛЮБОЕ решение сделанное своими руками.
Если делать ударение на "свои руки", то твой пример вообще неуместен, потому что копипаста под это понятие не попадает. Короче, держи бублик за useless use of cat, т.е. за совет (и популяризацию) о том как заработать дурную привычку.
hammer68 писал(а):

Код: Выделить всё

grep "$chislo" /var/log/secure >tmp$day.txt
grep 'Accepted password' tmp$day.txt > temp$day
[...]
Попробуй так:

Код: Выделить всё

#!/bin/sh

# формат подстановки вывода команды `foo` устарел в угоду $(foo) [см. ниже цитату с opengroup.org]
date_stamp="$(date +%F)" # если ставить год в конце, отгадай как сортировка по имени файла себя поведет?
		   	 # %F is equivalent to ``%Y-%m-%d''.
date_string="$(date +%b\ %e)"

# это можно сделать и только sed'ом, но тогда придется использовать
# костлявые [[:space:]]\{1,\} ,)
# вообщем, sed тут вырезает первые два совпадения построчно, т.е. удаляет не соответствующие regexp'ы
# а cut вырезает ненужные столбцы, точнее оставляет только выбранные
#
# Кстати, нужно тестировать, но обычно sed работает *быстрее* чем awk
sed "/$date_string/!d; /Accepted password/!d" /var/log/secure \
	| cut -sd\  -f1,2,3,9,11 >/var/log/access/access$date_stamp.txt
http://www.opengroup.org/onlinepubs/009695399/xrat/xcu_chap02.html писал(а):

Код: Выделить всё

Additionally, the backquoted syntax has historical restrictions on the contents of the embedded command. While the newer "$()" form can process any kind of valid embedded script, the backquoted form cannot handle some valid scripts that include backquotes. For example, these otherwise valid embedded scripts do not work in the left column, but do work on the right:

    echo `                         echo $(
    cat <<\eof                     cat <<\eof
    a here-doc with `              a here-doc with )
    eof                            eof
    `                              )


    echo `                         echo $(
    echo abc # a comment with `    echo abc # a comment with )
    `                              )


    echo `                         echo $(
    echo '`'                       echo ')'
    `                              )

Because of these inconsistent behaviors, the backquoted variety of command substitution is not recommended for new applications that nest command substitutions or attempt to embed complex scripts.
Т.е., используя `foo` в новых программах, мы сами себе откапываем могилу.

Гость
проходил мимо

Re: выбор строки

Непрочитанное сообщение Гость » 2008-02-23 12:53:26

Гость писал(а):

Код: Выделить всё

date_stamp="$(date +%F)"
date_string="$(date +%b\ %e)"
Поскольку переменные используются только по одному разу, то можно их вообще выкинуть и поставить эти подстановки прямиком в one-liner:

Код: Выделить всё

sed "/$(date +%b\ %e)/!d; /Accepted password/!d" /var/log/secure \
	| cut -sd\  -f1,2,3,9,11 >/var/log/access/access$(date +%F).txt

Аватара пользователя
paranoidchaos
мл. сержант
Сообщения: 80
Зарегистрирован: 2007-12-13 10:58:23

Re: выбор строки

Непрочитанное сообщение paranoidchaos » 2008-02-23 17:50:11

слушайте хорош базарить если на то пошло то как поймёт человек который хочет распарсить лог и при этом у него минимальные знания программинга на сх или баше?

надо показывать сначало примитив и ваще нафига я сунул авк надо была ваще тока средствами баша распарсить а не использовать внешние программы

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: выбор строки

Непрочитанное сообщение Alex Keda » 2008-02-23 20:31:31

баш - в топку
Убей их всех! Бог потом рассортирует...

Аватара пользователя
paranoidchaos
мл. сержант
Сообщения: 80
Зарегистрирован: 2007-12-13 10:58:23

Re: выбор строки

Непрочитанное сообщение paranoidchaos » 2008-02-23 23:02:51

шо те не нравится в баше ? ))

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: выбор строки

Непрочитанное сообщение Alex Keda » 2008-02-24 2:05:59

навскидку - тока честно - ты помнишь комбинацию выхзова хистори?
ты вообще историей пользуешься?
=========
пока не видел шелла с более удобной работой чем csh
в баше пробовал юзать эту убогость - не то.
Убей их всех! Бог потом рассортирует...

Гость
проходил мимо

оффтоп

Непрочитанное сообщение Гость » 2008-02-24 3:13:14

lissyara, согласен. Удобно сбрасывать swap в csh (или есть другой способ сброса?):

Код: Выделить всё

> swapoff /dev/zvol/tank/page
> ^ff^n
или другой пример:

Код: Выделить всё

> diff -u /usr/include/sys/lock.h /sys/sys/lock.h
> cp !$ !:2
или повторить последнюю запись, содержащуюю строчку:

Код: Выделить всё

> !?lissyara
Это не говоря о том, что в sh(1) тоже есть интересные трюки с историей (вспомним fc -s), не такие удобные правда, но позволяют жить в нем (включив set -E, конечно).
Да и вообще, зачем нужен bash, когда есть zsh, к-ый умеет полностью его эмулировать?

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: выбор строки

Непрочитанное сообщение dikens3 » 2008-02-24 13:20:52

Если делать ударение на "свои руки", то твой пример вообще неуместен, потому что копипаста под это понятие не попадает.
Так и не понял о чём здесь.

Послушайте, друг мой загадочный. Одну и ту же задачу можно решить разными методами. В данном топике есть несколько вариантов решения.
Что-то ещё хотите сказать?
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.