Что означает `!!` в `sudo !!`?

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

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

Альтернативные методы, начиная от простой сети Cat 5, большой объем хранения жестких дисков USB, Bluetooth и, конечно же, полностью сетевые группы машин, подключенных через маршрутизатор, настолько доступны, что, похоже, нет большой заинтересованности в этой технологии, однако дальнейшие исследования ( т.е. Google) дает следующую информацию:

Настройка выглядит так, как называется «USBnet», которая соединяет два компьютера вместе, как если бы они подключались через Ethernet. Единственное преимущество для пользователей Ubuntu, которое я вижу здесь, - это иметь компьютер со сломанным портом или картой RJ45 ethernet или если у вас есть устройство, у которого его нет, но есть порт USB, который вы можете использовать.

Устройства, которые могут быть совместимы:

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

Далее приведены некоторые инструкции о том, как это было сделано на Intrepid Ibis. Цитата из сообщения 2:

#On my primary machine with Intrepid, I configured USB0 using
ifconfig usb0 192.168.1.1

#On the other machine also with Intrepid, I configured usb0 using
ifconfig usb0 192.168.1.2

Затем в Network Manager:

Выберите редактирование соединений> Авто usb0 и установите ручной IP-адрес на обоих компьютерах, используя тот же IP-адрес, что и шлюз по умолчанию также.

Далее передаются следующие инструкции для передачи:

Перенос файлов

Убедитесь, что брандмауэр выключен, и вы можете пинговать друг друга. Если вы может ping, настроить ftp-сервер wu-ftp-демоном на любом из них или на обеих машинах. Установите FTP-клиент Filezilla на обоих компьютерах. Это! (Действительно) запустите wu-ftp daemon, используя «sudo wu-ftp», на одной машине используйте filezilla на другом компьютере для быстрого соединения. Используйте идентификатор пользователя и пароль хост-компьютера, к которому вы подключаетесь. просмотр и amp; Передайте файлы

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

Предупреждение другим

Не искушайте, прочитав это, чтобы подключить обычный мужской кабель USB на два компьютера, чтобы попробовать его. Такой кабель будет прикреплять каждый вывод TX и RX на компьютерах в неправильном порядке (так что это не сработает) и, что более важно, свяжет +5 и основания блоков питания вместе. Это может привести к короткому замыканию двух блоков питания таким образом, чтобы они могли повредить их или ваш компьютер, а также вызвать другие проблемы, включая включение их в огонь и сжигание вашего дома. Окна

1
задан 11 February 2014 в 17:23

6 ответов

sudo bang bang - очень полезная команда при работе в интерфейсе командной строки.

Некоторые дистрибутивы Linux вы используете для входа в систему как пользователь, а не для администратора.

Итак, чтобы сделать что-то административное, вам нужно выполнить команду с помощью sudo (Super-User DO), которая сообщает системе «вы сделаете это, потому что я так сказал». / bang-bang (! = bang) - это в основном ярлык, который вы можете использовать для повторения предыдущей команды.

Итак, типичный сценарий заключается в том, что вы пытаетесь выполнить команду, и она отталкивает сообщение о том, что вы должны быть администратором для этого. Таким образом, вы можете ввести sudo для запуска этой команды в качестве суперпользователя / администратора или вы можете ввести sudo !!, где !! сообщает системе использовать предыдущую команду, которая была предпринята. UfH

] Есть много других команд. Для получения их списка и объяснений того, что они собой представляют, ознакомьтесь с командами Linux Bang, см. Также истории и команды Bash

64
ответ дан 24 May 2018 в 15:08
  • 1
    Это также очень опасная команда, если вы не на 100% уверены в своей предыдущей команде. Почти всегда безопаснее просто нажать стрелку вверх, затем домашний ключ, затем введите sudo и посмотрите на командную строку. – Shadur 18 November 2013 в 22:06
  • 2
    @Shadur Обычно ваша предыдущая команда была около 1 секунды назад. Обычным вариантом использования является тот, который описан в ответе: вы забудете sudo что-то и получите сообщение об ошибке, так что вы сразу захотите sudo его – Michael Mrozek 18 November 2013 в 22:21
  • 3
    @Braiam: CLI - это аббревиатура. Нарушение правил сообщества! Атака! Повторное редактирование! – Indian 18 November 2013 в 23:52
  • 4
    sudo не означает, что «суперпользователь делает», он выполняет do команду , как если бы я сделал su (su означает переключатель пользователь [а не суперпользователь]); то есть вы можете использовать команды sudo как любой пользователь, а не только root (-u); то же самое происходит с su [user] [-c command] – ssice 19 November 2013 в 01:11
  • 5
    @Mitch кроме su не выдерживает такой вещи. См. linux.die.net/man/1/su , gnu.org/software/coreutils/manual/html_node/su-invocation.html , linfo. org / su.html . Это должно означать пользователя-заменителя . – ssice 19 November 2013 в 01:32

Команда bang bang (!!) является ярлыком для повтора и запуска предыдущей команды, введенной в ваш терминал. Эта команда очень полезна, когда вы забываете, что вам нужны права администратора для выполнения определенного действия, и позволяет вам повторять ее с правами суперпользователя, просто набрав,

sudo !!

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

Например:

apt-get update

Выход будет,

E: Не удалось открыть файл блокировки / var / lib / apt / lists / (13: Разрешение отказано) E: Невозможно заблокировать каталог / var / lib / apt / lists / E: Не удалось открыть файл блокировки / var / lib / dpkg / lock - open (13: Permission denied) E: Не удалось для блокировки каталога администрирования (/ var / lib / dpkg /), вы root?

После этого, если мы запустим команду sudo !!, выход будет

Hit http://extras.ubuntu.com saucy/main amd64 Packages
Get:3 http://mirror.sov.uk.goscomb.net saucy-updates Release.gpg [933 B]
Hit http://ppa.launchpad.net saucy Release                                  
Hit http://extras.ubuntu.com saucy/main i386 Packages 
Hit http://mirror.sov.uk.goscomb.net saucy Release                             
99% [Waiting for headers] [Waiting for headers] [Waiting for headers]

. Это означает, что часть !! захватывает предыдущую команду apt-get update и предыдущую [ f9] делает команду работать с правами суперпользователя.

И повторить и запустить предыдущую команду , sudo !! запускает предыдущую команду с привилегиями суперпользователя, значит, обычно все команды мы ввели на терминал, хранящиеся в command history. Запустите команду history на терминале, он отобразит все введенные вами команды. Часть !! в sudo !! захватывает последнюю команду, сохраненную в истории команд и вся sudo !! запускает последнюю команду с правами администратора.

В этом сообщении блога объясняются некоторые другие команды bang.

38
ответ дан 24 May 2018 в 15:08
  • 1
    Я удивлен, увидев, что он снова упоминает «удары». Я думал, что этого достаточно. – kiri 18 November 2013 в 17:08
  • 2
    +1 больше примеров команд bang. – WernerCD 18 November 2013 в 21:45
  • 3
    @Rmano По крайней мере, в Bash, и я ожидаю, что все оболочки в стиле Бурна с поддержкой истории, mkdir LongDirectoryName и cd !$ должны быть выпущены отдельно для работы, если только LongDirectoryName не было последним словом предыдущей команды. Для целей истории оболочки mkdir LongDirectoryName; cd !$ - одна команда. Взаимодействие истории с !!, !^ и !$ использует последнюю команду, полностью обработанную оболочкой, прежде чем увидеть !. Вот пример. Если вы запустите history, вы увидите, что команды в строке, соединенной с ;, запоминаются как одна команда. – Eliah Kagan 28 August 2017 в 23:38
  • 4
    @EliahKagan, ты прав! Удалена неверная информация ... – Rmano 29 August 2017 в 10:28

Ответы на две части: !! и sudo

!! являются частью функциональности оболочки (в случае Ubuntu это, вероятно, bash, но другие оболочки например, zsh или csh поддерживают это тоже), называемое «расширение истории». Он ведет себя аналогично другим расширениям в том, что оболочка расширяет «placeholder» до набора слов. Хотя foo* будет расширен до списка всех файлов, начинающихся с «foo», !! будет расширен до содержимого предыдущей командной строки.

$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar

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

Команда sudo позволяет выполнять команды в качестве другого пользователя, при условии, что разрешения предоставлены политикой безопасности (по умолчанию этот параметр настроен в /etc/sudoers).

По умолчанию пароль root не установлен в Ubuntu. Для выполнения задач системного администрирования пользователь, созданный во время установки, получает права sudo. Теперь этот пользователь может выполнить любую команду в оболочке как root, просто добавив sudo. Некоторые программы GUI также используют механизм sudo, например, управление пакетами.

Причина, по которой sudo может выполнять другие команды как root (или другой пользователь), состоит в том, что sudo binary (/usr/bin/sudo) имеет бит setuid установлен в его разрешении и принадлежит root. Любой (двоичный) исполняемый файл с установленным битом setuid запускается с разрешениями его владельца. Это означает, что sudo эффективно работает с правами root, независимо от того, какой пользователь на самом деле назвал его. Только внутренние правила безопасности sudo управляют тем, кому разрешено то, что и не позволяют произвольным пользователям делать произвольные вещи.

Таким образом, в случае sudo !! это означает [!d8 ]

$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!

в основном идентичен

$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt

, просто уменьшая типизацию. В обоих случаях sudo просто видит mount /dev/sdb1 /mnt и запускает его с правами root.

13
ответ дан 24 May 2018 в 15:08

!! является синтаксически простым и, вероятно, наиболее распространенным выражением для расширения истории.

Как вы могли заметить, после замены последней команды, выполненной для !!, bash выполняет две вещи (в своем по умолчанию):

Вам будет показана полная команда с замещенным текстом. Например, если ваша команда была lshw -c video, и вы запускаете sudo !! дальше, тогда команда после расширения истории будет sudo lshw -c video. Эта команда запущена.

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

Однако, если вы включите (shopt -s histverify), то расширение истории работает по-разному:

Вам показана полная команда с замещенным текстом. Например, если ваша команда была lshw -c video и вы запускаете sudo !! дальше, тогда команда после расширения истории будет sudo lshw -c video. Затем вы, пользователь, затем нажмите Enter, чтобы запустить команду. Или вы можете отредактировать команду, отменить ее (Ctrl + C) и т. Д. Обратите внимание, что это не специальное приглашение, а регулярное первичное приглашение. Это действительно так, как будто вы набрали текст самостоятельно.

(Обратите внимание, что расширение истории histverify history вступает в силу только в том случае, если используется библиотека readline, но когда вы используете bash в интерактивном режиме на Ubuntu или другой системе GNU / Linux , это по существу всегда.)

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

5
ответ дан 24 May 2018 в 15:08
! используется в Linux для ярлыков, связанных с историей. Так, !! просто выполнит предыдущую команду, которую вы выполнили.

Это очень полезно в тех случаях, когда вы либо забываете ставить sudo перед командой, которая требует ее, либо вы получаете отказ от прав, или что-то подобное просто sudo !!, и вы Сделано.

3
ответ дан 24 May 2018 в 15:08
!! повторит и запустит предыдущую команду, а с помощью sudo она предоставит команде root привилегию. (Это не в man-странице? !! Я не вижу этого там.)

0
ответ дан 24 May 2018 в 15:08
  • 1
    Для тех, кто ищет справочную страницу: man --pager='less -p "Event Designators"' bash – Sebi 9 February 2017 в 13:45

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

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