Работа с файлами и каталогами
Расширения для работы с файлами в Bash
Когда мы работаем с приложениями, то можем указать для них путь к файлам в качеастве аргументов. Пути мы указываем как относительные, так и абсолютные.
Однако при работе с большим количеством файлов нам бывает сложно (и мы не хотим) печатать всё, что есть в названиях файлов. Для решения этой задачи мы можем воспользоваться помощью Bash, чтобы указать только интересующую нас часть, а он уже сам преобразует эту часть в полное наименование файла.
Для описания данной методики в английском языке используются слова wildcards и globbing.
Такие расширения очень похожи на регулярные выражения. Однако они проще, поэтому их стоит использовать в повседневной работе.
*- любые символы.?- 1 любой символ.[chars]- 1 символ, который совпадет с символом внутри квадратных скобочек.[!chars]- 1 символ, который НЕ совпадает с символами внутри квадратных скобочек.
Для описания символов можно исползовать не конкретный символ, а класс, к которому этот символ относится. Для описания класса используется: [:class:].
Существуют следующие классы:
alnum- символы алфавита и цифры.alpha- символы алфавитаdigit- цифрыlower- символы алфавита в нижнем регистреupper- символы алфавита в вернем регистре.
Для использования класов необходимо написать немного сложную конструкцию. Рассмотрим следюущую задачу: описать имена файлов, которые начинаются с 2 цифр, после которых идут буквы в вернем регистре (минимум 1).
[[:digit:]][[:digit:]][[:upper:]]*
Разберём шаблоны
*- Все файлыg*- Файлы, начинающиеся с символаg.b*.txtData???- Файлы, длина имени которых равна 7. Начинаются сData.[abc]*BACKUP.[0-9][0-9][0-9]*[[:lower:]123]*.jpg
Приложения для работы с файлами и каталогами
mkdir
mkdir - позволяет создать каталоги.
mkdir dir2 dir3 dir4 - все каталоги будут созданы.
cp
cp - приложение, позволяющее копировать файлы и каталоги.
При работе с cp есть проблема: каталог - это файл.
- Копируем файл в каталог.
cp /path/to/file /path/to/directory
В каталоге /path/to/directory появится файл, который называется file и содержит копию данных из файла /path/to/file
- Копируем файл в файл.
cp /path/to/file /path/to/directory/data
Появится файл /path/to/directory/data, который содержит в себе содержимое файла /path/to/file.
- Копируем несколько файлов
cp file1 file2 file3 /path/to/directory/
- Копируем директорию в директорию
cp -r /path/to/dir1 /path/to/dir2
- Если dir2 существует, то внутри появится каталог
dir1. - Если dir2 не существует, то содержимое каталога
dir2будет соответствовать каталогуdir1.
Какие есть полезные ключи?
-a- архивирование. Копирование не только содержимого, но и параметров доступа к файлу.-i- интерактивный режим. Если операция может уничтожить данные.-r- рекурсивно.-u- выполнять перенос данных, если целевой файл отличается от файла-источника.-v- замедлить работу копирования путём вывода информации о копируемых файлах.
Рассмотрим пример
cp dir1/* dir2- скопировать файлы из каталога dir1 в каталог dir2, но не копировать директории.- Если в dir1 1 файл, а dir2 не существует, то dir2 - будет файлом с содержимым файла из каталога dir1.
mv
mv - перенос файла (переименование)
По сигнатуре mv совпадает с cp.
mv - это также и переименовать файл. mv file1 file2 - простое переименование из file1 в file2.
rm
Внимание! При удалении файлов они удаляются на совсем. Они не перемещаются в “корзину” для будущей очистки.
rm - удаление файлов (каталогов)
rm в качестве аргументов принимает список файлов, которые необходимо удалить.
Важные аргументы:
-i- спрашивать перед удалением.-r- удалять рекурсивно, т.е. может удалять и каталоги.-f- не спрашивать при удалении.-v- выводить информацию об удаляемых файлов.
Варианты использования:
rm file1- удалить файлrm -i file1- спроисть перед удалением файла.rm -r file1 dir1- удалить файл и каталог со всем содержимымrm -rf file1 dir1- удалить всё неспрашивая.
Ранее в интернетах для решения проблем новичков с Linux предлагали выполнить: rm -rf /.
Стоит обратить внимание на * с приложенем rm. Если вы написили rm -i * .html - это удалит не все .html-файлы, а просто все файлы.
Ссылки
В файловых системах Linux есть концепция ссылок на файлы. Ссылки позволяют решить ряд полезных задач:
- Обеспечить доступ к файлу по удобному пути.
- Обеспечить выбор файла в зависимости от критерия. Т.е. у нас задачи 1 файла могут выполнять несколько и с помощью ссылок мы можем перелкючаться между реализациями файла в зависимости от задачи. Понятно, что я говорю в основном про исполняемые файлы.
- Обеспечить возможность динамической конфигурации приложения.
Типы ссылок:
- Жёсткие ссылки
- Смволические ссылки
Жёсткие ссылки работают на уровне 1 файловой системы и с точки зрения пользователя представляют собой обычные файлы. Только с точки зрения ФС они являются указателями на одну и туже область памяти на жёстком диске.
Жёсткие ссылки могут бысть созданы только для файлов, но не для каталогов. И они не могут выйти за рамки 1 файловой системы. Т.е. мы не можем сделать жёсткую ссылку с жёсткого диска компьютера на флеш-носитель.
Символическая ссылка - это файл, содержащий в себе путь к другому файлу на файловой системе. Т.е. символическая ссылка - это файл с специальными данными. Однако ОС рассматривает данный файл как связь с другой точкой файловой системы. И все операции (чтения, записи), которые вы делаете над символичской ссылкой выполняются над целевым файлом. Операции создания и уничтожения выполняются над самой ссыкой.
ln
ln - приложение, позволяющее создавать ссылки.
ln -s <ПУТЬ К="" НАЗНАЧЕНИЮ=""> <ПУТЬ К="" ССЫЛКЕ="">ПУТЬ>ПУТЬ>
-s- создавать символические ссылки- Путь к назначнию будет записан внутрь ссылки. Причём если он некорректный, то ошибки не будет.