Skip to content
DragonDamagePublic

About

Linux теория + команды

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Latest commit

 

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

🐧 Linux - это операционная система с открытым исходным кодом, основанная на ядре Linux

Основные моменты, связанные с Linux:

История Linux был создан Линусом Торвальдсом в 1991 году как проект хобби. С течением времени он стал популярным и развился в операционную систему с открытым исходным кодом, привлекая множество разработчиков и сообществ
Дистрибутивы Linux доступен в различных дистрибутивах, таких как Ubuntu, Fedora, Debian и многих других. Дистрибутивы предлагают различные комбинации программного обеспечения и инструментов, чтобы удовлетворить потребности различных пользователей
Открытый исходный код Одна из ключевых особенностей Linux - это его открытый исходный код. Это означает, что любой может просматривать, изменять и распространять код операционной системы. Это способствует инновациям, сотрудничеству и быстрому исправлению ошибок
Утилиты и программное обеспечение Linux поставляется с множеством утилит и программного обеспечения, которые расширяют его функциональность. Это включает текстовые редакторы, компиляторы, интерпретаторы языков программирования, графические интерфейсы, серверы, базы данных и многое другое. Большинство из них также являются программами с открытым исходным кодом
Ядро Linux Ядро Linux является основой операционной системы. Оно управляет ресурсами компьютера, обеспечивает взаимодействие с аппаратным обеспечением и поддерживает различные функции, такие как управление памятью, планирование задач, файловая система и сетевые возможности
Многозадачность и многопользовательская поддержка Linux поддерживает многозадачность, что означает, что он может выполнять несколько задач одновременно. Он также поддерживает многопользовательскую среду, позволяя нескольким пользователям работать на одной системе одновременно
Командная строка Linux предоставляет мощную командную строку, которая позволяет пользователям выполнять различные задачи и управлять системой. Командная строка предлагает широкий спектр команд и утилит для управления файлами, процессами, сетью и другими аспектами операционной системы
Безопасность Linux известен своей высокой степенью безопасности. Открытый исходный код позволяет быстро обнаруживать и исправлять уязвимости, а также предоставляет возможность настройки системы безопасности в соответствии с потребностями пользователя
Файловая система Linux поддерживает различные файловые системы, такие как ext4, XFS, Btrfs и другие. Файловая система отвечает за организацию и управление файлами и папками на диске, а также за обеспечение доступа к данным
Сетевые возможности Linux обладает мощными сетевыми возможностями, которые позволяют подключаться к сети, обмениваться данными и предоставлять сетевые услуги. Он поддерживает протоколы TCP/IP, имеет встроенные сетевые утилиты и может работать как клиент и сервер
Linux 

Общие команды Linux:

uname -a                     # Показать всю информацию об операционной системе
hostnamectl                  # Информация о хосте
whoami                       # Под каким логином находимся
pwd                          # Где сейчас находимся
uptime                       # Посмотреть сколько по времени включена тачка
lscpu                        # Посмотреть информацию о процессоре
clear                        # Очистить экран консоли
ls -ali                      # Посмотреть подробную информацию о файлах в директории
echo hello linux             # Вывести текст
echo $PATH                   # Посмотреть директории в которых linux будет запускать команды
whereis snap                 # Посмотреть путь, где находится файл/ПО
locate snap                  # Посмотреть путь, где находится файл/ПО
find / -name "file.txt"      # Поиск файла везде
sudo reboot -f               # Перезагрузка в фоновом режиме
sudo shutdown                # Выключить машину
top                          # Диспечер задач ([Shift]+[P] фильтр по cpu, [Shift]+[M] фильтр по RAM, [V] отобразить процессы в виде древа, [Z] подсветить чуть покрасивее, [Shift]+[E] показать в КБ/МБ/ГБ)
htop                         # Диспечер задач с красивым отображением в % загрузки
atop                         # Диспечер задач с красивым отображением в % загрузки
free -h                      # Показать RAM общую и нагруженную
dmesg                        # Лог ядра Linux
sudo apt update              # Проверка обновлений
sudo apt install {program}   # Установка ПО
sudo apt upgrade             # Установка обновлений
sudo su / sudo -s            # Вход под рутом и остаться в нём
neofetch                     # Как свойства компьютера в Windows
lsscsi                       # Диспетчер устройств (dec/sd*)
type {command}               # Узнать тип команды
history                      # Показать историю всех команд пользователя
export variable              # Даёт возможность наследования выбранной переменной в дочерний процесс
man {command}                # Мануал по команде
info {command}               # Аналог man
set                          # Показать все переменные
ls | nl                      # (nl) Проставить нумерацию строк
date                         # Вывести информацию о времени
sleep                        # Задать таймер выключения системы
yes                          # Автозаполнение поля согласия на выполнение команды
watch -n 60 {command}        # Выполнять любую команду каждые 60 секунд

Установка и удаление программ:

sudo apt-get {program}        # Скачать и установить ПО с APT (убунту репозитория)
sudo apt-get remove {program} # Удалить ПО
wget https://program.ru/file  # Скачать что либо с интернета. Пример -> wget https://raw.githubusercontent.com/DragonDamage/Vagrant/main/Vagrantfile
sudo dpkg -i {program}        # Установить ПО скаченное с интернета
sudo dpkg -r {program}        # Удалить ПО скаченное с интернета
sudo apt remove {program}     # Удалить ПО, но оставить конфигурационные файлы
sudo apt purge {program}      # Удалить ПО полностью
sudo apt autoremove           # Удалить ненужные зависимости
sudo apt autoclean            # Удалить старые архивы
sudo apt install -f           # Починить зависимости, если где-то возникли проблемы

# Управление пакетами
apt list --installed          # Список всех установленных пакетов
apt list --upgradable         # Пакеты, которые можно обновить
apt show package_name         # Подробная информация о пакете
apt search search_term        # Поиск пакета по описанию
apt depends package_name      # Зависимости пакета
apt rdepends package_name     # Обратные зависимости (какие пакеты зависят от этого)

Работа с пользователями, группами и правами:

su {user_name}                           # Зайти под другим пользователем
exit                                     # Выйти из под пользователя
who                                      # Кто сейчас ещё онлайн из пользователей
w                                        # Показывает подключенных пользаков и что они делают
cat /etc/passwd                          # Все пользователи
cat /etc/group                           # Все группы и кто в них входит
cat /etc/shadow                          # Пароли пользаков
sudo cat /etc/sudoers                    # Пользователи с правами на команды
sudo chage {user_name}                   # Настроить пароль пользаку
id                                       # Кем мы сейчас работаем
id {user_name}                           # Посмотреть права пользователя
newgrp adm                               # Активная группа
sudo ls -al /home/user_name              # Показать файлы юзера
sudo adduser {user_name}                 # Создать побыстрому юзера и дать пароль
sudo userdel -r {user_name}              # Удалить юзера и (-r все его файлы)
sudo deluser {user_name} {group_name}    # Удалить пользователя из группы
sudo passwd {user_name}                  # Поменять пароль юзеру
sudo usermod -aG sudo {user_name}        # Добавить пользака в группу sudo
sudo usermod -aG adm {user_name}         # Добавить в список дополнительных групп адм пользователя
sudo groupadd {group_name}               # Создать группу
sudo groupdel {group_name}               # Удалить группу
passwd                                   # Сменить самому себе пароль
sudo chown -R {user}:{group} {file_name} # Изменить владельца файла или директории
sudo chgrp -R adm {file_name}            # Изменить владельца только группы adm
sudo chmod u=rwx,g=rw,o=r {file_name}    # Для владельца полные права (чтение, запись, исполнение), для группы (чтение,запись), для остальных (чтение) в name_file
sudo chmod +x {file_name}                # Дать права на исполнение для всех
sudo chmod 777 {file_name}               # Дать права на всё для всех
sudo chmod -R 777 /directory             # Дать права рекурсивно на все подпапки и файлы внутри директории
last                                     # Посмотреть кто заходил в систему из пользователей за последнее время
finger                                   # Показать пользователей в сети
sudo useradd -s /bin/bash -m -d /home/user_name user_name  # Создать пользователя

[CHMOD] комбинации разрешений для команды:

r (read)     # Позволяет просматривать содержимое файла/каталога
w (write)    # Позволяет изменять содержимое файла/каталога
x (execute)  # Позволяет выполнять файл как программу или скрипт

Вид разрешения               | Символьный код  |  Числовой код  |
Нет допуска	                 |       —         |       0        |
Чтение	                     |       r-	       |       4        |
Изменение	                 |      -w-        |       2        |
Запуск	                     |      -x	       |       1        |
Запуск + Изменение	         |      -wx	       |       3        |
Чтение + Запуск	             |      r-x        |       5        |
Чтение + Изменение	         |      rw-        |       6        |
Запуск + Изменение + Запуск	 |      rwx        |       7        |

Работа с директориями:

cd {name_directory}                # Перейти в директорию
cd ../                             # Перейти на директорию назад
ls -d */                           # Показать только директории
mkdir {name_directory}             # Создать директорию
mkdir dir{1..3}                    # Одной командой создать несколько директорий - создать dir1, dir2, dir3
cp -R {directory} {new_directory}  # Скопировать директорию (рекурсивно с вложенными в неё файлами) в другую директорию
rm -R {name_directory}             # Удалить директорию
du -hs {./name_directory}          # Посмотреть обьём директории
du -sh                             # Показать размер текущей директории в человеко-читаемом формате
du -sm                             # Показать размер в мегабайтах

Пояснение параметров:

  • · -s - показать только итоговую сумму (без деталей по поддиректориям)
  • · -h - человеко-читаемый формат (автоматически подбирает единицы)
  • · -m - показывать размер в мегабайтах
  • · --max-depth=N - ограничить глубину вложенности

Рекомендую использовать du -sh - это самый простой и понятный способ узнать общий размер текущей директории.

tree                               # Показать директории и файлы в виде дерева (очень полезная команда)
ncdu ./{name_directory}            # Посмотреть свободное и занятое место в директориях
find /* -type d -name "dir_name"   # Поиск папки по названию
ls -d [!t]*/                       # Поиск папок с исключением

Работа с файлами:

cat file.txt                  # Показать что в файле
nano -l file.txt              # Редактировать файл -l добавляет отображение строк (Ctrl+O сохранить изменения, Ctrl+X закрыть редактирование)
more file.txt                 # Показать что в файле (q для выхода из режима чтения)
less file.txt                 # Просмотр содержимого файла (/ для поиска, как ctrl+f в windows), (q для выхода)
touch file.txt                # Создать файл
cp file.txt ~/var/            # Скопировать файл в другую директорию
rm file.txt                   # Удалить файл
mv file.txt .new_file_name    # Переименовать файл (. сделать его скрытым)
mv file.txt ~/Desktop/        # Перенести файл в директорию (рабочий стол)
wc file.txt                   # Показать сколько: строк, слов, символов
wc -l file.txt                # Показать только количество строк
wc -w file.txt                # Показать только количество слов
wc -m file.txt                # Показать только количество символов
sort file.txt                 # cat + сортировка по алфавиту
sort -n file.txt              # cat + сортировка по цифрам
sort -h file.txt              # cat + сортировка по размеру
sort -u file.txt              # cat + сортировка с удалением дубликатов
cut -d ">" -f 3 file.txt      # cat + делиметр, какое поле
cat file.txt > new_file.txt   # Сохранить результат команды в файл
cat file.txt >> new_file.txt  # Сохранить и добавить результат команды в файл с уже существующим текстом
ln file.txt file_dupl.txt     # Дублировать файл (жесткая ссылка - ещё одно имя для того же inode)
echo file.txt                 # Вывести файл на консоль
echo ????                     # Вывести файлы с 4 символами
echo ????*                    # Вывести файлы 4 и больше символов
touch file.txt{01..10}        # Создать несколько файлов от 01 до 10
diff file1.txt file2.txt      # Сравнить содержимое файлов (c - изменённые строки, d - удалённые строки, а - новые строки)
file file.txt                 # Узнать точный формать файла
tac file.txt                  # cat в обратном порядке
uniq file.txt                 # cat без дублей
cut -c1-10 file.txt           # cat файла с первого символа по десятый
find /* -name file.txt        # Поиск файла file.txt по всем директориям
cat *.yml | grep -r "text"    # Найти и вывести файлы и их наименование, в которых есть text
find /* -type f -exec grep -l '127.0.0.1' {} \;  # Поиск файлов содержащих айпи-адрес 127.0.0.1
find /* -type f или d или l -size + 40k      # Поиск по f-файлу, d-директории или l-ссылке, и по размеру файла в килобайтах
ln -s /home/andrey/name_directory name_link  # Создать символическую ссылку
lsof                                         # Показать список всех открытых файлов для всех процессов
ll | tee file.txt                            # tee сохраняет вывод команды в файл
cat file.txt | xclip -selection clipboard    # Копирование содержимого файла в буфер обмена
xsel --output > output.txt                   # Вставить содержимое буфера обмена в файл
ls -l | xclip -selection clipboard           # Копирование вывода команды в буфер обмена

Сочетание клавиш + полезные команды:

*             # Означает все
?             # Означает воспринять один любой символ
-v            # verbose - показывать процесс выполнения команды
|             # Пайп - выполнить одну команду за другой
.             # Текущая директория
..            # Предыдущая директория
&&            # Выполнить команды следом друг за другом
.Directory    # Значит конфигурационные директории
[TAB]         # Показывает варианты автозавершения команды
[CTRL] + [R]  # Поиск введённых команд по истории
[CTRL] + [C]  # Завершить исполнение процесса или выполнения команды
[CTRL] + [Z]  # Продолжить выполнять процесс в фоновом режиме
%             # Возобновить процесс из фонового режима
[Ctrl] + [A]  # Для быстрого перехода в начало строки
[Ctrl] + [E]  # Для быстрого перехода в конец строки
sudo visudo или nano /etc/sudoers  # Добавить строчку в самый низ: andrey ALL=(ALL:ALL) NOPASSWD: ALL  # теперь пользователь может выполнять sudo без пароля
cd /var/log $ head syslog          # Перейти в папку и показать первые 10 строчек лога
cd /var/log $ tail -n 20 syslog    # Перейти в папку и показать последние  (-n 20) 20 строк
nano /etc/ssh/sshd_config          # Настройка ssh - отключить вход под root → (PermitRootLogin yes меняем на no); изменить порт по умолчанию → (Port 22 меняем на 2222)
nano ~/.bashrc                     # Для отображения веток GIT - В последнюю строку вставляем: PS1='\[\033[0;32m\]\[\033[0m\033[0;32m\]\u\[\033[0;36m\] @ \[\033[0;36m\]\h \w\[\033[0;32m\] \$\[\033[0m\033[0;32m\] ▶\[\033[0m\] '

Важные папки:

cat /etc/passwd            # Все пользователи
cat /etc/shadow            # Пароли пользаков
cat /etc/sudoers           # Пользователи с правами на команды (например sudo)
cat /etc/apt/sources.list  # Репозиторий ubuntu
cd /var/log/               # Хранение логов в данной папке
cat /etc/hosts             # Файл с параметрами DNS
cat /etc/fstab             # Файловые системы
cat /etc/hostname          # Имя ПК
cat /etc/hosts             # Посмотреть имя и ip локалхоста и нашей тачки
cat /etc/rsyslog.conf      # Файл с настройками логирования
cat /etc/crontab           # Файл crontab
cat /var/log/kern.log      # Логи ядра
cat /etc/netplan/00-installer-config.yaml  # Файл с конфигами сети

Работа с архивами:

wget https://....tar.gz               # Скачать архив в директорию
tar cvf {name.tar.gz} /name_directory # Создать архив директории с названием name.tar
tar tf {name.tar}                     # Посмотреть что находится внутри архива
tar xvf {name.tar}                    # Разархивировать архив (или tar -xvpf file.tar)
gzip {name.tar}                       # Запаковать/скомпрессировать файл
gunzip {name.tar.gz}                  # Распаковать файл
xz {name.tar}                         # Средне запаковать/скомпрессировать файл
unxz {name.tar.xz}                    # Распаковать файл
bzip2 {name.tar}                      # Сильно запаковать/скомпрессировать файл
bunzip2 {name.tar.bz2}                # Распаковать файл
tar cvzf {name.gz} /name_directory    # Создать архив директории и запаковать его с помощью gzip
tar xvf {name.gz}                     # Распаковать файл gz
tar cvJf {name.xz} /name_directory    # Создать архив директории и запаковать его с помощью xz
tar xvf {name.xz}                     # Распаковать файл xz
tar cvjf {name.bz2} /name_directory   # Создать архив директории и запаковать его с помощью bzip
tar xvf {name.bz2}                    # Распаковать файл bz2
zip -r {name.zip} /name_directory     # Создать архив zip директории с названием name.zip
unzip {name.zip}                      # Распаковать файл zip

Мониторинг ресурсов:

vmstat 1 5                     # Статистика по памяти, процессам, вводу-выводу (каждую секунду, 5 раз)
iostat -x 1                    # Детальная статистика по дискам с задержками
mpstat -P ALL 1                # Загрузка каждого ядра процессора
sar -u 1 3                     # Сбор статистики CPU (если установлен sysstat)
ps aux --sort=-%mem | head -10 # Топ-10 процессов по потреблению памяти
ps aux --sort=-%cpu | head -10 # Топ-10 процессов по потреблению CPU
lsof -i                        # Список всех открытых сетевых соединений
lsof -u username               # Открытые файлы конкретного пользователя
lsof +D /path/to/dir           # Какие процессы используют файлы в директории
ss -tulpn                      # Сокеты с PID и программой (более современный чем netstat)
ss -tunap | grep LISTEN        # Только слушающие порты

[ps] Работа с процессами:

ps                       # Посмотреть запущенные процессы
ps -u                    # Посмотреть запущенные процессы под пользаком
ps -afx                  # Показать все запущенные процессы всех пользователей
ps -aux                  # Показать все запущенные процессы всех пользователей
ps auf | grep ssh        # Показать пользователей подключенных по ssh
kill -9 {PID ps -aux}    # Убить процесс (KILL)
kill -15 {PID ps -aux}   # Корректно завершить процесс (TERM)
ps -T -p {№_процесса}    # Показать потоки процесса
ps -efl                  # Посмотреть список процессов с PID
jobs                     # Посмотреть есть ли приостановленные процессы
nice -n 3 bash           # Запустить bash с приоритетом процесса 3 (чем меньше число, тем выше приоритет. -20 — максимум, 19 — минимум)
ps I                     # Показать процессы по приоритетам
time wget https://ya.ru  # Секундомер позволяющий подсчитать время исполнения процесса (real - время исполнения, user - сколько времени пользователь занял у CPU, sys - сколько времени CPU было потрачено системой)

# Дополнительные команды для управления процессами
nohup {command} &        # Запустить процесс, который продолжит работу после выхода
disown                   # Отвязать процесс от текущей сессии
fg %1                    # Вернуть процесс из фона в foreground
bg %1                    # Запустить остановленный процесс в фоне
pkill {process_name}     # Убить процесс по имени
pgrep -l {process_name}  # Найти PID процесса по имени
killall {process_name}   # Убить все процессы с указанным именем
wait                     # Дождаться завершения всех фоновых процессов

[systemctl] Работа с сервисами:

systemctl list-units --type=service --state=running     # Просмотр всех активных сервисов
systemctl list-units --type=service --all               # Просмотр всех сервисов (включая неактивные)
systemctl list-units --state=failed --type=service      # Посмотреть все неудачно загруженные сервисы
systemctl list-unit-files --state=failed --type=service # Посмотреть все неудачно загруженные сервисы
systemctl list-units --type=service --state=running --no-pager --no-legend | awk '{print $1}' | xargs -I {} systemctl status {} --no-pager --no-legend  # Просмотр всех активных серисов с выводом времени запуска
systemctl list-units --type=service --state=running --no-pager --no-legend | awk '{print $1}' | xargs -I {} sh -c "echo {}; systemctl status {} --no-pager --no-legend | grep 'Active:' | awk '{print \$2, \$3, \$4, \$5, \$6}'"  # То же самое, только вывести ещё дату
systemctl show service_name.service      # Посмотреть настройки сервиса
systemctl --type=service | grep failed   # Проверка сервисов на ошибки 
---
systemctl status name_service.service     # Показать статус сервиса
systemctl status -l name_service.service  # Показать более подробный статус сервиса
systemctl start name_service.service      # Запустить сервис
systemctl stop name_service.service       # Остановить сервис
systemctl restart name_service.service    # Рестарт сервиса
systemctl enable name_service.service     # Всегда запускать сервис при включении ПК

[systemctl] Работа с сервисами systemd (углублённо)

# Управление юнитами systemd
systemctl daemon-reload        # Перечитать конфигурацию юнитов после изменений
systemctl mask service_name    # Полностью запретить запуск сервиса
systemctl unmask service_name  # Снять запрет
systemctl edit service_name    # Создать или редактировать drop-in файл для сервиса
systemctl show service_name    # Показать все параметры юнита
systemctl cat service_name     # Показать содержимое файла юнита
systemd-analyze blame          # Какие сервисы дольше всего загружаются
systemd-analyze critical-chain # Цепочка зависимостей при загрузке
journalctl -f                  # Следить за логами в реальном времени (все сервисы)
journalctl --disk-usage        # Сколько места занимают логи
journalctl --vacuum-size=100M  # Очистить логи, оставив 100МБ

[journalctl] Работа с логами сервисов:

journalctl -e name_service.service   # Смотрим самые свежие логи
journalctl -eu name_service.service  # -eu Фильтр по определенному юниту
journalctl --all --since "5 minutes ago" --no-tail --no-pager -p 7 -f                # Смотрим логи за последние 5 минут
journalctl --all --since "5 minutes ago" --no-tail --no-pager -p 7 -f | grep 'ERROR' # Смотрим логи за последние 5 минут с 'ERROR'
journalctl --all --since "2024-07-09 12:00:00" --until "2024-07-09 21:00:00" --no-tail --no-pager -p 7 -u name_service.service > logs_name_service.txt  # Самый ТОП по логам
journalctl -eu name_service.service --since today          # Лог за сегодня
journalctl -eu name_service.service --since "2 hours ago"  # Лог за последние 2 часа
journalctl -a --since today | grep <text> > logs.txt       # Логи по grep по логам всех сервисов

# Дополнительные возможности работы с логами
tail -f /var/log/syslog                   # Следить за системным логом в реальном времени
tail -f /var/log/auth.log                 # Следить за попытками входа в систему
grep "Failed password" /var/log/auth.log  # Поиск неудачных попыток входа
logger "Test message"                     # Отправить сообщение в системный лог
logrotate -f /etc/logrotate.conf          # Принудительно выполнить ротацию логов

[ip] [ss] [netstat] Работа с сетью и портами:

ifconfig           # Вся информация по сети
ip addr show       # Показать адаптеры и ip
ip -c a            # Инфа по сети
ip -c a | grep mtu # Посмотреть MTU
traceroute         # Куда пересылаются пакеты с промежуточными маршрутизаторами
route              # Куда пересылаются пакеты
ping 8.8.8.8       # Достучаться по сети до ip
host -t a ya.ru    # Показать ip сайта
dig ya.ru          # Показать ip сайта (подробнее)
mtr -b google.com  # Показать полную маршрутизацию и ip адрес хоста
netstat            # Показать открытые порты
lsof               # Показать открытые порты
sudo ufw allow 22  # Открыть порт
ip -c r            # Показать проведеные ip
ss -nutlp          # Показать какие сокеты открыты
ss -tulpan         # Полностью все открытые подключения
resolvectl         # Посмотреть параметры DNS
dig 8.8.8.8        # Посмотреть параметры DNS
dig -t mx ya.ru    # Посмотреть почтовую запись
curl -Lv ya.ru     # Отправить HTTP запрос на сервер
netstat -tuln | grep 9200        # Проверить свободный ли порт
cat /etc/services | grep -i 9200 # Проверить свободный ли порт
curl -v telnet://127.0.0.1:22    # Проверить доступность удаленного порта

Работа с переменными окружения:

echo $HOME                  # Домашняя директория текущего пользователя
echo $SHELL                 # Текущая оболочка
echo $USER                  # Имя текущего пользователя
export MY_VAR="some value"  # Установить переменную
unset MY_VAR                # Удалить переменную
env                         # Показать все переменные окружения
set | grep MY_VAR           # Поиск переменной (включая локальные)
source ~/.bashrc            # Перечитать конфигурацию оболочки

CURL [Client URL]:

curl https://link.ru           # Get запрос на чтение HTML страницы
curl -X GET https://link.ru    # Get запрос на чтение HTML страницы
curl -I -X GET https://link.ru # Get запрос на статус и сервер
curl -Lv 127.0.0.1             # Отправить HTTP запрос на сервер

SSH [Secure Shell Protocol]:

sudo apt-get install openssh-server       # Ставим ssh-сервер на тачку
sudo systemctl status ssh                 # Проверить работает ли сервис ssh
sudo systemctl start ssh                  # Включить сервис ssh
ssh <you_ip>                              # Обычный способ подключиться по ssh к тачке
ssh -p 22 user_name@you_ip                # Подключиться по ssh к тачке с портом, user_name и айпишником
ssh -i C:\Users\user_name\key.pem         # Подключение по ssh с помощью ключа .pem
exit                                      # Выйти из сессии
ssh -L 9000:localhost:8000 {server_name}  # Пробросить порт 8000 с сервера localhost на нашу тачку с портом 9000 (теперь приложение, которое было на 8000 порту мы пожем глянуть на нашей тачке по порту 9000)

# SSH-агент для управления ключами
eval $(ssh-agent)         # Запустить SSH-агент
ssh-add ~/.ssh/id_rsa     # Добавить ключ в агент
ssh-add -l                # Список загруженных ключей
ssh-add -d ~/.ssh/id_rsa  # Удалить ключ из агента
ssh-add -D                # Удалить все ключи
ssh -T git@github.com     # Проверить подключение к GitHub

Генерация ключей ssh (ходим на тачку без пароля):

0. Проверяем что на серваках включена аутентификация по ключам: PubkeyAuthentication yes
cat /etc/ssh/sshd_config | grep PubkeyAuthentication

1 Вариант (автоматически)
ssh-keygen -t rsa -b 4096  # Генерим ключи на нашем АРМ
ssh-copy-id domain\\username@server_ip  # Копируем ключи с нашего АРМ на удаленный server_ip

2 Вариант (вручную)
ssh-keygen                 # Сгенерировать пару ключей RSA формата (со стороны АРМа)
ssh-keygen -t ed25519      # Сгенерировать пару ключей более нового формата (со стороны АРМа)
ssh-copy-id                # Переносим ключ паблик вручную в /.ssh в файл authorized_keys (далее нужно было перелогиниться)
mkdir .ssh                 # Если на сервере нет скрытой директории .ssh, то создаем её
nano .ssh/authorized_keys  # Вставляем public-key на сервер
chown -R {NAME:NAME} /home/user_name/.ssh  # Делаем все файлы в директории от создателя {NAME}
chmod 700 ~/.ssh           # Даём права доступа на папку
chmod 644 ~/.ssh/*         # Даём права доступа на все файлы
cd /etc/ssh → sshd_config  # Можно изменить порт (на 61022 например)
---

Если много серверов, то создаем скрипт:
1. Создаем список IP-адресов серверов:
nano servers.txt  # Вставляем списком
2. Пишем скрипт:
nano script_ssh.sh
---
#!/bin/bash
for server in $(cat servers.txt); do
    ssh-copy-id domain\\username@$server
done
---
3. Запускаем скрипт:
./script_ssh.sh

[GREP] and [AWK]:

grep text ./*                             # Поиск файлов, в которых есть текст text, в текущей директории
grep -i text ./*                          # Поиск файлов, в которых есть текст text, в текущей директории (-i означает игнорировать регистр)
grep -ri text *                           # Поиск файлов, в которых есть текст text (-i означает игнорировать регистр, -r означает рекурсивный поиск)
grep -rnw '/' -e "text"                   # Поиск файла по тексту на всём ПК
grep andrey /etc/* &> all_log.txt         # Отправить все ответы в файл
grep andrey /etc/* > good.txt             # Отправить хорошие ответы в файл
grep andrey /etc/* 2> errors_file.txt     # Отправить плохие ответы в файл
grep andrey /etc/* 2> /dev/null           # Отправить в никуда
grep andrey /etc/* > good.txt 2> bad.txt  # Отправить хорошие ответы в файл good, а плохие ответы в файл bad
nano file.txt -> 1 2 3 , cat file.txt | awk '{print $2}'  # awk выбирает данные по столбцам

Разбор [ls -l]:

-rwxrw-r-- 1 andrey andrey 1024 Nov 22 18:34 file.txt  # Пример
-    # Означает файл
d    # Означает директория
l    # Означает линк (ссылка)
rwx              # Права на r-чтение, w-редактирование, x-исполнение
rwx|rw-|r--      # Первые права доступа к пользователю, вторые права доступа пользователям, третьи права доступа ко всем
1 или 2 и более  # Означает количество линков
andrey           # Пользователь и группа кто создал

Разбор [top]: Вывод команды $ top

top - 10:06:29 up 12 days,  1:58,  2 users,  load average: 6.25, 4.99, 5.16
Tasks: 665 total,   2 running, 663 sleeping,   0 stopped,   0 zombie
%Cpu(s):  3.7 us,  7.1 sy,  0.0 ni, 87.2 id,  0.0 wa,  0.8 hi,  0.4 si,  0.9 st
MiB Mem :  64254.7 total,   1252.7 free,  20476.9 used,  43055.4 buff/cache
MiB Swap:   4096.0 total,   3974.3 free,    121.7 used.  43777.8 avail Mem

Первая строка - Общая информация о системе

top - 10:06:29 up 12 days, 1:58, 2 users, load average: 6.25, 4.99, 5.16

Параметр Значение Расшифровка
top 10:06:29 Текущее время системы
up 12 days, 1:58 Время непрерывной работы системы (uptime) - 12 дней, 1 час, 58 минут
users 2 Количество залогиненных пользователей
load average 6.25 Средняя нагрузка за последнюю 1 минуту
load average 4.99 Средняя нагрузка за последние 5 минут
load average 5.16 Средняя нагрузка за последние 15 минут

Вторая строка - Состояние процессов (Tasks)

Tasks: 665 total, 2 running, 663 sleeping, 0 stopped, 0 zombie

Параметр Значение Расшифровка
total 665 Общее количество процессов и потоков
running 2 Активно выполняющиеся процессы
sleeping 663 Процессы в состоянии ожидания
stopped 0 Остановленные процессы (по сигналу)
zombie 0 Зомби-процессы (завершились, но не освободили ресурсы)

Третья строка - Использование CPU в процентах

%Cpu(s): 3.7 us, 7.1 sy, 0.0 ni, 87.2 id, 0.0 wa, 0.8 hi, 0.4 si, 0.9 st

Параметр Значение Расшифровка
us (user) 3.7% Процессы пользовательского пространства
sy (system) 7.1% Системные процессы ядра
ni (nice) 0.0% Процессы с измененным приоритетом (nice)
id (idle) 87.2% Простой процессора
wa (iowait) 0.0% Ожидание ввода-вывода (диск, сеть)
hi (hardware interrupts) 0.8% Аппаратные прерывания
si (software interrupts) 0.4% Программные прерывания
st (steal time) 0.9% Время, украденное гипервизором (виртуализация)

Четвертая строка - Физическая память (RAM)

MiB Mem : 64254.7 total, 1252.7 free, 20476.9 used, 43055.4 buff/cache

Параметр Значение Расшифровка
total 64254.7 MB Общий объем RAM (~64 ГБ)
free 1252.7 MB Полностью свободная память
used 20476.9 MB Используемая процессами память (~20 ГБ)
buff/cache 43055.4 MB Память под буферы и кэш (~43 ГБ)

Пятая строка - Своп (Swap) и доступная память

MiB Swap: 4096.0 total, 3974.3 free, 121.7 used. 43777.8 avail Mem

Параметр Значение Расшифровка
Swap total 4096.0 MB Общий объем свопа (4 ГБ)
Swap free 3974.3 MB Свободный своп
Swap used 121.7 MB Используемый своп (очень мало)
avail Mem 43777.8 MB Доступно для новых процессов (~43.8 ГБ)

Работа с дисками:

fdisk -l                        # Показать информацию о разделах на жестком диске
lsblk                           # Показать жесткие диски и другие устройства хранения (свободное место на примонтируемых дисках)
smartctl -a /dev/sda            # Показать полное состояние конкретного диска
df -h / df -kh                  # Показать общий размер файловой системы, использованное и доступное место
du -skh dir/                    # Показать сколько весит папка
du -h -d 1                      # Показать размер всех файлов и директорий в текущей директории
du -h -d 1 /you/dir             # Показать размер файлов и директорий внутри определяемой директории
du -h -a | sort -h -r           # Показать размер всех файлов и всех директорий с сортировкой
du -h | awk '$1 > 1M' | sort -h # Показать файлы и папки с размером и сортировкой по возрастанию с указанием от какого размера МБ
df -i                           # Показать иноды по дискам
cfdisk /dev/sdb                 # dos, создаем партицию диска
mkfs.ntfs -f /dev/sdb1          # Форматировать диск
nano /etc/fstab                 # /dev/sdb1 /media/hdd ntfs default 0 0  # делаем автомонтирование диска
mount /media/hdd                # Монитруем диск
ln -s /media/hdd ~/Desktop/HDD  # Создаём символическую ссылку с диском на рабочем столе
parted -l                       # Посмотреть таблицу разделов системы
iostat                          # Показать загрузку дисковой подсистемы
ftp                             # Передача данных другой системе
ncdu -x                         # Покажет, что место занимает и можно походить по директория посмотреть

Инструкция по созданию и монтированию дисков:

sudo fdisk -l        # Посмотреть диски подключенные к системе
sudo fdisk /dev/sdb  # Создаём новые разделы
n                    # Создаём новый
[enter]              # Номер раздела 1
[enter]              # Первый сектор 2048
+1G                  # Размер раздела
w                    # Сохранить правки

sudo mkfs -t ext4 /dev/sdb1                       # Задаём файловую систему (ext4 linux),(ntfs для windows),(vfat для windows и macos), (bfs linux)
sudo mount   -t ext4 /dev/sdb1 /home/ubuntu/mnt   # Монтируем диск в том в заранее созданную папку mnt

Работа с планировщиком задач (cron):

crontab -l                    # Показать текущие задачи пользователя
crontab -e                    # Редактировать запуск по расписанию в системе
crontab -r                    # Удалить все задачи пользователя
crontab -u username -e        # Редактировать задачи другого пользователя
systemctl status cron         # Проверить статус планировщика

# Формат crontab:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday=0 or 7)
# │ │ │ │ │
# * * * * * command_to_execute

# Примеры:
*/5 * * * * /path/to/script   # Каждые 5 минут
0 2 * * * /path/to/backup     # Каждый день в 2:00
0 9 * * 1-5 /path/to/work     # В 9:00 по будням
@reboot /path/to/startup.sh   # При каждой загрузке системы

Команды [GRUB]:

grub> ls                            # Посмотреть диски
grub> set prefix=(hd0,1)/boot/grub  # Взять оба диска и загрузить boot раздел
grub> set root=(hd0,1)              # Запустить это от рута
grub> ls boot/grub                  # Посмотреть grub.cfg
grub> insmod ext2                   # Обновить grub (ext2 - файловая сисиетма)
grub> insmod normal                 # Перевести режим grub в норм режим
grub> normal                        # Запуск grub

[base64]:

echo -n "Password" | base64             # Кодировать
Вывод: UXdlcnzNDU2
echo -n "UXdlcnzNDU2" | base64 --decode # Декодировать
Вывод: Password

Кодирование/Декодирование переменных в Ansible:

sudo ansible-vault decrypt file.txt  # Расшифровать
sudo ansible-vault edit file.txt     # Редактировать
sudo ansible-vault encrypt file.txt  # Зашифровать 

Just_For_Fun:

sudo ls -la -R /  # Пролистать все диски 
sudo rm -R /      # Удалить все что есть на тачке (НИКОГДА НЕ ИСПОЛЬЗУЙТЕ)

[Scripts]:

./script.sh               # Запустить скрипт
chmod 777 script_name.sh  # Дать права на запуск скрипта
bash script_name.sh       # Запуск скрипт, если нет прав X
Примеры скриптов:

# переменные и команды
#!/bin/bash
mycomp="HONOR"
myOS=`uname -a`
echo "This script name is $0"
echo "Q $1"
echo "Q $2"
num1=10
num2=20
summ=$((num1+num2))
echo "$num1 + $num2 = $summ"
myhost=`hostname`
mygtw="8.8.8.8"
ping -c 4 $myhost
ping -c 4 $mygtw
echo -n "This is done..."
echo "DONE"

# if/elif/else/fi /read/case/esac
#!/bin/bash

if   [ "$1" == "Andrey" ]; then
	echo "Q $1"
elif [ "$1" == "Igor" ]; then
	echo "Q $1"
else echo "NoQ $1"
fi
read -p "Enter you parameter:" x
x=$2
echo "Starting CASE selection..."
case $x in
		1) echo "This is one";;
	[2-9]) echo "Two-Nine";;
 "Andrey") echo "Q $x";;
		*) echo "NO_PARAMETER"
esac

# while/-lt меньше или равно/done/for
#!/bin/bash

COUNTER=0
while [ $COUNTER -lt 10 ]; do
		echo "Current counter is $COUNTER"
		COUNTER=$(($COUNTER+1))
done

# ls *.txt | cat *.txt
for file in `ls *.txt`; do
	  cat $file
done
# for in RANGE
for x in {1..10}; do
		echo "X = $x"
done
# for like java style 
for (( i=1; i<=10; i++ )); do
		echo "№ I = $i"
done

# Function
#!/bin/bash

Function()
{
        echo "This is text from Function"
        echo "First parameter is: $1"
        echo "Second parameter is: $2"
}

Function 7 Andrey

About

Linux теория + команды

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages