Shell-клиент: работа в командной строке, SSH, PuTTY и основные команды

Shell (оболочка) — это интерфейс взаимодействия пользователя с операционной системой через текстовые команды. Для администраторов и разработчиков умение работать в командной строке — базовый навык, который позволяет управлять серверами, отлаживать приложения, автоматизировать задачи и выполнять тонкую настройку системы, недоступную через графические интерфейсы.

В этой статье мы разберём:

  • Что такое Shell и зачем он нужен.
  • Как подключаться к удалённому серверу по SSH.
  • Настройку популярного клиента PuTTY.
  • Основной набор команд для навигации, работы с файлами, процессами и сетью.
  • Разницу между root и обычными пользователями, безопасную работу с sudo.
  • Практические примеры и частые ошибки.

1. Что такое Shell и зачем он нужен

Shell — это программа, которая принимает команды от пользователя, интерпретирует их и передаёт ядру операционной системы для выполнения. Это посредник между человеком и системой. Наиболее распространённые оболочки в Linux:

  • Bash (Bourne Again SHell) — стандартная оболочка в большинстве дистрибутивов.
  • Zsh — расширенная версия Bash с дополнительными возможностями.
  • Fish — дружелюбная оболочка с подсветкой синтаксиса.

Shell позволяет:

  • Управлять файлами и директориями.
  • Запускать программы и скрипты.
  • Настраивать систему (редактировать конфиги).
  • Отслеживать состояние сервера (процессы, память, диски).
  • Автоматизировать рутинные задачи с помощью скриптов.

Для удалённого управления серверами чаще всего используют SSH (Secure Shell) — защищённый сетевой протокол, который шифрует весь трафик и обеспечивает аутентификацию.

2. Способы подключения к серверу: SSH vs Telnet

ПротоколБезопасностьПрименение
SSHВысокая (шифрование, ключи)Современный стандарт для удалённого управления
TelnetНет шифрования (пароли передаются в открытом виде)Устарел, используется только в локальных сетях для отладки

Всегда используйте SSH для подключения к серверам. Telnet не рекомендуется даже в тестовых средах из-за отсутствия шифрования.

3. PuTTY — самый популярный SSH-клиент для Windows

PuTTY — это бесплатный SSH-клиент с открытым исходным кодом, который позволяет подключаться к серверам по SSH, Telnet и другим протоколам. Он не требует установки (достаточно скачать .exe) и имеет удобный интерфейс для сохранения настроек сессий.

3.1 Установка и запуск PuTTY

  1. Скачайте PuTTY с официального сайта (файл putty.exe или установщик).
  2. Запустите putty.exe.
  3. В поле Host Name (or IP address) введите IP-адрес или доменное имя сервера.
  4. Убедитесь, что Port — 22 (стандартный порт SSH).
  5. Connection type — SSH.

3.2 Сохранение сессии

Чтобы не вводить адрес каждый раз:

  • Введите адрес и порт.
  • В поле Saved Sessions напишите имя (например, «MyServer»).
  • Нажмите Save.

Теперь вы можете загружать сессию двойным щелчком по сохранённому имени.

3.3 Настройка PuTTY для удобства

Изменение шрифта и цветов (для комфортной работы):

  • Перейдите в раздел Window → Appearance.
  • Нажмите Font settings и выберите моноширинный шрифт (например, Consolas или Courier New, размер 12–14).
  • В Colours можно настроить цвет фона и текста (например, зелёный на чёрном — классика).

Сохранение логов (полезно для отладки):

  • Session → Logging.
  • Выберите All session output и укажите путь к файлу лога.

Настройка Keepalive (чтобы сессия не обрывалась из-за таймаута):

  • Connection → Seconds between keepalives — установите 30–60 секунд.

Использование SSH-ключей:

  • Сгенерируйте ключ с помощью PuTTYgen (входит в комплект).
  • Сохраните приватный ключ (.ppk).
  • В PuTTY перейдите в Connection → SSH → Auth.
  • В поле Private key file for authentication загрузите ваш .ppk-файл.
  • Сохраните сессию.

⚠️ Кодировка UTF‑8 — чтобы не было «кракозябр»
При работе с кириллическими URL, логами и конфигами в PuTTY часто появляются нечитаемые символы. Это решается одной настройкой:

  1. В окне PuTTY перейдите в Window → Translation.
  2. В поле Remote character set укажите UTF‑8.
  3. Нажмите Apply.

Это особенно важно, когда вы работаете с редиректами в .htaccess и видите строки с кириллицей: без UTF‑8 они будут выглядеть как «абракадабра», и легко ошибиться при правке.

3.4 PuTTY и Pageant (агент аутентификации)

Если вы используете несколько ключей или не хотите вводить пароль к ключу каждый раз, используйте Pageant (агент SSH). Запустите Pageant, добавьте ваш приватный ключ (через кнопку Add Key), и PuTTY будет использовать его автоматически при подключении.

4. Основной набор команд Shell

4.1 Навигация по файловой системе

Bash
pwd                     # показать текущую директорию
ls                      # список файлов и папок
ls -la                  # подробный список (включая скрытые файлы)
cd /path/to/dir         # перейти в директорию
cd ~                    # перейти в домашнюю директорию пользователя
cd ..                   # перейти на уровень выше
cd -                    # вернуться в предыдущую директорию

Пример:

Bash
$ pwd
/home/user
$ ls -la
total 48
drwxr-xr-x 4 user user 4096 Mar 10 10:00 .
drwxr-xr-x 3 root root 4096 Mar  9 09:00 ..
-rw-r--r-- 1 user user  220 Mar 10 09:00 .bashrc
$ cd /var/log
$ pwd
/var/log

4.2 Работа с файлами и директориями

Bash
touch file.txt          # создать пустой файл
mkdir newdir            # создать директорию
mkdir -p parent/child   # создать вложенные директории
cp file1 file2          # скопировать файл
cp -r dir1 dir2         # рекурсивно скопировать директорию
mv file1 file2          # переместить или переименовать файл
rm file.txt             # удалить файл
rm -r dir               # удалить директорию рекурсивно (ОСТОРОЖНО!)
rm -rf dir              # принудительное удаление без запроса (очень опасно!)

Пример:

Bash
$ mkdir project
$ cd project
$ touch index.html style.css
$ cp index.html index_backup.html
$ ls
index.html  index_backup.html  style.css

4.3 Просмотр содержимого файлов

Bash
cat file.txt            # вывести содержимое целиком
less file.txt           # постраничный просмотр (пробел — вперёд, q — выход)
head -n 10 file.txt     # первые 10 строк
tail -n 20 file.txt     # последние 20 строк
tail -f file.log        # следить за логом в реальном времени

Пример:

Bash
$ tail -f /var/log/nginx/access.log
192.168.1.1 - - [10/Mar/2025:12:00:01] "GET /index.html" 200 1024
192.168.1.2 - - [10/Mar/2025:12:00:05] "GET /style.css" 200 2048

Практический пример: следим за логами Apache и WordPress

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

  • Лог доступа Apache: /var/log/apache2/access.log (или /var/log/httpd/access_log на CentOS).
  • Лог ошибок Apache: /var/log/apache2/error.log.
  • Лог PHP-ошибок (если настроен): /var/log/php/error.log или файл в корне сайта.
  • Лог WordPress: wp-content/debug.log (если включён WP_DEBUG_LOG).

Чтобы следить за ошибками в реальном времени:

Bash
tail -f /var/log/apache2/error.log

Если нужно увидеть последние 50 ошибок:

Bash
tail -n 50 /var/log/apache2/error.log | grep -i error

Если нужно быстро проверить, что сайт вообще отдаёт 200, можно использовать curl -I, и это удобно делать прямо из той же сессии PuTTY:

Bash
curl -I http://example.ru

4.4 Редактирование файлов в консоли

nano — простой текстовый редактор:

Bash
nano /etc/nginx/nginx.conf
  • Ctrl+O — сохранить.
  • Ctrl+X — выйти.
  • Ctrl+W — поиск.

vim — мощный редактор, но требует изучения:

Bash
vim filename
  • i — перейти в режим вставки.
  • Esc — выйти из режима вставки.
  • :w — сохранить.
  • :q — выйти.
  • :wq — сохранить и выйти.
  • :q! — выйти без сохранения.

Редактирование .htaccess и Apache-конфигов: nano vs vim

Для задач (редиректы, настройки кэша, лимиты) чаще всего придётся править:

  • .htaccess в корне сайта (или в папке плагина).
  • Конфиги виртуальных хостов: /etc/apache2/sites-available/example.ru.conf (Debian/Ubuntu) или /etc/httpd/conf.d/example.ru.conf (CentOS).

nano — самый простой вариант для разовых правок:

Bash
nano /var/www/example.ru/.htaccess

Ctrl+O — сохранить, Ctrl+X — выйти.

vim — мощнее, но требует привычки. Если ты часто правите конфиги, стоит выучить хотя бы базовый набор:

  • i — режим вставки,
  • Esc — выход из режима вставки,
  • :wq — сохранить и выйти,
  • :q! — выйти без сохранения.

Важный нюанс: перед правкой всегда делай бэкап:

Bash
cp /var/www/example.ru/.htaccess /var/www/example.ru/.htaccess.bak

4.5 Управление правами доступа

В Linux у каждого файла и папки есть владелец, группа и права (чтение, запись, выполнение).

Bash
chmod 755 script.sh     # установить права: владелец — всё, группа и остальные — чтение и выполнение
chmod u+x script.sh     # добавить право выполнения для владельца
chown user:group file   # изменить владельца и группу файла

Расшифровка чисел:

  • 4 = чтение (r)
  • 2 = запись (w)
  • 1 = выполнение (x)
    Сумма даёт права: 7 = rwx, 6 = rw-, 5 = r-x, 4 = r— и т.д.

Пример:

Bash
$ ls -l script.sh
-rw-r--r-- 1 user user 120 Mar 10 12:00 script.sh
$ chmod +x script.sh
$ ls -l script.sh
-rwxr-xr-x 1 user user 120 Mar 10 12:00 script.sh

Права и владельцы: чтобы WordPress и ваши инструменты работали

На типичном VPS (Debian/Ubuntu + Apache) правильная схема такая:

  • Файлы сайта принадлежат пользователю веб-сервера (часто www-data).
  • Вы работаете под своим пользователем, а для правки файлов используете sudo.

Примеры безопасных команд:

Bash
# Установить владельца и группу для всей папки сайта
sudo chown -R www-data:www-data /var/www/example.ru

# Права на папки: 755 (rwx для владельца, rx для остальных)
sudo find /var/www/example.ru -type d -exec chmod 755 {} \;

# Права на файлы: 644 (rw для владельца, r для остальных)
sudo find /var/www/example.ru -type f -exec chmod 644 {} \;

Для папок с кэшем и загрузками (например, wp-content/uploads, cache) можно дать более широкие права, но лучше оставить www-data владельцем.

Если вы выкладываете свои скрипты (минификатор, sitemap и т. п.), убедитесь, что они исполняемы:

Bash
sudo chmod +x /var/www/example.ru/tools/minifier.php

PHP-скрипты обычно запускаются через php, а не напрямую, так что +x не всегда обязателен.

4.6 Управление процессами

Bash
ps aux                  # список всех процессов
ps aux | grep nginx     # найти процессы с "nginx"
top                     # интерактивный просмотр процессов (нажмите q для выхода)
htop                    # улучшенная версия top (требует установки)
kill PID                # завершить процесс по ID
kill -9 PID             # принудительно завершить процесс

Пример:

Bash
$ ps aux | grep apache
www-data  1234  0.0  1.2  12345  6789 ? S 10:00 0:01 /usr/sbin/apache2 -k start
$ sudo kill -9 1234

4.7 Сетевые команды

Bash
ping google.com         # проверить доступность хоста
curl https://example.com # отправить HTTP-запрос и показать ответ
wget https://example.com/file.zip # скачать файл
netstat -tulpn          # показать открытые порты и слушающие службы
ss -tulpn               # современная альтернатива netstat
ifconfig                # информация о сетевых интерфейсах (устаревшая)
ip a                    # современная команда для просмотра интерфейсов

Пример:

Bash
$ curl -I https://example.com
HTTP/1.1 200 OK
Server: nginx
...
$ ss -tulpn | grep 80
tcp   LISTEN 0  128  *:80   *:*   users:(("nginx",pid=1234,fd=6))

4.8 Работа с архивами

Bash
tar -czf archive.tar.gz mydir/    # создать архив .tar.gz
tar -xzf archive.tar.gz           # распаковать .tar.gz
tar -xvf archive.tar              # распаковать .tar
gzip file.txt                     # сжать файл (получится file.txt.gz)
gunzip file.txt.gz                # распаковать

Пример:

Bash
$ tar -czf backup.tar.gz /var/www/mysite/
$ ls -lh backup.tar.gz
-rw-r--r-- 1 user user 15M Mar 10 12:30 backup.tar.gz

4.9 Работа с пользователями

Bash
whoami                  # показать текущего пользователя
id                      # показать информацию о текущем пользователе
sudo useradd newuser    # создать нового пользователя (требует прав root)
sudo passwd newuser     # установить пароль пользователю
su - newuser            # переключиться на другого пользователя
sudo -i                 # перейти в root (с сохранением переменных окружения)

Пример:

Bash
$ whoami
alex
$ sudo useradd developer
$ sudo passwd developer
New password: ********
Retype new password: ********
passwd: password updated successfully
$ su - developer
$ whoami
developer

4.10 Полезные комбинации и трюки

  • Tab — автодополнение команд и путей.
  • Ctrl+C — прервать текущую команду.
  • Ctrl+Z — приостановить текущий процесс (затем fg — продолжить).
  • Ctrl+R — поиск в истории команд (начните вводить, чтобы найти).
  • История команд — используйте стрелки вверх/вниз для перебора предыдущих команд, или history для полного списка.
  • ; — разделитель команд: cd /var; ls -la выполнит обе команды последовательно.
  • && — выполнить вторую команду только если первая успешна: mkdir newdir && cd newdir.

5. Пользователь root и sudo

5.1 Кто такой root

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

Почему не стоит работать под root постоянно:

  • Одна неверная команда (например, rm -rf /) может уничтожить всю систему.
  • Любой скрипт или вредоносная программа, запущенная от root, имеет полный доступ к системе.
  • Логирование действий root менее детализировано, чем для обычных пользователей.

5.2 Использование sudo

sudo (superuser do) позволяет выполнять команды от имени root, но с ограничениями и ведением логов.

Настройка sudo:

  • Файл /etc/sudoers определяет, кому и какие команды разрешено выполнять.
  • Редактировать его нужно командой visudo (она проверяет синтаксис и предотвращает ошибки).

Пример записи в /etc/sudoers:

Это разрешает пользователю alex выполнять любые команды от root.

Можно ограничить только определёнными командами:

Как использовать:

Bash
sudo systemctl restart nginx   # перезапустить nginx от root
sudo -i                        # перейти в интерактивную сессию root (осторожно!)

Рекомендации:

  • Всегда используйте sudo вместо прямого входа под root.
  • Настраивайте минимальные права для каждого пользователя.
  • Включайте логирование sudo (запись в /var/log/auth.log).

6. Подключение к серверу: пошаговый пример

Ситуация: у вас есть сервер с IP 192.168.1.100, пользователь admin, пароль *****. Ваш компьютер под управлением Windows.

  1. Запустите PuTTY.
  2. Введите 192.168.1.100 в поле Host Name, порт 22.
  3. Нажмите Open.
  4. В открывшемся терминале появится приглашение: login as:
  5. Введите admin.
  6. Введите пароль (символы не отображаются).
  7. Вы попадёте в командную строку сервера.

Теперь вы можете выполнять команды. Например:

Bash
$ whoami
admin
$ sudo apt update
[sudo] password for admin: *****
...
$ exit   # завершить сессию

Быстрая проверка: сайт доступен и порты открыты

Сразу после входа по SSH полезно проверить, что:

Веб-сервер слушает порт 80/443:

Bash
ss -tulpn | grep -E '80|443'

Сайт отдаёт HTTP 200:

Bash
curl -I http://example.ru

7. Частые ошибки новичков и как их избежать

ОшибкаПоследствияКак избежать
rm -rf /Удаление всей файловой системыНикогда не запускайте rm -rf / или rm -rf /* без крайней необходимости. Всегда проверяйте путь.
Работа под root постоянноСлучайное удаление системных файлов, риск взломаИспользуйте sudo и только по необходимости.
Неверные права на файлыСайт не работает, скрипты не выполняютсяПроверяйте права (chmodchown) после копирования файлов.
Забывание sudo перед командами, требующими правОшибка «Permission denied»Помните, что команды, меняющие систему, требуют sudo.
Отсутствие keepalive в PuTTYСессия обрывается из-за бездействияНастройте параметр «Seconds between keepalives» в PuTTY.
Неправильный путь к ключу SSHНе удаётся подключитьсяУбедитесь, что путь к приватному ключу верный, и ключ добавлен в ~/.ssh/authorized_keys на сервере.
Сбой в кодировкеНечитаемые символы (например, русский текст)В PuTTY установите кодировку UTF-8: Window → Translation → Remote character set: UTF-8.
Неправильный синтаксис командКоманда не выполняется, выводится ошибкаВнимательно проверяйте синтаксис, используйте man command для справки.

⚠️ rm -rf и другие опасные команды
Самая частая ошибка — случайное удаление важных файлов при массовой очистке кэша или временных файлов.
Вместо «грубого» rm -rf лучше использовать более безопасные подходы:

Удалять только файлы старше N дней:

Bash
find /var/www/example.ru/cache -type f -mtime +7 -delete

Или сначала вывести список, а потом удалить:

Bash
find /var/www/example.ru/cache -type f -mtime +7
# убедись, что список корректный, затем:
find /var/www/example.ru/cache -type f -mtime +7 -delete

Перед любыми массовыми операциями делай бэкап папки или хотя бы её списка:

Bash
tar -czf backup-cache-2025-10-10.tar.gz /var/www/example.ru/cache

8. Дополнительные советы по работе с Shell

  • Используйте man — встроенная справка. Например, man ls покажет все опции команды ls.
  • Псевдонимы (alias) — сокращения для часто используемых команд. Добавьте в ~/.bashrc:
Bash
alias ll='ls -la'
alias gs='git status'
  • После добавления выполните source ~/.bashrc.
  • Автодополнение — нажатие Tab дополняет имена файлов, команд и даже опции (если установлен bash-completion).
  • Работа с историей — используйте Ctrl+R для обратного поиска. Начните печатать команду, и она найдётся в истории.
  • Перенаправление вывода:
    • > — перенаправить вывод в файл (перезапись).
    • >> — добавить вывод в конец файла.
    • 2> — перенаправить ошибки.
    • | — передать вывод одной команды на вход другой (pipe). Пример: ps aux | grep nginx.
  • Фоновое выполнение — добавьте & в конце команды, чтобы она выполнялась в фоне. Например, sleep 60 &. Управляйте фоновыми задачами командами jobsfgbg.

Алиасы, которые экономят время админу

В .bashrc можно добавить алиасы под свои типовые задачи:

Bash
alias ll='ls -la'
alias apache-logs='tail -f /var/log/apache2/error.log'
alias wp-debug='tail -f /var/www/example.ru/wp-content/debug.log'
alias site-backup='tar -czf ~/backup-site-$(date +%F).tar.gz /var/www/example.ru'

После добавления выполни:

Bash
source ~/.bashrc

Теперь apache-logs сразу откроет слежение за ошибками Apache — это удобно при отладке редиректов и .htaccess.

9. Заключение

Shell и SSH — это основные инструменты для управления серверами. Освоив их, вы сможете:

  • Подключаться к любым Linux-серверам из любой точки мира.
  • Выполнять широкий спектр задач: от просмотра логов до полной настройки системы.
  • Автоматизировать рутину с помощью скриптов.
  • Безопасно администрировать серверы, используя sudo и SSH-ключи.

Нашли ошибку? Напишите нам!