Навигация и первые файловые операции
Перед практикой важно не просто запомнить команды, а понимать, какой вопрос каждая команда решает. В терминале ты всё время отвечаешь на три базовых вопроса: где я сейчас, что здесь есть, и что я хочу сделать с файлом или директорией.
| Вопрос | Команда |
|---|---|
| Где я сейчас? | pwd |
| Что лежит рядом? | ls |
| Как перейти в другое место? | cd |
| Как создать директорию? | mkdir |
| Как создать или записать файл? | touch, printf, echo, > |
| Как скопировать? | cp |
| Как переместить или переименовать? | mv |
| Как удалить? | rm |
Linux-навигация строится вокруг текущей директории. От неё зависят относительные пути, поэтому перед файловыми операциями полезно проверять контекст.
pwd: текущая директория
pwd означает print working directory - вывести текущую рабочую директорию.
pwd
# /root
Команда ничего не меняет, только показывает место, в котором ты сейчас находишься. Это особенно важно перед командами cp, mv и rm: ошибка в текущей директории может привести к работе не с теми файлами.
Вывод команды можно сохранить в файл:
pwd > /root/location.txt
cat /root/location.txt
Символ > перенаправляет стандартный вывод команды в файл. Если файл уже существовал, он будет перезаписан.
ls: посмотреть содержимое
ls показывает содержимое директории.
ls
ls /opt/devops/lab1
Часто используемые флаги:
ls -l # длинный формат: права, владелец, размер, дата
ls -a # показать скрытые файлы
ls -la # оба режима сразу
ls -lh # human readable: размеры вроде 4K, 10M
Флаги можно объединять: ls -la означает то же самое, что ls -l -a.
Пример длинного вывода:
drwxr-xr-x 2 root root 4096 Jan 15 10:23 notes
-rw-r--r-- 1 root root 128 Jan 15 10:23 config.txt
-rw-r--r-- 1 root root 64 Jan 15 10:23 .secret
Если нужно увидеть скрытый файл, имя которого начинается с точки, обычного ls недостаточно. Используй ls -a или ls -la.
cd: переход между директориями
cd означает change directory - сменить текущую директорию.
cd /var/log
pwd
# /var/log
Полезные варианты:
cd / # перейти в корень файловой системы
cd ~ # перейти домой
cd # тоже перейти домой
cd .. # подняться на уровень выше
cd - # вернуться в предыдущую директорию
Если ты находишься в /opt/devops/lab1/notes, команда cd .. поднимет тебя в /opt/devops/lab1. Она не переносит в корень и не создаёт директорию. .. всегда означает родительскую директорию относительно текущего места.
Абсолютный и относительный путь
Абсолютный путь начинается от корня /:
/var/log/syslog
/opt/devops/lab1/config.txt
/root/location.txt
Он работает одинаково из любой текущей директории.
Относительный путь считается от текущей директории:
logs/app.log
../config/app.conf
./script.sh
Пример:
# Перейти в рабочую директорию лабораторной.
cd /opt/devops/lab1
# Посмотреть объект notes внутри текущей директории.
# Это относительный путь: shell ищет /opt/devops/lab1/notes.
ls notes
# Прочитать config.txt из текущей директории.
# После cd это означает /opt/devops/lab1/config.txt.
cat config.txt
# Подняться на уровень выше в /opt/devops, затем снова зайти в lab1.
# В итоге это тот же файл: /opt/devops/lab1/config.txt.
cat ../lab1/config.txt
Здесь config.txt и ../lab1/config.txt указывают на один и тот же файл, потому что текущая директория уже /opt/devops/lab1. Если бы ты находился в /root, тот же относительный путь config.txt означал бы /root/config.txt. Поэтому в лабораторных полезно после каждого перехода делать pwd.
Чтение и запись простых файлов
cat выводит содержимое файла:
cat /etc/hosts
cat /opt/devops/lab1/config.txt
Если нужно скопировать содержимое одного файла в другой, можно перенаправить вывод:
cat /opt/devops/lab1/config.txt > /root/config_copy.txt
Для записи короткой строки удобно использовать printf:
printf 'Hello DevOps\n' > /root/README.md
\n означает перевод строки. Без него текст будет записан без финального перехода на новую строку.
echo тоже часто используют для простых строк:
echo "Hello DevOps" > /root/README.md
Разница для новичка такая: echo проще, а printf предсказуемее, когда важны спецсимволы и точный формат.
Есть два основных перенаправления вывода:
command > file.txt # перезаписать файл
command >> file.txt # дописать в конец файла
Перед > будь внимателен: если файл уже был, его содержимое будет заменено новым выводом.
mkdir и touch: создать директорию или пустой файл
mkdir создаёт директорию:
mkdir /root/myproject
Если нужно создать вложенный путь сразу, используется -p:
mkdir -p /root/backup/configs
Без -p команда упадёт, если /root/backup ещё не существует. С -p она создаст все недостающие промежуточные директории и не будет ругаться, если часть пути уже есть. Поэтому mkdir -p часто встречается в скриптах.
touch создаёт пустой файл или обновляет время изменения существующего файла:
touch /root/myproject/notes.txt
Если нужно создать файл сразу с текстом, используй printf или echo с >:
printf 'Hello DevOps\n' > /root/myproject/README.md
cp: копирование
cp копирует файл из источника в назначение:
cp /opt/devops/lab1/config.txt /root/myproject/
Первый аргумент - что копируем. Второй - куда копируем.
Если второй аргумент является директорией, файл сохранится внутри неё с тем же именем:
cp /opt/devops/lab1/config.txt /root/myproject/
# получится /root/myproject/config.txt
Если вторым аргументом указать полный путь с новым именем, копия получит это имя:
cp /opt/devops/lab1/config.txt /root/myproject/myconfig.txt
Для директорий нужен рекурсивный режим:
cp -r /opt/project /root/project_copy
В этом курсе сначала работай аккуратно с файлами, а cp -r используй только когда действительно нужно копировать целую директорию.
mv: перемещение и переименование
mv перемещает файл или директорию. Эта же команда используется для переименования.
Переименовать файл в той же директории:
mv /root/myproject/config.txt /root/myproject/myconfig.txt
Переместить файл в другую директорию:
mv /root/myproject/myconfig.txt /root/backup/configs/
Главное отличие от cp: после mv старого пути больше нет. Если ты сделал mv old.txt new.txt, файл не продублировался, а сменил имя.
rm: удаление без корзины
rm удаляет файлы:
rm /root/myproject/README.md
В Linux обычно нет корзины на сервере. Команда удаляет сразу. Особенно осторожно работай под root.
Для удаления непустой директории нужен рекурсивный режим:
rm -r /root/myproject
Что делает -r: проходит по дереву директории и удаляет вложенные файлы и папки. Поэтому rm -r требует максимальной внимательности.
Перед удалением полезно выполнить:
pwd
ls -la /root/myproject
Так ты проверяешь, что путь действительно тот, который нужен. Хорошая привычка в production: сначала посмотреть, потом удалять.
Безопасный порядок работы
Когда выполняешь лабораторную или реальную задачу на сервере, держи простой порядок:
- Узнай место:
pwd. - Посмотри содержимое:
ls -la. - Выполни действие:
cd,cp,mv,rm,mkdir. - Проверь результат: снова
ls,catилиpwd.
Например:
cd /opt/devops/lab1
pwd
ls -la
cat .secret > /root/found_secret.txt
cat /root/found_secret.txt
Такой подход кажется медленным только в начале. На практике он экономит время, потому что ты сразу видишь контекст и быстрее находишь ошибку, если команда сработала не так, как ожидалось.
