Комментарии 30
а как же sed и awk?
sed (от англ. Stream EDitor) — потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.
AWK — интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам.
Очень удобно преобразовывать текст из одного формата в другой (к примеру access_log в SQL INSERT statements)
sed (от англ. Stream EDitor) — потоковый текстовый редактор (а также язык программирования), применяющий различные предопределённые текстовые преобразования к последовательному потоку текстовых данных.
AWK — интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам.
Очень удобно преобразовывать текст из одного формата в другой (к примеру access_log в SQL INSERT statements)
+6
Пример:
netstat -n|grep ESTABLISHED|awk {'print $4“ “$5“ “$6'}|grep .80|sort -n|uniq -c|\
awk {'print $3'}|replace '.' ' '|awk {'print $1“.“$2“.“$3“.“$4'}|uniq -c|sort -n|\
awk '{if($1 > 15) print $2}'
Описание: особая конвейерная магия :)
netstat -n|grep ESTABLISHED|awk {'print $4“ “$5“ “$6'}|grep .80|sort -n|uniq -c|\
awk {'print $3'}|replace '.' ' '|awk {'print $1“.“$2“.“$3“.“$4'}|uniq -c|sort -n|\
awk '{if($1 > 15) print $2}'
Описание: особая конвейерная магия :)
+5
Помнится была задача — выборка последних ревизий в контроле версий (например за два дня)
Не нашел как это сделать стандартными средствами svn. Получился такой кодобред:
Не нашел как это сделать стандартными средствами svn. Получился такой кодобред:
svn export . ../export cd ../export find . -type f -mtime +2 -exec rm {} \; find -depth -type d -empty -exec rmdir {} \; zip -r export.zip .
+1
По этому поводу можно добавить случай, когда нужно сделать из файлов, полученных из репозитория, просто файлы, то есть удалить все папки .svn
find. -type d -name «.svn» | xargs rm -r $1
А вообще, с svn возможна масса вариаций
find. -type d -name «.svn» | xargs rm -r $1
А вообще, с svn возможна масса вариаций
+1
как раз
svn export
это и делает ;)+2
зачем xargs, когда у find есть -exec?
+2
Да и у find'а есть опция exec…
0
Не, ну как я не заметил комментарий A2K 'а? Я ведь внимательно прочитал ветку.
+1
head еще можно упомянуть как обратная tail'у
egrep -n -R 'Что-то' * - поискать что то в текущей директории и ниже, во всех файлах
find -name '*.php' -exec egrep -nH 'Что-то' '{}' ';' - ищем только по файлам *.php
0
побольше бы примеров, цены бы не было данному топику… :)
0
cat access_log | cut -d' ' -f1 | sort | uniq -c | sort -r -d
imho, здесь лучше написать cat access_log | cut -d' ' -f1 | sort | uniq -c | sort -r -g
+3
Можно также упомянуть про tee, эта штука позволяет перенаправлять вывод одновременно в файл и на stdout, полезно при желании залогировать, что то требуещее интерактивного вмешательства.
С проходу приходит в голову следующее:
#apt-get dist-upgrade | tee dist-upgrade.log
С проходу приходит в голову следующее:
#apt-get dist-upgrade | tee dist-upgrade.log
+3
>>cat — всего лишь один из способов вывода содержимого файла или нескольких файлов.
и «склеивания» нескольких файлов в один
и «склеивания» нескольких файлов в один
+1
Тоже для борьбы с DDoS, но с таким, который не делает ошибок, а тупо запрашивает главную страницу:
tail -20 /var/log/nginx_access.log | grep «GET / „ | cut -d' ' -f1 | sort | uniq -d | xargs ipfw -q table 9 add $1
Покажет те айпишники, которые за последние 20 записей в логе более одного раза запросили главную страницу. При том, что трафик идёт неслабый — маловероятная ситуация, что это будет живой человек. Хотя пострадавшие бывают.
Ну, и конечно, одного запуска недостаточно, у меня это повторяет скрипт с интервалом 1 секунда.
tail -20 /var/log/nginx_access.log | grep «GET / „ | cut -d' ' -f1 | sort | uniq -d | xargs ipfw -q table 9 add $1
Покажет те айпишники, которые за последние 20 записей в логе более одного раза запросили главную страницу. При том, что трафик идёт неслабый — маловероятная ситуация, что это будет живой человек. Хотя пострадавшие бывают.
Ну, и конечно, одного запуска недостаточно, у меня это повторяет скрипт с интервалом 1 секунда.
0
Напечатать неуникальные строчки входного файла:
perl -ne 'print if ++ $_{$_} == 2' filename.txt
perl -ne 'print if ++ $_{$_} == 2' filename.txt
+1
Была такая задача: Есть каталог с лог файлами, в котором постоянно появляются новые логи (логи собираются с оборудования которое надо мониторить), нажен был скритп который бы автоматически добавлял новые логи в конфиг newsyslog для ротации. Написал такой скрипт:
find /var/log -print | grep log$ | sed 's/\(.*\)$/\1 user\: user 666 7 1000 \* JC \/var\/run\/syslog.pid 30/g' >> /etc/newsyslog1.conf && sort -u /etc/newsyslog1.conf > /etc/newsyslog.conf
find /var/log -print | grep log$ | sed 's/\(.*\)$/\1 user\: user 666 7 1000 \* JC \/var\/run\/syslog.pid 30/g' >> /etc/newsyslog1.conf && sort -u /etc/newsyslog1.conf > /etc/newsyslog.conf
+1
tail -f esparus.com.access.log | grep Yandex — просмотр в реальном времени посещений от яндекса =)
0
Если надо поправить какую-то штуку (windows-1251) в нескольких файлах с кодом, но лень искать где оно есть:
joe `grep windows-1251 *.php |cut -f 1 -d :|grep -v \~|sort -u`
Посмотреть размер и дату создания какого-то бинарника:
ls -l `which ls`
и скрипт это или бинарник
file `which mozilla`
узнать какие файлы и каталоги самые жирные в этом каталоге
du -s * | sort -n
Узнать когда обращались к файлу «stat file»
Если на веб сервере запрещен просмотр каталога, а надо побыстрому выложить файлов:
ls -1 | sed s/«^.*»/'&<\/a>
'/g >index.html
Если с виндов привалило вайлов с РаЗнЫм кейсом в названиях:
#!/bin/sh
for i in $*
do
mv $i `echo $i |tr [: upper:] [: lower:]`
done
joe `grep windows-1251 *.php |cut -f 1 -d :|grep -v \~|sort -u`
Посмотреть размер и дату создания какого-то бинарника:
ls -l `which ls`
и скрипт это или бинарник
file `which mozilla`
узнать какие файлы и каталоги самые жирные в этом каталоге
du -s * | sort -n
Узнать когда обращались к файлу «stat file»
Если на веб сервере запрещен просмотр каталога, а надо побыстрому выложить файлов:
ls -1 | sed s/«^.*»/'&<\/a>
'/g >index.html
Если с виндов привалило вайлов с РаЗнЫм кейсом в названиях:
#!/bin/sh
for i in $*
do
mv $i `echo $i |tr [: upper:] [: lower:]`
done
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Конвейеры командной строки