Админские угодья
1.46K subscribers
446 photos
40 videos
219 links
Всё для системного администратора

По всем вопросам : @Sofiia_artamonova
Download Telegram
Стандартные инструменты для диагностики системы Linux

Ядро:

* perf — (в прошлом performance counters for Linux) — доступ к различным внутренним счётчикам ядра; незаменимый инструмент для выполнения профайлинга ядра/операционной системы
* ftrace — трассировщик вызовов функций внутри ядра Linux
* stap — скриптовый язык и инструмент для комплексной диагностики ядра и процессов Linux
* lttng — (Linux Trace Toolkit Next Generation) инструмент для трассировки ядра, программ и библиотек Linux
* bcc (BPF) — (сравнительно) новый и очень мощный инструмент для трассировки и манипуляции ядром Linux, основанный на Berkeley Packet Filter, позволяет делать космические вещи

Ввод/вывод:

* iostat (sysstat) — статистика ввода/вывода по заданному устройству (количество операций записи/чтения в единицу времени, скорость записи/чтения)
* pidstat (sysstat) — нагрузка на процессор, память и устройства от конкретного процесса (заданного по имени или номеру)
* pcstat — использование кэша (какой процент файла попадает в кэш, какой нет)
* lsof — информация об открытых процессом файлах
blktrace

Системные и библиотечные вызовы:

* strace — информация о системных вызовов, выполняемых процессом, позволяет понять или по крайней мере лучше разобраться, почему процесс висит или потребляет много ресурсов
* ltrace — трассировка библиотечных вызовов (которые не обязательно являются системными)

Аппаратные счётчики:

* tiptop — информация о процессах в реальном времени, похожа на top, но в отличие от него данные преимущественно берутся с аппаратных счётчиков
* numastat — просмотр информации об использовании памяти процессами/процессорами в системах с NUMA-архитектурой

Сеть:

* netstat — классический инструмент для просмотра конфигурации сети (сокетов, интерфейсов и так далее)
* ss — socket statistics, позволяет получить информацию об открытых сокетах и их состоянии (похожа на netstat, но умеет больше)
* ethtool — просмотр настроек и состояния ethernet-интерфейса
* snmpget — получение данных по SNMP
* lldptool — настройка LLDP и просмотр данных LLDP
* nicstat — статистика использования сетевой карты (сетевого интерфейса)
* ip — конфигурация и статистика стека TCP/IP Linux
* ifstat — статистика использования сетевого интерфейса в реальном времени

Процессы:

* top — информация о наиболее активных (наиболее ресурсоёмки) процессах + общая информация о системе
* vmstat — данные об использовании виртуальной памяти
* free — информация о свободной памяти, кэше, буферах
* slabtop — информация о заполнении SLAB-кэша

Процессор:

* mpstat (sysstat) — общая информация об использовании процессора (одного или всех процессоров)
* turbostat (kernel-tools) — информация о топологии процессора, частоте, питании, температуре
* rdmsr — (Read from Model Specific Register) чтение из моделезависимых регистров (позволяет оценить использование LLC-кэша и прочее)

Универсальные:

* sar — (system activity report) информация о системной активности в реальном времени (диск, память, процессор и так далее)
* dstat — универсальный инструмент для сбора информации о системе (vmstat, iostat, netstat, ifstat и ещё много других в одном флаконе)
* dmesg — журнал сообщений ядра с момента загрузки системы
* /proc — псевдофайловая система предоставляющая доступ к внутренним данным/счётчикам ядра
* sysdig — универсальный инструмент для сбора и анализа данных о системе (сотни различных источников скомбинированные вместе)
3
Трюки терминала Bash

Полезные комбинации клавиш (хоткеи) и небольшие хитрости, которые сделают Вашу работу в Linux более эффективной.

Горячие клавиши" Bash с Ctrl
Ctrl + n — то же самое, что и стрелка вниз.
Ctrl + p — то же самое, что и стрелка вверх.
Ctrl + r — поиск по предыдущим командам из истории команд (history). Продолжайте нажимать Ctrl + r, чтобы искать дальше. Ctrl + Shift + r — поиск в другую сторону.
Ctrl + s — остановить вывод в терминал.
Ctrl + q — восстановить вывод в терминал после Ctrl + s.
Ctrl + a — перейти к началу строки (аналог клавиши Home).
Ctrl + e — перейти к концу строки (аналог клавиши End).
Ctrl + d — если вы ввели что-то, то Ctrl + d удаляет символ под курсором. В противном случае означает конец ввода и завершает текущую сессию Bash.
Ctrl + k — удалить весь текст от курсора до конца строки.
Ctrl + x + backspace — удалить весь текст от начала строки до курсора.
Ctrl + t — переставить символ до курсора на символ под курсором. Нажмите Esc + t для перестановки двух слов до курсора.
Ctrl + w — удалить слово до курсора; затем Ctrl + y, чтобы вставить его.
Ctrl + u — удалить строку перед курсором; Ctrl + y для вставки его.
Ctrl + _ — отменить ввод.
Ctrl + l — очищает окно терминала. То же самое, что и clear.
Ctrl + x + Ctrl + e — запускает редактор, определённый в переменной $EDITOR, для ввода команды. Полезно для многострочных команд.

Изменить заглавные на строчные и наоборот
Esc + u — преобразовать буквы от курсора до конца строки в заглавные буквы.
Esc + l — преобразовать буквы от курсора до конца строки в нижний регистр.
Esc + c — заменить букву под курсором на заглавную.

Запустить предыдущую команду ещё раз
Запустить команду из истории по номеру (например, 53)
!53
!! — запуск последней команды.
sudo !! — запустить предыдущую команду с sudo.

Запускает последнюю команду и меняет какой-то параметр. Например, меняем "aaa" на "bbb":
# Последняя команда: echo 'aaa'
$ ^aaa^bbb

$ echo 'bbb'
bbb


Важно: предыдущая команда заменит только первое вхождение "aaa". Если вы хотите заменить все вхождения, используйте :&:
^aaa^bbb^:&
# или
!!:gs/aaa/bbb/


Запустить последнюю команду, которая начинается с...
Например, до этого в истории команд была команда cat filename:
!cat
# или
!c


— запускает cat filename ещё раз.

Указание файлов по шаблону в Bash
/etc/pa*wd/etc/passwd — символ * означает "несколько любых символов".
/b?n/?at/bin/cat — символ ? означает "один любой символ".
ls -l [a-z]* — вывести список файлов, содержащих только буквы латинского алфавита. В квадратных скобках [] перечисляются символы, которые будут искаться. А символ * после [] означает "хоть сколько раз".
ls {*.sh,*.py} — вывести все .sh и .py файлы. {} используется для группировки нескольких шаблонов по принципу "или".

Полезные переменные окружения Bash
Короткие переменные:
$0 — оболочка командной строки или путь до запускаемого файла.
$1, $2, $3, ... — аргументы запуска скрипта.
$# — число аргументов, переданных в скрипт из терминала.
$? — код завершения последней команды.
$- — текущие опции, установленные для оболочки.
$$ — идентификатор текущего процесса.
$! — идентификатор процесса, завершённого последним.

Более длинные, но тоже полезные переменные:
$DESKTOP_SESSION — текущий менеджер дисплеев.
$EDITOR — редактор текста по умолчанию.
$LANG — используемый системой язык.
$PATH — список директорий, в которых будут искаться исполняемые файлы.
$PWD — текущая директория.
$SHELL — текущая оболочка командной строки.
$USER — имя текущего пользователя.
$HOSTNAME — имя текущего хоста (компьютера).
5👍2
Bash. Проверки файлов
Kоманды позволяют проверять различные условия, касающиеся файлов

-d file # Проверяет, существует ли файл, и является ли он директорией.
-e file # Проверяет, существует ли файл.
-f file # Проверяет, существует ли файл, и является ли он файлом.
-r file # Проверяет, существует ли файл, и доступен ли он для чтения.
-s file # Проверяет, существует ли файл, и не является ли он пустым.
-w file # Проверяет, существует ли файл, и доступен ли он для записи.
-x file # Проверяет, существует ли файл, и является ли он исполняемым.
file1 -nt file2 # Проверяет, новее ли file1, чем file2.
file1 -ot file2 # Проверяет, старше ли file1, чем file2.
-O file # Проверяет, существует ли файл, и является ли его владельцем текущий пользователь.
-G file # Проверяет, существует ли файл, и соответствует ли его идентификатор группы идентификатору группы текущего пользователя.

#!/bin/bash

mydir=/home/likegeeks

if [ -d $mydir ] # если файл сущетсвует и он является директорией
then
echo "The $mydir directory exists" # выводим сообщение
cd $mydir # переходим в него
ls # отображаем содержимое
else # ИНАЧЕ
echo "The $mydir directory does not exist"
fi
2👍2
📌 Шпаргалка по перенаправлению команд в командной строке Linux
1
📌 Шпаргалка по iptables в Linux
3
Работа с файлами и папками PowerShell

Перечисление всех файлов и папок в папке

Все элементы можно получить непосредственно в папке с помощью Get-ChildItem. Для отображения скрытых и системных элементов добавьте необязательный параметр Force. Например, эта команда отображает прямое содержимое диска C:PowerShell.
Get-ChildItem -Path C:\ -Force


Команда перечисляет только непосредственно содержащиеся элементы, например команду dir в cmd.exe оболочке UNIX или ls в ней. Чтобы отобразить элементы в вложенной папке, необходимо указать параметр Recurse . Следующая команда выводит список всех элементов на C: диске:
Get-ChildItem -Path C:\ -Force -Recurse


Командлет Get-ChildItem позволяет отфильтровать элементы с помощью параметров Path, Filter, Include и Exclude, но обычно осуществляется лишь фильтрация по имени. Вы можете выполнять сложную фильтрацию на основе других свойств элементов с помощью Where-Object.
Следующая команда находит все исполняемые файлы в папке Program Files, которые были изменены после 1 октября 2005 года, и они не меньше 1 мегабайт или больше 10 мегабайт:
Get-ChildItem -Path $env:ProgramFiles -Recurse -Include *.exe |
Where-Object -FilterScript {
($_.LastWriteTime -gt '2005-10-01') -and ($_.Length -ge 1mb) -and ($_.Length -le 10mb)
}



Копирование файлов и папок

Копирование выполняется с помощью командлета Copy-Item. Следующая команда создает резервную копию скрипта профиля PowerShell:
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak')
}



Команда Test-Path проверка, существует ли скрипт профиля.

Если целевой файл уже существует, то попытка копирования завершается неудачей. Чтобы перезаписать имеющийся целевой файл, используйте параметр Force.
if (Test-Path -Path $PROFILE) {
Copy-Item -Path $PROFILE -Destination $($PROFILE -replace 'ps1$', 'bak') -Force
}



Эта команда работает, даже если целевой объект доступен только для чтения.

Так же выполняется и копирование папок. Эта команда копирует папку C:\temp\test1 в новую папку C:\temp\DeleteMe рекурсивно.
Copy-Item C:\temp\test1 -Recurse C:\temp\DeleteMe


Можно также скопировать избранные элементы. Следующая команда копирует все .txt файлы, содержащиеся в любом месте в C:\dataC:\temp\text:
Copy-Item -Filter *.txt -Path c:\data -Recurse -Destination C:\temp\text
Вы по-прежнему можете выполнять собственные команды, такие как xcopy.exe и robocopy.exe копировать файлы.


Создание файлов и папок

Создание новых элементов работает одинаково для всех поставщиков PowerShell. Если поставщик PowerShell имеет несколько типов элементов, например поставщик FileSystem PowerShell различает каталоги и файлы, необходимо указать тип элемента.

Эта команда создает папку C:\temp\New Folder:
New-Item -Path 'C:\temp\New Folder' -ItemType Directory

Эта команда создает пустой файл C:\temp\New Folder\file.txt.
New-Item -Path 'C:\temp\New Folder\file.txt' -ItemType File


Удаление всех файлов и папок в папке

Удалить вложенные элементы можно с помощью командлета Remove-Item, однако он потребует подтверждения удаления, если элемент сам что-нибудь содержит. Например, если вы попытаелись удалить папку C:\temp\DeleteMe , содержащую другие элементы, PowerShell запрашивает подтверждение перед удалением папки:
Remove-Item -Path C:\temp\DeleteMe

Если вам не нужно запрашивать каждый содержащийся элемент, укажите параметр Recurse :
Remove-Item -Path C:\temp\DeleteMe -Recurse
2👍1
📌 Шпаргалка по сетевым маскам
2👍1
Файловая система Linux
👍4
Понимание Inode’ов

Понимание inode’ов критически важно для понимания файловых систем Unix. Файлы содержат данные и метаданные. Метаданные — это информация о файле. Метаданные хранятся в inode. Содержимое inode включает:

- Номер inode
- UID
- GID
- Размер
- Atime (время последнего доступа)
- Mtime (время последней модификации)
- Ctime (время последнего изменения метаданных)
- Размер блока
- Режим (права доступа и тип файла)
- Количество жёстких ссылок
- ACL (списки контроля доступа)

Обычно inode занимает 256 байт. Имена файлов не хранятся в inode — они находятся в данных, относящихся к директории. Как правило, имена файлов хранятся линейно, из-за чего поиск по имени может быть медленным. Файловые системы Ext4 и XFS используют более эффективные B-деревья (Btrees) для хранения имён файлов в директориях, что обеспечивает постоянное время поиска, в отличие от линейного.

Dentry (сокращение от directory entry — запись в директории) используется для хранения связи между inode и именем файла в директории.

Inode может содержать как прямые (direct), так и косвенные (indirect) указатели на блоки данных файла. Прямой указатель означает, что inode содержит номер блока, в котором находятся данные файла. Косвенный указатель означает, что inode содержит номер блока, в котором находятся номера других блоков с данными.

Файловая система Ext создаёт фиксированное количество inode’ов при форматировании. Если inode’ы заканчиваются, необходимо форматировать файловую систему. В отличие от неё, XFS не использует фиксированное количество inode’ов — они создаются по мере необходимости.

При удалении файла системный вызов unlink() удаляет запись в директории, указывающую на inode, и помечает inode как свободный. Сами блоки данных при этом не удаляются.

Количество жёстких ссылок на файл хранится в inode. Каждый раз при создании жёсткой ссылки это число увеличивается. Символические (soft) ссылки не увеличивают счётчик ссылок на файл или директорию.

Суперблок содержит метаданные о файловой системе. Обычно в файловой системе хранится несколько копий суперблока на случай повреждения основной. Некоторые из данных, хранящихся в суперблоке:

– Размер файловой системы
– Размер блока
– Количество свободных и занятых блоков
– Размер и расположение таблицы inode’ов
– Карта блоков диска

Информацию о суперблоке можно получить с помощью команды:
dumpe2fs /dev/mount | grep -i superblock
2
Список полезных команд для работы с telnet, которые могут помочь при подключении и отладке сетевых служб:

Основные команды telnet:
1. Подключение к удаленному хосту:

telnet <hostname> <port>

Пример:

telnet example.com 80

Подключается к хосту example.com на порту 80 (HTTP).

2. Закрытие соединения:
Чтобы завершить сессию, используйте сочетание клавиш:

Ctrl + ] (переход в режим команд)

Затем введите:

quit


3. Отправка текстового запроса после подключения:
Если подключились к порту, например, HTTP-сервера, можно отправить запрос вручную:

GET / HTTP/1.1
Host: example.com

Это выполняет запрос к домашней странице на порту 80.

Встроенные команды telnet (используйте в режиме команд после нажатия `Ctrl + ]`):

1. help
Показывает список доступных команд telnet:

telnet> help


2. open
Открывает новое соединение с указанным хостом:

telnet> open <hostname> <port>


3. close
Закрывает текущее соединение:

telnet> close


4. display
Показывает текущие параметры подключения:

telnet> display


5. mode
Переключает режим работы telnet (например, line или `character`):

telnet> mode line


6. send
Отправляет управляющие символы (например, send escape для отправки escape-секвенции):

telnet> send escape


7. status
Показывает статус текущего соединения:

telnet> status


8. set и unset
Настраивают параметры подключения (например, установка режима эхо):

telnet> set echo
telnet> unset echo


Примеры использования telnet:

1. Проверка доступности порта:
Чтобы проверить, открыт ли порт на удаленном сервере:

telnet <hostname> <port>


2. Проверка почтового сервера (SMTP):
Подключение к серверу SMTP:

telnet smtp.example.com 25

Затем можно вручную ввести SMTP-команды, такие как:

EHLO example.com


3. Проверка DNS сервера:
Можно подключиться к DNS-серверу и проверить его ответы:

telnet <dns-server> 53


Эти команды помогут вам для отладки, диагностики и проверки сетевых служб.
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Как работают протоколы в модели TCP IP?
1
Как отлаживать bash-script-ы по шагам

Мне всегда хотелось иметь возможность отлаживать bash-scripts так же, как и любой другой код, т.е. по шагам, и bash такую возможность предусмотрел, но о ней не все знают. Несмотря на довольно большой опыт использования Linux, я дошёл до неё только недавно.

Волшебная строчка, которую нужно добавить после #!/bin/bash, чтоб скрипт можно было отлаживать по шагам

#!/bin/bash

trap 'echo "# $BASH_COMMAND";read' DEBUG

echo line1
echo line2

echo line3



Процесс отладки
Запускаем скрипт, перед выполнением каждой команды выводится то, что будет исполняться, затем интерпретатор начинает ожидать нажатия клавиши <ENTER>.

Если понимаем, что что-то пошло не так, нажимаем Ctrl+C и выходим из отладки.

Ингредиенты
команда trap, которая умеет перехватывать разные сигналы и в нашем случае она перехватывает сигнал DEBUG, посылаемый перед выполнением команды

команда read, которая умеет ожидать ввода чего-нибудь с клавиатуры (в данном случае нам нужно только либо ENTER либо Ctrl+C

переменная окружения $BASH_COMMAND, валидная внутри обработчика команды trap.

# Online Bash Shell.
# Code, Compile, Run and Debug Bash script online.
# Write your code in this editor and press "Run" button to execute it.

trap 'echo "# $BASH_COMMAND";read' DEBUG

echo line1
echo line2

echo line3

echo "Hello World";
1
📌 Как работает DHCP
4
Основные команды PowerShell

1. Основные команды управления системой:
- Get-Help: Получение справки о командах. Например, Get-Help Get-Process показывает справку о команде Get-Process.
- Get-Command: Показать список всех доступных команд или команд, связанных с определённой задачей. Пример: Get-Command *process*.
- Get-Service: Показать все службы, установленные на системе.
- Start-Service: Запустить службу. Пример: Start-Service -Name "wuauserv".
- Stop-Service: Остановить службу.
- Restart-Service: Перезапустить службу.

2. Работа с файлами и каталогами:
- Get-ChildItem: Просмотреть файлы и каталоги (аналог команды dir или ls`). Пример: `Get-ChildItem C:\.
- Set-Location: Перейти в другой каталог (аналог cd`). Пример: `Set-Location C:\Users.
- Copy-Item: Копировать файл или папку. Пример: Copy-Item C:\source.txt C:\destination.txt.
- Move-Item: Переместить файл или папку. Пример: Move-Item C:\file.txt C:\archive\file.txt.
- Remove-Item: Удалить файл или папку. Пример: Remove-Item C:\file.txt.
- New-Item: Создать новый файл или каталог. Пример: New-Item -Path C:\ -Name "file.txt" -ItemType "file".

3. Информация о системе и процессах:
- Get-Process: Показать список всех запущенных процессов.
- Stop-Process: Остановить процесс. Пример: Stop-Process -Name "notepad".
- Get-EventLog: Просмотр журналов событий (Event Logs). Пример: Get-EventLog -LogName Application.
- Get-WmiObject: Получить информацию о системе, например, о процессоре или установленной ОС. Пример: Get-WmiObject Win32_OperatingSystem.

4. Работа с пользователями и группами:
- Get-LocalUser: Показать всех локальных пользователей.
- New-LocalUser: Создать нового локального пользователя. Пример: New-LocalUser -Name "TestUser" -Password (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force).
- Remove-LocalUser: Удалить локального пользователя.
- Add-LocalGroupMember: Добавить пользователя в локальную группу. Пример: Add-LocalGroupMember -Group "Administrators" -Member "TestUser".

5. Работа с переменными и данными:
- Set-Variable: Установить переменную. Пример: Set-Variable -Name "MyVar" -Value "Hello".
- Get-Variable: Показать значения переменных.
- Remove-Variable: Удалить переменную.
- Export-Csv: Экспорт данных в CSV-файл. Пример: Get-Process | Export-Csv -Path "C:\processes.csv".
- Import-Csv: Импорт данных из CSV-файла. Пример: Import-Csv -Path "C:\processes.csv".

6. Потоки данных и конвейеры:
- | (Pipeline): Передача данных от одной команды к другой. Пример: Get-Process | Where-Object { $_.CPU -gt 100 } — вывести процессы, которые используют больше 100 единиц процессорного времени.
- Out-File: Записать результат команды в файл. Пример: Get-Process | Out-File -FilePath "C:\processes.txt".
- Select-Object: Выбор определённых полей. Пример: Get-Process | Select-Object -Property Name, CPU.

7. Сетевые команды:
- Test-Connection: Проверить доступность компьютера (аналог команды ping`). Пример: `Test-Connection google.com.
- Get-NetIPAddress: Показать список всех IP-адресов на машине.
- Get-NetAdapter: Показать информацию о сетевых адаптерах.

8. Скрипты и автоматизация:
- Invoke-Command: Выполнить команду на удалённой системе. Пример: Invoke-Command -ComputerName "Server1" -ScriptBlock { Get-Process }.
- Start-Job: Запустить задачу в фоне. Пример: Start-Job -ScriptBlock { Get-Process }.
- Get-Job: Показать статус фоновых задач.
- Receive-Job: Получить результат выполнения фоновой задачи.

9. Обновления и безопасность:
- Install-Module: Установка PowerShell-модулей. Пример: Install-Module -Name "PSWindowsUpdate".
- Update-Module: Обновление установленных модулей.

10. Дополнительные команды:
- Clear-Host (или `cls`): Очистить экран.
- Exit: Выйти из сеанса PowerShell.
- Measure-Object: Подсчитать количество объектов, или сумму значений. Пример: Get-ChildItem | Measure-Object.
1