Разное

Копирование linux: Страница не найдена | Losst

Содержание

Копирование, перемещение, создание и удаление файлов и каталогов

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

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

В Bash для копирования файлов используется команда cp (от «copy»), которой обычно передаются два аргумента:

  1. адрес с именем исходного файла,

  2. новый адрес с именем или просто адрес каталога, куда помещается копия.

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

Рассмотрим примеры.

cp readme readme2

В данном случае создается копия файла readme, которая остается в той же директории под именем readme2.

cp readme Desktop/

В папку Desktop копируется файл readme. Здесь текущим является родительский Desktop’у каталог. Имена копии и файла оригинала будут совпадать, а вот полные адреса – нет.

cp /home/irina/tux.png /mnt/D/pingvin.png

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

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

Чтобы скопировать каталог со всем его содержимым, необходимо использовать ключ -r команды cp:

cp -r . /letters ./oldletters

Перемещение и переименование

В Bash-оболочке Linux для перемещения и переименования используется одна и та же команда – mv (от «move» – перемещать). Переименование можно рассматривать как частный случай перемещения, ведь по-сути изменяется полный адрес файла, что равносильно перемещению, даже если файл остается в том же каталоге.

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

В случае перемещения без переименования во втором аргументе указывается только каталог места назначения.

mv document.txt Work

mv document. txt Work/doc23.txt

Здесь в первом случае файл document.txt перемещается в каталог Work. Во-втором случае одновременно происходит перемещение файла и его переименование: файл document.txt перемещается в директорию Work и получает новое имя doc23.txt.

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

mv order.txt orderNew.txt

mv Work/list.odt Work/names.odt

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

Создание файлов и каталогов

Новые директории создаются командой mkdir. Например, чтобы создать каталог Work в текущей директории необходимо выполнить следующую команду:

mkdir Work
или
mkdir ./Work

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

cal > ./Work/January

Здесь программа cal выводит календарь на текущий месяц, а поскольку стоит знак перенаправления вывода, то вывод команды будет записан в файл January, находящийся в папке Work.

Удаление файлов и каталогов

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

rm ghost.png

Командой rmdir можно удалить пустой каталог. Если же каталог не пуст, следует использовать команду rm с ключом -r:

Вопросы

У вас в каталоге есть файлы с разными расширениями. Вам надо группу файлов, имеющих одно и тоже расширение, скопировать в другой каталог. Как это сделать одной командой?

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

Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.

правильное копирование папок с файлами в *nix / Блог компании RUVDS.com / Хабр

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

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

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

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

cp /source/* /target

Сразу исправим эту команду на:
cp -a /source/* /target

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

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

.profile
.local
.mc

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

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

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

shopt -s dotglob

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

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

cp вызовет ошибку.

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

cp -a /souce/a /source/b /source/c …… /target

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

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

Или:
xargs --show-limits

Получим что-то типа:
….
Maximum length of command we could actually use: 2089314
….

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

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

cp -a /source /target

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

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

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

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

cp -a /source /home

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

Чтобы обойти это вредное ограничение мы используем неочевидное решение:
cp -a /source/. /target

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

Итак, вешаем в жирную рамочку в своей памяти или на стене:
cp -a /source/. /target

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

Выводы


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

vmspike предложил аналогичный по результату вариант команды:
cp -a -T /source /target

Oz_Alex
cp -aT /source /target

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

Благодарности:
  • Компании RUVDS.COM за поддержку и возможность публикации в своем блоге на Хабре.
  • За изображение TripletConcept. Картинка очень большая и детальная, можно открыть в отдельном окне.

P.S. Замеченные ошибки направляйте в личку. Повышаю за это карму.

11.4. Копирование файлов между Linux компьютерами | Документация openSUSE

Linux предлагает богатый выбор протоколов, которые вы можете использовать чтобы копировать файлы между компьютерами. Выбор протокола зависит от того, насколько много усилий вы хотите вложить и нуждаетесь ли вы в совместимости с будущими установками Windows. Следующие секции представляют различные методы передачи файлы из и в Linux компьютеры. Убедитесь, что вы имеете работоспособное сетевое соединение, иначе они не будут работать. Все сценарии предполагают работу службы разрешения имен в сети. Если ваша сеть не включает службу имен, используйте непосредственно IP адрес или добавьте IP адреса в соответствии с именами хостов (компьютеров) в /etc/hosts на всех компьютерах.

Следующий пример IP адресов и имен хостов используется на протяжении всего этого раздела:

Имя хоста назначения

jupiter.example.com

IP адрес назначения

192.168.2.100

Имя хоста источника

venus.example.com

IP адрес источника

192.168.2.101

Пользователь

tux

11.4.1. Копирование файлов с помощью SSH

Следующие требования должны быть удовлетворены и на сервере, и со стороны клиента:

  1. Если вы используете имена хостов, то убедитесь, что каждое имя фигурирует в /etc/hosts на сервере и на клиенте . Если вы используете IP адреса, вам не нужно ничего менять.

  2. Если вы используете брандмауэр, откройте порт SSH. Запустите YaST и выберите +. Далее и проверьте, отображается ли в списке разрешенных служб. Если нет то, выберите SSH из выпадающего меню и щелкните . Примените ваши изменения и покиньте YaST нажав и затем .

Чтобы копировать файлы с сервера клиенту, вы должны знать, где файлы размещаются на сервере. Например, чтобы копировать единственный файл /srv/foo_file с сервера jupiter.example.com в текущий каталог, используйте команду scp (точка указывает на текущий каталог):

scp [email protected]:/srv/foo_file .

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

scp -r [email protected]:/srv/foo_directory .

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

scp tux@192. 168.2.100:/srv/foo_file .

Если вы не знаете точно где находится ваш файл, используйте команду sftp. Копирование файлов в KDE или GNOME с помощью SFTP очень просто. Поступите следующим образом:

  1. Нажмите Alt+F2.

  2. Введите следующее в адресной строке:

    sftp://[email protected]
  3. Введите ваш пароль tux на jupiter.example.com.

  4. Перетащите ваши файлы или каталоги с сервера на ваш рабочий стол или локальный каталог.

KDE предоставляет другой протокол, называемый fish, который может быть использован если sftp недоступен. Использование этого протокола подобно sftp. Замените префикс протокола sftp в URL на fish:

fish://[email protected]

11.4.2. Передача файлов с помощью rsync

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

  1. Пакет rsync установлен.

  2. Идентичные пользователи присутствуют на обоих системах.

  3. Доступно достаточное дисковое пространство на сервере.

  4. Если вы хотите извлечь пользу из rsync в полной мере, убедитесь, что демон rsyncd установлен на одной из систем.

rsync полезен для архивирования или копирования данных и так же может быть использован как демон, чтобы предоставить каталоги в сеть (смотрите Расширенная настройка синхронизации с помощью rsync).

11.4.2.1. Базовый режим rsync

Базовый режим работы rsync не требует ни каких специальных конфигураций. rsync позволяет идеально отображать целые каталоги с одной системы на другую. Его использование не сильно отличается от инструмента для регулярного копирования, такого как scp. Следующая команда создает резервную копию домашнего каталога tux на сервере резервного копирования называемом jupiter:

rsync -Hbaz -e ssh /home/tux/ tux@jupiter:backup

Используйте следующую команду, чтобы восстановить данные из вашей резервной копии:

rsync -Haz -e ssh tux@jupiter:backup /home/tux/
11.
4.2.2. rsync в режиме демона (службы)

Запустите демон rsyncd на одной из ваших систем, чтобы использовать rsync полнофункционально. В этом режиме возможно создание точек синхронизации (модулей), которые могут быть доступны без учетных записей. Чтобы использовать демон rsyncd, проделайте следующее:

Процедура 11.1. Расширенная настройка синхронизации с помощью rsync

  1. Войдите как root и установите пакет rsync.

  2. Настройте ваши точки синхронизации в /etc/rsyncd.conf. Добавьте имя точки в квадратных скобках и path ключевое слово, как показано в примере:

    						
    [FTP]
      path = /srv/ftp
     comment = An Example
  3. Запустите демон rsyncd от имени root rcrsyncd start. Чтобы автоматически запускать демон rsync во время загрузки системы, вызовите insserv rsyncd.

  4. Чтобы получить список всех файлов размещенных в каталоге /srv/ftp введите (заметьте: двойное двоеточие):

    rsync -avz jupiter::FTP
  5. Инициируйте передачу указав целевой каталог (в этом примере текущий каталог представлен точкой):

    rsync -avz jupiter::FTP . 

По умолчанию, файлы не удаляются в процессе синхронизации. Чтобы форсировать удаление файлов, добавьте опцию --delete. Чтобы гарантировать, что опция --delete случайно не удаляет новые файлы, используйте вместо нее опцию --update. Любые возникающие конфликты должны быть разрешены в ручную.

11.4.3. Передача файлов с помощью Unison

До использования Unison для синхронизации файлов и папок между разными компьютерами, убедитесь, что выполняются следующие требования:

  1. Установлен пакет unison.

  2. Есть достаточно свободного места у вас на локальном и удаленном компьютерах.

  3. Если вы хотите воспользоваться Unison в полный потенциал, убедитесь, что Unison установлен и запущен на удаленном компьютере.

В случае необходимости, запустите Unison с опцией -doc topics для получения полного списка доступных разделов.

Для постоянных настроек, Unison позволяет создать profiles (профили), которые определяют параметры Unison, такие, как директории (корни) для синхронизации, игнорируемые типы файлов и другие настройки. Профили хранятся в виде текстовых файлов в ~/.unison с расширением *.prf.

11.4.3.1. Использование GUI

Для синхронизации различных каталогов с помощью Unison’s GUI, проделайте следующее:

  1. Запустите Unison нажатием Alt+F2 и введите unison.

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

  3. Введите каталог назначения. Он может быть локальным или удаленным. Если вы хотите синхронизироваться с удаленным каталогом, выберите метод (SSH, RSH или Socket) и введите и имя хоста и дополнительного пользователя.

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

    В левой колонке показан выбранный каталог источник, в третьей колонке показан каталог назначения. Если существуют различия между каталогами, в колонке указано условное обозначение, предлагаемых действий. Зеленый стрелка указывает, что файл был изменен, добавлен или удален в папке источнике или папке назначения. Направление стрелки указывает направление изменений которые произойдут, если произвести синхронизацию. Вопросительный знак указывает на конфликт (то есть файлы были изменены и Unison не будет автоматически перезаписывать их).

    Рисунок 11.1. Варианты синхронизации файлов

  5. Чтобы изменить показанные Unison предложения для каждого файла (например, если вы захотите изменить каталог), выберите файл и нажмите или . , исключает файлы из синхронизации. Символ в колонке изменится соответствующим образом.

  6. Для запуска синхронизации, нажмите .

При следующем запуске Unison, будет показано диалоговое окно выбора профилей, с указанием пары каталогов для синхронизации. Выберите профиль или создайте новый (еще пару каталогов) и выполните синхронизацию, как описано выше.

11.4.3.2. Использование командной строки

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

  1. Откройте консоль и введите следующую команду:

    unison -ui text DIR         ssh://[email protected]//PATH

    Замените метки с соответствующих значений.

  2. Unison спросит, что делать с вашими файлами и каталогами,
    например:

    local                  jupiter
               <----  new file   dir [f]
  3. Нажмите F если вы хотите следовать рекомендациям Unison. Чтобы увидеть другие команды нажмите ?.

  4. Нажмите y, если вы хотите обновить.

11.4.4. Копирование файлов с помощью FTP

Перед настройкой вашего FTP сервера, убедитесь, что выполняются следующие требования:

  1. Установлен пакет vsftp.

  2. У вас есть доступ root к FTP сервера.

  3. Есть достаточно дискового пространства на вашем компьютере.

Только для домашних сетей

Эти настройки пригодны только для использования в домашних сетях. Не применяйте их к сайтам, которые не защищены брандмауэром и не разрешайте доступ из интернет.

Чтобы настроить FTP сервер, проделайте следующее:

  1. Подготовка FTP сервера:

    1. Откройте консоль, войдите в систему как root и сделайте резервную копию /etc/vsftpd. conf:

      cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
    2. Создайте точку доступа для анонимного FTP

      mkdir ~ftp/incoming
      chown -R ftp:ftp ~ftp/incoming
  2. Замените файлы конфигурации в соответствии с вашими потребностями (смотрите man-страницу vsftpd.conf об опциях расширенной конфигурации):

    Разрешение анонимного доступа на чтение и запись
    #
    listen=YES
    									
    # Разрешение анонимного доступа к FTP серверу
    anonymous_enable=YES
    									
    #
    local_enable=YES
    # Разрешить запись
    write_enable=YES
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    dirmessage_enable=YES
    # писать лог-файл 
    xferlog_enable=YES
    connect_from_port_20=YES
    chown_uploads=YES
    chown_username=ftp
    ftpd_banner=Welcome to FTP service.
    anon_root=/srv/ftp
    Предоставление ограниченных прав для FTP пользователей (только для дома)
    chroot_local_users=YES
  3. Перезапустите FTP сервер

    rcvsftp start

На клиентской машине, введите адрес ftp://HOST в вашем браузере или FTP клиенте. Замените HOST именем хоста или IP адресом вашего сервера. Для пользователей доступно множество графических интерфейсов, которые подходят для навигации по вашему FTP серверу. Чтобы просмотреть их список, введите FTP в строке поиска менеджера пакетов YaST.

Linux — Немного о том, как можно копировать файлы

Да это же просто, скажете Вы, но на этот комментарий есть несколько вариантов, которые могут быть достаточно не тривиальными, на вскидку — скопировать папку за исключением какого-то типа файлов или скопировать папку + сохранить настройки разрешений или скопировать из папки файлы только определенного типа…

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

Команда CP

Здесь все просто есть команда cp, параметры и аргументы, если кратко:

cp [OPTION] Source Destination
cp [OPTION] Source-1 Source-2 Source-3 Source-n Directory

Копирование файлов

cp file1 file2 file3 Destination

Понятно, что ряд файлов копируется в папку с именем «Destination».

Копирование каталогов

Так как каталог содержит файлы, то нужно использовать рекурсивное копирование:

cp -R Src-Directory Dest-Directory

Копирование с заменой / без замены

Достаточно пустить через пайп:

yes | cp -R Src-Directory Dest-Directory

Или через force:

cp -Rf Src-Directory Dest-Directory

Без замены (предотвратить замену) можно использовать параметр -n:

cp -Rn Src-Directory Dest-Directory

Копирование определенного типа файлов

Достаточно выбрать файлы по расширению:

Можно во всех случаях использовать verbose:

cp -Rv * /home/user/folder

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

  • cp -a archive files
  • cp -f force copy by removing the destination file if needed
  • cp -i interactive — ask before overwrite
  • cp -l link files instead of copy
  • cp -L follow symbolic links
  • cp -n no file overwrite
  • cp -R recursive copy (including hidden files)
  • cp -u update — copy when source is newer than dest
  • cp -v verbose — print informative messages 

Но вопросы про разрешения и исключение файлов остаются открытыми, здесь придет на помощь rsync.

Копировать каталоги за исключением

Можно так:

rsync -r --exclude '.git' source target 

Каждое исключение — отдельный параметр, например так:

rsync -av --progress --exclude '.git' --exclude 'dir1' source target

Копировать каталоги сохранив разрешения

Здесь все просто, достаточно добавить параметр -p:

rsync -avp --progress source target

rcync обычно применяется при процедурах по резервному копированию файлов, при синхронизации каталогов, репозиториев и т.п., очень полезная вещь, но ман на много больше, чем у cp 😀

Копирование с использованием FIND

Можно найти нужные файлы и скопировать их «куда надо»:

find . -iname '*.mp3' -exec cp {} /my/destination/folder/ \;

Или так:

find /source/folder/ -name '*data*.xml' -exec cp {} /my/destination/folder/ \;

Поиск и копирование старых файлов 

Например сроком жизни более месяца:

find /var/log -type f -mtime +31 -exec cp '{}' /old/log/ \;

Памятка по Find

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

find <путь> <условия поиска> | xargs cp -t <куда копировать>

Но в целом подходит конструкция указанная выше:

find <путь> <условия поиска> -exec cp '{}' <куда копировать> \;

 

Копирование файлов на основе даты изменения в linux



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

find . -mtime -90 -ls

Я действительно не знаю, как скопировать файлы с помощью -mtime . Я новичок в linux, пожалуйста, помогите мне.

linux bash cp
Поделиться Источник Kalai     12 августа 2013 в 04:42

5 ответов


  • ruby копирование файлов на основе даты изменения

    У меня есть файлы (с разными расширениями), которые добавляются каждые 10 минут на общий ресурс windows (А), и я хочу скопировать их на сервер linux (Б) и выполнить над ними некоторые операции с помощью скрипта. Используя ruby и FilesUtils , как я могу создать скрипт, который будет копировать…

  • Создайте ZIP файлов на основе даты, Linux

    Я создаю файл zip из некоторых файлов (файлов изображений), но мне нужно ограничить его таким образом, чтобы в файл zip добавлялись только последние файлы. Мне нужны файлы, которым больше 2 дней. Точное время не имеет значения. Это то, что я делаю, но как я могу ограничить его на основе даты? Это…



41

Используйте опцию -exec для find :

find . -mtime -90 -exec cp {} targetdir \;

-exec будет копировать каждый результат, возвращаемый find , в указанный каталог (targetdir в приведенном выше примере).

Поделиться devnull     12 августа 2013 в 04:59



5

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

find . -mtime -90 -ls >/tmp/copy.todo.txt

Вы можете прочитать список, если он не слишком велик, с помощью

for f in `cat /tmp/copy.todo. txt`;
do echo $f;
done

Примечание: кавычки вокруг cat… являются обратными кавычками, часто в верхнем левом углу клавиатуры

Затем вы можете заменить команду echo командой copy:

for f in `cat /tmp/copy.todo.txt`;
do cp $f /some/directory/
done

Поделиться Paul     12 августа 2013 в 04:52



5

Можно также выбрать точную дату и время, кроме возврата к определенному количеству дней

cp  `find . -type f -newermt '18 sep 2016 20:05:00'` FOLDER

Выше копируются все файлы в каталоге, которые были созданы после 18 сентября 2016 года 20:05:00 в FOLDER (за 3 месяца до сегодняшнего дня 🙂

Будьте осторожны с символом для команды найти, это NOT этот:’ это обратная кавычка: ` выбор даты-это с этим: ‘

Если у вас есть файлы с пробелами, новыми строками, табуляциями или подстановочными знаками в их именах, вы можете использовать любое из решений от Stéphane Chazelas, первое — для GNU, второе-для GNU или некоторых BSDs:

find .  -type f -newermt '18 sep 2016 20:05:00' -exec cp -t FOLDER {} + 
find . -type f -newermt '18 sep 2016 20:05:00' -exec sh -c 'cp "$@" FOLDER' sh {} +

Поделиться FatihSarigol     18 декабря 2016 в 20:05




4

Используйте эту команду:

for i in `ls -lrt | grep "jul" | awk '{print $9}' `; do cp $i* /some/folder/; done

Поделиться Mise     05 августа 2014 в 17:22



1

Пример: выберите день 09/08/2017

ls -l
 -rw-rw-rw-    1    root     system          943   Aug   09   02:59  File

for j in `ls -l |awk '{ if ($7 == "09") print $9}'`
    do
        mv $j $Destination;
    done

Поделиться Ahmed Abdelsamad     15 августа 2017 в 08:09


Похожие вопросы:


Копирование файлов на основе даты, измененной в batch file

Я пытаюсь скопировать файлы из одного каталога в другой с помощью пакетного скрипта DOS. Файлы, которые я хочу скопировать, — это 4 или 3 последних файла. Это число будет статичным, но его еще…


windows копирование файлов на основе измененной даты

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


копирование файлов с linux на windows

Мне было интересно, можно ли скопировать файлы с моего сервера Linux на мой сервер Windows. Я видел и другие методы, такие как pscp и winscp, но они включают в себя команды, выполняемые на машине…


ruby копирование файлов на основе даты изменения

У меня есть файлы (с разными расширениями), которые добавляются каждые 10 минут на общий ресурс windows (А), и я хочу скопировать их на сервер linux (Б) и выполнить над ними некоторые операции с…


Создайте ZIP файлов на основе даты, Linux

Я создаю файл zip из некоторых файлов (файлов изображений), но мне нужно ограничить его таким образом, чтобы в файл zip добавлялись только последние файлы. Мне нужны файлы, которым больше 2 дней….


Powershell-как создавать каталоги на основе даты последнего изменения файлов?

Я новичок в PS. Я нашел скрипты, которые сканируют каталоги (или рекурсивные Dir) и получают атрибут даты последнего изменения файла, но я не могу создавать каталоги на основе этой даты. То, что я…


Копирование файлов резервных копий баз данных с xamp/mysql/data из windows на linux по пути /var/lib/mysql

Копирование файлов резервных копий базы данных с xamp/mysql/data из windows на linux по пути /var/lib/mysql , но это создает только пустую базу данных в phpmyadmin из linux. Пожалуйста, кто-нибудь…


как загрузить файлы из корзины s3 на основе даты изменения файлов?

Я хочу загрузить файлы из определенного ведра s3 на основе даты последнего изменения файлов. Я исследовал, как подключить boto3, и есть много кода и документации, доступных для загрузки файла без…


Копирование файлов в папки в зависимости от года

Мне нужно иметь возможность копировать фотографии из исходной папки в папки year на основе даты изменения файла. Я ищу сценарий bash на linux, чтобы сделать это


Проблема в открытии всех последних 3 файлов на основе даты изменения с помощью VBA

У меня есть проблемы с открытием всех последних 3 файлов в папке на основе даты, измененной с помощью кода VBA. Как изменить приведенный ниже код, чтобы он помог открыть все последние 3 файла, а не…

Резервное копирование системы | Русскоязычная документация по Ubuntu

Как известно, «пользователи компьютера делятся на тех, кто делает бэкапы, и тех, кто будет их делать». В этой статье мы рассмотрим различные способы резервного копирования (бэкапа) всей системы и, соответственно, восстановления из резервной копии.

Сразу стоит отметить, что все операции стоит производить не «по-живому», т.е. не на работающей системе, а с liveCD или установленной на соседнем разделе/флэшке/usb-hdd системы. В случаях, когда простой в несколько минут критичен для системы, возможно копирование системы из-под самой себя, но при этом нужно учитывать некоторые дополнительные условия, которые в данной статье пока что не рассматриваются Далее по тексту для действий, выполняемые от имени суперпользователя, будет использоваться команда sudo, что является стандартом для Ubuntu. В других системах возможно получение привелегий суперпользователя через su, некоторые liveCD-системы по умолчанию работают в режиме суперпользователя

tar

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

Создание архива

Для начала создайте точки монтирования для корневого раздела и для раздела, на котором вы собираетесь создавать бэкап, например так

sudo mkdir /mnt/{root,backup}

Смонтируйте оба раздела. Для большей надежности можно смонтировать корневой раздел в режиме read-only (только для чтения), чтобы исключить вероятность случайного изменения данных

sudo mount /dev/sdXY /mnt/root -o ro
sudo mount /dev/sdXY /mnt/backup

(Вместо «sdXY» используйте ваши значения для нужных разделов. определить их можно с помощью sudo fdisk -l или sudo blkid)

В случае, если вы используете отдельные разделы для /boot, /usr, /home и пр. и хотите включить их содержимое в бэкап, примонтируйте их в соответствующие папки

sudo mount /dev/sdXY /mnt/root/usr -o ro
sudo mount /dev/sdXY /mnt/root/home -o ro

При необходимости создайте на бэкап-разделе папку, в которой вы хотите разместить архив, например

sudo mkdir -p /mnt/backup/ubuntu/root

Теперь можно приступить к созданию архива. Чтобы создать архив с gzip-сжатием, выполните

sudo tar -cvzpf -C /mnt/root /mnt/backup/ubuntu-sda1.tar.gz .

(Ключ -p включает сохранение владельцев и прав доступа для файлов 1))

Для bzip2-сжатия используйте

sudo tar -cvjpf /mnt/backup/ubuntu-sda1.tar.bz2 /mnt/root

Для lzma-сжатия

sudo tar --lzma -cvpf /mnt/backup/ubuntu-sda1.tar.lzma /mnt/root

Аналогично для lzo-сжатия — ключ --lzop вместо --lzma

Различные алгоритмы сжатия дают разный размер архива, а также отличаются по производительности

По завершении процесса отмонтируйте все смонтированные разделы

sudo umount /mnt/root{/boot,/var,/home,} /mnt/backup

Восстановление из архива

Внимание! Данный способ предполагает полный откат к состоянию на момент создания архива с заменой всех данных!

Создайте точки монтирования для корневого раздела и раздела, на котором хранится ваш архив

sudo mkdir /mnt/{root,backup}

Примонтируйте раздел с архивом-бэкапом

sudo mount /dev/sdXY /mnt/backup -o ro

Отформатируйте корневой раздел в ту же (или другую) ФС. Если вы используете отдельные разделы для /usr, /boot и пр. и архивировали их, отформатируйте их тоже

sudo mkfs.reiserfs -l "root" /dev/sdXY
sudo mkfs.ext2 -L "boot" /dev/sdXY
sudo mkfs.ext4 -L "home" /dev/sdXY

(если вы восстанавливаете систему на новый жесткий диск, разметьте его с помощью fdisk/gparted и отформатируйте разделы)

Некоторые файловые системы поддерживают задание UUID при форматировании. Это дает возможность создать ФС с таким же UUID, как у старой, что позволит избежать необходимости править fstab.

Для ext2/3/4 UUID задается с помощью ключа -U, а еще больше упростить задачу можно командой вида

sudo mkfs.ext4 -L "label" -U "$(sudo blkid -o value -s UUID /dev/sda1)" /dev/sda1

Для reiserfs это будет ключ -u, для reiser4 -U, для остальных см. man mkfs.тип

Смонтируйте свежесозданные ФС

sudo mount /dev/sdXY /mnt/root
sudo mount /dev/sdXY /mnt/root/home

Теперь можно распаковать содержимое архива на место

sudo tar --same-owner -xvpf /mnt/backup/ubuntu-2010-10-07. tar.bz2 -C /mnt/root/

(ключ -C задает каталог, в который нужно распаковать файлы. ключ --same-owner сохраняет владельцев файлов при распаковке)

Если вы воспользовались советом выше и создали ФС тех же типов с теми же UUID — можете смело пропустить этот пункт. В противном случае вам придется исправить fstab в соответствии с произведенными изменениями. Откройте этот файл в любимом текстовом редакторе (например, nano) и замените UUID (и тип ФС, если форматировали что-либо в другую ФС) нужных разделов

sudo nano /mnt/root/etc/fstab

Сохраните файл, выйдите из редактора и отмонтируйте все смонтированные разделы

sudo umount /mnt/root{/var,/boot,} /mnt/backup

dd — копирование раздела

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

Данный метод имеет следующие преимущества:

  • полное сохранение прав доступа, xattr (расширенные атрибуты файлов), acl и прочих атрибутов файлов — раздел копируется вместе с файловой системой и всем ее содержимым в том виде, в каком данные записаны на диск
  • универсальность — dd присутствует в любой Linux-системе

  • возможность копирования разделов с экзотическими ФС (например, Reiser4)
  • возможность работы с образом как с реальным разделом

Однако, есть целый ряд недостатков:

  • если файловая система содержит ошибки, после восстановления из такого бэкапа вы получите ФС с теми же ошибками

  • для распаковки такого бэкапа потребуется раздел объемом не меньше исходного, вне зависимости от количества занятого места на разделе

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

  • необходимость дополнительных манипуляций при распаковке на раздел большего размера

  • нестандартный сопособ получения информации о процессе работы утилиты

Учитывая вышеизложенное можно сказать, что dd — не самый лучший инструмент в данном случае. С другой стороны, в освоении и использовании он проще многих других средств.

Создание образа

Нельзя допускать, чтобы данные на разделе изменялись во время копирования, иначе данные в образе будут противоречивы, а сам бэкап — бесполезен. Можно выбать один из следующих вариантов:

  1. Раздел отмонтирован (как в этой статье)

  2. Раздел смонтирован только для чтения

  3. Используются снапшоты (например, с помощью LVM)

Создайте точки монтирования для корневого и бэкап-разделов

sudo mkdir /mnt/{root,backup}

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

sudo mount /dev/sdXY /mnt/root

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

sudo dd if=/dev/zero of=/mnt/root/zero bs=4M

(Опция if задает входной файл, в данном случае это /dev/zero — псевдоустройство, генерирующее поток нулевых байтов; опция of — выходной файл, в которые записываются наши данные; bs задает размер блока, т. е. количество информации, считываемой/записываемой за один раз — в данном случае это 4МБ)

Под конец процесса dd завершится с ошибкой — это нормально, потому что генератор нулей у нас бесконечный, а место на диске не резиновое. Теперь удалите полученный файл

sudo rm -v /mnt/root/zero

Отмонтируйте корневой раздел

sudo umount /mnt/root

Все, можно приступать к процессу.

Монтируем тот раздел, куда будем сохранять бэкап

sudo mount /dev/sdXY /mnt/backup

Выполняем операцию, по созданию бэкапа

sudo dd if=/dev/sdXY bs=1M conv=noerror | gzip -c > /mnt/backup/root.dd.gz

sdXY — ваш корневой раздел. (в данном примере мы используем немного усложненный вариант — по мере копирования сразу же пропускаем данные через архиватор, в итоге получая уже сжатый образ. вместо gzip вы можете применить lzma или другой архиватор на ваш выбор. также можете поэкспериментировать с размером блока — данная опция влияет на производительность. с опцией conv=noerror процесс не будет прекращен при ошибке чтения/записи)

знающие люди, распишите кто-нибудь про оптимальный подбор bs (что конкретно оно дает),

[i|o]bs — размер блока при работе с потоком. ibs — размер блока при чтении, obs — размер блока при записи, bs — устанавливает оба значения сразу. Рекомендуется ставить кратным степени двойки, умноженной на размер кластера файловой системы (обычно это 4096 байт). Для современных жестких дисков 1Мб — это нормально, но значения, бОльшие 64кб, на мой взгляд, не ускоряют операций с диском. — AnrDaemon 2012/03/12 22:40

а заодно про conv=sync (нужен ли он)

НЕТ!!!!!!!!!!!!!!!!!! Это может привести к повреждению результирующего образа. man dd для разнообразия? Там даже пример есть. На русском, если у вас русские маны стоят. А вот iflag=direct (либо, при записи на блочное устройство — oflag) при работе с блочными устройствами использовать стОит, чтобы не получить на выходе файл «образа» раз в 5 бОльше исходного раздела. — AnrDaemon 2012/03/12 22:40

Понятно чем больше значение bs, тем бóльшими блоками данных будет оперировать dd и тем быстрее работа. Оптимальным для скорости считается размер блока, равным или чуть меньшим половины объёма кэша жесткого диска. Но нужно еще выяснить есть ли опасность задания слишком больших значений bs. Не известно есть ли возможность при большом параметре bs «зацепить» в образ одного раздела кусок следующего? И что случится при восстановлении раздела из такого образа? Не затронет ли dd соседний раздел?

Если не использовать копирование напрямую с диска (/dev/sdL), а работать с разделами (/dev/sdLN) или файлами (ранее созданными резервными копиями), и не использовать ненужных опций, типа conv=sync — никакой опасности нет. Чтение просто остановится в конце файла(устройства). — AnrDaemon 2012/03/12 22:41

Для слабых компьютеров имеет смысл применить вариант без архивации «на лету»

sudo dd if=/dev/sdXY of=/mnt/backup/root. dd bs=1M conv=noerror

При желании вы сможете позже сжать образ с помощью любого архиватора на другом компьютере

dd работает весьма «молчаливо», но есть хитрый способ узнать о ходе процесса. В соседней tty-консоли (обычно переключаются по Alt + F1Alt + F6) или новой вкладке графического терминала выполните
killall -s USR1 dd

Теперь вернитесь на вкладку/консоль с dd — там вы увидите информацию об объеме скопированных данных и скорости записи.

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

sudo watch -n2 killall -SIGUSR1 dd

в параметре -n22 означает выполнять команду каждые две секунды.

Повторите все этапы для отдельных разделов (/boot, /usr и пр.), если таковые имеются.

По завершении процесса отмонтируйте бэкап-раздел

sudo umount /mnt/backup

Восстановление раздела из образа

Внимание! Данный способ предполагает полный откат к состоянию на момент создания архива с заменой всех данных!

Смонтируйте раздел с образом-бэкапом

sudo mount /dev/sdXY /mnt

Собственно, можно приступать (дополнительных манипуляций вроде форматирования раздела в данном случае не требуется)

gzip -dc /mnt/root. dd.gz | sudo dd of=/dev/sdXY bs=1M conv=noerror

Или же для несжатого образа

sudo dd if=/mnt/root.dd of=/dev/sdXY bs=1M conv=noerror

(в обоих случаях sdXY — ваш корневой раздел)

Если вы хотите распаковать систему на новый жесткий диск, разметьте его с помощью fdisk/gparted/etc (чем умеете), создав корневой раздел того же размера (или больше, главное — не меньше). В случае, если новый раздел больше исходного, вам потребуется после распаковки расширить раздел с помощью parted/gparted, а также ФС на разделе (не все ФС поддерживают увеличние размера!)

Монтирование образа

С образом раздела, сделанным с помощью dd можно работать как с настоящим разделом, т.е. записывать на него файлы, удалять или изменять существующие и т.д. Для этого нужно лишь смонтировать образ как loop-устройство

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

bzip2 -dv /media/backup/sda5. dd.bz

Теперь можно смонтировать образ

sudo mount /media/backup/sda5.dd -o loop /mnt

(С опцией loop программа mount автоматически «подцепит» файл-образ на свободное loop-устройство, после чего смонтирует файловую систему)

Теперь вы можете работать с содержимым образа как с обычной файловой системой, все ваши изменения запишутся в образ. По завершении работы отмонтируйте образ как обычную ФС

sudo umount /mnt

dd — копирование всего жесткого диска

В данном случае мы снова воспользуемся dd, только на сей раз сохраним все содержимое жесткого диска — с таблицей разделов, самими разделами и всеми данными. Преимущество данного метода в том, что можно за один шаг сохранить все установленные на этом жестком диске системы без необходимости бэкапить каждый раздел отдельно. Кроме того, при таком бэкапе сохранятся все данные, относящиеся к загрузчику — таким образом, после восстановления из бэкапа вам не нужны будут дополнительные манипуляции, вы сможете сразу же загрузиться с этого жесткого диска.

Создание образа

В целом процедура аналогична описанной выше для бэкапа отдельных разделов. В данном случае также применим совет о прочистке свободного места «нулями» — при наличии свободного времени проделайте это со всеми разделами.

Перед началом операции убедитесь, что ни один из разделов данного жесткого диска не смонтирован. Сделать это можно запустив команду mount без параметров.

Выберите раздел, на котором вы собираетесь разместить файл-обарз. Разумеется, это должен быть раздел другого жесткого диска. Также убедитесь в наличии достаточного количества свободного места на этом разделе (например, с помощью утилиты df) — объем свободного места должен соответствовать объему копируемого жесткого диска (при сжатии образ получится меньше, но это зависит от типа хранимых данных).

Смонтируйте бэкап-раздел

sudo mount /dev/sdXY /mnt

Теперь можно приступать

sudo dd if=/dev/sdX bs=1M conv=noerror,sync | lzma -cv > /mnt/hdd. dd.lzma

(здесь «sdX» — диск, а не раздел! для копирования без сжатия команда аналогична приведенной выше для бэкапа раздела)

В зависимости от размера жесткого диска и производительности компьютера процедура может занять продолжительное время (до нескольких часов). По завершении отмонтируйте бэкап-раздел

sudo umount /mnt

Восстановление из образа

Внимание! Данный способ предполагает полный откат к состоянию на момент создания архива с заменой всех данных!

Перед началом работы убедитесь в надежности электропитания. Подключите сетевой адаптер, если у вас ноутбук, а также по возможности используйте ИБП или стабилизатор. При высокой интенсивности записи возрастает риск повреждения диска в случае сбоя питания

Убедитесь, что ни один раздел восстанавливаемого диска не используется. Смонтируйте бэкап-раздел

sudo mount /dev/sdXY /mnt

Можно приступать к процедуре

bzip2 -dc /mnt/hdd.dd.bz | sudo dd of=/dev/sdX bs=1M conv=sync,noerror

Или же для несжатого образа

sudo dd if=/mnt/hdd. dd.bz of=/dev/sdX bs=1M conv=sync,noerror

По завершении отмонтируйте бэкап-раздел

sudo umount /mnt
Если вы хотите распаковать образ на другой жесткий диск, он должен иметь размер не меньше оригинального. В случае, если новый диск большего объема, вы сможете расширить разделы либо создать новый раздел на свободном месте с помощью parted/fdisk/gparted/etc

Не используйте оба жестких диска («дубликат» и «оригинал») одновременно! При подключении обоих дисков в системе будет по два раздела на каждый UUID, что приведет к проблемам в работе или невозможности загрузки

Монтирование образа

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

Если образ сжатый — распакуйте его. Теперь «подцепите» образ на loop-устройство

sudo losetup -fv /media/backup/sda.dd

(С ключом -f программа автоматически найдет свободное loop-устройство, иначе необходимо явно указывать его)

losetup выведет на экран имя использованного устройства — если вы не работаете с другим файлами-образами (iso, шифрованными контейнерами и пр. ), это скорее всего будет /dev/loop0

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

sudo kpartx -av /dev/loop0

(Ключ -a — добавить разделы для заданного устройства; -v — информативный вывод)

Программа выведет имена созданных устройств для разделов диска: loop0p1 для первого раздела, loop0p2 — для второго, по аналогии с разделами обычного диска. Файлы устройств будут находиться в папке /dev/mapper

Теперь можно работать с разделами и ФС на них. Например, смонтировать бывший sda5 и записать на него файлы

sudo mount /dev/mapper/loop0p5 /mnt

По заверешнии отмонтируйте раздел

sudo umount /mnt

Удалите устройства-разделы с помощью kpartx

sudo kpartx -dv /dev/loop0

и освободите loop-устройство

sudo losetup -v -d /dev/loop0

Все! Изменения записались, а ваш образ снова стал обычным файлом


cp

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

С другой стороны, данный способ имеет ряд преимуществ:

  • универсальность — cp вы найдете в любой Linux-системе

  • низкая требовательность к ресурсам (вследствие отсутствия сжатия и простоты механизма)

  • простота дальнейшей работы с резервной копией (добавления/изменения/удаления файлов, извлечения нужных данных и пр.)

Создание копии

Создайте точки монтирования для корневого и бэкап-разделов

sudo mkdir /mnt/{root,backup}

Смонтируйте оба раздела

sudo mount /dev/sdXY -o ro /mnt/root
sudo mount /dev/sdXY /mnt/backup

Смонтируйте разделы для /usr, /boot и пр., если таковые имеются

sudo mount /dev/sdXY -o ro /mnt/root/home

Создайте на бэкап-разделе папку для своего бэкапа

sudo mkdir /mnt/backup/ubuntu

Можно начинать

sudo cp -av /mnt/root/* /mnt/backup/ubuntu

(ключ -a включает копирование ссылок «как есть», сохранение всех возможных атрибутов файлов и рекурсивный режим. ключ -v — вывод информации о происходящем)

По завершении процесса отмонтируйте все разделы

sudo umount /mnt/backup /mnt/root/{usr,home,}

В дальнейшем вы сможете заархивировать ваши данные любым удобным способом

Восстановление из копии

Внимание! Данный способ предполагает полный откат к состоянию на момент создания архива с заменой всех данных!

Создайте точки монтирования для разделов

sudo mkdir /mnt/{root,backup}

Смонтируйте бэкап-раздел

sudo mount /dev/sdXY -o ro /mnt/backup

Отформатируйте корневой раздел и разделы /usr, /boot и пр., если таковые имеются. (Про форматирование разделов с сохранением UUID см. в разделе про tar)

sudo mkfs.reiserfs -l "root" /dev/sdXY
sudo mkfs.ext2 -L "boot" /dev/sdXY
sudo mkfs.ext4 -L "home" /dev/sdXY

Смонтируйте свежесозданные ФС

sudo mount /dev/sdXY /mnt/root
sudo mount /dev/sdXY /mnt/root/usr
sudo mount /dev/sdXY /mnt/root/var

Процесс копирования происходит аналогично, только в обратном направлении

sudo cp /mnt/backup/ubuntu/* -av /mnt/root

По завершении копирования отредактируйте fstab, исправив UUID разделов

sudo nano /mnt/root/etc/fstab

Отмонтируйте разделы

sudo umount /mnt/backup /mnt/root/{usr,home,}

squashfs

squashfs — файловая система, создаваемая в виде файла-образа, использующая сжатие.

Она имеет целый ряд преимуществ, таких как:

  • возможность работы со сжатым образом напрямую, без предварительной распаковки

  • очень информативный вывод информации о ходе рабты

  • возможность монтирования образа как обычной ФС (через loop-устройство)
  • сохранение атрибутов файлов (прав доступа, владельцев, временных отметок, а с версии 4.1 также и xattr) по умолчанию
  • поддержка файлов больших размеров (максимальный размер файла, как и самой ФС — 264 байт)

  • оптимизаия под многоядерные процессоры

Из недостатков можно выделить следующее:

  • невозможность удаления файлов из образа или изменения существующих (можно только добавлять файлы в образ)

  • утилиты для работы с squashfs присутствуют не во всех дистрибутивах

Последний пункт означает, что для начала вам потребуется подобрать дистрибутив, содержащий пакет утилит для squashfs или же имеющий возможность установки из репозитория. В качестве примера можно предложить Parted Maigc, а вообще-то подойдет и liveCD Ubuntu, нужно будет просто установить пакет squashfs-tools

Создание образа

Cоздайте точки монтирования для корневого и бэкап-разделов

sudo mkdir /mnt/{root,backup}

Cмонтируйте оба раздела

sudo mount /dev/sdXY -o ro /mnt/root
sudo mount /dev/sdXY /mnt/backup

Cмонтируйте отдельные разделы для /boot, /usr и пр. (если имеются) в соответствующие папки

sudo mount /dev/sdXY -o ro /mnt/root/home

Все, можно приступать. Для создания образа используется утилита mksquashfs

sudo mksquashfs /mnt/root /mnt/backup/ubuntu-root.sqfs -no-duplicates

(С опцией -no-duplicates программа не будет исключать одинаковые по содержимому файлы. Многие программы используют пустые файлы для различных целей — без данной опции такие файлы не вошли бы в образ как дубликаты. Кроме того, можете поэкспериментировать с опцией -b — она задает объем данных, который будет считан/записан за один раз, до 1 МБ)

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

Готово! Осталость лишь отмонтировать разделы

sudo umount /mnt/backup /mnt/root{/usr,/var,/home,}
Помимо стандартного gzip-сжатия squashfs также поддерживает другие алгоритмы, список которых можно увидеть, выполнив mksquashfs --help. Имейте в виду, что поддержка lzma, lzo, xz может отсутствовать в более старых версиях squashfs-tools (идущих в составе старых LiveCD, например). Кроме того, для монтирования таких образов потребуется относительно свежее ядро с поддержкой squashfs соответствующих алгоритмов сжатия (например, см. CONFIG_SQUASHFS_XZ=y)

Кроме этого, можно создать образ и без сжатия — для этого используйте mksquashfs с опцией -noD

Восстановление из образа

Внимание! Данный способ предполагает полный откат к состоянию на момент создания архива с заменой всех данных!

Создайте точки монтирования для разделов

sudo mkdir /mnt/{root. backup}

Смонтируйте бэкап-раздел

sudo mount /dev/sdXY -o ro /mnt/backup

Отформатируйте корневой раздел и разделы /usr, /boot и пр., если таковые имеются. (Про форматирование разделов с сохранением UUID см. в разделе про tar)

sudo mkfs.reiserfs -l "root" /dev/sdXY
sudo mkfs.ext2 -L "boot" /dev/sdXY
sudo mkfs.ext4 -L "home" /dev/sdXY

Смонтируйте свежесозданные ФС

sudo mount /dev/sdXY /mnt/root
sudo mount /dev/sdXY /mnt/root/usr
sudo mount /dev/sdXY /mnt/root/var

Можно приступать! Для распаковки образа используется утилита unsquashfs

sudo unsquashfs -d /mnt/root -f /mnt/backup/ubuntu-root.sqfs

(Ключ -d задает путь для распаковки, с ключом -f программа будет использовать существующие папки вместо попыток создать новые)

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

По завершении отредактируйте fstab, заменив UUID разделов на новые (если вы форматировали разделы с теми же UUID, пропустите этот шаг)

sudo nano /mnt/root/etc/fstab

Сохраните файл и отмонтируйте все разделы

sudo umount /mnt/backup /mnt/root{/usr,/var,}

Монтирование образа

squashfs монтируется как любой другой образ — через loop-устройство. Поддержка squashfs ядром включена во множестве дистрибутивов, в том числе и в Ubuntu, так что достаточно будет просто воспользоваться командой mount с опцией loop

sudo mount /media/backup/ubuntu-root.sqfs -o ro,loop /mnt

(Опция ro не обязательна, т.к. записать туда все равно ничего не получится)

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

По завершении отмонтируйте образ как обычную ФС

sudo umount /mnt

rsync

Подобно cp, rsync работает с файлами, а не с блочными устройствами. Особенность rsync в том, что он не копирует файлы, которые уже есть в точке назначения. По умолчанию он проверяет размер и время изменения файлов, но можно проверять и хэш (обычно это делается, когда нужна повышенная безопасность).

Простое использование

Синтаксис rsync подобен cp:

rsync -a /mnt/root /mnt/backup

Параметра -a очень часто бывает достаточно, он обеспечивает самое нужное: рекурсивное копирование директорий, сохранение информации о владельце и группе и т.д. Для отображения подробной информации о копировании используется ключ -v, с ним будьте внимательны, в потоке данных можно пропустить сообщение об ошибке. Ключ -x гарантирует, что rsync не выйдет за пределы указанной файловой системы.

В документации к rsync описана масса параметров. Например, есть такие, которые позволяют выполнять копирование по SSH, или удаляют файл из точки назначения, если он был удалён в исходной директории.

«Умное» копирование позволяет сократить время простоя системы. Запускаем rsync прямо на работающей системе, данные в которой постоянно изменяется, rsync копирует данные, скажем, в течение нескольких часов. Затем переводим систему в read-only, снова запускаем rsync, теперь он копирует только те файлы, которые изменились за эти несколько часов. Через несколько минут мы имеем полную копию исходной ФС. Время простоя при этом сократилось на порядок по сравнению с оффлайн-копированием. А в некоторых случаях будет достаточно и одного онлайн-копирования без перевода системы в read-only.

Сохранение предыдущих копий

Строго говоря rsync не является средством резервного копирования – это средство синхронизации. Это важно при создании регулярных копий, поскольку, если какой либо важный файл был удалён в рабочем каталоге источнике – rsync удалит его и в резервной копии. Для повышения сохранности данных целесообразно сохранять старые резервные копии. Однако простое сохранение нескольких копий потребует много памяти на жёстком диске. Если копии имеют много одинаковых файлов, то это приводит к ненужной избыточности. Эту проблему позволяет решить использование жёстких ссылок.

Суть состоит в том, что в современных файловых системах (в том числе Ext4) адресация файла производится в два этапа: имя файла указывает на уникальный номер файла (индексный дескриптор или i-node), а этому номеру сопоставлены сами данные. Любое имя файла это, по факту, жёсткая ссылка на этот номер. Следовательно, файл (набор данных) может иметь несколько имён и быть разных каталогах, а это позволяет устранить избыточность в случае необходимости дублирования файлов (ведь жёсткая ссылка занимает мало памяти). Сами данные не удаляются до тех пор пока не будет запрошено удаление последней жёсткой ссылки.

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

Синхронизация содержимого каталога для текущей резервной копии с каталогом источником:

rsync \
	--archive \ # сохранять всю дополнительную информацию о файлах
	--delete --delete-excluded \ # удаление из резервной копии несуществующих в источнике и исключённых файлов
	--progress \ # выводить информацию о прогрессе передачи
	"/home/user/Files/" \ # каталог источник
	"/backup/latest/" \ # каталог для текущей резервной копии
	--exclude='/Public/' # исключение ненужных каталогов

В каталоге «/backup/latest/» будет создана копия всех необходимых файлов и каталогов из источника и удалено всё лишнее.

Создание ещё одной текущей резервной копии без избыточности:

cp \
	--archive \ # сохранять всю дополнительную информацию о файлах
	--link \ # использовать жёсткие ссылки для файлов - устранение избыточности
	"/backup/latest/" \ # источником является полученная выше текущая резервная копия
	"/backup/$(date +%Y-%m-%d_%H-%M-%S)/" # пункт назначения - каталог с датой в имени для удобства (см. man date)

При следующем создании резервной копии rsync удалит в каталоге «/backup/latest/» файлы которые были удалены/исключены/изменены в каталоге источнике (измененные файлы сначала удаляются, а затем записывается новая версия). Однако удалены будут лишь имена файлов (те же жёсткие ссылки), сами файлы (данные) сохранены, поскольку на них были созданы жёсткие ссылки в соседнем каталоге командой «cp».

Прочие инструменты

Существует масса приложений для создания бекапов в Linux. Можно воспользоваться поиском по слову «backup» в Центре приложений Ubuntu, чтобы найти доступные в Ubuntu программы для работы с резервными копиями.

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

Также существуют различные LiveCD-дистрибутивы, специально предназначенные для резервного копирования данных. вот наиболее популярные из них:

CLonezilla

Clonezilla — универсальное средство для бэкапа разделов или целых дисков с гибкой настройкой процесса. Данный дистрибутив поддерживает множество файловых систем, работает с LVM2 и RAID-массивами (только аппаратные) и имеет локализацию для многих языков, включая русский. Clonezilla имеет понятный «пошаговый» псевдографический интерфейс, а решить возникающие вопросы поможет в изобилии доступная документация

Кстати, в сети можно найти и русскоязычные руководства

Parted Magic

Parted Magic — еще один отличный, но платный дистрибутив, содержащий целую коллекцию средств для бэкапа и восстановления информации, работы с дисками и разделами, а также восстановления утерянных данных. Он поддерживает множество ФС, LVM2 и RAID (как аппаратный, так и программный) и содержит в себе таки средства как fsarchiver, GParted, вышеупомянтый Clonezilla, и все, что потребуется для описанных в этой статье способов. Кроме того, в состав дистрибутива входит веб-браузер и некоторое другое дополнительное ПО. Дистрибутив переведен на несколько языков, включая русский, и имеет полноценный графический интерфейс.

LParted

LParted — полнофункциональный LiveCD, предназначенный в первую очередь для работы с разделами жестких дисков (HDD), безвозвратного удаления или восстановления данных и тестирования оборудования. Основан LiveCD на Lubuntu Linux. LParted является функциональным аналогом Parted Magic.

сюда бы добавить про SystemRescueCD и прочие

Ещё немного о сохранении данных

  • Для важных данных можно сделать зеркальный раздел на двух дисках. Для этого совсем не обязательно иметь RAID-контроллер и диски одинакового размера — можно, например, собрать зеркало из 80-гигабайтного старого винта и 80-гигабайтного же раздела на новом. Зеркалирование можно реализовать с помощью LVM или программного RAID. Однако, такой способ бесполезен в случае, например, попадания на шину +5В напряжения ~220В или падения метеорита на системный блок компьютера.
  • Гики-айтишники, имеющие дома свой сервер, могут расширить идею зеркалирования и использовать DRBD. Тот же RAID-1, но жёсткие диски находятся в разных компьютерах, что повышает надёжность.
  • Современное удобное решение — бэкапить данные в «облака», например, с помощью Ubuntu One, Dropbox, http://www.adrive.com/ и других.
  • Ни зеркалирование, ни репликация на Ubuntu One не спасут от случайного нажатия Delete, поэтому в любом случае делайте «классические» бэкапы. И в один прекрасный ужасный день все ваши труды и старания будут вознаграждены.

Ссылки

Системы резервного копирования данных Linux, сравнение систем резервного копирования Linux

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

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

Бэкап желательно производить при помощи liveCD, usb-hdd, соседнего раздела или флешки. Если простой системы даже в течение нескольких минут критичен, есть возможность производить копирование непосредственно из-под системы.  При организации системы резервного копирования для Linux преимущество отдается утилитам tar и dd благодаря их предустановленности и легкости использования.

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

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

При создании архивов и копий системы используется многоопциональная команда tar. Она производит инкрементные бэкапы, извлекает из архива и добавляет в него любые файлы, присутствуя по всех системах Linux.

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

Каждому типу копирования присущи свои особенности.

  • Инкрементальное. Выполняется при помощи утилиты RSync. Она синхронизирует файлы и директории с минимизацией данных.
  • Дифференциальное. Использует утилиту rdiff-backup, перебирающую файлы для поиска разницы.
  • Полное. Для уровня файловой системы используется dump, имеющий более высокую скорость работы, нежели RSync. На уровне устройства применяются mdraid и DRBD либо связка LVM + dd.

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

  1. Restic. Кроссплатформенное ПО на языке Go умеет оперативно шифровать данные в режиме счетчика и аутентифицировать их. Является лучшим приложением для Linux, обеспечивающим защиту для всей копируемой информации.
  2. Borg. Бесплатное ПО имеет функцию дедупликации, обеспечивающую эффективное копирование частей в едином хранилище. Подходит для ежедневного применения, сохраняя только измененные файлы.
  3. Fwbackup. Бесплатное, кроссплатформенное, мультифункциональное ПО с понятным интерфейсом. Обладает гибкостью конфигурирования, возможностью удаленного копирования и резервирования файловой системы целиком.
  4. Duplicati. Бесплатный клиент для хранения зашифрованных, инкрементных, сжатых копий на удаленных серверах и в облаке. Имеет планировщик, позволяющий регулярно производить резервное копирование.
  5. Bacula. Инструмент для управления процессами копирования и восстановления, а также проверки данных с компьютеров разных типов на едином сервере, переданных по сети. Создает дубликаты резерва на различных носителях.
  6. Bareos. Эффективное межсетевое ПО, умеющее копировать, архивировать и восстанавливать структуру для всех ОС.
  7. Barman. Инструмент для администрирования на языке Python, подходит для экстренного подъема данных для серверов PostgreSQL. Позволяет создавать виртуальные копии в наиболее ценных средах для бизнеса.
  8. BackupPC. Корпоративная система с высокой производительностью, обслуживающая компьютеры всех типов, использующие Linux. Отличается простотой установки и легкостью настройки. Имеет функции дедупликации, различные параметры восстановления и гибкую конфигурацию.
  9. Bup. Эффективный инструмент, обеспечивающий инкрементное копирование и полную дедупликацию, в т.ч. образов виртуальных машин. Язык программирования Python в сочетании с элементами С дает легкое расширение и возможность поддержки.
  10. Lsyncd. Простое решение для «живых» зеркал, синхронизирующий даже незначительные перемены дерева локальных каталогов. Легкая установка, нетребовательность к новым устройствам и файловым системам без снижения производительности.
  11. Rclone. Программное обеспечение командной строки, синхронизирующее для разных клиентов облачного хранилища файлы и каталоги. Работает с большинством популярных облачных провайдеров. Имеет дополнительное криптошифрование и кэш.
  12. Veeam Agent. Бесплатное ПО для создания копий образов, а также отдельных файлов и томов диска. Возможности программы включают копирование – полное и инкрементальное, создание снимков операционных систем. Восстановление допускается как полное, так и выборочное.
  13. A В основе кажущегося простым модуля лежат средства экстренного восстановления, взятые у Bacula. Утилиты bls, bscan, bextract позволяют сисадмину восстановить систему даже в самых запущенных случаях.
  14. Kbackup. Инструмент для ОС Unix, используемый в резервном копировании Linux для создания и сжатия архивов.
  15. Amanda. ПО для Unix/Linux с собственными утилитами создания копий.

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

  • время дублирования обычных объемов данных;
  • время дублирования больших объемов данных;
  • средняя нагрузка на канал;
  • время для «поднятия» всей системы;
  • время для «поднятия» выборочных файлов;
  • необходимость функции консистентности, в частности БД;
  • требуемый расход памяти и наличие oom-killer вызовов.

Чтобы сделать backup Linux Server, необходимо:

  • создать бэкап;
  • отформатировать и разметить диск, создав файловую систему;
  • восстановить бэкап для проверки на другом железе;
  • создать MBR;
  • протестировать результат и устранить неполадки.

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

cp (1) — страница руководства Linux

cp (1) — страница руководства Linux
CP (1) Пользовательские команды CP (1)
 

НАЗВАНИЕ верхнее

       cp - копировать файлы и каталоги
 

ОБЗОР наверх

         cp  [ ОПЦИЯ ] ... [ -T ]  ИСТОЧНИК DEST 
         cp  [ ОПЦИЯ ] ...  ИСТОЧНИК  ...  СПРАВОЧНИК 
         cp  [ ВАРИАНТ ]. ..  -t КАТАЛОГ ИСТОЧНИК  ...
 

ОПИСАНИЕ вверху

       Скопируйте ИСТОЧНИК в DEST или несколько ИСТОЧНИКОВ в КАТАЛОГ.

       Обязательные аргументы для длинных опций являются обязательными для кратких
       варианты тоже.

         -a ,  - архив 
              то же, что и  -dR --preserve  =  все 

         - только атрибуты 
              не копируйте данные файла, только атрибуты

         - резервная копия  [=  CONTROL ]
              сделать резервную копию каждого существующего файла назначения

         -b  как  --backup , но не принимает аргумент

         - копия содержания 
              копировать содержимое специальных файлов при рекурсии

         -d  то же, что и  - без разыменования --preserve  =  ссылок 

         -f ,  - усилие 
              если существующий файл назначения не может быть открыт, удалите
              его и попробуйте еще раз (этот параметр игнорируется, когда  -n 
              вариант тоже используется)

         -i ,  - интерактивный 
              запрос перед перезаписью (отменяет предыдущую опцию  -n )

         -H  переход по символическим ссылкам командной строки в SOURCE

         -l ,  - ссылка 
              файлы жестких ссылок вместо копирования

         -L ,  - разыменование 
              всегда переходите по символическим ссылкам в ИСТОЧНИКЕ

         -n ,  - без затирания 
              не перезаписывать существующий файл (заменяет предыдущий  -i 
              вариант)

         -P ,  - без ссылки 
              никогда не переходите по символическим ссылкам в ИСТОЧНИКЕ

         -p  то же, что и  --preserve  =  mode , владение, временные метки

         --preserve  [=  ATTR_LIST ]
              сохранить указанные атрибуты (по умолчанию:
              режим, право собственности, временные метки), если возможно, дополнительные
              атрибуты: контекст, ссылки, xattr, все

         - без сохранения  =  ATTR_LIST 
              не сохранять указанные атрибуты

         - родители 
              использовать полное имя исходного файла в КАТАЛОГЕ

         -R ,  -r ,  - рекурсивный 
              копировать каталоги рекурсивно

         --reflink  [=  WHEN ]
              контрольный клон / копии CoW. См. ниже

         - пункт назначения 
              удалите каждый существующий файл назначения перед попыткой
              откройте его (в отличие от  - усилие )

         - разреженный  =  КОГДА 
              контролировать создание разреженных файлов. См. ниже

         - косые черты в конце полосы 
              удалите любые завершающие косые черты из каждого аргумента SOURCE

         -s ,  - символическая ссылка 
              делать символические ссылки вместо копирования

         -S ,  - суффикс  =  СУФФИКС 
              переопределить обычный суффикс резервной копии

         -t ,  --target-directory  =  DIRECTORY 
              скопируйте все аргументы ИСТОЧНИКА в КАТАЛОГ

         -T ,  --no-target-directory 
              рассматривать DEST как обычный файл

         -u ,  - обновление 
              копировать только в том случае, если файл SOURCE новее, чем
              файл назначения или когда файл назначения отсутствует

         -v ,  -verbose 
              объясните, что делается

         -x ,  - однофайловая система 
              оставаться в этой файловой системе

         -Z  установить для контекста безопасности SELinux целевого файла значение
              тип по умолчанию

         --context  [=  CTX ]
              например  -Z , или, если указан CTX, установите SELinux или
              Контекст безопасности SMACK для CTX

         --help  отобразить эту справку и выйти

         - версия 
              вывести информацию о версии и выйти

       По умолчанию разреженные файлы ИСТОЧНИКА обнаруживаются грубой эвристикой. 
       и соответствующий файл DEST также становится разреженным.Это
       поведение, выбранное с помощью  --sparse  =  auto . Укажите  --sparse  =  всегда 
       для создания разреженного файла DEST всякий раз, когда файл SOURCE содержит
       достаточно длинная последовательность нулевых байтов. Используйте  --sparse  =  и никогда не используйте  для
       запретить создание разреженных файлов.

       Если указано  --reflink  [=  всегда ], выполнить облегченную копию,
       где блоки данных копируются только при изменении.Если это
       невозможно копирование не выполняется, или если указано  --reflink  =  auto ,
       вернуться к стандартной копии. Используйте  --reflink  = , никогда не , чтобы гарантировать
       стандартная копия выполняется.

       Суффикс резервной копии - '~', если не установлен  --suffix  или
       SIMPLE_BACKUP_SUFFIX. Может быть выбран метод контроля версий
       через опцию  --backup  или через VERSION_CONTROL
       переменная окружения.  Вот значения:

       нет, выкл
              никогда не делайте резервные копии (даже если указано  --backup )

       пронумеровано, т
              делать пронумерованные резервные копии

       существующие, ноль
              пронумерованы, если существуют пронумерованные резервные копии, в противном случае просто

       просто, никогда
              всегда делайте простые резервные копии

       В особом случае cp создает резервную копию SOURCE, когда форсирование и
       указаны параметры резервного копирования, а имена ИСТОЧНИК и ИСПЫТАНИЕ совпадают.
       для существующего обычного файла.

АВТОР верхняя

       Написано Торбьорном Гранлундом, Дэвидом Маккензи и Джимом Майерингом.
 

СООБЩЕНИЕ ОБ ОШИБКАХ top

       Онлайн-справка GNU coreutils:
       
       Сообщайте о любых ошибках перевода на
       
 

COPYRIGHT top

       Авторские права © 2020 Free Software Foundation, Inc.  Лицензия GPLv3 +:
       GNU GPL версии 3 или более поздней .
       Это бесплатное программное обеспечение: вы можете изменять и распространять
       Это. НИКАКИХ ГАРАНТИЙ в той степени, в которой это разрешено законом.
 

СМОТРИТЕ ТАКЖЕ top

       Полная документация 
       или доступно локально через: info '(coreutils) cp invocation'
 

COLOPHON верх

       Эта страница является частью  coreutils  (базовый файл, оболочка и текст
       манипуляционные утилиты) проект.Информация о проекте
       можно найти по адресу ⟨http: //www.gnu.org/software/coreutils/. если ты
       есть отчет об ошибке для этой страницы руководства, см.
       ⟨Http: //www.gnu.org/software/coreutils/⟩. Эта страница была получена
       из архива coreutils-8.32.tar.xz, полученный из
       ⟨Http: //ftp.gnu.org/gnu/coreutils/⟩ от 2021-04-01. если ты
       обнаруживать любые проблемы с отображением в этой HTML-версии страницы,
       или вы считаете, что есть лучший или более современный источник для
       страницу, или у вас есть исправления или улучшения в
       информация в этом КОЛОФОНЕ (который является , а не  частью оригинала
       страница руководства), отправьте письмо по адресу man-pages @ man7. org


 

Страницы, которые относятся к этой странице: rsync (1), процессор (7), символическая ссылка (7), свопон (8)


копий файлов и каталогов на Linux.org

cp — копирование файлов и каталогов на Linux.org
 CP (1) Пользовательские команды CP (1)



НАЗВАНИЕ
       cp - копировать файлы и каталоги

ОБЗОР
       cp [OPTION] ... [-T] ИСТОЧНИК DEST
       cp [OPTION] ... ИСТОЧНИК ... КАТАЛОГ
       cp [ВАРИАНТ]... -t ИСТОЧНИК КАТАЛОГА ...

ОПИСАНИЕ
       Скопируйте ИСТОЧНИК в DEST или несколько ИСТОЧНИКОВ в КАТАЛОГ.

       Обязательные аргументы для длинных опций являются обязательными и для коротких опций.

       -a, --archive
              то же, что и -dR --preserve = all

       - только атрибуты
              не копируйте данные файла, только атрибуты

       --backup [= КОНТРОЛЬ]
              сделать резервную копию каждого существующего файла назначения

       -b как --backup, но не принимает аргумент

       --copy-content
              копировать содержимое специальных файлов при рекурсии

       -d то же, что и --no-dereference --preserve = links

       -f, --force
              если существующий целевой файл не может быть открыт, удалите его и повторите попытку (этот параметр игнорируется, если
              также используется опция -n)

       -i, --interactive
              запрашивать перед перезаписью (отменяет предыдущую опцию -n)

       -H переходить по символическим ссылкам командной строки в ИСТОЧНИКЕ

       -l, --ссылка
              файлы жестких ссылок вместо копирования

       -L, --dereference
              всегда переходите по символическим ссылкам в ИСТОЧНИКЕ

       -n, --no-clobber
              не перезаписывать существующий файл (отменяет предыдущую опцию -i)

       -P, --no-dereference
              никогда не переходите по символическим ссылкам в ИСТОЧНИКЕ

       -p то же, что и --preserve = режим, владение, отметки времени

       --preserve [= ATTR_LIST]
              сохранить указанные атрибуты (по умолчанию: режим, владение, временные метки), если возможно, дополнительные
              атрибуты: контекст, ссылки, xattr, все

              контрольный клон / копии CoW. См. ниже

       --remove-destination
              удалите каждый существующий целевой файл перед попыткой его открытия (в отличие от --force)

       --sparse = КОГДА
              контролировать создание разреженных файлов. См. ниже

       --strip-trailing-слеши
              удалите любые завершающие косые черты из каждого аргумента SOURCE

       -s, --symbolic-link
              делать символические ссылки вместо копирования

       -S, --suffix = СУФФИКС
              переопределить обычный суффикс резервной копии

       -t, --target-directory = КАТАЛОГ
              скопируйте все аргументы ИСТОЧНИКА в КАТАЛОГ

       -T, --no-целевой-каталог
              рассматривать DEST как обычный файл

       -u, --update
              копировать только в том случае, если файл SOURCE новее, чем файл назначения, или если файл назначения отсутствует
              ing

       -v, --verbose
              объясните, что делается

       -x, --one-файловая-система
              оставаться в этой файловой системе

       -Z установить для контекста безопасности SELinux целевого файла значение по умолчанию

       --context [= CTX]
              например -Z, или, если указан CTX, установите для контекста безопасности SELinux или SMACK значение CTX

       --help отобразить эту справку и выйти

       --версия
              вывести информацию о версии и выйти

       По умолчанию разреженные файлы ИСТОЧНИКА обнаруживаются грубой эвристикой, и создается соответствующий файл DEST. 
       разреженный.Это поведение, выбранное параметром --sparse = auto. Укажите --sparse = always, чтобы создать разреженный
       DEST-файл, если файл SOURCE содержит достаточно длинную последовательность нулевых байтов. Используйте --sparse = никогда
       запретить создание разреженных файлов.

       Если указан --reflink [= always], выполнять облегченное копирование, при котором блоки данных копируются только тогда, когда
       изменен. Если это невозможно, копирование не удается, или если указано --reflink = auto, вернуться к стандартному
       копировать.Суффикс резервной копии - '~', если не установлен с помощью --suffix или SIMPLE_BACKUP_SUFFIX. Метод контроля версий может быть
       выбирается с помощью параметра --backup или переменной среды VERSION_CONTROL. Вот значения:

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

       Онлайн-справка GNU coreutils:  Сообщайте об ошибках перевода cp на
       

АВТОР
       Написано Торбьорном Гранлундом, Дэвидом Маккензи и Джимом Майерингом.

АВТОРСКИЕ ПРАВА
       Авторские права © 2013 Free Software Foundation, Inc. Лицензия GPLv3 +: GNU GPL версии 3 или более поздней.
       .
       Это бесплатное программное обеспечение: вы можете изменять и распространять его. ОТСУТСТВИЕ ГАРАНТИИ в пределах разрешенной
       смягчается законом.

СМОТРИТЕ ТАКЖЕ
       Полная документация по cp поддерживается в виде руководства в формате Texinfo. Если программы info и cp работают правильно
       установлен на вашем сайте, команда

              info coreutils 'cp invocation'

       должен предоставить вам доступ к полному руководству.GNU coreutils 8.22, ноябрь 2016 г., CP (1)
 

Освоение команды копирования файла в Linux с примерами — подсказка для Linux

В любой операционной системе копирование файлов и каталогов — одно из наиболее распространенных действий пользователя. В командной строке Linux вы можете узнать, как правильно использовать команду cp для настройки и управления копированием файлов в соответствии с вашими потребностями. В этой статье мы объясним использование команды Linux cp, представив несколько полезных примеров.

Мы выполнили команды и примеры, упомянутые в этой статье, в системе Debian 10 Buster, но вы можете реплицировать их почти во всех дистрибутивах Linux.

Командная строка Linux, Терминал, легко доступна через Приложение. Лаунчер ищет следующим образом:

Пример 1: Копирование одного файла в целевой каталог

Самым простым способом использования команды cp является копирование одного исходного файла в целевой каталог. Вот синтаксис, который вы можете использовать для этого:

$ cp исходный файл / цель / каталог

Пример:

В этом примере я копирую файл с именем sample_file.txt в папку «Мои документы»:

Позже я проверил наличие файла в целевой папке с помощью команды ls.

Пример 2: Копирование нескольких файлов в целевой каталог

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

$ cp исходный файл1 исходный файл2 исходный файл3 … / цель / каталог

Пример:

В этом примере я копирую два образца файлов в папку «Документы» с помощью команды cp:

Позже я проверил наличие этих файлов в целевой папке с помощью команды ls.

Пример 3: Копирование файлов в интерактивном режиме

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

$ cp -i исходный файл / цель / каталог

Пример:

В этом примере файл с именем sample_file.txt уже существует в моей папке Documents, поэтому команда cp с флагом -i запрашивает меня, хочу ли я перезаписать его. Если я введу y в этом запросе, файл будет перезаписан.

Пример 4: Копирование файлов вместе с подробным выводом

Подробный вывод показывает, что делает команда. Это можно включить в команду cp с помощью ключа -v следующим образом:

$ cp -v исходный файл / цель / каталог

Пример:

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

Пример 5: Рекурсивное копирование каталога

Использование опции -r с командой cp рекурсивно копирует все файлы и папки в каталоге в другое место.Вот как вы можете использовать команду cp в этом сценарии:

$ cp -r каталог1 каталог2

Пример:

В следующем примере вся папка 1 со всеми ее файлами будет скопирована в папку 2.

Позже я проверил содержимое папки folder2 с помощью команды ls. Папка2 теперь содержит копию исходной папки.

Пример 6: Рекурсивное копирование каталога с сохранением архива

Используя переключатель -a с командой cp, вы можете делать две вещи одновременно:

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

Вот как вы можете использовать команду cp в этом сценарии:

$ cp -a каталог1 каталог2

Пример:

В следующем примере вся папка 1 целиком со всеми ее файлами будет скопирована в папку 2. Кроме того, файлы будут заархивированы как проверенные позже с помощью «ls -l command».

Пример 7: Копирование файла, если он новее, чем целевой файл

Иногда вы хотите скопировать файл в целевой каталог, только если он новее, чем целевой файл.Это можно сделать с помощью ключа -u с командой cp:

$ cp -u исходный файлИЛИ исходный каталог / цель / каталог

Пример:

В этом примере я отредактировал файл sample_file.txt из исходной папки. Эти файлы уже были скопированы в целевую папку до того, как я отредактировал файл. Это можно увидеть в следующем выводе команды «ls -l»:

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

Пример 8: Скопируйте файл, но не перезаписывайте его, если целевой файл уже существует

Вы можете указать команде cp не перезаписывать файл, если он уже существует в целевом расположении. Это можно сделать с помощью ключа -n следующим образом:

$ cp -n исходный файл / цель / каталог

Пример:

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

Во второй команде я добавил ключ -n. Он проигнорировал параметр -i, но не перезаписал уже существующий файл в целевом каталоге.

Пример 9: Создание символической ссылки на файл в целевом каталоге

С помощью переключателя -s в команде cp вы можете создать символическую ссылку на исходный файл в целевой папке вместо копирования исходного файла.

$ cp -s исходный файл / цель / каталог

Пример:

В следующем примере я создал символическую ссылку на файл sample_file. txt в целевой папке.

Позже я проверил наличие символической ссылки в целевой папке с помощью команды «ls -l».

Пример 10: Создание жесткой ссылки на файл в целевом каталоге

Когда вы создаете жесткую ссылку на файл в другой папке, файл не копируется в целевую папку; вместо этого создается жесткая ссылка на исходный файл. Номер inode исходного файла и скопированной жесткой ссылки одинаков. Вот как создать жесткую ссылку:

$ cp -l исходный файл / цель / каталог

Пример:

В этом примере я создал жесткую ссылку на исходный файл в папке «Документы».

С помощью команды «ls -il» я убедился, что и исходный файл, и жесткая ссылка имеют одинаковые номера inode.

Это все, что вам нужно было знать, чтобы освоить команду cp в Linux. Используя комбинацию этих переключателей, вы можете сделать копирование файлов более настраиваемым.

Linux cp Command — Linux Hint

«Cp» — это встроенный инструмент для всех платформ на базе UNIX, который используется для создания копий файла (ов) и каталога (ов). Как следует из названия инструмента, «cp» — это сокращение от «copy».

В системе существует множество опций копирования и вставки, не так ли? Практически все они выполняются с помощью «cp». Это очень упрощенный инструмент с упрощенным использованием. Однако есть несколько интересных предостережений, которые вам необходимо знать.

Без лишних слов, давайте проверим использование cp в Linux. Я продемонстрирую использование Manjaro Linux — потрясающего дистрибутива Linux, основанного на Arch Linux.Узнайте, как установить Manjaro Linux.

Для любого инструмента Linux я хотел бы начать свое руководство со следующего.

«который» показывает полный путь к исполняемым файлам, которые будут действовать, если команда будет запущена. В этом случае всякий раз, когда запускается «cp», он запускается из каталога «/ usr / bin».

Использование ЦП

«cp» использует следующую структуру команд для всех своих действий.

cp <источник> <назначение>

Например, давайте скопируем демонстрационные zip-файлы в каталог «DestinationFolder».

cp 1.zip DestinationFolder /

Чтобы проверить результат, проверьте целевой каталог.

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

Каталог копий

«cp» также может копировать каталоги.Однако действуют аналогичные правила копирования файлов. У пункта назначения должно быть уникальное имя. В противном случае данные будут перезаписаны.

cp -r Папка назначения / Копия папки назначения /

Флаг «-r» гарантирует, что если «cp» перейдет к любому каталогу, он также будет скопирован. В противном случае «cp» не примет копирование каталога.

Опять же, в такой ситуации применяется пара других правил. В приведенном выше примере целевой каталог «DestinationFolder_copy» не существует, поэтому его создал «cp». Однако, если источник содержит 2 или более каталогов одновременно, место назначения должно существовать. В противном случае копировать не удастся.

Посмотрите результат.

дерево DestinationFolder_copy2 /

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

Используя «cp», вы также можете скопировать сразу несколько файлов. Однако местом назначения должен быть каталог.

cp * .zip DestinationFolder

Подробный режим

Это очень полезно, если вы работаете с большим количеством файлов или файлы очень большие по размеру.

cp —verbose file.txt DestinationFolder /

Теперь я буду копировать несколько файлов в подробном режиме. Эта функция также может быть объединена с другими флагами «cp».

cp —verbose * DestinationFolder /

Интерактивное копирование

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

Например, «DestinationFolder» уже содержит все демонстрационные файлы. А теперь давайте попробуем скопировать их еще раз в интерактивном режиме.

cp —verbose -i * .zip DestinationFolder

Как показано в примере, есть 2 ответа: «y» для Да (начать перезапись) и «n» для Нет (пропустить файл).

Сохранение атрибутов файла

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

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

Сначала давайте проверим атрибут файла файла «1.zip».

Теперь скопируйте его в «DestinationFolder» и снова проверьте его атрибуты.

cp —verbose 1.zip DestinationFolder /

Проверьте атрибуты.

ls -l DestinationFolder / 1.zip

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

Чтобы атрибуты оставались неизменными, используйте флаг «-p».

cp -p —verbose 1.zip DestinationFolder / 1.zip

А теперь пора посмотреть демонстрацию с системным файлом.Кто-нибудь помнит Vim? Это один из лучших текстовых редакторов, которому должен научиться каждый. Несмотря на возраст, он может предложить практически все «современные» функции текстового редактора, благодаря великолепному vimrc. Узнайте больше о vimrc.

Давайте посмотрим на систему vimrc. Его оригинальные атрибуты следующие.

Скопируйте его в «DestinationFolder» и просмотрите изменения в атрибутах.

cp —verbose / etc / vimrc ~ / Рабочий стол / DestinationFolder /

Почти все изменилось, правда? Теперь используйте флаг «-p», чтобы сохранить каждый атрибут.На этот раз нам нужен доступ «sudo».

sudo cp —verbose -p / etc / vimrc ~ / Рабочий стол / DestinationFolder /

ls -l / etc / vimrc ~ / Рабочий стол / DestinationFolder / vimrc

Вуаля! Теперь все то же самое!

резервная копия «cp»

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

Например, давайте скопируем 1.zip в «DestinationFolder» с включенным резервным копированием.

cp -b 1.zip DestinationFolder /

Я разрешил «cp» перезаписать существующий файл 1.zip, но вместо этого он сделал резервную копию уже существующего файла с ~ в конце.

Force copy

В некоторых ситуациях «cp» может иметь проблемы с записью файла в место назначения из-за проблем с правами доступа. В таком случае следует использовать флаг «-f».Этот флаг заставляет «cp» сначала удалить целевой файл и скопировать содержимое из источника.

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

cp -f <источник> <назначение>

Заключительные мысли

Существует множество способов использования «cp». Это не единственное использование «cp». Если вы хотите получить более подробные сведения, не стесняйтесь заглядывать на справочную и информационную страницы!

Наслаждайтесь!

Команда cp в Linux / UNIX — JournalDev

В этом руководстве мы сосредоточимся на команде cp в системах Linux / Unix. Команда cp — сокращение от copy — это команда, используемая для копирования файлов и каталогов в Linux. Это команда, которая регулярно используется как новичками в Linux, так и опытными экспертами. Давайте углубимся и посмотрим, как используется эта команда.

Linux пример команды cp

Базовая структура команды cp следующая:

  $ cp [options] source dest  

Давайте рассмотрим некоторые примеры использования команды cp для копирования файлов и папок в Linux.

Копировать файл из текущего каталога в подкаталог

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

  $ cp file directory  

Пример

Например, чтобы скопировать файл файл1.txt в подкаталог с именем data выполните команду cp следующим образом. Позже используйте команду ls , чтобы проверить наличие файла в каталоге.

  $ cp file1.txt data  

Пример вывода

Скопировать файл из текущего каталога в абсолютный путь назначения

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

  $ cp file / path / to / directory  

Пример

  $ cp file1.txt / home / james /  

Вывод

Скопируйте файл из абсолютного исходного пути в абсолютный путь

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

  cp / path / to / source / file / path / to / destination / directory  

Example

  $ cp / home / james / file1.txt / opt / data  

Пример вывода

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

Команда Linux cp также позволяет копировать более одного файла за раз, используя синтаксис ниже.

  $ cp file1 file2 .... / path / to / directory  

Пример

  $ cp file1.txt file2.txt file3.txt / home / james /  

Пример вывода

Копировать файл с подробным выводом

Чтобы отобразить подробный вывод, используйте флаг -v , как показано.

  cp -v file1.txt file2.txt / home / james  

Пример вывода

Копирование файлов в интерактивном режиме

Для интерактивного копирования файлов, т.е. i , как показано.

  $ cp -i file1.txt / home / james  

Пример вывода

Копирование файлов, связанных с определенным расширением файла

Если вы хотите скопировать несколько файлов с одинаковым расширением, скажи .txt или .pdf следуйте примеру ниже.

  $ cp * .txt / home / james  

Linux Копировать каталог рекурсивно

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

  $ cp -R data / home / james  

Пример вывода

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

  $ cp -R data / * / home / james  

Пример вывода

Linux man cp

Мы можем запустить команду man cp , чтобы просмотреть документацию по команде cp. Это полезно для определения правильных параметров для использования с командой cp.

  man cp  

Пример вывода

Резюме

Команда Linux cp помогает нам легко копировать файлы и папки. Это одна из наиболее часто используемых команд.Страница руководства команды cp очень полезна при поиске подходящих опций для использования.

Копирование файлов в Linux | Opensource.com

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

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

Вот несколько способов скопировать файлы в Linux, BSD и Mac.

Копирование в графическом интерфейсе

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

Перетаскивание

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

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

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

Щелкните правой кнопкой мыши

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

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

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

Копирование из командной строки

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

cp

Очевидным терминальным эквивалентом копирования и вставки файла на рабочий стол является команда cp .Эта команда копирует файлы и каталоги и относительно проста. Он использует знакомый синтаксис source и target (строго в этом порядке), поэтому для копирования файла с именем example.txt в ваш каталог Documents :

 

$ cp example.txt ~ / Документы

Как и при перетаскивании файла в папку, это действие не заменяет Documents на example.txt . Вместо этого cp определяет, что Documents является папкой, и помещает копию примера .txt в него.

Вы также можете удобно (и эффективно) переименовывать файл по мере его копирования:

 

$ cp example.txt ~ / Documents / example_copy.txt

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

 

$ cp example.txt example.txt
cp: example.txt и example.txt - это один и тот же файл.
$ cp example.txt example_copy.txt

Чтобы скопировать каталог, вы должны использовать параметр -r , который означает — рекурсивный .Эта опция запускает cp для каталога с индексом , а затем для всех файлов в каталоге. Без параметра -r cp даже не распознает каталог как объект, который можно скопировать:

 

$ cp notes / notes-backup
cp: -r не указано; исключение каталога 'notes /'
$ cp -r notes / notes-backup

кот

Команда cat — одна из наиболее неправильно понимаемых команд, но только потому, что она демонстрирует исключительную гибкость системы POSIX.Помимо всего прочего, что cat делает (включая его предназначение для создания файлов con cat ), он также может копировать. Например, с cat вы можете создать две копии из одного файла с помощью всего одной команды. Вы не можете этого сделать с cp .

Значение использования cat для копирования файла заключается в том, как система интерпретирует действие. Когда вы используете cp для копирования файла, атрибуты файла копируются вместе с самим файлом.Это означает, что права доступа к файлу дубликата такие же, как и у оригинала:

 

$ ls -l -G -g
-rw-r - r--. 1 57368 25 июля 23:57 foo.jpg
$ cp foo.jpg bar.jpg
-rw-r - r--. 1 57368 29 июля 13:37 bar.jpg
-rw-r - r--. 1 57368 25 июля 23:57 foo.jpg

Использование cat для чтения содержимого файла в другой файл, однако, вызывает системный вызов для создания нового файла. Эти новые файлы подчиняются вашим настройкам по умолчанию umask .Чтобы узнать больше о umask , прочтите статью Алекса Хуареса, посвященную umask и разрешениям в целом.

Запустите umask , чтобы получить текущие настройки:


 

Этот параметр означает, что новым файлам, созданным в этом месте, предоставляется разрешение 664 ( rw-rw-r — ), поскольку первые цифры параметра umask не маскируются (а исполняемый бит не является бит по умолчанию для создания файла), а разрешение на запись блокируется последней цифрой.

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

 

$ cat foo.jpg> baz.jpg
$ ls -l -G -g
-rw-r - r--. 1 57368 29 июля 13:37 bar.jpg
-rw-rw-r--. 1 57368 29 июля 13:42 baz.jpg
-rw-r - r--. 1 57368 25 июля 23:57 foo.jpg

Как видите, cat создал новый файл с примененной системной маской по умолчанию.

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

rsync

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

 

Пример $ rsync.txt example_copy.txt
$ ls
example.txt example_copy.txt

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

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

Вы можете намеренно сымитировать эту ситуацию, создав две папки: одна называется example , а другая example_dupe :

 

Пример $ mkdir example_dupe

Создайте файл в первой папке:

 

$ echo "one"> example / foo.txt

Используйте rsync для синхронизации двух каталогов. Наиболее распространенными параметрами для этой операции являются -a (для архива , который обеспечивает сохранение символических ссылок и других специальных файлов) и -v (для подробный , обеспечивающий обратную связь с вами о ходе выполнения команды):

 

$ rsync -av example / example_dupe /

Каталоги теперь содержат ту же информацию:

 

$ cat example / foo.txt
один
$ cat example_dupe / foo.txt
один

Если файл, который вы рассматриваете как источник, расходится, то цель обновляется, чтобы соответствовать:

 

$ echo "two" >> example / foo.txt
$ rsync -av example / example_dupe /
$ cat example_dupe / foo.txt
one
two

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

 

$ echo "Вы больше никогда не увидите эту заметку"> example_dupe / foo.txt
$ rsync -av example / example_dupe /
$ cat example_dupe / foo.txt
один
два

Если нет изменений, то копирование не происходит.

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

Много способов скопировать

Существует много способов добиться того же результата в системе POSIX, поэтому кажется, что репутация гибкости с открытым исходным кодом хорошо заработана. Я пропустил полезный способ копирования данных? Делитесь своими копиями в комментариях.

Командная строка

— Как скопировать и вставить файл?

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

  • cd в папку, содержащую файлы, которые вы хотите скопировать или вырезать.
  • копировать файл1 файл2 папку1 папку2 или вырезать файл1 папку1
  • закрыть текущий терминал.
  • открыть другой терминал.
  • cd в папку, в которую вы хотите их вставить.
  • паста

Для этого убедитесь, что вы установили xclip и readlink . Затем добавьте эти функции в конец файла ~ / .bashrc :

  копия ()
{
    # если количество аргументов равно 0
    если [$ # -eq 0]
    тогда
        # если аргументов нет, сохранить текущую папку в буфере обмена
        pwd | xclip
    еще
        # сохранить номер аргумента / пути в `~ /.numToCopy` файл.
        эхо $ #> ~ / .numToCopy

        # сохраняем все пути в буфер обмена
        # источник: https://stackoverflow.com/a/5265775/9157799
        readlink -f "$ @" | xclip
    фи

    # отметьте, что вы хотите выполнить операцию копирования
    echo "копия"> ~ / .copyOrCut
}

резать()
{
    # используем предыдущую функцию, чтобы сохранить пути в буфер обмена
    скопировать "$ @"

    # но пометьте это как операцию вырезания
    echo "вырезать"> ~ / .copyOrCut
}

вставить()
{
    # для каждого пути
    для числа в {1 .. $ (cat ~ / .numToCopy)}
    делать
        # получить n-й путь
        pathToCopy = "$ (xclip -o | head - $ number | tail -1)"

        if [-d "$ pathToCopy"] # Если это каталог
        тогда
            cp -r "$ pathToCopy".еще
            cp "$ pathToCopy".
        фи

        # если это было помечено как операция вырезания
        если [$ (cat ~ / .copyOrCut) = "вырезать"]
        тогда
            # удалить исходный файл
            rm -rf "$ pathToCopy"
        фи
    Выполнено
}
  

Если вы не знаете, что такое файл .bashrc и никогда не изменяли его раньше, просто откройте проводник, перейдите на главную, нажмите Ctrl + H (показать скрытые файлы), найдите .bashrc и откройте его с помощью текстовый редактор, например gedit.

Примечание

Используя приведенный выше сценарий, вы отменяете функциональность этих команд по умолчанию:

  • копия — это зарезервированная команда PostgreSQL.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *