Скрыть команду от истории
mysql -u root -p'super_secret'
Ведущий пробел, и строка не попадёт в
~/.bash_history. Работает, если в HISTCONTROL есть ignorespace. Нюанс: в Ubuntu это уже настроено, но по-разному. В /etc/skel/.bashrc стоит ignoreboth, а в root-сессии у меня было ignoredups:ignorespace. Проверьте своё:
echo "$HISTCONTROL"
Если пусто — трюк не сработает вообще, а вы будете уверены в обратном.
Исправить опечатку в предыдущей команде
systemctl status nginx-confg
^confg^config
Заменяет и сразу выполняет. Нюанс: только первое вхождение. Проверил на
echo aaa bbb aaa — после ^aaa^XXX получилось XXX bbb aaa. Для всех вхождений другая конструкция:
!!:gs/aaa/XXX/
Открыть длинную команду в редакторе
fc
Вытаскивает последнюю команду в
$EDITOR, после сохранения bash её выполняет. Нюанс: порядок поиска редактора — FCEDIT, потом EDITOR, и только потом vi по умолчанию. На голом сервере без vi получите bash: vi: command not found и никакого редактирования. Заранее пропишите export FCEDIT=nano или что вам ближе.Оживить терминал после вывода бинарника
reset
clear только прокручивает экран, а reset переинициализирует терминал целиком. Если и это не помогает — stty sane возвращает настройки ввода, когда не видно набираемых символов.Отвязать процесс от закрывающейся сессии
bg
disown -h %1
Нюанс:
-h и без него — разные вещи. С -h задача остаётся в jobs, но не получит SIGHUP при закрытии терминала. Без флага задача исчезает из таблицы совсем. Проверил оба варианта, разница именно в этом.И про главное ограничение трюка с пробелом: он прячет команду от файла истории, но не от системы. Пока процесс жив, его аргументы видны в
ps -eo args любому пользователю. Пароль в командной строке остаётся паролем в командной строке — читайте его из файла или переменной окружения.А чем вы правите длинные пайплайны —
fc или сразу пишете в файл?#Linux #Bash #Terminal #Security #DevOps