This commit is contained in:
wakadakawaka 2025-05-07 21:20:36 +05:00
parent 7ba26a932b
commit 0b56f3c422
5 changed files with 261 additions and 1 deletions

83
add-cyr-slug.py Normal file
View File

@ -0,0 +1,83 @@
import os
import re
import yaml
import sys
def slugify(text):
# Заменяем всё, кроме букв (включая кириллицу), цифр и дефиса — на дефис
text = re.sub(r'[^а-яА-Яa-zA-Z0-9\-]+', '-', text)
text = re.sub(r'-{2,}', '-', text)
text = text.strip('-')
return text.lower()
def process_md_file(filepath, base_dir):
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
except Exception as e:
print(f"⚠️ Ошибка чтения {filepath}: {e}")
return
match = re.match(r'^---\n(.*?)\n---\n(.*)', content, re.DOTALL)
if not match:
print(f" Создаётся frontmatter для {filepath}")
frontmatter = {}
body = content
else:
frontmatter_raw, body = match.groups()
frontmatter = yaml.safe_load(frontmatter_raw) or {}
title = frontmatter.get('title')
filename = os.path.splitext(os.path.basename(filepath))[0]
if not title:
title = filename
frontmatter['title'] = title
print(f" Добавлен title из имени файла: {title} в {filepath}")
rel_dir = os.path.relpath(os.path.dirname(filepath), base_dir)
slug_parts = []
if rel_dir != '.':
slug_parts.append(slugify(rel_dir.replace('\\', '/')))
slug_parts.append(slugify(title))
new_slug = '/'.join(slug_parts)
current_slug = frontmatter.get('slug', '')
if current_slug == new_slug:
print(f"{filepath} (slug уже установлен)")
return
if re.match(r'^[a-z0-9\-/]+$', current_slug):
print(f"♻️ Обновление латинского slug → {new_slug} в {filepath}")
else:
print(f"✍️ Установка slug → {new_slug} в {filepath}")
frontmatter['slug'] = new_slug
new_frontmatter_raw = yaml.dump(frontmatter, allow_unicode=True, sort_keys=False).strip()
new_content = f'---\n{new_frontmatter_raw}\n---\n{body}'
try:
with open(filepath, 'w', encoding='utf-8') as f:
f.write(new_content)
except Exception as e:
print(f"❌ Ошибка записи {filepath}: {e}")
def walk_md_files(base_dir):
for root, dirs, files in os.walk(base_dir):
for file in files:
if (file.endswith('.md') or file.endswith('.mdx')) and not file.lower().startswith('index.'):
process_md_file(os.path.join(root, file), base_dir)
print("\nГотово!")
if __name__ == "__main__":
if len(sys.argv) != 2:
print("Использование: python add_slug.py <путь_к_папке_сокументацией>")
sys.exit(1)
folder_path = sys.argv[1]
if not os.path.isdir(folder_path):
print("❌ Указан неверный путь к папке.")
sys.exit(1)
walk_md_files(folder_path)

View File

@ -0,0 +1,175 @@
---
title: Права доступа в Linux и команда chmod
slug: linux-управление-правами-доступа/права-доступа-в-linux-и-команда-chmod
---
Команда `chmod` используется в Linux и других Unix-подобных системах для изменения прав доступа к файлам и каталогам.
## Формат команды и аргументы
```bash
chmod [опции] права файл
```
Например:
```bash
chmod 755 script.sh
```
## Подробности об аргументах `chmod`
Команда `chmod` принимает различные аргументы:
### Общий синтаксис
```bash
chmod [опции] [символьные или числовые права] файл(ы)
```
### Часто используемые опции:
| Опция | Описание |
| ------------------ | --------------------------------------------------------------------------------- |
| `-R` | Рекурсивно изменить права во всех подкаталогах и файлах |
| `-v` | Подробный вывод — показывает, какие изменения были сделаны |
| `-c` | Показывает изменения только для тех файлов, чьи права действительно были изменены |
| `--reference=ФАЙЛ` | Установить права доступа, как у другого файла |
Примеры:
```bash
chmod -R 755 /var/www # Рекурсивно задать права
chmod -v 644 file.txt # Показать результат изменения прав
chmod --reference=example.txt config.txt # Установить такие же права, как у example.txt
```
## Чтение прав доступа
Команда `ls -l` показывает права доступа к файлам:
```bash
-rwxr-xr-- 1 user group 1234 Май 7 12:00 script.sh
```
Разбор:
* Первая буква `-` — тип (файл, каталог и т.д.)
* Далее три блока по 3 символа:
* `rwx` — для владельца (user)
* `r-x` — для группы (group)
* `r--` — для остальных (others)
## Таблица прав и чисел
Каждое разрешение соответствует числу:
| Символы | Значение | Описание |
| ------- | -------- | --------------------- |
| `r` | 4 | чтение (read) |
| `w` | 2 | запись (write) |
| `x` | 1 | исполнение (execute) |
| `-` | 0 | отсутствие разрешения |
Комбинации:
| Права | Цифра | Обозначение |
| ----- | ----- | ----------- |
| `rwx` | 7 | 4 + 2 + 1 |
| `rw-` | 6 | 4 + 2 |
| `r-x` | 5 | 4 + 1 |
| `r--` | 4 | 4 |
| `-wx` | 3 | 2 + 1 |
| `-w-` | 2 | 2 |
| `--x` | 1 | 1 |
| `---` | 0 | 0 |
## Примеры chmod
```bash
chmod 755 file # Владелец: rwx, группа: r-x, остальные: r-x
chmod 644 file # Владелец: rw-, группа: r--, остальные: r--
chmod 700 file # Владелец: rwx, остальные: ---
chmod 600 secret # Только владелец может читать и писать
chmod +x script.sh # Добавить право на выполнение для всех
chmod -x script.sh # Убрать право на выполнение для всех
```
## Работа с каталогами
Для каталогов флаг `x` означает "доступ внутрь каталога". Без него пользователь не может зайти в папку, даже если у него есть `r` (чтение).
Пример:
```bash
chmod 755 mydir # Владелец: полный доступ, другие могут просматривать
chmod 700 mydir # Только владелец может заходить в каталог
```
## Рекурсивное изменение прав
Чтобы изменить права доступа во всех подкаталогах и файлах, используется флаг `-R`:
```bash
chmod -R 755 /путь/к/каталогу
```
Это установит одинаковые права на все каталоги и файлы внутри указанного пути.
### Осторожно с 777
```bash
chmod -R 777 /var/www # Очень небезопасно! Все получат полный доступ
```
### Рекомендованный способ — разделять файлы и каталоги:
```bash
# Установить права 755 на все каталоги
find /путь -type d -exec chmod 755 {} \;
# Установить права 644 на все файлы
find /путь -type f -exec chmod 644 {} \;
```
### Пояснение к аргументам:
* `find` — команда поиска файлов и каталогов
* `/путь` — начальный путь, где выполняется поиск
* `-type f` — искать только обычные файлы (`-type d` — каталоги)
* `-exec` — выполнить указанную команду над каждым найденным элементом
* `chmod 644 {}` — применить `chmod` к текущему найденному файлу (подставляется вместо `{}`)
* `\;` — завершает команду `-exec` (обязательно экранировать точку с запятой в bash)
````
Это особенно полезно для веб-серверов и проектов, где важно разграничивать доступ к файлам и каталогам.
## Изменение прав по символам
Вместо чисел можно использовать буквенную форму:
```bash
chmod u+x file # Добавить исполнение владельцу
chmod go-w file # Убрать запись для группы и остальных
chmod a+r file # Добавить чтение всем (u+g+o)
````
Где:
* `u` — владелец (user)
* `g` — группа (group)
* `o` — остальные (others)
* `a` — все (all)
## Проверка прав
```bash
ls -l filename # Просмотр прав
stat filename # Подробная информация о файле
```
## Заключение
Команда `chmod` — важный инструмент для управления доступом к файлам и каталогам в Linux. Понимание цифрового и символьного форматов помогает эффективно настраивать безопасность системы.

View File

@ -1,5 +1,6 @@
--- ---
title: Профиль для принудительного согласования (УЗГА) title: Профиль для принудительного согласования (УЗГА)
slug: примеры-сниппеты-бсп-и-типовые-erp-согласования-ух/профиль-для-принудительного-согласования-узга
--- ---
`(РТК) Принудительное согласование задачи` `(РТК) Принудительное согласование задачи`

View File

@ -1,5 +1,6 @@
--- ---
title: Настройка ролей согласования УХ title: Настройка ролей согласования УХ
slug: примеры-сниппеты-бсп-и-типовые-erp-согласования-ух/настройка-ролей-согласования-ух
--- ---
Смотри РС `ОтветственныеПоОбъектам` Смотри РС `ОтветственныеПоОбъектам`

View File

@ -1,6 +1,6 @@
--- ---
title: Переопределение форм начальной страницы для разных видов клиента title: Переопределение форм начальной страницы для разных видов клиента
slug: примеры-сниппеты-общее-управляемые-формы/переопределение-форм-начальной-страницы slug: примеры-сниппеты-общее-управляемые-формы/переопределение-форм-начальной-страницы-для-разных-видов-клиента
--- ---
# В модуле приложения # В модуле приложения