Quantcast
Channel: Библиотека знаний
Viewing all 1318 articles
Browse latest View live

virtualbox


Fstab

$
0
0

Fstab

UUID

Постоянные именования (persistent naming) в обозначении блочных устройств стали возможным с появлением udev и предоставляют несколько преимуществ по сравнению с наименованиями на базе Bus таких как /dev/hda1 или /dev/sda2.

Развитие Linux дистрибутивов и udev сделало более надежным опознавание аппаратных средств, но одновременно с этим поставило необходимость решения ряда новых вопросов:

Порядок подключения при наличии более чем одного контроллера SATA/SCSI или простых контроллеров IDE становится случайным. Как следствие имена одного и того же устройств вида hdx/hdy или sdx/sdy случайно чередуются после каждой загрузки.Использование постоянных именований позволяет больше не беспокоиться об этом. Для машин с контролёрами IDE (включая, например, машины со всеми жёсткими дисками SATA и только одним IDE cdrom), переход на стандартное ядро Squeeze может вызвать проблемы: с введением поддержки новой libata PATA, устройство IDE hdX станет устройством sdX. Опять же, если используется постоянное именование, этого даже не будет заметно. (postinst для пакета linux-base содержит код помогающий с переходом, но сначала имеет смысл получить представление и заранее понять как это работает.) На больших машинах, с большим количеством CPU и Fiber Channel Host Bus Adapters, FC коммутаторами с переменной нагрузкой/задержкой, контролёрами SCSI, и/или высокопроизводительными сетевыми картами, могут возникнуть проблемы с синхронизацией при работе с udev и многолучевым I/O, из за почти непредсказуемого порядка определения устройств и автоматического назначения имен в процессе загрузки. Существуют и другие причины. Но перечисленные - наиболее важны как в настоящий время, так и в ближайшем будущем. Поэтому Debian рекомендует использование схемы наименования блочных устройств с постоянными именами.

Схемы для постоянных наименований

Посредством UUIDs UUID является механизмом присвоения уникальных обозначений каждой файловой системе. Все файловые системы Linux включая swap, поддерживают UUID; файловые системы FAT и NTFS не поддерживают верный UUID, но перечислены в /dev/disk/by-uuid с уникальным идентификатором:

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 2d781b26-0285-421a-b9d0-d4a0d3b55680 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 31f8eb0d-612b-4805-835e-0e6d8b8c5591 -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 3FC2-3DDB -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 5090093f-e023-4a93-b2b6-8a9568dd23dc -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 912c7844-5430-4eea-b55c-e23f8959a8ee -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 B0DC1977DC193954 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 bae98338-ec29-4beb-aacf-107e44599b2e -> ../../sdb2

Как видите, разделы файловыми системами FAT и NTSF имеют короткие имена (sda6 и sdb1), но всё равно показаны в uuid. Смысл 32-х разрядных base-62 строк состоит в том, чтобы сделать вероятность совпадения идентификаторов ничтожно малой; если всё случается, что sda1 и sda2 имеют одинаковый UUID система может не загрузиться (или использовать последний найденный идентификатор как основной).

Посредством Меток (Labels)

Практически каждый тип файловой системы может иметь метку. Разделы с меткой находят в каталоге /dev/disk/by-label:

$ ls -l /dev/disk/by-label
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data -> ../../sdb2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 fat -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 home -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 root -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 swap -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 windows -> ../../sdb1

Так как в качестве меток используются повторяющиеся имена, нужно быть предельно внимательным, чтобы избежать путаницы; также учитывать тот факт, что при перезагрузке устройства USB/firewire подключены могут быть по-разному.

Обозначение метки может изменяться следующими командами:

Type
Command Notes

EXT3:

e2label /dev/XXX <label>
также верно и для EXT2/EXT4

FAT/VFAT:

dosfslabel /dev/XXX <label>
bug #506786 в Lenny; или mlabelв утилитах mtools

JFS:

jfs_tune -L <label> /dev/XXX

NTFS:

ntfslabel /dev/XXX <label>
или изменить из-под Windows

ReiserFS:

reiserfstune -l <label> /dev/XXX

swap:

mkswap -L <label> /dev/XXX
также см. ниже для swapoff /swaponкоманд

XFS:

xfs_admin -L <label> /dev/XXX


Посредством Hardware ID

by-id создает уникальное имя на основе апаратного серийного номера. Они предназначены чтобы быть неизменными для данной аппаратной конфигурации.

#  ls -l /dev/disk/by-id/
итого 0
drwxr-xr-x 2 root root 440 фев  1 17:19 .
drwxr-xr-x 5 root root 100 ноя 24 20:22 ..
lrwxrwxrwx 1 root root   9 фев  1 17:19 ata-SAMSUNG_HD204UI_S2H7J9FZC03394 -> ../../sdb
lrwxrwxrwx 1 root root  10 фев  1 17:19 ata-SAMSUNG_HD204UI_S2H7J9FZC03394-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  16 ноя 21 01:17 cciss-3600508b10010463956563832464f0003 -> ../../cciss/c0d1
lrwxrwxrwx 1 root root  18 фев  1 17:14 cciss-3600508b10010463956563832464f0003-part1 -> ../../cciss/c0d1p1
lrwxrwxrwx 1 root root  18 ноя 21 01:17 cciss-3600508b10010463956563832464f0003-part2 -> ../../cciss/c0d1p2
lrwxrwxrwx 1 root root  18 ноя 21 01:17 cciss-3600508b10010463956563832464f0003-part5 -> ../../cciss/c0d1p5
lrwxrwxrwx 1 root root  16 дек 20 03:44 cciss-3600508b10010463956563832464f0005 -> ../../cciss/c0d0
lrwxrwxrwx 1 root root  18 ноя 21 01:17 cciss-3600508b10010463956563832464f0005-part1 -> ../../cciss/c0d0p1
lrwxrwxrwx 1 root root  18 ноя 21 01:17 cciss-3600508b10010463956563832464f0005-part2 -> ../../cciss/c0d0p2
lrwxrwxrwx 1 root root  18 ноя 21 01:17 cciss-3600508b10010463956563832464f0005-part5 -> ../../cciss/c0d0p5
lrwxrwxrwx 1 root root   9 фев  1 17:19 wwn-0x50024e9203f46cb7 -> ../../sdb
lrwxrwxrwx 1 root root  10 фев  1 17:19 wwn-0x50024e9203f46cb7-part1 -> ../../sdb1
lrwxrwxrwx 1 root root  16 ноя 21 01:17 wwn-0x600508b10010463956563832464f0003 -> ../../cciss/c0d1
lrwxrwxrwx 1 root root  18 фев  1 17:14 wwn-0x600508b10010463956563832464f0003-part1 -> ../../cciss/c0d1p1
lrwxrwxrwx 1 root root  18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0003-part2 -> ../../cciss/c0d1p2
lrwxrwxrwx 1 root root  18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0003-part5 -> ../../cciss/c0d1p5
lrwxrwxrwx 1 root root  16 дек 20 03:44 wwn-0x600508b10010463956563832464f0005 -> ../../cciss/c0d0
lrwxrwxrwx 1 root root  18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0005-part1 -> ../../cciss/c0d0p1
lrwxrwxrwx 1 root root  18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0005-part2 -> ../../cciss/c0d0p2
lrwxrwxrwx 1 root root  18 ноя 21 01:17 wwn-0x600508b10010463956563832464f0005-part5 -> ../../cciss/c0d0p5

Посредством sysfs Paths

by-path создает единственное обозначение на основе самого короткого физического пути (по sysfs). Оба вышеупомянутых метода содержат строки символов, которые снимают показания, к какой подсистеме они принадлежат, и таким образом не подходят, для решения выше упомянутых проблем и здесь в дальнейшем не обсуждаются.

Подготовка для постоянных именований

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

$ ls -lR /dev/disk

также есть более удобная команда blkid (которая находится в /sbin, но не требует привилегий root) дающая более удобный вывод:

$ /sbin/blkid
/dev/sda1: LABEL=Root UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3"
/dev/sda2: TYPE="swap"
/dev/sda3: LABEL=Home UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3"

Как видно, раздел swap здесь не имеет UUID или label; инсталлер Debian Lenny использует версию partman которая не делает раздел swap. Тем не менее, разделу подкачки может быть дано "постоянное имя" через mkswap.

Назначение постоянных имен для раздела Swap Сначала, необходимо чётко убедиться в том, что раздел подкачки определён верно (см. /proc/swaps)! Затем (от имени суперпользователя - root) отмонтировать существующий раздел подкачки, пересоздать его (тут можно добавить также и метку), и вновь примонтировать/запустить, примерно таким образом:

# swapoff /dev/sda2
# mkswap -L Swap /dev/sda2
Setting up swapspace version 1, size = 1998737 kB
LABEL=Swap, UUID=7cdfeb21-613b-4588-abb5-9d4049854e9a
# swapon /dev/sda2
Результат можно проверить от имени обычного пользователя:

$ /sbin/blkid
/dev/sda1: LABEL=Root UUID="87f2b245-6ab3-4021-bf07-d069b4d387a1" TYPE="ext3"
/dev/sda2: LABEL=Swap UUID="7cdfeb21-613b-4588-abb5-9d4049854e9a" TYPE="swap"
/dev/sda3: LABEL=Home UUID="a6f7a63f-71ac-4361-b49a-39d62b06f18a" TYPE="ext3"
$ free
             total       used       free     shared    buffers     cached
Mem:      33017956     298700   32719256          0      17060     148668
-/+ buffers/cache:     132972   32884984
Swap:      1951888          0    1951888

Использование постоянных именований

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

В fstab Включение постоянных имён в /etc/fstab легко: для каждой файловой системы в файле fstab нужно заменить имя устройства в первом столбце (где указано что-то вроде /dev/sda7) на постоянное имя. Это делается путём замены соответствующих путей в /dev/disk, примерно так:

/dev/disk/by-label/home

или

/dev/disk/by-uuid/31f8eb0d-612b-4805-835e-0e6d8b8c5591

Тем не менее, вместо задания явных путей в /dev/disk, обычно рекомендуется использовать ключевые слова LABEL=<label> или UUID=<uuid> для монтирования файловых систем, например:

LABEL=home

или

UUID=31f8eb0d-612b-4805-835e-0e6d8b8c5591

Dev - Устройства

$
0
0

Dev - Устройства

Просмотр HDD/SSD устройств

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:00232,9G  0 disk
├─sda1   8:10223,4G  0 part /├─sda2   8:20     1K  0 part
└─sda5   8:509,5G  0 part [SWAP]
sdd      8:4801,8T  0 disk
sde      8:640465,8G  0 disk

Список дисков с указанием UUID

$ blkid
/dev/sda1: UUID="dea7b137-e3a0-48fa-8363-5f654ed6d6f5"TYPE="ext4"PARTUUID="9e41fd98-01"/dev/sda5: UUID="d7307b2f-6903-4193-8281-02c17d6aa42a"TYPE="swap"PARTUUID="9e41fd98-05"/dev/sdd: UUID="833ad2a2-23ba-43ea-96bf-f5161b717034"TYPE="ext4"/dev/sde: UUID="929a5b27-8dea-47b5-b6c9-ec90617b6ef2"TYPE="ext4"

fstab

Установка поддержки NTFS

$
0
0

Установка поддержки NTFS

Чтение

  • mount -t ntfs /dev/sdb1 /mnt/ntfs

or

  • mount -t vfat /dev/sdb1 /mnt/ntfs

Чтение/Запись

  • apt-get install fuse ntfs-3g
  • mount -t ntfs-3g /dev/sdc1 /mnt/disk2

mount

$
0
0

mount

  • mount -o remount,rw /

Ускорение файловой системы EXT2 - EXT4

Монтирование tmpfs

/etc/fstab

# Пример
none    /dev/shm   tmpfs    defaults             0       0
tmpfs    /tmp   tmpfs    defaults             0       0
chromium-cache   /home/USER/.cache/chromium   tmpfs    defaults,noatime,mode=1777,size=500M    0    0

Программное обеспечение - [U]

$
0
0

Программное обеспечение

0-9

A

B

C

D

  • dpkg - Утилита установки пакетов
  • Dovecot - Postfix + Dovecot + MYSQL (IMAP/POP3-сервер)
  • dovecot_exim - Exim4 + Dovecot + MYSQL
  • du - Вычисляем занимаемое место на диске
  • DD - Клонирование диска/партиций
  • dhclient - Dhclient
  • Deluge - Torrent client
  • Dialog - Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию.

E

F

G

H

I

  • iotop - то же что и обычный top по CPU, но только по диску
  • LVM - Изменения размера логических томов LVM
  • IpSet - Блокируем много IP адресов с помощью ipset и iptables
  • iftop - display bandwidth usage on an interface
  • IPTraf - IP Network Monitoring Software
  • fail2ban - блокирует по IP найденных нарушителей

J

K

  • KVM - Виртуализация на Linux

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

mount - Монтирование файловой системы

$
0
0

mount - Монтирование файловой системы

mount rw

  • mount -o remount,rw /

Ускорение файловой системы EXT2 - EXT4

  • В 4 секции /etc/fstab ввести ,noatime,nodiratime

Монтирование tmpfs

/etc/fstab

# Пример
none    /dev/shm   tmpfs    defaults             0       0
tmpfs    /tmp   tmpfs    defaults             0       0
chromium-cache   /home/USER/.cache/chromium   tmpfs    defaults,noatime,mode=1777,size=500M    0    0

Remote mount / Удаленое монтирование

mount -tfuse sshfs#root@hosting.reklamu.ru:tmp ./test
apt-get install sshfs
mount -tsshfd sshfs#root@hosting.reklamu.ru:tmp ./test
mount -tsshfs sshfs#root@hosting.reklamu.ru:tmp ./test
mount sshfs#root@hosting.reklamu.ru:tmp ./test

Монтирование tmpfs

/etc/fstab

# Пример
none    /dev/shm   tmpfs    defaults             0       0
tmpfs    /tmp   tmpfs    defaults             0       0
chromium-cache   /home/USER/.cache/chromium   tmpfs    defaults,noatime,mode=1777,size=500M    0    0

Размонтирование

umount - размонтирование раздела

$
0
0

umount - размонтирование раздела

Принудительно размонтировать раздел

При возникновении ошибки umount — device is busy

$ umount-l/mnt/disk

Создание загрузочной USB Flash на Linux - [2-й Способ]

$
0
0

Создание загрузочной USB Flash на Linux

1-й Способ

  • zcat boot.img.gz > /dev/sdX - соответствует выбранной архитектуре
  • mount /dev/sdX /mnt
  • cp <path/to/iso/image> /mnt - выбранный дистрибутив (рекомендуется брать netinstall)
  • umount /dev/sdX
где X - это номер устройства

2-й Способ

$ hdiutil convert /path/to/downloaded.iso -format UDRW -o/path/to/newimage
$ diskutil list
$ diskutil unmountDisk /dev/diskX
$ sudoddif=/path/to/newimage.dmg of=/dev/diskN bs=1m

3-й Способ

Или воспользоваться unetbootin

Node.JS - [Debian]

$
0
0

Node.JS

Установка nodejs + npm

$ npm install will install both "dependencies" and "devDependencies"
$ npm install--production will only install"dependencies"
$ npm install--dev will only install"devDependencies"

Debian

$ curl -sL https://deb.nodesource.com/setup |bash -
$ curl -L https://npmjs.com/install.sh |sh

Пакетный менеджер npm

с репозитория

Исправление ошибок

  • installing from npm fails
npm config set registry http://registry.npmjs.org/

Демонизируем Node.Js / Forever

forever - модуль разработанный nodejitsu, - нужен для того, чтобы запускать приложения в виде демона (режиме постоянного выполнения - отсюда и название модуля). Если приложение по каким-то причинам прекращает свое выполнение, то forever его перезапускает. Также, данный модуль имеет API, так что вы можете использовать его в коде своих проектов.

forver может быть установлен при помощи npm:

sudo npm -g install forever

Отладка

Документация

Библиотеки

Парсинг / Web console (webkit)

Статьи

Видео

Ссылки

Проекты

Автоматический запуск в linux

$
0
0

Автоматический запуск в linux

UpStart

/etc/init содержит конфигурационные файлы для супервизора сервисов "UpStart".

Команды

$ initctl list
$ initctl start {SERVICENAME}
$ initctl stop {SERVICENAME}

System-V

/etc/init.d содержит конфигурационные файлы для супервизора сервисов "Systemv". /ect/rc.[n] - содержит ссылки на конфигурационные скрипты, где n - уровень запуска

  1. Runlevel 0 is halt. - Остановка системы
  2. Runlevel 1 is single-user. - Однопользовательский режим
  3. Runlevels 2-5 are multi-user. - Многопользовательский режим
  4. Runlevel 6 is reboot. - Перезагрузка

/etc/inittab - содержит инструкции запуска /etc/init.d/rc.local - Запускает скрипты из /etc/rc.local

Команды

$ ls/etc/init.d/
$ /etc/init.d/{SERVICENAME} start
$ /etc/init.d/{SERVICENAME} stop

Systemd

Команды

$ systemctl list-unit-files
$ systemctl start {SERVICENAME}
$ systemctl stop {SERVICENAME}
$ systemctl enable{SERVICENAME}
$ systemctl disable {SERVICENAME}

Runit

Systemd

$
0
0

Systemd

Примеры

Portainer

[Unit]Description=Portainer service with docker-compose
Requires=docker.service
After=docker.service
 
[Service]Restart=always
 
WorkingDirectory=/var/lib/jenkins/workspace/portainer/ 
# Remove old containers, network and volumesExecStartPre=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml down -vExecStartPre=-/bin/bash-c'docker network rm docker_jfrog_net'ExecStartPre=-/bin/bash-c'docker ps -aqf "name=artifactory" | xargs docker rm' 
# Compose upExecStart=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml up
 
# Compose down, remove containersExecStop=/usr/bin/docker-compose -f/var/lib/jenkins/workspace/portainer/docker-compose.yml down
 
[Install]WantedBy=multi-user.target

Удаление Systemd из Debian 8 - [Удаление Systemd]

$
0
0

Удаление Systemd из Debian 8

Устанавливаем SysV init

$ apt-get install sysvinit-core sysvinit-utils
$ cp /usr/share/sysvinit/inittab /etc/inittab

Удаление Systemd

$ apt-get remove --purge --auto-remove systemd
$ echo -e 'Package: systemd\nPin: release *\nPin-Priority: -1' > /etc/apt/preferences.d/systemd
$ echo -e '\n\nPackage: *systemd*\nPin: release *\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd
$ echo -e '\nPackage: systemd:amd64\nPin: release *\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd
$ echo -e '\nPackage: systemd:i386\nPin: release *\nPin-Priority: -1' >> /etc/apt/preferences.d/systemd

Запуск PHP скрипта с использованием nohup

$
0
0

Запуск PHP скрипта с использованием nohup

Debian / Ubuntu

sysv-init

nano /etc/init.d/price_parser
chmod +x /etc/init.d/price_parser

#!/bin/sh### BEGIN INIT INFO# Provides:          price_parser# Required-Start:    $remote_fs $syslog# Required-Stop:     $remote_fs $syslog# Default-Start:     2 3 4 5# Default-Stop:      0 1 6# Short-Description: Stop/start price_parser### END INIT INFO 
# Author: Mirocow <mr.mirocow@gmail.com> 
. /lib/init/vars.sh
. /lib/lsb/init-functions
 
PNAME="price_parser"PPATH="/home/some/path/to/app"SCRIPT="/usr/bin/php ./yii some/cotroller/action"PIDFILE="/var/run/${PNAME}.pid"LOCKFILE="/var/lock/${PNAME}" 
RETVAL=0 
start(){echo-n"Starting $PNAME : "if[-s${PIDFILE}]; thenRETVAL=1echo-n"Already running !"echoelsecd${PPATH}&&nohup${SCRIPT}>/dev/null 2>&1&RETVAL=$?PID=$![$RETVAL-eq0]&&touch${LOCKFILE}echoecho$PID>${PIDFILE}fi} 
stop(){if[-s${PIDFILE}]; thenecho-n"Shutting down ${PNAME} : "kill-9`cat${PIDFILE}`RETVAL="$?"if[$RETVAL-eq0]; thenrm-f${LOCKFILE}rm-f${PIDFILE}fielseRETVAL=1echo-n"Already stoped !"echofireturn"$RETVAL"} 
restart(){echo-n"Restarting ${PNAME} : "
    stop
    sleep2
    start
} 
case"$1"in
    start)
        start
    ;;
    stop)
        stop
    ;;
    status)
        status ${PNAME};;
    restart)
        restart
    ;;*)echo"Usage: $0 {start|stop|status|restart}";;esac 
exit0

Upstart

Умерла

systemd

Type

  • Type=simple (по умолчанию): systemd предполагает, что служба будет запущена незамедлительно. Процесс при этом не должен разветвляться. Не используйте этот тип, если другие службы зависят от очередности при запуске данной службы. Исключение - активация сокета
  • Type=forking: systemd предполагает, что служба запускается однократно и процесс разветвляется с завершением родительского процесса. Используйте данный тип для запуска классических демонов за исключением тех случаев, когда, как вам известно, в таком поведении процесса нет необходимости. Вам следует также определить PIDFile=, чтобы systemd могла отслеживать основной процесс
  • Type=oneshot: полезен для скриптов, которые выполняют одно задание и завершаются. Вам может понадобиться также установить параметр RemainAfterExit=yes, чтобы systemd по-прежнему считала процесс активным, даже после его завершения
  • Type=notify: идентичен параметру Type=simple, но с той оговоркой, что демон пошлет systemd сигнал о своей готовности. Эталонная реализация данного уведомления представлена в libsystemd-daemon.so
  • Type=dbus: сервис считается находящимся в состоянии готовности, когда определенное BusName появляется в системной шине DBus
  • Type=idle: systemd will delay execution of the service binary until all jobs are dispatched. Кроме того, поведение очень похоже на Type=simple.

Расположения

  • /usr/lib/systemd/system - системные юниты, поставляемые обычно вместе с приложениями;
  • /run/systemd/system - динамически создаваемые юниты (т.е. на лету);
  • /etc/systemd/system - юниты и исправления, внесённые администратором

Запуск

  • service yii-some-listen status
  • service yii-some-listen stop
  • service yii-some-listen start
  • service yii-some-listen restart

Пример

nano /etc/systemd/system/yii-some-listen.service

[Unit]Description=Yii some-listen
After=mysql.service apache2.service
Requires=
 
[Service]PIDFile=/var/run/yii-some-listen.pid
WorkingDirectory=/home/some/path/to/app
ExecStart=nohup/usr/bin/php /home/some/path/to/app/yii some/cotroller/action start >/dev/null 2>&1ExecStop=/usr/bin/php /home/some/path/to/app/yii some/cotroller/action stop >/dev/null 2>&1#Restart=always#RestartSec=5RemainAfterExit=yesUser=user
Group=www-data
 
[Install]WantedBy=multi-user.target
Alias=yii-some-listen.service

Or usep PID file

nano /etc/systemd/system/yii-some-listen.service

[Unit]Description=Yii some-listen
After=mysql.service apache2.service
Requires=
 
[Service]PIDFile=/var/run/yii-some-listen.pid
WorkingDirectory=/home/some/path/to/app
ExecStart=nohup/usr/bin/php /home/some/path/to/app/yii some/cotroller/action start >/dev/null 2>&1ExecStop=pkill -9-F/var/run/yii-some-listen.pid
#Restart=always#RestartSec=5RemainAfterExit=yesUser=user
Group=www-data
 
[Install]WantedBy=multi-user.target
Alias=yii-some-listen.service

Mudar

Epoch

CentOS / Fedora

 

Как загружается Linux

$
0
0

Как загружается Linux

Когда я осваивал Linux, мне было очень интересно что происходит при загрузке системы. Попытка разобраться в процессе загрузки привела меня в исходники загрузочных скриптов (/etc/inittab, /etc/rc*, /etc/init.d/*, ...) и их конфигов (/etc/sysconfig/*, /etc/cond.f/*, ...). Надо отметить серьёзные размеры и сложность этих скриптов - чтобы в них разобраться потребовалось немало времени. Но я в те времена искренне верил, что загрузка это сложный процесс, и что размеры и сложность загрузочных скриптов вполне оправданы. Когда меня окончательно достал RedHat, я решил собрать свой дистрибутив на базе LFS. Для своего дистрибутива пришлось самостоятельно разрабатывать загрузочные скрипты, и тут-то выяснилась правда: ничего сложного в процессе загрузки нет! Проработав 2.5 года на своём дистрибутиве (PoWeR Linux) я мигрировал на Gentoo (на качественную поддержку своего просто не хватало времени). Изучив загрузочные скрипты Gentoo я пришёл в ужас! Их размеры и сложность были ещё больше, чем у старого RedHat. После детального изучения стала ясна причина: один и тот же комплект загрузочных скриптов использовался и для LiveCD и для обычной системы - такой себе универсальный монстрик.
Так что при переходе на Gentoo я решил взять загрузочные скрипты из PoWeR Linux а стандартные Gentoo-шные не использовать (т.е. у меня от Gentoo используется только portage). И с тех пор ещё 4 года эти скрипты работают у меня на домашней рабочей станции и кучке удалённых серверов.

Характеристики

Размер скриптов (всех вместе) - 316 строк, 7.5KB:

$ wc 1 3 lib.sh 
 199  703 5152 1
  89  272 1671 3
  28  118  770 lib.sh
 316 1093 7593 итого

Минусы:

Всё в одном файле - при обновлении приложений практически невозможно автоматически обновить код инициализации этого приложения. Например, когда обновляется ALSA, то пакет может просто заменить файлы /etc/init.d/alsasound, /etc/conf.d/alsasound, /etc/modules.d/alsa. А в моём случае админу нужно будет ручками править /etc/runit/1. Нет поддержки всего на свете. Например, я не использую RAID и LVM - так что команды для их инициализации вам нужно будет добавлять самостоятельно. Вам нужно будет самостоятельно поддерживать эти скрипты. Я обычно при обновлении Gentoo поглядываю на изменения в (неиспользуемых мной) /etc/init.d/* скриптах и если меняется что-то важное - обновляю свои скрипты. Но, на практике, необходимость в таких изменениях возникает примерно раз в два года.

Плюсы:

Всё в одном небольшом файле - нет необходимости разыскивать по куче скриптов и их конфигов где настраивается то, что вам понадобилось; можно быстро и легко увидеть все базовые настройки системы.

Есть поддержка всего, что мне и моим друзьям за 6.5 лет было нужно на домашних компах и серверах.

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

Ускоряют загрузку системы. У меня домашняя машина грузится в single user mode (6 консолек с getty, syslog, klog, gpm) за 16.5 секунд. Я экспериментировал с параллельной загрузкой в стиле initng - эффект скорее отрицательный за счёт усложнения скриптов и порождения лишних процессов. Initng хорош для ускорения загрузки традиционных, раздутых скриптов, выполняющих множество ненужных действий, а в моём случае ускорять просто нечего. :) Не смотря на малый размер эти скрипты не только надёжно и быстро грузят систему, но и поддерживают несколько фич облегчающих жизнь админу:

Выполняемые команды сгруппированы в блоки по типам. В процессе загрузки выводятся названия блоков, с информацией были ли ошибки при выполнении команд блока. Если при выполнении блока команд были ошибки - выводится детальная информация по командам этого блока и возникшим ошибкам, после чего система ждёт 5 секунд нажатия любой кнопки для запуска bash и ручного исправления ошибок. После выхода из bash предлагается либо продолжить загрузку либо перегрузиться. Если ничего не нажимать, загрузка продолжится. Логи всего, что выводится при загрузке и отключении на экран (названия блоков команд и информация по возникающим ошибкам) сохраняются в файлах /var/log/boot, /var/log/shutdown. Благодаря этому можно на удалённых серверах посмотреть, как проходила загрузка/отключение. Пример сообщений выводимых при загрузке

 + UDEV
 + MODULES
 + SYSCTL
 + MTAB
 - MOUNTALL
++ swapon -a
++ false
EXIT CODE: 1
++ mount -at nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm
... press any key in 5 seconds to open shell ...
 + CLEANTMP
 + RANDOMSEED
 + HWCLOCK
 + SENSORS
 + LOADKEYS
 + SOUND
 + HOST_NAME
 + ENVUPDATE
 + NETWORK
 + RUNIT
 + DMESG

Runit

Для загрузки я вместо SysV init использую Runit. Runit не поддерживает /etc/inittab, вместо этого в нём используется простая схема: При загрузке запускается скрипт /etc/runit/1. Его задача полностью проинициализировать систему. По завершению скрипта /etc/runit/1 запускается скрипт /etc/runit/2, который должен запустить все необходимые сервисы (syslog, getty, ssh, apache, ...). Когда пользователь останавливает/перегружает систему запускается скрипт /etc/runit/3 который должен подготовить систему к отключению (завершить все процессы, отмонтировать диски, etc.). При желании можно настроить SysVinit для работы в том же стиле: Запуск /etc/runit/{1,2,3} из SysVinit: /etc/inittab

id:3:initdefault:
rc::bootwait:/etc/runit/1
l0:0:wait:/bin/sh -c '/etc/runit/3; exec /sbin/halt'
l3:3:once:/etc/runit/2
l6:6:wait:/bin/sh -c '/etc/runit/3; exec /sbin/reboot'
ca:12345:ctrlaltdel:/sbin/shutdown -r now

Сервисы Для запуска всех сервисов (getty, syslog, mysql, etc.) я использую тот же runit (по сути это просто немного улучшенный вариант daemontools). Но это отдельная большая тема, так что просто уточню что в этой статье скриптов для запуска сервисов нет, здесь только инициализация/отключение системы.

Исходники Вспомогательные функции: /etc/runit/lib.sh

#!/bin/bash
startlog() { exec 3>&1 4>&2 1> >(tee $1) 2>&1; }
stoplog() { exec 1>&3- 2>&4-; }

wanna() {
    echo -e "\a... press any key in $2 seconds to $1 ..."
    read -t $2 -n 1 -s </dev/console
}
emergency() {
    if wanna "open shell" 5; then
        bash --norc </dev/console &>/dev/console
        if [[ "$0" == "/etc/runit/1" ]] && wanna "reboot now" 3; then
            exit 100
        fi
    fi
}

trace() { trap 'ERR=$?' ERR; set -Ex; $1 2>&1; set +Ex; trap ERR; } 2>&-
try() {
    local output=$( trace $1 )
    if [[ "$output" =~ "ERR=" ]]; then
        echo -e "\e[1m\e[31m - \e[37m$1\e[0m"
        echo "$output" | sed $'s/.*ERR=\(.*\)/\a\033[36mEXIT CODE: \\1\033[0m/g'
        emergency
    else
        echo -e "\e[1m\e[32m + \e[37m$1\e[0m"
    fi
}

Startup: /etc/runit/1

#!/bin/bash

CONSOLE() {
    dmesg -n 1
}

INIT() {
    mount -n -t proc  none /proc
    mount -n -t sysfs none /sys
    mount -n -t ramfs none /dev
    mknod -m 660 /dev/console c 5 1
    mknod -m 660 /dev/null c 1 3
    ln -snf /proc/self/fd /dev/fd   # needed for startlog in /etc/runit/lib.sh
}

UDEV() {
    udevstart

    ### Standard add-on
    ln -snf /proc/self/fd/0 /dev/stdin
    ln -snf /proc/self/fd/1 /dev/stdout
    ln -snf /proc/self/fd/2 /dev/stderr
    ln -snf /proc/kcore /dev/core
    mkdir /dev/pts
    mkdir /dev/shm
    mount -n -t devpts -o gid=5,mode=0620 none /dev/pts

    ### My custom add-on
    ln -s vcs /dev/vcs0
    ln -s dvd2 /dev/dvd
    ln -s cdrom2 /dev/cdrom
    mkdir /dev/lirc
    mknod /dev/lirc/0 c 61 0
    mknod /dev/vmmon c 10 165
    mknod /dev/sdb  b 8  16
    mknod /dev/sdb1 b 8  17
}

MODULES() {
    update-modules

    ### Network
    modprobe -q skge
    modprobe -q 8139too media=56 # 1=10half 17=10full 56=100full
    modprobe -q sky2

    ### Lirc
    setserial /dev/ttyS1 uart none
    modprobe -q lirc_serial io=0x2f8 irq=3 # io=0x3f8 irq=4

    ### VMware
    modprobe -q vmmon
    modprobe -q vmnet
}

SYSCTL() {
    sysctl -p /etc/sysctl.conf
}

MTAB() {
    # Adding already-mounted fs to /etc/mtab
    >/etc/mtab
    mount -f /
    awk '$2 != "/" {print}' /proc/mounts >> /etc/mtab
    for i in $(cut -d ' ' -f 2 </etc/mtab); do mount -f -o remount "$i"; done
}

MOUNTALL() {
    swapon -a
    mount -at nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm
}

CLEANTMP() {
    # Cleaning up temporary files and locks, prepare utmp & wtmp
    rm -rf /var/lib/net-scripts/state/*
    rm -rf /var/run/console.lock /var/run/console/* # reset pam_console
    find /var/lock -type f -print0 | xargs -0 rm -f --
    find /var/run ! -type d ! -name utmp ! -name innd.pid \
        ! -name random-seed -exec rm -f -- {} \;
    > /var/lock/.keep
    rm -f /tmp/.X*-lock /tmp/esrv* /tmp/kio* /tmp/jpsock.* /tmp/.fam* /tmp/iceauth.* /tmp/xauth.*
    rm -rf /tmp/.esd* /tmp/orbit-* /tmp/ssh-* /tmp/ksocket-* /tmp/.*-unix
    rm -rf /tmp/.{ICE,X11}-unix
    mkdir -p /tmp/.{ICE,X11}-unix
    chmod 1777 /tmp/.{ICE,X11}-unix
}

RANDOMSEED() {
    # Restoring random-seed.
    [ -f /var/run/random-seed ] && cat /var/run/random-seed >>/dev/urandom
    rm -f /var/run/random-seed
    ( umask 077 ; dd if=/dev/urandom of=/var/run/random-seed count=1 2>/dev/null )
}

HWCLOCK() {
    if [ ! -f /etc/adjtime ]; then echo "0.0 0 0.0" > /etc/adjtime ; fi
    hwclock --adjust --localtime
    hwclock --hctosys --localtime
}

SENSORS() {
    sensors -s
}

LOADKEYS() {
    # Commands for TTY initialization like 'setfont' and 'echo -ne "\033(K"'
    # shouldn't be executed in /etc/runit/1 because:
    # - which TTYs should be initialized may depend on current runlevel
    # - if TTY state become broken (for ex. after 'cat /dev/urandom'),
    #   then after logout and login TTY state should be reinitialized
    # these commands should be executed before each getty invocation instead.
    loadkeys koi2   # -q windowkeys
}

SOUND() {
    alsactl -f /etc/asound.state restore
}

HOST_NAME() {
    hostname home
    echo "HOSTNAME='$(hostname)'" >/etc/env.d/01hostname
}

ENVUPDATE() {
    env-update.sh -u
}

NETWORK() {
    ifconfig lo 127.0.0.1 up
    route add -net 127.0.0.0 netmask 255.0.0.0 gw 127.0.0.1 dev lo
    iptables-restore </etc/iptables
    ifconfig eth2 192.168.2.1 broadcast 192.168.2.255 netmask 255.255.255.0
    ifconfig eth2:0 192.168.2.254
    ifconfig eth1 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0
    ifconfig eth0 192.168.10.2 broadcast 192.168.10.255 netmask 255.255.255.0
    #route add default gw 192.168.1.1 dev eth1
}

RUNIT() {
    # Set default action (shutdown or not) if Ctrl+Alt+Del pressed,
    # but /etc/runit/ctrlaltdel don't setup /etc/runit/stopit.
    touch /etc/runit/stopit
    chmod 100 /etc/runit/stopit
    
    # Set default action on shutdown (halt or reboot) if:
    # - /etc/runit/1 crash or exit 100
    # - /etc/runit/2 exit non 111
    # - Ctrl+Alt+Del pressed, but /etc/runit/ctrlaltdel don't setup /etc/runit/reboot
    touch /etc/runit/reboot
    chmod 100 /etc/runit/reboot
    
    # Set runlevel to:
    # - single      if kernel has param: S
    # - RUNLEVELNAME    if kernel has param: runlevel=RUNLEVELNAME
    # - default     if kernel has no params or unable to set requested runlevel
    grep -q '\(^\| \)S\( \|$\)' /proc/cmdline && runlevel='single'
    runsvchdir ${runlevel:-default} || runsvchdir default
}

SEND_MAIL() {
    echo -e "To: root\nSubject: reboot at $(date)" | sendmail -t
}

DMESG() {
    # Create an 'after-boot' dmesg log
    touch /var/log/dmesg
    chmod 640 /var/log/dmesg
    dmesg > /var/log/dmesg
}


PATH=/sbin:/usr/sbin:/bin:/usr/bin
trap ':' INT QUIT TSTP
. /etc/runit/lib.sh

try CONSOLE
try INIT
startlog /var/log/boot
try UDEV
try MODULES
try SYSCTL
try MTAB
try MOUNTALL
try CLEANTMP
try RANDOMSEED
try HWCLOCK
try SENSORS
try LOADKEYS
try SOUND
try HOST_NAME
try ENVUPDATE
try NETWORK
try RUNIT
#try SEND_MAIL
try DMESG
stoplog

# Select next stage (exit 0 for stage 2, exit 100 for stage 3):
exit 0

Shutdown: /etc/runit/3

#!/bin/bash

CONSOLE() {
    chvt 1
    # Required in case getty was last process in this console and it leave
    # console in broken state (\n work as <LF> without <CR>).
    { stty sane ; echo ; } >/dev/console
}

TERM() {
    # Give a chance for all processes for clean exit.
    # This also will kill all 'runsvdir' and signal all 'runsv' to exit.
    killall5 -15
}

HWCLOCK() {
    hwclock --systohc --localtime
}

SERVICES() {
    sv force-stop /var/service/* &>/dev/null || :
}

SOUND() {
    alsactl -f /etc/asound.state store
}

RANDOMSEED() {
    umask 077
    dd if=/dev/urandom of=/var/run/random-seed count=1 2>/dev/null
}

NETWORK() {
    for i in $(ifconfig | grep '^[^ ]' | cut -d ' ' -f 1 | tac); do
        ifconfig "$i" down
    done
}

WTMP() {
    /sbin/halt -w
}

KILL() {
    # Goodbye to everybody...
    killall5 -9
}

UMOUNTPSEUDO() {
    # Unmounting memory filesystems:
    umount -a -t tmpfs
    swapoff -a
    # Unmounting loopback devices first:
    for d in $(grep '^/dev/loop' /proc/mounts | cut -d ' ' -f 2 | tac); do
        eval "umount -d -r -f $'$d'"
    done
    umount -d -r -f -a -O bind 
}

UMOUNTHDD() {
    # Unmounting all filesystems:
    for d in $(egrep -v '^[^/]|^/dev/root' /proc/mounts | cut -d ' ' -f 2 | tac); do
        eval "umount -d -r -f $'$d'"
    done
}

FINI() {
    sync; sync
    mount -n -o remount,ro / || { sleep 1; mount -n -o remount,ro /; }
}


PATH=/sbin:/usr/sbin:/bin:/usr/bin
trap ':' INT QUIT TSTP
. /etc/runit/lib.sh

try CONSOLE
startlog /var/log/shutdown
try TERM
try HWCLOCK
try SERVICES
try SOUND
try RANDOMSEED
try NETWORK
try WTMP
try KILL
try UMOUNTPSEUDO
try UMOUNTHDD
stoplog
try FINI

Использование runit для своих сервисов

$
0
0

Использование runit для своих сервисов

Супервизор сервисов runitпозиционируется как замена стандартным скриптам инициализации Unix.

Но на практике оказалось, что runit идеален для управления сервисами безотносительно инициализации и т.п.

Введение

Супервизор берёт на себя такой функционал, как: превращение любого процесса в демон; логгирование вывода процесса и ротирование логов; запуск, остановка, рестарт, запрос состояния, управляющие скрипты для init.d; выключение и запуск сервисов автоматически при появлении новых сервисов в списке либо удалении старых из списка; возможность ведения нескольких независимых списков сервисов одновременно (например, для каждого пользователя отдельно и для системы в целом); удобный APIдля управления сервисами.

Для большинства операционных систем runit уже входит в репозитории пакетов (apt-get install runit). Кроме того, мы имеем уже готовый набор рецептов (ссылку придётся поправить, хабр сломал её) для популярных сервисов (nginx, apache etc.).

Далее рассмотрим стандартную схему runit (которая используется по умолчанию):

Демонизация

Каждый сервис описывается отдельным каталогом /etc/sv/<название сервиса>.

обычно достаточно иметь в этом каталоге исполняемый скрипт run вида

#!/bin/bash
exec 2>&1

exec your_running_command

Важно, чтобы your_running_command не демонизировала себя (не отсоединялась от стандартных потоков stdin, stdout, stderr).

Переадресация ошибок в стандартный вывод нужна для их логгирования. Выполняется логгирование, если в каталоге /etc/sv/<название сервиса>/log/ разместить файл run вида

#!/bin/bash
LOG_FOLDER=/var/log/<название сервиса>
mkdir -p $LOG_FOLDER
exec svlogd -tt $LOG_FOLDER

Сервисы, расположенные в каталоге /etc/sv/, не выполняются, пока ссылки на них не будут размещены в каталоге /etc/service/.

Как только вы сделаете ln -s /etc/sv/<название сервиса> /etc/service/<название сервиса>, сервис runsvdir увидит новый сервис, и запустит его. Более того, в случае остановки сервиса он будет автоматически перезапущен. Это даёт гораздо более быструю реакцию на остановку сервиса по сравнению с использованием сервисов мониторинга (god или monit).

Ротирование логов

При использовании svlogd логи размещаются в папке, которую Вы указали при её запуске. При этом текущий лог находится в файле current, и периодически выполняется ротирование логов в этой папке.

Управление

Запускать, останавливать, перезапускать сервисы можно с помощью команды sv (start|stop|restart...) <название сервиса>.

Кроме того, при запуске сервиса появится каталог /etc/service/<название сервиса>/supervise, в котором будут расположены очень полезные файлы и потоки:

pid — идентификатор процесса Unix;
stat — человеко-читаемое состояние сервиса
status — машинно-читаемое состояние процесса
control — поток управления

и так далее...

Можно отметить, что для остановки или запуска процесса достаточно открыть поток control на запись, и отправить туда символ d (от down) или u (от up) соответственно.

В стиле init.d

Нет ничего проще, чем поддержать управление в стиле init.d.

Просто делаем ln -s /usr/bin/sv /etc/init.d/<название сервиса>. sv поймёт, что его вызвали в стиле init.d, и готов будет принимать команды вида /etc/init.d/<название сервиса> start etc. Совсем немного магии, правда?

Настройка сервисов

В комплекте с runit поставляется утилита chpst, которая позволяет выполнять сервисы с дополнительной настройкой (ограничивать размер памяти, запускать из под определенного пользователя, с другим уровнем nice и т.д.).

Резюме

runit оказался настолько удобен и надёжен для организации своих сервисов, что мы стараемcя переводить все наши демоны под runit, заодно отказываясь от различного геморроя в виде пакетов демонизации а ля daemons gem. Также на части машин мы избавились от Monit (где требовался лишь мониторинг процессов).

Крайне рекомендую к прочтению комментарий от powerman, а также статью про Web-интерфейс к runit.

tcpdump - [tcpdump на unix socket]

$
0
0

tcpdump

Анализ

  • tcpdump -n -i eth0 -l | tee resolv.pcap
  • ssh root@HOST tcpdump -U -s0 -w - 'not port 22' | wireshark -k -i -

Фильтры

Фильтр Определение
host Служит для указания имени хоста
net Указывает IP подсети и сети
ip Служит для указания адреса протокола
src Выводит пакеты, которые были отправлены с указанного адреса
dst Выводит пакеты, которые были получены указанным адресом
arp, udp, tcp Фильтрация по одному из протоколов
port, portrange Отображает информацию, относящуюся к определенному порту, диапазону портов
and, or Служит для объединения нескольких фильтров в команде
less, greater Вывод пакетов меньше или больше указанного размера

Ключи

  • -i - Прослушиваемый интерфейс
  • port 9000, port 80
  • -A - выводить все пакеты в формате ASCII;
  • -c - закрыть программу после перехвата n-ого количества пакетов;
  • -C - при записи пакетов в файл, проверять размер файла, и если он больше заданного - создать новый файл;
  • -D - вывести список доступных сетевых интерфейсов;
  • -e - выводить информацию уровня соединения для каждого пакета, это может быть полезно, например, для отображения MAC адреса;
  • -f - выводить доменное имя для ip адресов;
  • -F - читать пакеты из файла, а не интерфейса;
  • -G - создавать новый файл лога через указанный промежуток времени;
  • -H - обнаруживать заголовки 802.11s;
  • -i - имя интерфейса для перехвата пакетов. Вы можете захватывать пакеты со всех интерфейсов, для этого укажите any;
  • -I - переключить интерфейс в режим монитора для захвата всех проходящих пакетов;
  • -j - установить формат Timestamp для записи пакетов;
  • -J - посмотреть доступные Timestamp;
  • -K - не проверять контрольные суммы пакетов;
  • -l - добавить поддержку прокрутки к выводу;
  • -L - вывести поддерживаемые протоколы подключения для интерфейса;
  • -n - не отображать доменные имена;
  • -r - прочитать пакеты из файла, созданного с помощью -w;
  • -v, -vv, -vvv - более подробный вывод;
  • -q - выводить минимум информации;
  • -w - записать вывод в файл;
  • -Z - пользователь, от имени которого будут создаваться файлы.

Примеры

Анализ DNS трафика

$ tcpdump -i eth0 -s0-w resolv.pcap port 53

Анализ трафика HTTP сервера

$ tcpdump -An  tcp port 80

Анализ PHP-FPM на 9000 порту

$ tcpdump -nAs20000-i lo tcp port 9000

Анализирует траффик удаленно через SSH с помощью Wireshark

$ ssh root@HOST tcpdump -U-s0-w - 'not port 22'| wireshark -k-i -

UDP трафик с и на IP xxx.xxx.xxx.251 destined for port 5060:

$ tcpdump -nnvvS udp and host xxx.xxx.xxx.251 and dst port 5060

Записать в файл mbill251 весь трафик с хоста xxx.xxx.xxx.251 за исключением трафика ssh

$ tcpdump -n-i eth0 host xxx.xxx.xxx.251 -vvv and not port 22-w/home/mbill251

Прослушать порт 5060 с ip xxx.xxx.xxx.251

$ tcpdump -i eth0 -n-s0 port 5060 and host xxx.xxx.xxx.251 -vvv-w/usr/local/tcpdumplog/log
$ tcpdump -i eth0 -n-s0 port 1720 and host xxx.xxx.xxx.251 -vvv-w/usr/local/tcpdumplog

H.323 сигналинг ловим с двух IP. В таком виде с двух IP отказалось снимать, может быть OR нужно было поставить.

$ tcpdump -i eth0 -n-s0 port 1720 and host xxx.xxx.164.1 and host xxx.xxx.107.1 -vvv-w/usr/local/tcpdumplog/logfile

перечислить доступные интерфейсы (которые можно прослушивать при помощи опции -i)

$ tcpdump -D

посмотреть трафик одного хоста:

$ tcpdump host 1.2.3.4

посмотреть трафик на порте:

$ tcpdump src port 80

посмотреть IP трафик на хост:

$ tcpdump ip host 1.2.3.4

посмотреть ARP трафик на хост:

$ tcpdump arp host 1.2.3.4

посмотреть RARP трафик на хост:

$ tcpdump rarp host 1.2.3.4

посмотреть трафик, кроме хоста unixserver:

$ tcpdump not host unixserver

посмотреть трафик на server1 и server2

$ tcpdump host server1 or host server2

посмотреть содержимое пакетов на интерфейсе tun0 на хост ya.ru

$ tcpdump -X-i tun0 host ya.ru

подсмотреть номера и пароли к icq

$ tcpdump -X-i fxp1 port aol

посмотреть содержимое пакетов на интерфейсе tun0 на хост ya.ru

посмотреть содержимое пакетов на интерфейсе tun0 на хост ya.ru, при этом прочитать из каждого пакета по 1500 байт и не преобразовывать IP в имя хоста

$ tcpdump -X-s1500-n-i tun0 host ya.ru

TCP traffic from 10.5.2.3 destined for port 3389:

$ tcpdump -nnvvS tcp and src 10.5.2.3 and dst port 3389

Traffic originating from the 192.168 network headed for the 10 or 172.16 networks:

$ tcpdump -nvX src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

Non-ICMP traffic destined for 192.168.0.2 from the 172.16 network:

$ tcpdump -nvvXSs1514 dst 192.168.0.2 and src net 172.16.0.0/16 and not icmp
$ tcpdump -nvvvpi rl0 tcp and not port ssh and not port smtp

tcpdump на unix socket

nano ./host.conf, затем перезапускаем nginx

fastcgi_pass unix:/tmp/php-fpm.sock.socat;

Запускаем снифер и смотрим вывод

$ socat -t100-x-v UNIX-LISTEN:/tmp/php-fpm.sock.socat,mode=777,reuseaddr,fork UNIX-CONNECT:/tmp/php-fpm.sock

Заголовок

$ tcpdump -i eth1 tcp and host 10.27.13.14 and port 6973-s0-vv-X-c1000

Ссылки

DBeaver - [Unknown table 'COLUMN_STATISTICS' in information_schema (1109)]

$
0
0

DBeaver

Universal Database Tool Free multi-platform database tool for developers, database administrators, analysts and all people who need to work with databases. Supports all popular databases: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Apache Hive,

Ошибки

Unknown table 'COLUMN_STATISTICS' in information_schema (1109)

SELECT COLUMN_NAME,                       JSON_EXTRACT(HISTOGRAM,'$."number-of-buckets-specified"')FROM information_schema.COLUMN_STATISTICS                WHERE SCHEMA_NAME ='skringo'ANDTABLE_NAME='ads';': Unknown table 'COLUMN_STATISTICS' in information_schema (1109)

Исправление:

--column-statistics=0

Samba 2/3/4 Установка и настройка - [Samba 2/3/4 Установка и настройка]

$
0
0

Samba 2/3/4 Установка и настройка

[global]

client min protocol = SMB2
client max protocol = SMB3

Конфигурация

Основные параметры

  • security = share - share, user, DOMAIN, SERVER, ADS
  • guest ok = Yes – для подключения к ресурсу не требуется пароль
  • guest account [UserName] – указанный пользователь UNIX будет получать доступ к ресурсу
  • guest only = Yes – разрешить только гостевые соединения к общему ресурсу
  • available = yes
  • read only = no
  • browsable = yes
  • public = yes
  • writable = yes – можно записывать и удалять
  • create mask = 0664 - с этими правами будут создаваться файлы
  • directory mask = 0755 - с этими правами будут создаваться директории
  • force user = site - действия будут происходить от этого пользователя
  • force group = www-data

Переменные

Переменная Описание
%U имя пользователя сессии (имя пользователя, которое клиент хотел, не обязательно то же самое как то, которое он получил).
%G имя основной группы для %U.
%h Интернет имя хоста где запущена Samba.
%m NetBIOS имя клиентской машины (очень полезно) Этот параметр недоступен когда Samba слушает на 445 порту, т.к. клиенты больше не посылают эту информацию. Если вы используете этот макрос, то в разделе [global] установите smb ports = 139. Это заставит Самбу не слушать на порту 445 и разрешит, включит функциональные возможности Samba 2.x.
%L NetBIOS имя сервера. Это позволяет вам изменять вашу конфигурацию под клиента. У вашего сервера может быть «Раздвоение личности».
%M интернет имя клиентской машины.
%R Выбранный уровень протокола после протокольных переговоров. Это может быть один из CORE, COREPLUS, LANMAN1, LANMAN2 or NT1.
%d процесс id текущего процесса сервера.
%a архитектура удаленной машины. В настоящее время признаются Samba (Samba), the Linux CIFS file system (CIFSFS), OS/2, (OS2), Windows for Workgroups (WfWg), Windows 9x/ME (Win95), Windows NT (WinNT), Windows 2000 (Win2K), Windows XP (WinXP), and Windows 2003 (Win2K3). Остальные определяются как UNKNOWN.
%I IP адрес клиентской машины.
%i Локальный IP адрес с которым соединился клиент.
%T текущая дата и время.
%D имя домена или рабочей группы для текущего пользователя.
%w Разделитель winbind
%$(envvar) значение переменной envar.

Следующие замены применяются только к некоторым вариантам конфигурации (только когда связь была установлена):

Переменная Описание
%S имя текушего сервиса для всех.
%P корневая директория текущего сервиса для всех.
%u имя пользователя для текущего сервися для всех.
%g основная группа для %u.
%H домашняя директория для пользователя %u.
%N имя вашего NIS сервера домашних директорий. Это получено с вашего NIS auto.map entry. Если вы не компилировали Samba c with-automount опцией, это значение принимается как %L.
%p путь к сервису домашних директорий, полученный с вашего NIS auto.map entry. NIS auto.map записи разделяются как %N:%p.

Проверка

$ testparm -S

WINDOWS (net use)

c:\ net use <driveletter>: \\<server>\<sharename> /USER:<domain>\<username> <password> /PERSISTENT:YES

Список

c:\ net use

Новые подключения будут запомнены.


Состояние   Локальный  Удаленный                 Сеть

-------------------------------------------------------------------------------
OK           K:        \\NAS\User                Microsoft Windows Network

Подключение

c:\ net use k: \\NAS\User
c:\ net use k: \\NAS\User /USER:mirocow pass

Отключение

c:\ net use k: /delete
c:\ net use \\NAS\User /delete

Ошибки

C:\Windows\system32>net use v: \\NAS\User /USER:www-data pass
Системная ошибка 7054.

Число разрешенных подключений к этому компьютеру ограничено, и все подключения в
 данный момент уже используются. Попробуйте подключиться позже или обратитесь к
системному администратору.

smbclient

Параметры

Параметр Описание
L host Флаг выводит на экран список сервисов, доступных на сервере, заданном параметром host; при использовании этого флага нет необходимости указывать ресурс
-I IP_address-N Флаг полезен, если не может быть найден адрес по имени; smbclient полагает, что компьютер расположен по указанному ГР-адресу
-U usemame Флаг подавляет приглашение password. Особенно полезен, когда доступ к ресурсу осуществляется без пароля. Если этот флаг не установлен, а пароль не требуется, пользователь все же получает приглашение для ввода и должен нажимать клавишу Enter для ввода пустого пароля Используя этот флаг, можно указать username для установки соединения с ресурсом. Без этого флага сервер использует содержимое переменных среды USER или LOGNAME; и если они пустые, сервер не получает username. Отправить пароль к серверу можно, введя знак процента (%) после username, а затем введя пароль: -U username%pas sword Определяет, какая рабочая группа используется при соединении с сервером
-W workgroup-Т taroptions Позволяет перемещать данные в tar-файл локальной системы Linux и обратно. Например, -Тх backup . tar восстанавливает файлы из backup . tar на удаленном ресурсе, в то время как -Тс backup . tar создает tar-файл с именем backup . tar, содержащий все файлы и каталоги удаленного ресурса
-c 'dir' Выполняет команды операций с файлами

Команды операций с файлами

Команда Описание
cd directory Переход в другой каталог 8MB совместно используемого ресурса
del file Удаление указанного файла с сервера (также используется команда rm)
dir Отображение содержимого текущего каталога сервера (также используется команда Is)
get file Получение указанного файла с удаленного сервера и сохранение его с тем же именем в текущем каталоге локальной системы; можно задать другое имя для файла на локальной системе: getfile localfilename
lcd directory Переход в указанный каталог на локальной системе
mget filemask Получение всех файлов на удаленном сервере, удовлетворяющих указанной маске файла
mkdir directory Создание указанного каталога на удаленном сервере (также используется команда md)
mput filemask Копирование всех файлов локального каталога, удовлетворяющих указанной маске файла, в текущий каталог удаленного сервера
prompt Включение/выключение подсказки для операций с несколькими файлами (mput и mget). При задании значения on пользователи получают подсказку при копировании каждого файла
put file Копирование указанного файла из текущего локального каталога в текущий каталог на удаленном сервере, имя файла остается прежним. Имя файла на удаленном сервере можно изменить: putfile remote filename
quit Выход из программы smbclient (также используется команда exit)
recurse Включает/выключает доступ к подкаталогам для операций с несколькими файлами (mput и mget). Когда задано значение on, команда при копировании файлов осуществляет поиск по всем подкаталогам текущего каталога
rm dirdirectory Удаление каталога с удаленного сервера (также используется команда rd)

Примеры

Посмотреть

$ smbclient -L//NAS/Home -U mirocow%pass -W HOME
$ smbclient -U mirocow%pass //NAS/DISK1 --directory/DOWNLOAD -c'dir'
$ smbclient -U MIROCOW-PC/mirocow%pass //NAS/User --directory/-c'dir'

Скачать

$ smbclient -U mirocow%pass //NAS/DISK1 --directory/DOWNLOAD -c'get "Lua.zip"'

Залить

$ smbclient -U mirocow%pass //NAS/DISK1 --directory/DOWNLOAD -c'put "Lua.zip"'

smbpasswd

Создание нового пользователя:

$ smbpasswd -a User_name

Смена пароля у существующего пользователя:

$ smbpasswd User_name

Удаление существующего пользователя:

$ smbpasswd -x User_name

Приостановить действие учетной записи без удаления:

$ smbpasswd -d User_name

Возобновить действие учетной записи:

$ smbpasswd -e User_name

Подключение данного компьютера к существующему домену:

$ smbpasswd -j Domain_name -U Administrator_name

Ошибки

tree connect failed: NT_STATUS_ACCESS_DENIED

Документация

Ссылки

Cron - [Parametrs / Параметры]

$
0
0

Cron

Format / Crontab формат

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m  h 	dom mon dow 	user  command
  17 *  *   * 	*	root    cd / && run-parts --report /etc/cron.hourly
  25 6  *   * 	*	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  47 6  *   * 	7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  52 6  1   * 	*	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Parametrs / Параметры

  • */30 - Запускать каждые 30 минут
  • crontab -l - вывести список заданий
  • crontab -u - пользователь (root, somebody)
  • crontab -e - редактирование пользовательского расписания
Viewing all 1318 articles
Browse latest View live