Skip to content

Instantly share code, notes, and snippets.

@delminskii
Last active August 29, 2015 14:17
Show Gist options
  • Save delminskii/01b305049c49ff49dcd0 to your computer and use it in GitHub Desktop.
Save delminskii/01b305049c49ff49dcd0 to your computer and use it in GitHub Desktop.
Task #2
1) Работа с утилитой tar - GNU-архивная утилита; это не совсем архиватор в привычном понимании этого слова
// Упаковка файлов в архив (c - create, f - archive-file, v - verbose(выдавать на станд.вывод процесс архивир-я))
// !!! Имя архивируемого файла(-ов) - это параметр ключа -f, поэтому ключ -f должен быть последним
// Например ПРОСТО упакуем данные в архив (без сжатия?)
tar -cvf myNewArchive.tar path/to/file1 path/to/file2 ... path/to/fileN
// также можно указать как целую папку (тоже является файлов$ ВСЁ ЕСТЬ ФАЙЛ в UNIX), так и множестве файлов, напр.:
tar -cf myPythonScripts.tar *.py # сделать архив с содержимым всех *.py файлов из текущей директории
// Чтобы создать сжатый tar.gz (tgz) архив, нужно создавать архив с опцией -z
Например: tar -czf myNewArchive.tar.gz path/to/file1 path/to/file2 ... path/to/fileN
// bz2 позволяет еще жестче сжать данные, но чтобы сжать=расжать данные ему нужно больше времени, чем gz
// Чтобы заюзать этот алгоритм сжатия, нужно добавить опцию -j
// !!! tar.bz2 и tbz - то же самое, что tb2
Например: tar -cjf myNewArchive.tar.bz2 path/to/file1 path/to/file2 ... path/to/fileN
// ! Распаковка tar файла - с ключом -x (extract). По дефолту распаковывает в текущую директорию
// если заюзать -C path/to/directory , то распакует туда
Пример: tar -xvf myTar.tar
Пример: tar -xf myTar.tar -C path/to/specDirectory
// Чтоб распаковать не все файлы, а какой-то один (или несколько) из архива в текущую папку), нужно указать имя
// этого(-их) файлов в архиве
Например: tar -xvf isos.tar.gz file1 file2 ... fileN
// Также можно сделать экстракт группы файлов из архива
Пример: tar -[j|z|]xvf backup.tar[.(bz2|gz)] --wildcards '*.py'
Пример: tar -xvf images.tar --wildcards '*.png'
// Просмотр контента tar архива выполняется благодаря опции -t
Пример: tar -tf myTar.tar
Еще (более подробно): tar -tvf myTargz.tar.gz
// Добавление (аппендинг) файлов в архив - ключ -r.
// !!! Не работает с архивами *.tar.gz и *.tar.bz2
Пример: tar -rvf images.tar dirOrFile1 dirOrFile2 ...
3) Процессы в UNIX
Процесс - абстракция, представляющая программу во время ее выполнения; единица управления и единица потребления ресурса
Может быть в 3 состояниях:
- выполнение - состояние процесса, в которое он переходит из готовности; n процессор на n процессоров\ядер в системе в одну единицу времени
- готовность - пассив.состояние; например, процесс готов идти, и ждет например ввода данных из консоли, и пока он ждет этого ввода, другой процесс занял его место в процессоре; ждать ему нечего, а выполняться далее он тоже не может
- ожидание - пассивное состояние, где процесс ждет чего-то извне; например освобождения ресурсов, устройства или принятия сигнала
также еще 2 состояния:
- смерть - самого процесса уже нет. !! Но может случиться так, что убитый процесс может висеть в общем списке процессов (Ни жив, ни мертв; зомби)
- рождение - самого процесса еще нет, но уже готова структура для его появления. "Мало найти хорошее место, надо его еще застолбить"
Структура процесса:
1) PID
2) PPID
3) UID (айди пользователя, под которым запустили процесс)
4) GID (айди группы)
5) состояние процесса
6) терминал, связанный с процессом
7) приоритет (nice)
8) сигналы (битовая маска)
9) текущий каталог
10) umask
11) ulimit
Процесс не может взяться из ниоткуда; он может породиться другим процессом. Самый первый процесс при загрузке систему - init. Его PID (айди процесса) равен 1.
Процесса содают иерархию процессов, самый первый и глваный из которых - init.(PID=1).
Процессы напрямую между собой общаться не могут, поэтому они общаются посредством ядра системы с помощью:
1) каналов (pipe, fifo, stream ...)
2) переменные окружения (это своя "атмосфера" вокруг процесса, у каждого оно есть)(см. bash extract CONSTANTNAME=...)
Очень удобно, если во многим файлах например указывать версию программы через переменную окружения (задал в одном месте и всё)
3) сигналы (другие процессы посылают число-константу другому, чтоб тот что-то сделал, см. man 7 signal). Например:
О сигналах:
Процесс, получивший определенный сигнал, может поступить 3 способами:
1) ниче не делать
2) сделать стандартную обработку этого сигнала
3) сделать кастомную обработку этого сигнала (т.е. можно написать свой к своей программе)
Буквально все процессы имеют стандартный обработчик - смерть (буквально или core(т.е. выгрузка данных процесса в файл для посмертного анализа+смерть)). Поэтому команда отправки сигнала процессу называется kill:
kill -CONSTANT_SIGNAL_NAME_OR_NUMBER-OF-IT PID1 PID2 ... PIDN
Основные константы-сигналы, пожалуй:
SIGHUP(1) - потеря связи с терминалом
SIGINT(2) - прерывание от клавиатуры (Ctrl-C)
SIGKILL(9) - аварийное завершение процесса
SIGSEGV(11) - некорректная операция с памятью
SIGPIPE(13) - запись в закрытый канал
SIGALRM(14) - сигнал от таймера
SIGTERM(15) - сигнал завершения процесса
SIGCHLD(20) - процесс-потомок (ребенок) завершился
SIGUSR1(30) - пользовательский (кастомный) сигнал 1
SIGSTOP(17) - приостановить процесс Ctrl-Z
SIGCONT(19) - continue; сигнал - продолжить выполнение
Сигналы SIGHUP и SIGKILL не м.б. заблочены или игнорены, поэтому это ЖЕЛЕЗНЫЕ сигналы.
Сигнальная маска копируется полностью в дочерний процесс.
По man 7 signal можно подробнее посмотреть по таблице.
Пример посыла сигнала процессу с PID = 4432:
kill -STOP 4432
kill -CONT 4432
// послать сигнал (без явного указхания - SIGTERM) процессу по имени
killall processNameHere
Утилиты для просмотра\манипулирования процессами: atop, htop (good), top
Потоки ввода\вывода:
стандартные потоки I\O:
- стд поток ввода (дескриптор под номером 0)
- стд поток вывода (дескриптор под номером 1)
- стд поток вывода ошибок (дескриптор под номером 2)
>file - стд поток вывода в файл; файл перетирается
>>file - аналогично, но данные добавляются к концу файла (append)
<file - получение стандартного потока ввода из file
cmd1 | cmd2 - стандартный поток вывода команды1 направит в стандартный поток ввода команды2
Пусть n, m - номера дескрипторов стандартных потокв (см.выше):
n>file - переключение потока ввывода с дескриптора n в файл
n>>file - то же самое, но с добавлением
n>&m - слияние потоков с дескрипторами m и n
<<str - стандартный потока ввода до подстроки str
tee - распаралеливает потоки, лучше на примере:
ps aux | tee processInfo.txt | grep nikolay # выведет в processInfo.txt результат команды ps aux, а на консоль выведет инфу о тех процессах,
где присутствует nikolay
4) ps - утилитка для просмотра необходимой инфы (настраивается ключами) о процессах; process sorted (как ls - list sorted)
Хороший вариант, который выдает тот набор атрибутов процессов, которые считаются достаточными: (-H - родители\чайлды в виде иерархии)
ps aux -H
Можно настроить отдельно по необходимым столбцам чтоб выводило: ps -o $1 $2 .. $N, $i - смотреть в мане - man ps
5) AWK - утилита (бОльше, чем прост команда) для удобной работы с текстом (еще называют text editor); имеет собственный язык; от заглавных букв Ахо, Вейнбергер, Керниган. AWK используется для извлечения данных из текста.
Одно из самых популярных юзкейсов awk - выбор столбца из файла или из вывода другой команды. Использует пробел-таб в кач-ве разделителя по дефолту
Пример: dpkg -l | awk '{print $2}' >installed
Результат: из вывода списка установленных пакетов возьмет второй столбец перенаправит вывод в файл installed и затем на другой тачке можно
считать построчно этот файл и установить все эти пакеты :)
Весь синтаксис утилиты awk: awk 'condition {action}'
Например, найти все пакеты, относящиеся к vim, и вывести в стд вывод: dpkg -l | awk '/'vim'/ {print $2}'
Также можно задать свой собственный разделитель, заюзав -F "newDelimeterHere"; для примера пусть имеется файл test
stroka1:dannie v stroke1
stroka2:dannie v stroke2 dsfsdfsdf sdfgfdgdfg
Выполним: awk -F ":" '{print $1,$2}' test и выведется:
stroka1 dannie v stroke1
stroka2 dannie v stroke2 dsfsdfsdf sdfgfdgdfg
Еще юзкейсы:
awk 'NF > 0' data.txt // Печатает каждую строку, содержащую хотя бы одно поле-столбец (NF означает Number of Fields)
awk 'END {print NR}' data.txt // Печатает общее количество строк в файле
awk '{$2 = $2 - 10; print $2}' test.txt // Печатает вторые столбцы из файла, уменьшенные на 10
Полезные константы:
NF
Количество полей в текущей записи.
NR - Порядковый номер текущей записи.
FILENAME - Имя файла, из которого в данный момент производится ввод.
OFS - Разделитель полей при выводе, по умолчанию пробел.
ORS - Разделитель записей при выводе, по умолчанию перевод строки.
Еще пример: (вывести среднее арифм. второго столбца файла)
$ cat file.txt
A 10
B 20
C 60
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt
Average: 30
SED - еще одна утилита по работе с потоками текста (Stream EDitor). Часто юзается по замене текста.
sed принимает на вход строку текста, модифицирует ее, и выдает измененную строку на выход. Очень активно работает с регулярками.
Сразу пример:
cat report.txt | sed 's/John/Mike/g' > new_report.txt - заменить ВСЕ (g - global) нахождения John в файле на Mike и перенаправить вывод в new_report.txt. То же самое можно сделать:
sed 's/John/Mike/g' report.txt > new_report.txt
Так как sed регистрозависим, еще пример:
sed 's/[jJ]ohn/Mike/g' report.txt // находит очередной john или John, заменяет на Mike и на stdout
sed 's/john\|John/Mike/g' report.txt
Далее все лучше понять на примерах:
sed -n 12,18p file -- выводит строки с 12 по 18 в файле
sed '/boom/!s/aaa/bb/' file -- если найден "boom", заменить aaa на bb
sed 's/^[ ^t]*//' file -- удаляет все пробелы перед каждой строкой в file.txt
sed 's/foo/bar/4' file -- заменяет foo на bar только в 4ом вхождении в строке
sed -n '2~5p' file -- печатать каждую пятую строку, начиная со второй
sed 's/^[^,]*,/9999,/' file.csv -- заменяет первое поле на 9999 в CSV-файле
sed '1,20 s/Johnson/White/g' file -- производит замену Johnson на White только в строках 1 - 20
sed '1,20 !s/Johnson/White/g' file -- предыдущий пример наоборот (заменяет везде, кроме строк 1-20)
sed '/pattern/d' file -- удаляет строки, соответствующие шаблону pattern
sed '/./!d' file -- удаляет все пустые строки из файла (!!!!!!!!)
Еще пример: заменить все отриц. значения в файле на их положительные, но в скобках. Напр: -123.66 -> (123.66)
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Глянуть презенташку о grep,find,sed,awk: https://wilsonericn.wordpress.com/2011/08/25/find-grep-sed-and-awk/
9) WGET и CURL
wget - не интерактивная утилита для закачки файлов. Поддержка HTTP(S), FTP. Позволяет также скачивать по ссылкам, которые находятся в файле;
поддерживает ДОЗАКАЧКУ файлов, если она была прервана. Юзер может повлиять на ее работу только штатными средствами управления процессами в системе.
Просто скачать файл:
wget ftp://vasya.pupkin.com/film.avi
Дозакачка (с опцией -c или --continue):
wget -c ftp://vasya.pupkin.com/film.avi
Выкачать файлы по ссылкам, которые находятся в файле:
wget --input-file=pupkinlist.txt // или короткая запись ключа -i
Также конечно можно скачивать сами html страницы, а также те данные, которые даны по ссылкам в этом html, с определенной глубиной.
wget https://www.yandex.ru // скачается index.html яндекса
Зеркалирование сайтов на локальную машину (опция -m), однако все ссылки на сайте будут вести на интернет-адреса
Копирование сайта для локального просмотра (с заменой интернет-ссылок на локальные адреса скачанных страниц)
wget -r -l0 -k http://www.vasyapupkin.com/ // -r --recursive, lN - глубина перехода по ссылкам внутри файла
// загрузка в определенную папку (ключ -P)
wget -P path/to/directory www.yandex.ru
// скачивание всех найденных pdf файлов с сайта
wget -r -l1 -A.pdf --no-parent http://url-to-webpage-with-pdfs/
// опция -U выдает wget за Mozilla
CURL - альтернатива wget. cURL получает код HTML и выводит его в STDOUT (т.е. в консоль), в то время как Wget скачивает HTML-файлы и сохраняет их на диск. cURL поддерживает ОГРОМНОЕ количество протоколов.
curl www.yandex.ru // выведет html-контент на stdout
curl -o yandexHTML.html www.yandex.ru // направит контент в yandexHTML-файл
// с опцией -O (--remote-name) файл скачивается AS IS, т.е. будет иметь такое же имя как на сервере
// также можно скачивать несколько файлов: curl -O link1 -O link2 .... -O linkN
Получение заголовка HTTP-ответа от сервера можно, заюзав ключ -I
Например: curl -I www.yandex.ru
При скачке можно подменить свой userAgent:
curl -A "YOUR USER AGENT STRING HERE" www.yandex.ru
Также можно отправлять письма с помощью SMTP-протокола.
Если не указывать тип запроса курлу, то отправит дефолтный GET. Можно изменить глагол запроса, заюзав опцию -X:
curl -X POST address
Также можно отправить тип и контент на сервер с логином\пассвордом:
curl -X POST -u admin:admin http://example.com/myconfigs/status -Hcontent-type:application/xml -d /home/user/file.xml
C опцией -H <param> можно изменить свои заголовки запроса:
curl -H "Accept: application/xml" -H "Content-Type: application/xml" http://example.com
2) SSH - сетевой протокол обмена данными прикладного уровня; наряду с HTTP,FTP. Secure Shell;
Используется безопасное соединение; асимметричное шифрование - RSA по дефу. Клиент генерирует private и public ключи. Паблик отдает
на сервер (ssh-copy-id -i path/to/public/key.pub user@host). Дальше подцепляемся к удаленному серверу: ssh user@host.
Конфиги: на стороне клиента ~/.ssh/config (можно сделать короткое имя для хоста), чтоб писать: ssh <my_custom_name>. Напр., ssh remoteHost1
на стороне сервера /etc/ssh/sshd_config , там с комментами, интуитивно понятно + google; не забыть рестартануть сервис ssh пр
изменении этого файла
SCP - secure cp ; протокол; секьюрное копирование по сети; использует SSH
Пример:
Скопировать локальный файл sourceFile на удаленный хост:
scp SourceFile user@host:/directory/TargetFile
Скопировать sourceFile с удаленного хоста себе в кач-ве targetFile:
scp user@host:/directory/sourceFile targetFile
Рекурсивно скопировать папку с удаленного хоста себе:
scp -r user@host:/directory/SourceFolder TargetFolder
10) man-page:
.TH tar "March 23, 2015" "version 0.1" "USER COMMANDS"
.SH NAME
tar - GNU utility; it makes possible work with archives easily
.SH SYNPOSIS
.B tar
[\-c] [\-f] [\-v] [\-t] [\-j] [\-z] [\-r] [\-x] [\-C target_dir] [--wildcards format]
.SH DESCRIPTION
There're lots of types of archives and copressed files. It
neccessary having a powerfull utility to make base operations
upto them. Base operations include compressing, extracting,
updating for the verious archives.
.PP
tar provides a possibility working with archives easily using CLI.
.SH OPTIONS
.TP
\-c
create new uncompressed *.tar file or device
.TP
\-f
says tar that we're working with achrive-file. This option must be the last at the keys' sequence
.TP
\-v
setting to printing process at STDOUT(1) stream
.TP
\-t
get listing of files\directories including in archive
.TP
\-j
says tar that we're working with gzip-algorithmed compressed archive
.TP
\-z
says tar that we're working with bzip2-algorithmed compressed archive
.TP
\-r
append some files\diresctories to the existing archive. Won't work with gzip and bzip2
.TP
\-x
extract archive's content
.TP
\-C target_dir
forward extracted files to the existing target_dir directory
.TP
\-\-wildcards format
helpful option for extracting groups of files accroding to format, i.e. *.png, *.mp3, *.odt
.SH EXAMPLES
.TP
Make *.tar archive including 1.jpg and 2.png
.B tar
\-cvf picts.tar 1.jpg 2.png
.PP
.TP
Make *.tar.gz compressed archive with all *.jpeg files in current directory
.B tar
\-czvf jpegBackup.tar.gz *.jpeg
.PP
.TP
Make *.tar.bz2 compressed archive with all user1's data
.B tar
\-cjf backupUser1.tar.bz2 /home/user1
.PP
.TP
Extract all achrive's .png files to the existing directory called backgrounds
.B tar
\-xvzf pictures.tar.gz --wildcards '*.png' -C ./backgrounds
.PP
.TP
Append new files to the existing archive
.B tar
\-rvzf images.tar.gz WinXP-2012-build-1-0-3.iso Ubuntu-12-04.iso
.PP
.SH EXIT STATUS
tar process returns 0 if it's all right, otherwise (non-zero) means failure
.SH AUTHOR
Sidorov Nikolay (krest1k(at)inbox.ru)
." CHECK THIS MAN: nroff -man your_manpagefile.1 | less
11) Bash-scripts:
b)
#!/bin/bash
# PARAMS:
# $1 - USERNAME OF NEW USER
# $2...$N - UTLITIES, CSHOULD BE INSTALLED
if [ $# -eq 0 ] ; then
echo "No params. Exit."
exit 1
fi
# adding new user and give him permissions(add to the sudo group, ie /etc/sudoers) if he doesnt exist
NEWUSER=$1
if [ `sudo cat /etc/passwd | grep ${NEWUSER} | wc -l` -eq 0 ]; then # if really new user
`sudo useradd ${NEWUSER}`
`sudo mkdir /home/${NEWUSER}`
echo "Enter ${NEWUSER}'s new password:"
`sudo passwd ${NEWUSER}`
`sudo chown $NEWUSER /home/${NEWUSER}`
`sudo chgrp $NEWUSER /home/${NEWUSER}`
# with /etc/sudoers:
`sudo usermod -a -G sudo ${NEWUSER}`
else
echo "Sorry, ${NEWUSER} exists already."
fi
ST3_BZ2="sublime_text_3_build_3047_x32.tar.bz2"
ST3_PTRN="subl*"
if [ $# -eq 1 ] ; then
echo "No utilities to be installed. Exit."
exit 0
else
for arg in ${@:2} ; # pass user as the 1st argument
do
if which $arg ; then
continue
else
if [ `echo ${arg} | grep ${ST3_PTRN} | wc -l` -ne 0 ] ; then # for siblime-text-3 explicitly
`cd ~ && wget http://c758482.r82.cf2.rackcdn.com/${ST3_BZ2} && tar -xjf ${ST3_BZ2} && rm ${ST3_BZ2}`
else
`sudo apt-get install ${arg}`
fi
fi
done
fi
a) сбор логов с удаленки, запуск скрипта на клиенте: (.ssh/config настроен на прописанный там хост с именем remoteUbuntu)
#!/bin/bash
REMOTEHOST="remoteUbuntu"
LOGTARNAME="${REMOTEHOST}_logs.tar.gz"
# make tar.gz of var/log/* and put it into ~ on remoteDesktop
ssh ${REMOTEHOST} << EOF
cd /var/log
sudo tar -czf ~/${LOGTARNAME} *
cd ~
EOF
# copy tar.gz to myself
scp ${REMOTEHOST}:./${LOGTARNAME} ./${LOGTARNAME}
# clean after myself
ssh ${REMOTEHOST} << EOF
sudo rm ./${LOGTARNAME}
EOF
12) .profile - скрытый файл юзера, где хранятся переменные окружения, необзодимые пользователю; для всех юзеров выполняются команды,
прописанные в этом файле; если нет, то идет в /etc/profile;
.profile - место, где прописаны программы, которые стартуют в фоне при логине юзера + определения переменных окружения
Чтоб изменения из профайла вступили в силу без логаута\логина юзера, после модификации этого файла нужно выполнить в командной строке:
. .profile
.bashrc - место, где лежат свои кастомные алиасы и функции для bash'а, опции шелла и параметры вывода + также можно сунуть туда хоткеи для
баша, но они обычно лежат в .inputrc
.bash_profile - то же, что bashrc, но юзается ТОЛЬКО башем и никаким другим шеллом.
Алиас позволяет заменить строкой слово, когда оно используется в качестве первого слова в простой команде.
В общем: более короткая запись длинной команды; типа байндинга какого-действия на клавишу
Включать алиасы можно с помощью команды alias, выключать - unalias
Вывести все алиасы текущей командной оболочки: alias без параметров
!!! Чтоб добавить собсвтенный алиас, нужно запилить его в .bashrc или .bash_profile (bash only).
Если просто в командной оболочке добавить, то он будет распознаваться только в тек.командной оболочке
Алиасы не наследуются дочерними процессами. Такде Bourne (sh) не распознает алиасы.
Пример алиаса: alias dh='df -h'
unalias dh
6) cron - утилита, выполняющая некоторые действия\скрипт по расписанию.
crontab - спец.конфиг крона, откуда можно управлять выполнением задач по расписанию. У каждого юзера - свой кронтаб.
Отредактировать файл-конфиг: crontab -e <---- edit
Формат файла:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (вскр=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * [user-name] command to be executed
[] - необязательный, по дефу - текущ. юзер
Пример: выполнять каждую минуту
*/1 * * * * echo "cron_test_message" >>/home/user1/cron_stat.txt
После сохранения crontab-файла крон выводит в консоль, что приплыли новые команды на исполнение. (тип все гуд)
!!! В папку /etc/cron.daily/ содержатся скрипты, которые исполняются ежедневно!
/etc/cron.weekly/ аналогично, но еженедельно
/etc/cron.hourly/ аналогично, но каждый час
/etc/cron.monthly/ аналогично, но ежемесячно
chkrootkit - check rootkit (поиск руткитов).
Руткиты - вредоносные приложения, разработанные для скрытого проникновения на сервер и маскировки под обычные процессы или программы, с
целью получения полного доступа на сервер
!!! Проверка chkrootkit: пусть есть юзер nikolay на сервере, директория chkrootkit-0.50/ в его ~; еженедельно запускать на chkrootkit
Решение: положить в /etc/cron.weekly/ исполняемый (x) файл chkrootkitCroonWeekly.sh со следующим содержанием:
#!/bin/bash
echo "Weekly cron-task for chkrootkit..."
/home/nikolay/chkrootkit-0.50/chkrootkit | grep INFECTED$ >>/home/nikolay/infected_cron_chkrootkit.txt
echo "See ~/infected_cron_chkrootkit.txt for INFECTED"
P.S. --- If you are putting the script from one of the cron directories (/etc/cron.*) then you don't need to use sudo as that is running as
root.
7) Про сервисы
Сервисы (демоны) в UNIX-like OS - программы, работающие в фоне и сидящие в ram; постоянно мониторят за чем-либо (файлы\действия юзера). При определенном состоянии субъекта, демон активизируется и исполняет какой-либо скрипт. М.б. запущен либо другим процессом, либо юзером с терминала (опять же демон будет сидеть в фоне).
Демоны, как и другие проги, можно отключить (напр., для ноута выключить сервис печати принтера и т.д.) и включить. (поставить свой).
Сервисы - это программы, которые запускаются и останавливаются через инициализационные скрипты, расположенные в каталоге /etc/init.d.
Многие запускаются на этапе загрузки системы.
Утилита /sbin/service обеспечивает интерфейс (взаимодействие) пользователя с инициализационными скриптами. А сами эти скрипты обеспечивают интерфейс для управления сервисами, предоставляя пользователю опции для запуска, остановки, перезапуска, запроса состояния сервиса и выполнения других воздействий на сервис. К примеру, инициализационный скрипт сервиса httpd имеет следующие опции:
/sbin/service httpd
Usage: httpd {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}
Можно, например, посмотреть тек.состояние всех служб в данный момент: (ключ --status-all файла /sbin/service):
service --status-all
Также очевидно что родительский PID у сервисом (т.е. PPID) равен 1, то они были запущены при загрузке системы
Теперь конкретно:
скрипты запускаемых служб в Linux
располагаются в /etc/rc.d/init.d или /etc/init.d в зависимости от
дистрибутива
манипуляции над <service-name> сервисом:
sudo service <service-name> start|stop|restart
автоматический запуск сервиса при запуске системы:
# update-rc.d <service-name> defaults
удалить запуск сервиса при запуске системы:
update-rc.d -f <service-name> remove
// также можно удалить ссылки из: /etc/rc*.d или chmod -x /etc/init.d/<скрипт>, но первый вариант
правильнее
посмотреть текущие запущенные сервисы можно прожкой для процессов: pstree (выведет процессы деревом)
rcconf - для автозагрузки.
sysv-rc-conf - раскидывание по ранлевелам.
симлинки и update-rc.d - это вручную.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment