Архив автора: root

Linux chkconfig и service: управление автозапуском и состоянием сервисов

В Red Hat подобных Linux системах типа Red Hat Entrprise, CentOS, Fedora (до версии 15) и им подобных для управления сервисами используется команда /sbin/chkconfig.

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

# /sbin/chkconfig --list nfs
nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off

Чтобы включить сервис nfs выполним команду:

# /sbin/chkconfig nfs on

Проверим состояние сервиса nfs командой:

# /sbin/chkconfig --list nfs
nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off

Выключить сервис nfs из автозагрузки можно командой:

# /sbin/chkconfig nfs off

Для того, чтобы еще раз проверить состояние сервиса nfs выполним:

# /sbin/chkconfig --list nfs
nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off
#

Чтобы посмотреть состояние автозагрузки всех сервисов в системе:

# /sbin/chkconfig --list |more

Все доступные опции команды можно посмотреть выполнив:

# /sbin/chkconfig --help

Так же смотрите вывод команды:

# /sbin/service nfs
Usage: nfs {start|stop|status|restart|reload|force-reload|condrestart|try-restart|condstop}

для управления состоянием сервиса.

Чаще всего используются опции:
start – запустить;
status – проверить текущее состояние;
restart – перезапустить;
reload – применить новую конфигурацию без перезапуска.

Linux bash: удалить последний символ со значения переменной

Недавно возникла задача в Linux bash скрипте удалить последний символ со значения переменной.
Это можно сделать так:

#!/bin/bash

str1="foo bar"
echo "String1: ${str1}"

str2="${str1%?}"
echo "String2: ${str2}"

Linux OpenSSL: сгенерировать самоподписной SSL сертификат и конфигурация веб сервера Apache

Не так давно, я писал о том, как можно создать csr и ключ для получения SSL сертификата.
Сегодня, мы сгенерируем самоподписной (self-signed) SSL сертификат.
Для этого, выполним команду:

# openssl x509 -req -days 365 -in www.shkodenko.com.csr -signkey www.shkodenko.com.key -out www.shkodenko.com.crt
Signature ok
subject=/C=UA/ST=Kievskaya/L=Kiev/O=Shkodenko/CN=www.shkodenko.com/emailAddress=webmaster@shkodenko.com
Getting Private key

Настроим веб сервер Apache для того, чтобы он работал с сертификатом.
Добавим конфигурацию для вирутал хоста:

<IfModule mod_ssl.c>

<VirtualHost 127.0.0.1:443>

ServerName shkodenko.com
ServerAlias www.shkodenko.com
DocumentRoot /home/shkodenko/public_html
ServerAdmin webmaster@shkodenko.com
UseCanonicalName Off
SSLEngine on
SSLVerifyClient none
SSLCertificateFile /etc/ssl/certs/shkodenko.com.crt
SSLCertificateKeyFile /etc/ssl/certs/shkodenko.com.key
CustomLog /usr/local/apache/domlogs/shkodenko.com-ssl_log combined
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

<Directory>
SSLOptions +StdEnvVars
</Directory>

</VirtualHost>

</IfModule>

Проверим синтаксис командой:

# /usr/local/apache/bin/apachectl -t

или

# /sbin/service httpd configtest

в зависимости от версии Apache

Перезапустим веб сервер Apache c помощью команды:

# /usr/local/apache/bin/apachectl -k restart

или

# /sbin/service httpd restart

Linux whereis, find и locate как можно найти нужную программу

Когда нужно найти нужную программу чаще всего использую команду whereis, например так:

# whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz

Есть еще варианты:

# find / -type f -name "ls"
и
# locate ls

но они работают дольше. locate выводит все имена файлов, в имени пути файла или папки которых встретилось ls. Без просеивания с помощью grep или команды пейджера more или less читать вывод такой команды очень трудно.

Linux tail: вывести последнюю часть файла

При работе с Linux очень полезная утилита tail, которая позволяет вывести последнюю часть (хвост) файла.
Причем щаче всего я использую ее опциями -n и -f. Например, так:

# tail -n 55 -f /var/log/messages

Что позволяет просмотреть последние 55 строк файла /var/log/messages, а так же автоматически выводить новые стоки, которые появляются в файле (отслеживать изменения).
Так же можно использовать дополнительную утилиту пейджер more, если нужно просмотреть много строк, например так:

# tail -n 255 -f /var/log/messages |more

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

# tail -n 55 -f /var/log/messages |grep "named"

Linux useradd passwd: создание учетных записей с доступом в определенную папку

Иногда, необходимо создать дополнительный FTP аккаунт с возможностью доступа в определенную подпапку.
Это можно сделать командами:

# useradd -d /home/taras/public_html -g taras -o -s /bin/false -u 10001 ftp_taras_web
# passwd ftp_taras_web

Параметры команды useradd из man страницы useradd:
-d, –home HOME_DIR
The new user will be created using HOME_DIR as the value for the user’s login directory. The default is to append the LOGIN name to BASE_DIR and use that as the login directory
name. The directory HOME_DIR does not have to exist but will not be created if it is missing.

-g, –gid GROUP
The group name or number of the user’s initial login group. The group name must exist. A group number must refer to an already existing group. /etc/default/useradd.

-o, –non-unique
Allow the creation of a user account with a duplicate (non-unique) UID.

-s, –shell SHELL
The name of the user’s login shell. The default is to leave this field blank, which causes the system to select the default login shell.

-u, –uid UID
The numerical value of the user’s ID. This value must be unique, unless the -o option is used. The value must be non-negative. The default is to use ID value equal to or
greater than UID_MIN and smaller then UID_MAX. Values between 0 and UID_MIN are typically reserved for system accounts.

Можно использовать мой генератор паролей, чтобы получить хороший сложный пароль.

Данные о пользователе можно получить командами id и finger:

# id taras
uid=1001(taras) gid=1001(taras) groups=1001(taras)

# finger taras
Login: taras Name:
Directory: /home/taras Shell: /bin/bash
Last login Wed Dec 26 13:48 (EET) on pts/4 from 192.168.2.1
No mail.
No Plan.

Linux screen: несколько сессий терминала в одном окне

Какое-то время назад, я уже писал об screen в другом своем блоге: Установка и работа со screen (скринами) в Unix-подобных системах (FreeBSD, Linux и др.)

Что касается специфики установки в RPM-based Linux дистрибутивах: Fedora, CentOS, Red Hat Enterprise и других, то проще всего поставить скрины с помощью пакетного менеджера yum:

# yum install screen

Команды для работы со screen (скринами):
– начинаем работу с создания скрина: # screen -a
– создание окон screen_name: # screen -t screen_name
– создание нового окна: [ Ctrl + a + c ]
– удаление окна: [ Ctrl + d ]
– переключение между двумя последними открытыми окнами: [ Ctrl + a ]
– переключение на следующее открытое окно: [ Ctrl + a + n ]
– переключение на предыдующее открытое окно: [ Ctrl + a + p ]
– отключение от окон: [ Ctrl + a + d ]
– подключение к окнам: # screen -dr
– после выхода к сессии можно вернуться при помощи: # screen -r
– после аварийного выхода, отсоединение от скрина не всегда регистрируется, при попытке повторного подключения выдается сообщение о том, что скрин активен, подключиться невозможно. Подключение к такому скрину выполняется при помощи: # screen -x

Еще мне очень нравится функция получения списка всех окон, который можно вызвать нажав [ Ctrl + a + " ], в котором можно передвигаться стрелками вверх / вниз, выбирая нужное окно из списка.
Чтобы не запутаться в большом количестве окон, можно присвоить уникальную подпись каждому окну нажав комбинацию клавиш [ Ctrl + a + A ], в появившемся окне ввести что-то вместо текста по-умолчанию bash и нажаеть Enter.

Linux find: поиск файлов по имени

Часто, при работе в Linux с командой find, необходимо найти файлы разных типов по имени.
Например, необходимо найти и подготовить к архивации все *.php, *.js и *.css файлы в папке вне зависимости от регистра имени.
Для этого выполняем команды:

# cd /home/taras/public_html
# find . -type f \( -iname '*.php' -o '*.js' -o '*.css' \) -print &gt; /home/taras/list-to-archive.txt

В файле /home/taras/list-to-archive.txt будет искомый список файлов, который можно использовать для архивирования утилитой tar, например, так:

# tar -cpjf /home/taras/archive.tar.bz2 -T /home/taras/list-to-archive.txt

Если нужно вести зависимый от регистра поиск заменяем -iname на -name.

Linux ionice: установить приоритет ввода/вывода для команды

В Linux, работая с правами администратора root, можно установить приоритет ввода/вывода для какого-либо процесса с помощью команды ionice.
Например, если нужно выполнить что-либо с наиболее высоким приоритетом:

# ionice -c1 -n0 /bin/some-command

Или же:

# ionice -c1 -n0 -pPID

PID процесса можно получить с помощью команд: ps, top, htop.
Чтобы выполнить что-либо с наиболее низким приоритетом ввода/вывода изменяем параметры -c3 -n7

Linux nice: выполнение команды с измененным приоритетом

Время от времени в работе с Linux возникает необходимость выполнить команду с измененным приоритетом. Для этих целей используется встроенная утилита nice.
Используется она так:

# nice -n N command

где N – число от -20 (наивысший приоритет) до 19 (самый низкий приоритет).
По-умолчанию процессу устанавливается приоритет 10.

Adobe photoshop PSD файлы с цветовой схемой CMYK в Linux gimp

Недавно столкнулся с проблемой: не могу открыть файлы созданные в редакторе Adobe photoshop PSD с цветовой схемой CMYK в Linux редактором Gimp.
Решил проблему конвертацией файла в формат PNG с помощью утилиты convert пакета ImageMagick:

# convert file.psd -colorspace rgb file.png

Linux: создать csr и ключ для получения SSL сертификата

Довольно-таки часто возникает необходимость получить SSL сертификат для сайта. Для этого требуется сгенерировать приватный ключ и CSR. В Linux это легко можно легко сделать даже одной командой:

# openssl req -nodes -newkey rsa:2048 -keyout www.shkodenko.com.key -out www.shkodenko.com.csr

Заполняем поля: Country Name (2 letter code) [XX], State or Province Name (full name) [], Locality Name (eg, city) [Default City], Organization Name (eg, company) [Default Company Ltd], Organization Unit Name (eg, section) [], Common Name (eg, your name or your server’s hostname), Email Address [].

И в той папке, в которой мы запустили команду появится 2 файла:
1. www.shkodenko.com.key – приватный ключ с алгоритмом RSA 2048 бит.
2. www.shkodenko.com.csr – CSR, который необходим для генерации SSL сертификата.

Linux diff: сравнить две директории

Часто в работе с Linux возникает задача сравнить две директории.
Для этого есть много способов, но мне лучше всего подходят такие:
1. Для получения полного списка изменений в patch формате:

# diff -Naur dir1/ dir2/ > file.patch

2. Для получения просто списка файлов без самих изменений:

# diff -aqr dir/ dir/ > changed_list.txt

Как вывести конфигурационный файл без пустых строк и комментариев в Linux

Довольно-таки часто в работе бывает необходимо вывести содержимое конфигурационного файла без пустых строк и комментариев в Linux. Это можно сделать такой последовательность команд:

# cat /etc/my.cnf |sed '/^$/d' |grep -v "#" |more

Можно заменить # на любой другой символ комментария, например ;