Перейти к содержимому

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

Файлы — основа всего в Linux. Умение их копировать, перемещать, просматривать и искать — базовый навык любого разработчика или администратора.

Окно терминала
cp file.txt backup.txt # скопировать файл
cp file.txt /tmp/ # скопировать в другую директорию
cp -r mydir/ mydir_backup/ # скопировать директорию рекурсивно
cp -i file.txt dest.txt # спросить перед перезаписью
cp -v file.txt dest.txt # verbose — показывать что делается
cp -p file.txt dest.txt # сохранить права и время
cp *.txt /backup/ # скопировать все .txt файлы

Флаг -r (recursive) обязателен при копировании директорий.

Окно терминала
mv old.txt new.txt # переименовать файл
mv file.txt /tmp/ # переместить файл
mv dir1/ dir2/ # переместить/переименовать директорию
mv -i file.txt dest.txt # спросить перед перезаписью
mv -v *.log /var/logs/ # verbose перемещение

mv работает для переименования (если источник и назначение в одной файловой системе, это моментально).

Окно терминала
rm file.txt # удалить файл
rm file1.txt file2.txt # удалить несколько файлов
rm -i file.txt # спросить перед удалением
rm -f file.txt # принудительно (без подтверждения)
rm -r mydir/ # удалить директорию рекурсивно
rm -rf mydir/ # удалить принудительно рекурсивно
rm *.tmp # удалить все .tmp файлы

⚠️ ОСТОРОЖНО: rm -rf необратимо! Нет корзины, нет undo. Перед удалением важных файлов — бэкап!

Никогда не выполняй: rm -rf / или rm -rf /* — это уничтожит всю систему.

Окно терминала
cat file.txt # вывести содержимое файла
cat file1.txt file2.txt # вывести несколько файлов подряд
cat -n file.txt # с номерами строк
cat -A file.txt # показать непечатаемые символы
cat > newfile.txt # создать файл (Ctrl+D для завершения)
cat >> file.txt # добавить в конец файла

less — умный просмотрщик больших файлов. Не загружает весь файл в память.

Окно терминала
less bigfile.log # открыть файл
less +F logfile.log # следить за файлом (как tail -f)

Навигация в less:

  • j/k или стрелки — строка вниз/вверх
  • Ctrl+F/Ctrl+B — страница вперёд/назад
  • G — в конец файла, g — в начало
  • /текст — поиск вперёд, n — следующее совпадение
  • q — выход
Окно терминала
head file.txt # первые 10 строк
head -n 20 file.txt # первые 20 строк
head -c 100 file.txt # первые 100 байт
tail file.txt # последние 10 строк
tail -n 50 file.txt # последние 50 строк
tail -f /var/log/syslog # следить за файлом в реальном времени
tail -f --pid=1234 app.log # следить пока процесс 1234 жив

tail -f незаменим для просмотра логов в реальном времени!

find — мощнейший инструмент поиска файлов по любым критериям.

Окно терминала
# Поиск по имени
find /home -name "*.txt" # все .txt файлы в /home
find . -name "config.js" # найти config.js в текущей директории
find / -iname "readme*" # без учёта регистра
# Поиск по типу
find . -type f # только файлы
find . -type d # только директории
find . -type l # только символические ссылки
# Поиск по размеру
find . -size +100M # больше 100 мегабайт
find . -size -1k # меньше 1 килобайта
find . -size +1M -size -500M # от 1 до 500 МБ
# Поиск по времени изменения
find . -mtime -7 # изменённые за последние 7 дней
find . -mtime +30 # не изменявшиеся >30 дней
find . -newer reference.txt # новее чем reference.txt
# Поиск по правам
find . -perm 644 # файлы с правами 644
find . -perm /u+x # исполняемые файлы
# Выполнение команды над найденными файлами
find . -name "*.log" -delete # удалить все .log файлы
find . -name "*.py" -exec chmod +x {} \; # сделать исполняемыми
find . -type f -exec ls -lh {} \; # показать детали каждого файла
Окно терминала
# Создай структуру для экспериментов
mkdir -p ~/test/{dir1,dir2,dir3}
touch ~/test/file{1..5}.txt
echo "Hello World" > ~/test/hello.txt
echo "Line 1\nLine 2\nLine 3" > ~/test/multiline.txt
# Посмотри что создали
ls -la ~/test/
# Скопируй файлы
cp ~/test/hello.txt ~/test/hello_backup.txt
cp -r ~/test/dir1/ ~/test/dir1_backup/
# Переименуй файл
mv ~/test/file1.txt ~/test/renamed.txt
# Посмотри содержимое
cat ~/test/hello.txt
head -2 ~/test/multiline.txt
# Найди все .txt файлы
find ~/test -name "*.txt"
# Очисти за собой
rm -rf ~/test/

Теперь ты умеешь работать с файлами на уровне профи. Следующий урок — права доступа!