Команда
ping
отправляет пакеты ICMP на указанный домен и отображает IP-адрес.ping google.com
Пример вывода
В этом примере IP-адрес
google.com
— 142.250.190.78.PING google.com (142.250.190.78): 56 data bytes
64 bytes from 142.250.190.78: icmp_seq=0 ttl=115 time=14.3 ms
Команда
nslookup
запрашивает DNS-сервер для получения информации о домене, включая IP-адрес.nslookup google.com
Пример вывода
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: google.com
Address: 142.250.190.78
Команда
dig
(domain information groper) запрашивает DNS-сервер для получения информации о домене. Она более гибкая и детализированная, чем nslookup
.dig google.com
Пример вывода
; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49142
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 299 IN A 142.250.190.78
;; Query time: 21 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jul 26 12:00:00 UTC 2024
;; MSG SIZE rcvd: 55
Команда
host
— еще один способ запроса DNS для получения IP-адреса домена.host google.com
Пример вывода
google.com has address 142.250.190.78
google.com has IPv6 address 2607:f8b0:4005:809::200e
Существует множество онлайн-сервисов, которые позволяют определить IP-адрес веб-сайта.
[WhatIsMyIPAddress](https://www.whatismyipaddress.com/)
[DNSWatch](https://www.dnswatch.info/)
[IP-Checker](https://ipinfo.info/html/ip_checker.php)
ping
ping example.com
PING example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=12.3 ms
nslookup
nslookup example.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: example.com
Address: 93.184.216.34
dig
dig example.com
; <<>> DiG 9.11.3-1ubuntu1.12-Ubuntu <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32477
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 299 IN A 93.184.216.34
;; Query time: 21 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri Jul 26 12:00:00 UTC 2024
;; MSG SIZE rcvd: 55
host
host example.com
example.com has address 93.184.216.34
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥10❤1
Это команда в Unix-подобных операционных системах, которая используется для ограничения ресурсов, доступных оболочке и запущенным из нее процессам. С помощью
ulimit
можно устанавливать и проверять различные лимиты, такие как количество открытых файлов, размер стека, размер файлов и т. д. Эти лимиты помогают предотвратить исчерпание системных ресурсов отдельными процессами и улучшить безопасность и стабильность системы.Максимальное количество открытых файлов (file descriptors).
Максимальное количество процессов, которые может создать пользователь.
Максимальный размер файлов, которые могут быть созданы пользователем (в блоках).
Размер стека (stack size).
Размер файлов core dump.
Максимальный объем виртуальной памяти (virtual memory size).
Максимальный объем памяти, который может быть заблокирован в оперативной памяти (locked-in-memory size).
ulimit -a
Вывод этой команды покажет все текущие лимиты для текущего пользователя и сеанса
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63691
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 63691
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Это установит лимит на 4096 открытых файлов для текущей сессии.
ulimit -n 4096
Это установит максимальный размер файла в 1 ГБ (1048576 блоков по 1024 байта).
ulimit -f 1048576
Это установит размер стека в 16 МБ.
ulimit -s 16384
Чтобы установить лимиты на постоянной основе, нужно отредактировать конфигурационные файлы, такие как
/etc/security/limits.conf
и /etc/pam.d/common-session
.* soft nofile 4096
* hard nofile 65536
* soft nproc 4096
* hard nproc 8192
Вы можете включить
ulimit
в ваши скрипты для временного изменения лимитов ресурсов перед выполнением команд#!/bin/bash
ulimit -n 4096
ulimit -s 16384
# Выполнение команд
./myprogram
Root может устанавливать более высокие лимиты, чем обычные пользователи. Ограничения могут варьироваться между различными системами и дистрибутивами Linux.
Изменения, сделанные с помощью команды
ulimit
, применяются только к текущему сеансу и процессам, запущенным из него.Лимиты могут иметь максимальные значения, заданные ядром системы. Например, максимальный лимит для количества открытых файлов может быть установлен с помощью параметра
fs.file-max
в /etc/sysctl.conf
.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1🔥1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Можно увеличить несколько лимитов, связанных как с самой конфигурацией Nginx, так и с настройками операционной системы.
ulimit -n
* soft nofile 65536
* hard nofile 65536
Перезапустите терминал или перезагрузите систему, чтобы изменения вступили в силу.
LimitNOFILE=65536
sudo systemctl daemon-reload
Откройте файл конфигурации Nginx (обычно
/etc/nginx/nginx.conf
) и настройте следующие параметры:worker_rlimit_nofile: Установите максимальное количество открытых файлов.
worker_rlimit_nofile 65536;
worker_connections: Увеличьте количество соединений, которые каждый рабочий процесс может обрабатывать одновременно.
events {
worker_connections 65536;
}
worker_processes: Настройте количество рабочих процессов. Обычно это число соответствует количеству ядер процессора.
worker_processes auto;
Отредактируйте файл
/etc/sysctl.conf
и добавьте строкуfs.file-max = 2097152
Примените изменения
sudo sysctl -p
Отредактируйте файл
/etc/sysctl.conf
и добавьте строкиnet.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 4096
Примените изменения
sudo sysctl -p
После внесения всех изменений перезагрузите Nginx для их применения:
sudo systemctl restart nginx
Пример конфигурационного файла Nginx
user nginx;
worker_processes auto;
worker_rlimit_nofile 65536;
events {
worker_connections 65536;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/conf.d/*.conf;
}
Проверка лимита открытых файлов
ulimit -n
Проверка параметров sysctl
sysctl fs.file-max
sysctl net.core.somaxconn
sysctl net.ipv4.tcp_max_syn_backlog
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥7❤1
Обычно хранятся в каталоге
/var/log
. Также многие современные дистрибутивы используют систему журналирования systemd
для управления и просмотра логов.Каталог
/var/log
содержит логи большинства системных сервисов и приложений. Логи системных сообщений
/var/log/syslog
: Содержит общие системные логи. /var/log/messages
: Содержит общие системные сообщения (не во всех дистрибутивах).cat /var/log/syslog
less /var/log/syslog
tail -f /var/log/syslog
Логи конкретных сервисов
Apache: /var/log/apache2/ или /var/log/httpd/ Логи доступа: /var/log/apache2/access.log или /var/log/httpd/access_log Логи ошибок: /var/log/apache2/error.log или /var/log/httpd/error_log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log
Nginx: /var/log/nginx/ Логи доступа: /var/log/nginx/access.log Логи ошибок: /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
MySQL: /var/log/mysql/ или /var/log/mysqld.log
tail -f /var/log/mysql/error.log
SSH: /var/log/auth.log или /var/log/secure
tail -f /var/log/auth.log
journalctl
— это утилита для просмотра и управления журналами systemd
. Она позволяет фильтровать логи по различным критериям, таким как время, сервис и уровень логирования.Основные команды
journalctl
Просмотр всех журналов
journalctl
Логов конкретного сервиса
journalctl -u nginx.service
Последних логов и продолжение просмотра в реальном времени
journalctl -f
journalctl -u nginx.service -f
Логов за определённый период
journalctl --since "2024-07-25 12:00:00" --until "2024-07-25 13:00:00"
Логов с определённым уровнем логирования
journalctl -p err
journalctl -p warning
Логи доступа
tail -f /var/log/apache2/access.log
Логи ошибок
tail -f /var/log/apache2/error.log
Логи доступа
tail -f /var/log/nginx/access.log
Логи ошибок
tail -f /var/log/nginx/error.log
Все логи Nginx
journalctl -u nginx.service
Последние логи Nginx в реальном времени
journalctl -u nginx.service -f
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
Работа с большими логами может быть сложной, так как стандартные текстовые редакторы и команды могут не справляться с такими объемами данных.
Это команда для постраничного просмотра файлов, которая загружает файл по частям, что позволяет работать с большими файлами без их полного открытия в памяти. Навигация:
Space: следующая страница
b: предыдущая страница
G: перейти в конец файла
g: перейти в начало файла
/pattern: поиск по файлу
less /path/to/large-log-file.log
Это команда для просмотра последних строк файла. Она полезна для мониторинга новых записей в реальном времени.
tail -n 1000 /path/to/large-log-file.log
Для непрерывного мониторинга
tail -f /path/to/large-log-file.log
Это команда для просмотра первых строк файла.
head -n 1000 /path/to/large-log-file.log
Это мощный текстовый процессор, который может быть использован для фильтрации и обработки лог-файлов.
awk '/ERROR/' /path/to/large-log-file.log
Это команда для поиска по файлу. Она позволяет быстро находить строки, содержащие определенные паттерны.
grep "ERROR" /path/to/large-log-file.log
Для просмотра строк до и после найденного паттерна
grep -C 5 "ERROR" /path/to/large-log-file.log
Это команда для разбиения больших файлов на более мелкие части. Разбиение файла на части размером по 500 МБ
split -b 500M /path/to/large-log-file.log part_
Некоторые текстовые редакторы, такие как Sublime Text, поддерживают работу с большими файлами. Они могут быть полезны для просмотра и редактирования логов.
GoAccess: интерактивный просмотр логов веб-сервера в режиме реального времени.
goaccess /path/to/access.log -c
lnav: интерактивный просмотрщик логов, который автоматически определяет формат логов и предоставляет удобную навигацию и поиск.
lnav /path/to/large-log-file.log
Использование
less
для просмотра большого лог-файлаless /path/to/large-log-file.log
Использование
grep
для поиска по логуgrep "ERROR" /path/to/large-log-file.log
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤1
Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
cherry-pick
позволяет аккуратно перенести только нужные коммиты.Перенос одного коммита из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick коммита
git cherry-pick <commit-hash>
Перенос нескольких коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick нескольких коммитов
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>
Перенос диапазона коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick диапазона коммитов
git cherry-pick <start-commit-hash>..<end-commit-hash>
git add <filename>
cherry-pick
git cherry-pick --continue
Если вы хотите прервать процесс
cherry-pick
, можно использовать командуgit cherry-pick --abort
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥2❤1
Команда git reset с параметром --soft отменяет последний коммит, но оставляет изменения в индексе (staging area), что позволяет вам внести изменения и закоммитить их снова.
HEAD~1
: указывает на один коммит назад от текущего HEAD. --soft
: сохраняет изменения в индексе.git reset --soft HEAD~1
Команда
git reset
с параметром --mixed
отменяет последний коммит и сбрасывает индекс, но сохраняет изменения в рабочей директории. Это позволяет вам внести изменения и добавить их в индекс заново. --mixed
: сбрасывает индекс, но сохраняет изменения в рабочей директории (по умолчанию).git reset --mixed HEAD~1
Команда
git reset
с параметром --hard
отменяет последний коммит и удаляет все изменения как из индекса, так и из рабочей директории. Это действие необратимо и должно использоваться с осторожностью. `--hard`: сбрасывает индекс и рабочую директорию.git reset --hard HEAD~1
Команда
git revert
создает новый коммит, который отменяет изменения, внесенные последним коммитом. Это сохраняет историю изменений и является более безопасным способом отмены коммита, особенно в публичных ветках. `HEAD`: указывает на последний коммит.git revert HEAD
git reset --soft HEAD~1
Проверка состояния:
git status
git reset --mixed HEAD~1
Проверка состояния
git status
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4❤1
Конфликты в Git возникают, когда два или более коммитов изменяют одну и ту же часть файла по-разному, и система контроля версий не может автоматически объединить эти изменения. Решение конфликтов требует ручного вмешательства.
Когда возникает конфликт, Git сообщает о конфликтных файлах после выполнения команды слияния (
git merge
) или ребейза (git rebase
).git merge feature-branch
Вывод:
Auto-merging filename
CONFLICT (content): Merge conflict in filename
Automatic merge failed; fix conflicts and then commit the result.
Откройте конфликтный файл в текстовом редакторе. Конфликтные изменения помечены специальными маркерами. Удалите маркеры и решите, какие изменения сохранить. Это может быть одно из изменений или комбинация обоих.
<<<<<<< HEAD
# Изменения из текущей ветки
=======
# Изменения из сливаемой ветки
>>>>>>> feature-branch
Пример разрешения конфликта:
# До разрешения конфликта
<<<<<<< HEAD
Старый текст из текущей ветки
=======
Новый текст из feature-branch
>>>>>>> feature-branch
# После разрешения конфликта
Старый текст из текущей ветки
Новый текст из feature-branch
После разрешения конфликтов сохраните изменения и добавьте исправленные файлы в индекс:
git add filename
После добавления исправленных файлов в индекс завершите слияние, выполнив коммит:
git commit
Если вы выполняли ребейз, завершите процесс
git rebase --continue
Если необходимо прервать процесс ребейза
git rebase --abort
Многие текстовые редакторы, такие как Visual Studio Code, имеют встроенные инструменты для разрешения конфликтов, которые делают процесс более визуальным и удобным.
KDiff3
, Meld
, Beyond Compare
и другие инструменты могут помочь визуально сравнить и разрешить конфликты. Установка и настройка инструмента для слияния git config --global merge.tool meld
Запуск инструмента для разрешения конфликтов
git mergetool
git merge feature-branch
Вывод
Auto-merging filename
CONFLICT (content): Merge conflict in filename
Automatic merge failed; fix conflicts and then commit the result.
filename
в текстовом редакторе и разрешите конфликт: # До разрешения конфликта
<<<<<<< HEAD
Старый текст из текущей ветки
=======
Новый текст из feature-branch
>>>>>>> feature-branch
# После разрешения конфликта
Старый текст из текущей ветки
Новый текст из feature-branch
git add filename
git commit
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚Базу Знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥3
Forwarded from Идущий к IT
Твое резюме на HeadHunter — ОК, если ты видишь это.
HeadHunter сравнивает ключевые навыки в твоем резюме и в вакансии и в момент отклика отображает, насколько % ты соответствуешь требованиям.
Специальный бейджик «Подходит по навыкам на 100%» отображается, если соответствие составляет более 60%.
Если при просмотре вакансий ты видишь такой бейджик, это значит, что список навыков в твоем резюме качественно составлен.
Это важный параметр, так как рекрутерам чаще показываются резюме с лучшим соответствием.
О том, как правильно указывать ключевые навыки и оптимизировать свое резюме я уже рассказывал в этом видео
HeadHunter сравнивает ключевые навыки в твоем резюме и в вакансии и в момент отклика отображает, насколько % ты соответствуешь требованиям.
Специальный бейджик «Подходит по навыкам на 100%» отображается, если соответствие составляет более 60%.
Если при просмотре вакансий ты видишь такой бейджик, это значит, что список навыков в твоем резюме качественно составлен.
Это важный параметр, так как рекрутерам чаще показываются резюме с лучшим соответствием.
О том, как правильно указывать ключевые навыки и оптимизировать свое резюме я уже рассказывал в этом видео
👍1
В Ansible переменные могут быть определены в нескольких местах, включая роли. Роли в Ansible организуют задачи и файлы, делая плейбуки более модульными и повторно используемыми.
Переменные, определенные здесь, имеют самый низкий приоритет. Обычно используются для определения значений по умолчанию.
# roles/role_name/defaults/main.yml
some_variable: "default_value"
Переменные, определенные здесь, имеют более высокий приоритет, чем переменные из
defaults/main.yml
. Используются для переменных, которые не должны быть изменены пользователем.# roles/role_name/vars/main.yml
some_variable: "fixed_value"
Переменные могут быть определены непосредственно в задачах. Переменные, определенные таким образом, будут видны только в контексте этой задачи.
# roles/role_name/tasks/main.yml
- name: Set a variable
set_fact:
temporary_variable: "value"
В файле метаданных можно определять зависимости ролей и использовать переменные для их настройки.
# roles/role_name/meta/main.yml
dependencies:
- role: dependency_role
some_variable: "value"
Переменные могут использоваться в шаблонах Jinja2.
# roles/role_name/templates/template.j2
The value of some_variable is {{ some_variable }}
Переменные могут использоваться в хендлерах для настройки условий запуска.
# roles/role_name/handlers/main.yml
- name: restart service
service:
name: "{{ service_name }}"
state: restarted
В файлах, используемых в задачах копирования или шаблонизации, можно использовать переменные для указания пути к файлам или другим параметрам.
defaults/main.yml
# roles/nginx/defaults/main.yml
nginx_port: 80
vars/main.yml
# roles/nginx/vars/main.yml
nginx_user: "www-data"
tasks/main.yml
# roles/nginx/tasks/main.yml
- name: Install Nginx
apt:
name: nginx
state: present
- name: Configure Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
- name: Start Nginx
service:
name: nginx
state: started
enabled: true
templates/nginx.conf.j2
# roles/nginx/templates/nginx.conf.j2
user {{ nginx_user }};
worker_processes auto;
events {
worker_connections 1024;
}
http {
server {
listen {{ nginx_port }};
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
Переменные с самым низким приоритетом. Используются для значений по умолчанию, которые могут быть переопределены.
Переменные с более высоким приоритетом, чем
defaults
. Используются для значений, которые не должны быть легко изменены пользователем.Переменные, заданные с помощью
set_fact
в задачах, имеют более высокий приоритет. Также переменные, определенные в локальном контексте задачи.defaults/main.yml
в роли.Переменные из
vars
плейбука.Переменные из статического или динамического инвентаря.
Динамически собранные данные о хостах.
Переменные, переданные через командную строку с помощью флага
-e
.defaults/main.yml
# roles/example/defaults/main.yml
example_variable: "default_value"
vars/main.yml
# roles/example/vars/main.yml
example_variable: "vars_value"
Переменная в плейбуке
# playbook.yml
- hosts: all
roles:
- role: example
example_variable: "playbook_value"
Переменная командной строки
ansible-playbook playbook.yml -e "example_variable=command_line_value"
defaults/main.yml
задает example_variable
как "default_value"
.vars/main.yml
переопределяет это значение на "vars_value"
."playbook_value"
."command_line_value"
.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7