Как скопировать текст Ctrl + C в gnome-терминал?

То, что вы сделали, можно назвать вилкой. Бомба с вилкой - это сценарий оболочки или одна команда оболочки, которая вызывает себя рекурсивно и, таким образом, заполняет все системные ресурсы. Это ошибка DoS.

Каждый раз, когда выполняется ./kill-me-please.sh, создается новый процесс с использованием некоторых циклов памяти и тактовых импульсов. Ваша программа способна создавать бесконечно много вилок, но из-за того, что системные ресурсы конечны, в какой-то момент времени у вас закончится нехватка ресурсов. Существует много видов вилочных бомб, которые используют эту возможность. Другой известный пример:

$ :(){ :|:& };:

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

Потери этих вилочных бомб сложны, так как все ресурсы могут быть использованы вилкой, пока вы не найдете и не примените необходимую процедуру. Некоторые способы восстановления объясняются и обсуждаются в fork bomb .

Чтобы предотвратить это, в Linux и, возможно, в других Unices, можно использовать утилиту DoS для ограничьте количество процессов, которые может создать пользователь. ulimit -Hu 50 ограничит пользователя до 50 процессов (так что пользователь не сможет его изменить). Также во многих системах есть файлы конфигурации, которые можно использовать для установки таких ограничений.

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

1
задан 21 July 2014 в 07:00

9 ответов

Ctrl + C уже назначена другой команде, которая прерывает программу, запущенную в терминале. Например, ping. www.google.com начнет пинговать Google, пока вы не скажете, чтобы он остановился. Как вы это делаете, нажав Ctrl + C

Таким образом, они не могли просто изменить назначение этой комбинации.

Выделите текст, который вы хотите скопировать, нажмите Ctrl + Shift + C и копируется в буфер обмена. Ctrl + Ctrl + V и вы вставляете его.

Дайте мне знать, если это не сработает ...

38
ответ дан 25 May 2018 в 19:45
  • 1
    Вместо того, чтобы говорить, что эти привязки клавиш имеют другие специфические значения в терминале, вероятно, правильнее сказать, что различные консольные приложения ожидают, что смогут их использовать, поэтому, если эмулятор терминала не прошел их, это может сделать эти приложения непригодными для использования , – James Henstridge 26 September 2011 в 05:28
  • 2
    OS X немного умнее: когда выбран какой-либо текст, он интерпретирует Ctrl+C как копию, и когда не выбран текст, он интерпретирует его как прерывание. – Behrang 10 February 2014 в 08:44
  • 3
    На самом деле OS X не умнее. Скопированная комбинация клавиш - Cmd-C, а не Ctrl-C. – Andrei Maxim 25 June 2016 в 18:21

Помимо того, что сказал @Dan, есть еще один вариант для копирования текста в Linux, который я нахожу намного быстрее и проще в использовании, так как нет необходимости в swich от мыши (которую вы используете, чтобы сделать выбор ) на клавиатуру:

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

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

Это работает во всех приложениях, вставить текст с веб-страницы на терминал и т. д.

Буфер обмена буфера, используемый для скопирования в середине клика, отличается от буфера обмена, который используется для Ctrl-C / Ctrl-V, что позволяет иметь два разных биты текста, скопированные в одно и то же время.

27
ответ дан 25 May 2018 в 19:45

Как уже отмечалось, Ctrl + C обычно используется для прерывания программы. Но вместо того, чтобы использовать Ctrl + Shift + C для копирования, который я делаю гораздо чаще, чем прерывание процесса, я изменяю параметр, чтобы Ctrl + C копировал и Ctrl + Shift + C для прерывания. Вы можете сделать это в терминале GNOME, перейдя в «Редактировать» -> «Ярлыки клавиш ...» и сопоставьте действие «Копировать» с Ctrl + C и «Вставить» в Ctrl + V.

20
ответ дан 25 May 2018 в 19:45
  • 1
    Но как мне затем сопоставить Ctrl + Shift + C, чтобы прервать процесс? – kramer65 3 April 2014 в 02:09
  • 2
    Это произошло автоматически для меня. Все, что я сделал, было скопировано в Ctrl + C и после сохранения Ctrl + Shift + C стало прерывать. – mangoDrunk 3 April 2014 в 23:25
  • 3
    @mangoDrunk причина в том, что удерживание Shift + Ctrl + <key> по существу печатает тот же символ, что и Ctrl + <key>. Вы можете проверить с помощью read – Pithikos 9 August 2017 в 10:31
  • 4
    Я предлагаю сделать это, потому что я копирую вставку LOT больше, чем прерываю процесс, и легко запомнить ctrl + shift + C как прерывание, а не изменять мою привычку копировать, что везде и везде. – flyingdrifter 24 January 2018 в 22:37

Чтобы сделать вырезание и вставку (Ctrl + V, Ctrl + C) работать в консоли или терминале, поместите следующий код в терминал, чтобы автоматически изменить привязки клавиш:

gconftool-2 -t str -s /apps/gnome-terminal/keybindings/copy "<Control>c"

gconftool-2 -t str -s /apps/gnome-terminal/keybindings/paste "<Control>v"
2
ответ дан 25 May 2018 в 19:45

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

Невозможно изменить поведение сочетаний клавиш в зависимости от того, есть ли выбор текста или нет, и я бы не переназначил CT-C терминала.

НО, вы можете легко привыкнуть к

Ctrl + Ins для копирования Shift + Ins для вставки

Это работает практически везде (кроме Наутилуса, вздоха) и почти никогда не переписывается ни с чем!

1
ответ дан 25 May 2018 в 19:45

Кто-то хотел, чтобы вы могли использовать:

> stty intr ^K         # free Ctrl+C for copy use Ctrl+K instead
> stty lnext ^-        # free Ctrl+V for paste use ^- instead
> stty -g
> stty -g > ~/.stty    # store the settings in home directory

Добавить следующее в ~/.bashrc

case $- in
 *i*)
   stty `cat ~/.stty`     #  reload the stored stty settings
   bind -u quoted-insert  #  unbind the quoted-insert function of bash - free Ctrl+V for paste
esac

И затем редактор gconf или somesuch, чтобы изменить привязки терминалов к CTRL + C для копирования и CTRL + V для вставки.

1
ответ дан 25 May 2018 в 19:45

в Lxterminal (терминал по умолчанию в Lxde), вы можете полностью настроить ярлыки:

Lxterminal

1
ответ дан 25 May 2018 в 19:45

Я думаю, что вы не можете, потому что в терминале gnome Ctrl + C, Ctrl + X, Ctrl + V не работают. Для резки, копирования и вставки вы должны выделить текст, щелкнуть правой кнопкой мыши и выбрать действие, которое вы хотите сделать

0
ответ дан 25 May 2018 в 19:45
  • 1
    вы все равно можете использовать короткие сокращения для вырезания в терминале, это ctrl + shift + c (copy) и ctrl + shift + v (paste) и ctrl + shift + x. – Rens 19 July 2011 в 12:16

Как уже было сказано, Ctrl-C не будет работать из-за использования прерываний, но я просто понял способ, который работал для меня. Моя цель состояла в том, чтобы иметь только два ключа, а не три, и предпочтительно то, к чему я привык, и не в слишком неудобном месте на клавиатуре. На клавиатуре, которую у меня есть на моем ящике Linux, есть клавиша «Windows», в том же ключе, что и клавиша Command на Mac. Поэтому я просто перешел в «Редактировать»> «Ярлыки клавиш», когда я изменил ярлыки, чтобы использовать этот ключ, он говорит Super + C и Super + V. Я иногда использую Mac тоже, так что это было легко привыкнуть.

0
ответ дан 25 May 2018 в 19:45

Другие вопросы по тегам:

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