diff --git a/db/POSTGRES.MD b/db/POSTGRES.MD new file mode 100644 index 0000000..bcda0d6 --- /dev/null +++ b/db/POSTGRES.MD @@ -0,0 +1,31 @@ +[Cheat sheet](https://gist.github.com/Kartones/dd3ff5ec5ea238d4c546) + +- `sudo -u postgres psql postgres` +- `CREATE DATABASE имя_базы_данных;` +- `\l` - просмотр списка бд +- `\q` - выход + +--- +- `\c имя_базы_данных [имя_пользователя]` - подключение к бд или из bash `psql -U username -d database_name` + +- `\dt` - просмотр списка таблиц +- `\d [имя таблицы]` - показывает столбцы, типы данных и индексы +- `\dn` - список схем +- `\dt schema_name.*` - список таблиц в схеме +--- + +- `CREATE TABLE имя_таблицы (id SERIAL PRIMARY KEY, колонка1 тип, колонка2 тип, ...);` - создание таблицы + +- `DROP TABLE имя_таблицы;` +- `CREATE USER имя_пользователя WITH PASSWORD 'пароль';` +- `CREATE ROLE имя_роли;` +- `GRANT ALL PRIVILEGES ON DATABASE имя_базы TO имя_пользователя;` +- `DROP USER имя_пользователя;` +- `DROP ROLE имя_роли;` + +--- + +- `SELECT * FROM pg_stat_activity;` - просмотр текущий подключений +- `SELECT * FROM pg_locks;` - просмотр блокировок + + diff --git a/git/REMOTE_REPO.MD b/git/REMOTE_REPO.MD index 0ce20b6..8293547 100644 --- a/git/REMOTE_REPO.MD +++ b/git/REMOTE_REPO.MD @@ -2,3 +2,6 @@ - `git remote -v` - показывает все удалённые репозитории, которые связаны с локальным репозиторием - `git branch -vv` - показывает upstream ветку - `rm -rf /path/to/repo/.git` - git больше не будет отслеживать эту директорию +- `git config --global --list` +- `git config --global user.name "Ваше Имя"` +- `git config --global user.email "ваш_емейл@example.com"` diff --git a/java/COMMANDS.MD b/java/COMMANDS.MD new file mode 100644 index 0000000..7855e5c --- /dev/null +++ b/java/COMMANDS.MD @@ -0,0 +1,11 @@ +- `sudo alternatives --config java` + +--- + +Версия java +- `jar tf bftDsudDownloader.jar` +- `sudo jar xf bftDsudDownloader.jar io/netty/util/Timer.class` + +- `javap -verbose io/netty/util/Timer.class | grep "major version"` + + diff --git a/java/NOTES.MD b/java/NOTES.MD new file mode 100644 index 0000000..e69de29 diff --git a/linux/COMMANDS.MD b/linux/COMMANDS.MD index 453dfd0..8c4b94d 100644 --- a/linux/COMMANDS.MD +++ b/linux/COMMANDS.MD @@ -36,6 +36,21 @@ APT работает поверх более низкоуровневого инструмента `dpkg`, который непосредственно устанавливает .deb пакеты. - `sudo dpkg -i package_name.deb` - для установки `.deb` пакета - `sudo apt --fix-broken install` - если возникли проблемы с зависимостями + +--- + +- `rpm -ivh .rpm` - установка rpm пакета +- `rpm -e .rpm` - удаления пакета +- `rpm -Uvh .rpm` - обновление пакета, если он не установленЮ он установится +- `rpm -qi ` - просмотр информации о пакете +- `rpm -V ` - проверка целостности пакета +- `rpm -ql ` - список файлов в пакете +- `dnf install .rpm` - установка rpm пакета через dnf, dnf будет управлять зависимостями + +- `dnf install https://example.com/package-file.rpm` - установка rpm пакета напрямую из ссылки + +![](../static/image.png) + ### Сеть - `cat /etc/ssh/sshd_config | grep Port` - показывает на каком порту открыт ssh - `ss -tulpn` - информация о текущих сетевых соединениях и портах @@ -48,6 +63,8 @@ APT работает поверх более низкоуровневого ин - `speedtest-cli` - спидтест - `speedtest-cli --list` - список серверов - `speedtest-cli --server SERVER_ID` +- `fuser 9095/tcp` - проверить доступность порта + ### База - `cp -p` - сохранить атрибуты файлов (время создания, права, владельца) @@ -95,6 +112,9 @@ APT работает поверх более низкоуровневого ин - notice (5): Важные события. - info (6): Информационные сообщения. - debug (7): Отладочные сообщения. + - `journalctl -xe` + - x (или --catalog) — выводит дополнительные объяснения (аннотации) к некоторым сообщениям журнала. Это помогает понять детали ошибок или предупреждений, предлагая описания и возможные решения, если такие есть. + - e (или --pager-end) — открывает журнал в режиме постраничного просмотра и сразу прокручивает его до конца, показывая самые последние записи. - `smartctl -a /dev/sda` - смарт отчет диска, генерит сам диск - `free -m` - оперативная память @@ -105,7 +125,7 @@ APT работает поверх более низкоуровневого ин - `curl -Lv domain.ru` - получить html страницу - `curl -v telnet://127.0.0.1:22` - доступность порта -- `tcpdump -i any port 9100 -nn` - пакеты через этот порт ъ +- `tcpdump -i any port 9100 -nn` - пакеты через этот порт - `tar` - работа с архивами - `-cvf` - создать архив - `-xvf` - извлечь архив @@ -137,6 +157,14 @@ APT работает поверх более низкоуровневого ин - `sudo reboot now` - перезагрузка системы - `sudo shutdown now` - выключить компьютер - `watch "some command"` - переодически запускает команду + +- `lscpu` - информация о процессоре +- `lspci` - информация об устройствах подключенных к pci шине +- `lsusb` + +- `/var/log/dmesg` - логи загрузки системы +- `pstree` - дерево процессов +- `/usr/lib/systemd` - директория с юнитами по умолчанию ### Разное - `alt .` - перебирает последние аргументы из истории команд (`history`), если аргументов нет, то перебирает сами команды @@ -181,7 +209,7 @@ APT работает поверх более низкоуровневого ин - Показывает список всех подключенных устройств (жестких дисков, SSD и т.д.). - Отображает размер дисков, типы разделов, точки монтирования. - Полезно для диагностики, перед созданием или изменением разделов. -- `lsblk` - показывает дерево всех подключенных устройств, их разделы, точки монтирования. (`-f` - для более детальной информации) +- `lsblk` - показывает дерево всех подключенных устройств, их разделы, точки монтирования. (`-f` - для более детальной информации о файловых системах, `-p` - полные пути к устройствам, `-d` - показывает только диски, без разделов, `-J` - результат в виде json) - `sudo cfdisk <устройство>` - команда для работы с разделами диска @@ -212,4 +240,12 @@ mount [OPTIONS] - `sudo mount -t ext4 /dev/sda1 /mnt` - подключить с указанием типа файловой системы --- -`df -Th` - информация о файловых системах и их типах \ No newline at end of file +- `df -Th` - информация о файловых системах и их типах +- `du -sh *` - размеры файлов и директорий в текущей +- `lsblk -d -o name,rota` + - 1 это HDD (жесткий диск). + - 0 это SSD (твердотельный накопитель) +> диск с названием sr* это cd привод + +- `lsscsi` - отображает устройства, подключенные через интерфейс SCSI +- `cp /etc/fstab{,.bkp}` == `cp /etc/fstab /etc/fstab.bkp` diff --git a/linux/NOTES.MD b/linux/NOTES.MD index d1331f3..18b70e3 100644 --- a/linux/NOTES.MD +++ b/linux/NOTES.MD @@ -109,4 +109,49 @@ Swap-файл (или swap-раздел) — это специальная об Если целевой файл удален, символическая ссылка становится «битой» и неработоспособной, так как она указывает на несуществующий путь. Символические ссылки могут указывать на файлы или каталоги. Работают между различными файловыми системами. -Они легче по объему, поскольку содержат только путь к файлу, а не данные самого файла. \ No newline at end of file +Они легче по объему, поскольку содержат только путь к файлу, а не данные самого файла. + +--- +В файловой системе XFS иноды выделяются динамически, а вот в ext4 нет + +--- + +Блочные устройства отправляют данные блоками, символьные потоков данных + +--- + +Виртуальная файловая система — это файловая система, которая существует только в памяти и не хранит данные на диске. Примером является /proc, также известная как procfs (процессная файловая система). + +- Не хранит данные на диске: Виртуальная файловая система отображает информацию, которая создаётся динамически при запросе и не сохраняется на постоянных носителях. + +- Динамическое содержимое: Данные генерируются операционной системой в реальном времени. Например, содержимое файлов в /proc — это текущая информация о системе, процессах, памяти, конфигурациях и т.д., которая изменяется в зависимости от состояния системы. + +Почему система виртуальная + +- Отражение состояния системы: Виртуальные файловые системы, такие как /proc, работают как интерфейс для чтения и управления текущим состоянием системы и процессами. Эти файлы не сохраняют данные, а лишь отображают их. +- Экономия ресурсов: Так как информация хранится только в памяти, это позволяет быстро получать текущие данные, не записывая их на диск. + +- `/sys`: Динамическая информация о подключённых устройствах и драйверах. +- `/dev`: Содержит устройства, создаваемые динамически + +--- + +Динамическое создание: В большинстве современных систем устройства в /dev управляются с помощью udev (система управления устройствами), которая автоматически создаёт и удаляет файлы в зависимости от подключаемых устройств. + +Нет данных на постоянных носителях: Данные о состоянии устройств хранятся в памяти, а сами файлы в /dev отображают текущие устройства системы. + +Доступ через ядро: Когда обращаются к файлам в /dev, ядро перенаправляет запросы к соответствующим драйверам, позволяя операционной системе взаимодействовать с оборудованием и эмулированными устройствами. + +--- + +`.wants` + +Используется для слабых зависимостей. Если основной юнит запущен, он попытается запустить все юниты, указанные в его `.wants`, но не завершит работу, если какой-то из них не удастся запустить. + +Каталог `.wants` создается автоматически, если для юнита добавляют зависимость с WantedBy=. Например, для `foo.service` можно создать `foo.service.wants/`, чтобы там указать зависимости, которые желательно иметь. + +`.requires` + +Используется для сильных зависимостей. Если основной юнит не может запустить одну из служб, указанных в `.requires`, запуск основного юнита тоже завершится с ошибкой. + +Каталог `.requires` также создается при использовании директивы RequiredBy=, и его используют для критически необходимых зависимостей. \ No newline at end of file diff --git a/other/FIND_AND_MEASURE_PG.MD b/other/FIND_AND_MEASURE_PG.MD new file mode 100644 index 0000000..a581218 --- /dev/null +++ b/other/FIND_AND_MEASURE_PG.MD @@ -0,0 +1,27 @@ +- `ps -ef | grep -v grep | grep postgres` - определяем, есть ли процесс постгрес +- `which psql` - есть ли в локальном окружении +- `ss -tulpn` - ищем порт на котором слушает постгрес +- `sudo docker ps` - смотрим, какие контейнеры запущены +- `docker ps --format "{{.Names}}"` - только имена контейнеров +- `sudo docker inspect <имя_контейнера> | grep postgres` - есть ли постгрес в контейнере + +- `psql -V` или `/usr/bin/psql -V` - версия постгрес +- `psql -U postgres -c "SELECT pg_database.datname AS database_name, pg_size_pretty(pg_database_size(pg_database.datname)) AS size FROM pg_database;"` - смотрим базы и их размер +- `psql -U postgres -c "SELECT pg_size_pretty(SUM(pg_database_size(pg_database.datname))) AS total_size FROM pg_database;"` - общий размер всех баз + +- `psql -U postgres -c "SHOW data_directory;"` + +- `df -sh ` - размер директории с данными баз, логами, конфигами, транзакциями и т.д. +- `psql -U postgres -c "SHOW port;"` + +--- +`sudo find / -type f -name "*.backup" -o -name "*.sql" -o -name "*.dump"` - этой командой можно поискать бэкапы + +--- +- `docker volume ls` +- `docker volume inspect ` +- `docker inspect | grep -i mount` +- `docker inspect | grep -i volumes` +- `docker port ` +- `docker inspect | grep -i port` + \ No newline at end of file diff --git a/other/SYSTEMD.MD b/other/SYSTEMD.MD new file mode 100644 index 0000000..40c160e --- /dev/null +++ b/other/SYSTEMD.MD @@ -0,0 +1,34 @@ +### Создание юнита + +- в каталоге для хранения unit файлов `cd /etc/systemd/system/` создаём файл с расширением `.service` для службы +- ```bash + sudo vi /etc/systemd/system/myservice.service + ``` +- пишем `unit` файл +```bash +[Unit] +Description=Описание сервиса +After=network.target # Определяет, когда сервис должен запускаться (например, после сети) + +[Service] +ExecStart=/path/to/your/executable_or_script # Команда для запуска сервиса +ExecStop=/path/to/stop/script (необязательно) # Команда для остановки сервиса, если нужно +ExecReload=/path/to/reload/script (необязательно) # Команда для перезагрузки +User=your_user # Пользователь, от которого запустится сервис (если нужно) +Group=your_group # Группа (если нужно) +Restart=always # Политика перезапуска (может быть "on-failure", "always", "no") +RestartSec=5 # Задержка перед перезапуском +Environment="ENV_VAR=value" # Можно задавать переменные окружения + +[Install] +WantedBy=multi-user.target # Указывает, что сервис должен запускаться в multi-user режиме (стандартный для большинства серверов) +``` +> `multi-user` - многопользовательский текстовый режим +- `sudo systemctl daemon-reload` - обновить конфигурацию systemd +- `sudo systemctl enable myservice.service` +- `sudo systemctl start myservice.service` +- `sudo systemctl status myservice.service` + + + + diff --git a/static/image.png b/static/image.png new file mode 100644 index 0000000..4b53e54 Binary files /dev/null and b/static/image.png differ diff --git a/vebsrv/tomcat/TOMCAT.MD b/vebsrv/tomcat/TOMCAT.MD new file mode 100644 index 0000000..cfc986b --- /dev/null +++ b/vebsrv/tomcat/TOMCAT.MD @@ -0,0 +1,119 @@ + +[Документация](https://tomcat.apache.org/tomcat-8.5-doc/introduction.html) +- `wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.96/bin/apache-tomcat-9.0.96.tar.gz` +- `CATALINA_HOME` : представляет собой корень вашей установки Tomcat, например /home/tomcat/apache-tomcat-9.0.10 или C:\Program Files\apache-tomcat-9.0.10. +- `CATALINA_BASE` : представляет корень конфигурации времени выполнения определенного экземпляра Tomcat. Если вы хотите иметь несколько экземпляров Tomcat на одной машине, используйте свойство CATALINA_BASE. +- установка и настройка `tomcat` + - `cd /opt/` + - `wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz` + - `sudo useradd -r -m -U -d /opt/tomcat tomcat` + - `sudo chown -R tomcat:tomcat /opt/tomcat` + - `which java` + - `readlink -f /usr/bin/java` + + - `cd /opt/tomcat/bin` + - `./startup.sh` + +- **Создаём systemd unit** +- `sudo vi /etc/systemd/system/tomcat.service` + +```bash +[Unit] +Description=Apache Tomcat Web Application Container +After=network.target + +[Service] +Type=forking + +Environment=CATALINA_HOME=/opt/tomcat/ +Environment=CATALINA_BASE=/opt/tomcat/ +Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid +Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 + +ExecStart=/opt/tomcat/bin/startup.sh +ExecStop=/opt/tomcat/bin/shutdown.sh + +User=tomcat +Group=tomcat +RestartSec=10 +Restart=always + +[Install] +WantedBy=multi-user.target +``` +- `sudo systemctl daemon-reload` +- `sudo systemctl start tomcat` +- `sudo systemctl enable tomcat` +- `sudo systemctl status tomcat` + +``` +/opt/tomcat +├── conf +│ ├── server.xml # Основной файл конфигурации серверов и виртуальных хостов +│ ├── logging.properties # Общие настройки логирования +│ ├── [host1] # Каталог для настроек виртуального хоста host1 (опционально) +│ │ └── app1.xml # Конфигурация приложения для host1/app1 +│ └── [host2] # Каталог для настроек виртуального хоста host2 (опционально) +│ └── app2.xml # Конфигурация приложения для host2/app2 +├── logs # Общая директория для логов (или отдельные каталоги для каждого хоста) +│ ├── host1 # Логи виртуального хоста host1 (если настроено) +│ ├── host2 # Логи виртуального хоста host2 (если настроено) +│ └── catalina.out # Основной лог Tomcat +├── webapps # Общая папка для приложений (используется по умолчанию для всех виртуальных хостов) +│ ├── ROOT # Основное приложение по умолчанию +│ ├── examples # Пример приложения +│ └── [host-specific-apps] +│ ├── host1/app1 # Приложение app1 для host1 +│ └── host2/app2 # Приложение app2 для host2 +└── temp +└── work +└── bin +└── lib +``` + +Содержимое CATALINA_HOME в `/opt/tomcat`: + +- `/bin` — скрипты для запуска и остановки Tomcat (startup.sh, catalina.sh) +- `/lib` — библиотеки, необходимые для работы сервера (catalina.jar, jasper.jar) + + +`CATALINA_BASE` — директория с конфигурациями, временными файлами и приложениями, которые специфичны для каждого экземпляра Tomcat. Для нескольких инстансов рекомендуется создать отдельный `CATALINA_BASE` для каждого инстанса, например: + +`/etc/tomcat-instance1`, `/etc/tomcat-instance2` и т.д. + +- `/conf` — конфигурационные файлы для инстанса (server.xml, web.xml, context.xml). +- `/webapps` — развернутые приложения и .war файлы для данного инстанса. +- `/logs` — папка с логами инстанса. +- `/temp` — временные файлы инстанса. +- `/work` — кешированные объекты и скомпилированные JSP для данного инстанса. + +--- + +Про библиотеку **Logback** для логирования Java приложений + +В logback.xml основные блоки конфигурации включают: + +`` — корневой блок файла, внутри которого настраиваются все остальные элементы. + +`` — определяет, куда будут направляться логи (например, в файл, консоль, удалённый сервер): + +- `ConsoleAppender` — вывод в консоль (обычно используется для отладки). +- `FileAppender` — запись логов в файл. +- `RollingFileAppender` — запись в файл с ротацией по размеру или дате. +- `SocketAppender` — отправка логов на удалённый сервер. + +`` — внутри аппендера определяет форматирование логов (например, шаблоны с датой, уровнем лога и сообщением). + +`` — задаёт общий уровень логгирования (например, INFO, DEBUG) и связывает его с аппендерами. + +`` — настраивает уровень логгирования для отдельных классов или пакетов приложения (переопределяет ``). + + +- `TRACE`: Самый детализированный уровень, для отладки. +- `DEBUG`: Для отладки, но с меньшей детализацией, чем TRACE. +- `INFO`: Обычные информационные сообщения, отображающие состояние приложения. +- `WARN`: Предупреждения о возможных проблемах. +- `ERROR`: Сообщения об ошибках, когда выполнение операции не удалось + +WEB-INF/classes или src/main/resources +`` \ No newline at end of file