vault backup: 2026-04-15 10:27:17

This commit is contained in:
Vadym Samoilenko 2026-04-15 10:27:17 +01:00
parent 690b55ce0d
commit 1d3febbc33
11 changed files with 230 additions and 511 deletions

View file

@ -1,511 +0,0 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Linux · Docker · Apache2 · Vim — Шпаргалка</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--bg: #0f1117;
--bg2: #181c27;
--bg3: #1e2335;
--border: rgba(255,255,255,0.08);
--border-hover: rgba(255,255,255,0.16);
--text: #e8eaf0;
--text2: #8b90a0;
--text3: #5a5f70;
--accent: #4f8ef7;
--accent-bg: rgba(79,142,247,0.12);
--green: #3ecf8e;
--green-bg: rgba(62,207,142,0.12);
--amber: #f5a623;
--amber-bg: rgba(245,166,35,0.12);
--red: #f56565;
--red-bg: rgba(245,101,101,0.12);
--purple: #a78bfa;
--purple-bg: rgba(167,139,250,0.12);
--mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
--sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
}
body {
background: var(--bg);
color: var(--text);
font-family: var(--sans);
min-height: 100vh;
padding: 2rem 1rem;
}
.container { max-width: 860px; margin: 0 auto; }
header {
margin-bottom: 2rem;
padding-bottom: 1.5rem;
border-bottom: 0.5px solid var(--border);
display: flex;
justify-content: space-between;
align-items: flex-end;
flex-wrap: wrap;
gap: 1rem;
}
header h1 {
font-size: 22px;
font-weight: 600;
letter-spacing: -0.02em;
color: var(--text);
}
header p {
font-size: 13px;
color: var(--text3);
margin-top: 4px;
}
.tabs {
display: flex;
gap: 6px;
flex-wrap: wrap;
margin-bottom: 1.5rem;
}
.tab {
padding: 7px 16px;
font-size: 13px;
font-weight: 500;
border-radius: 999px;
border: 0.5px solid var(--border);
background: transparent;
cursor: pointer;
color: var(--text2);
font-family: var(--sans);
transition: all .15s;
}
.tab:hover { background: var(--bg3); color: var(--text); border-color: var(--border-hover); }
.tab.active { background: var(--text); color: var(--bg); border-color: transparent; }
.search-wrap { margin-bottom: 1.25rem; }
.search-wrap input {
width: 100%;
padding: 9px 14px;
font-size: 13px;
border: 0.5px solid var(--border);
border-radius: 10px;
background: var(--bg2);
color: var(--text);
font-family: var(--sans);
outline: none;
transition: border-color .15s;
}
.search-wrap input:focus { border-color: var(--accent); }
.search-wrap input::placeholder { color: var(--text3); }
.section { display: none; }
.section.active { display: block; }
.group { margin-bottom: 1.5rem; }
.group-title {
font-size: 11px;
font-weight: 600;
letter-spacing: .08em;
text-transform: uppercase;
color: var(--text3);
margin-bottom: 8px;
padding-left: 2px;
}
.cmd-list { display: flex; flex-direction: column; gap: 3px; }
.cmd {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
align-items: start;
padding: 9px 12px;
border-radius: 8px;
border: 0.5px solid var(--border);
background: var(--bg2);
font-size: 13px;
transition: border-color .12s, background .12s;
}
.cmd:hover { background: var(--bg3); border-color: var(--border-hover); }
.cmd.hidden { display: none; }
.cmd code {
font-family: var(--mono);
font-size: 12px;
color: var(--accent);
background: var(--accent-bg);
padding: 3px 8px;
border-radius: 5px;
word-break: break-all;
line-height: 1.6;
display: inline-block;
}
.cmd .desc {
color: var(--text2);
line-height: 1.55;
padding-top: 1px;
}
.divider {
height: 0.5px;
background: var(--border);
margin: 1.25rem 0;
}
.alert {
border-radius: 9px;
padding: 10px 14px;
font-size: 12.5px;
line-height: 1.55;
margin-bottom: 1.25rem;
border: 0.5px solid;
}
.alert-warn { background: var(--amber-bg); border-color: rgba(245,166,35,0.25); color: var(--amber); }
.alert-danger { background: var(--red-bg); border-color: rgba(245,101,101,0.25); color: var(--red); }
.vim-modes {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-bottom: 1.25rem;
}
.mode-badge {
padding: 5px 12px;
border-radius: 6px;
font-size: 12px;
font-weight: 500;
border: 0.5px solid;
}
.mode-normal { background: var(--green-bg); color: var(--green); border-color: rgba(62,207,142,0.3); }
.mode-insert { background: var(--accent-bg); color: var(--accent); border-color: rgba(79,142,247,0.3); }
.mode-visual { background: var(--amber-bg); color: var(--amber); border-color: rgba(245,166,35,0.3); }
.mode-command { background: var(--bg3); color: var(--text2); border-color: var(--border-hover); }
footer {
margin-top: 3rem;
padding-top: 1.5rem;
border-top: 0.5px solid var(--border);
font-size: 12px;
color: var(--text3);
text-align: center;
}
@media (max-width: 580px) {
.cmd { grid-template-columns: 1fr; gap: 5px; }
}
</style>
</head>
<body>
<div class="container">
<header>
<div>
<h1>Linux · Docker · Apache2 · Vim</h1>
<p>Шпаргалка для быстрого старта</p>
</div>
</header>
<div class="tabs">
<button class="tab active" onclick="show('linux', this)">🐧 Linux</button>
<button class="tab" onclick="show('docker', this)">🐳 Docker</button>
<button class="tab" onclick="show('apache', this)">🌐 Apache2</button>
<button class="tab" onclick="show('vim', this)">📝 Vim</button>
</div>
<div class="search-wrap">
<input type="text" id="search" placeholder="Поиск команды..." oninput="filterCmds(this.value)">
</div>
<!-- LINUX -->
<div class="section active" id="linux">
<div class="group">
<div class="group-title">Навигация и файлы</div>
<div class="cmd-list">
<div class="cmd"><code>ls -la</code><span class="desc">Показать все файлы с деталями (включая скрытые)</span></div>
<div class="cmd"><code>pwd</code><span class="desc">Где ты сейчас находишься</span></div>
<div class="cmd"><code>cd /path/to/dir</code><span class="desc">Перейти в папку</span></div>
<div class="cmd"><code>cd ..</code><span class="desc">На уровень выше</span></div>
<div class="cmd"><code>cd ~</code><span class="desc">Домой (в /home/user)</span></div>
<div class="cmd"><code>mkdir mydir</code><span class="desc">Создать папку</span></div>
<div class="cmd"><code>mkdir -p a/b/c</code><span class="desc">Создать вложенные папки сразу</span></div>
<div class="cmd"><code>rm file.txt</code><span class="desc">Удалить файл</span></div>
<div class="cmd"><code>rm -rf ./folder</code><span class="desc">⚠️ Удалить папку со всем содержимым</span></div>
<div class="cmd"><code>cp src dest</code><span class="desc">Скопировать файл</span></div>
<div class="cmd"><code>mv old new</code><span class="desc">Переместить / переименовать</span></div>
<div class="cmd"><code>cat file.txt</code><span class="desc">Вывести содержимое файла</span></div>
<div class="cmd"><code>tail -f log.txt</code><span class="desc">Смотреть лог в реальном времени</span></div>
<div class="cmd"><code>grep "слово" file</code><span class="desc">Найти строку в файле</span></div>
<div class="cmd"><code>find / -name "*.log"</code><span class="desc">Найти файлы по имени</span></div>
<div class="cmd"><code>chmod 755 script.sh</code><span class="desc">Выдать права на выполнение</span></div>
<div class="cmd"><code>chown user:group file</code><span class="desc">Сменить владельца файла</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Процессы и система</div>
<div class="cmd-list">
<div class="cmd"><code>ps aux</code><span class="desc">Показать все запущенные процессы</span></div>
<div class="cmd"><code>top</code><span class="desc">Монитор процессов (q — выйти)</span></div>
<div class="cmd"><code>htop</code><span class="desc">Красивый монитор процессов</span></div>
<div class="cmd"><code>kill 1234</code><span class="desc">Убить процесс по PID</span></div>
<div class="cmd"><code>kill -9 1234</code><span class="desc">Убить намертво (если обычный kill не помог)</span></div>
<div class="cmd"><code>df -h</code><span class="desc">Сколько места на дисках</span></div>
<div class="cmd"><code>du -sh ./dir</code><span class="desc">Сколько весит папка</span></div>
<div class="cmd"><code>free -h</code><span class="desc">Сколько памяти</span></div>
<div class="cmd"><code>uname -a</code><span class="desc">Версия системы и ядра</span></div>
<div class="cmd"><code>uptime</code><span class="desc">Сколько сервер работает без перезагрузки</span></div>
<div class="cmd"><code>whoami</code><span class="desc">Под каким юзером ты работаешь</span></div>
<div class="cmd"><code>sudo su</code><span class="desc">Стать root-ом</span></div>
<div class="cmd"><code>history</code><span class="desc">История команд</span></div>
<div class="cmd"><code>Ctrl + C</code><span class="desc">Остановить текущий процесс</span></div>
<div class="cmd"><code>Ctrl + Z</code><span class="desc">Отправить процесс в фон</span></div>
<div class="cmd"><code>Ctrl + L</code><span class="desc">Очистить экран терминала</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Сеть и SSH</div>
<div class="cmd-list">
<div class="cmd"><code>ssh user@ip</code><span class="desc">Подключиться по SSH</span></div>
<div class="cmd"><code>ssh -p 2222 user@ip</code><span class="desc">SSH на нестандартный порт</span></div>
<div class="cmd"><code>scp file user@ip:/path</code><span class="desc">Скопировать файл на сервер</span></div>
<div class="cmd"><code>curl -I https://site.com</code><span class="desc">Проверить HTTP заголовки сайта</span></div>
<div class="cmd"><code>wget https://url/file</code><span class="desc">Скачать файл</span></div>
<div class="cmd"><code>netstat -tulpn</code><span class="desc">Какие порты слушают (занятые)</span></div>
<div class="cmd"><code>ss -tulpn</code><span class="desc">То же самое, но быстрее</span></div>
<div class="cmd"><code>ping google.com</code><span class="desc">Проверить соединение</span></div>
<div class="cmd"><code>ufw status</code><span class="desc">Статус файрвола</span></div>
<div class="cmd"><code>ufw allow 80</code><span class="desc">Открыть порт 80</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Systemd (сервисы)</div>
<div class="cmd-list">
<div class="cmd"><code>systemctl status nginx</code><span class="desc">Статус сервиса</span></div>
<div class="cmd"><code>systemctl start nginx</code><span class="desc">Запустить сервис</span></div>
<div class="cmd"><code>systemctl stop nginx</code><span class="desc">Остановить сервис</span></div>
<div class="cmd"><code>systemctl restart nginx</code><span class="desc">Перезапустить сервис</span></div>
<div class="cmd"><code>systemctl enable nginx</code><span class="desc">Автозапуск при старте системы</span></div>
<div class="cmd"><code>journalctl -u nginx -f</code><span class="desc">Логи сервиса в реальном времени</span></div>
</div>
</div>
</div>
<!-- DOCKER -->
<div class="section" id="docker">
<div class="alert alert-warn">💡 Большинство команд требуют <code style="background:rgba(245,166,35,0.2);color:var(--amber);font-family:var(--mono);font-size:12px;padding:1px 5px;border-radius:4px;">sudo</code> или добавления себя в группу docker</div>
<div class="group">
<div class="group-title">Контейнеры</div>
<div class="cmd-list">
<div class="cmd"><code>docker ps</code><span class="desc">Список запущенных контейнеров</span></div>
<div class="cmd"><code>docker ps -a</code><span class="desc">Все контейнеры, включая остановленные</span></div>
<div class="cmd"><code>docker run -d nginx</code><span class="desc">Запустить контейнер в фоне</span></div>
<div class="cmd"><code>docker run -it ubuntu bash</code><span class="desc">Запустить интерактивно с bash</span></div>
<div class="cmd"><code>docker stop myapp</code><span class="desc">Остановить контейнер</span></div>
<div class="cmd"><code>docker start myapp</code><span class="desc">Запустить остановленный контейнер</span></div>
<div class="cmd"><code>docker restart myapp</code><span class="desc">Перезапустить контейнер</span></div>
<div class="cmd"><code>docker rm myapp</code><span class="desc">Удалить контейнер (должен быть остановлен)</span></div>
<div class="cmd"><code>docker rm -f myapp</code><span class="desc">Удалить контейнер принудительно</span></div>
<div class="cmd"><code>docker exec -it myapp bash</code><span class="desc">Зайти внутрь работающего контейнера</span></div>
<div class="cmd"><code>docker logs myapp</code><span class="desc">Логи контейнера</span></div>
<div class="cmd"><code>docker logs -f myapp</code><span class="desc">Логи в реальном времени</span></div>
<div class="cmd"><code>docker inspect myapp</code><span class="desc">Вся инфа о контейнере (JSON)</span></div>
<div class="cmd"><code>docker stats</code><span class="desc">CPU/RAM всех контейнеров в реальном времени</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Образы</div>
<div class="cmd-list">
<div class="cmd"><code>docker images</code><span class="desc">Список скачанных образов</span></div>
<div class="cmd"><code>docker pull nginx</code><span class="desc">Скачать образ с Docker Hub</span></div>
<div class="cmd"><code>docker build -t myapp .</code><span class="desc">Собрать образ из Dockerfile в текущей папке</span></div>
<div class="cmd"><code>docker rmi nginx</code><span class="desc">Удалить образ</span></div>
<div class="cmd"><code>docker tag myapp user/myapp:v1</code><span class="desc">Дать образу тег</span></div>
<div class="cmd"><code>docker push user/myapp:v1</code><span class="desc">Залить образ в Docker Hub</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Docker Compose</div>
<div class="cmd-list">
<div class="cmd"><code>docker compose up -d</code><span class="desc">Запустить всё из docker-compose.yml в фоне</span></div>
<div class="cmd"><code>docker compose down</code><span class="desc">Остановить и удалить контейнеры</span></div>
<div class="cmd"><code>docker compose down -v</code><span class="desc">То же + удалить volumes (данные!)</span></div>
<div class="cmd"><code>docker compose logs -f</code><span class="desc">Логи всех сервисов</span></div>
<div class="cmd"><code>docker compose ps</code><span class="desc">Статус сервисов</span></div>
<div class="cmd"><code>docker compose restart app</code><span class="desc">Перезапустить конкретный сервис</span></div>
<div class="cmd"><code>docker compose build</code><span class="desc">Пересобрать образы</span></div>
<div class="cmd"><code>docker compose pull</code><span class="desc">Обновить образы</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Чистка мусора</div>
<div class="cmd-list">
<div class="cmd"><code>docker system prune</code><span class="desc">Удалить всё неиспользуемое</span></div>
<div class="cmd"><code>docker volume prune</code><span class="desc">Удалить неиспользуемые volumes</span></div>
<div class="cmd"><code>docker network ls</code><span class="desc">Список сетей</span></div>
<div class="cmd"><code>docker volume ls</code><span class="desc">Список volumes</span></div>
</div>
</div>
</div>
<!-- APACHE2 -->
<div class="section" id="apache">
<div class="group">
<div class="group-title">Управление сервисом</div>
<div class="cmd-list">
<div class="cmd"><code>systemctl status apache2</code><span class="desc">Статус Apache</span></div>
<div class="cmd"><code>systemctl start apache2</code><span class="desc">Запустить Apache</span></div>
<div class="cmd"><code>systemctl stop apache2</code><span class="desc">Остановить Apache</span></div>
<div class="cmd"><code>systemctl restart apache2</code><span class="desc">Перезапустить (разрывает соединения)</span></div>
<div class="cmd"><code>systemctl reload apache2</code><span class="desc">Перезагрузить конфиг (без разрыва)</span></div>
<div class="cmd"><code>apachectl configtest</code><span class="desc">Проверить конфиг на ошибки перед перезапуском</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Конфиги и сайты</div>
<div class="cmd-list">
<div class="cmd"><code>/etc/apache2/</code><span class="desc">Главная папка конфигов</span></div>
<div class="cmd"><code>/etc/apache2/apache2.conf</code><span class="desc">Основной конфиг сервера</span></div>
<div class="cmd"><code>/etc/apache2/sites-available/</code><span class="desc">Доступные конфиги сайтов (все)</span></div>
<div class="cmd"><code>/etc/apache2/sites-enabled/</code><span class="desc">Включённые сайты (симлинки)</span></div>
<div class="cmd"><code>a2ensite mysite.conf</code><span class="desc">Включить сайт</span></div>
<div class="cmd"><code>a2dissite mysite.conf</code><span class="desc">Выключить сайт</span></div>
<div class="cmd"><code>a2enmod rewrite</code><span class="desc">Включить модуль rewrite</span></div>
<div class="cmd"><code>a2dismod rewrite</code><span class="desc">Выключить модуль</span></div>
<div class="cmd"><code>apache2ctl -M</code><span class="desc">Список включённых модулей</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Логи</div>
<div class="cmd-list">
<div class="cmd"><code>/var/log/apache2/access.log</code><span class="desc">Все запросы к серверу</span></div>
<div class="cmd"><code>/var/log/apache2/error.log</code><span class="desc">Ошибки — сюда первым делом</span></div>
<div class="cmd"><code>tail -f /var/log/apache2/error.log</code><span class="desc">Смотреть ошибки в реальном времени</span></div>
<div class="cmd"><code>grep "error" /var/log/apache2/error.log</code><span class="desc">Найти все ошибки в логе</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Полезные штуки</div>
<div class="cmd-list">
<div class="cmd"><code>/var/www/html/</code><span class="desc">Корень сайта по умолчанию</span></div>
<div class="cmd"><code>apachectl -v</code><span class="desc">Версия Apache</span></div>
<div class="cmd"><code>apache2 -l</code><span class="desc">Скомпилированные модули</span></div>
<div class="cmd"><code>a2enmod ssl &amp;&amp; a2enmod headers</code><span class="desc">Включить SSL и headers (для HTTPS)</span></div>
<div class="cmd"><code>certbot --apache -d site.com</code><span class="desc">Бесплатный SSL через Let's Encrypt</span></div>
</div>
</div>
</div>
<!-- VIM -->
<div class="section" id="vim">
<div class="alert alert-danger">🚨 Главное правило: Vim имеет режимы. По умолчанию ты в NORMAL — нажатие букв выполняет команды, а НЕ пишет текст.</div>
<div class="vim-modes">
<span class="mode-badge mode-normal">NORMAL — навигация и команды</span>
<span class="mode-badge mode-insert">INSERT — ввод текста</span>
<span class="mode-badge mode-visual">VISUAL — выделение</span>
<span class="mode-badge mode-command">COMMAND — команды с двоеточием</span>
</div>
<div class="group">
<div class="group-title">Войти в режим ввода текста (из NORMAL)</div>
<div class="cmd-list">
<div class="cmd"><code>i</code><span class="desc">Начать писать перед курсором</span></div>
<div class="cmd"><code>a</code><span class="desc">Начать писать после курсора</span></div>
<div class="cmd"><code>o</code><span class="desc">Создать новую строку ниже и начать писать</span></div>
<div class="cmd"><code>O</code><span class="desc">Создать новую строку выше и начать писать</span></div>
<div class="cmd"><code>Esc</code><span class="desc">⬅️ Выйти из любого режима обратно в NORMAL</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Сохранить и выйти (из NORMAL, нажать :)</div>
<div class="cmd-list">
<div class="cmd"><code>:w</code><span class="desc">Сохранить файл</span></div>
<div class="cmd"><code>:q</code><span class="desc">Выйти (если нет несохранённых изменений)</span></div>
<div class="cmd"><code>:wq</code><span class="desc">Сохранить и выйти</span></div>
<div class="cmd"><code>:q!</code><span class="desc">Выйти БЕЗ сохранения (бросить изменения)</span></div>
<div class="cmd"><code>:wq!</code><span class="desc">Сохранить и выйти принудительно (read-only)</span></div>
<div class="cmd"><code>ZZ</code><span class="desc">Сохранить и выйти (быстрый способ)</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Навигация (NORMAL режим)</div>
<div class="cmd-list">
<div class="cmd"><code>h j k l</code><span class="desc">← ↓ ↑ → (или просто стрелки)</span></div>
<div class="cmd"><code>gg</code><span class="desc">Перейти в начало файла</span></div>
<div class="cmd"><code>G</code><span class="desc">Перейти в конец файла</span></div>
<div class="cmd"><code>:42</code><span class="desc">Перейти на строку 42</span></div>
<div class="cmd"><code>Ctrl + F</code><span class="desc">Страница вниз</span></div>
<div class="cmd"><code>Ctrl + B</code><span class="desc">Страница вверх</span></div>
<div class="cmd"><code>0</code><span class="desc">В начало строки</span></div>
<div class="cmd"><code>$</code><span class="desc">В конец строки</span></div>
<div class="cmd"><code>w</code><span class="desc">Следующее слово</span></div>
<div class="cmd"><code>b</code><span class="desc">Предыдущее слово</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Редактирование (NORMAL режим)</div>
<div class="cmd-list">
<div class="cmd"><code>dd</code><span class="desc">Вырезать (удалить) строку</span></div>
<div class="cmd"><code>yy</code><span class="desc">Скопировать строку</span></div>
<div class="cmd"><code>p</code><span class="desc">Вставить после курсора</span></div>
<div class="cmd"><code>P</code><span class="desc">Вставить перед курсором</span></div>
<div class="cmd"><code>u</code><span class="desc">Отменить действие (Undo)</span></div>
<div class="cmd"><code>Ctrl + R</code><span class="desc">Вернуть отменённое (Redo)</span></div>
<div class="cmd"><code>x</code><span class="desc">Удалить символ под курсором</span></div>
<div class="cmd"><code>dw</code><span class="desc">Удалить слово</span></div>
<div class="cmd"><code>cw</code><span class="desc">Заменить слово (удаляет и входит в INSERT)</span></div>
<div class="cmd"><code>r</code><span class="desc">Заменить один символ (без входа в INSERT)</span></div>
<div class="cmd"><code>.</code><span class="desc">Повторить последнее действие</span></div>
</div>
</div>
<div class="divider"></div>
<div class="group">
<div class="group-title">Поиск и замена</div>
<div class="cmd-list">
<div class="cmd"><code>/слово</code><span class="desc">Найти вперёд (Enter — перейти)</span></div>
<div class="cmd"><code>?слово</code><span class="desc">Найти назад</span></div>
<div class="cmd"><code>n</code><span class="desc">Следующее совпадение</span></div>
<div class="cmd"><code>N</code><span class="desc">Предыдущее совпадение</span></div>
<div class="cmd"><code>:s/old/new/g</code><span class="desc">Заменить в текущей строке</span></div>
<div class="cmd"><code>:%s/old/new/g</code><span class="desc">Заменить во всём файле</span></div>
<div class="cmd"><code>:%s/old/new/gc</code><span class="desc">То же, но с подтверждением каждой замены</span></div>
</div>
</div>
</div>
<footer>Linux · Docker · Apache2 · Vim Cheatsheet — для тех кто забывает команды</footer>
</div>
<script>
function show(id, btn) {
document.querySelectorAll('.section').forEach(s => s.classList.remove('active'));
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
document.getElementById(id).classList.add('active');
btn.classList.add('active');
document.getElementById('search').value = '';
document.querySelectorAll('.cmd').forEach(c => c.classList.remove('hidden'));
}
function filterCmds(q) {
const query = q.toLowerCase();
document.querySelectorAll('.cmd').forEach(cmd => {
cmd.classList.toggle('hidden', query.length > 0 && !cmd.textContent.toLowerCase().includes(query));
});
}
</script>
</body>
</html>

View file

@ -10,3 +10,4 @@ tags: [daily]
- 10:13 (26min) — Claude Code session ended | `memory-compiler`
- 10:17 — Claude Code session ended | `memory-compiler`
- 10:21 — Claude Code session ended | `memory-compiler`
- 10:26 — Claude Code session ended | `memory-compiler`

View file

@ -18,6 +18,7 @@ This 3-hop pattern works for hundreds of articles without vector search.
| Topic | Description | Articles |
|-------|-------------|----------|
| [[wiki/obsidian-rag/_index\|obsidian-rag/]] | Karpathy's LLM wiki method — Obsidian RAG, setup, vs true RAG | 3 |
| [[wiki/concepts/_index\|concepts/]] | Atomic knowledge extracted from Claude Code sessions | 0 |
| [[wiki/connections/_index\|connections/]] | Cross-cutting insights linking 2+ concepts | 0 |
| [[wiki/qa/_index\|qa/]] | Filed answers to queries (saved with `--file-back`) | 0 |

View file

@ -0,0 +1,10 @@
# Obsidian RAG — Topic Index
> Knowledge base methodology: Karpathy's LLM wiki approach using Obsidian + Claude Code.
> No vector database. No embeddings. Just structured markdown with smart indexing.
| Article | Summary | Source | Updated |
|---------|---------|--------|---------|
| [[wiki/obsidian-rag/karpathy-llm-wiki-approach\|karpathy-llm-wiki-approach]] | Core concept: compiler analogy, 4 verbs, why it works | raw/ | 2026-04-15 |
| [[wiki/obsidian-rag/obsidian-rag-vs-true-rag\|obsidian-rag-vs-true-rag]] | When to use Obsidian RAG vs vector database RAG | raw/ | 2026-04-15 |
| [[wiki/obsidian-rag/claude-code-obsidian-setup\|claude-code-obsidian-setup]] | Practical setup: tools, hooks, vault structure, commands | raw/ | 2026-04-15 |

View file

@ -0,0 +1,92 @@
---
title: "Claude Code + Obsidian Setup"
aliases: [obsidian-setup, karpathy-setup, wiki-setup]
tags: [claude-code, obsidian, setup, workflow]
sources: [raw/Karpathy's Obsidian RAG + Claude Code = CHEAT CODE.md, raw/Как сделать Claude Code в 10 раз умнее.md]
created: 2026-04-15
updated: 2026-04-15
---
# Claude Code + Obsidian Setup
Practical setup guide for the Karpathy-style LLM knowledge base.
## Key Takeaways
- CLAUDE.md is the most important file — it defines Claude as "the librarian"
- Web Clipper + Local Images Plus = one-click article ingestion
- `_master-index.md` is the LLM's table of contents — always kept current
- Sessions auto-captured via hooks → compiled to wiki after 21:00
## Tools Required
| Tool | Purpose | Required |
|------|---------|---------|
| Obsidian | Frontend (graph view, search, browse) | Yes |
| Claude Code | LLM backend (compile, query, audit) | Yes |
| Obsidian Web Clipper | Browser extension → raw/ | Recommended |
| Local Images Plus | Downloads images from clipped pages | Recommended |
| claude-memory-compiler | Auto-captures sessions → daily logs | Installed |
## Vault Structure (This Vault)
```
VadymSamoilenko/
├── raw/ ← dump articles here (Web Clipper target)
│ └── _processed/ ← compiled files move here
├── wiki/ ← LLM's domain, do not edit manually
│ ├── _master-index.md
│ ├── obsidian-rag/ ← example topic folder
│ ├── concepts/ ← auto-generated from sessions
│ ├── connections/ ← auto-generated cross-links
│ └── qa/ ← filed query answers
└── output/ ← query results, reports
```
## Hook System (Already Configured)
| Hook | When | What it does |
|------|------|-------------|
| SessionStart | Every session start | Injects `_master-index.md` + recent daily log |
| SessionEnd | Session ends | Captures transcript → flush.py → daily log |
| PreCompact | Before context compaction | Safety net — saves context |
| PostCompact | After compaction | Haiku writes structured entry to project note |
Auto-compilation fires after **21:00** when a session ends.
## The Compile Workflow
1. Clip article with Web Clipper → lands in `raw/`
2. Open Claude Code, say: **"compile"**
3. Claude reads raw/, creates wiki article, updates `_index.md` and `_master-index.md`
4. Processed file moves to `raw/_processed/`
5. Article appears in Obsidian with wikilinks
## Query Pattern (3 hops)
```
Question → _master-index.md → topic/_index.md → article → answer
```
Manual query:
```bash
cd ~/.claude/memory-compiler && uv run python scripts/query.py "your question"
```
With auto-filing:
```bash
uv run python scripts/query.py "your question" --file-back
```
## Audit Command
```
audit the wiki
```
Claude reviews for: broken links, orphan articles, contradictions, gaps. Reports without making changes.
## Related
- [[wiki/obsidian-rag/karpathy-llm-wiki-approach|Karpathy's LLM Wiki Approach]]
- [[wiki/obsidian-rag/obsidian-rag-vs-true-rag|Obsidian RAG vs True RAG]]

View file

@ -0,0 +1,70 @@
---
title: "Karpathy's LLM Knowledge Base Approach"
aliases: [obsidian-rag, karpathy-wiki, llm-knowledge-base]
tags: [knowledge-management, obsidian, claude-code, workflow]
sources: [raw/Karpathy's Obsidian RAG + Claude Code = CHEAT CODE.md, raw/Как сделать Claude Code в 10 раз умнее.md]
created: 2026-04-15
updated: 2026-04-15
---
# Karpathy's LLM Knowledge Base Approach
Andrej Karpathy replaced RAG with a structured Obsidian vault + LLM system. No vector database, no embeddings — just markdown files with smart indexing.
## Key Takeaways
- LLMs navigate **index files**, not brute-force search every document
- **3-hop navigation**: `_master-index.md` → topic `_index.md` → article = fast + cheap
- Works for solo operators and small teams up to ~thousands of documents
- Obsidian is the **frontend** (graph view, search, browsing) — Claude Code is the **backend**
- The wiki is the LLM's domain — humans dump raw material, LLM maintains the wiki
## The Compiler Analogy
| Stage | Role | Path |
|-------|------|------|
| Raw sources | Input (articles, PDFs, clips) | `raw/` |
| LLM compiler | Processes raw → structured wiki | Claude Code |
| Wiki | The executable — queryable knowledge | `wiki/` |
| Lint | Health checks (broken links, gaps) | periodic audit |
| Query | Runtime — using the knowledge | any session |
## Why It Works Without RAG
Claude Code doesn't read every document when answering. It does 3-4 targeted file reads:
1. Read `wiki/_master-index.md` — what topics exist?
2. Read that topic's `_index.md` — what articles are in it?
3. Read 1-3 specific articles
4. Synthesize the answer
This scales because **the index is the retrieval mechanism**, not semantic similarity search.
## The Four Verbs
- **Clip** — Web Clipper → raw/ (one click)
- **Compile** — "compile" in Claude Code → wiki articles appear
- **Query** — ask questions → answers from wiki (3-4 file reads)
- **Audit** — "audit the wiki" → LLM finds gaps, contradictions
## Vault Structure
```
vault/
├── raw/ — inbox (you own this)
├── wiki/ — LLM's domain
│ ├── _master-index.md
│ └── {topic}/
│ ├── _index.md
│ └── {article}.md
└── output/ — query results
```
## Key Insight: Outputs Compound
Every query result can be filed back into the wiki (`--file-back`). Questions make the system smarter — the answer becomes part of the knowledge base.
## Related
- [[wiki/obsidian-rag/obsidian-rag-vs-true-rag|Obsidian RAG vs True RAG]]
- [[wiki/obsidian-rag/claude-code-obsidian-setup|Claude Code + Obsidian Setup]]
- [[wiki/concepts/_index|Session Knowledge Concepts]]

View file

@ -0,0 +1,56 @@
---
title: "Obsidian RAG vs True RAG"
aliases: [rag-comparison, when-to-use-rag]
tags: [rag, knowledge-management, architecture, decision]
sources: [raw/Karpathy's Obsidian RAG + Claude Code = CHEAT CODE.md]
created: 2026-04-15
updated: 2026-04-15
---
# Obsidian RAG vs True RAG
When does structured markdown beat a vector database? Almost always, for solo operators.
## Key Takeaways
- Obsidian RAG wins for <5,000 docs, solo/small team, personal use
- True RAG wins at scale: millions of docs, multi-user, production apps
- Start with Obsidian — scale to RAG only when you hit the ceiling
- The audit step makes Obsidian RAG self-improving; vector stores are static
## Where Obsidian RAG Wins
| Factor | Obsidian RAG | True RAG |
|--------|-------------|----------|
| Setup | 15 minutes | Hours/days |
| Infrastructure | Zero | Vector DB, embeddings, hosting |
| Human-readable | Yes — browse your own wiki | No — black box |
| Self-improving | Yes — audit loop | No |
| Output compound | Yes — answers feed back in | No |
| You get smarter | Yes — you read and learn | No — just get chunks |
| Cost | Free (subscription already paid) | API costs per embed/query |
## Where True RAG Wins
| Factor | When RAG is needed |
|--------|-------------------|
| Scale | 5,000+ documents |
| Bulk ingestion | 500 new docs at once — compiling takes hours |
| Semantic fallback | If index misses it, Obsidian misses it |
| Multi-user | Production apps, teams need real infrastructure |
| Speed | Large-scale retrieval needs sub-second response |
## Decision Rule
```
Solo operator or small team + <5,000 docs Obsidian RAG
Multi-user or production or massive scale → True RAG
Unsure → Start with Obsidian, migrate if needed
```
The upgrade path: if you outgrow Obsidian RAG, you have a well-organized markdown wiki that maps cleanly into a vector store. Starting with Obsidian forces good information architecture.
## Related
- [[wiki/obsidian-rag/karpathy-llm-wiki-approach|Karpathy's LLM Wiki Approach]]
- [[wiki/obsidian-rag/claude-code-obsidian-setup|Claude Code + Obsidian Setup]]