Linux не работает копирование

Обновлено: 02.07.2024

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

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

Итак, я вне догадок.

Как мне включить это? Затронутый компьютер запускает Ubuntu MATE 16.04. Терминал - мат-терминал, за исключением случаев, когда я вхожу в систему через ssh, и в этом случае это Bash. Caja - оконный менеджер.

4 ответа

Вы пытались использовать Ctrl + Ins и Shift + Ins? Я не уверен в копировании, но приклеивание работает отлично для меня. Попробуйте попробовать и измените свой вопрос, если он не работает.

Есть разные способы пометить / скопировать и вставить в linux. Один из них работает во всех эмуляторах терминалов, которые я знаю, в том числе xterm.

1. Метод маркировки и вставки linux - «средний щелчок»

Отметьте текст, который вы хотите вставить, нажав левую кнопку мыши и переместите мышь. (Вы можете дважды щелкнуть дважды, чтобы отметить слово или три раза, чтобы отметить линию.) Переместите курсор мыши туда, куда вы хотите вставить текст. Нажмите среднюю кнопку или колесо прокрутки (например, кнопку). Если нет средней кнопки, одновременно нажмите левую и правую кнопки. В окне терминала текст будет вставлен в позицию курсора. Это работает в том же окне терминала, в другом окне терминала, а также в других программах, например Firefox и gedit.

2. Метод, который работает во многих, но не во всех терминальных окнах

Отметьте текст, который вы хотите вставить, нажав левую кнопку мыши и переместите мышь , (Вы можете щелкнуть дважды дважды, чтобы отметить слово или три раза, чтобы отметить линию.)

Отметьте текст, который вы хотите вставить, нажав левую кнопку мыши и переместите мышь. (Вы можете щелкнуть дважды, чтобы отметить слово или три раза, чтобы отметить линию.)

Переместите курсор мыши туда, где вы хотите вставить текст.

Переместите курсор мыши где вы хотите вставить текст.

Используйте меню выпадающего или правого щелчка и выберите «Копировать» (в буфер обмена).

Отметьте текст, который вы хотите вставить, нажав левую кнопку мыши и переместите мышь. (Вы можете щелкнуть дважды, чтобы отметить слово или три раза, чтобы отметить линию.)

Нажмите shift + ctrl + c в «Copy» (в буфер обмена). Нажмите среднюю кнопку или колесико прокрутки (например, кнопку). Если нет средней кнопки, одновременно нажмите левую и правую кнопки. В окне терминала текст будет вставлен в позицию курсора. Это работает в том же окне терминала, в другом окне терминала, а также в других программах, например Firefox и gedit.

Предупреждение: эта статья относится ко всем CoW файловым системам в Linux, поддерживающим reflink при копировании. В данный момент это: BTRFS, XFS и OCFS2.

Прошу воздержаться от холиваров о том, какая ФС лучше: Btrfs, XFS, Reiser4, NILFS2, ZFS или какая-то неупомянутая.

Предыстория

  • 21 июля 2001 года — Namesys публикует анонс Reiser4. DARPA спонсирует разработку.
  • 20 ноября 2003 — Namesys публикует некоторые бенчмарки Reiser4.
  • 24 августа 2004 — Namesys делает публичный релиз Reiser4.
  • 14 сентября 2004 — анонс ZFS.
  • 16 ноября 2005 — ZFS включена в 27 сборку OpenSolaris.
  • сентябрь 2006 — Ханс Райзер арестован за убийство жены, Нины Райзер. Начало конца Namesys
  • 12 июня 2007 — анонс Btrfs Крисом Мейсоном (бывший сотрудник Namesys).
  • 22 сентября 2011 — В ZFSonLinux появился тикет с запросом на реализацию reflink.
  • 2012 — Btrfs признана стабильной Oracle Linux и SUSE Linux Enterprise
  • 21 января 2013 — метка экспериментальности была снята c Btrfs в исходных кодах ядра Linux.
  • май 2019 — Btrfs удалена из RHEL 8 (подозревается скрытые политические причины, так как Btrfs продвигается Oracle)

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

Когда в 2001 году анонсировалась Reiser4, я был вдохновлён и увлечён возможностями Copy-on-Write. Подумать только, мы можем легко и просто иметь сколько угодно копий разных проектов, а физически диск будет хранить только отличия между ними!

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

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

Однако у Ханса Райзера поехала крыша и он убил жену, а его детище (скорее всего по политическим причинам) не включили в ядро. Может всё-таки история зависит от конкретной личности?

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

После этого я стал ждать Btrfs. И только через 6 лет после анонса она была признана разработчиками ядра Linux стабильной.

После этого я не торопился использовать Cow-системы, так как сама парадигма Copy-on-Write предполагает повышенную фрагментацию, потому что изменения данных каждый раз записываются в новое место.

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

Поэтому лично я откладывал внедрение btrfs на своих машинах, пока они не перешли на SSD.

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

Но производительность фрагментированного SSD падает не так драматически, как у HDD.

Итак, что со скоростью копирования при CoW?

И вот, наконец, настал тот час. Когда SSD стали достаточно надёжны, я стал вовсю использовать CoW-файловые системы. А конкретнее — Btrfs и Nilfs2.

Осваивая захватывающие возможности снимков (снепшотов), на время я забыл о моих ожиданиях из 2000-х годов о сверхбыстром копировании файлов.

Через некоторое время я решил провести тесты. И к моему великому разочарованию не увидел никакого прироста скорости от CoW при копировании. Вот результат на SATA SSD:


Оказалось, что для использования CoW нужно указывать специальный ключ.


Только в этом случае мы видим 5-кратное преимущество. К слову говоря, размер преимущества неограниченно растёт при увеличении длины файлов. В папке /usr , которую я копировал, в основном мелкие файлы.

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

В данном случае я тестировал копирование на Btrfs-разделе. Но подобный результат вы получите и с любой другой CoW-файловой системой, поддерживающей reflink.

В чём проблема, Билли?

Проблема в cp. По умолчанию она не использует CoW при копировании. Хотя может.

Вы можете сказать — я не использую cp. Однако под капотом у Linux он используется практически везде. Многие программы, когда им нужно что-то скопировать, используют cp , а не свои «велосипеды».

Почему разработчиками coreutils было принято столь неоднозначное решение, которое перечеркнуло половину преимуществ CoW файловых систем?

Оказывается, так решил Pádraig Brady, ответственный за развитие GNU coreutils.

  1. По умолчанию cp не использует CoW, так как кто-то может использовать копирование для того, чтобы повысить вероятность сохранения файла на диске после разрушения файловой системы.
  2. С точки зрения производительности, если есть некий чувствительный к задержкам процесс, вы можете захотеть, чтобы основная запись была сделана именно во время копирования, так если это произойдёт потом, то может возникнуть лаг при перепозиционировании головок жёсткого диска. Обратите внимание, начиная с версии 8.24 coreutils, mv по умолчанию использует опцию reflink.
It's not the default since for robustness reasons one may want a copy to take place to protect against data corruption. Also for performance reasons you may want the writes to happen at copy time rather than some latency sensitive process working on a CoW file and being delayed by the writes possibly to a different part of a mechanical disk. Note that from coreutils v8.24 mv will reflink by default, since it doesn't have the above constraints.

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

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

Разбор аргументов Pádraig

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

Второй аргумент. Если почитать дальнейшие комментарии насчёт лагов от Pádraig, то обнаружится, что он имел в виду ситуации с базами данных, когда при записи в существующий файл может возникнуть задержка из-за того, что файловая система будет искать свободное место. Но в случае CoW-файловой системы всегда будут искаться новые сектора для записи в силу природы CoW, как заметил Jan Kanis. Поэтому, по моему мнению, второй аргумент несостоятелен.

Однако на CoW системах действительно можно получить задержку или даже ошибку “Закончилось пространство” при записи в файл базы данных. Для избежания этого нужно для базы изначально создавать пустой каталог с отключенным CoW.

Отключается CoW на каталоге/файле так:


Есть ещё опция монтирования nodatacow. Она будет применена ко всем новосоздаваемым файлам.

Как всё-таки быть, если мы хотим по умолчанию использовать CoW при копировании?

    Радикальный путь — это патчить coreutils. Возможно, создать свой пакет в своём частном репозитории.

В папке /etc/profile.d создаём файлик cp_reflink.sh c содержимым:

Дистрибутивы Linux c поддержкой reflink

Файловые менеджеры и reflink

Состояние на 31 октября 2019 года:

  • Midnight Commander — поддерживает.
  • Krusader — не поддерживает.
  • Dolphin — не поддерживает.
  • Nautilus — не поддерживает.
  • Nemo — поддерживает.
  • Dolphin и Nautilus уже поддерживают копирование с reflink. Точные минимальные версии с поддержкой reflink автору не известны.

Языки программирования, системные вызовы и reflink

В большинстве языков программирования поддержка reflink отсутствует.
На Си многие программисты до сих пор копируют с помощью циклов и буферов.

Системный вызов sendfile не использует reflink.
cp использует системный вызов ioctl с флагом FICLONE.

Я думаю, если нужно в коде что-то скопировать, то желательно делать это как делает cp или просто вызвать cp --reflink=auto .

Выводы

С наступлением эпохи повсеместной виртуализации и SSD стало очень актуально использовать CoW-файловые системы. Они удобны для создания снимков, быстрого копирования. Фактически, при использовании CoW при копировании мы автоматически делаем дедупликацию данных.

Сейчас только 3 файловых системы поддерживают этот тип копирования: BTRFS, XFS и OCFS2.

Я искренне надеюсь, что поддержку reflink допилят в ZFS и NILFS2, так как по внутренним механизмам они и так поддерживают CoW.

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

С момента анонса Reiser4 прошло уже 18 лет, однако до сих пор лёгкое CoW копирование не вошло в нашу жизнь повсеместно.

P.S. Docker и CoW

А вы знаете что Docker поддерживает btrfs для своего хранилища? Эту опцию нужно включать. Она не выбрана по умолчанию.

CoW файловая система в теории является идеальным дополнением к лёгкой виртуализации, когда разные виртуальные машины используют одно и то же ядро.

На мой взгляд, гораздо более органично, чем OverlayFS и Aufs, которые представляют из себя технологические костыли для имитации CoW.

Для использования Btrfs в Docker нужно:

  1. В свежей (без образов и виртуальных машин) инсталляции Docker примонтировать отдельный том Btrfs к /var/lib/docker
  2. Добавить опции в конфигурационный файл запуска Docker


А вот полная инструкция для всех дистрибутивов.

Дополнения из комментариев

XFS и CoW

constb (источник): На XFS тоже не всегда поддерживается CoW. Нужно создавать файловую систему c mkfs.xfs -m reflink=1 .
Уже на созданной ФС «включить» поддержку CoW нельзя. плюс, на ядрах до 4.11 включение этой опции вызывает красные варнинги в dmesg о том что фича – экспериментальная.

MacOS и CoW

MMik (источник): В OS X подобная опция команды cp – это -c .

Она включает использование атомарного системного вызова clonefile() , который создаёт запись в файловой системе о новом файле, в котором ссылки на блоки данных идентичны оригиналу. Копируются атрибуты и расширенные атрибуты файла, записи списков контроля доступа (ACL), за исключением информации о владельце файла и со сбросом setuid/setgid битов. Работает в пределах одной файловой системы, требует поддержки файловой системой (атрибут ATTR_VOL_CAPABILITIES, флаг VOL_CAP_INT_CLONE).

Поддерживается начиная с OS X 10.12 (Sierra) и только в файловой системе APFS.

Благодарности:

  • Компании RUVDS за поддержку и возможность публикации в своем блоге на Хабре.
  • За изображение TripletConcept.


Вы можете поэкспериментировать с CoW-файловыми системами, заказав виртуальную машину у RUVDS по купону ниже.

Copy paste Linux

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

Буфер копирования

Стандартно для копирования и вставки объектов в Linux используются сочетания клавиш Ctrl+C и Ctrl+V. При копировании текст (или любой другой объект) в таком случае попадает в обычный буфер копирования. Затем вы можете вставить этот текст в другом месте.

Буфер выбора (первичный буфер)

В Linux существует еще буфер выбора или первичный буфер. Текст, который вы выделяете в любой программе, автоматически попадает в буфер обмена! Это удобно, выделил текст, открыл другое окно и вставил этот кусок текста. Есть некоторые исключения, но они незначительны. Например, у меня в Ubuntu это не работает, если программа использует JVM (Java Virtual Machine).

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

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

В терминале для копирования и вставки не работают стандартные сочетания Ctrl+V, Ctrl+C. Это связано с тем, что исторически Ctrl+C это сочетание клавиш для прерывания текущего процесса. Поэтому, для копирования и вставки при работе в терминале используются сочетания Ctrl+Insert и Shift+Insert соответственно. В Gnome терминале и, наверное, во многих других также работают сочетания Shift+Ctrl+C и Shift+Ctrl+V. Они же указаны в главном меню программы в разделе Правка.

Также в терминале работают сочетания клавиш Ctrl+U, чтобы вырезать текст; и Ctrl+Y для вставки текста. Сочетание Ctrl+U работает особенным образом — в буфер копируется вся текущая строка, введенная в терминале, независимо от того, выбрали вы какой-нибудь текст мышкой или нет, а сама строка пропадает с экрана.

Favorite

Добавить в избранное

Главное меню » Linux » Как скопировать и вставить в терминал Linux и Ubuntu

Как скопировать и вставить в терминал Linux и Ubuntu

К огда вы переключаетесь на Linux с Microsoft Windows, особенно если вы программист, есть вероятность, что у вас могут возникнуть проблемы с копированием и вставкой команд или строк в окне терминала Linux.

Даже когда vsмы портировали на Ubuntu из Windows десять лет назад, мы изо всех сил пытались скопировать и вставить строки в терминале Linux. В то время мы думали, что мы единственные пользователи, которому трудно скопировать и вставить. Однако, поискав в Интернете, мы поняли, что это глобальная проблема.

Причина в том, что сочетание клавиш и клавиши мыши для копирования и вставки строк в окнах терминала Linux не такие, как те, которые мы используем в Windows.

Привязки клавиш для операций копирования и вставки зависят от конкретного эмулятора терминала, который вы используете. В Linux по умолчанию привязка клавиш CTRL + C используется для отправки сигнала прерывания команде, выполняющейся на переднем плане. Следовательно, терминалы Linux не используют стандартные CTRL + C и CTRL + V для операций копирования и вставки.

Использование сочетания клавиш

В Ubuntu и других дистрибутивах Linux вы должны использовать комбинацию клавиш CTRL + SHIFT + C для копирования текста из терминала или текстового редактора.

Чтобы скопировать текст или строку кода из браузера, вы можете использовать общую комбинацию CTRL + C или CTRL + SHIFT + C. Затем, чтобы вставить эту строку кода в терминал, вам нужно использовать клавиши CTRL + SHIFT + V.

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

Использование контекстного меню, вызываемого правой кнопкой мыши

Чтобы скопировать текст или строку в терминале, выберите текст, затем щелкните правой кнопкой мыши и выберите copy. Теперь, чтобы вставить выделенный текст, щелкните правой кнопкой мыши и выберите paste в контекстном меню.

Использование средней клавиши мыши

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

Вот как вы можете копировать и вставлять текст в терминал Linux. Это просто, но сбивает с толку новых пользователей Linux, особенно тех, кто переходит на Linux с Windows или Mac. Упомянутые методы могут работать или не работать в различных дистрибутивах Linux по причине, упомянутой ранее в этой статье.

Заключение

Команды копирования и вставки в терминалах Linux и Ubuntu отличаются от Microsoft Windows и Mac. Есть три метода копирования и вставки в терминале Linux и Ubuntu. Эти методы включают использование определенных сочетаний клавиш, использование контекстного меню мыши и использование средней клавиши мыши. Когда вы реализуете предоставленные методы, вы можете успешно скопировать и вставить терминалы Linux и Ubuntu. Надеюсь, эта статья помогла вам эффективно использовать команду копирования и вставки.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: