Thursday, November 16, 2006
Hints [5..8]
[5]. Допустим, есть огромный (5Gb) файл, из которого нужно извлечь все строки, содержащие слово "error", а также посчитать md5 и количество строк. Можно сделать это в пять приемов и потратить полчаса, но есть способ проще и быстрее:
Т.е. все нужные действия производятся за один цикл чтения!
Таким же образом можно скопировать файл с удаленного хоста и одновременно посчитать md5:
(в linux вместо md5 нужно писать md5sum)
[6]. Если есть открытый ssh-сеанс на удаленной машине, можно поднять туннель, прямо в этом же сеансе. Комбинация клавиш "~C" позволяет отредактировать командную строку. Например, если написать "-D 1080", то будет поднят прокси на 1080-м порту.
[7]. При работе с лог-файлами в sh-скриптах может понадобиться преобразовать дату из human-readable формата в unixtime. Делается это так:
Опция -j запрещает команде date делать попытки установить дату.
-f - формат даты в строке, которую следует разобрать
"+%s" - отобразить дату в формате unixtime. Если этот аргумент опустить, то дата будет выведена в стандартном UTC формате (пятница, 18 августа 2006 г. 16:43:02 (MSD))
[8]. Во FreeBSD есть утилита bdes, позволяющая (де)криптовать файлы из командной строки.
Также есть утилита enigma, но криптостойкость ее алгоритмов очень низка.
#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, но криптостойкость ее алгоритмов очень низка.
Comments:
<< Home
Надо только уточнить, что [5] будет работать только в bash, а в нормальном, человеческом, sh работать не будет. Т.е. использовать в переносимых скриптах (#! /bin/sh) этот приём нельзя -- BSD работать не будет.
Впрочем, там >(command) эмулируется функцией в 5 строк на чистом sh + mkfifo + rm после :)
Впрочем, там >(command) эмулируется функцией в 5 строк на чистом sh + mkfifo + rm после :)
А, ну и про [8]. во FreeBSD есть еще команда openssl, которая с под-командой enc зашифрует в комм.строке всё любым из двух едсятков алгоритмов, напримаер более стойким aes-256, да еще и получит паролб или из файла или из пайпа или прямо из кломм.строки (что небезопасно уже).
[6] -- "-D" нельзя ни в openssh 4.2p1 ни в openssh 4.5p1, только "-L" и "-R" и еще "-KR" (отмена "-R").
Лев, спасбо за ценные комментарии :)
Особенно понравилось про mkfifo - очень не хватало этой команды!
Post a Comment
Особенно понравилось про mkfifo - очень не хватало этой команды!
<< Home