Linux скопировать с usb

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

Копирование файлов и каталогов — одна из наиболее распространенных задач, которые вы будете выполнять при работе в командной строке. В Linux есть несколько команд для копирования файлов, наиболее широко используемые инструменты — cp и rsync .

Обычной практикой является использование команды cp для копирования файлов и rsync для копирования каталогов.

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

Копирование файлов с помощью команды cp

В операционных системах Linux и Unix команда cp используется для копирования файлов и каталогов.

Самый простой вариант использования — скопировать файл в текущий рабочий каталог. Например, чтобы скопировать файл с именем file.txt в файл с именем file_backup.txt в текущем каталоге , вы должны выполнить следующую команду:

Если целевой файл существует, он будет перезаписан. Чтобы получить запрос на подтверждение перед перезаписью файлов, используйте параметр -i .

По умолчанию при использовании команды cp для копирования файла новый файл будет принадлежать пользователю, выполняющему команду. Используйте параметр -p чтобы сохранить режим файла, владельца и временные метки :

Другой вариант, который может быть полезен, — это -v . При использовании этой опции команда печатает, что делается:

Скопируйте файл в каталог

Чтобы скопировать файл в каталог, укажите абсолютный или относительный путь к каталогу. Если целевой каталог не указан, файл копируется в текущий каталог.

В следующем примере мы file.txt файл file.txt в file.txt /backup :

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

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

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

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

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

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

Команда cp также позволяет использовать сопоставление с образцом. Например, чтобы скопировать все файлы .png из текущего каталога в каталог /backup , вы должны использовать:

Копирование каталогов с помощью команды cp

Чтобы скопировать каталог, включая все его файлы и подкаталоги, используйте параметр -R или -r . В следующем примере мы копируем каталог Pictures в Pictures_backup :

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

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

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

Копирование файлов и каталогов с помощью команды rsync

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

Читайте также:  Установщик appx microsoft windows 10

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

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

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

Если целевой файл существует, rsync перезапишет его.

Эту же команду можно использовать для копирования каталога:

rsync по-разному rsync исходным каталогам, заканчивающимся косой чертой / . Если вы добавите завершающую косую черту в исходный каталог, команда скопирует только содержимое исходного каталога в целевой каталог. Если косая черта в конце опущена, rsync скопирует исходный каталог в целевой каталог. Самый безопасный вариант — всегда включать косую черту / как в месте назначения, так и в источнике.

Чтобы узнать больше о rsync прочтите следующие статьи:

Выводы

Мы показали вам, как копировать файлы и каталоги в системах на базе Linux и Unix, используя утилиты cp и rsync .

Если у вас есть вопросы, оставьте комментарий ниже.

Источник

Команда cp: правильное копирование папок с файлами в *nix

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

Допустим нам нужно скопировать всё из папки /source в папку /target.

Первое, что приходит на ум это:

Сразу исправим эту команду на:

Ключ -a добавит копирование всех аттрибутов, прав и добавит рекурсию. Когда не требуется точное воспроизведение прав достаточно ключа -r .

После копирования мы обнаружим, что скопировались не все файлы — были проигнорированы файлы начинающиеся с точки типа:

.profile
.local
.mc
и тому подобные.

Почему же так произошло?

Потому что wildcards обрабатывает shell ( bash в типовом случае). По умолчанию bash проигнорирует все файлы начинающиеся с точек, так как трактует их как скрытые. Чтобы избежать такого поведения нам придётся изменить поведение bash с помощью команды:

Чтобы это изменение поведения сохранилось после перезагрузки, можно сделать файл wildcard.sh c этой командой в папке /etc/profile.d (возможно в вашем дистрибутиве иная папка).

А если в директории-источнике нет файлов, то shell не сможет ничего подставить вместо звёздочки, и также копирование завершится с ошибкой. Против подобной ситуации есть опции failglob и nullglob . Нам потребуется выставить failglob , которая не даст команде выполниться. nullglob не подойдёт, так как она строку с wildcards не нашедшими совпадения преобразует в пустую строку (нулевой длины), что для cp вызовет ошибку.

Однако, если в папке тысячи файлов и больше, то от подхода с использованием wildcards стоит отказаться вовсе. Дело в том, что bash разворачивает wildcards в очень длинную командную строку наподобие:

На длину командной строки есть ограничение, которое мы можем узнать используя команду:

Получим максимальную длину командной строки в байтах:

Получим что-то типа:

Итак, давайте будем обходиться вовсе без wildcards.

Давайте просто напишем

И тут мы столкнёмся с неоднозначностью поведения cp . Если папки /target не существует, то мы получим то, что нам нужно.

Однако, если папка target существует, то файлы будут скопированы в папку /target/source.

Не всегда мы можем удалить заранее папку /target, так как в ней могут быть нужные нам файлы и наша цель, допустим, дополнить файлы в /target файлами из /source.

Читайте также:  Open zip files with linux

Если бы папки источника и приёмника назывались одинаково, например, мы копировали бы из /source в /home/source, то можно было бы использовать команду:

И после копирования файлы в /home/source оказались бы дополненными файлами из /source.

Такая вот логическая задачка: мы можем дополнить файлы в директории-приёмнике, если папки называются одинаково, но если они отличаются, то папка-исходник будет помещена внутрь приёмника. Как скопировать файлы из /source в /target с помощью cp без wildcards?

Чтобы обойти это вредное ограничение мы используем неочевидное решение:

Те кто хорошо знаком с DOS и Linux уже всё поняли: внутри каждой папки есть 2 невидимые папки «.» и «..», являющиеся псевдопапками-ссылками на текущую и вышестоящие директории.

  • При копировании cp проверяет существование и пытается создать /target/.
  • Такая директория существует и это есть /target
  • Файлы из /source скопированы в /target корректно.

Итак, вешаем в жирную рамочку в своей памяти или на стене:

Поведение этой команды однозначно. Всё отработает без ошибок вне зависимости от того миллион у вас файлов или их нет вовсе.

Выводы

Если нужно скопировать все файлы из одной папки в другую, не используем wildcards, вместо них лучше использовать cp в сочетании с точкой в конце папки-источника. Это скопирует все файлы, включая скрытые и не завалится при миллионах файлов или полном отсутствии файлов.

Послесловие

vmspike предложил аналогичный по результату вариант команды:

ВНИМАНИЕ: регистр буквы T имеет значение. Если перепутать, то получите полную белиберду: направление копирования поменяется.
Благодарности:

Источник

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

В наши дни очень большую популярность у пользователей набрали USB флешки. Они используются для обмена файлами, различными фильмами и документами, установки операционных систем, а также восстановления системы после сбоя. Чтобы работать с флешкой в Linux ее нужно примонтировать в корневую файловую систему.

Дело в том, что организация файловой системы Linux немного отличается от того, что мы привыкли видеть в Winodws. Здесь нет никаких дисков C,D,E и так далее, есть только корень, самая верхняя точка файловой системы, в подкаталоги которой подключаются все жесткие диски и внешние носители.

Если в системе используется окружение рабочего стола, то оно, как правило, берет на себя всю низкоуровневую работу чтобы выполнить монтирование флешки в linux. Система обнаруживает подключенную флешку и в системном лотке всплывает уведомление о подключенном устройстве. Дальше остается кликнуть по значку флешки, чтобы система выполнила все нужные для ее монитрования действия. Но если окружение рабочего стола не запущенно или вам нужно работать в консоли можно выполнить все действия по монтированию флешки вручную.

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

Монтирование флешки в Linux

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

Файлы флешек и других устройств хранения данных находятся в каталоге /dev. Устройства нумеруются по алфавиту sda, sdb, sdc, sdd и т д. Так как флешка подключается последней у нее будет старшая буква. Например, sdb или sdc. Имя sda принадлежит жесткому диску. Можно, конечно, просто посмотреть содержимое каталога /dev/, но такой способ ненадежный. Мы воспользуемся утилитой fdisk.

Читайте также:  Dlna stream from windows

Подключите флешку и выполните:

Как видите, здесь мы можем посмотреть детальную информацию об устройстве. Имя файла, список разделов, формат таблицы разделов, список разделов. А главное для нас, размер раздела и его файловую систему. Теперь не сложно понять какая из них флешка. В этом примере это /dev/sdc1

Создаем папку для монтирования:

sudo mkdir /mnt/usb

Теперь монтируем флешку с помощью команды mount:

sudo mount /dev/sdc1 /mnt/usb

Если знаете файловую систему флешки, то лучше ее указать с помощью опции -t. Чаще всего используется FAT, так как ее легко открывают как Windows так и Linux системы:

sudo mount -t vfat /dev/sdc1 /mnt/usb

Монтирование осуществляется от суперпользователя, но если нужно чтобы отмонитровать флешку мог любой нужно указать опцию users:

sudo mount -t vfat -o users /dev/sdc1 /mnt/usb

По умолчанию владельцем файлов на флешке при монтировании устанавливается root, поэтому если вы захотите работать с флешкой через файловый менеджер, то нужно будет его запускать с правами суперпользователя или же сразу примонтировать флешку в linux таким образом, чтобы владельцем был ваш пользователь. Для этого укажите группу и id своего пользователя в опциях uid и gid:

sudo mount -o users,uid=1000,gid=1000 /dev/sdc1 /mnt/usb

Удостовериться что флешка подключена можно посмотрев содержимое каталога, в который мы ее монтировали:

Или выполнив команду mount:

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

sudo umount /dev/sdc1

Автоматическое монтирование флешки в Linux

Популярные окружения рабочего стола выполняют монтирование флешки linux автоматически, как только она подключена к системе или по клику на ярлыке. Мы можем это реализовать с помощью службы udisks2.

Udisks — это служба dbus, позволяющая другим программам и пользователю взаимодействовать с udev. Мы можем получать сообщения о только что подключенных устройствах, выполнять их монтирование и отключение. Окружения рабочего стола используют именно этот сервис для монтирования устройств.

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

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

udisksctl mount -b /dev/sdc1

Здесь /dev/sdc1 — файл нашей флешки, а опция -b указывает, что нужно монтировать блочное устройство. Так же как и в mount здесь можно задать опции монтирования -o и файловую систему -t. Флешка будет примонтирована в папку /run/имя_пользователя/uuid-флешки/

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

udisksctl unmount -b /dev/sdc1

Автоматическое монтирование usb флешки в linux можно настроить с помощью утилиты udiskie. Все новые подключенные флешки будут автоматически подключаться, после подключения устройства будет всплывать окно с предложением открыть файловый менеджер, а также значок, с помощью которого можно получить доступ к каждому из устройств.

Устанавливается утилита в Ubuntu командой:

sudo apt install udiskie

Дальше остается запустить программу:

Теперь все подключаемые устройства будут автоматически монтироваться с помощью udisks. Рассмотрим что значат опции:

  • -a — выполнять автоматическое монтирование
  • -n — показывать всплывающее уведомление
  • -t — показывать значок в трее.

Выводы

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

Источник

Оцените статью