Архив за месяц: июля 2013

MySQL shell script проверить существует ли база данных

С днем системного администратора всех, кто имеет к этой профессии хоть какое-то отношение.

Время от времени сталкиваюсь с необходимостью выяснить сущесвует ли в MySQL база данных с определенным именем.
Написал небольшой shell скрипт, чтобы делать подобную проверку.
Может быть он будет вам тоже полезен:

Файл ./check-mysql-database-exists.sh

#!/usr/bin/env bash

if [ -z $1 ];
then
    echo "Usage: $0 'database name'"
    exit 1
fi

DB_NAME=$1

if [ ! -z "`mysql -qfsBe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='$DB_NAME'" 2>&1`" ];
then
    echo "DATABASE $DB_NAME ALREADY EXISTS"                                                                                                                                                                      
else
    echo "DATABASE $DB_NAME DOES NOT EXIST"                                                                                                                                                                      
fi

Назначим права, чтобы скрипт стал исполняемым:

# chmod -v 755 ./check-mysql-database-exists.sh

Запускаем проверку базы database_name_to_check так:

# ./check-mysql-database-exists.sh database_name_to_check

И еще одно: с сегодняшнего дня основным адресом блога будет http://www.linuxweb.net.ua/.
Все статьи будут публиковаться на впервую очередь на нем, а потом уже будет производиться кросс пост в мой LiveJournal http://plmw.livejournal.com/.

Linux bash: пример работы с массивом и цикл for

Время от времени приходится в Linux bash shell скрпитах использовать массивы и циклы for.
Может быть кому-то тоже будет полезно это.

#!/usr/bin/env bash

dirs=('tmp' 'cache' 'logs')

for j in ${dirs[@]} 
do
    echo $j
done

В примере переменная dirs содержит массив значений, значения которого перебираются в цикле for

rpm посмотреть список зависимоестей пакета

В rpm-based Linux системах иногда бывает полезно посмотреть список зависимостей для пакета.

Это можно сделать командой rpm -qR имя пакета.

Например:

# rpm -qR htop

libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libm.so.6()(64bit)
libm.so.6(GLIBC_2.2.5)(64bit)
libncursesw.so.5()(64bit)
libtinfo.so.5()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

yum deplist список зависимостей пакета

Чтобы посмотреть список зависимостей для пакета в rpm-based Linux Red Hat, CentOS, Fedora и других дистрибутивах можно выполнить такие команды:

1. Получить все пакеты, в названии, которых есть “office”

# rpm -qa |grep -i "office"

libreoffice-impress-3.6.6.2-5.fc18.x86_64
libreoffice-calc-3.6.6.2-5.fc18.x86_64
libreoffice-writer-3.6.6.2-5.fc18.x86_64
libreoffice-core-3.6.6.2-5.fc18.x86_64
libreoffice-graphicfilter-3.6.6.2-5.fc18.x86_64
libreoffice-kde-3.6.6.2-5.fc18.x86_64
libreoffice-pdfimport-3.6.6.2-5.fc18.x86_64
libreoffice-math-3.6.6.2-5.fc18.x86_64
libreoffice-xsltfilter-3.6.6.2-5.fc18.x86_64
libreoffice-ure-3.6.6.2-5.fc18.x86_64
libreoffice-draw-3.6.6.2-5.fc18.x86_64
libreoffice-opensymbol-fonts-3.6.6.2-5.fc18.noarch
libreoffice-presenter-screen-3.6.6.2-5.fc18.x86_64

2. Получить список зависимостей для пакета libreoffice-draw-3.6.6.2-5.fc18.x86_64

# yum deplist libreoffice-draw-3.6.6.2-5.fc18.x86_64

Loaded plugins: auto-update-debuginfo, langpacks, presto, refresh-packagekit
Unable to send message to PackageKit

package: libreoffice-draw.x86_64 1:3.6.6.2-5.fc18
dependency: /bin/sh
provider: bash.x86_64 4.2.45-1.fc18
dependency: libreoffice-core = 1:3.6.6.2-5.fc18
provider: libreoffice-core.x86_64 1:3.6.6.2-5.fc18
dependency: libreoffice-graphicfilter = 1:3.6.6.2-5.fc18
provider: libreoffice-graphicfilter.x86_64 1:3.6.6.2-5.fc18
dependency: libreoffice-pdfimport = 1:3.6.6.2-5.fc18
provider: libreoffice-pdfimport.x86_64 1:3.6.6.2-5.fc18
dependency: libreoffice-ure = 1:3.6.6.2-5.fc18
provider: libreoffice-ure.x86_64 1:3.6.6.2-5.fc18

Linux найти и выбрать с помощью shuf случайное фото jpg jpeg png

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

# find /home/taras/Pictures/ -type f -name '*.jpg' -o -name '*.jpeg' -o -name '*.png' | shuf -n 1

Linux sysstat iostat просмотр отчета о CPU и вводе/выводе устройств и партиций

В Red Hat Enterprise, CentOS, Fedora и других Linux системах есть замечательный пакет sysstat

# yum info sysstat

Loaded plugins: rhnplugin, security
This system is receiving updates from RHN Classic or RHN Satellite.
drivesrvr | 951 B 00:00
Installed Packages
Name : sysstat
Arch : x86_64
Version : 7.0.2
Release : 12.el5
Size : 418 k
Repo : installed
Summary : The sar and iostat system monitoring commands.
URL : http://perso.orange.fr/sebastien.godard/
License : GPL
Description: This package provides the sar and iostat commands for Linux. Sar and
: iostat enable system monitoring of disk, network, and other IO
: activity.

В его состав входит утилита iostat – Report Central Processing Unit (CPU) statistics and input/output statistics for devices and partitions.

Пример использования:

# iostat -dh

-d – The -d option is exclusive of the -c option and displays only the device utilization report.
-h – Display the NFS report more human readable.

Все опции можно посмотреть в man iostat

Linux IPTables firewall просмотреть и удалить правило

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

# /sbin/iptables -vnL --line-numbers

-v, –verbose – Verbose output. This option makes the list command show the interface name, the rule options (if any), and the TOS masks. The packet and byte counters are also listed, with the suffix ’K’, ’M’ or ’G’ for 1000, 1,000,000 and 1,000,000,000 multipliers respectively (but see the -x flag to change this). For appending, insertion, deletion and replacement, this causes detailed information on the rule or rules to be printed.

-n, –numeric – Numeric output. IP addresses and port numbers will be printed in numeric format. By default, the program will try to display them as host names, network names, or services (whenever applicable).

-L, –list [chain] – List all rules in the selected chain. If no chain is selected, all chains are listed. As every other iptables command, it applies to the specified table (filter is the default), so NAT rules get listed by
iptables -t nat -n -L
Please note that it is often used with the -n option, in order to avoid long reverse DNS lookups. It is legal to specify the -Z (zero) option as well, in which case the chain(s) will be atomically listed and zeroed. The exact output is affected by the other arguments given. The exact rules are suppressed until you use
iptables -L -v

–line-numbers – показать номера строк, чтобы потом можно было удалить какое-то из правил. When listing rules, add line numbers to the beginning of each rule, corresponding to that rule’s position in the chain.

Для просмотра всех возможных опций см. man iptables

Для того, чтобы удалить правило из IPTables служит команда D.
Например, чтобы удалить правило N из цепочки INPUT выполняем:

# /sbin/iptables -D INPUT N

Linux скачать и распаковать rpm

В rpm-based ОС Linux иногда бывает полезным скачать и распаковать какой-либо rpm.

Это можно сделать командами:

# wget http://domain.com/some.rpm
# rpm2cpio some.rpm | cpio -idv

Что распакует содержимое some.rpm в текущую папку.

Linux создать изменить дату создания файла touch

В Linux можно создать новый файл или изменить дату создания существующего файла с помощью команды touch

# touch --date="2013-04-02" /home/plmw/test_file_2013-04-02

Проверяем созданный файл:

# ls -Alh /home/plmw/test_file_2013-04-02

-rw-r–r– 1 plmw plmw 0 Apr 2 00:00 test_file_2013-04-02

Linux удалить из файла строки начинающиеся с

Время от времени возникает задача удалить из файла строки начинающиеся с шаблона.
В Linux это можно сделать многими способами.
Мне больше всего нравятся эти два:

1. С использованием sed:

# sed '/^\.\/var\/cache/d' /home/taras/website_backups/changed_files.log > /home/taras/website_backups/changed_files_2.log

2. С помощью egrep:

# egrep -v '^\.\/var\/cache' /home/taras/website_backups/changed_files.log > /home/taras/website_backups/changed_files_3.log

Изменения можно проверить с помощью команды diff:

# diff /home/taras/website_backups/changed_files.log /home/taras/website_backups/changed_files_2.log
# diff /home/taras/website_backups/changed_files.log /home/taras/website_backups/changed_files_3.log

Linux route: заблокировать IP

В Linux можно блокировать IP злоумышленника с помощью команды route

Например так:

# route add IP.address reject

Просмотреть таблицу маршрутов можно командами:

# route

или

# netstat -nr

и можно добавить в конец команды |grep IP.address, чтобы вывести только эту запись

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

# route del -host IP.address reject

Linux ps и kill: найти и убить процесс

Что нужно сделать, чтобы найти и убить процессы в Linux?
Как подсказал sin в предыдущем посте: Linux ps: просмотр текущих процессов системы можно найти все процессы httpd с помощью команды:

# ps auxwww |grep -v grep |grep "httpd"

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2981 0.0 0.4 46140 12368 ? Ss Feb22 0:00 /usr/sbin/httpd
apache 10353 0.0 0.1 31124 4412 ? S Mar27 0:00 /usr/sbin/httpd
apache 10359 0.0 0.8 64512 26752 ? S Mar27 1:23 /usr/sbin/httpd
apache 10360 0.0 0.9 65080 27268 ? S Mar27 0:14 /usr/sbin/httpd
apache 10361 0.0 0.8 63952 26296 ? S Mar27 0:49 /usr/sbin/httpd
apache 10362 0.0 0.8 65072 27096 ? S Mar27 0:14 /usr/sbin/httpd
apache 10363 0.0 0.9 65300 27208 ? S Mar27 0:50 /usr/sbin/httpd
apache 10364 0.0 0.9 65108 27916 ? S Mar27 0:13 /usr/sbin/httpd
apache 10366 0.0 0.8 63688 25940 ? S Mar27 0:15 /usr/sbin/httpd
apache 10367 0.0 0.8 64484 26584 ? S Mar27 0:47 /usr/sbin/httpd
apache 18142 0.1 0.8 63740 25796 ? S 10:00 1:12 /usr/sbin/httpd
apache 18362 0.0 0.8 64820 25928 ? S 12:02 0:03 /usr/sbin/httpd
apache 18363 0.0 0.8 64256 26024 ? S 12:02 0:02 /usr/sbin/httpd
apache 18364 0.0 0.8 64812 26492 ? S 12:02 0:03 /usr/sbin/httpd
apache 18365 0.0 0.8 63720 25752 ? S 12:02 0:03 /usr/sbin/httpd
apache 18368 0.0 0.8 63500 26096 ? S 12:02 0:02 /usr/sbin/httpd
apache 18369 0.0 0.8 64880 26740 ? S 12:02 0:03 /usr/sbin/httpd
apache 18370 0.0 0.8 64248 25984 ? S 12:03 0:03 /usr/sbin/httpd
apache 18371 0.0 0.8 63924 25276 ? S 12:03 0:03 /usr/sbin/httpd
apache 29707 0.0 0.9 65092 27336 ? S Mar27 1:50 /usr/sbin/httpd
apache 29708 0.0 0.9 65752 27972 ? S Mar27 0:44 /usr/sbin/httpd
apache 29709 0.0 0.8 64764 26844 ? S Mar27 0:44 /usr/sbin/httpd

Убиваем процессы вручную:

# kill -s 9 29708 29707 ...

Или же пишем скрипт: /root/bin/kill_httpd.sh

#!/bin/bash

OLD_HTTPD_PIDS="$(ps auxwww |grep "httpd" |grep -v "grep" | awk '{print $2}')"

for FPID in ${OLD_HTTPD_PIDS}
do
echo "Killing httpd processe pid: ${FPID}"
kill -s 9 ${FPID}
done

Делаем его исполняемым:

# chmod -v 755 /root/bin/kill_httpd.sh

И запускаем:

# /root/bin/kill_httpd.sh

Linux ps: просмотр текущих процессов системы

Если нужно посмотреть запущен ли какой-либо процесс в системе, то для этих целей пригодится утилита Linux ps.
Например, проверить процесс веб сервера Apache (httpd) можно такой последовательностью команд:

# ps auxwww| head -n 1; ps auxwww |grep httpd |grep -v grep

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 21215 0.0 0.1 524056 30560 ? Ss 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21216 0.0 0.0 308392 14032 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21218 0.0 0.1 626980 22864 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21219 0.0 0.1 633584 30140 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21220 0.0 0.1 627236 23080 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21221 0.0 0.2 641900 33124 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21222 0.0 0.1 626840 22180 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21223 0.0 0.1 630368 26056 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21224 0.0 0.1 629436 24968 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND
apache 21225 0.0 0.1 630712 27036 ? S 16:59 0:00 /usr/sbin/httpd -DFOREGROUND

Опция aux команды ps отображает информацию о всех процессах.
Другие возможные опции, можно посмотреть на man странице командой:

# man ps