- Команда History в Linux (История Bash)
- Использование команды history и расширений истории
- Сохранение списка истории
- История очистки
- Изменение поведения в истории
- Выводы
- Удалить определенную строку из файла истории Bash
- Предотвращение сохранения конфиденциальной информации в файле истории
- Удалить конфиденциальную информацию из файла истории
- Удалить конфиденциальную информацию из любого файла в определенном дереве
- Как очистить историю команд в Linux
- Почему мы должны удалить историю командной строки Linux?
- Удаление истории командной строки Linux
- Удалить определенную строку из файла истории Bash
- Предотвращение сохранения конфиденциальной информации в файле истории
- Удалить конфиденциальную информацию из файла истории
- Удалить конфиденциальную информацию из любого файла в определенном дереве
Команда History в Linux (История Bash)
Если вы проводите много времени в командной строке, просмотр истории команд, которые вы ранее запускали, может быть полезной функцией, которая может упростить вашу повседневную работу и повысить вашу производительность.
В этой статье мы поговорим о команде history , которая позволяет просматривать список ранее выполненных команд, выполнять поиск по списку и управлять файлом истории.
Использование команды history и расширений истории
history — это встроенная оболочка, и ее поведение может немного отличаться от оболочки к оболочке. Мы рассмотрим встроенную в Bash версию history .
В простейшей форме при вызове без какой-либо опции или аргумента команда history отображает весь список истории с номерами строк.
При вводе !n выполняется n-я команда из списка истории, а !-n команда возвращается на n строк. В следующем примере мы выполняем команду в строке 467 :
Другой способ выполнить команду — использовать расширение !word . word относится к самой последней команде, начинающейся с слова.
Обычно в history отображается много строк вывода, которые не помещаются на экране. Чтобы просмотреть вывод по одной странице за раз, направьте его в программу пейджера, например, команду more или less :
Чтобы отобразить последние n строк, передайте число в качестве аргумента команды. Например, чтобы просмотреть только последние пять строк из списка истории, введите:
Используйте клавиши со стрелками up и down для перемещения по записям в списке. Когда отобразится искомая команда, нажмите Enter чтобы выполнить ее.
Типа !! для выполнения предыдущей команды:
Это особенно полезно, когда вы забываете привязать команду к sudo и вместо повторного ввода команды можете ввести:
!-1 совпадает с !! и выполняет последнюю команду из списка истории !-2 секунды до последней и так далее.
^word1^word2^ позволяет повторно запустить последнюю команду, заменив «word1» на «word2». Если вы случайно набрали sduo command вместо команды sudo command вы можете повторить команду, используя правильное слово:
Используйте команду grep для фильтрации вывода. Например, чтобы просмотреть все команды, включая «nano», вы должны выполнить:
Теперь, если вы хотите повторно запустить команду nano setup.py просто введите:
Другой способ поиска в истории команд — нажать Ctrl-R . Приглашение изменится на следующее, и вы сможете начать поиск ранее выполненной команды.
Оболочка отобразит соответствующую строку. Чтобы перейти к следующему подходящему предложению, снова нажмите Ctrl-R .
Обратитесь к руководству Bash для получения дополнительной информации о расширении истории , модификаторах и позиционных обозначениях.
Сохранение списка истории
По умолчанию при запуске нового сеанса Bash читает список истории из файла .bash_history . Список команд, которые выполняются в текущем сеансе, хранятся в памяти и сохраняются в файле при закрытии сеанса.
Если вы открыли несколько сеансов оболочки, сохраняется только история сеанса, который был закрыт последним.
Параметр -a позволяет сохранить список истории текущего сеанса в файл .bash_history :
Параметр -w записывает полный список истории в файл истории.
История очистки
Команда history позволяет очистить полный список истории или удалить определенные части.
Чтобы очистить список истории, используйте параметр -c :
Чтобы удалить определенную строку или строки между начальной и конечной позициями из списка истории, используйте параметр -d .
Например, чтобы удалить строки между 365 и 375 (включая эти строки), вы должны ввести:
Если вы укажете только одно число для опции -d , команда удалит данную строку.
Когда используется отрицательное целое число, строки отсчитываются от конца списка истории.
Приведенные выше команды очищают список истории, который хранится в памяти, но не удаляют записи из файла .bash_history на диске. Чтобы очистить файл, вам нужно записать в файл список истории:
Изменение поведения в истории
Поведение истории Bash можно определить с помощью нескольких различных переменных среды . При изменении поведения истории установите переменные в
/.bashrc или любом другом файле конфигурации, который загружается при входе пользователя в систему.
По умолчанию Bash сохраняет 500 строк в списке истории команд. Переменная HISTSIZE позволяет вам изменять это значение. Чтобы установить значение 10000, добавьте в файл .bashrc следующую строку:
Переменная HISTCONTROL принимает список значений, разделенных двоеточиями, которые определяют способ сохранения команд в списке истории:
- ignorespace — команды, начинающиеся с пробела, не сохраняются в списке истории.
- ignoredups — повторяющиеся команды не сохраняются.
- ignoreboth — это сокращение, включая как ignorespace и ignoredups .
Когда HISTTIMEFORMAT переменная HISTTIMEFORMAT , Bash HISTTIMEFORMAT времени выполнения команды в каждой строке.
Например, если вы установите:
История будет отображаться в следующем формате:
Выводы
Команда history отображает список ранее выполненных команд. Например, вы можете использовать историю, чтобы просмотреть длинную команду, которую вы использовали раньше, но не можете вспомнить.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Удалить определенную строку из файла истории Bash
Как я могу удалить определенную строку из history базы данных?
Вам необходимо выйти из системы и снова войти в нее или запустить, history -a чтобы текущая история была сохранена на диске.
Тогда просто отредактируйте файл
/.bash_history ) с пробела; Команды, начинающиеся с пробела, обычно не регистрируются (см. $HISTCONTROL ).
Вы можете добиться удаления из файла истории с помощью командной строки в два этапа:
- Ввод history -d
- удаляет указанную строку из истории в памяти.
- Набор текста history -w записывает текущую историю в памяти в
Два шага вместе навсегда удаляют строку из истории в памяти, а также из файла .bash_history .
Чтобы предотвратить добавление команды в историю в первую очередь, убедитесь, что переменная окружения HISTCONTROL содержит среди значений, разделенных двоеточиями, значение ignorespace , например (добавьте, например, в .bashrc ):
Это предотвратит добавление в историю любой команды с начальным пробелом. Затем вы можете полностью очистить историю, запустив
Прежде всего, если команда, которую вы собираетесь выдать, чувствительна, небезопасна или вам просто не нужно, чтобы она загромождала вашу историю, лучше всего / быстрее всего просто предотвратить ее попадание в историю. Убедитесь, что $HISTCONTROL содержит ignorespace :
Затем выполните любую команду, которую вы не хотите в своей истории, пробелом:
Если вы случайно поместили нежелательную команду в историю, при условии, что ваша сессия bash все еще открыта, команда еще не коснулась диска. Чтобы удалить предыдущую команду в истории, выполните:
Обратите внимание на ведущий пробел; эта команда требует ignorespace , иначе она просто удалит себя!
Если вы хотите удалить последние несколько команд, найдите последний и первый номер истории:
В этом случае 602 и 599. Тогда выдайте:
(Без ignorespace этого было бы 603..599.)
Если вы не хотите, чтобы какая-либо история из вашего текущего сеанса попала на диск, выйдите, используя:
До сих пор подход заключается в том, чтобы даже не допустить записи чувствительных элементов истории на диск для дополнительной безопасности, потому что теоретически данные, удаленные с энергонезависимого носителя, все еще могут быть восстановлены.
Однако, если команды, которые вы хотите удалить, относятся к предыдущему сеансу, они уже будут добавлены при $HISTFILE выходе. Манипулирование истории с вышеупомянутыми командами будет еще только добавить остальные новые детали к $HISTFILE , на выходе . Для того, чтобы перезаписать $HISTFILE с учетом текущей сессии по всей истории, прямо сейчас , вопрос:
Конечно, для элементов истории, уже находящихся на диске, альтернативой редактированию истории с history -d последующими командами history -w является редактирование $HISTFILE с помощью текстового редактора.
Предотвращение сохранения конфиденциальной информации в файле истории
Если вы ввели какой-либо пароль в командной строке, а затем понимаете, что все команды записываются в журнал, вы можете:
Принудительно завершить текущий сеанс без сохранения истории:
Это отбросит всю текущую историю.
Набирайте ↑ (up arrow) в сеансе open bash, пока не будет отображена конфиденциальная информация, затем с помощью клавиш редактирования строки, таких как Ctrl +, W удалите конфиденциальную информацию, а затем ↓ (down arrow) до появления новой пустой строки перед вводом Enter .
Удалить конфиденциальную информацию из файла истории
Если вы понимаете, что конфиденциальная информация уже сохранена, и вы хотите удалить ее, но не всю свою историю:
Простая sed команда может сделать работу:
но, когда вы вводите это, вы создаете другую строку истории, содержащую шаблон поиска (конфиденциальную информацию), который вы пытаетесь удалить. Чтобы вы могли:
Это будет работать head -n1 с вводом с терминала. Похоже, что ваш терминал завис (не будет подсказки); просто введите информацию, которую вы хотите удалить из файла. Это хитрость, позволяющая вводить (часть) команды без фактического ее ввода в командной строке, что делает ее непригодной для включения в запись истории. Затем sed будет использовать введенный вами текст для поиска .bash_history и удаления всех строк, содержащих конфиденциальную информацию. Примечание: если ваш шаблон конфиденциальной информации содержит косую черту (ы), вы должны экранировать их обратной косой чертой или изменить sed команду, чтобы использовать этот синтаксис для указания разделителя, который не появляется в шаблоне:
Другим способом может быть удаление только конфиденциальной информации, но сохранение команд, содержащих эту информацию. Для этого вы можете просто заменить конфиденциальную информацию заменой текста на ваш выбор:
Удалить конфиденциальную информацию из любого файла в определенном дереве
Наконец, чтобы быть уверенным, что это не останется в другом забытом файле:
перечислит все заинтересованные файлы.
заменит все вхождения конфиденциальной информации во всех файлах в дереве каталогов с корнем в . . Примечание: даже если эта команда использует xargs -0 , она не будет обрабатывать файлы с символами новой строки в их именах.
Источник
Как очистить историю команд в Linux
Главное меню » Ubuntu » Как очистить историю команд в Linux
Почему мы должны удалить историю командной строки Linux?
В большинстве случаев мы не хотим раскрывать историю терминалов других пользователей вашей системы Linux. Например, если вы проводите занятия со своими учениками на лабораторном компьютере, и, возможно, вы научили их некоторым вредоносным командам, которые не рекомендуется использовать в нашей системе. Но большинство студентов не имеют представления о побочных эффектах этих важных команд. Любопытный студент может поискать в истории командной строки и протестировать ее, чтобы проверить работу каждой команды. Это может привести к сбою вашей системы много раз. Однако вы можете быстро отремонтировать или переустановить свою систему. Но это не очень хорошая практика. Итак, в этом случае мы хотим очистить историю командной строки после работы с ней. Особенно, если у вас есть общий доступ со своими друзьями или коллегами. Мы только что разработали это на простом примере; могут возникнуть другие проблемы, из-за которых вы захотите очистить историю командной строки Linux. В этой статье мы покажем вам, как можно очистить историю командной строки в системе Linux.
В этой статье мы выполнили все команды терминального приложения в Ubuntu 20.04. Следовательно, необходимо открыть окно терминала в вашей системе. Щелкните «Действия», расположенный в левом углу на рабочем столе вашей системы, а затем, используя панель поиска приложения, вы выполните поиск по ключевому слову «терминал». После завершения поиска щелкните значок терминала и запустите его.
Удаление истории командной строки Linux
Если вы хотите просмотреть историю своей команды терминала, введите в терминале следующую команду:
Обычно история командной строки сохраняется в файле с именем «bash_history». Этот файл вы можете найти в домашнем каталоге конкретного пользователя /home/username/.bash_history. Выполните приведенную ниже команду, чтобы найти файл bash_history:
Источник
Удалить определенную строку из файла истории Bash
Как я могу удалить определенную строку из базы данных history ?
Вы должны выйти из системы и снова войти в нее или запустить history -a , чтобы текущая история фиксировалась на диске.
Затем просто отредактируйте файл
Вы можете добиться удаления из файла истории с помощью командной строки в два этапа:
- Ввод history -d
- удаляет указанную строку из истории в памяти.
- Ввод history -w записывает текущую историю в памяти в файл
Два шага вместе навсегда удаляют строку из памяти history и из файла .bash_history .
Чтобы предотвратить команду в первую очередь добавить в историю, убедитесь, что переменная среды HISTCONTROL содержит среди значений, разделенных двоеточиями, значение ignorespace , например (добавьте, например, в .bashrc )
Это предотвратит добавление в историю любой команды с начальным пробелом. Затем вы можете полностью очистить историю, запустив
Прежде всего, если команда, которую вы собираетесь выдать, чувствительна, небезопасна или вам просто не нужно, чтобы она загромождала вашу историю, лучше всего/быстрее всего просто предотвратить ее попадание в историю. Убедитесь, что $HISTCONTROL содержит ignorespace :
Затем выполните любую команду, которую вы не хотите в своей истории, пробелом:
Если вы случайно поместили нежелательную команду в историю, при условии, что ваша сессия bash все еще открыта, команда еще не коснулась диска. Чтобы удалить предыдущую команду в истории, выполните:
Обратите внимание на ведущий пробел; эта команда требует ignorespace , иначе она просто удалит себя!
Если вы хотите удалить последние несколько команд, найдите последний и первый номер истории:
В этом случае 602 и 599. Тогда выдайте:
(Без ignorespace это было бы 603..599.)
Если вы не хотите, чтобы any history из текущего сеанса попала на диск, выйдите, используя:
До сих пор подход заключается в том, чтобы даже не допустить записи чувствительных элементов истории на диск для дополнительной безопасности, потому что теоретически данные, удаленные с энергонезависимого носителя, все еще могут быть восстановлены.
Однако если команды, которые вы хотите удалить, относятся к предыдущему сеансу, они уже будут добавлены в $HISTFILE при выходе. Управление историей с помощью вышеприведенных команд будет по-прежнему только добавлять оставшиеся новые элементы к $HISTFILE , при выходе . To перезаписать $HISTFILE с текущим сеансом просмотра целого history, прямо сейчас , вопроса:
Конечно, для элементов истории, уже находящихся на диске, альтернативой редактированию истории с помощью команд history -d с последующим вводом history -w является редактирование $HISTFILE с помощью текстового редактора.
Предотвращение сохранения конфиденциальной информации в файле истории
Если вы ввели какой-либо пароль в командной строке, а затем понимаете, что все команды записываются в журнал, вы можете:
Принудительно завершить текущий сеанс без сохранения истории:
Это отбросит всю текущую историю.
Тип ↑ (up arrow) в сеансе open bash, пока не будет отображена конфиденциальная информация, используйте такие клавиши редактирования строки, как Ctrl + W удалить конфиденциальную информацию и затем ↓ (down arrow) до появления новой пустой строки до ввод Enter ,.
Удалить конфиденциальную информацию из файла истории
Если вы понимаете, что конфиденциальная информация уже сохранена, и вы хотите удалить ее, но не всю свою историю:
Простая команда sed может сделать эту работу:
но, когда вы вводите это, вы создаете другую строку истории, содержащую шаблон поиска (конфиденциальную информацию), который вы пытаетесь удалить. Чтобы вы могли:
Это запустит head -n1 с вводом с терминала. Похоже, что ваш терминал завис (не будет подсказки); просто введите информацию, которую вы хотите удалить из файла. Это хитрость, позволяющая вам вводить (часть) команды без фактического ее ввода в командной строке, что делает ее неподходящей для включения в запись истории. Затем sed будет использовать введенный вами текст для поиска .bash_history и удалить все строки, содержащие конфиденциальную информацию. Примечание: если ваш шаблон конфиденциальной информации содержит косую черту (ы), вы должны экранировать их с помощью обратной косой черты или изменить команду sed , чтобы использовать этот синтаксис для указания разделителя, который не появляется в шаблоне:
Другим способом может быть удаление только конфиденциальной информации, но сохранение команд, содержащих эту информацию. Для этого вы можете просто заменить конфиденциальную информацию заменой текста на ваш выбор:
Удалить конфиденциальную информацию из любого файла в определенном дереве
Наконец, чтобы убедиться, что это не останется в другом забытом файле:
перечислит все заинтересованные файлы.
заменит все вхождения конфиденциальной информации во всех файлах в дереве каталогов с корнем . . Примечание: даже если эта команда использует xargs -0 , она не будет обрабатывать файлы с символами новой строки в их именах.
Источник