Страница 1 из 3

выбор строки

Добавлено: 2008-02-20 22:53:42
hammer68
народ подскажите как можно из /var/log/secure выдрать по маске определенные строки ?

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

Добавлено: 2008-02-20 23:16:41
paranoidchaos
grep or egrep

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

Добавлено: 2008-02-21 0:09:07
hammer68

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

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

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

Добавлено: 2008-02-21 0:11:58
paranoidchaos

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

Добавлено: 2008-02-21 0:35:26
hammer68
paranoidchaos писал(а):
чет непонял

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

Добавлено: 2008-02-21 1:22:19
Alex Keda
hammer68 писал(а):
paranoidchaos писал(а):
чет непонял
=))))))))))))))))))))

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

Добавлено: 2008-02-21 7:57:17
zg
hammer68 писал(а):вот хотел сделать так но не строки выводит а слова а мне всю стоку надо
для этого специальная прога есть
paranoidchaos писал(а):grep or egrep
в твоём случае

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

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

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

man grep

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

Добавлено: 2008-02-21 16:43:31
hammer68
zg писал(а):
hammer68 писал(а):вот хотел сделать так но не строки выводит а слова а мне всю стоку надо
для этого специальная прога есть
paranoidchaos писал(а):grep or egrep
в твоём случае

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

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

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

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

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

Добавлено: 2008-02-21 16:51:20
Alex Keda
lissyara писал(а):
hammer68 писал(а):
paranoidchaos писал(а):
чет непонял
=))))))))))))))))))))

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

Добавлено: 2008-02-21 18:42:18
dikens3
Напиши что есть в файле(какие записи) и что хочешь чтобы получилось. (итог)

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

Добавлено: 2008-02-22 15:11:17
hammer68
вот кусок лога

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

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
и так далее

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

Добавлено: 2008-02-22 16:40:32
dikens3
crontab -e
И добавь запуск (твой grep ... ) в 23-59 и делов.

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

Добавлено: 2008-02-22 20:54:35
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
вот кусок кода в цикле разбивается строка по пробелам и все параметры на руках и пихать можно как угодно и куда угодно

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

Добавлено: 2008-02-22 22:16:02
hammer68
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

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

Добавлено: 2008-02-22 23:14:50
dikens3

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

cat /var/log/secure | grep 'Accepted password' | awk '{print $1,$2,$3,$9,$11}' > file_name

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
Или по воробьям из пушки удобнее?

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

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

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

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

Добавлено: 2008-02-23 17:50:11
paranoidchaos
слушайте хорош базарить если на то пошло то как поймёт человек который хочет распарсить лог и при этом у него минимальные знания программинга на сх или баше?

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

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

Добавлено: 2008-02-23 20:31:31
Alex Keda
баш - в топку

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

Добавлено: 2008-02-23 23:02:51
paranoidchaos
шо те не нравится в баше ? ))

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

Добавлено: 2008-02-24 2:05:59
Alex Keda
навскидку - тока честно - ты помнишь комбинацию выхзова хистори?
ты вообще историей пользуешься?
=========
пока не видел шелла с более удобной работой чем 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, к-ый умеет полностью его эмулировать?

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

Добавлено: 2008-02-24 13:20:52
dikens3
Если делать ударение на "свои руки", то твой пример вообще неуместен, потому что копипаста под это понятие не попадает.
Так и не понял о чём здесь.

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