crappy commit

This commit is contained in:
Илья Макаров 2024-10-30 19:26:17 +03:00
parent 1cdc439e4e
commit 7eb6cdf61e
10 changed files with 310 additions and 4 deletions

31
db/POSTGRES.MD Normal file
View File

@ -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;` - просмотр блокировок

View File

@ -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"`

11
java/COMMANDS.MD Normal file
View File

@ -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"`

0
java/NOTES.MD Normal file
View File

View File

@ -36,6 +36,21 @@
APT работает поверх более низкоуровневого инструмента `dpkg`, который непосредственно устанавливает .deb пакеты.
- `sudo dpkg -i package_name.deb` - для установки `.deb` пакета
- `sudo apt --fix-broken install` - если возникли проблемы с зависимостями
---
- `rpm -ivh <package_name>.rpm` - установка rpm пакета
- `rpm -e <package_name>.rpm` - удаления пакета
- `rpm -Uvh <package_name>.rpm` - обновление пакета, если он не установленЮ он установится
- `rpm -qi <package_name>` - просмотр информации о пакете
- `rpm -V <package_name>` - проверка целостности пакета
- `rpm -ql <package_name>` - список файлов в пакете
- `dnf install <package_name>.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] <DEVICE> <MOUNTPOINT>
- `sudo mount -t ext4 /dev/sda1 /mnt` - подключить с указанием типа файловой системы
---
`df -Th` - информация о файловых системах и их типах
- `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`

View File

@ -109,4 +109,49 @@ Swap-файл (или swap-раздел) — это специальная об
Если целевой файл удален, символическая ссылка становится «битой» и неработоспособной, так как она указывает на несуществующий путь.
Символические ссылки могут указывать на файлы или каталоги.
Работают между различными файловыми системами.
Они легче по объему, поскольку содержат только путь к файлу, а не данные самого файла.
Они легче по объему, поскольку содержат только путь к файлу, а не данные самого файла.
---
В файловой системе 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=, и его используют для критически необходимых зависимостей.

View File

@ -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 <path_to_data_dir>` - размер директории с данными баз, логами, конфигами, транзакциями и т.д.
- `psql -U postgres -c "SHOW port;"`
---
`sudo find / -type f -name "*.backup" -o -name "*.sql" -o -name "*.dump"` - этой командой можно поискать бэкапы
---
- `docker volume ls`
- `docker volume inspect <volume_name>`
- `docker inspect <container_name> | grep -i mount`
- `docker inspect <container_name> | grep -i volumes`
- `docker port <container_name>`
- `docker inspect <container_name> | grep -i port`

34
other/SYSTEMD.MD Normal file
View File

@ -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`

BIN
static/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

119
vebsrv/tomcat/TOMCAT.MD Normal file
View File

@ -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 основные блоки конфигурации включают:
`<configuration>` — корневой блок файла, внутри которого настраиваются все остальные элементы.
`<appender>` — определяет, куда будут направляться логи (например, в файл, консоль, удалённый сервер):
- `ConsoleAppender` — вывод в консоль (обычно используется для отладки).
- `FileAppender` — запись логов в файл.
- `RollingFileAppender` — запись в файл с ротацией по размеру или дате.
- `SocketAppender` — отправка логов на удалённый сервер.
`<encoder>` — внутри аппендера определяет форматирование логов (например, шаблоны с датой, уровнем лога и сообщением).
`<root>` — задаёт общий уровень логгирования (например, INFO, DEBUG) и связывает его с аппендерами.
`<logger>` — настраивает уровень логгирования для отдельных классов или пакетов приложения (переопределяет `<root>`).
- `TRACE`: Самый детализированный уровень, для отладки.
- `DEBUG`: Для отладки, но с меньшей детализацией, чем TRACE.
- `INFO`: Обычные информационные сообщения, отображающие состояние приложения.
- `WARN`: Предупреждения о возможных проблемах.
- `ERROR`: Сообщения об ошибках, когда выполнение операции не удалось
WEB-INF/classes или src/main/resources
`<configuration scan="true" scanPeriod="30 seconds">`