Работа с файлами и каталогами в Linux

Работа с файлами и каталогами в Linux

Рассказываем о просмотре доступных файлов и каталогов, командах для работы с файлами и основах редактирования в текстовом редакторе nano.

Введение

Умение эффективно управлять файлами и каталогами — один из фундаментальных навыков для любого пользователя, от новичка до системного администратора. Без него невозможно ни настроить сервер, ни разрабатывать программное обеспечение, ни автоматизировать задачи в повседневной работы.

Мы собрали все ключевые команды, которые необходимы для уверенной работы. Они универсальные и будут работать во всех дистрибутивах Linux.

Расположение каталогов в файловой системе

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

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

pwd

Результат выполнения команды выглядит следующим образом:

/home/demo

Домашний каталог располагается после имени учетной записи пользователя, в приведенном примере он называется /demo. Этот каталог находится в каталоге с именем  /home и в каталоге верхнего уровня, который называется root или корневой каталог, поэтому представлен одной косой чертой /.

Просмотр содержимого каталогов

Для просмотра содержимого каталога используется команда ls. Название этой команды является сокращением слов list files.

Просмотреть содержимое любой директории можно следующими способами:

ls имя_директории

Либо введя команду:

ls /путь_к_директории

В результате выполнения команды отображаются файлы и каталоги, находящиеся внутри данного каталога:

dir1 file1  file2  file3

К команде ls можно добавлять дополнительные флаги, например, чтобы показать детализированное представление (права, список владельцев файлов или папок, размер, дату последнего модифицирования) файлов и директорий в текущей директории, можно использовать флаг -l:

ls -l

Результат выполнения команды:

total 16
drwxr-xr-x 2 home demo 4096 Nov  3 17:40 dir1
-rw-r--r-- 1 home demo   13 Nov  8 17:17 file1
-rw-r--r-- 1 home demo   42 Nov  9 13:04 file2
-rw-r--r-- 1 home demo  42 Nov  10 13:04 file3

Для просмотра списка всех файлов, включая скрытые файлы и каталоги, вы можете добавить флаг -a:

ls -a

Результат выполнения команды:

.       dir1        file1           .mysql_history  .ssh
..      .bash_history  file2   file3  .nan

Отобразить содержимое текущей директории с добавлением к именам символов, характеризующих тип, можно с помощью команды:

ls -F

Результат выполнения команды:

dir1/   file1  file2  file3

Перемещение между каталогами

Для перехода в домашний каталог используется команда cd. Название этой команды является сокращением слов change directory.

Для перехода в домашний каталог пользователя user используется команда:

cd ~user

Для перехода в предыдущую директорию, в которой мы находились до перехода в текущую директорию также используется команда cd.

В Linux-системах каждый файл и каталог находятся в самой верхней директории, которая называется «корневой» и обозначается одним символом слэш /.

Абсолютный путь указывает на расположение каталога по отношению к этой директории верхнего уровня. Это позволяет обращаться к справочникам однозначным образом из любого места в файловой системе.

Каждый абсолютный путь должен начинаться с косой черты — символа слэш /.

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

cd ..

Для перехода в директорию двумя уровнями выше:

cd ../..

Зарегистрируйтесь и начните использовать продукты Selectel прямо сейчас

Операции с файлами и каталогами

У каждой команды имеется множество параметров, чтобы узнать их, наберите команду и параметр --help, например:

ls --help

Далее приведен список основных команд навигации в консоли Linux.

Как создать файл в Linux

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

Создание пустых файлов и обновление метаданных

Команда touch — самый простой способ. Если файл с указанным именем не существует, touch создаст пустой файл.

touch new_document.txt

Основное предназначение команды touch — это изменение временны́х меток файла, например момент последнего доступа или модификации. Если применить touch (от англ. «потрогать») к уже существующему файлу, команда обновит его метаданные до текущего времени, не изменяя содержимого.

Создание пустого файла — полезный побочный эффект этого функционала, который идеально подходит для случаев, когда нужно быстро создать «заглушку» для дальнейшей работы.

Быстрое создание файлов с содержимым

Команда echo используется для помещения в поток вывода вручную набранного текста или содержимого переменных. В сочетании с операторами перенаправления вывода она превращается в мощный инструмент для создания файлов с содержимым без необходимости открывать текстовый редактор.

Для этого используются два оператора:

  • > (больше) — перенаправляет вывод команды в файл, перезаписывая его;
  • >> (двойное больше) — добавляет вывод команды в конец файл, не трогая существующее содержимое.

Пример создания файла с перезаписью:

echo "Первая строка в моем файле" > new_file.txt

Эта команда создаст файл new_file.txt и запишет в него указанную строку. Если выполнить похожую команду еще раз, старое содержимое будет стерто.

Пример добавления текста в конец файла:

echo "Вторая строка, добавленная позже" >> new_file.txt

Теперь файл new_file.txt будет содержать две строки.

Команду echo можно использовать и для создания пустого файла, перенаправив в него «пустоту»:

echo > empty_file.txt

Операторы > и >> — не просто способ создать файл с помощью команды echo. Это очень важный шаг к пониманию концепции работы с потоками ввода-вывода. 

Простой и интуитивный текстовый редактор Nano

Для создания и редактирования файлов с несколькими строками текста удобнее использовать текстовые редакторы. Один из них, nano — идеальный выбор для новичков, поскольку он прост, интуитивно понятен и не требует изучения сложных режимов работы. Практически во всех дистрибутивах, включая SelectOS, он установлен по умолчанию.

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

nano my_document.txt

В любом случае nano откроет файл my_document.txt для редактирования. Если его не существует, то появится возможность сохранить его на диске — в нижней части экрана будет подсказка. Ниже мы подробно описали работу с этим редактором.

В подсказках и файлах справки консольных программ символ ^ означает клавишу Ctrl.

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

Краткое знакомство с мощным редактором Vim

В отличие от Nano, цель которого быть дружелюбным, у Vim другой приоритет — быть удобным. Для этого программе недостаточно быть просто «хорошей» — еще и пользователю необходимо обучиться оперировать ее мощью.

Vim (Vi Improved) — это один из самых древних и распространенных текстовых редакторов в мире Linux. Он установлен практически на каждом сервере и является стандартом де-факто для многих системных администраторов и разработчиков. Его главное отличие от Nano — модальность, то есть наличие нескольких режимов работы, в которых одни и те же клавиши выполняют разные функции.

Нормальный режим (Normal Mode) —  основной режим, в который вы попадаете при открытии файла. Он предназначен для навигации по тексту и выполнения команд — например, копирования, удаления, замены. Нажатия клавиш здесь не вводят символы, а выполняют действия.

Режим вставки (Insert Mode) — в этом режиме Vim работает как обычный текстовый редактор, позволяя вводить и удалять текст.

Если вы когда либо будете пытаться осваивать Vim для постоянной работы, а не однократного использования, вам пригодится совет: каждый раз возвращаться в нормальный режим сразу после ввода текста. Тогда вы не будете путаться, не потребуется всё время подглядывать, в каком режиме находитесь. Непосредственный набор символов на самом деле занимает очень малую часть времени.

«Взрывной» стиль работы с режимами в Vim — когда вы каждый раз возвращаетесь в нормальный режим — позволит подружиться с этим редактором и открыть всю его мощь.

Командный режим (Command Mode) — в этом режиме можно вводить более сложные команды, в том числе указывать имена файлов.

Во многих русскоязычных руководствах авторы путают: нормальный режим называют командным. Будьте внимательны!

Есть еще несколько вспомогательных режимов, на них сегодня останавливаться не будем.

Хотя Vim обладает огромным количеством команд, для начала работы достаточно знать лишь несколько из них. Этот «набор для выживания» позволит открыть файл, внести изменения и сохранить его.

Запуск vim:

vim my_document.txt

Переход в режим вставки: находясь в нормальном режиме, нажмите клавишу i. В левом нижнем углу экрана появится надпись -- INSERT --.

Теперь можно печатать текст, как в обычном редакторе.

Для возвращения в нормальный режим достаточно нажать клавишу Esc. Надпись -- INSERT -- исчезнет.

Для сохранения и выхода перейдите в командный режим. Для этого надо нажать двоеточие. Помните? Мы всегда отталкиваемся от нормального режима и в него должны возвращаться. Двоеточие нажимаем находясь в нормальном режиме!

Появится строка ввода. Там мы набираем w и q, после чего нажимаем Enter. В командном режиме w означает записать (от англ. write), а q — выход (от англ. quit). 

Можно выйти и без сохранения — просто не вводить w. Если уверены, что изменения не нужны и не хотите отвечать на подтверждение, добавьте восклицательный знак в конце — :q!

Модальный подход Vim может показаться «неинтуитивным» на первый взгляд, но именно он является ключом к легкости работы. Автомобиль быстрее пешехода, но чтобы его использовать надо научиться рулить и освоить правила движения. Разделение навигации и редактирования на разные режимы позволяет выполнять сложные операции с текстом с помощью коротких комбинаций клавиш, что фантастически ускоряет и облегчает работу при редактировании кода или больших конфигурационных файлов.

Цель нашего руководства — не сделать вас экспертом Vim, а дать самые базовые инструменты, чтобы вы не боялись открывать в нем файлы и могли выполнить простые задачи.

Как создать директорию в Linux

Создание каталогов выполняется с помощью команды вида:

mkdir имя_директории

Название этой команды является сокращением слов make directory.

Создание двух каталогов одновременно выполняется с помощью команды:

mkdir   имя_директории_1   имя_директории_2

Для создания директории не обязательно физически находиться в ее будущем родительском каталоге. Можно указать полный (абсолютный) путь, начинающийся от корневого каталога /.

Например, находясь в своем домашнем /home/user, можно создать директорию для логов в системном /var/log:

mkdir /var/log/my_app_logs

Как удалить файл в Linux

Основная команда для удаления файлов — rm (от англ. remove).

Удаление одного файла:

rm file_to_delete.txt

Удаление нескольких файлов:

rm report_v1.doc report_v2.doc

Важные опции rm:

  • -i (--interactive) — подтверждение перед удалением каждого файла, что предотвращает необратимую потерю данных при пакетных операциях с неочевидными подстановками;
  • -f (--force) — принудительное удаление без каких-либо запросов, используется, как правило, в скриптах, где интерактивный ответ невозможен, и неожиданное подтверждение лишь «подвесить» поток команд.

Пример удаления с подтверждением:

rm -i *_file.conf
rm: remove regular file 'important_file.conf'? y

Как удалить директорию в Linux

В Linux существует два основных способа удаления директорий. Выбор зависит от того, пуста ли директория.

Безопасное удаление пустых каталогов

Команда rmdir (от англ. remove directory) — специализированный и безопасный инструмент, предназначенный для удаления только пустых каталогов.

rmdir empty_directory

Главное преимущество rmdir — в безопасности. При попытке удалить каталог, в котором есть файлы или другие подкаталоги, команда выдаст ошибку и ничего не произойдет.

Рекурсивное удаление каталогов с содержимым

Для удаления каталога вместе со всем его содержимым, — включая все файлы и подкаталоги, — используется команда rm с опцией -r (или -R, --recursive).

rm -r directory_with_files

Эта команда и мощная, и одновременно опасная. Она рекурсивно пройдет по указанному дереву каталогов и удалит все на своем пути безвозвратно.

Сочетание rm -fr — рекурсивное и принудительное удаление — одна из самых разрушительных команд в Linux и часто встречается в антипримерах и обсуждениях. Ее никогда нельзя выполнять от имени суперпользователя!

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

Если нужно убрать пустую коробку, вы просто выкидываете ее — rmdir. Если требуется снести старый дом со всем, что внутри, вызываете тяжелую технику — rm -r. Использовать rm -r для удаления пустой директории — это как заказать бульдозер, чтобы сгрести картонную коробку.

Всегда отдавайте предпочтение самому безопасному способу!

Как переименовать файл в Linux

Для переименования файлов и каталогов используется команда mv. Название этой команды является сокращением слова move.

Переименовать файл можно так:

mv имя_файла новое_имя

Как переместить файл в Linux

Для перемещения файлов в Linux также используется команда mv. Запись будет такой:

mv имя_файла путь/

Как копировать файл

Для копирования используется команда cp. Название этой команды является сокращением слова copy.

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

cp file1 file2

Для того чтобы копировать директорию dir1 в директорию dir2, используется команда:

cp -a dir1/ dir2/

Скопировать файл с именем file1 в директорию с именем dir1, можно с помощью команды:

cp file1 dir1/ 

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

Мы ознакомились с основными командами для работы с каталогами и файлами.

Далее мы изучим, как редактировать файлы и добавлять в них содержание.

Команда nano позволяет работать в одном из самых простых текстовых редакторов командной строки Linux, который занимает весь терминал в течение всего срока его использования.

В результате ввода в терминал команды nano будет открыт чистый файл.

Интерфейс выглядит следующим образом:

В верхней части открывшегося редактора отображается имя приложения и имя файла, который мы редактируем.

В середине должно располагаться содержимое файла, в настоящее время оно пустое.

В нижней части интерфейса расположен ряд комбинаций клавиш, которые указывают с основными элементами управления текстового редактора. Для каждого из них символ ^ означает клавишу CTRL.

Для того чтобы открыть справку используйте сочетание клавиш CTRL-G.

Закрывается справка с помощью сочетания клавиш CTRL-X. После закрытия справки мы возвращаемся к редактированию.

Вводить и редактировать можно любой текст, например, можно ввести: “Hello World!”

Для сохранения внесенных изменений следует нажать сочетание клавиш CTRL-O. Внимание! Это буква О, а не ноль.

Далее система попросит вас ввести либо подтвердить имя файла, который вы хотите сохранить:

File Name to Write:                                                            
^G Get Help          M-D DOS Format       M-A Append           M-B Backup File
^C Cancel            M-M Mac Format       M-P Prepend

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

После ввода имени файла нажмите клавишу ENTER.

Для того чтобы выйти из тестового редактора нажмите сочетание клавиш CTRLX.

Если вы внесли изменения и не сохранили файл, вам будет предложено сохранить сделанные вами изменения:

Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?                         
 Y Yes
 N No           ^C Cancel

Вы можете нажать клавишу Y, чтобы сохранить изменения, клавишу N для отмены изменений и выхода, или сочетание клавиш CTRL-C, чтобы отменить операцию выхода из режима редактирования файла.

Если вы решили сохранить изменения, вам будет предложено сохранить их в том же файле, который был отредактирован.

Нажмите клавишу ENTER, чтобы сохранить файл и выйти из редактора.

Как найти файл в Linux

По мере роста количества файлов на сервере или рабочем компьютере ручной поиск становится неэффективным. В Linux есть два основных инструмента для поиска: find — медленный, но чрезвычайно мощный, и locate — молниеносный, но с некоторыми ограничениями.

Мощный и гибкий поиск в реальном времени

Команда find сканирует файловую систему в реальном времени, что гарантирует получение самых актуальных результатов. Она обладает очень гибким синтаксисом, который позволяет строить сложные запросы.

Базовый синтаксис выглядит так:

find [где_искать][критерии_поиска][действие]

В качестве места для поиска часто используется текущий каталог (.), родителький (..), домашний (~) или вся файловая система (/).

Поиск по имени

С учетом регистра:

find . -name "myfile.txt"

Без учета регистра:

find . -iname "MyFile.txt"

Для поиска файлов с известными частями имени применяются стандартные метасимволы (wildcards) — например, *. Важно заключать шаблон в кавычки — так он попадет в команду find, а не будет интерпретирован командной оболочкой, которая сама высматривает wildcards:

find /home/user/documents -name "*.log"

Эта команда найдет все файлы, заканчивающиеся на .log, в каталоге documents и всех его подкаталогах.

Поиск по типу

Только файлы в каталоге /etc:

find /etc -type f -name "*.conf"

Только директории в каталоге /var:

find /var -type d -name "nginx"

Поиск по размеру

Файлы больше 100 МБ в каталоге /var:

find /var/log -size +100M

Меньше 1 МБ в текущем каталоге:

find . -size -1M

Файлы в текущем каталоге с точным размером 50 КБ:

find . -size 50k

Поиск по времени изменения

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

Файлы, измененные в текущем каталоге сегодня:

find . -mtime 0

Файлы, измененные в текущем каталоге вчера:

find . -mtime 1

Измененные за последнюю неделю файлы в текущем каталоге:

find . -mtime -7

Файлы, измененные до последней недели в текущем каталоге:

find . -mtime +6

Действия с найденными файлами

Одна из самых мощных возможностей find — выполнение произвольной команды для каждого найденного файла с помощью опции -exec

Синтаксис для удаления всех временных файлов .tmp в текущем каталоге и его подкаталогах:

find. -type f -name "*.tmp" -exec rm -v {} \;

Разберем эту команду:

  • {} — специальный заполнитель, на место которого find подставляет имя каждого найденного файла;
  • \; — точка с запятой, экранированная обратным слэшем, указывает find на окончание команды, которую нужно выполнить — без слэша точка с запятой интерпретировалась бы оболочкой.

find — не просто команда, а целый язык запросов к файловой системе.

Простая памятка

Вы начинаете с указания того, где искать. Затем просто добавляете уточняющие «кирпичики»: -name, -type, -size — и так далее. В конце можно указать, что с этим сделать — -exec.

Молниеносный поиск по базе данных

В отличие от find, команда locate не сканирует файловую систему каждый раз при запуске. Вместо этого она обращается к специальной базе данных, которая содержит список всех файлов и их расположений. Этот подход делает locate невероятно быстрым — результаты поиска появляются практически мгновенно.

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

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

sudo updatedb

Простой поиск:

locate .bashrc

Эта команда найдет все файлы и каталоги, в имени которых встречается .bashrc.

Поиск без учета регистра (опция -i):

locate -i MyFile.conf

Подсчет количества найденных файлов (опция -c):

locate -c ".jpg"

find и locate — это классический инженерный компромисс между скоростью и актуальностью данных. Команду find можно сравнить с походом в библиотеку и поиском книги на полках вручную: это медленно, но вы гарантированно найдете книгу, если она там есть. locate же похожа на использование библиотечного каталога — мгновенно, но если книгу только что поставили на полку, в каталоге ее еще не будет.

Выбор инструмента зависит от задачи: нужна ли вам абсолютная точность прямо сейчас или максимальная скорость с риском получить слегка устаревшие данные.

Заключение

Уверенная работа с файлами и каталогами — это фундамент, на котором строятся все остальные навыки работы в Linux. В этом руководстве мы рассмотрели все основные команды, необходимые для этого.

  • Навигация: pwd, ls, cd.
  • Создание: touch, echo, nano, vim для файлов и mkdir для каталогов.
  • Поиск: find для мощного, гибкого поиска и locate для мгновенного поиска по базе данных.
  • Управление: mv для перемещения и переименования, cp для копирования.
  • Удаление: rm для файлов и непустых каталогов, rmdir для безопасного удаления пустых каталогов.

Каждая из этих команд — инструмент со своей сферой применения. Ключ к мастерству лежит в практике и понимании того, что лучше всего подходит для конкретной задачи.