Скриптверста

Справочник разработчика

Команды под рукой.

Практические заметки по Linux и разработке. Открой нужную тему, возьми пример и возвращайся к работе.

терминал

~ $ ls notes/

linux/bash/python/javascript/go/sql/

~ $

Справочник

Linux SSH-ключи и Fail2ban Вход по ключу и проверка защиты от перебора паролей. ЧитатьСвернуть

На своём компьютере создай ключ. Содержимое файла с расширением .pub добавь в ~/.ssh/authorized_keys пользователя на VPS.

ssh-keygen -t ed25519
ssh -o PreferredAuthentications=publickey user@example.org

Вход по ключу проверь в новом окне и оставь текущую сессию открытой. Для входа только по ключу задай следующие параметры OpenSSH.

AuthenticationMethods publickey
PasswordAuthentication no
KbdInteractiveAuthentication no

Проверь синтаксис командой sudo sshd -t, затем перезагрузи конфигурацию через sudo systemctl reload ssh на Ubuntu. Снова проверь вход из отдельного окна.

Если Fail2ban установлен и правило sshd активно, его статус покажет число ошибок и заблокированных адресов.

sudo fail2ban-client status sshd
Linux Домен и Nginx От DNS-записи до ответа сервера и диагностики журнала. ЧитатьСвернуть

Создай DNS-запись A с публичным IPv4 сервера и укажи домен в server_name. Подставь своё имя вместо example.org.

getent ahostsv4 example.org
sudo nginx -t
sudo systemctl reload nginx
curl -I http://example.org

Если конфигурация прошла проверку, но страница недоступна, проверь, слушает ли сервер порт 80, и посмотри журнал службы.

sudo ss -ltn 'sport = :80'
sudo journalctl -u nginx -n 30 --no-pager
Bash Аргументы скрипта Проверь, что путь передан, и обработай пробелы в имени файла. ЧитатьСвернуть

Сохрани пример в read-file.sh. Конструкция ${1:-} даёт пустую строку без аргумента. Кавычки сохраняют путь целиком.

#!/usr/bin/env bash
file=${1:-}
if [[ -z "$file" || ! -f "$file" ]]; then
  printf '%s\n' 'Укажи путь к файлу' >&2
  exit 1
fi
cat -- "$file"

Запусти bash read-file.sh "мой файл.txt". Код возврата 1 означает ошибку.

Bash Обход файлов Поиск логов и подсчёт строк, даже если в путях есть пробелы. ЧитатьСвернуть

find -print0 разделяет имена нулевым байтом. Баш читает этот разделитель через read -d ''.

while IFS= read -r -d '' file; do
  wc -l -- "$file"
done < <(find . -type f -name '*.log' -print0)

Команда ищет файлы в текущем каталоге и его подкаталогах. Замени . на нужный путь.

Python Окружение venv Изоляция зависимостей проекта и установка из requirements.txt. ЧитатьСвернуть

В каталоге проекта на Linux создай и активируй виртуальное окружение. Последняя команда нужна, если у проекта есть requirements.txt.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt

Путь к интерпретатору покажет which python. Чтобы выйти из окружения, выполни deactivate.

Python Чтение и запись JSON Сохранение настроек в UTF-8 стандартной библиотекой Python. ЧитатьСвернуть

Пример создаёт демонстрационный файл demo-settings.json в текущем каталоге. Режим x остановится с ошибкой, если такой файл уже существует.

import json

with open("demo-settings.json", "x", encoding="utf-8") as file:
    json.dump({"name": "Скриптверста"}, file,
              ensure_ascii=False, indent=2)

with open("demo-settings.json", encoding="utf-8") as file:
    settings = json.load(file)

print(settings["name"])

Для JSON в строке используй json.loads(). Если формат входных данных повреждён, load() и loads() поднимут JSONDecodeError.

JavaScript Фильтрация массивов Выборка нужных объектов и преобразование результата. ЧитатьСвернуть

filter() оставляет подходящие элементы, а map() превращает их в новый массив.

const tasks = [
  { title: "Проверить DNS", done: true },
  { title: "Настроить Nginx", done: false },
];

const pending = tasks
  .filter((task) => !task.done)
  .map((task) => task.title);

console.log(pending);

Результат здесь — массив с одной строкой "Настроить Nginx".

JavaScript Запросы через fetch Загрузка JSON с проверкой HTTP-статуса. ЧитатьСвернуть

fetch() возвращает ответ даже при статусе 404. Проверяй response.ok перед чтением тела.

async function loadJson(url) {
  const response = await fetch(url);
  if (!response.ok) {
    throw new Error("HTTP " + response.status);
  }
  return response.json();
}

Вызови функцию с адресом своего JSON API и обработай ошибку в try…catch.

Go Первый модуль Go Минимальная программа, go.mod и запуск из терминала. ЧитатьСвернуть

В новом каталоге создай модуль командой go mod init example.com/hello. Сохрани программу в main.go.

package main

import "fmt"

func main() {
    fmt.Println("Привет, Go!")
}

go run . запустит программу в текущем каталоге. Команда go fmt ./... приведёт исходники модуля к стандартному формату.

Go Обработка ошибок Проверка error и добавление контекста перед возвратом. ЧитатьСвернуть

В Go ошибку обычно проверяют сразу после вызова. Для этого примера импортируй fmt и os.

func readConfig(path string) ([]byte, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return nil, fmt.Errorf("read config: %w", err)
    }
    return data, nil
}

%w сохраняет исходную ошибку. Вызывающий код сможет проверить её через errors.Is.

SQL SELECT, WHERE и сортировка Выборка последних открытых задач с понятным порядком строк. ЧитатьСвернуть

Пример для SQLite с таблицей tasks. Колонка done хранит 0 для открытых задач.

SELECT id, title, created_at
FROM tasks
WHERE done = 0
ORDER BY created_at DESC, id DESC
LIMIT 10;

Второе поле сортировки задаёт порядок для строк с одинаковой датой. LIMIT оставляет первые десять строк результата.

SQL Транзакции и откат Проверка изменения в своей сессии перед сохранением. ЧитатьСвернуть

На учебной базе SQLite можно изменить строку внутри транзакции, проверить результат и откатить изменение.

BEGIN;
UPDATE tasks SET done = 1 WHERE id = 42;
SELECT id, title, done FROM tasks WHERE id = 42;
ROLLBACK;

В реальной операции COMMIT сохраняет изменения, а ROLLBACK отменяет их. Выполняй команды в одной сессии.