"Системное Спасение CD" не только имеет поддержку NTFS, но и инструменты для решения проблем Windows, как инструменты редактора реестра и сброс пароля.
Пока вы редактировали запись истории, но еще не нажали Enter, чтобы вернуться к исходной записи, несколько раз нажмите Ctrl+_ - команду undo
- до тех пор, пока не произойдет никаких дальнейших изменений. Вы возвращаетесь к исходной записи.
Педантичное примечание к старой записи: содержимое /etc/network/interfaces
расскажет вам, как интерфейсы МОГУТ управляться при загрузке (или после запуска перезапуска сети
). Он не является окончательным. В нем не указывается, каким образом данный интерфейс был назначен в данный момент. Например, учитывая управляемый интерфейс DHCP
, я могу легко убить dhclient
и использовать ifconfig
для статического назначения любого IP, который я хочу, интерфейсу (я могу назначить IP-адрес в управляемом диапазоне HCHP
, чтобы вызвать больше путаницы).
Возможно, другой администратор сделал это, чтобы проверить что-то и забыл очистить. Или я могу запустить dhclient eth0
на интерфейсе со статическим назначением теперь DHCP
будет управлять интерфейсом. Или другой администратор, возможно, сделал опечатку и теперь avahi
динамически настроил интерфейс с локальным адресом канала.
Конечно, эти вещи происходят не каждый день, но это только в условиях разработки или в странных ситуациях, когда я когда-либо спрашивал себя: «Как этот интерфейс был настроен?» При нормальных обстоятельствах я никогда не задаю этот вопрос.
В целом, я считаю, что ответ: «Нет, вы не можете знать наверняка.» Ядро не ведет запись, насколько известно. Лучшее, что вы можете сделать, это grep
через обычных подозреваемых в /var/log/
. Но если кто-то пришел с назначенным вручную статическим IP-адресом, вам не повезло.
Параметр --status-fd
сообщает dpkg
для сообщения о ходе выполнения в путь, который могут анализировать другие программы, например, для представления пользователю хороших отчетов о ходе выполнения в графическом интерфейсе пользователя.
Аргументом для --status-fd
является дескриптор файла , т.е. номер, обозначающий открытый файл. Немного упростив ситуацию:
open
возвращает дескриптор файла. read (0, addr, 10)
означает «read 10 bytes from descriptor 0 и помещает их по адресу памяти addr
». Перенаправление открывает файл на определенном дескрипторе. Например,в сценарии оболочки или в командной строке mycommand < somfile
соединяет номер дескриптора файла 0 (стандартный ввод), так что somfile
(который открыт для чтения) вместо того, что было раньше (терминал, если команда выполняется в терминале). Можно добавить номер дескриптора к оператору перенаправления: mycommand 3 < somefile
соединяет номер дескриптора файла 3 с somfile
(большинство команд не будут выполнять ничего с этим дескриптором файла).
При установке, обновлении или удалении пакетов dpkg выполняет различные другие команды в сценариях перед/после установки/удаления пакетов. Некоторые из этих команд могут считывать входные или отображаемые сообщения, поэтому dpkg сохраняет стандартные дескрипторы, подключенные к тому, к чему они были подключены при вызове.
Поскольку стандартные дескрипторы файлов уже используются, dpkg
позволяет вызывающему абоненту указать другой дескриптор для отчетов о состоянии. Можно поместить отчеты о состоянии в файл, например:
dpkg --status-fd 3 -i somefile.deb 3>/tmp/dpkg.status
На другом терминале выполните команду tail -n + 1 -f/tmp/dpkg.status
и просмотрите приходящие сообщения о состоянии.
Часто внешний интерфейс, вызывающий dpkg
и желающий отчетов о состоянии, открывает канал (однонаправленный канал связи) перед запуском dpkg
и передает дескриптор файла для записи конца канала в качестве аргумента -status-fd
. Затем фронтэнд считывает из считываемого конца канала и получает сообщения о состоянии по мере их создания, не рискуя им смешаться с чем-либо другим.
Вернитесь к исходной команде , если вы внесли несколько изменений в строку:
revert-line (M-r)
Undo all changes made to this line. This is like
executing the undo command enough times to get back to the beginning.
M
- это мета-ключ, который для меня altr .
Когда выполнил команду, подобную ранее выполненной OP (это случается), нечего «отменить», поскольку команды обрабатываются и запоминаются в библиотеке GNU Readline и не записываются в $ HISTFILE
до тех пор, пока оболочка не Я говорю об этом потому, что вы не можете просто grep
$ HISTFILE
, как можно ожидать, и это может быть не идеальным выходом из оболочки.
Вот несколько вариантов, которые избавят вас от прокрутки всех предыдущих команд readline.
Если вы помните некоторые команды , нажмите ctrl + r и введите то, что вы помните, чтобы искать по предыдущим командам , содержащим этот ряд. При повторном нажатии ctrl + r отобразится следующий последний поиск.
Например, введите ls -l
, затем ctrl + r столько раз, сколько требуется для поиска предыдущей команды. Если прокрутить мимо него, ctrl + s будут искать вперед из текущей позиции.
Команда fc
bash builtin полезна для перечисления номеров индексов вместе с предыдущими командами readline.
fc -l -100
перечислит предыдущие команды 100 в строке readline.
Кроме того, если OP знает, что ищет предыдущую команду ls -l
, он может направить вывод в grep
, например: fc -l -100 | grep 'ls -l'
Это должно вывести список предыдущих команд ls -l
, которым предшествует индексный номер. Выходные данные выглядят следующим образом:
2065 ls -l
Теперь можно использовать обозначение события ! n
, где n
- номер индекса. В этом примере выполнение ! 2065
расширится до ls -l
.
Хотя это не помогает постфактум, все, кто хочет сохранить недавнюю историю команд при изменении предыдущих команд, должны видеть раздел HISTORY EXPANSION
в man bash
. Вот несколько альтернативных методов изменения старых команд без перезаписи истории.
В разделе Обозначения событий
показано, как можно легко редактировать последовательность из последней использованной команды.
^string1^string2^
Quick substitution. Repeat the previous command, replacing string1 with string2. Equivalent to
``!!:s/string1/string2/'' (see Modifiers below).
Пример:
$ echo foo
foo
$ ^foo^bar
echo bar
bar
Последние команды теперь показывают:
echo foo
echo bar
В приведенном выше примере также объясняется, как использовать sed
для замены последовательности в указателе события.
!-n Refer to the current command minus n.
Если 3 команды в истории имеют значение echo foo
, то следует использовать:
! -3: s/foo/bar
Обратите внимание на то, что обозначения событий будут отображаться в истории как выполняемая команда, в данном случае echo bar
. Он не будет отображаться в истории как ! -3: s/foo/bar
.
Просто выбросить это там, как это кажется тесно связано, даже если это больше «не делать», чем «отменить» решение, которое ищет ОП.
Переменная readline revert-all-at-newline
, доступная начиная с bash -3.2, дает почти желаемый эффект.
Если установлено, то нажатие ввода в любой строке (может быть другой командой,или даже пустая строка )вернет все записи истории, которые были отредактированы, но не выполнены (, как в примере в вопросе ).
Можно установить с помощью
.set revert-all-at-newline on
в ~/.inputrc
.
или
bind 'set revert-all-at-newline on'
в ~/.bashrc
.