Главная Темы Тема 2: Работа с файлами
$
Главная Темы Упражнения Шпаргалка Ресурсы
02
Терминал и файлы

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

Просмотр, создание, редактирование файлов, файловая система, права доступа и полезные лайфхаки — всё, что нужно новичку.

🕐 ~25 мин чтения 🟢 Уровень: новичок
💡
Что узнаешь из этой темы:
  • Зачем нужна командная строка и чем она лучше GUI
  • Как просматривать, создавать и редактировать файлы
  • Как устроена файловая система Linux
  • Как искать файлы и текст внутри них
  • Как работают права доступа и sticky bit
  • Что такое суперпользователь и зачем нужен sudo
  • Горячие клавиши и лайфхаки для быстрой работы

🖥️ Зачем нужен терминал?

Linux невозможно представить без командной строки. Любые действия — от настройки сервера до копирования файлов — можно выполнить, написав нужную команду. Некоторые дистрибутивы вообще не содержат графического интерфейса.

✅ Плюсы командной строки

Гибкость: можно составлять цепочки из команд, писать скрипты, автоматизировать задачи. Открыть терминал и написать команду — всегда быстрее, чем кликать по меню.

🖱️ Графический интерфейс

GUI понятнее визуально, но ограничен: нельзя легко автоматизировать действия, нет пайпов, нет скриптов. На серверах GUI часто просто нет.

🎯
Факт: Подавляющее большинство серверов в мире работает без графического интерфейса. Если хочешь стать DevOps-инженером или сисадмином — терминал будет твоим главным инструментом.

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

Команда cat выводит содержимое файла прямо в терминал. Подходит для небольших файлов. Для длинных используют less или more.

просмотр файлов
user@linux:~$
cat filename.txt
# Вывести весь файл в терминал — удобно для коротких файлов
user@linux:~$
less filename.txt
# Постраничный просмотр: ↑↓ прокрутка, q — выход, / — поиск
user@linux:~$
more filename.txt
# Только вперёд (Пробел — следующая страница). less удобнее!
user@linux:~$
head -n 10 /etc/passwd
# Показать первые 10 строк файла
user@linux:~$
tail -f /var/log/syslog
# Показать конец файла и следить за новыми строками (Ctrl+C — стоп)
💡
Совет: используй less вместо more — он позволяет прокручивать текст вверх и вниз, искать по тексту через / и выходить через q.

📝 Создание файлов

Создать файл можно несколькими способами:

создание файлов
user@linux:~$
touch newfile.txt
# Создать пустой файл (или обновить дату изменения)
user@linux:~$
nano newfile.txt
# Создать файл и сразу открыть в редакторе nano
user@linux:~$
echo "Текст файла" > newfile.txt
# Создать файл с текстом. > перезаписывает, >> добавляет в конец
user@linux:~$
mkdir myproject
# Создать каталог (папку)
user@linux:~$
mkdir -p project/src/utils
# Создать всю цепочку каталогов сразу (-p = parents)

✏️ Редактирование файлов

Для редактирования файлов используются текстовые редакторы. Самые популярные:

📗

nano

Простой и понятный редактор. Подсказки внизу экрана. Идеален для новичков.

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

vim

Мощный редактор для опытных. Требует изучения. Режимы: вставка (i), команды (Esc), сохранение (:wq).

i — вставка :wq — сохранить и выйти
📙

gedit

Графический редактор. Доступен только в системах с GUI. Похож на Блокнот из Windows.

Только с GUI
редактирование в nano
user@linux:~$
nano example.txt
# Открыть файл в nano. Ctrl+O — сохранить, Ctrl+X — выйти
📝
Совет для vim: Если случайно открыл vim и не можешь выйти — нажми Esc, затем набери :q! и нажми Enter. Это выход без сохранения.

🌳 Файловая система Linux

Файловая система Linux — это дерево каталогов. Всё начинается от корня /. Все устройства и файлы подключаются к этой единой структуре.

/ (корень) начало всего файлового дерева
↕️ Основные каталоги
/home — /etc — /var — /bin — /dev — /tmp пользователи, конфиги, логи, команды, устройства
Каталог Что хранит Пример
/home Домашние директории пользователей /home/user — твои файлы
/etc Конфигурационные файлы системы /etc/nginx/nginx.conf
/var Изменяемые данные: логи, кеш /var/log/syslog
/bin, /usr/bin Исполняемые файлы (команды) /usr/bin/python3
/dev Устройства в виде файлов /dev/sda — жёсткий диск
/tmp Временные файлы Очищается при перезагрузке
/root Домашний каталог суперпользователя Не путать с /
💡
Главное правило: в Linux всё — файл. Каталоги, устройства, процессы — всё представлено как файлы в файловой системе.

🗑️ Удаление файлов

удаление
user@linux:~$
rm filename.txt
# Удалить файл (без подтверждения!)
user@linux:~$
rm -r directory_name
# -r рекурсивно удалить каталог со всем содержимым
user@linux:~$
rm -rf directory_name
# -rf принудительно, без вопросов. ОСТОРОЖНО!
user@linux:~$
rmdir empty_dir
# Удалить ТОЛЬКО пустой каталог (безопаснее)
⚠️
В Linux нет Корзины! Удалённые файлы через rm пропадают навсегда. Всегда проверяй путь. Особенно опасно: rm -rf / — удалит ВСЮ систему!

🧭 Утилиты для ориентирования

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

Команда Что делает Пример
whoami Показывает имя текущего пользователя whoami → user
who Список пользователей в системе who → user pts/0
pwd Текущий рабочий каталог pwd → /home/user
file Определяет тип файла file photo.jpg → JPEG image
stat Подробная инфо: размер, права, даты stat filename
whereis Расположение программы whereis ls → /usr/bin/ls
which Путь к исполняемому файлу which python3 → /usr/bin/python3

⚡ Лайфхаки для ускорения работы

Сочетание Действие
Tab Автодополнение: начни писать имя файла/команды и нажми Tab. Дважды — список вариантов
↑ / ↓ Листать историю команд
Ctrl + R Поиск по истории: вводи часть команды — терминал найдёт совпадение
Ctrl + C Прервать выполнение команды
Ctrl + L Очистить экран (аналог clear)
!! Повторить последнюю команду. Удобно: sudo !!
Alt + . Вставить последний аргумент предыдущей команды
man команда Подробное руководство. Пример: man ls. Выход — q
Ctrl + A / E Перейти в начало / конец строки
Ctrl + W Удалить слово перед курсором

🔐 Права на файлы Linux

Каждый файл в Linux имеет права доступа для трёх категорий: владелец, группа и остальные пользователи.

права доступа
user@linux:~$
ls -l filename.txt
-rw-r--r-- 1 user group 1234 Dec 14 10:00 filename.txt
# -rw-r--r-- означает: владелец rw (чтение/запись), группа r (чтение), остальные r
r
Чтение (read)

Просмотр содержимого файла. Число: 4

w
Запись (write)

Изменение файла. Число: 2

x
Выполнение (execute)

Запуск как программу. Число: 1

Нет права

Число: 0

chmod
user@linux:~$
chmod 755 script.sh
# 7=rwx (владелец), 5=r-x (группа), 5=r-x (остальные)
user@linux:~$
chmod 644 config.txt
# 6=rw- (владелец), 4=r-- (группа), 4=r-- (остальные)
user@linux:~$
chown user:developers project/
# Сменить владельца и группу каталога
user@linux:~$
chown -R user:developers project/
# -R рекурсивно для всего содержимого

Sticky bit

Sticky bit защищает файлы в общей директории. Если установлен — удалять файлы может только их владелец (даже если права каталога позволяют запись всем). Классический пример — /tmp.

sticky bit
user@linux:~$
chmod +t directory_name
# Установить sticky bit на каталог
user@linux:~$
ls -ld /tmp
drwxrwxrwt 10 root root 4096 Apr 17 08:00 /tmp
# Буква t в конце прав означает — sticky bit установлен

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

В Linux есть обычные пользователи с ограниченными правами и суперпользователь (root) с полным доступом ко всему.

👤 Обычный пользователь

Может работать только со своими файлами. Prompt заканчивается на $

🔑 root (суперпользователь)

Полный доступ ко всей системе. Prompt заканчивается на #. Использовать через sudo

пользователи
user@linux:~$
sudo apt install nginx
# sudo — выполнить команду с правами root
user@linux:~$
sudo adduser username
# Создать нового пользователя в системе
user@linux:~$
cat /etc/passwd
# Список всех пользователей: логин, UID, домашний каталог
user@linux:~$
id username
# Показать UID, GID и группы пользователя
user@linux:~$
groups
# Показать группы текущего пользователя
📁
Файлы с информацией о пользователях:
  • /etc/passwd — список пользователей (логин, UID, GID, домашний каталог, оболочка)
  • /etc/shadow — зашифрованные пароли (доступен только root)
  • /etc/group — информация о группах пользователей

🏋️ Практические упражнения

Задания выполняются в реальной Linux-системе (VM, VPS, WSL). Попробуй сам, прежде чем смотреть решение.

01

Создание структуры проекта

Новичок ~20 мин

Задача:

  1. В домашней директории создай каталог project
  2. Внутри создай структуру: src/, docs/, config/, logs/, backups/
  3. В папке src/ создай файл main.py и запиши в него какой-нибудь текст
  4. Перемести файл main.py в каталог docs/
  5. Скопируй файл обратно в src/

Результат: вывод ls -R project/ с готовой структурой.

💡 Показать решение
задание 1
user@linux:~$
mkdir -p project/{src,docs,config,logs,backups}
# {} раскрывается bash в несколько аргументов — это brace expansion
user@linux:~$
echo "print('Hello, Linux!')" > project/src/main.py
user@linux:~$
cat project/src/main.py
print('Hello, Linux!')
user@linux:~$
mv project/src/main.py project/docs/
# Переместили в docs
user@linux:~$
cp project/docs/main.py project/src/
# Скопировали обратно в src
user@linux:~$
ls -R project/
project/: backups config docs logs src project/docs: main.py project/src: main.py
02

Права доступа и группы

Средний ~25 мин

Задача:

  1. Создай группу developers и добавь текущего пользователя
  2. Для src/ — права 770, владелец-группа developers
  3. Для logs/ — права 750
  4. Для config/ — права 750 + установи sticky bit
  5. Для backups/ — права 700, владелец root
  6. Проверь правильность прав командой ls -la project/

Результат: скриншот вывода ls -la с правильными правами.

💡 Показать решение
задание 2
user@linux:~$
sudo groupadd developers
user@linux:~$
sudo usermod -aG developers $USER
# -aG добавляет пользователя в группу (без удаления из других)
user@linux:~$
sudo chown :developers project/src
user@linux:~$
chmod 770 project/src
user@linux:~$
chmod 750 project/logs
user@linux:~$
chmod 750 project/config && chmod +t project/config
# +t устанавливает sticky bit
user@linux:~$
sudo chown root project/backups && chmod 700 project/backups
user@linux:~$
ls -la project/
drwxrwx--- 2 user developers src drwxr-x--- 2 user user logs drwxr-x--T 2 user user config drwx------ 2 root user backups
03

Поиск файлов и текста

Средний ~15 мин

Задача:

  1. Найди все файлы в домашней директории, изменённые за последние 24 часа
  2. Найди файл main.py по содержащемуся в нём тексту (через grep)
  3. Покажи статистику по типам файлов в домашней директории (используй file и find)

Результат: скриншоты выполненных команд.

💡 Показать решение
задание 3
user@linux:~$
find ~ -mtime 0 -type f
# -mtime 0 = изменённые за последние 24 часа, -type f = только файлы
user@linux:~$
grep -r "Hello" ~/project/
/home/user/project/src/main.py:print('Hello, Linux!') /home/user/project/docs/main.py:print('Hello, Linux!')
user@linux:~$
find ~ -maxdepth 2 -type f -exec file {} \; | awk -F: '{print $2}' | sort | uniq -c | sort -rn
# find находит файлы, file определяет тип, sort+uniq считает количество
04

Работа в vim

Продвинутый ~20 мин

Задача (используй редактор vim):

  1. Создай новый файл через vim practice.txt
  2. Запиши несколько строк текста (войди в режим вставки — i)
  3. Сохрани файл (Esc:w)
  4. Перейди ко 2-й строке (:2)
  5. Удали строку (dd)
  6. Включи отображение номеров строк (:set number)
  7. Выполни поиск по тексту (/слово)
  8. Сохрани и выйди (:wq)

Результат: скриншот vim с номерами строк и текстом.

💡 Показать решение
📘
Шпаргалка по vim:
  • i — войти в режим вставки (начать печатать)
  • Esc — выйти из режима вставки в командный
  • :w — сохранить файл
  • :q — выйти (если нет изменений)
  • :wq — сохранить и выйти
  • :q! — выйти без сохранения
  • dd — удалить текущую строку
  • :set number — показать номера строк
  • /текст — искать текст, n — следующее совпадение
  • :2 — перейти ко 2-й строке
  • u — отменить последнее действие
  • yy — скопировать строку, p — вставить
vim
user@linux:~$
vim practice.txt
# 1. Нажми i — войдёшь в режим INSERT (внизу появится -- INSERT --)
# 2. Набери несколько строк текста
# 3. Нажми Esc → набери :w → Enter (сохранить)
# 4. Набери :2 → Enter (перейти ко 2-й строке)
# 5. Нажми dd (удалить строку)
# 6. Набери :set number → Enter (номера строк)
# 7. Набери /слово → Enter (поиск, n — следующее)
# 8. Набери :wq → Enter (сохранить и выйти)