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

Шпаргалка: 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: Почему 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

Как сбросить пароль Linux, если стандартные методы не работают (SELinux + Read-only)

15.01.26
51

Стандартные инструкции с YouTube не всегда помогают, особенно когда имеешь дело со сложными конфигурациями. Статей по теме не нашлось, а стандартный вход через init=/bin/sh приводил либо к зависанию системы при попытке загрузки (exec init=/sbin/init), либо к ошибкам в графическом интерфейсе в духе "Извините, но сейчас это невозможно сделать".

Потратив 2 часа на эксперименты, я нашел рабочий алгоритм. Проблема крылась в SELinux и правах доступа, которые блокировали изменение пароля, выдавая ошибку Authentication token manipulation error.

Ниже - пошаговая инструкция для "тяжелых" случаев.

Предыстория: Вы забыли все пароли, включая root

Симптомы проблемы

  • Вы сбросили пароль через passwd, но система выдает Authentication token manipulation error.
  • Файловая система находится в режиме "Только чтение" (Read-only).
  • При попытке входа в GUI вы видите ошибку о недоступности входа или пароль не подходит.

Инструкция по восстановлению

Шаг 1. Вход в режим редактирования загрузки

  1. Перезагрузите компьютер.
  2. Как только появится меню загрузки GRUB (черный экран со списком систем), быстро нажмите клавишу e (Edit).
  3. Найдите строку, которая начинается с linux, linux16 или linuxefi.
  4. В конце этой строки (через пробел) допишите:

    init=/bin/sh
  5. Нажмите Ctrl + X (или F10), чтобы загрузиться в консоль.

Шаг 2. Подготовка файловой системы

По умолчанию диск смонтирован в режиме Read-only, поэтому изменения не сохранятся. Исправим это:

mount -o remount,rw /

Проверка (должно быть rw в строке вашего диска):

mount | grep root

Шаг 3. "Ручной взлом" пользователя

Если команда passwd не работает или выдает ошибки токенов, мы вручную отредактируем файлы конфигурации, чтобы система считала, что пароля у пользователя нет вовсе.

Этап А: Убираем хеш пароля

Откройте файл теней:

nano /etc/shadow

(Если nano нет, придется использовать vi).

Найдите строку нужного пользователя (например, cdr или root). Строка выглядит примерно так:
cdr:$6$hG7s... (длинный набор символов) ...:18416...

Вам нужно стереть всё, что находится между первым и вторым двоеточием. Должно стать:

cdr::18416...

Сохраните файл (Ctrl+O -> Enter) и выйдите (Ctrl+X).

Этап Б: Отключаем проверку "x" (Обязательно для надежности)

Откройте файл пользователей:

nano /etc/passwd

Найдите строку пользователя: cdr:x:1000:1000...
Удалите букву x после имени.

Должно стать:

cdr::1000:1000...

** Примечание: Если не помните пользователя, делайте это для пользователя root — под ним можно всё.

Сохраните и выйдите. Перезагрузитесь.

Шаг 4. Самый важный шаг (SELinux)

Вы увидите графическую оболочку, но нам нужна текстовая консоль, зайди в неё при помощи Ctrl+Alt+F7 или Ctrl+F7 например.

На большинстве систем:
•     GUI - Ctrl+Alt+F1 или Ctrl+Alt+F2
•     текстовые консоли - Ctrl+Alt+F3-F6

Ctrl+Alt+F7 - это старый Xorg-подход, сейчас не всегда работает.

Именно здесь большинство инструкций терпят неудачу. Поскольку мы редактировали системные файлы (shadow и passwd) вручную через редактор, метки безопасности SELinux сбились. Система думает, что файлы повреждены злоумышленником, и блокирует любые операции с паролями.

Восстановите контекст безопасности командами:

restorecon -v /etc/shadow
restorecon -v /etc/passwd

Шаг 5. Финальная установка пароля

Теперь препятствий нет. Задайте нормальный пароль прямо сейчас, чтобы войти в графический интерфейс без проблем.

passwd имя_пользователя

(Например: passwd cdr)

Введите новый пароль дважды. Вы должны увидеть заветное сообщение:

passwd: all authentication tokens updated successfully

Шаг 6. Перезагрузка

Теперь можно перезагружаться. Введите:

reboot -f

После загрузки вы сможете войти в систему. Ошибка «Извините, в данный момент это не работает» исчезнет, так как мы восстановили права доступа и корректно обновили токен.


P.S. Существуют и другие методы сброса, например, через Live CD или специализированные утилиты вроде Rescatux или SystemRescue. Они позволяют сбросить пароль в пару кликов, но если под рукой нет флешки с инструментами, а доступ к системе нужен "здесь и сейчас" - метод выше работает безотказно.

Весёлый терминал: Пасхалки, хакерский стиль и полезные утилиты

13.01.26
576

Командная строка - это не только скучное администрирование. Это ещё и место для творчества, шуток и эффектов из фильмов про хакеров. Мы собрали подборку команд, которые разнообразят ваш рабочий процесс.

(На скриншоте изображен паровоз sl).

Часть 1. Работает везде (Windows и Linux)

Эти команды не требуют сложной установки. В Windows вводите их в PowerShell или командную строку (CMD), в Linux - в любой терминал.

Важно: Для работы этих команд нужен доступ в интернет и утилита curl (в Windows 10/11 и Linux она обычно есть по умолчанию).

1. Рикролл в ASCII (Rickroll)

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

curl ascii.live/rick

2. Танцующий попугай (Party Parrot)

Знаменитый GIF-мем с разноцветным попугаем, только в текстовом формате. Команда:

curl parrot.live

3. Курсы криптовалют

Красивый график биткоина и других валют прямо в терминале. Удобно, чтобы быстро глянуть курс, не открывая браузер. Команда:

curl rate.sx

(Можно уточнить валюту: curl rate.sx/eth или curl rate.sx/btc).

Часть 2. Классика Windows (CMD)

Эта старая фишка работает в стандартной командной строке Windows.

Режим "Я у мамы хакер"

Команда меняет цвет текста на ярко-зеленый, а фон оставляет черным. Выглядит как в фильмах 90-х. Команда:

color a

(Чтобы вернуть стандартный цвет — введите color 7).

Часть 3. Только для Linux (Ubuntu / Debian / Mint)

Эти утилиты нужно установить. Все команды ниже рассчитаны на стандартный менеджер пакетов apt.

1. Cmatrix (Та самая Матрица)

Если вам нравится зеленый текст на черном фоне, то это - следующий уровень. По экрану начинают падать символы, как в фильме "Матрица". Идеально, чтобы развернуть на весь экран (F11) и уйти пить кофе - пусть коллеги думают, что вы заняты сложными вычислениями.

  • Установка: sudo apt install cmatrix

  • Запуск: cmatrix

  • (Выход: нажмите q)

2. Hollywood (Эпичный взлом)

Эта команда делит экран на множество окон и запускает в них бессмысленный код, графики, карту мира и логи. Выглядит максимально эпично, как в боевиках 90-х, когда хакер кричит: "Я внутри!". Или просто компилирует интернет... :)

  • Установка: sudo apt install hollywood

  • Запуск: hollywood

  • (Выход: нажмите Ctrl+C два раза, затем напишите exit)

3. SL (Паровоз-наказание)

Шутка для тех, кто вечно торопится. Часто люди вместо команды ls (показать файлы) случайно печатают sl. Эта утилита запускает ASCII-паровоз, который едет через весь экран. Остановить его нельзя - придется ждать, пока он уедет!

  • Установка: sudo apt install sl

  • Запуск: sl

4. Cowsay (Говорящая корова)

Корова, которая говорит то, что вы напишете в аргументе команды.

  • Установка: sudo apt install cowsay

  • Запуск: cowsay Привет, я корова!

5. AAFire (Уютный камин)

Просто красивый горящий огонь в терминале. Создает уютную атмосферу на втором мониторе.

  • Установка: sudo apt install libaa-bin

  • Запуск: aafire

💡 Полезные советы и идеи для использования

Совет №1: Как выйти из программы?

Новички часто пугаются, когда «Матрица» или «Огонь» захватывают экран. Запомните универсальную команду спасения: Нажмите Ctrl + C или просто букву q. Это прервет выполнение почти любой консольной программы.

Совет №2: Объединяем команды (Pipes)

В Linux можно передавать результат одной программы в другую с помощью символа |. Попробуйте установить программу с цитатами (sudo apt install fortune) и скормить их корове: Команда:

fortune | cowsay

Совет №3: Идея для розыгрыша (Офисный пранк)

Хотите подшутить над коллегой-линуксоидом? Сделайте так, чтобы паровоз выезжал каждый раз, когда он просто хочет посмотреть список файлов.

Для этого введите в его терминале команду создания псевдонима (алиаса):

alias ls='sl'

Теперь при вводе привычной ls будет ехать паровоз. (Это действует только в текущей сессии. Чтобы вернуть всё как было, просто закройте и откройте терминал заново).
 


Различных советов, забавных пакетов и скрытых пасхалок в Linux существует огромное количество - настолько, что охватить их все просто невозможно. Экосистема живая, разнообразная и постоянно пополняется новыми находками. Каждый дистрибутив, каждая утилита и даже каждая команда может скрывать что‑то неожиданное, поэтому исследование терминала превращается в отдельное приключение.

5 фактов о Bash: Шутка программистов, на которой держится весь Linux

15.12.25
97

Вы открываете терминал каждый день, видите привычный значок $ и пишете команды. Но задумывались ли вы, почему черное окно называется Bash? За этим странным словом скрывается каламбур, библейская отсылка и история борьбы за свободу кода.

Вот 5 фактов о Bash, которые должен знать каждый.

1. Скрытый смысл названия

Аббревиатура BASH расшифровывается как Bourne Again SHell. Это игра слов, которая работает на двух уровнях:

  • Прямой смысл: "Ещё одна оболочка Борна" (потому что она была создана как замена старой оболочке Bourne shell).

  • Ироничный смысл: Созвучно с выражением "Born Again" ("рожденный заново" или "возрожденный").

  • Суть шутки: Старая проприетарная оболочка "умерла" для сообщества из-за закрытой лицензии, а новая возродилась как феникс из пепла, став полностью свободной и ещё более мощной.

2. Кто такой Борн и при чем тут он?

Чтобы понять шутку, перенесемся в 1977 год. В легендарных лабораториях Bell Labs (где придумали Unix и C) работал британец Стивен Борн (Stephen Bourne). Он написал программу sh (shell - оболочка), которая стала стандартом общения человека с машиной. Её так и называли - "Оболочка Борна".

Но была проблема: sh принадлежала корпорации AT&T. Она была закрытой и платной. Вы не могли просто взять её и поставить на свой компьютер.

3. Рождение Bash (GNU и Брайан Фокс)

В 80-х Ричард Столлман запустил проект GNU. Его мечта была дерзкой: создать полностью свободную операционную систему. Им нужны были свои, бесплатные аналоги всех программ: свой редактор, свой компилятор и, конечно, своя оболочка.

Столлман нанял программиста Брайана Фокса (Brian Fox). В 1989 году Фокс выпустил первую версию Bash. Он сделал так, чтобы новая оболочка понимала все команды старой sh (для совместимости), но была удобнее и, главное, абсолютно бесплатной. Именно Фокс придумал название Bourne Again Shell как дань уважения Стивену Борну.

Интересный факт: Брайан Фокс создал Bash, но работал над ним всего пару лет. Настоящий герой - Чет Рэми (Chet Ramey). Он поддерживает и развивает Bash с начала 90-х - уже более 30 лет! Если вы сегодня найдете баг в Bash, вам ответит именно Чет.

4. Почему Bash есть в каждом Linux?

Когда в 1991 году Линус Торвальдс написал ядро Linux, у него был, по сути, только "двигатель". Ему нужны были "руль и колеса" - программы для управления ядром. Он не стал писать их с нуля, а взял готовые инструменты от проекта GNU. Поскольку Bash был лучшей свободной оболочкой на тот момент, он сразу попал в первые дистрибутивы.

С тех пор это стандарт: ставишь Linux - получаешь Bash.

5. Терминал и Bash - не одно и то же

Новички часто путают эти понятия, но разница важна:

  • 📺 Терминал (GNOME Terminal, Putty, Console) - это "телевизор". Это просто окно, которое показывает текст и передает нажатия клавиш.

  • 👨‍💻 Bash - это "телеведущий". Это программа, которая сидит внутри терминала, читает ваши команды (ls, cd, mkdir), понимает их и запускает процессы.