Урок 04

Базовые команды терминала

Навигация

Где я:

pwd
# /var/www/skills/api

Что в папке:

ls                    # обычный список
ls -l                 # подробно
ls -la                # включая скрытые
ls -lh                # размеры в КБ/МБ
ls -ltr               # сортировка по времени
ls -la /var/log       # конкретная папка

Разбор флагов:

  • -l — long (подробно)
  • -a — all (включая скрытые .git, .env)
  • -h — human (KB/MB вместо байтов)
  • -t — time (по времени)
  • -r — reverse

Перейти в папку:

cd /var/www/skills      # абсолютный путь
cd api                  # в подпапку
cd ..                   # на уровень вверх
cd ../..                # на два вверх
cd ~                    # в домашнюю папку
cd -                    # в предыдущую папку
cd                      # тоже в домашнюю

Просмотр файлов

Целиком:

cat file.txt

Постранично:

less file.txt

В less:

  • Space — следующая страница
  • b — предыдущая
  • /text — поиск
  • n — следующий результат поиска
  • q — выход

Первые/последние строки:

head file.txt              # первые 10
head -n 50 file.txt        # первые 50
tail file.txt              # последние 10
tail -n 100 file.txt       # последние 100
tail -f file.log           # следить в реальном времени
tail -F file.log           # как -f, но переоткрывает при ротации

tail -f — главный инструмент для логов.

Работа с файлами

Создать:

touch file.txt
mkdir folder
mkdir -p a/b/c

Скопировать:

cp file.txt copy.txt
cp file.txt /tmp/
cp -r folder1/ folder2/

Переместить/переименовать:

mv old.txt new.txt
mv file.txt /tmp/
mv folder1/ folder2/

Удалить:

rm file.txt
rm -r folder/
rm -rf folder/              # ⚠️ без подтверждения
rmdir empty-folder/         # только пустая

⚠️ Никогда rm -rf / — снесёт систему. И rm -rf ~ — снесёт домашнюю папку.

Символические ссылки

Создать:

ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Проверить:

ls -la /etc/nginx/sites-enabled/
# example.com -> /etc/nginx/sites-available/example.com

Удалить:

rm /etc/nginx/sites-enabled/example.com

⚠️ Не делай rm -r на симлинк — удалишь содержимое цели.

Права

Посмотреть:

ls -la
# -rw-r--r-- 1 roman roman 1234 ... file.txt

Изменить:

chmod 644 file.txt
chmod 755 script.sh
chmod +x script.sh
chown roman file.txt
chown -R www-data:www-data storage/

Поиск файлов

По имени:

find /var/www -name "*.php"
find /var/www -type d
find /var/www -type f -name "*.log"
find / -size +100M                    # файлы больше 100 МБ
find /var/log -mtime -7               # изменены за 7 дней

Поиск внутри файлов

grep:

grep "error" file.log
grep -r "TODO" /var/www/              # рекурсивно
grep -i "ERROR" file.log              # без регистра
grep -v "error" file.log              # исключить
grep -c "error" file.log              # посчитать
grep -n "error" file.log              # с номерами строк
grep -A 3 -B 3 "error" file.log       # + 3 строки после и до

Пайпы с grep:

ps aux | grep nginx
tail -100 laravel.log | grep ERROR

Пайпы и редиректы

Пайп | — вывод одной команды в другую:

ls | wc -l                     # посчитать файлы
grep error log | sort | uniq -c  # уникальные счётчики
tail -f log | grep ERROR       # следить + фильтр

Редирект:

echo "text" > file.txt          # перезаписать
echo "text" >> file.txt         # добавить
command > file.txt 2>&1         # stderr + stdout в файл
command > /dev/null 2>&1        # выбросить вывод

Архивы

tar:

tar -czf archive.tar.gz folder/   # создать gzip
tar -xzf archive.tar.gz           # распаковать
tar -tzf archive.tar.gz           # посмотреть содержимое
tar -xzf file.tar.gz -C /tmp/     # распаковать в /tmp

Разбор флагов:

  • -c — create
  • -x — extract
  • -z — gzip
  • -f — file
  • -t — list
  • -v — verbose

zip:

zip -r archive.zip folder/
unzip archive.zip
unzip -l archive.zip

Скачивание

wget:

wget https://example.com/file.zip
wget -O new-name.zip https://example.com/file.zip
wget -c https://example.com/big.iso     # продолжить

curl:

curl -O https://example.com/file.zip
curl -o my.zip https://example.com/file.zip
curl -I https://example.com             # только заголовки
curl -L https://example.com             # следовать редиректам
curl -X POST -d '{}' https://api.example.com

Системная информация

Дистрибутив:

cat /etc/os-release
lsb_release -a

Ядро:

uname -r

Аппаратное:

lscpu
lsblk
lspci
free -h
df -h

Дата и время:

date
timedatectl
uptime

Полезные горячие клавиши

  • Tab — автодополнение
  • ↑ / ↓ — история команд
  • Ctrl + R — поиск в истории
  • Ctrl + C — прервать команду
  • Ctrl + D — выйти из сессии
  • Ctrl + L — очистить экран
  • Ctrl + A — в начало строки
  • Ctrl + E — в конец строки
  • Ctrl + W — удалить слово
  • !! — последняя команда
  • !$ — последний аргумент

История команд

history
history | grep ssh
history 50                # последние 50

Очистить:

history -c

Алиасы

Создать:

alias ll='ls -lah'
alias ..='cd ..'
alias gs='git status'

Постоянно — в ~/.bashrc:

nano ~/.bashrc

Добавь в конец:

alias ll='ls -lah'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
alias gs='git status'
alias gc='git commit'
alias gl='git log --oneline'

Применить:

source ~/.bashrc

Итог

Ты умеешь:

  • Навигироваться по файловой системе
  • Работать с файлами
  • Искать файлы и содержимое
  • Использовать пайпы и редиректы
  • Работать с архивами
  • Создавать алиасы

Дальше — редакторы nano и vim.