Как узнать версию Debian?

Для того, чтобы узнать текущую версию Debian, достаточно выполнить следующую команду:

cat /etc/debian_version

Для вывода более подробной информацией можно воспользоваться следующим вариантом:

sb_release -a

[Apache] Invalid command ‘SSLEngine’

При опытке перезапустить Apache, выводится ошибка:

# /etc/init.d/apache2 restart

[warn] module rpaf_module is already loaded, skipping
Syntax error on line 303 of /etc/apache2/apache2.conf:
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
failed!

Тем не менее модуль присутствует:

# php -m

[PHP Modules]
...
openssl
...

Проблема в том, что модуль неактивирован. Для этого нужно выполнить следующую команду:

# a2enmod ssl

После чего перезапустить Apache.

[Apache] Error retrieving pid file /var/run/apache2.pid

Пробуя зайти на свой сайт, получил 504-ошибку (Gateway Timeout). Полез в консоль, пробую перезапустить Apache, получаю:

Restarting web server: apache2Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.
[Sat Feb 15 18:04:48 2014] [warn] module rpaf_module is already loaded, skipping
(20014)Internal error: Error retrieving pid file /var/run/apache2.pid
Remove it before continuing if it is corrupted.
Action 'stop' failed.
The Apache error log may have more information.
[Sat Feb 15 18:04:48 2014] [warn] module rpaf_module is already loaded, skipping
(20014)Internal error: Error retrieving pid file /var/run/apache2.pid
Remove it before continuing if it is corrupted.
Action 'start' failed.
The Apache error log may have more information.
failed!

Проблема оказалась в том, что логи сожрали все дисковое пространство, оставив жалкие 5 МБ. Удалил логи, пробую опять перезапустить Apache — запустился, но сайт вновь не работает. Перезапускаю сервер — уф, заработало…

Решение проблемы: nginx: [emerg] listen() to 0.0.0.0:80 failed (98: Address already in use)

Сегодня при попытке обновить конфигурацию nginx, вылетела ошибка:

# /etc/init.d/nginx reload

...
nginx: [emerg] listen() to 0.0.0.0:80, backlog 511 failed (98: Address already in use)
nginx: configuration file /etc/nginx/nginx.conf test failed

Ну а когда сделал так:

# /etc/init.d/nginx restart

то с той же ошибкой nginx уже не запустился.

Из описания ошибки следует, что 80-ый порт занят, поэтому nginx не может запуститься:

# netstat -nap | grep 80

tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4658/apache2
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 488/nginx

Исправляем ситуацию, убив подвисший процесс на 80-ом порту:

# fuser -k 80/tcp

Запускаем nginx:

# /etc/init.d/nginx start

Starting nginx: nginx.

Все.

[apt-get] Удаление архивов пакетов

Все загруженные пакеты сохраняются в директории /var/cache/apt/archives/. Со временем их количество возрастает до такого состояния, что начинает занимать довольно много дискового пространства. Для удаления архивов можно использовать следующие команды:

apt-get autoclean — удаляет лишь старые версии пакетов, отсутствующие в репозитариях, и оставляя новые, которые в репозитариях присутствуют
apt-get clean — удаляет все пакеты

Тест производительности браузера Safari 7

Несколько месяцев назад я сравнивал совместимость браузеров Safari и Chrome на поддержку HTML5 и их общую производительность. И вот недавно Mac OS обновилась до версии 10.9, а вместе с ней и Safari до седьмой версии. Я решил проверить, на сколько лучше теперь обстоят дела с Safari, если прогнать его через тест Peacekeeper.

Странно, но Safari 7 набрал даже меньшее количество очков, чем Safari 6.0.5 — 3486 против 4019. Однако совместимость в HTML5 возросла, и теперь составляет 4/7 против 3/7, которые были раньше.

Тест производительности браузера Safari 7

А вот Google Chrome (31.0.1650.57) теперь имеет полную совместимость с HTML5 — 7/7 и набирает 4720 очков.

Пять команд для проверки памяти в Linux

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

# free -m
# cat /proc/meminfo
# vmstat -s
# top
# htop

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

# sudo dmidecode -t 17

Обновление OS X 10.8.5 до 10.9

3 октября вышла сборка Golden Master операционной системы OS X 10.9 (Mavericks). Официальный релиз, скорее всего, будет сразу же после очередной презентации Apple, намеченной на 22 октября.

Не дожидавшись этой даты, решил поставить OS X 10.9 на свой iMac уже прямо сейчас. Процесс установки прост и занимает чуть менее часа. После обновления имеем текущее рабочее окружение (лишь некоторые системные настройки сбросились в дефолтные). Dock у меня прикреплен сбоку, и теперь его фон стал выглядеть более светлее, что немного не привычно. Ну а в общем,  нужно, конечно же, время, чтобы почувствовать разницу по сравнению с Mountain Lion (самое главное из которых — обещанное повышение производительности системы).

Darwin iMac.local 12.5.0 Darwin Kernel Version 12.5.0: Mon Jul 29 16:33:49 PDT 2013; root:xnu-2050.48.11~1/RELEASE_X86_64 x86_64

Darwin iMac.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

P.S. Испугался, что Punto Switcher не совместим с OS X 10.9, т.к. после обновления ОС данная утилита перестала запускаться. Однако после перезагрузки системы все заработало на ура!

HTTP-аутентификация через .htaccess или PHP

Чтобы на сервере ограничить доступ к конкретному файлу через авторизацию посредством .htaccess, нужно прописать:

<FilesMatch "file_name">
AuthName "Access Denied"
AuthType Basic
AuthUserFile /path_to_htpasswd/.htpasswd
Require valid-user
</FilesMatch>

А если мы хотим защитить php-файл, то непосредственно в него можно прописать следующее:

$login="login";
$pass="password";
if (!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER']!=$login || $_SERVER['PHP_AUTH_PW']!=$pass)
{
header("WWW-Authenticate: Basic realm=\"Authorization\"");
header("HTTP/1.0 401 Unauthorized");
exit("Access Denied");
}