Рубрики
Конспект

Конспект: Linux / 2020.03.05

Дистрибутив для новичка

Дистрибутив ubuntu
https://ubuntu.com/download/desktop
Порядок соответствует изучению Linux для новичков
https://www.youtube.com/watch?v=fAHpGshMCgQ&list=PLg5SS_4L6LYuE4z-3BgLYGkZrs-cF4Tep&index=1  - Видео

0. Знакомство с терминалом

Клавиша TAB на клавиатуре наш главный помощник!

man - помощь
man man - помощь по man
man -k man - ищем где в помощи слово man
man ls - вывести помощь по ls
man -a crontab - Последовательно отображает все разделы справочника man, в которых упоминается crontab
man -k crontab - Эквивалент команды apropos

---
1 Выполняемые программы или команды для командной оболочки
2 Обращение к операционной системе (функции, предоставляемые ядром)
3 Обращение к библиотеке (внутренние функции программных библиотек)
4 Специальные файлы (обычно можно найти в /dev)
5 Форматы файлов и условные обозначения типа /etc/passwd
6 Игры
7 Прочее (включая макро пакеты и условные обозначения), например man(7), groff(7)
8 Команды по администрированию системы (обычно только для root)
9 Программы ядра [нетипичные]
---
man 5 crontab - Отображает части раздела 5 справочника man, в которых упоминается crontab 

info  - помощь
uptime - сколько работает система
lscpu - информация о cpu
whatis - показать что делает команда 
whereis - показывает где файл
which ls - вывести полный путь до файла ls
locate - показывает где файл
ls - показать что в этой директории
ls -la -R / - показать все на компьютере
Ctrl + Z - заморозить выполнение процесса
Ctlrl + C - прервать выполнения

fg - продолжить выполнения процесса после использования ctrl+z  
bg - продолжить выполнения процесса после использования ctrl+z  
jobs - посмотреть задания в bg
ps - показать процессы

1. Перемещение по каталогам / по файловой системе

Работа с каталогами:
. - текущий каталог
.. - каталог на уровень выше
~ - домашний каталог
pwd - показать текущею директорию
cd - смена директорий
cd / - перейти в корень
cd ~ - сменить текущий каталог на домашний
cd - без параметров также сменит текущий каталог на домашний
cd .. - перейти на каталог выше
cd ../.. - перейти на два каталога выше


ls - вывести листинг содержимого текущей директории
ls - показать содержимое каталога
ls -al - покажет все файлы, ссылки, размер, скрытые файлы
ls -F - листинг текущей директории с добавлением к именам символов, обозначающих тип объекта
ls -l - листинг текущей директории с подробностями по каждому объекту ( права доступа, владелец, группа, дата, размер )
ls -a - кроме обычных объектов, вывести в листинге, скрытые файлы и директории, текущего каталога
ls /tmp | pr -T5 -W$COLUMNS - листинг директории /tmp в 5 колонок
ls *[0-9]* - вывести в листинг файлов и директорий текущего каталога, содержащие в имени цифровые символы
ls -lSr - показать файлы с сортировкой по размеру

2. Чтение файлов \ Создание директорий \ Создание файлов

cat name_file.txt - вывод файла name_file.txt на экран
cat - напечатает содержимое указанного файла на терминал.

more name_file.txt - открыть файл namme_file.txt для просмотра
less name_file.txt - открыть файл name_file.txt для просмотра

touch - если файл/директория существует то будет изменено время создания
      - если файла нет, то он будет создан
touch name_file1.txt - создать файл с именем name_file1.txt
touch -t 0712250000 fileditest - поменять дату файла fileditest
touch  lol{1,2,3}.txt - создать пустые файлы lol1.txt lol2.txt lol3.txt

mkdir dir3 - создать директорию
mkdir -p dir1/dir2/dir3  -  создать директорию dir3 если dir1 и dir2 не существовало, будут созданы

cp file1.txt file2.txt - скопировать file1.txt в file2.txt
cp -R dir1 dir2 - скопировать
cp file1 file2 - копирование файла в файл 
cp file1 file2 dir - скопировать файлы в директорию 
cp (x*~x[3-5]) newdir - скопировать все файлы вида x* кроме x3 по x5
cp *(^m0) newdir - скопировать файлы модифицированные не сегодня

rmdir dir4 - удалить пустую директорию

rm file2.txt - удалить файл file2.txt

rm -rf dri3 - удалить директорию со всеми файлами
mv file111.txt file222.txt - переместить и переименовать файл \ каталог

split -b 1M filemy - разбить filemy на части размером 1 Мб с помощью опции -b
split -n 3 filemy - разрезание filemy на три части

df — утилита, которая показывает свободное место на дисках
df -h — отображает слайсы, и свободное\занятое место
df -i — показывает количество занятых инодов

3. Линки

жесткие ссылки - это различные имена одного и того же файла. при удалении всех ссылок удаляется сам файл
 
мягкие ссылки или симлинки не имеют собственных прав и указывают на владельца
удаляются ссылки с помощью команды rm
создаются ссылки с помощью команды ln
 
ln /что /на_что - без параметра s создастся жесткая ссылка. жесткие ссылки ограничены одной файловой системой
 
ln -s /что "название линка" - нужно быть в той папке куда нужно сделать линк (мягкая ссылка)
 
ln -s /var/usr/re ~/re - создаст симлинк на файл /var/usr/re и поместит его в домашний каталог
ln -s /2/e/txt /name - создаст симлинк
ln -s /путь/что /куда/как_назвать_симлинк  - последний параметр отвечает за название симлинка

4. Команды find

find /   -name '*.html' - искать файлы закачивающиеся на .html
find / -user vasya -  поиск файлов принадлежащие пользователю vasya 
find / -name filedir - найти все директории и файлы принадлежащие пользователю vasya. Поиск будет производиться, начиная с корневой директории (/)
find /etc -type d | sort - ищет все каталоги, находящиеся в /etc/ и вывод сортируется по имени
find /usr/bin -type f -atime +20 - найти директории и файлы с именем filedir. Поиск будет производиться, начиная с корневой директории (/)
find /usr/bin -type f -mtime -10 - найти все файлы в директории /usr/bin, время последнего обращения к которым более 20 дней
find /var/backup/www -name "*.tar.gz" -mtime +30 |xargs /bin/rm -f {}; - найти все файлы старше 30 дней и удалить
find /var/backup/www -name "*.tar.gz" -mtime +30 -delete - найти все файлы старше 30 дней и удалить
find / -xdev -name \*.rpm - найти все файлы в директории /usr/bin, которые были созданы или модифицированы в течении последних 10 дней
find . -maxdepth 1 -name *.jpg -print -exec convert -  искать директории и файлы, имена которых оканчиваются на ".rpm", но игнорируя съёмные накопители, cdrom, usb и т.п.
find /path/to/dir -name \*.c - Найти в текущей директории все файлы с расширением jpg и выполнить для каждого команду convert ( Imagemagick ) 
find / -name *.rpm -exec chmod 755 '{}' \; -  найти все директории и файлы, имена которых оканчиваются на ".с". Поиск будет производиться, начиная с директории /path/to/dir

5. Команды wc

wc -  подсчёт в файле строк, слов и символов
wc - выводит количество строк, слов и символов в указанном файле или во входном потоке (из пайпа). 
     Введите man wc чтобы узнать, как настроить вывод программы. 
wc -l filename - посчитать количество строк в файле
cat my.txt | wc -l так мы узнаем сколько там всего строк (если нужно)
cat file.txt | wc -l - посчитать число строк
cat file.txt | wc -w - посчитать число слов
grep 192.198.1.1 /var/log/httpd/access-log | wc -l - отображает количество записей конкретного IP-адреса в файле журнала Apache
wc /var/log/dmesg - отображает счетчики для одного файла
wc /var/log/*.log - отображает отдельные значения для каждого файла и общие для всех файлов
netstat -na | grep ":порт\ " | wc -l - подсчет количества коннектов на определенный порт
netstat -na | grep ":порт\ " | grep SYN_RCVD | wc -l - подсчет числа «полуоткрытых» TCP-соединений
dpkg -l| wc -l - показать количество установленных пакетов
sysctl -a | wc -l  - показать количество строк

6. Команды sort

sort file - вывести отсортированное содержимое файла
sort -n file - вывести отсортированное содержимое файла по номерам
sort file1 file2 - вывести отсортированное содержимое двух файлов
sort file1 file2 | uniq - вывести отсортированное содержимое двух файлов исключая повторные значения
sort file1 file2 | uniq -u -вывести уникальные значения из отсортированного содержимого двух файлов 
sort file1 file2 | uniq -d - вывести только повторяющиеся значения из отсортированного содержимого двух файлов 

sort - выведет содержимое файла, указанного в командной строке, в алфавитном порядке 
       Естественно, sort также может принимать ввод из пайпа. 
       Наберите man sort чтобы ознакомиться с опциями команды, которые управляют вариантами сортировки. 

du -ks * | sort -n -r - Сортировать по размеру (kbytes)

du -s /usr/share/* | sort -n - показать размер всех каталогов внутри каталога  /usr/share/ и отсортировать по размеру (размер в Кб)

ps auwx | sort -r -k 4.4 - Следующая команда сортирует процессы по уровню использования памяти. 
                           Параметр к используется для указания поля, используемого для сортировки. 
                           Запись 4,4 показывает, что именно четвертое поле (и только оно) является ключевым.
lsmod | sort -k 2,2n - команда отображает загруженные модули ядра в порядке увеличения их размера. 
                       Параметр n указывает команде sort на необходимость интерпретировать второе поле как номер, а не как строку.

cat /etc/passwd | cut -d ":" -f 1,3,6 | sort >> /home/pi/p.txt - вытащить из файла /etc/passwd содержимое столбиков 1,3,6 , выполнить сортировку и записать результат в файл /home/pi/p.txt 

7. Команды cut

cut - показать содержимое  вырезав символы 
cut - используется для извлечения из входного файла или потока, полей разделенных указанным символом. (попробуйте echo 'abc def ghi jkl' | cut -d ' ' -f2,2 )

echo 'abc def ghi jkl' | cut -d ' ' -f2,2
 
cut -c 1,4,7 name.txt - показать содержимое  вырезав символы  

cut - показать содержимое  вырезав символы  
cut -c 1,4,7 name.txt - показать содержимое  вырезав символы  

cut -d ">" -f 3 filename.txt - прочитает файл, найдет делитель d, на экран показывает третий столбик

cat /etc/passwd | cut -f 1,3,6 -d ':' - показать содержимое 1,3,6 столбика вырезав 2,4,5 разделенные символом  ':'

cat /etc/passwd | cut -d ":" -f 1,3,6 >> /home/pi/p.txt - записать содержимое столбиков 1,3,6  в файл /home/pi/p.txt 

cat /etc/passwd | cut -d ":" -f 1,3,6 | sort >> /home/pi/p.txt - вытащить из файла /etc/passwd содержимое столбиков 1,3,6 , выполнить сортировку и записать результат в файл /home/pi/p.txt 

8. Регулярные выражения

точка . - любой один символ
? - любой один символ
* - любое кол-во символов
а* - a, ab, abc и aecjejich
^ - начало строки
$ - конец строки 
^а - Любое «а», находящееся в начале строки 
*а$ - Любое «а», находящееся в конце строки 
а.с - Трехсимвольные строки, начинающиеся с «а» и заканчивающиеся на «с»

[] - диапазон 
[^a] - прикол  в таких скобках с "^" все что угодно только не "a"
[^0-9]
[^[:alnun:]]
[bcf]at - bat, cat или fat
[a-d]at - aat, bat, cat, dat, но не Aat, Bat и т. д.
[A-D]at - Aat, Bat, Cat и Dat, но не aat, bat и т. д.
1[3-5]7 - 137,147 и 157
[0-9]    [[:digit:]] \d \D
[a-z]
[A-Z]
[a-zA-Z0-9]
[[:alnun:]]  \w  \W
[[:space:]]  \s  \S

[A-Z] - большие буквы
[0-9] - цифры
[a-z] - мелкие буквы
[A-Za-z]
www\.[a-z]*\.com


d{n,m} - квантификатор 
{} -  последовательность
touch {6,7,8}.txt - последовательно создаст файлы 6.txt, 7.txt, 8.txt
grep -E  '[0-9]{1,3}'

\tHello	- Символ табуляции, предшествующий слову hello
\[tT][xX][Tt] - .txt, .TXT, .TxT или другие сочетания на основе изменения регистра
\n - новая строка
\r - символ возврата


Мата символ * 
Некоторые мета символы сами по себе не соответствуют ничему, но изменяют значение предыдущего символа. 
Один из таких символов, это * (звездочка), который используется для сопоставления нулевому или большему 
числу повторений предшествующего символа. Заметьте, это значит, что * имеет другое значение в регулярках, 
нежели в глоббинге. Вот несколько примеров, и обратите особое внимание на те случаи где сопоставление 
регулярных выражений отличается от glob-подстановок:
ab*c совпадает с «abbbbc», но не с «abqc» (в случае glob-подстановки, обе строчки будут удовлетворять шаблону. Вы уже поняли почему?)
ab*c совпадает с «abc», но не с «abbqbbc» (опять же, при glob-подстановке, шаблон сопоставим с обоими строчками)
ab*c совпадает с «ac», но не с «cba» (в случае глоббинга, ни «ac», ни «cba» не удовлетворяют шаблону)
b[cq]*e совпадает с «bqe» и с «be» (glob-подстановке удовлетворяет «bqe», но не «be»)
b[cq]*e совпадает с «bccqqe», но не с «bccc» (при глоббинге шаблон точно так же совпадет с первым, но не со вторым)
b[cq]*e совпадает с «bqqcce», но не с «cqe» (так же и при glob-подстановке)
b[cq]*e удовлетворяет «bbbeee» (но не в случае глоббинга)
.* сопоставим с любой строкой (glob-подстановке удовлетворяют только строки начинающиеся с ".")
foo.* совпадет с любой подстрокой начинающийся с «foo» (в случае glob-подстановки 
этот шаблон будет совпадать со строками, начинающимися с четырех символов «foo.»)
Итак, повторим для закрепления: строчка «ac» подходит под регулярное выражение «ab*c» потому, 
что звездочка также позволяет повторение предшествующего выражения (b) ноль раз. И опять, ценно отметить для себя, 
что мета символ * в регулярках интерпретируется совершенно иначе, нежели символ * в glob-подстановках.

Начало и конец строки 
Последние мета символы, что мы детально рассмотрим, это ^ и $, которые используются для сопоставления началу 
и концу строки, соответственно. Воспользовавшись ^ в начале вашего regex, вы «прикрепите» ваш шаблон к началу строки. 
В следующем примере, мы используем регулярное выражение ^#, 
которое удовлетворяет любой строке начинающийся с символа #:
$ grep ^# /etc/fstab
# /etc/fstab: static file system information.

Полно строчные регулярки
^ и $ можно комбинировать, для сопоставлений со всей строкой целиком. 
Например, нижеследующая регулярка будет соответствовать строкам начинающимся с символа #, 
а заканчивающимся символом ".", при произвольном количестве символов между ними:
$ grep '^#.*\.$' /etc/fstab
# /etc/fstab: static file system information.
В примере выше мы заключили наше регулярное выражение в одиночные кавычки, 
чтобы предотвратить интерпретирование символа $ командной оболочкой. 
Без одиночных кавычек $ исчез бы из нашей регулярки еще даже до того, как grep мог его увидеть.

8.1 grep

!!! Используйте grep -E тогда можно будет использовать нормально регулярные выражения

grep "что" "Где" - искать что в файле 
grep -i "что" "Где" - искать что во всех файла и каталогах игнорируя регистр
grep -E "что" "Где" - искать что в файле, использовать нормально регулярные выражения
grep -Er "что" *  - искать что во всех файлах и каталогах
grep -Eri "что" "Где" - искать что во всех файла и каталогах игнорируя регистр
grep -Eriv "что" "Где" - показать все файлы где нет что


grep -E "[192]+\.[0-9]+\.[0-9]+\.[0-9]"
ifconfig | grep -E "[192]+\.[0-9]+\.[0-9]+\.[0-9]"
ip a s | grep -E "inet [192]+\.[168]"
ip a s | grep -E "[192]+\.[0-9]+\.[0-9]+\.[0-9]"
ifconfig | grep -E "[192]+\.[0-9]+\.[0-9]+\.[0-9]"
ip a s | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
ifconfig | grep -E "(^|[[:space:]])[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}($|[[:space:]])"
grep -E "[A-Za-z\.]@[A-Za-z]" x.txt

grep -i linux ./*  - искать linux во всех файла и каталогах игнорируя регистр
grep -i linux *  - искать linux во всех файла и каталогах игнорируя регистр

grep francois myfile.txt - показывает строки, содержащие слово francois из файла myfile.txt
grep 404 /var/log/httpd/access_log - показывает	строки, содержащие число 404 из /var/log/httpd/access_log
grep -Rl Virtual Host /etc/httpd/conf* - показывает строки Virtual Host
grep -v 200 /var/log/httpd/access_log* - отображает строки, не содержащие число 200

grep [0-9] /var/log/messages - отобрать и вывести строки содержащие цифровые символы из файла /var/log/messages
grep ^Aug /var/log/messages - отобрать и вывести строки, начинающиеся с сочетания символов "Aug", из файла /var/log/messages
grep Aug /var/log/messages - отобрать и вывести строки, содержащие сочетание символов "Aug" из файла /var/log/messages
grep Aug -R /var/log/* - отобрать и вывести строки, содержащие сочетание символов "Aug", из всех файлов, расположенных в директории /var/log и ниже

dmesg | less - показать все устройства переправив вывод в less
dmesg | grep -i pci	- команда выводит список всех устройств PCI
dmesg | grep -i isa	- команда выводит список всех устройств ISA
dmesg | grep -i memory	- показать память
dmesg | grep -i scsi	- команда выводит список всех устройств scsi
dmesg | grep -i usb	- команда выводит список всех устройств usb
dmesg | grep -i tty	- консоль\терминал\ввод
dmesg | grep -i cpu     - процессор


ps auwx	| grep init - показывает строки init из выхода ps
ps auwx	| grep "\[*\]" - показывает команды, заключенные в скобки

dmesg |	grep "[ ]ata\|^ata" - показывает информацию об устройстве ядра ata

getsebool -a | grep ssh - показать правила ssh
getsebool -a | grep httpd - показать правила httpd

tcpdump -i eth0 -s 0 -A port 80 | grep GET - (-s 0 весь пакет, -A для ASCII)
tcpdump |grep -v ssh - поиск пакетов исключая пакеты ssh

ls -l /dev | grep -E 'sd|hd' - показать все где есть символ sd или hd

9. Пере направление ввода и вывода \ stdout \ stdin \ stderr \ Pipe

Пере направление потока ввода/вывода 
Pipe, пайпы, пере направление
конвейер - (пайп) -  (shift)+(обратная косая черта) =  |
| - пайп пере направление вывода
; - пайп пере направление вывода
() -  скобки служат для группирования команд
& -  говорит о том что команда выполнится в фоне
ls /etc | grep abc - смотрим содержимое каталога etc, перенаправляем вывод в grep и получаем файлы в которых есть символ abc
cd /etc ; cat passwd - перейти в etc и выполнить cat passwd
(sleep 30; echo tttt)& - все что в скобки отправляем в фоновый режим и через 30 сек выводим  tttt
ps > myfile перенаправит вывод в myfile.txt ( уничтожит текущие содержание файла)
ps | less перенаправит вывод в просмотрщик(пейджер) less
ps >> myfil.txt если файл есть то допишет в конец файла
<  - взять входные данные из следующего фала
fromdos < from.txt > unix.txt - из fromdos возьмет данные из from.txt и запишет в unix.txt


:> filename.txt - дятел, создать пустой файл filename.txt
> filename.txt - создать пустой файл filename.txt

echo 123 >  file.txt - записать 123  в  файл file.txt (важно файл будет перезаписан и будет 123)
file.txt < echo 123 - записать 123  в  файл file.txt (важно файл будет перезаписан и будет 123)
echo 222 >>  file.txt - дописать в конец файла file.txt 222 
file.txt << echo 222 -дописать в конец файла file.txt 222 
 
2>  - stderr - ошибки, информация
 
1>  - stdout - вывод (экран)
 
0>  -  stdin - ввод (клавиатура)

&> -  stderr and stdout - ошибки и вывод
 
echo $?

Пример с ping:
-------------
ip=1.1.1.1
ping -c1 -w1 $ip >/dev/null 2>&1 && echo OK
-------------


grep user /etc/* 2> /dev/null - ищем слово user в каталоге /etc/ , поток ошибок перенаправляем в /dev/null
grep user /etc/* > good.txt 2> bad.txt - ищем слово user в каталоге /etc/ , поток без ошибок запишем  good.txt, поток ошибок перенаправляем в bad.txt
grep user /etc/* > good.txt 2> bad.txt - ищем слово user в каталоге /etc/ , поток без ошибок запишем  good.txt, поток ошибок перенаправляем в bad.txt
grep user /etc/* &> result.txt - ищем слово user в каталоге /etc/ , поток  вывода и ошибок запишем result.txt


ls -laR / > good.txt 2> bad.txt -  показываем содержимое каталога / , поток без ошибок запишем  good.txt, поток ошибок перенаправляем в bad.txt
ls -laR / &> result.txt - показываем содержимое каталога /  , поток  вывода и ошибок запишем result.txt

10. Архивирование \ Сжатие

tar cf куда_ИМЯ_будущего_архива.tar что_архивируем 
tar cvf name.tar myfolder
c - create 
v - verbose - показывать что делает tar
f - file ( параметр f всегда должен быть последним ) 


tar tf my.tar - проверить архив
t - test
f- file

tar xvf my.tar - распаковать содержимое в текущем каталоге 
x - extract
v - vrbose
f - file

gzip / bzip2 / xz - команды для компрессии файла

gzip my.tar - запаковать файл my.tar (файл уменьшится, добавится расширение gz)
gzip -9 file1 - поместить файл file1 в архив gzip с максимальной степенью сжатия
gunzip my.tar.gz  - распаковать файл my.tar.gz

bzip2 my.tar - запаковать файл my.tar (файл уменьшится, добавится расширение bz2)
bunzip2 my.tar.bz2 - распаковать файл my.tar.bz2

xz my.tar  - запаковать файл my.tar (файл уменьшится, добавится расширение xz)
unxz my.tar.xz - распаковать файл my.tar.xz

tar cvzf mygzip.tar.gz folder1 - создать архив каталога folder1 использовать сжатие gzip
tar cvzf mygzip.gz folder1 - создать архив каталога folder1 использовать сжатие gzip
хорошим тоном считается писать расширение так tar.gz 
c - create 
v - verbose
z - сжатие gz
f - file (имя файла)

tar cvjf myfile.tar.bz2 folder1 - создать архив каталога folder1 использовать сжатие bz2
tar cjf myfile.tar.bz2 folder1 - создать архив каталога folder1 использовать сжатие bz2
c - create 
v - verbose
j - сжатие bz2
f - file (имя файла)

tar cvJf myfile.tar.bz2 folder1 - создать архив каталога folder1 использовать сжатие xz
tar cJf myfile.tar.bz2 folder1 - создать архив каталога folder1 использовать сжатие xz
c - create 
v - verbose
J - сжатие xz
f - file (имя файла)
 

tar cvzpf /home/Backup-etc`date +%y_%m_%d`.tgz /etc 2>/home/error.log - создание архива каталога с временной меткой
tar -cvf archive.tar file1 file2 dir1 - создать tar архив archive.tar, упаковав в него файлы file1, file2 и директорию dir1
tar -cvf archive.tar file - упаковать в tar-архив archive.tar, файл file
tar -cvzf archive.tar.gz dir1 - создать tar архив и сжать его с помощью программы gzip
tar -cvjf archive.tar.bz2 dir1 - создать архив и сжать его с помощью bzip2 ( ключ -j работает не во всех *nix системах )

tar -tf archive.tar - вывести содержимое tar архива
tar tfv viruses-2010-05-18.tar.bz2 1>zxcvirus.txt - просмотр архива и запись в файл описания



tar -xvzf archive.tar.gz - разжать tar архив gz и распаковать его
tar -xvjf archive.tar.bz2 - разжать архив bz и распаковать его ( ключ -j работает не во всех *nix системах )
tar -xvf archive.tar - распаковать tar архив в текущей директории ( в принципе указывать метод сжатия не обязательно, tar сам разберется) 
tar -xvf archive.tar -C /tmp - распаковать архив в /tmp


rar
rar a file1.rar file1 file2 dir1 - создать rar архив file1.rar, архивировать файлы: file1, file2 и директорию: dir1
rar a file1.rar test_file - упаковать в rar архив file1.rar файл test_file
rar x file.rar - разархивировать rar архив file.rar
unrar x file1.rar - распаковать rar-архив

zip
zip file1.zip file1 - создать сжатый zip-архив
zip -r file1.zip file1 file2 dir1 - запаковать в архив несколько файлов и/или директорий
unzip file1.zip - разжать и распаковать zip-архив

11. Процессы \ память \ логи

top / htop
У утилиты top есть параметры, которые облегают жизнь, их мы набираем в top’e когда он запущен:
u — и имя пользователя, например u mysql покажет процессы запущенные от пользователя mysql
o — используем для сортировки, возможные параметры — pri, size, res, cpu, time, threads
m — переключение между режимами отображения нагрузки и ввода-вывода
k — завершить процесс, ввод pid процесса
r — изменить приоритет процесса, вводим pid процесса
n — отображать статистику по определённому процесс
a — показывает абсолютные запущенных процессов
top -n 3 - запускает top на 3 сек 
SHIFT+P - отфильтровать по потреблению процессора
SHIFT+M -отфильтровать по потреблению памяти 
q - выход


free - показать количество памяти в байтах
free -h - показать количество памяти для людей


ps - процессы у текущего пользователя
u - user
a - all 
x - execute
ps -u user - показать процессы у пользователя 
ps -aux  - самая популярная команда 


/var/log -  в этом каталог сохраняются все логи
dmesg - лог ядра linux, хранится в оперативной памяти

lsof

lsof - показывает информацию от откртых сокетах, файлах и сетевых соединениях.
lsof -i -n - показывает открытые интернет-соединения
lsof -i -n |grep ESTABLISHED - показывает открытые, и установленные сетевые соединения
lsof -i -n | grep -i established
lsof -i -n | grep -i list

11.2 Маленький бенчмарк

wget -qO- bench.sh | bash

12. Варианты редактирования файлов

https://b14esh.com/category/nix/vim
vi - мощный редактор
vim - мощный редактор
---------------------
:e **/filename.c          редактировать файл (с поиском по имени)
:w [fname]                записать изменения
:wa                       сохранить изменения во всех файлах
:q                        выйти из редактора
:q!                       выйти из редактора, не сохраняя изменения

hjkl                      перемещение в разные стороны
i                         режим вставки
I                         добавление в начало строки
a                         режим добавления
A                         добавление в конец строки
o                         добавить строку сразу за текущей
O                         добавить строку перед текущей
R                         писать поверх имеющегося текста
u, :u[ndo]                отмена предыдущего действия (undo)
CTR-R, :red[o]            отмена отмены предыдущего действия (redo)
dd                        вырезать (удалить) строку
cc                        удалить и начать редактирование
yy                        копировать строку
p                         вставить из буфера обмена
d                      удалить n+1 строку
y                      скопировать n+1 строку
ESC                       перейти в режим просмотра
DEL                       удалить следующий символ
:                      перейти на строку #n
%                         перейти к парной скобке

:color              выбор цветовой схемы. цветовые схемы: /usr/local/share/vim/vim72/colors/*.vim
:pwd                      текущий каталог
:cd [path]                перейти в другой каталог
:!команда                 выполнить команду - man, git, и так далее
                          стрелочками вверх и вниз можно авто дополнять
                          команды и искать по истории

/                         поиск,  кнопка n далее
:                      перейти на строку #n
v + hjkl                  выделение текста
SHIFT + v                 выделить строку
CTRL + v                  выделение прямоугольника
y                         копировать
d                         удалить
p                         вставить
u                         к нижнему регистру
Shift+U                   к верхнему регистру

172,200d                  удалить с 172 строки по 200
1,10d                     удалить с 1 строки по 10 

---------------------

pico - простой редактор
nano - простой редактор
^ - имеется ввиду Control
Ctrl+W - поиск
Ctrl+K - вырезать строку
Cctrl+U - вставить строку
Ctrl+X - выход

13. типы аккаунтов и виды файлов (ubuntu)

standart - обычный пользователь
administrator - имеет привилегии sudo

root - встроенная учетная запись

/home - каталог пользователей
/home/vasya - каталог пользователя vasya
/root - каталог пользователя root

/etc/passwd - файл с параметрами настроек пользователей
/etc/group - файл групп
/etc/shadow - файл с паролями

linux пароли
как взаимодействуют три файла — passwd, groups и shadow. Файл passwd каждого пользователя содержит строку, построенную по следующему образцу: # Строка в /etc/passwd user_name:x:1000:1000:user_info user_name:/home/user_name:/bin/bash Здесь user_name — это логин; 1000 — идентификационный номер пользователя; 1000 — идентификационный номер основной группы; user_info — полное имя (для электронной переписки, новостей и т. д.); /home/user_name — домашний каталог пользователя; /bin/bash — используемая им оболочка. Идентификатор группы — это уникальный номер, важный для управления правами доступа к файлам. Соответствующая строка в /etc/shadow с информацией о пароле выглядит следующим образом: # Строка в /etc/shadow user_name:$6$9dk0$...:13479:0:99999:7::: имя_пользователя:зашифрованный_пароль:дата_создания_пароля:кол-во_дней_для_смены_пароля:когда_нужно_сменить_пароль:через_сколько_дней_сменить_пароль:когда_пароль_будет_просрочен: Последовательность символов после user_name: — это зашифрованный пароль. Если не задать эту последовательность, то в систему можно будет входить, не указывая пароль. Если определить вместо нее символ * или !, то вход в систему будет запрещен. Номер GID из /etc/passwd должен соответствовать группе из /etc/group. Во многих дистрибутивах каждому обычному пользователю соответствует одноименная группа: # Строка в /etc/group user_name:x:1000: sudo:x:27:user1,user2,user3 whoami - посмотреть под какой учетной записью зашли su username - сменить пользователя id - покажет ID групп в которых состоит текущий пользователь id username - покажет ID групп в которых состоит username last - последний логин в систему, кто? who - кто сейчас логин в систему w - кто сейчас логин в систему и кто сейчас что делает

14. Пользователи и группы

sudo useradd -m user1 - создать пользователя, создать для него директорию (-m)
sudo passwd user1  - установить пароль для пользователя 
/etc/skel/  - специальный каталог в котором лежат файлы для новых пользователей. Отсюда они копируются в каталог нового пользователя.
sudo touch /etc/skel/xxx.txt - например вот так создали файл xxx.txt теперь он будет появляться у всех новых пользователей
sudo userdel user1 - удалить пользователя
sudo userdel -r user1 - удалить пользователя вместе с каталогом

sudo groupadd prog - создать группу prog
sudo groupdel  prog - удалить группу prog

sudo usermod -aG prog user3 - добавить пользователя user3 в группу prog
sudo deluser user3 prog - удалить пользователя user3 из группу prog

!!! adduser - команда добавления пользователей
!!! почему то ей не пользуются 

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

ls -l - покажет какие права на файл/каталог и кто владелец
ls -lah - покажет какие права на файл/каталог и кто владелец 
ls -a - покажет какие права на файл/каталог и кто владелец
ls -lh - просмотр полномочий на файлы и директории в текущей директории

Основные команды для смены владельца:
sudo chown user2 filename.txt - сменить владельца для файла filename.txt на user2
sudo chown -R user1 directory1 - назначить рекурсивно владельцем директории directory1 пользователя user1
sudo chgrp group1 file1 - сменить группу-владельца файла file1 на group1
sudo chgrp

Также chown может сменить и владельца и группу:
!!! разделителем может быть и . и : и еще что то там ...
chown user1:group1 file1 - сменить владельца и группу владельца файла file1
sudo chown pi.pi x.txt - сменить владельца и группу на pi для файла x.txt 


В файловой системе хранится информация о владельце для. каждого файла и каталога.
ls -l /usr/bin/wc -  покажет ls кто является владельцем файла права на файл его группу размер. list
chown user:group /var/www - смена владельца каталога www (вместо : можно использовать . точку ) (change owner)

Права доступа хранятся в четырех восьмеричных цифрах, каждая из которых определяет различные права доступа.
Специальная информация uid gid stiky-бит,Пользователь,Группа,Остальные

ls -l

- файл
rw- для user чтение+запись 
r-- для группы user чтение
r-- для остальных пользователей чтение
1 кол-во  копий файла(линки)
user1 пользователь 
user1 группа  
231M размер файла
May месяц создания 
1 
15:21 время
test_21398 имя файла

ls -l
drwxrwxrwx 2 pi   pi   4.0K May  1 11:36 folder1
lrwxrwxrwx 1 pi   pi           5 May  3 11:08 myl21 -> x.txt
-rw-r--r-- 1 user1   user1   231M May  1 15:21 test_21398

Типы файлов
(-)файл
(d)каталог
(c)идентификатор
(l)символьные ссылки
(b)блочные устройства
(p)именованные каналы
(s)сокеты



Численное представление:
Значение | Права                                       | Права
0        | Ничего не разрешено                         | ---
1        | Нельзя читать и писать, разрешено исполнять | --x
2        | Нельзя читать и исполнять, разрешено писать | -w-
3        | Нельзя читать, разрешено писать и исполнять | -wx
4        | Разрешено читать, нельзя писать и исполнять | r--
5        | Разрешено читать и исполнять, нельзя писать | r-x
6        | Разрешено читать и писать, нельзя исполнять | rw-
7        | Разрешено все                               | rwx


Опция     | Буква| Значение
(кто)     | u    | Пользователь (User)
(кто)     | g    | Группа (Group)
(кто)     | o    | Другие (Other)
(кто)     | a    | Все (All, ``world'')
(действие)| +    | Добавление прав
(действие)| -    | Удаление прав
(действие)| =    | Явная установка прав
(права)   | r    | Чтение (Read)
(права)   | w    | Запись (Write)
(права)   | x    | Выполнение (Execute)
(права)   | t    |Sticky бит
(права)   | s    | SUID или SGID


chmod 777 test - изменит права на файл
chmod ugo+rwx test можно так:
----------------------------
1 = t стикибит stiky-бит
4 = s установка id пользователя
2 = S установка id группы
4 = r чтение
2 = w запись
1 = x выполнение
----------------------------
чтение + запись + выполнение 1+2+4=7 rwx
chmod 700 test - пользователю дать права на все ( можно так chmod u+rwx test)
----------------------------
чтение и выполнение 4+1=5 r-x
chmod 500 test - пользователю дать права на чтение и выполнение
----------------------------
чтение r--
chmod 400 test пользователю дать права на чтение
----------------------------
выполнение --x
chmod 1 test пользователю дать права на выполнение
----------------------------
все права для всех rwxrwxrwx
chmod 777 test 
----------------------------
chmod + rwx test 
u - владелец user
g - группа group
o -  остальные owner
a - все выше перечисленные
----------------------------

chmod 0700 - drwx------  - Владелец может читать, записывать файлы в данный каталог, а также переходить в него. Все остальные пользователи  не имеют к нему доступа
chmod 0711 - drwx--x--x    -  Владелец обладает теми же правами. Все остальные могут открывать каталог, но не могут просматривать или изменять файлы в нем
chmod go+r - drwxr--r--    
chmod 0777 - drwxrwxrwx   -   Полный доступ
chmod a=rwx - drwxrwxrwx  -  Полный доступ  
chmod 0000 - Доступ полностью закрыт
chmod a-rwx - Доступ полностью закрыт
chmod ббб - Открывает права на чтение и изменение файла
chmod go-rw - Не позволяет никому, кроме самого владельца, просматривать, вносить изменения или удалять файл
chmod 644 - Только владелец может вносить изменения в файл или удалять его, но все могут его просматривать
chmod go-rwx directory1 - отобрать у группы и всех остальных все полномочия на директорию directory1.
chown user1 file1 - назначить владельцем файла file1 пользователя user1
chmod u+s /bin/binary_file - назначить SUID-бит файлу /bin/binary_file. Это даёт возможность любому пользователю запускать на выполнение файл с полномочиями владельца файла.
chmod u-s /bin/binary_file - снять SUID-бит с файла /bin/binary_file.
chmod g+s /home/public - назначить SGID-бит директории /home/public.
chmod g-s /home/public - снять SGID-бит с директории /home/public.
chmod o+t /home/public - назначить STIKY-бит директории /home/public. Позволяет удалять файлы только владельцам
chmod o-t /home/public - снять STIKY-бит с директории /home/public

umask
umask 0022 - обратная команда chmod 0022 значение по умолчанию
umask 0066 - Создает каталоги с правами доступа drwx--x--x и файлы с правами доступа -rw-------
umask 0077 - Создает каталоги с правами доступа drwx------ и файлы с правами доступа -rw-------
umask 0022 - Создает каталоги с правами доступа drwxr-xr-x и файлы с правами доступа -rw-r--r--
umask 0777 - Создает каталоги с правами доступа d--------- и файлы с правами доступа ----------

ДОП:
find / -perm -u+s - найти, начиная от корня, все файлы с выставленным SUID

lsattr
lsattr /etc/host* - отображает атрибуты /etc/host*
lsattr -aR /tmp/ | less - рекурсивно отображает все атрибуты каталога /tmp
Дефисы соответствуют 13 атрибутам ext2/ext3, которые могут быть установлены. 
Ни один из них не является отображаемым по умолчанию: а (только добавление), 
с (сжатый), d (без дампа), I (постоянный), j (регистрация данных), s (безопасное удаление), 
t (запрет слияния в конце файла), и (не удаляемый), А (без обновления atime), D (синхронные обновления каталогов), 
S (синхронные обновления) и Т (верхушка дерева каталогов). 

chattr +i whatever.iso - с помощью команды chattr вы можете изменять эти атрибуты

Стикибит t
Есть смысл устанавливать на каталоги.
Позволяет только владельцу удалять файлы из каталога.
sudo chmod o+t myfolder - добавить стикибит
sudo chmod o-t myfolder - удалить стикибит
sudo chmod 1777 myfolder - добавить стикибит
sudo chmod 0777 myfolder - удалить стикибит

16. Сетевые команды

ifconfig - информация о сетевых устройствах
ifconfig -a - покажет все сетевые интерфейсы (неактивные в том числе)

ip addr show  - информация о сетевых устройствах

route - информация о маршрутах
sudo route - информация о маршрутах
ip route show - информация о маршрутах

ping ya.ru - тестирование доступности хоста ya.ru ( ctrl+c прервать)
ping -c 4  ya.ru google.com  - тестирование доступности хоста ya.ru

traceroute ya.ru - покажет через какой маршрут идет пакет до ya.ru

host www.microsoft.com - покажет ip DNS и т.д.
dig www.microsoft.com - покажет ip DNS и т.д.

netstat — показывает активные сетевые соединения.
netstat -tpnl - показать tcp port listen namber(номера портов)
netstat -w 1 — количество пакетов в настоящее время.
netstat -ibt — вывод сетевых интерфейсов с разбивкой по IP адресам, отображает объём трафика, количество ошибок, коллизий
netstat -rn — отображает таблицу маршрутизации
netstat -a - перечислить все порты
netstat -at - перечислить все TCP порты
netstat -au - перечислить все UDP порты
netstat -l - перечислить все прослушиваемые порты (состоянии LISTEN)
netstat -lt - перечислить прослушиваемые TCP порты (состоянии LISTEN)
netstat -lu - перечислить прослушиваемые UDP порты (состоянии LISTEN)
netstat -lx - перечислить прослушиваемые UNIX сокеты (состоянии LISTEN)
netstat -s - показать статистику всех портов
netstat -st - показать статистику только TCP портов
netstat -su - оказать статистику только UDP портов
netstat -p - отображение PID и имени процесса в выводе netstat
netstat -an - ключ n отключает разрешение имён в выводе
netstat -c - вывод информации netstat непрерывно (как top,htop)
netstat -r - таблица маршрутизация ядра
netstat -ap | grep ssh - соответствие портов и процессов (ssh)
netstat -an | grep ':80' - соответствие портов и процессов (порт 80)
netstat -i - показать список сетевых интерфейсов
 
netstat -lnptux
-l все открытые порты (LISTEN)
-t по протоколу TCP
-u по протоколу UDP
-x по протоколу UNIX Socket
-n без резолва IP/имён
-p но с названиями процессов и PID-ами

ss - информация о соединениях
ss -s - общая информация о соединениях
ss -l - информация об ожидающих соединений сокетах
ss -lp - информация об ожидающих соединений сокетах, а также именах процессов, их использующих
ss -at - информация обо всех задействованных TCP сокетах
ss -au - информация обо всех задействованных UDP сокетах
ss -o state established '( dport = :smtp or sport = :smtp )' - информация обо всех установленных SMTP-соединениях
ss -o state established '( dport = :http or sport = :http )' - информация обо всех установленных HTTP-соединениях
ss -x src /tmp/.X11-unix/* - локальные процессы, подключённые к X-серверу
ss -tulpan - показать все

ifconfig - проверка состояния сетевых интерфейсов
ifconfig -a - покажет все сетевые интерфейсы (неактивные в том числе)
ifconfig eth0 down - отключить сетевой интерфейс eth0 (команда устарела)
ifocnfig eth0 up - включить сетевой интерфейс eth0 (команда устарела)

ifdown eth0 - отключить сетевой интерфейс
ifup eth0 - включить сетевой интерфейс

ip - управление сетевыми интерфейсами (замена ifconfig)
ip help - помощь по команде ip
ip addr help - помощь
ip route help - помощь
ip tunnel help - помощь
ip addr show - получение информации о всех сетевых интерфейсах
ip a - получение информации о всех сетевых интерфейсах
ip addr show eth0 - отобразит информацию о eth0

sudo apt install open-ssh - установка ssh
sudo ewf allow 22 - разрешить порт 22
ssh name_user@name-server - подключится к серверу name-server

ipcalc -bmn 192.168.1.100/27 - расчет маски под сети хост-компьютерам с помощью  CIDR IP- адреса

dhclient eth0 - включить DHCP на сетевом интерфейсе eth0
ethtool eth0 - вывод статистики по сетевому интерфейсу eth0
hostname - вывести имя компьютера
host http://www.example.com - преобразовать домен http://www.example.org в ip-адрес и наоборот
ifconfig eth0 - вывести настройки сетевой карты eth0
ifconfig eth0 promisc -переключить интерфейс eth0 в promiscuous-режим для сбора ( сниффинг ) сетевых пакетов
ifup eth0 - включить сетевой интерфейс eth0
ifdown eth0 - отключить сетевой интерфейс eth0
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 - назначить IP адрес и маску сетевому интерфейсу eth0
ip link show - вывести статус связи всех сетевых интерфейсов

iwconfig eth1 - вывести конфигурацию беспроводного сетевого интерфейса eth1
iwlist scan - сканирование и поиск беспроводных сетей и точек доступа

mii-tool eth0 - вывести состояние связи сетевого интерфейса eth0
nslookup http://www.example.com - ресольвить ( преобразовать/разрешить ) доменное имя http://www.example.org в ip-адрес и наоборот

route -n - показать  локальную таблицы маршрутизации (маршруты)
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 - добавить статический маршрут в сеть 192.168.0.0/16 через шлюз с ip-адресом 192.168.1.1
route add -net 0/0 gw IP_Gateway - назначить ip-адрес шлюза по умолчанию ( default gateway )
route del 0/0 gw IP_gateway - удалить ip-адрес шлюза по умолчанию ( default gateway )
netstat -tup - выводит листинг всех установленных соединений по протоколам TCP и UDP без разрешения имён в ip-адреса а так-же PID'ы и имена процессов, обслуживающих данные соединения
netstat -tupl - вывод списка соединений по протоколам TCP и UDP без разрешения имён в ip-адреса а так-же и PID'ы и имена процессов, ожидающих соединений на сетевых портах
netstat -rn - вывести таблицу маршрутизации, аналог команды route -n
echo "1" > /proc/sys/net/ipv4/ip_forward - разрешить форвардинг ( пересылку ) пакетов

tcpdump tcp port 80 - отлавливать и выводить весь трафик на TCP-порт 80 (обычно - HTTP)
whois http://www.example.com -вывести информацию о доменном имени из базы данных whois (аналог команды host)


ifconfig / route / forward / быстрая настройка сети
ifconfig eth0 inet 192.168.3.13/24
route add default gw 192.168.3.13
echo nameserver 192.168.3.1 > /etc/resolv.conf





16.1 iptables

PACKET IN --->---PREROUTING---[ маршрутизация ]--->----FORWARD---->---POSTROUTING--->--- PACKET OUT
                         - mangle          |              - mangle          - mangle
                         - nat (dst)       |              - filter          - nat (src)
                                           |                                   |
                                           |                                   |
                                         INPUT                              OUTPUT
                                          - mangle                           - mangle
                                          - filter                           - nat (dst)
                                           |                                 - filter
                                           |                                   |
                                           `---->----[   приложение  ]---->----'

#  0     #####  1  ########   2   #  3   ######  4   #####
 
#0
Опция -t задает таблицу. Если опция упущена, то по умолчанию предполагается использование таблицы filter. 
Если предполагается использование другой таблицы, то это требуется указать явно.
 
#1
Mangle - обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.
Nat - эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). 
Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация 
в этой цепочке может производиться только в исключительных случаях.
Filter - здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, 
проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
 
#2
Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, 
то команда всегда должна стоять первой.
Команда определяет действие iptables, например: 
вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.
 
Список команд:
-A имя-цепочки правило (добавить правило в конец цепочки; ключ --set-counters позволяет установить счётчики пакетов и байтов)
-I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1; ключ --set-counters позволяет установить счётчики пакетов и байтов)
-R имя-цепочки номер правило (заменить;
ключ --set-counters позволяет установить счётчики пакетов и байтов)
-D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1)
-D имя-цепочки правило (удалить правило по текстуальному совпадению)
-C имя-цепочки пакет (тестировать прохождение пакета;
исходящий адрес, адрес назначения, протокол, интерфейс, порты задаются соответствующими ключами)
-L [имя-цепочки] (показать список правил; дополнительные ключи:
-v (вывести дополнительную информацию, в частности, счётчики)
--exact (показывать счётчики без округления до KB, MB и т.д.)
--numeric (показывать адреса и номера портов в виде чисел)
--line-numbers (выводить номера правил)
-F имя-цепочки (удалить все правила из цепочки)
-Z имя-цепочки (обнулить счетчики)
-N имя-цепочки (создать цепочку)
-X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
-P имя-цепочки действие (изменить действие по умолчанию: ACCEPT,
DROP, QUEUE, RETURN)
-E старое-имя-цепочки новое-имя-цепочки (переименовать цепочку)
 
#3
Раздел шаблон задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет.
Здесь можно указать самые разные критерии - IP-адрес источника пакета или сети, сетевой интерфейс. 
IP-адрес места назначения, порт, протокол и т.д. 
Остальные параметры для фильтации можно посмотреть в справке по утилите iptables(man iptables)
 
#4
И наконец действие  указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. 
Здесь можно заставить ядро передать пакет в другую цепочку правил, 
"сбросить" пакет, выдать на источник сообщение об ошибке и т.п.
Список некоторых действий:
ACCEPT - пропустить пакет; просмотр таблицы завершается
DROP - выбросить молча; просмотр завершается не только для текущей цепочки, но и для других таблиц
REJECT - выбросить, известив отправителя (--reject-with тип-извещения)


iptables -L - вывести список правил
iptables -S - вывести список правил
iptables -L -n -v  - вывести список правил (-n не резолвить IP) (-v Отображение подробной информации)
iptables -L -n -v --line-numbers - просмотр правил с номером строки
iptables -L INPUT -n -v - просмотра INPUT
iptables -L OUTPUT -n -v --line-numbers - просмотра OUTPUT
iptables -L INPUT -n --line-numbers  - просмотр правил с номером строки в INPUT
iptables -L OUTPUT -n --line-numbers  - просмотр правил с номером строки в OUTPUT
iptables -L OUTPUT -n --line-numbers | less - просмотр правил с номером строки в OUTPUT перенаправив вывод в less
iptables -L OUTPUT -n --line-numbers | grep 8.8.8.8 - просмотр правил с номером строки в OUTPUT грепаем 8.8.8.8
iptables -F INPUT - очистка таблицы filter
iptables -F OUTPUT - очистка таблицы filter
iptables -F FORWARD - очистка таблицы filter
iptables -F - Удаление всех правил (flushing)



open firewall:
iptables -F
iptables -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --tcp-fl ags  SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Небольшая защита от DoS
iptables -A INPUT -p all -m state --state  RELATED,ESTABLISHED -j ACCEPT # Разрешаем уже установленные соединения
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # Разрешаем 22 порт
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT # Разрешаем 80 порт
iptables -A INPUT -i eth0 -p icmp -m icmp  --icmp-type 3 -j ACCEPT # Разрешаем некоторые ICMP-сообщения
iptables -A INPUT -i eth0 -p icmp -m icmp  --icmp-type 11 -j ACCEPT # Разрешаем некоторые ICMP-сообщения
iptables -A INPUT -i eth0 -p icmp -m icmp  --icmp-type 12 -j ACCEPT # Разрешаем некоторые ICMP-сообщения
iptables -t nat -A PREROUTING -p tcp --dport 3389 -i eth0 -j DNAT --to 192.168.0.100 # Проброс RDP на сервер терминалов
iptables -A FORWARD -i eth0 -d 192.168.0.100 -p tcp --dport 3389 -j ACCEPT # Проброс RDP на сервер терминалов
iptables -P INPUT DROP

forward:
iptables -t nat -A POSTROUTING -o eth1_internet -j SNAT --to-source eth2_local
echo "1" > /proc/sys/net/ipv4/ip_forward



service iptables stop - Остановка
service iptables start - Запуск
service iptables restart - Перезагрузка
service iptables save - Сохранить правила брандмауэра  (CentOS / RHEL / Fedora Linux)
iptables-save - Сохранить правила
iptables-save > /root/my.active.firewall.rules - Сохранить правила (в других дистрибутивах)

17. Скачивание файлов wget

wget -r -l 10 -k http://example.org/ Скопировать весь сайт целиком
wget --user=login --password=password ftp://ftp.example.org/some_file.iso - использование имени пользователя и пароля на FTP/HTTP
wget --continue --recursive --level=1 http://www.vereskmed.ru/music/album_1/ - Ну вот для примера простая команда для скачивания всего первого альбома 
wget ftp://login:password@ftp.example.org/some_file.iso - использование имени пользователя и пароля на FTP/HTTP
wget ftp://myftpserver/имя.abc
wget -c ftp://myftpserver/имя.abc
wget -t 20 --retry-connrefused http://mydownloadserver/имя.iso
wget -p -k -E -H http://mysite.com/site.html
wget -r -l 4 -p -E -k http://mysite.com

18. Установка и удаление программ APT (Debian, Ubuntu)

whereis - поможет в поиске установленных программ, пакетов
whereis ssh - найти файлы ssh
/etc/apt/sources.list - тут список репозиториев


apt-get install --reinstall proga - переустановка программы
apt-get remove --purge proga - удаление месте с конфигурациями
apt-get check - проверяет состояние зависимостей в системе.
apt-get -f install - Попытка привести систему в замкнутый, логичный вид
apt-get dist-upgrade - модернизировать систему
apt-get update - поиск обновлений
apt-get autoclean - удаляет не полностью загруженные или еще не установленные пакеты
apt-get clean - удаляет из папки /var/cache/apt/archives все кэшированные пакеты для освобождения места на диске
 
apt-cache show пакет - показывает сводку на указанный пакет
apt-cache search <ключевое слово> - выполняет поиск по ключевому слову в базе данных программных пакетов (нечувствителен к регистру).
apt-cache stats - выводит статистику по всем установленным пакетам
apt-cache depends - выводит взаимозависимости программного пакета (установленного или нет)
apt-cache pkgnames - выводит список всех установленных пакетов
 
apt-key adv --keyserver mame_server --recv-keys  12345678 - команда запросит ключ 12345678 с сервера ключей
apt-key list - отображает ключи gpg, известные APT
 
apt-config -V - выводит информацию о версиях установленных приложений APT
 
add-apt-repository идентификатор_РРА - добавления репозитория
add-apt-repository ppa:tualatrix/ppa - добавления репозитория
 
aptitude  install rar unrar p7zip-full - установка rar unrar 7zip
aptitude update - обновления индексов репозиториев 
aptitude safe-upgrade - установки всех доступных обновлений

 
Очистка кэшированных пакетов
----------------------------
apt-get clean
find /var/cache/apt/ -name \*.deb
----------------------------
 
apt-get remove mpt-status убираем ошибку на виртуалке связанную с raid

gpg
---
gpg --keyserver wwwkeys.us.pgp.net --recv-keys ключ
gpg --armor --export ключ | apt-key add -
apt-get update
---

dpkg
----
dpkg -l - получить список установленных пакетов
dpkg -l namepacket - выводит информацию о заданном DEB файле
dpkg -L namepacket - покажет все файлы пакета
dpkg -i namepacket - установить пакет (-i install)
dpkg -r -P namepaket  - удалить пакет (-r remove -P purge)
dpkg -с <файл DEB> - отображает файлы, установленные с помощью заданного DEB-файла 
                     (файл DEB должен быть указан в таком виде: путь к файлу/имя файла)
dpkg -p namepacket - отображает информацию о заданном программном пакете
dkpg -S namepacket - Показывает пакеты, в которых был найден файл с заданным именем. 
                     Результатом выполнения команды может 
                     быть путь к файлу или просто его имя.
dpkg -x file_DEB /folder - Распаковывает файлы, содержащиеся в DEB-файле, 
                           в указанную папку. После завершения операция 
                           восстановит права доступа к указанной папке.
----


dpkg-reconfigure — программа для перенастройки установленного любого пакета
----------------
dpkg-reconfigure tzdata - изменить временную зону
dpkg-reconfigure exim4-config - перенастроить пакет exim4
dpkg-reconfigure locales - настроить локали (язык)
dpkg-reconfigure console-data - настройки раскладки клавиатуры
dpkg-reconfigure gdm - выбор DM (display manaager) в ubuntu
----------------

cpio — конвертация пакетов rpm в формат cpio (формат cpio работает во всех linux)
----
rpm2cpio name_packet.rpm > name.cpio
----


19. Установка и удаление программ RPM (RedHat, CentOS)

whereis - поможет в поиске установленных программ, пакетов
whereis ssh - найти файлы ssh
-----------------------------------------
yum update - получить список обновлений 
yum upgrade - обновить пакеты 
yum -y install epel-release - добавить репозиторий epel
yum provides "*bin/top" - найти пакет, который содержит файл
-----------------------------------------
tail /var/log/yum.log - просмотреть лог
-----------------------------------------
yum help - отображение команд и опций
-----------------------------------------
yum list - список названий пакетов из репозиторий
yum list available - список всех доступных пакетов
yum list installed - список всех установленных пакетов
yum list installed httpd - установлен ли указанный пакет
yum list all - список установленных и доступных пакетов
yum list kernel - список пакетов, относящихся к ядру
-----------------------------------------
yum info httpd - отображение информации о пакете
yum deplist httpd - список зависимостей и необходимых пакетов
yum provides "*bin/top" - найти пакет, который содержит файл
yum search httpd - поиск пакета по имени и описанию
-----------------------------------------
yum updateinfo list security - получить информацию о доступных обновлениях безопасности
-----------------------------------------
yum grouplist - вывести список групп
yum groupinfo "Basic Web Server" - вывести описание и содержимое группы 
yum groupinstall "Basic Web Server" - установка группы пакетов «Basic Web Server»
yum groupremove "Basic Web Server" - удаление группы
-----------------------------------------
yum check-update - проверка на доступные обновления
-----------------------------------------
yum repolist - список подключенных репозиториев
yum repoinfo epel - информация об определенном репозитории
yum repo-pkgs epel list - информация о пакетах в указанном репозитории
yum repo-pkgs reponame install - установить все пакеты из репозитория
yum repo-pkgs reponame remove - удалить пакеты установленные из репозитория
-----------------------------------------
yum makecache - создать кэш
yum check - проверить локальную базу rpm (поддерживаются параметры dependencies, duplicates, obsoletes, provides)
yum history list - просмотр yum истории (вывод списка транзакций)
yum history info 9 - просмотр информации определенной транзакции (установленные пакеты, установленные зависимости)
-----------------------------------------
yum clean packages - удалить пакеты сохраненные в кэше
yum clean all - удалить все пакеты и метаданные
-----------------------------------------
yum update - обновить все пакеты
yum update-to - обновить до определенной версии
-----------------------------------------
yum localinstall httpd.rpm - установить из локальной директории
yum install httpd.rpm - установить из локальной директории 
yum localinstall http://server/repo/httpd.rpm - установить с http
-----------------------------------------
yum downgrade - откатиться к предыдущей версии пакета
yum reinstall httpd - переустановка пакета (восстановление удаленных файлов)
yum autoremove - удаление ненужных более пакетов
-----------------------------------------
createrepo - создание локальных репозиториев (createrepo ставится отдельно)
yum-cron - установка обновлений по расписанию (yum-cron устанавливается отдельно)
-----------------------------------------
yum -y install epel-release - добавление репозитория EPEL
-----------------------------------------
rpm -ivh package.rpm - установить пакет с выводом сообщений и прогресс-бара
rpm -ivh --nodeps package.rpm - установить пакет с выводом сообщений и прогресс-бара без контроля зависимостей
rpm -U package.rpm - обновить пакет без изменений конфигурационных файлов, в случае отсутствия пакета, он будет установлен
rpm -F package.rpm - обновить пакет только если он установлен
rpm -e package_name.rpm - удалить пакет
rpm -qa - отобразить список всех пакетов, установленных в системе
rpm -qa | grep httpd - среди всех пакетов, установленных в системе, найти пакет содержащий в своём имени "httpd"
rpm -qi package_name - вывести информацию о конкрентном пакете
rpm -qg "System Environment/Daemons" - отобразить пакеты входящие в группу пакетов
rpm -ql package_name - вывести список файлов, входящих в пакет
rpm -qc package_name - вывести список конфигурационных файлов, входящих в пакет
rpm -q package_name --whatrequires - вывести список пакетов, необходимых для установки конкретного пакета по зависимостям
rpm -q package_name --whatprovides - show capability provided by a rpm package
rpm -q package_name --scripts - отобразит скрипты, запускаемые при установке/удалении пакета
rpm -q package_name --changelog - вывести историю ревизий пакета
rpm -qf /etc/httpd/conf/httpd.conf - проверить какому пакету принадлежит указанный файл. Указывать следует полный путь и имя файла.
rpm -qp package.rpm -l - отображает список файлов, входящих в пакет, но ещё не установленных в систему
rpm --import /media/cdrom/RPM-GPG-KEY - ипортировать публичный ключ цифровой подписи
rpm --checksig package.rpm - проверит подпись пакета
rpm -qa gpg-pubkey - проверить целостность установленного содержимого пакета
rpm -V package_name - проверить размер, полномочия, тип, владельца, группу, MD5-сумму и дату последнего изменеия пакета
rpm -Va - проверить содержимое всех пакеты установленные в систему. Выполняйте с осторожностью!
rpm -Vp package.rpm - проверить пакет, который ещё не установлен в систему
rpm2cpio package.rpm | cpio --extract --make-directories *bin* - извлечь из пакета файлы содержащие в своём имени bin
rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm - установить пакет, собранный из исходных кодов
rpmbuild --rebuild package_name.src.rpm - собрать пакет из исходных кодов

20. Bash скрипты переменные \ параметры \ запуск программ



myscript1.sh
-------
#!/bin/bash
echo "hellow this message this script"
echo "Lets, show files this folder"
ls
echo "ls /etc/"
ls /etc/
#echo "run xterm"
#xterm &
echo "Done"
-------

sudo chmod u+x myscript1.sh - для того чтобы выполнить скрипт нужно дать права на исполнение +x
!!! bash myscipt.sh - права то нужны, но если натравить bash то он будет выполнен


script2.sh
----------
#!/bin/bash
mycomputer="SUPERPC"
myOS=`uname -a`

echo "This script name is $0"
echo "privet $1"
echo "Hello $2"

num1=50
num2=45
summa=$((num1+num2))
echo "$num1 + $num2 = $summa"

myhost=`hostname`
mygtw="8.8.8.8"

ping -c 4 $myhost
ping -c 4 $mygtw

echo -n "This is done..."
echo "Realy done"
----------

`name_comman` - передать команду - ` это скобка возле кнопки тильда ~
$0 - это зарезервированное значение имя самого файла скрипта
$1 - это первый параметр
$2 - это второй параметр
$3...... - далее параметр

bash myscript2.sh - права то нужны, но если натравить bash то он будет выполнен
sudo chmod u+x myscript2.sh  - для того чтобы выполнить скрипт нужно дать права на исполнение +x

bash myscript2.sh vasya kolia 



script3.sh
----------
#!/bin/bash
echo "superping $0"
echo "Нужно передать параметры!!"
echo "Первый параметр что пингуем ping   "
echo "Второй что traceroute"
echo "Третий  что host "
echo ">>>>>>>>>>>>>>>>Первый пошол $1"
ping -c 4 $1
echo ">>>>>>>>>>>>>>>>Воторй пошол $2"
traceroute  $2
echo ">>>>>>>>>>>>>>>>Третий пошол $3"
host $3
echo ">>>>>>>>>>>>>>>>Done"
----------


21. Скрипты bash \ if \ else \ case \ for \ while


myscript4.sh
------------
#!/bin/bash

if [ "$1" == "Vasya" ]; then
                       echo "Privet $1"
elif [ "$1" == "Trump" ]; then
                          echo "Hello $1"
else echo "Zadarova $1"
fi

x=$2

echo "Starting CASE selection......."
case $x in
        1) echo "This is one";;
        [2-9]) echo "Two-Nine";;
        "Petya") echo  "Privet $x";;
        *) echo "Parammetr Unknown, sorry!"
esac
------------

chmod a+x script4.sh

./myscript4.sh
./myscript4.sh Trump
./myscript4.sh Trump 3
./myscript4.sh Trump 7777 
./myscript4.sh Trump Petya
./myscript4.sh Vasya Petya
./myscript4.sh 333333333 8888888



myscript5.sh
------------
#!/bin/bash
read -p "Enter something Vasya, Trump, Petya, * : " y

if [ "$y" == "Vasya" ]; then
                       echo "Privet $y"
elif [ "$y" == "Trump" ]; then
                          echo "Hello $y"
else echo "Zadarova $y"
fi

echo "Please enter something"
echo "1, 2-9, Petya, *"
read x



echo "Starting CASE selection......."
case $x in
        1) echo "This is one";;
        [2-9]) echo "Two-Nine";;
        "Petya") echo  "Privet $x";;
        *) echo "Parammetr Unknown, sorry!"
esac
------------
chmod a+x myscript5.sh





myscript6.sh
------------
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
      echo "Current counter is $COUNTER"
      COUNTER=$(($COUNTER+1))
      # let COUNTER=COUNTER+1
      # let COUNTER+=1
done


for myfile in ls *.txt; do
       cat $myfile
done


for x in {1..10}; do
         echo "X = $x"
done


for (( i=1; i<=10; i++)); do
       echo "Nimber I = $i"
done

------------

-lt - меньше 
chmod a+x myscript6.sh



myscript7.sh
------------

summa=0

myFunction()
{

     echo  "This is text from function"
     echo  "first parameter is: $1"
     echo  "Second parametr is: $2"
     summa=$(($1+$2))

}



myFunction 50 10
echo "Summa = $summa"


------------