Разберём, по какому списку tar собирает архив и где по дороге потерялся .release.
tar собирает файлы и каталоги в один файл-архив. Ключ -c создаёт архив, -f задаёт имя его файла. Каждый сохранённый файл или каталог — элемент архива: путь, содержимое, права, владелец и время изменения.
Ночной скрипт создаёт архив так:
app/* — шаблон имён: Bash заменяет его списком подходящих имён ещё до запуска tar, как в уроке «Справка и оболочка». Имена, которые начинаются с точки, шаблон * не подставляет. tar получил app/bin, app/config, app/data и app/secret.env, а о .release не узнал.
Каталог, названный целиком, tar обходит сам — со всеми файлами, скрытыми тоже:
-C переходит в каталог до того, как tar прочитает следующие имена. Поэтому пути внутри архива начинаются с app/. Какие пути записаны в архиве, такие и появятся при распаковке:
| Команда | Пути в архиве |
|---|---|
tar -cf a.tar app/* |
app/bin/…, app/secret.env; без .release |
tar -cf a.tar -C live app |
app/, app/.release, app/bin/… |
tar -cf a.tar live/app |
live/app/… — лишний уровень |
Ты в домашнем каталоге student. Нужно сохранить его целиком, вместе с .bashrc. Какая команда это сделает?
-
tar сохраняет всё, что получил, а шаблон
*отдаёт ему список без скрытых имён. -
Тот же шаблон
*: Bash подставит имена без точки в начале, и.bashrcв архив не попадёт. -
Шаблон
*раскрывает Bash, и имена с точкой в начале в список не попадут. Проверь:echo /home/student/*не покажет.bashrc.
Каталог, названный целиком, tar обходит сам и сохраняет все имена, включая .bashrc. Шаблон * раскрывает Bash до запуска tar, и скрытые имена в список не попадают.
Главное в шаге
- tar сохраняет только те имена, которые получил; каталог, названный целиком, он обходит со всеми файлами, включая скрытые.
-
Шаблон
*раскрывает Bash до запуска tar, и имена с точкой в начале в список не попадают. -
Пути внутри архива задаёт команда: с
-C live appони начинаются сapp/.