Команды Linux для работы с файлами
Чтобы быть профессионалом в использовании терминала Linux, нужно научится управлять файлами через терминал. Это чуть ли не основа всего, включая редактирование конфигурационных файлов, сборку программ, администрирование и множество других вещей. Просмотр содержимого папок, переход между папками, создание и удаление файлов — это необходимая база, для удобной работы в терминале.
В этой статье мы рассмотрим самые часто используемые команды Linux для работы с файлами и каталогами, после их освоения терминал больше не будет казаться таким непонятным и объемлемым. Вот какие команды будут нас сегодня интересовать:
- ls — список файлов в директории;
- cd — переход между директориями;
- rm — удалить файл;
- rmdir — удалить папку;
- mv — переместить файл;
- cp — скопировать файл;
- mkdir — создать папку;
- ln — создать ссылку;
- chmod — изменить права файла;
- touch — создать пустой файл.
А теперь перейдем к подробному рассмотрению всех этих команд.
1. ls — просмотр содержимого папки
Команда ls позволяет вывести список файлов заданной папки, по умолчанию, будет выведен список файлов текущей папки:
Вы можете вывести список файлов из всех подкаталогов рекурсивно, для этого используйте опцию -R:
Чтобы вывести список файлов нужной папки, вы можете передать ее адрес утилите, например, /home:
Чтобы получить больше информации и вывести все имена файлов в виде списка используйте опцию -l:
2. cd — изменить папку
Команда cd позволяет изменить текущую папку на другую. По умолчанию, текущей считается домашняя папка, например, cd Desktop меняет папку на рабочий стол, если вы выполните ее из домашнего каталога:
Вы также можете указать полный путь к папке:
Команда cd .. переходит в папку, которая находится выше на одну в файловой системе:
Вы также можете вернуться в предыдущую рабочую папку:
3. rm — удалить файлы
Команда rm позволяет удалить файл. Будьте очень осторожны с ней, она не будет спрашивать подтверждения:
Например, rm file удалит файл с именем file, который находится в текущей папке. Как и в предыдущих вариантах, вы можете указать полный путь к файлу linux. Например:
Если вы хотите удалить папку, то нужно использовать опцию -r. Она включает рекурсивное удаление всех файлов и папок на всех уровнях вложенности:
rm -r /home/user/photo/
Будьте осторожны, потому что эта команда удаляет файлы безвозвратно.
4. rmdir — удалить папку
Команда rmdir позволяет удалить пустую папку. Например, команда rmdir directory удалит папку directory, которая находится в текущей папке:
Если вам нужно удалить папку с файлами, то нужно использовать утилиту rm вместе с опцией -r.
5. mv — перемещение файлов
Команда mv перемещает файл в новое место. Она также может использоваться для переименования файлов. Например, mv file newfile переименует файл file в newfile:
Чтобы переместить файл в другую папку нужно указать путь к ней, например, переместим файл file в папку /home/user/tmp/
mv file /home/user/tmp/
6. cp — копирование файлов
Эта cp и mv — это похожие команды linux для работы с файлами. Они работают аналогичным образом, только исходный файл остается на своем месте.
Вы также можете рекурсивно скопировать всю папку с помощью команды cp -r. Эта команда скопирует всю папку вместе со всеми файлами и вложенными папками в новое место. Например, скопируем папку /etc/:
7. mkdir — создать папку
Команда mkdir позволяет создать новую папку mkdir test создаст папку в текущем каталоге:
Если нужно создать папку в другом каталоге, укажите полный путь к нему:
8. ln — создание ссылок
Утилита ln позволяет создавать жесткие и символические ссылки на файлы или папки. Для создания символической ссылки используется опция -s. Например, вы создадим ссылку на папку с загрузками:
ln -s /home/user/Downloads/ /home/user/test/
Для создания жесткой ссылки никаких опций задавать не нужно:
ln /home/user/Downloads/ /home/user/test/
9. chmod — изменить права
chmod позволяет изменить права доступа к файлам. Например, chmod +x script.sh добавляет флаг исполняемости к файлу script.sh:
Чтобы убрать флаг исполняемый используйте опцию -x:
Подробнее о том, как работают разрешения для файлов смотрите в статье права доступа к файлам в Linux.
10. touch — создать файл
Команда touch создает пустой файл. Например, touch file создаст пустой файл в текущей папке с именем file:
Для создания файлов через терминал существует еще несколько команд, они рассмотрены в статье как создать файл в linux.
11. mc
Работа с файлами Linux через терминал может выполняться не только с помощью обычных консольных команд, каждая из которых выполняет только определенное действие. Вы можете использовать полнофункциональный файловый менеджер с псевдографическим интерфейсом на основе ncurses. Midnight Commander — это файловый менеджер, который можно использовать прямо в терминале. Для установки mc в Ubuntu выполните:
sudo apt install mc
После завершения установки достаточно выполнить команду mc:
Используйте клавиши со стрелками для перемещения по файлах, Tab для перехода на другую панель, Alt+1 для просмотра справки и Alt+2 для вывода меню:
Если терминальное окружение поддерживает мышь, то вы можете ее использовать в Midnight Commander.
Выводы
В этой статье мы рассмотрели как выполняется работа с файлами и каталогами в linux, с помощью терминала. Когда вы освоите все эти команды, вы сможете сделать большинство основных действий в терминале. А как часто вы пользуетесь терминалом? Используете его для работы с файлами? Напишите в комментариях!
Как вывести список только директорий используя ls в Bash
Для обработки в скриптах может понадобиться в определённой директории получить только список только папок без файлов. Далее показано, как это сделать разными способами.
1. С помощью ls увидеть все папки кроме скрытых
*/ — это шаблон, который соответствует всем подкаталогам в текущем каталоге (* будет соответствовать всем файлам и подкаталогам; / ограничивает его каталогами). Точно так же, чтобы вывести список всех подкаталогов в /home/mial/bin/aur, используйте:
Чтобы вывести только каталоги в текущей папке:
Чтобы вывести данные в столбик:
2. С помощью ls увидеть все папки вместе со скрытыми
Обратите внимание, что */ не найдёт любые скрытые папки. Чтобы включить и их, укажите их явно:
Обратите внимание, что в примере выше используется два шаблона. Чтобы это стало очевидным, рассмотрим следующий пример: нужно показать только каталоги, в том числе и скрытые в директории /home/mial/bin/aur/:
3. С помощью ls и cut
Следующий способ показывает каталоги только в текущей папке, но делает это в виде столбика:
Чтобы показать вместе со скрытыми каталогами:
Чтобы показать только директории в папке /home/mial/bin/aur:
4. Используя echo
Этот способ не рекомендуется, если в именах папках могут быть пробелы:
Пример показа всех папок кроме скрытых:
Показ всех скрытых и обычных директорий:
Показ всех скрытых и обычных папок в директории /home/mial/bin/aur/:
5. Используя ls и grep
В этом варианте применяется фильтрация вывода с помощью grep. Этот способ имеет ограничение — папки должны выводиться в виде подробного списка:
Чтобы показать вместе со скрытыми папками:
Для вывода только имён директорий (возможны проблемы с директориями, имеющими пробелы в названиях):
6. С помощью find
Команда find имеет очень гибкие критерии поиска.
Чтобы вывести все папки без подпапок (замените /home/mial/bin/aur/ на интересующую папку):
Чтобы вывести все папки с подбапками:
7. printf
Чтобы вывести все директории на отдельных строках (аналогично -1)
Предыдущий пример работает правильно с именами «-«, пробелами и переводами строк (newline).
Улучшенный пример, удаляет последний слэш (/), правильно работает с именами, содержащими пробелы и переводы строк:
Пример с функцией. Наконец, использование списка аргументов внутри функции не повлияет на список аргументов текущей запущенной оболочки:
Для запуска функции:
8. tree
Команда tree также полезна для рассматриваемого вопроса. По умолчанию она показывает все файлы и каталоги на полную глубину, а некоторые символы ascii показывают дерево каталогов.
Но если мы хотим получить только каталоги, без дерева ascii и с полным путём из текущего каталога, вы можете сделать:
И если вам нужен абсолютный путь, вы можете начать с указания полного пути к текущему каталогу:
А чтобы ограничить количество подкаталогов, вы можете установить максимальный уровень подкаталогов с уровнем -L, например:
9. Пример скрипта: выполнение действие только с каждой папкой в директории
Следующий скрипт показывает, как можно выполнить действие с каждой папкой в директории — имя каждой папки будет присваиваться переменной $line:
Чтобы выполнить действие с каждой папкой в директории /home/mial/bin/aur: