Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #107, НОЯБРЬ 2007 г.

Tips'n'tricks юниксоида

Andrey Matveev

Хакер, номер #107, стр. 107-106-1

(andrushock@real.xakep.ru)

Доблестный юниксоид! Представляю твоему вниманию очередную подборку различных трюков, рекомендаций и советов, касающихся *nix-систем.

Маленький скрипт для запуска терминалки rxvt с разными картинками в качестве бэкграунда:

#!/bin/sh

run_rxvt ()

{

shift $((RANDOM%$#))

exec rxvt -pixmap ~/.wallpapers/$1

}

run_rxvt `ls ~/.wallpapers/`

Чтобы всегда иметь под рукой системный журнал, имеет смысл в ~/.xsession или ~/.xinitrc добавить вызов:

xterm -ls -geometry 80x5+45+705 -rv -sb -name "System logz"

-fn 5x7 -T "System logz" -e tail -f /var/log/messages &

С помощью нехитрого скрипта swap_logs журнальные записи можно резервировать и обнулять каждый день:

# vi /root/cron/swap_logs

#!/bin/sh

cp /var/log/messages /var/log/messages.`date +%d-%m-%y_%T`

cat /dev/null >/var/log/messages

# chmod +x /root/cron/swap_logs

# crontab -e

59 23 * * * /root/cron/swap_logs

Быстро закомментировать в файле ~/procmail.conf 20 строк текста, начиная, скажем, с третьей строки, можно с помощью следующей команды:

$ vi ~/procmail.conf

:3,20s/^/# /

В zsh есть встроенное средство для приведения имен файлов к нижнему/верхнему регистру (lowercase/uppercase):

$ for i in *(.); mv $i ${i:l}

$ for i in *(.); mv $i ${i:u}

Утилиту less можно научить читать заархивированные текстовые файлы (например, less kernel-howto.txt.gz), и вот каким способом:

$ vi ~/lesspipe.sh

#! /bin/sh

case "$1" in

*.Z) uncompress -c $1 2>/dev/null

;;

*.gz) gunzip -c $1 2>/dev/null

;;

esac

$ chmod +x ~/lesspipe.sh

$ export LESSOPEN='| ~/lesspipe.sh %s'

Простейший калькулятор на базе связки командного интерпретатора и языка awk (вызов: calc (12+7)*2/4):

$ vi ~/.zshrc

function _calc () {

awk "BEGIN { print $* ; }"

}

alias calc="noglob _calc"

Вообще говоря, с помощью awk можно выполнять самые разные операции, например, подсчитывать объем файлов в текущем каталоге:

% ls -l | awk 'BEGIN{a=0} {if (index($1,"d") == 0) a=a+$5 } END{print a}'

Внешний IP-адрес домашнего роутера Linksys можно получить с помощью такого запроса:

$ lynx -auth=login:password http://192.168.1.1/Status.htm -dump |

sed "1,/WAN/d" | awk -F: '/IP Address/{print $2}'

Сортировка файла /etc/passwd по первой букве поля комментариев, где обычно хранится ФИО пользователя:

% sort -t : -k 5 /etc/passwd

С помощью команды at можно сэмулировать работу crontab и batch (например, в том случае, когда администратор ограничил к ним доступ):

(crontab)% at -f <файл сценария> now + 1 day

(batch)% at -q b -m now

Комбинация команд для быстрого переключения между двумя процессами:

% bg; fg %-

Заключить все строки из файла filename в скобки и перенаправить вывод в newfilename:

% sed 's/.*/(&)/' filename > newfilename

Поменять все слова YES на NO:

# sed 's/YES/NO/g' /etc/rc.conf > /etc/rc.conf.local

Удалить из файла все пустые строки, а также строки, содержащие только пробелы или табуляторы:

% sed '/^[_<TAB>]*$/d' filename > newfilename

Посмотреть содержимое библиотеки в отсортированном виде:

% ar -t /usr/lib/libc.a | sort | less

Чтобы получить данные о времени выполнения профилирования каналов, использования процессора и времени, затраченном системой на операции ввода/вывода, следует использовать следующую конструкцию:

% time sh -c "<имя программы> | <имя программы>"

Сишный препроцессор можно использовать и для создания шаблонов:

$ vi mail.template

Доброго времени суток, редактор журнала MAGAZINE!

Я хотел бы написать статью в рубрику COLUMN.

% cpp -DMAGAZINE='Xakep' -DCOLUMN='Unixoid' mail.template

Для создания в Linux дополнительного swap-файла размером 512 Мб набираем:

# dd if=/dev/zero of=/usr/tmp/extra_swap bs=1024 count=524288

# mkswap /usr/tmp/extra_swap

# swapon /usr/tmp/extra_swap

Если во время компиляции программы используется несколько параметров -O, то активным является последний из них.

Содержание
ttfb: 3.1452178955078 ms