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
- Скачайте PuTTY с официального сайта (файл
putty.exeили установщик). - Запустите
putty.exe. - В поле Host Name (or IP address) введите IP-адрес или доменное имя сервера.
- Убедитесь, что Port — 22 (стандартный порт SSH).
- 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 часто появляются нечитаемые символы. Это решается одной настройкой:
- В окне PuTTY перейдите в Window → Translation.
- В поле Remote character set укажите UTF‑8.
- Нажмите Apply.
Это особенно важно, когда вы работаете с редиректами в .htaccess и видите строки с кириллицей: без UTF‑8 они будут выглядеть как «абракадабра», и легко ошибиться при правке.
3.4 PuTTY и Pageant (агент аутентификации)
Если вы используете несколько ключей или не хотите вводить пароль к ключу каждый раз, используйте Pageant (агент SSH). Запустите Pageant, добавьте ваш приватный ключ (через кнопку Add Key), и PuTTY будет использовать его автоматически при подключении.
4. Основной набор команд Shell
4.1 Навигация по файловой системе
pwd # показать текущую директорию
ls # список файлов и папок
ls -la # подробный список (включая скрытые файлы)
cd /path/to/dir # перейти в директорию
cd ~ # перейти в домашнюю директорию пользователя
cd .. # перейти на уровень выше
cd - # вернуться в предыдущую директориюПример:
$ 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/log4.2 Работа с файлами и директориями
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 # принудительное удаление без запроса (очень опасно!)Пример:
$ mkdir project
$ cd project
$ touch index.html style.css
$ cp index.html index_backup.html
$ ls
index.html index_backup.html style.css4.3 Просмотр содержимого файлов
cat file.txt # вывести содержимое целиком
less file.txt # постраничный просмотр (пробел — вперёд, q — выход)
head -n 10 file.txt # первые 10 строк
tail -n 20 file.txt # последние 20 строк
tail -f file.log # следить за логом в реальном времениПример:
$ 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).
Чтобы следить за ошибками в реальном времени:
tail -f /var/log/apache2/error.logЕсли нужно увидеть последние 50 ошибок:
tail -n 50 /var/log/apache2/error.log | grep -i errorЕсли нужно быстро проверить, что сайт вообще отдаёт 200, можно использовать curl -I, и это удобно делать прямо из той же сессии PuTTY:
curl -I http://example.ru4.4 Редактирование файлов в консоли
nano — простой текстовый редактор:
nano /etc/nginx/nginx.confCtrl+O— сохранить.Ctrl+X— выйти.Ctrl+W— поиск.
vim — мощный редактор, но требует изучения:
vim filenamei— перейти в режим вставки.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 — самый простой вариант для разовых правок:
nano /var/www/example.ru/.htaccessCtrl+O — сохранить, Ctrl+X — выйти.
vim — мощнее, но требует привычки. Если ты часто правите конфиги, стоит выучить хотя бы базовый набор:
i— режим вставки,- Esc — выход из режима вставки,
:wq— сохранить и выйти,:q!— выйти без сохранения.
Важный нюанс: перед правкой всегда делай бэкап:
cp /var/www/example.ru/.htaccess /var/www/example.ru/.htaccess.bak4.5 Управление правами доступа
В Linux у каждого файла и папки есть владелец, группа и права (чтение, запись, выполнение).
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— и т.д.
Пример:
$ 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.
Примеры безопасных команд:
# Установить владельца и группу для всей папки сайта
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 и т. п.), убедитесь, что они исполняемы:
sudo chmod +x /var/www/example.ru/tools/minifier.phpPHP-скрипты обычно запускаются через php, а не напрямую, так что +x не всегда обязателен.
4.6 Управление процессами
ps aux # список всех процессов
ps aux | grep nginx # найти процессы с "nginx"
top # интерактивный просмотр процессов (нажмите q для выхода)
htop # улучшенная версия top (требует установки)
kill PID # завершить процесс по ID
kill -9 PID # принудительно завершить процессПример:
$ 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 12344.7 Сетевые команды
ping google.com # проверить доступность хоста
curl https://example.com # отправить HTTP-запрос и показать ответ
wget https://example.com/file.zip # скачать файл
netstat -tulpn # показать открытые порты и слушающие службы
ss -tulpn # современная альтернатива netstat
ifconfig # информация о сетевых интерфейсах (устаревшая)
ip a # современная команда для просмотра интерфейсовПример:
$ 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 Работа с архивами
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 # распаковатьПример:
$ 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.gz4.9 Работа с пользователями
whoami # показать текущего пользователя
id # показать информацию о текущем пользователе
sudo useradd newuser # создать нового пользователя (требует прав root)
sudo passwd newuser # установить пароль пользователю
su - newuser # переключиться на другого пользователя
sudo -i # перейти в root (с сохранением переменных окружения)Пример:
$ whoami
alex
$ sudo useradd developer
$ sudo passwd developer
New password: ********
Retype new password: ********
passwd: password updated successfully
$ su - developer
$ whoami
developer4.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 ALL=(ALL) ALL
Это разрешает пользователю alex выполнять любые команды от root.
Можно ограничить только определёнными командами:
alex ALL=(ALL) /usr/bin/systemctl, /usr/bin/apt
Как использовать:
sudo systemctl restart nginx # перезапустить nginx от root
sudo -i # перейти в интерактивную сессию root (осторожно!)Рекомендации:
- Всегда используйте
sudoвместо прямого входа под root. - Настраивайте минимальные права для каждого пользователя.
- Включайте логирование sudo (запись в
/var/log/auth.log).
6. Подключение к серверу: пошаговый пример
Ситуация: у вас есть сервер с IP 192.168.1.100, пользователь admin, пароль *****. Ваш компьютер под управлением Windows.
- Запустите PuTTY.
- Введите
192.168.1.100в поле Host Name, порт 22. - Нажмите Open.
- В открывшемся терминале появится приглашение:
login as: - Введите
admin. - Введите пароль (символы не отображаются).
- Вы попадёте в командную строку сервера.
Теперь вы можете выполнять команды. Например:
$ whoami
admin
$ sudo apt update
[sudo] password for admin: *****
...
$ exit # завершить сессиюБыстрая проверка: сайт доступен и порты открыты
Сразу после входа по SSH полезно проверить, что:
Веб-сервер слушает порт 80/443:
ss -tulpn | grep -E '80|443'Сайт отдаёт HTTP 200:
curl -I http://example.ru7. Частые ошибки новичков и как их избежать
| Ошибка | Последствия | Как избежать |
|---|---|---|
rm -rf / | Удаление всей файловой системы | Никогда не запускайте rm -rf / или rm -rf /* без крайней необходимости. Всегда проверяйте путь. |
| Работа под root постоянно | Случайное удаление системных файлов, риск взлома | Используйте sudo и только по необходимости. |
| Неверные права на файлы | Сайт не работает, скрипты не выполняются | Проверяйте права (chmod, chown) после копирования файлов. |
Забывание 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 дней:
find /var/www/example.ru/cache -type f -mtime +7 -deleteИли сначала вывести список, а потом удалить:
find /var/www/example.ru/cache -type f -mtime +7
# убедись, что список корректный, затем:
find /var/www/example.ru/cache -type f -mtime +7 -deleteПеред любыми массовыми операциями делай бэкап папки или хотя бы её списка:
tar -czf backup-cache-2025-10-10.tar.gz /var/www/example.ru/cache8. Дополнительные советы по работе с Shell
- Используйте
man— встроенная справка. Например,man lsпокажет все опции командыls. - Псевдонимы (alias) — сокращения для часто используемых команд. Добавьте в
~/.bashrc:
alias ll='ls -la'
alias gs='git status'- После добавления выполните
source ~/.bashrc. - Автодополнение — нажатие Tab дополняет имена файлов, команд и даже опции (если установлен
bash-completion). - Работа с историей — используйте
Ctrl+Rдля обратного поиска. Начните печатать команду, и она найдётся в истории. - Перенаправление вывода:
>— перенаправить вывод в файл (перезапись).>>— добавить вывод в конец файла.2>— перенаправить ошибки.|— передать вывод одной команды на вход другой (pipe). Пример:ps aux | grep nginx.
- Фоновое выполнение — добавьте
&в конце команды, чтобы она выполнялась в фоне. Например,sleep 60 &. Управляйте фоновыми задачами командамиjobs,fg,bg.
Алиасы, которые экономят время админу
В .bashrc можно добавить алиасы под свои типовые задачи:
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'После добавления выполни:
source ~/.bashrcТеперь apache-logs сразу откроет слежение за ошибками Apache — это удобно при отладке редиректов и .htaccess.
9. Заключение
Shell и SSH — это основные инструменты для управления серверами. Освоив их, вы сможете:
- Подключаться к любым Linux-серверам из любой точки мира.
- Выполнять широкий спектр задач: от просмотра логов до полной настройки системы.
- Автоматизировать рутину с помощью скриптов.
- Безопасно администрировать серверы, используя sudo и SSH-ключи.
