Копируем файлы со сменных носителей в консоли Debian

webmaster

Опубликован:  2021-03-16T08:17:55.255080Z
Отредактирован:  2021-03-16T08:17:55.255080Z
7
0
0
Вы неавторизованы, рекомендую зарегистрироваться и авторизоваться.

Как известно, для копирования файлов и каталогов в консоли Debian предназначена низкоуровневая утилита cp, которая в обязательном порядке устанавливается в систему в составе пакета coreutils. Основная справочная информация об этой программе представлена на соответствующей man-странице, и её можно увидеть в терминале вводом команды man cp. Кроме этого, формы использования, список опций и краткие пояснения можно увидеть, набрав в терминале команду cp --help.

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

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

1. Важная информация для постоянных читателей

Уважаемый читатель, списки auriz.ru не имеет спонсоров и финансирования, и чтобы выжить мы можем рассчитывать только на поддержку своих постоянных читателей и их пожертвования. Если вам оказалась полезна эта или другая статья этого сайта, и вы хотите больше интересных материалов на auriz.ru, поддержите нас рублём, ваша поддержка даст нам шанс выжить, оплатить продление домена и VDS, написать и опубликовать для вас другие интересные материалы.

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

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

2. Атрибуты оригиналов и копий

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

cp talon.pdf document.pdf

KmzsRY6Fa1.png

Здесь я указал команде cp имя оригинального файла и имя файла копии. На снимке экрана выше я подчеркнул красным фломастером дату модификации оригинального файла. Теперь, если взглянуть на оглавление текущего каталога, мы увидим, что в нём появился новый файл - копия исходного файла, совпадающая с ним по размеру, но при этом дата модификации копии отличается от даты модификации исходного файла - это первая важная деталь, на которую следует обратить внимание.

6ZynI3RP8h.png

Изменю режим доступа к файлу document.pdf и снова скопирую его с новым именем в текущий каталог, для этого ввожу две команды:

chmod g+w document.pdf
cp document.pdf newcopy.pdf

E6d7k6wJFU.png

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

a8oOd8fXTR.png

Полученные файлы в текущем каталоге мне больше не нужны, поэтому я их удаляю (rm -rf *) и сконцентрирую своё внимание на файлах, хранящихся на сменных носителях, и процессе их копирования в свой хомяк.

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

3. Копируем файлы с CD/DVD дисков

Обратимся к сменным носителям, которые защищены от записи, это CD/DVD диски. В моём хозяйстве есть DVD-диск, на который когда-то давным-давно я записывал на долгое хранение какие-то свои файлы и каталоги. На примере этого диска я и разберу детально процесс копирования с подобных носителей. Вставляю диск в привод и монтирую его.

udisksctl mount --block-device /dev/sr0

OrPgw94Wcf.png

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

ls -lR /media/cdrom0/

bURqaTNKgx.png

Поскольку на диске имеются вложенные каталоги, и в них хранится большое количество файлов, рекурсивная выдача команды ls конечно же не поместится в одно окно терминала. Но и представленного снимка экрана достаточно, чтобы заметить, что режим доступа у каталогов и файлов этого DVD - только чтение - что естественно для этого типа носителей. И, если попытаться скопировать содержимое диска в текущий каталог, никак не управляя атрибутами копируемых файлов и каталогов, команда для этого случая будет иметь следующий вид:

cp -r /media/cdrom0/* .

То и результат такого копирования будет закономерным - все скопированные каталоги и файлы будут иметь режим доступа только чтение, а их даты последней модификации не будут соответствовать датам модификации исходных файлов на DVD.

h7UsQx6qLy.png

Здесь следует обратить внимание, что в команде для копирования я задал ключ -r - рекурсивное копирование каталогов, использовал мета-символ *, чтобы не перечислять имена всех копируемых файлов, и задал текущий каталог как место назначения для копируемых файлов и каталогов с помощью символа . (точка). И, так как режим доступа копий только чтения сохранился, я получил небольшую головную боль, потому что режим доступа каталогов отличается от режима доступа файлов и изменить его рекурсивно для каталогов и файлов одной командой не получится. Не пойдёт! Удаляю все скопированные файлы, и для этого мне придётся воспользоваться услугами sudo, увы.

sudo rm -rf *

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

cp -r --preserve=timestamps --no-preserve=mode /media/cdrom0/ .

В команде появились два новых ключа:

  • --preserve=timestamps - даёт возможность сохранить дату последней модификации исходных файлов и каталогов для полученных копий;
  • --no-preserve=mode - даёт возможность не сохранять режим доступа исходных файлов и каталогов для полученных копий.

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

sUWFkYvY20.png

С диском DVD всё более или менее понятно, и, как видно из предыдущих рассуждений и снимков экрана, команда cp даёт возможность управлять атрибутами копируемых файлов, задача оператора - грамотно этими возможностями воспользоваться. OK, удаляю файлы из текущего каталога, и теперь для этого не потребуется прибегать к услугам sudo.

rm -rf *

dsk6OcCR7m.png

4. Копируем файлы с USB-flash накопителя

Давайте рассмотрим ещё один пример внешнего носителя - USB-flash накопитель с файловой системой Fat32. В моём распоряжении есть такая флэш, и на ней записаны некоторые файлы и каталоги. Как известно, смонтировать такой накопитель можно двумя различными способами:

  1. С помощью утилиты udisksctl;
  2. С помощью утилиты mount и соответствующих опций.

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

Монтирую свою флэш при помощи udisksctl, предварительно определив идентификатор раздела на ней командой lsblk.

udisksctl mount --block-device /dev/sdb1

qKtgYN5oFm.png

Теперь нужно посмотреть на оглавление указанной точки монтирования и обратить внимание на атрибуты файлов и каталогов в ней.

ls -lR /media/newbie/FLASH-DRIVE/

8wtQffji3w.png

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

udisksctl unmount --block-device /dev/sdb1

И попытаюсь снова смонтировать его, но на этот раз при помощи утилиты mount и без уточнения опций монтирования - как обычно делают начинающие пользователи Debian.

sudo mount /dev/sdb1 /mnt

На этот раз для монтирования потребовались права суперпользователя и программа sudo. Посмотрим на атрибуты файлов в точке монтирования этого носителя.

ls -lR /mnt

YFcl2z4tNT.png

Аха... На снимке экрана видно, что режим доступа к вложенным каталогам никак не изменился, а вот вложенные файлы стали исполняемыми - все! Как следствие, если их скопировать в хомяк с помощью cp и при этом не задать ключ --no-preserve=mode, то они и скопируются как есть, и, учитывая порядок вложенности, чтобы изменить режим доступа к этим файлам, придётся приложить некоторые усилия, об этом, возможно, поговорим в одном из выпусков блога на auriz.ru когда-нибудь скоро.

5. Выводы и умозаключения

Подведём итог несколькими дельными советами для начинающих осваивать работу в терминале Debian и желающих скопировать файлы со сменных носителей в хомяк (домашний каталог) с помощью утилиты cp:

  1. Аккуратно и грамотно монтируйте внешние носители, используйте соответствующие ключи и задавайте необходимые опции монтирования, если монтируете носитель программой mount, отдавайте предпочтение программе udisksctl, если работаете в пользовательской сессии;
  2. Перед копированием файлов обращайте внимание на атрибуты каталогов и файлов в точке монтирования сменного носителя, вполне вероятно, что вам захочется какие-то атрибуты сохранить для копий, а какие-то - нет;
  3. При копировании каталогов и файлов с помощью утилиты cp старайтесь осознанно и грамотно управлять атрибутами полученных копий с помощью ключей --preserve и --no-preserve, это поможет избежать некоторых необязательных трудностей впоследствии;
  4. Осваивая консольные утилиты внимательно читайте их man страницы, и полагайтесь на изложенную в них информацию, формируя свою моторику и правильные приёмы работы в консоли.

6. Примечание

Этот текст впервые был опубликован в блоге debianeach на нашем сайте больше года назад, 3-февраля 2020 г., и перенесён в этот блог с согласия автора и с минимальными эстетическими изменениями. Увы, debianeach больше не с нами...

Метки:  debian, terminal, udisks2, mount, cp, ls, udisksctl, rm
Комментарии: