Home > Tips, Unix, Техноблог > Hints [5..8]

Hints [5..8]

November 24th, 2006 Leave a comment Go to comments

[5]. Допустим, есть огромный (5Gb) файл, из которого нужно извлечь все строки, содержащие слово “error”, а также посчитать md5 и количество строк. Можно сделать это в пять приемов и потратить полчаса, но есть способ проще и быстрее:
#cat big_file | tee >(md5) >(wc -l) | grep "error" > big_file_errors
Т.е. все нужные действия производятся за один цикл чтения!

Таким же образом можно скопировать файл с удаленного хоста и одновременно посчитать md5:
#ssh remote_host "cat /home/user/file" | tee >(md5) > file
(в linux вместо md5 нужно писать md5sum)

[6]. Если есть открытый ssh-сеанс на удаленной машине, можно поднять туннель, прямо в этом же сеансе. Комбинация клавиш “~C” позволяет отредактировать командную строку. Например, если написать “-D 1080″, то будет поднят прокси на 1080-м порту.

[7]. При работе с лог-файлами в sh-скриптах может понадобиться преобразовать дату из human-readable формата в unixtime. Делается это так:
#date -j -f "%d/%m/%Y %H:%M:%S" "18/08/2006 16:43:02" "+%s"
Опция -j запрещает команде date делать попытки установить дату.
-f – формат даты в строке, которую следует разобрать
“+%s” – отобразить дату в формате unixtime. Если этот аргумент опустить, то дата будет выведена в стандартном UTC формате (пятница, 18 августа 2006 г. 16:43:02 (MSD))

[8]. Во FreeBSD есть утилита bdes, позволяющая (де)криптовать файлы из командной строки.
#cat file | bdes > file.cripted
Enter key:

Также есть утилита enigma, но криптостойкость ее алгоритмов очень низка (вернее, отсутствует)

Categories: Tips, Unix, Техноблог Tags:
  1. November 21st, 2010 at 21:03 | #1

    А вот у меня есть большой файл (результат работы nmap в публичной сети аэропорта).
    Можно ли из него извлечь все IP-адреса и поместить их в файл в виде:
    192.168.1.0:80
    192.168.1.1:80
    192.168.1.2:80
    192.168.1.3:80

    Что-бы потом применить твою команду по пингованию большого количества хостов:
    cat proxies | (IFS=”:\n”; while read ip port; do (if ping -w 1 -c 1 -q >/dev/null; then echo “:”; else echo “bad: :”; fi)& done;) | tee proxies_pingable

  2. Alexey Sveshnikov
    November 21st, 2010 at 23:24 | #2

    Можно! :)

  1. No trackbacks yet.