Skip to content


Сага об «эс как долларе»

Вечер. Типичные глюки инета, на этот раз не открываются отечественные сайты. Звоню в саппорт одного из крупнейших московских провайдеров:

— Добрый вечер, специалист А. слушает Вас.
— Барышня, у меня не работает русскоязычный сегмент интернета.
— Что, простите?
— У меня не работает русскоязычный сегмент интернета.
— Это вы с кем разговариваете?
— С вами.
— Я не поняла, у вас не открываются сайты?
— Ну... В общем, да.
— Все?
— Нет, только которые «точка ру».
— А, всё, поняла! Ждите, я передаю Вас специалисту по русскоязычным сайтам.

Пауза.

— Здравствуйте, специалист Б. слушает вас.

С барышней № 2 повторяется точно тот же разговор, но два раза, потому что словосочетание «сайты точка ру» специалист по «сайтам точка ру» уже не понимает.

— Так, я всё равно не понимаю. Ну, давайте сбросим каталоги, нажмите «Пуск»... Что? Вы знаете, что такое командная строка? Не знаю, о чём вы говорите, нажмите «Пуск», «Выполнить», наберите «Светлана, Мария, Дмитрий»... Да. Перезагрузитесь. Не помогло? Подождите, я передаю вас техническому специалисту.

С радостью жду мужчину-инженера.

— Здравствуйте, специалист В. слушает Вас.
— Здравствуйте, барышня...

То же самое, дубль третий.

— Всё равно не понимаю. Каталоги сбрасывали? Не учите меня русскому языку, я тут решаю вашу проблему. Сбросим маршруты: нажмите «Пуск»... Роман, Елена, эс как доллар... Перезагрузитесь. Не помогло? У вас вирус. Передаю вас дальше.

Молчу.

— Здравствуйте, слушает Вас. Какой у вас антивирус? N.? Он плохой. Давайте установим новый.
— Что значит — плохой? Это антивирус, который вы ставите при подключении.
— Я знаю, но он всё равно плохой. Давайте поставим мой. Заходите на такой-то почтовый сервер, заходите в мою почту, логин, пароль... Найдите вот это письмо. В нём антивирус. Скачали? Хорошо. Теперь я научу вас открывать файлы .rar. Что? Вы уже устанавливаете? Не надо так быстро, слушайте мои инструкции. Введите логин. Введите пароль: пять, эн как Наталья, два, ка — Константин, то есть не «2» и «k», а «kk», три эс как доллар, нет, не «sss», а «3» и «s»...

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

— Да. Установили? Перезагрузитесь. Не помогло? Передаю вас следующему специалисту.

Ну-ка, попробуем ещё раз.

— Здравствуйте, слушает вас... Продиктуйте мне номер вашего домашнего телефона.
— Зачем? о_О
— Для проверки, что это действительно вы. Ваш контактный телефон начинается на 8-916, а что дальше?
— xxx-xx-xx.
— Правильно! А теперь назовите ваш адрес.
— Улица...
— О, так у вас ремонтные работы! Русскоязычный сегмент интернета еще некоторое время работать не будет. Подождите пару часов. Пожалуйста! До свидания!

Posted in Fun.


Файловая система proc

В OS Linux имеется псевдофайловая система /proc, в которой содержится много полезной информации и помощью которой можно управлять некоторыми параметрами ядра.

  • Посмотреть какие файловые дескрипторы использует процесс:
    #ps aux | grep pine | grep -v grep
    ed      1861  0.0  1.3  18044  6964 pts/11   S+   Jul21   0:02 pine
    #ls -l /proc/1861/fd
    total 0
    lrwx------ 1 ed ed 64 Июл 22 13:07 0 -> /dev/pts/11
    lrwx------ 1 ed ed 64 Июл 22 13:07 1 -> /dev/pts/11
    lrwx------ 1 ed ed 64 Июл 22 11:00 2 -> /dev/pts/11
    lrwx------ 1 ed ed 64 Июл 22 13:07 3 -> /home/ed/.pine-debug1
    lrwx------ 1 ed ed 64 Июл 22 13:07 4 -> /tmp/.801.1666a7
    lrwx------ 1 ed ed 64 Июл 22 13:07 5 -> /home/ed/mbox
    lr-x------ 1 ed ed 64 Июл 22 13:07 6 -> /home/ed/.addressbook

    1861 – pid процесса с именем pine, который был запущен пользователем ed.

  • Включить форвардинг пакетов между интерфейсами:
    echo 1 > /proc/sys/net/ipv4/ip_forward
  • Посмотреть информацию о процессоре:
    #cat /proc/cpuinfo
    processor       : 0
    vendor_id       : GenuineIntel
    cpu family      : 6
    model           : 15
    model name      : Intel(R) Celeron(R) CPU        E1200  @ 1.60GHz
    stepping        : 13
    cpu MHz         : 1600.290
    cache size      : 512 KB
    physical id     : 0
    siblings        : 2
    core id         : 0
    cpu cores       : 2
    apicid          : 0
    fdiv_bug        : no
    hlt_bug         : no
    f00f_bug        : no
    coma_bug        : no
    fpu             : yes
    fpu_exception   : yes
    cpuid level     : 10
    wp              : yes
    flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl est tm2 cx16 xtpr lahf_lm
    bogomips        : 3201.88
  • Посмотреть информацию о дисковых накопителях:
    # cat /proc/scsi/scsi
    Attached devices:
    Host: scsi0 Channel: 00 Id: 00 Lun: 00
      Vendor: ATA      Model: WDC WD1600AAJS-0 Rev: 01.0
      Type:   Direct-Access                    ANSI SCSI revision: 05
    Host: scsi1 Channel: 00 Id: 00 Lun: 00
      Vendor: ATA      Model: ST3500418AS      Rev: CC35
      Type:   Direct-Access                    ANSI SCSI revision: 05
     
    # cat /proc/ide/ide0/hda/model
    Optiarc DVD RW AD-5200A
  • Посмотреть какие процессу доступны системные ресурсы:
    #cat /proc/19274/limits
    Limit                   Soft Limit           Hard Limit           Units
    Max cpu time            unlimited            unlimited            seconds
    Max file size           unlimited            unlimited            bytes
    Max data size           unlimited            unlimited            bytes
    Max stack size          10485760             unlimited            bytes
    Max core file size      0                    unlimited            bytes
    Max resident set        unlimited            unlimited            bytes
    Max processes           4028                 4028                 processes
    Max open files          1024                 1024                 files
    Max locked memory       32768                32768                bytes
    Max address space       unlimited            unlimited            bytes
    Max file locks          unlimited            unlimited            locks
    Max pending signals     4028                 4028                 signals
    Max msgqueue size       819200               819200               bytes
    Max nice priority       0                    0
    Max realtime priority   0                    0
  • Посмотреть текущую рабочую директорию процесса:
    #ls -l /proc/961/cwd
    lrwxrwxrwx 1 ed ed 0 Июл 22 13:26 /proc/961/cwd -> /home/ed
  • Посмотреть путь к исполняемому файлу процесса:
    #ls -l  /proc/1861/exe
    lrwxrwxrwx 1 ed ed 0 Июл 22 13:30 /proc/1861/exe -> /usr/bin/alpine
  • Увеличить количество записей в arp-таблице в 2 раза (помогает при появлении в системном логе собщений вида "kernel: Neighbour table overflow."):
    echo 256 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
    echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
    echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
  • Посмотреть когда был запущен процесс
    #ls -ld /proc/29512
    dr-xr-xr-x 4 root root 0 Авг 24 04:45 /proc/29512

    29512 - PID процесса, который нас интересует.

Posted in *nix.

Tagged with , .


Тонкая настройка WordPress

Настраиваем wordpress

Полезные советы по работе с WordPress


В этой статье освещены следующие темы:

  1. Столкнулся с проблемой: когда пытался обновить wordpress до последней версии через админку, кликая по ссылке "обновить автоматчески", получал ошибку примерно такого содержания: "за 30 секунд скачано только 1700000 байт из 2600000, неудача". Оказалось, что шейпер на входящий трафик моего хостера не позволял за 30 секунд (а именно такой timeout был установлнен по умолчанию) стянуть весь диструбитив wordpress-а. Чтобы поменять этот тайм-аут, нужно в файле wp-admin/includes/file.php найти строку
    $response = wp_remote_get($url, array('timeout' => 30));

    и поменять ее, например, на

    $response = wp_remote_get($url, array('timeout' => 60));

    Таким образом, мы вдвое увеличили время ожидания отработки запроса.

    Дополнение от 2010-01-24. Начиная с версии 2.9.1, таймаут по умолчанию уже установлен в 300 сек (или 5 минут). Так что теперь эта проблема будет встречаться намного реже.

  2. Отложенная публикация в wordpress 2.7. Чтобы заметки, запланированные на публикацию в будущем таки появлялись в блоге, нужно в cron добавить вызов скрипта wp-cron.php c параметром check. Значение параметра легко определить, временно добавив перед строкой
    if ( $_GET['check'] != wp_hash('187425') );

    что-то типа

    echo(wp_hash('187425'));

    Тогда, набрав в адресной строке броузера http://<вашблог>/wp-cron.php, можно увидеть значение хеша (46cbe1674da1d2888104482d6ed4f87f). Следовательно, из крона обращаться к http://<вашблог>/wp-cron.php?check=46cbe1674da1d2888104482d6ed4f87f. Естественно, для предотвращения DoS-атак лучше заменить стандартную последовательность 187425 на что-то другое. В WordPress 2.8.2 в файле wp-cron.php уже нет такой проверки, поэтому достаточно его просто вызывать без параметров, например добавив в системный cron что-то такое:

    wget http://avz.org.ua/wp-cron.php -O /dev/null 2> /dev/null
  3. Чтобы удалить из базы данных ревизии постов (промежуточные их версии, которые образовываются в результате внесения изменений и дополнения постов), нужно выполнить такой простой SQL-запрос:
    DELETE FROM wp_posts WHERE post_type='revision';

    Есть еще и более изящный и правильный метод удаления черновых заметок, который описан ниже в комментариях. Другие возможные значения поля 'post_type' – attachment, page, post (для версии 2.8.4). Чтобы вообще запретить создание ревизий, нужно в файл wp-config.php добавить строку

    define('WP_POST_REVISIONS', false);
  4. Если нужно, чтобы вверху над каждым постом отображался один и тот же блок HTML-кода, можно сделать так. Находим файл /wp-content/themes/<имя_темы>/content/content-default.php, и вставляем в него перед вот этой 25-ой строкой
     content-default.php
    

    нужный нам html-блок. Этот блок удобно заключить в конструкцию <div id="myblock">...</div> и в файле со стилями CSS определить атрибуты для нашего блока. CSS-файл находится в директории /wp-content/themes/<имя_темы>/css/ и имеет имя, совпадающее с именем темы и расширение .css. Пример опеределения атрибутов:

    div#myblock {padding-top: 10px; text-align: center}
  5. Если хотим, чтобы блоки с программным кодом красиво выделялись, как в этом посте – качаем и устанавливаем plugin Highlight Source Pro. Поддерживает более 90 языков, включая HTML, PHP, Perl, bash, CSS. Пример использования можно посмотреть на скриншоте.
  6. Если при установке плагинов WordPress ничего не качает и вместо этого спрашивает "информацию для соединения", как на этом скриншоте, то это означает, что он не может получить доступ на запись в каталог /wp-content/plugins и надо проверить права доступа. Запрашиваемая информация для соединения – это атрибуты доступа к FTP-серверу, на котором работает WordPress. Это таким образом WordPress пытается пойти по обходному пути когда видит, что у него нет прямого доступа к файловой системе.
  7. Если нужно отключить авто-замену двойного дефиса на красивое тире (а это бывает нужно, например, при публикации документации по linux-командам, ключи (параметры) которых часто именно и начинаются с '--', т.е. двух дефисов подряд), то нужно немного модифицировать код функции wptexturize. Для этого этот код
    /wp-includes/formatting.php
    $static_characters = array_merge(array('---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'s', '\'\'', ' (tm)'), $cockney);
    $static_replacements = array_merge(array('—', ' — ', '–', ' – ', 'xn--', '…', $opening_quote, '’s', $closing_quote, ' ™'), $cockneyreplace);
    

    меняем на этот код:

    /wp-includes/formatting.php
    $static_characters = array_merge(array('---', ' - ', 'xn–', '...', '``', '\'s', '\'\'', ' (tm)'), $cockney);
    $static_replacements = array_merge(array('—', ' – ', 'xn--', '…', $opening_quote, '’s', $closing_quote, ' ™'), $cockneyreplace);
    

    Похоже, что и в этой же функции происходит замена трех точек на unicode-символ троеточия и еще какие-то манипуляции с кавычками.

    Update от 2014-12-11: Все вышесказанное, начиная с версии 4.0, уже не актуально, так как formatting.php переписали почти с нуля и ранее упомянутого кода там уже нет. Более идеологически правильный способ избавиться от авто-замены (если честно, меня она просто ужасно бесит – я хочу видеть текст именно в том виде, в котором я его написал) – это добавить в начало файла
    /wp-content/themes/<ИМЯ_ВАШЕЙ_ТЕМЫ>/functions.php вот такой код:

    remove_filter ('the_content', 'wptexturize');
    remove_filter ('comment_text', 'wptexturize');
    remove_filter ('single_post_title', 'wptexturize');
    remove_filter ('the_title', 'wptexturize');
    remove_filter ('the_excerpt', 'wptexturize');

    Прелесть такого подхода в том, что эти правки не потеряются при очередном обновлении.

  8. Если WordPress живет на сервере с Apache, то для запрета выполнения PHP- и CGI-скриптов в директории, куда wordpress сохраняет пользовательские файлы (/wp-content/uploads), достаточно положить туда файл .htaccess следующего содержания:
    /wp-content/uploads/.htaccess
    <FilesMatch "\.(phtml|php3?|pl|cgi)$">
      Deny from all
    </FilesMatch>

    Это весьма рекомендуется сделать, поскольку снижает риск успешного взлома в случае, если злоумышленнику каким-то образом удастся загрузить php-shell или другие инструменты для своих темных делишек – запустить он их так просто не сможет. Также очень рекомендуется по возможности запрещать в firewall-е установку исходящих соединений с сервера хостинга на удаленные ресурсы.

  9. Для изменения пароля пользователя (например, если он был успешно забыт) достаточно одного простого SQL-запроса. Например, чтобы установить для пользователя admin пароль Gyhusdf3f, делаем так:
    UPDATE wp_users SET user_pass=MD5('Gyhusdf3f') WHERE user_login='admin';
  10. По-умолчанию в исходном коде страниц сайта присутствует META-тег generator, в котором указывается версия WordPress. Выглядит он примерно так:
    <meta name="generator" content="WordPress 3.5.1" />

    Чтобы его убрать, ищем в директории с темой файл functions.php и вставляем в него ближе к началу (но после открывающего тега <?php) следующее:

    /wp-content/themes/theme_name/functions.php
    remove_action('wp_head', 'wp_generator');
    

А напоследок посмотрите на тенденции потребления памяти wordpress-oм:

Потребление памяти wordpress-ом предыдущих версий

Потребление памяти wordpress-ом различных версий

Posted in Web-apps.

Tagged with , .


Полезные команды windows

Ниже приведены некоторые полезные для системных администраторов команды, которые можно использовать в .bat-файлах и различных скриптах для автоматизации.

  1. Посмотреть ip-адреса сетевых интерфейсов:
    netsh interface ip show address
  2. Поменять ip-адрес интерфейса с именем Internal на 192.168.1.42, установить маску подсети 255.255.254.0 (/23) и установить шлюз по умолчанию 192.168.1.1 с метрикой 1:
    netsh interface ip set address name="Internal" static 192.168.1.42 255.255.254.0 192.168.1.1 1
  3. Установить для интерфейса с именем Internal DNS-сервера 192.168.1.10 и 192.168.1.11:
    netsh interface ip set dns name="Internal" static 192.168.1.10
    netsh interface ip add dns "Internal" 192.168.1.11
  4. Получить mac-адреса сетевых интерфейсов:
    getmac
  5. Командый файл для закачки множества файлов с похожими именами (в результате в текущую директорию будут скачиваться файлы по ссылкам https://avz.org.ua/wp/films/Univer_1.avi, https://avz.org.ua/wp/films/Univer_2.avi, ..., https://avz.org.ua/wp/films/Univer_20.avi):
    @echo off
    set URL=http://avz.org.ua/wp/films/Univer
    FOR /L %%I IN (1,1,20) DO wget %URL%_%%I.avi

    Обратите внимание, что переменная цикла должна состоять из одной буквы, иначе работать не будет, выдавая ошибку типа "Непредвиденное появление: %Ind" (у меня полчаса ушло, чтобы понять в чем косяк, когда я пытался использовать Ind в качестве итератора :/ Зато help по команде FOR перечитал вдоль и поперек :) пока пытался постичь сей феномен). После этого с особой теплотой вспоминал bash, который как скриптовый язык намного удобнее и мощнее этого убогого поделия мелкомягких. Утилитку wget под windows можно скачать, например, здесь.

  6. Узнать размер файла: создаем файл, к примеру, с именем flen.bat следующего содержания
    set FLEN=%~z1
    echo %FLEN%

    Запускаем файл flen.bat, передавая ему в качестве аргумента имя файла, размер которого хотим получить. Подробнее о конструкциях, подобных %~z1 можно почитать в справке по команде call, набрав в командной строке call /?

  7. Переименование файлов в текущем каталоге с заданным расширением так, чтобы имена образовали последовательность чисел, начиная с заданного:
    @echo off
    if .%1==. goto usage
    set n=%2
    if .%n%==. set n=0
    set tempdir=$tmp$.$x$
    mkdir %tempdir%
    for %%i in (%1) do call :renfile "%%i"
    move %tempdir%\%1 . &gt;nul
    rmdir %tempdir%
    goto :EOF
     
    :renfile
    move %1 %tempdir%\%n%%~x1 &gt; nul
    set /a n+=1
    goto :EOF
     
    :usage
    echo USAGE: RENUM *.jpg ^

    Конструкция %~x1 выделяет из переменной %1 (1-ый параметр командного файла) фрагмент имени файла, соответствующий его расширению (см. call /?). Метка :EOF означает конец файла.

  8. Экспортирование определённого раздела реестра в файл с именем putty.reg:
    regedit /e putty.reg "HKEY_CURRENT_USER\Software\SimonTatham\PuTTY"
  9. Иногда бывает, что в Windows XP служба брандмауэра (Internet Connection Firewall) куда-то девается из списка служб и/или её невозможно запустить (вылазит сообщение об ошибке "Вследствие неопределенной ошибки не удается отобразить параметры брандмауэра Windows"). Восстановить службу "Брандмауэра Windows / Общий доступ к Интернету (ICS)" можно следующей командой:
    Rundll32 setupapi,InstallHinfSection Ndi-Steelhead 132 %windir%\inf\netrass.inf
  10. Отключение административных общих ресурсов (C$, D$ и т.д.). При запущенной службе "Сервер" есть возможность при известном пароле пользователя с правами администратора получить по сети доступ к любому файлу на жестком диске. Конечно, такой доступ еще должен быть разрешен в брандмауэере. А поскольку многие не затрудняют себя установкой паролей более сложных, чем "123", и часто отключают встроенный в windows брандмауэер, такую возможность часто желательно отключать. Для отключения шаринга административных общих ресурсов следует запустить редактор реестра (regedit) и создать в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters параметр AutoShareWks типа DWORD и установить его значение в 0. Соответствующий .reg-файл можно скачать по ссылке выше.
  11. Ну и напоследок список системных переменных Windows
    %ALLUSERSPROFILE% - размещение профиля «All Users»
    %APPDATA% - используемое по умолчанию размещение данных приложений
    %CD% - путь к текущей папке
    %COMPUTERNAME% - имя компьютера
    %ERRORLEVEL% - код ошибки последней использовавшейся команды. Значение, не равное нуля, обычно указывает на наличие ошибки
    %HOMEDRIVE% - имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задается на основании расположения основного каталога
    %LOGONSEVER% - имя контроллера домена, который проверял подлинность текущей сессии
    %NUMBER_OF_PROCESSORS% - количество процессоров, установленных на компьютере
    %OS% - имя операционной системы
    %PROCESSOR_ARCHITECTURE% - архитектура процессора. Пока доводилось встречать значения: x86, IA64
    %PROCESSOR_IDENTFIER% - описание процессора
    %PROCESSOR_LEVEL% - номер модели процессора, установленного на компьютере
    %PROCESSOR_REVISION% - номер модификации процессора
    %RANDOM% - произвольное десятичное число от 0 до 32767 (работает в cmd.exe)
    %SYSTEMDRIVE% - имя диска, содержащего корневой каталог Windows XP (т.е. системный каталог)
    %SYSTEMROOT% - размещение системного каталога Windows XP
    %TEMP% и %TMP% - временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему
    %TIME% - Возвращает текущее время. Использует тот же формат, что и команда time /t, создается командой Cmd.exe
    %USERDOMAIN% - имя домена, содержащего список учетных записей пользователей
    %USERNAME% - имя пользователя, выполнившего вход в систему
    %USERPROFILE% - размещение профиля для текущего пользователя
    %WINDIR% - размещение каталога операционной системы

Posted in Howto, Windows.

Tagged with , , .