# Какие команды Linux Shell вам известны?

## 🔥 Linux Shell Must Know

### 📂 Работа с файлами и папками

```bash
pwd                  # показать текущую директорию
ls -la               # список файлов с правами и скрытыми файлами
cd <путь>            # перейти в директорию
mkdir test           # создать папку
rm -rf test          # удалить папку/файл (осторожно!)
cp file1.txt file2.txt  # копировать файл
mv file.txt new.txt     # переместить/переименовать
```

***

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

```bash
cat file.txt         # вывести файл целиком
less file.txt        # постраничный просмотр
head -n 10 file.txt  # первые 10 строк
tail -n 20 file.txt  # последние 20 строк
tail -f log.txt      # следить за логом в реальном времени
```

***

### 🔍 Поиск

```bash
find . -name "*.py"      # найти все .py файлы в текущей папке
grep "ERROR" log.txt     # найти строки с ERROR
grep -r "TODO" src/      # искать рекурсивно в папке
```

***

### ⚙️ Система и процессы

```bash
ps aux              # список процессов
top                 # мониторинг процессов
kill -9 <pid>       # убить процесс
df -h               # диски и свободное место
du -sh *            # размер файлов/папок в текущей директории
free -h             # использование памяти
uname -a            # информация о системе
uptime              # аптайм сервера
```

***

### 🌐 Сеть

```bash
ping google.com     # проверить доступность
curl http://site.com  # GET-запрос
wget http://site.com/file.zip  # скачать файл
ip a                # сетевые интерфейсы
ss -tulnp           # занятые порты
```

***

### 👤 Пользователи и права

```bash
whoami              # текущий пользователь
chmod 755 file.sh   # изменить права доступа
chown user:group file.txt  # изменить владельца
sudo command        # выполнить команду от root
```

***

### 📦 Пакеты

```bash
apt update && apt install <пакет>   # Debian/Ubuntu
yum install <пакет>                 # CentOS
```

***

👉 Эти 20 команд закрывают **90% задач**, которые обычно нужны тестировщику/разработчику:

* посмотреть/искать логи
* управлять файлами
* проверить сеть
* убить зависший процесс
* обновить/поставить пакеты

***

### **1️⃣ Найти лог-файл**

Если ты не знаешь точное имя файла:

```bash
# Найти все файлы с расширением .log в текущей папке и поддиректориях
find . -name "*.log"

# Или искать по части имени
find /var/log -type f -name "*error*.log"
```

* `.` — текущая директория
* `/var/log` — системная папка с логами
* `-type f` — искать только файлы

***

### **2️⃣ Найти строку с ошибкой внутри файла**

Используем `grep`:

```bash
# Искать слово "ERROR" в файле
grep "ERROR" app.log

# Игнорировать регистр (error, Error, ERROR)
grep -i "error" app.log

# Показать номер строки
grep -n "error" app.log

# Показать контекст: 3 строки до и после
grep -C 3 "error" app.log
```

***

### **3️⃣ Искать во всех логах сразу**

```bash
# Рекурсивно искать во всех .log файлах
grep -r "error" /var/log

# С указанием имени файла в выводе
grep -rn "error" /var/log
```

* `-r` — рекурсивно
* `-n` — номер строки
* `-i` — игнорировать регистр
* `-C N` — N строк контекста до и после

***

### **4️⃣ Следить за логом в реальном времени**

```bash
tail -f /var/log/app.log | grep --line-buffered "ERROR"
```

* `tail -f` — смотреть новые строки в лог-файле
* `grep --line-buffered` — фильтрует их на лету
