💡 Полезные Советы

Шпаргалка по chmod: права доступа в Linux простым языком

27.01.26
10

В Linux права считаются простой арифметикой. Вы просто складываете числа для нужных действий.

1. Базовые значения

ЧислоДействиеАнгл.Описание
4ЧтениеReadМожно открыть и посмотреть файл
2ЗаписьWriteМожно изменять или удалять файл
1ВыполнениеeXecuteМожно запустить файл (скрипт/программу)

2. Полная таблица (как на твоем скрине)

Чтобы получить комбинированные права, просто сложите цифры (например: Чтение + Запись = 4 + 2 = 6).

ЧислоСимволыРасшифровка (Права)Формула
0---Нет правНичего
1--xТолько выполнение1
2-w-Только запись2
3-wxЗапись + Выполнение2 + 1
4r--Только чтение4
5r-xЧтение + Выполнение4 + 1
6rw-Чтение + Запись4 + 2
7rwxПолные права (всё вместе)4 + 2 + 1

В командах вы обычно видите три цифры подряд, например 755. Они обозначают права для трех категорий пользователей по очереди:

  1. Владелец (Owner) - тот, кто создал файл.

  2. Группа (Group) - коллеги/команда владельца.

  3. Остальные (Others) - все прочие пользователи системы.

Пример: chmod 755 filename

  • 7 (Владелец): rwx (Может всё: читать, писать, запускать).

  • 5 (Группа): r-x (Может читать и запускать, но не редактировать).

  • 5 (Остальные): r-x (Могут читать и запускать, но не редактировать).

Популярные комбинации

  • chmod 777 - Разрешено всё и всем (опасно для безопасности, используйте с осторожностью).

  • chmod 755 - Стандарт для программ и скриптов (владелец меняет, остальные только запускают).

  • chmod 644 - Стандарт для обычных документов (владелец читает/пишет, остальные только читают).

  • chmod 600 - Секретный файл (только владелец может читать и писать, остальные даже не откроют).

  • chmod +x - Сделать файл исполняемым (добавляет "x" всем).

💡 Важное применительно к папка(директориям)

  1. Папка без x (Execute) - бесполезна!

    • Если у папки есть права rw- (6), но нет x, вы сможете сделать ls (увидеть имена файлов), но не сможете открыть ни один файл внутри, не сможете зайти в нее (cd) и получить доступ к подпапкам.

    • Поэтому для папок почти всегда нужно давать минимум 5 (r-x) или 7 (rwx). Права 6 (rw-) для папок встречаются крайне редко.

  2. Право удалять файлы (w на папку)

    • Чтобы удалить файл, вам не нужны права на запись в сам файл. Вам нужны права на запись (w) в папку, где этот файл лежит.

    • Пример: Вы можете удалить чужой файл, защищенный от записи (r--), если у вас есть полные права (rwx) на папку, в которой он находится.

  3. Комбинация wx (3) для папок

    • Это называется "Drop Box" (почтовый ящик). Вы можете положить туда файл (создать), но не можете посмотреть (ls), что там еще лежит (нет r). Используется редко, например, для папки lost+found.
       

Шпаргалка: wget и curl

26.01.26
10

Два самых популярных инструмента командной строки для скачивания файлов и взаимодействия с сетью - это wget и curl. Они часто выполняют похожие задачи, но имеют разную философию.

  • curl (Client URL) - про гибкость и протоколы.Он поддерживает множество протоколов и идеален для работы с API, отладки и сложных запросов. Выводит данные в консоль (stdout) по умолчанию.

  • wget (World Wide Web Get) - про надёжность и скачивание. Он надежен, отлично справляется с нестабильным соединением и умеет скачивать сайты целиком (рекурсивно). Сохраняет в файл по умолчанию.

Таблица шпаргалки:

Задачаcurlwget
Просто скачать файлcurl -O URLwget URL
Сохранить с другим именемcurl -o file.zip URLwget -O file.zip URL
Докачка (Resume)curl -C - -O URLwget -c URL
Следовать за редиректомcurl -L URL(Автоматически)
Показать заголовки (Headers)curl -I URLwget -S --spider URL
Игнорировать SSL (Insecure)curl -k URLwget --no-check-certificate URL
Авторизация (Basic)curl -u user:pass URLwget --user=user --password=pass URL
Проксиcurl -x proxy:port URLwget -e use_proxy=yes -e http_proxy=...

Примеры

1. Узнать свой внешний IP

Самый простой способ быстро проверить выход в сеть и свой IP-адрес.

curl:

curl icanhazip.com

wget:

wget -qO- ifconfig.me

2. Скачивание файла (Логотип Google)

Попробуем скачать реальный файл - логотип Google.

curl (нужен флаг -O, чтобы сохранить файл):

curl -O https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

wget (просто работает):

wget https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

3. Посмотреть погоду (ASCII-графика)

Один из самых популярных примеров использования curl для консольных утилит. Сервис wttr.in возвращает погоду в красивом текстовом формате.

curl wttr.in/Moscow
# Ниже пример по текущей локации, вычисляеться по ip адресу.
curl wttr.in

4. Тестирование HTTP-запросов (HttpBin)

Для разработчиков. Сайт httpbin.org - это специальный сервис, который просто "эхает" (возвращает) вам то, что вы ему отправили.

Посмотреть заголовки (Headers) сайта: Узнаем, на каком сервере работает сайт, без скачивания содержимого.

curl -I https://httpbin.org/get

Отправить JSON (POST запрос): Отправим тестовые данные и увидим, как сервер их принял. 

curl -X POST "https://httpbin.org/post" -H "Content-Type: application/json" -d "{"username": "dev_user", "status": "active"}"

5. Работа с редиректами (Github)

Github перенаправляет http запросы на https. Посмотрим, как инструменты реагируют на это.

curl (без флага -L ничего не покажет, только сообщит "Moved Permanently"):

# Не сработает как ожидается
curl http://github.com

# Сработает редирект
curl -L http://github.com

wget (умный, перейдет сам):

wget http://github.com

7. Имитация браузера (User-Agent)

Некоторые сайты могут блокировать стандартные запросы от роботов. Нужно притвориться обычным браузером. Для этого можно добавить User-Agent:


Википедия обычно не блокирует, пример учебный.

wget:

wget --user-agent="Mozilla/5.0" https://ru.wikipedia.org/robots.txt

curl:

curl -A "Mozilla/5.0" https://ru.wikipedia.org/robots.txt

Шпаргалка по systemctl: Управление службами в Linux

25.01.26
137

systemd - это система инициализации и управления службами в Linux. Основная утилита для взаимодействия с ней - systemctl. С её помощью мы запускаем веб-серверы, базы данных, ботов и настраиваем их автозагрузку.

Примечание.

systemd - это центральный механизм, который отвечает за запуск Linux после включения компьютера и за управление всеми службами (демонами), работающими в системе.
Когда Linux загружается, именно systemd:
•     запускает сетевые службы
•     поднимает базы данных
•     стартует веб‑серверы
•     следит за зависимостями
•     перезапускает упавшие процессы
•     управляет логами
Чтобы взаимодействовать с systemd, используется команда systemctl - это как "пульт управления" всеми службами.

В командах ниже замените name на имя вашей службы (например, nginx, docker, postgresql или my-bot).

1. Управление состоянием (прямо сейчас)

Базовые команды для включения и выключения.

КомандаОписание
systemctl start nameЗапустить службу.
systemctl stop nameОстановить службу.
systemctl restart nameПерезапустить (Stop + Start). Используется, если служба зависла или нужно применить серьезные изменения.
systemctl reload nameПеречитать конфигурацию без остановки. Идеально для веб-серверов (Nginx/Apache) при правке конфигов.
systemctl status nameПоказать статус. Самая важная команда: показывает, запущена ли служба, последние логи и ошибки.

Примечание.

Не обязательно писать .service в конце имени (например, можно писать sudo systemctl start nginx вместо nginx.service).

2. Автозагрузка (при включении ПК)

Эти команды определяют, будет ли служба стартовать сама после перезагрузки сервера.

КомандаОписание
systemctl enable nameВключить автозагрузку. Создает симлинк в системе.
systemctl disable nameВыключить автозагрузку. Служба не запустится сама после ребута.
systemctl enable --now nameКиллер-фича: Включает автозагрузку И сразу запускает службу. (2 команды в одной).
systemctl is-enabled nameПроверить, включена ли автозагрузка сейчас.

Диагностика и поиск проблем

Если что-то сломалось, эти команды помогут понять, где именно.

  • systemctl --failed Показать список всех служб, которые упали с ошибкой. С этого стоит начинать починку системы.

  • systemctl list-units --type=service Показать вообще все активные службы в системе.

Иерархия каталогов Linux: что где лежит и зачем это нужно

25.01.26
70

В Linux нет дисков C: или D:. Есть только один корень - /. Все остальные диски, флешки и устройства подключаются как папки в эту структуру.

Шпаргалка

ДиректорияОписаниеПримеры содержимого
/binОсновные команды (binaries)ls, cp, cat, bash
/sbinСистемные команды (system binaries)fdisk, reboot, iptables
/bootФайлы загрузчика системыЯдро Linux, GRUB
/etcКонфигурационные файлыНастройки сети, пользователей, служб
/devФайлы устройств (devices)Диски (sda), терминалы (tty), null
/homeДомашние папки пользователейДокументы, загрузки, настройки пользователя
/rootДомашняя папка суперпользователя (root)Личная папка суперпользователя (root)
/libСистемные библиотекиФайлы .so, модули ядра
/optСтороннее ПО (optional)Крупные программы (Chrome, Telegram, Zoom)
/mntВременное монтированиеТочки для ручного подключения дисков
/mediaАвтоматическое монтированиеФлешки, CD-диски (подключаются сами)
/procИнформация о процессах и ядреВиртуальная ФС (инфо о CPU, памяти)
/tmpВременные файлы (temporary)Очищается при перезагрузке
/usrПрограммы и утилиты (resources)Вторичная иерархия: софт, иконки, мануалы
/varИзменяемые данные (variable)Логи (/var/log), кэш, почта, сайты (/var/www)

1. Самое важное для запуска

  • /boot - сердце загрузки. Здесь живет ядро Linux (vmlinuz) и загрузчик GRUB. Если удалить - система не встанет.

  • /bin и /sbin - здесь живут команды.

    • В /bin - общие (типа ls, cat), доступные всем.

    • В /sbin - для админа (типа fdisk, iptables), нужны права root.

  • /lib - библиотеки, без которых программы из папок выше не запустятся (аналог .dll в Windows).

2. Пользователи и настройки

  • /home - ваши личные файлы. Аналог C:\Users.

  • /root - личная комната Администратора. Она отделена от /home, чтобы, если раздел с пользователями забьется или сломается, админ все равно мог войти в систему.

  • /etc - пульт управления. Здесь лежат текстовые файлы с настройками всей системы (сеть, fstab, конфиги программ).

3. Софт и приложения

  • /usr - (Unix System Resources). Самая большая папка. Здесь лежат установленные программы (/usr/bin), их библиотеки (/usr/lib) и документация. По сути, это аналог Program Files.

  • /opt - для "большого" стороннего софта, который ставится одним куском (например, Google Chrome, Telegram, проприетарные базы данных).

4. Данные и временные файлы

  • /var - (Variable). Всё, что постоянно меняется: логи системы (/var/log), кэш, очереди печати, файлы веб-сайта (/var/www).

  • /tmp - временная свалка. Очищается при каждой перезагрузке. Не храните здесь ничего важного!

5. Устройства и Система

  • /dev - в Linux всё есть файл, даже ваше "железо". Жесткий диск - это файл (/dev/sda), терминал - файл.

  • /proc - это иллюзия. Файлов там на самом деле нет, это интерфейс к ядру. Через эту папку можно посмотреть информацию о процессоре (/proc/cpuinfo) или памяти.

FAQ: В чем разница между /mnt и /media?

Частый вопрос новичков.

  • /media - система использует сама. Вставили флешку - она появилась тут автоматически.

  • /mnt - для ручной работы. Админ использует её, чтобы временно подключить диск для восстановления или настройки.

Полезный совет

Если вы забыли, для чего нужна папка, в Linux есть встроенная справка. Просто введите в терминале: man hier (от слова hierarchy) - и получите подробнейшее описание стандарта файловой системы.

Linux: Почему sudo echo >> не работает и как писать в системные файлы правильно

19.01.26
20

Вы наверняка сталкивались с этой классической ошибкой новичка. Вы пытаетесь добавить строку в конфиг, но получаете Permission denied, даже используя sudo.

Как делать не надо

Допустим, мы хотим добавить репозиторий:

sudo echo "deb http://nginx.org/packages/mainline/ubuntu/ jammy nginx" >> /etc/apt/sources.list.d/nginx.list

Результат: bash: /etc/apt/sources.list.d/nginx.list: Permission denied

Почему так происходит?

Дьявол кроется в порядке выполнения команд оболочкой:

  1. Оболочка сначала обрабатывает оператор >>.
  2. Именно оболочка (bash/zsh), а не sudo, пытается открыть файл на запись.
  3. Оболочка запущена от вашего текущего пользователя (не root), поэтому прав на запись нет.

  4. Команда sudo применяется только к echo, но не к самому процессу записи в файл.

Решение: Команда tee

Используйте утилиту tee. Она читает данные из стандартного ввода и записывает их в файл, при этом выводя их на экран.

Правильный синтаксис:

echo "Hello world" | sudo tee -a /tmp/testfile.txt
  • | (пайп) передает текст команде справа.

  • sudo запускает tee с правами суперпользователя.

  • -a (append) - критически важный флаг. Он добавляет текст в конец файла. Без него tee перезапишет файл целиком!

Мини-демонстрация

Попробуем на безопасном примере:

# Пишем
echo "Hello world" | sudo tee -a /tmp/testfile.txt

# Проверяем
cat /tmp/testfile.txt

Вывод: Hello world

Продвинутый уровень: Полезные сценарии

Вот как решать более сложные задачи, с которыми echo уже не справляется.

1. Безопасное добавление нескольких строк (Here-Doc)

Если нужно записать целый блок конфига, не нужно делать десять echo. Используйте конструкцию EOF в связке с tee:

cat <<EOF | sudo tee -a /etc/sysctl.conf
# Улучшение сетевых настроек
net.ipv4.tcp_window_scaling = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF

Это чисто, читаемо и выполняется одной транзакцией, не перезаписывает файл.

2. Удаление или замена строк (sed)

Для удаления строк перенаправление не нужно, так как sed умеет редактировать файлы "на месте" (in-place).

Удалить конкретную строку (например, с ошибочным репозиторием):

# Удаляет все строки, содержащие "google-chrome"
sudo sed -i '/google-chrome/d' /etc/apt/sources.list

Заменить одно значение на другое:

# Заменяет "PermitRootLogin yes" на "PermitRootLogin no"
sudo sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

Важно: Флаг -i изменяет исходный файл. Всегда делайте бэкап перед запуском!

3. Обработка данных и запись в защищённый файл (ss + awk + tee)

Иногда нужно прочитать системный файл, обработать его и записать результат в другой системный файл.

Пример: Сохранить список портов, на которых слушают сервисы.

# awk фильтрует данные, а tee записывает их с правами root
ss -tuln | awk '/LISTEN/ {print $5}' | sudo tee /var/log/active_ports.log > /dev/null

Заметка: > /dev/null в конце нужен, если вы не хотите, чтобы tee дублировал результат вам в консоль.

4. Как делать бэкап "на лету"

При изменении конфигов через sed или tee хорошим тоном считается создание резервной копии.

С sed это очень просто - добавьте расширение после флага -i:

# Создаст файл /etc/hosts.bak перед изменением
sudo sed -i.bak 's/old-ip/new-ip/' /etc/hosts

Где это пригодится?

  • Apt: Добавление репозиториев в /etc/apt/sources.list.d/

  • Config: Изменение настроек в /etc/nginx/, /etc/apache2/

  • System: Тюнинг ядра в /etc/sysctl.conf

  • Security: Добавление лимитов в /etc/security/limits.conf

  • Keys: Запись бинарных ключей: cat key.gpg | sudo tee /usr/share/keyrings/app.gpg

Почему dnf не находит ncdu, htop, jq в AlmaLinux/RHEL - и как это исправить (EPEL)

18.01.26
27

Частая ситуация: вы настраиваете свежий сервер на AlmaLinux, Rocky Linux или RHEL, пытаетесь установить привычные утилиты (например, ncdu для анализа диска или htop), но получаете ошибку:

Error: Unable to find a match: ncdu

Это сбивает с толку, ведь в других дистрибутивах эти пакеты доступны сразу. Разберемся, почему так происходит и как это исправить за одну минуту.

Почему ncdu "нет" в AlmaLinux?

На самом деле ncdu существует и отлично работает на этих системах. Проблема кроется в философии RHEL-подобных дистрибутивов:

  1. Минимализм базы: Официальные репозитории (BaseOS, AppStream) содержат только самый необходимый и максимально стабильный софт, поддерживаемый вендором.

  2. Сообщество: Большинство "удобных" инструментов администрирования (ncdu, htop, nload, jq, screen) вынесены в отдельный репозиторий - EPEL (Extra Packages for Enterprise Linux).

  3. Результат: Пока EPEL не подключен, пакетный менеджер просто не видит эти программы.

Решение: Подключение EPEL

Чтобы пакеты стали доступны, нужно установить один специальный пакет, который добавит конфигурацию репозитория EPEL в систему.

1. Устанавливаем репозиторий EPEL:

sudo dnf install epel-release -y

2. Обновляем кэш (необязательно, но полезно):

sudo dnf makecache

3. Устанавливаем ncdu: Теперь команда сработает без ошибок:

sudo dnf install ncdu -y

Как проверить, что всё получилось?

Вы можете проверить информацию о пакете и убедиться, что он берется именно из EPEL:

dnf info ncdu

В выводе вы увидите строку Repository : epel и версию программы (например, 1.17 или новее).

Совет

Если вы часто настраиваете серверы, добавьте установку epel-release в свой базовый скрипт первоначальной настройки. Это сэкономит время при установке большинства популярных утилит для мониторинга и администрирования.