Last active
August 29, 2015 14:17
-
-
Save delminskii/01b305049c49ff49dcd0 to your computer and use it in GitHub Desktop.
Task #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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