«

»

Sep 21

Поучительные однострочники на bash

Скрипты на bash (или любом другом скриптовом языке) – одна из тех вещей, что делают линукс линуксом. Бесконечный набор возможностей для автоматизации рутинных операций и экономии времени. Здесь собраны полезные однострочники на bash, которые могут оказаться весьма кстати в повседневной работе или подсказать идею для новых однострочников.

1. Как вывести информацию об используемых процессом файлах:

ps -ef | grep example |awk ‘{print $2}’ | xargs -n 1 pfiles

ps -ef | grep example – Все процесс(ы) по имени example выбираются из списка запущенных

awk ‘{print $2}’ | xargs -n 1 pfiles – Из полученной результатирующей таблицы, для каждой записи, второй столбец  – значение PID процессса передается в качестве параметра для команды pfiles  с помощью xargs

2. Как посмотреть какие файлы используются запущенными процессами:

find /proc | grep “^/proc/[1234567890]*/fd/[1234567890]*$” | sort -u | wc -l

find /proc | grep “^/proc/[1234567890]*/fd/[1234567890]*$”  – Выбираем для каждого процесса используемые им файлы – список файловых дескрипторов.

sort -u | wc -l – полученный список сортируется по уникальности и подсчитывается число открытых файлов

3. Как найти все файлы определенного типа содержащие заданную строку:

find . -name “*.doc”|while read i;do catdoc “$i”|grep -H –label=”$i” -n “подстрока для поиска”;done

find . -name “*.doc” – выбираем все файлы с расширением doc в текущей папке

while read i;do catdoc “$i”|grep -H –label=”$i” -n “подстрока для поиска”;done – ищем вхождение подстроки для поиска подавая на вход команды grep содержимое файла с помощью утилиты catdoc

4. Как показать командную строку запуска всех запущенных процессов:

pstree -Aaclpu | less

5. Как узнать сколько файлов с каким расширением находятся в папке:

find /target/folder -type f | sed -r ‘s/^.*\.([^.]+)$/\1/’ | tr “[:upper:]” “[:lower:]” | awk ‘{ ext[$1]++ } END { for (e in ext) print ext[e], e }’ | sort -nr|head -n 20

find /target/folder -type f – выбираем все файлы из заданной папки

sed -r ‘s/^.*\.([^.]+)$/\1/’ | tr “[:upper:]” “[:lower:]”  – из списка их имен формируем список всех расширений

awk ‘{ ext[$1]++ } END { for (e in ext) print ext[e], e }’ – производим подсчет всех расширений

sort -nr|head -n 20 – выводим первые двадцать позиций из отсортированного списка расширений, в порядке убывания найденных с таким определением файлов

6. Как вывести список всех процессов в порядке возрастания использования процессора:

ps -e  -o pcpu,cpu,nice,state,cputime,args –sort pcpu

7. Что еще умеет export:

не только умеет экспортировать переменные в текущий экземпляр консоли но также функции (используя флаг -f) а если указать флажок export -p то выводит список как и env – всех переменных среды.

8. Поиск минимума максимума: 

echo “14, 35, -7, 46, 98″|tr ‘,’ ‘\n’ | awk ‘min==”” || $1 < min {min=$1} END {print min}’
echo “14, 35, -7, 46, 98″|tr ‘,’ ‘\n’ | awk ‘max==”” || $1 > max {max=$1} END {print max}’

9. eval – как вычислять и выполнять выражения

Подробно разжевано – тут

Примеры использования здесь и здесь

UPDATE: 26.09.2012

10. как удалить файлы и(или) директории рекурсивно начиная с текущей директории в глубь

rm -rf `find . -type f -name ‘*.class’`

например, для удаления всех папок .svn:

rm -rf `find . -type d -name .svn`

11. как заменить строку во всех файлах (применимо если не содержит управляющих символов)

sed -i ‘s/old-text/new-text/’ *.txt

UPDATE: 11.02.2013

12. как выбрать все файлы по дате

линукс, выбираем все .txt файлы в текущей папке измененные за последние 30 дней:

find . -iname “*.txt” -atime -30 -type -f

по мотивам http://www.cyberciti.biz/faq/linux-unix-osxfind-files-by-date/

солярис, вывести все файлы старше заданного:

touch /tmp/timeref
find . ! -newer /tmp/timeref -exec ls -l {} \; | more

вывести все файлы новее заданного:

find . -newer /tmp/timeref -exec ls -l {} \; | more

подчерпнуто вот отседа – http://www.tech-recipes.com/rx/441/delete-solaris-files-older-than-a-certain-date-and-time/
т.е. с помощью touch мы создаем файл с текущим временем и ищем/выводим остальные файлы сравнивая их время изменения. в exec можно и что-нибудь более интересное чем ls добавить.

И пара ссылок:

Интересные однострочники на awkhttp://www.pement.org/awk/awk1line.txt

Интересные однострочники на sedhttp://sed.sourceforge.net/sed1line.txt

Про bash, на русском: http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Про bash для новичков, на английском: http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html

2 comments

  1. Julz

    I love these articles. How many words can a wrosditmh smith?

  2. Arlene

    please keep on posting such quality.http://www.bandeirantes.org

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>