Удаление истории из ~ / .bash_history

У меня есть пара вопросов о истории терминала или командной строки, которая хранится в ~/.bash_history.

Я могу видеть файл в терминале с помощью команды history, но если я попытаюсь открыть он с gedit bash_history файл полностью пуст. Зачем? Я нашел, как удалить определенное количество строк в файле из терминала с помощью этой строки кода: for i in {1..N}; do history -d N; done где N - количество строк (или команд), которые вы хотите удалить, но теперь в файле истории отображается это последнее и это не очень умно, если вы пытаетесь покрыть свои вещи. Итак, вопрос: как я могу дать последнюю строку кода и убедиться, что это не записывается?
8
задан 4 September 2017 в 08:05

21 ответ

Вы просто забыли предыдущую точку, команда для открытия файла истории терминала (bash) -
gedit ~/.bash_history
. Этот файл обновляется только при закрытии терминала. Чтобы удалить последние 10 строк из этого файла и не получить эту команду самостоятельно, откройте новый терминал и выполните следующую цепочку команд:
sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit
или
for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit
или
head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit
sed или head соответственно удаляет выбранные строки из ~/.bash_history, history -c удаляет историю терминала, а exit закрывает ее.
18
ответ дан 22 May 2018 в 18:48
  • 1
    Более короткая и, надеюсь, более быстрая альтернатива for + sed: head -n -N, где в верхнем регистре N указано количество строк, которые нужно удалить. stackoverflow.com/a/13380679/711006 – Melebius 4 September 2017 в 17:06
  • 2
    @Melebius Выглядит многообещающе, но как вы перенаправляете вывод на входной файл, перезаписывая его? head -n -N testfile > testfile просто очищает файл! Я добавил обходное решение, но это, конечно, не короче. – dessert 4 September 2017 в 17:24
  • 3
    Вы правы, я забыл, что head не может работать на месте, как sed. Сначала я искал одну команду sed, заменяющую ваш цикл for. На странице, на которой я связан, есть несколько вариантов, но они не выглядят так же понятными, как ваш код. – Melebius 4 September 2017 в 17:30
  • 4
    @Melebius См. sed1line.txt для этого - я добавил его выше, это не совсем короче, но должно быть быстрее. – dessert 4 September 2017 в 17:31
Вы просто забыли предыдущую точку, команда для открытия файла истории терминала (bash) - gedit ~/.bash_history . Этот файл обновляется только при закрытии терминала. Чтобы удалить последние 10 строк из этого файла и не получить эту команду самостоятельно, откройте новый терминал и выполните следующую цепочку команд: sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit или for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit или head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit sed или head соответственно удаляет выбранные строки из ~/.bash_history, history -c удаляет историю терминала, а exit закрывает ее.
18
ответ дан 18 July 2018 в 07:27
Вы просто забыли предыдущую точку, команда для открытия файла истории терминала (bash) - gedit ~/.bash_history . Этот файл обновляется только при закрытии терминала. Чтобы удалить последние 10 строк из этого файла и не получить эту команду самостоятельно, откройте новый терминал и выполните следующую цепочку команд: sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit или for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit или head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit sed или head соответственно удаляет выбранные строки из ~/.bash_history, history -c удаляет историю терминала, а exit закрывает ее.
18
ответ дан 24 July 2018 в 18:48

Файл bash_history является скрытым файлом, начиная с точки. Вам нужно сделать

gedit ~/.bash_history

. Это откроет файл в gedit.

4
ответ дан 22 May 2018 в 18:48

Если вы хотите удалить только определенные части вашего командного журнала, то указанные выше методы просто прекрасны. Если вы хотите остановить ведение журнала команд для определенного сеанса bash, выполните команду

unset HISTFILE

Чтобы быть более резким, если вы определенные части вашего журнала команд , то вы может сделать

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

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

1
ответ дан 22 May 2018 в 18:48

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

Откройте терминал / оболочку / сеанс и выполните:

 chmod 444 ~/.bash_history

выйдите из оболочки, откройте терминал / оболочку / сеанс и выполните: Вот несколько объявлений способы продолжить стирание истории

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (создать фальшивую историю)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

, затем для хорошей меры: [ ! d5]

 chmod 444 ~/.bash_history

выйти из оболочки

открыть новую оболочку и ввести

 history

, что делает ее менее заметной, если вы делаете ls -ratl, ~ / .bash_history в конечном итоге исчезнет в погремушке списка каталогов. Он не будет отображаться как ссылка, которая привлечет ненужное внимание.

Недостатком этого подхода является то, что вы теряете возможность вернуться и восстановить свою историю. фактический файл ~ / .bash_history также может оказаться в верхней части списка каталогов, так как может закончиться очень старой датой модификации с течением времени, что само по себе может привести к обнаружению того, что что-то не так.

1
ответ дан 22 May 2018 в 18:48
  • 1
    если вы используете 9999999 dd для удаления всех строк в файле, тогда :%d, :1,$d или dG работают намного лучше – Lưu Vĩnh Phúc 5 September 2017 в 15:45

1) Запустить sh; это порождает подоболочку золы, которая вообще не записывает историю. Отредактируйте оттуда

2) Добавьте строку HISTCONTROL=ignoreboth в .bashrc и сделайте exec bash, чтобы навсегда заменить текущую оболочку на повторную инициализацию, затем выполните все команды, которые вы не хотите регистрировать с помощью ведущее пространство.

0
ответ дан 22 May 2018 в 18:48

, так как я пока не комментирую комментарий, добавлю свои комментарии в качестве ответа:

man history ответит на все.

ответ на # 1 заключается в том, что история находится в памяти. history -a, чтобы сохранить файл немедленно. history -w также сохранит, но может испортить другие сеансы.

ответить # 2: history -a, gedit, удалить строки, которые вы хотите, history -r

0
ответ дан 22 May 2018 в 18:48

История не сохраняется до выхода из оболочки. Попробуйте выйти из оболочки, а затем снова взгляните на .bash_history. Там должна быть история команд.

0
ответ дан 22 May 2018 в 18:48
  • 1
    Отредактировано как предложено Хорошо сейчас? – The Lightning Stalker 5 September 2017 в 14:51

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

Откройте терминал / оболочку / сеанс и выполните:

chmod 444 ~/.bash_history

выйдите из оболочки, откройте терминал / оболочку / сеанс и выполните: Вот несколько объявлений способы продолжить стирание истории

1:

vi ~/.bash_history 9999999 dd <esc>wq!

2 (создать фальшивую историю)

sudo echo "which ls" > ~/.bash_history sudo echo "cd ~/;ls" >> ~/.bash_history

, затем для хорошей меры: [ ! d5] chmod 444 ~/.bash_history

выйти из оболочки

открыть новую оболочку и ввести

history

, что делает ее менее заметной, если вы делаете ls -ratl, ~ / .bash_history в конечном итоге исчезнет в погремушке списка каталогов. Он не будет отображаться как ссылка, которая привлечет ненужное внимание.

Недостатком этого подхода является то, что вы теряете возможность вернуться и восстановить свою историю. фактический файл ~ / .bash_history также может оказаться в верхней части списка каталогов, так как может закончиться очень старой датой модификации с течением времени, что само по себе может привести к обнаружению того, что что-то не так.

1
ответ дан 18 July 2018 в 07:27

, так как я пока не комментирую комментарий, добавлю свои комментарии в качестве ответа:

man history ответит на все.

ответ на # 1 заключается в том, что история находится в памяти. history -a, чтобы сохранить файл немедленно. history -w также сохранит, но может испортить другие сеансы.

ответить # 2: history -a, gedit, удалить строки, которые вы хотите, history -r

0
ответ дан 18 July 2018 в 07:27

Файл bash_history является скрытым файлом, начиная с точки. Вам нужно сделать

gedit ~/.bash_history

. Это откроет файл в gedit.

4
ответ дан 18 July 2018 в 07:27

1) Запустить sh; это порождает подоболочку золы, которая вообще не записывает историю. Отредактируйте оттуда

2) Добавьте строку HISTCONTROL=ignoreboth в .bashrc и сделайте exec bash, чтобы навсегда заменить текущую оболочку на повторную инициализацию, затем выполните все команды, которые вы не хотите регистрировать с помощью ведущее пространство.

0
ответ дан 18 July 2018 в 07:27

История не сохраняется до выхода из оболочки. Попробуйте выйти из оболочки, а затем снова взгляните на .bash_history. Там должна быть история команд.

0
ответ дан 18 July 2018 в 07:27

Если вы хотите удалить только определенные части вашего командного журнала, то указанные выше методы просто прекрасны. Если вы хотите остановить ведение журнала команд для определенного сеанса bash, выполните команду

unset HISTFILE

Чтобы быть более резким, если вы определенные части вашего журнала команд , то вы может сделать

rm ~/.bash_history ln -s /dev/null ~/.bash_history

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

1
ответ дан 18 July 2018 в 07:27

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

Откройте терминал / оболочку / сеанс и выполните:

chmod 444 ~/.bash_history

выйдите из оболочки, откройте терминал / оболочку / сеанс и выполните: Вот несколько объявлений способы продолжить стирание истории

1:

vi ~/.bash_history 9999999 dd <esc>wq!

2 (создать фальшивую историю)

sudo echo "which ls" > ~/.bash_history sudo echo "cd ~/;ls" >> ~/.bash_history

, затем для хорошей меры: [ ! d5] chmod 444 ~/.bash_history

выйти из оболочки

открыть новую оболочку и ввести

history

, что делает ее менее заметной, если вы делаете ls -ratl, ~ / .bash_history в конечном итоге исчезнет в погремушке списка каталогов. Он не будет отображаться как ссылка, которая привлечет ненужное внимание.

Недостатком этого подхода является то, что вы теряете возможность вернуться и восстановить свою историю. фактический файл ~ / .bash_history также может оказаться в верхней части списка каталогов, так как может закончиться очень старой датой модификации с течением времени, что само по себе может привести к обнаружению того, что что-то не так.

1
ответ дан 24 July 2018 в 18:48
  • 1
    если вы используете 9999999 dd для удаления всех строк в файле, тогда :%d, :1,$d или dG работают намного лучше – phuclv 5 September 2017 в 15:45

, так как я пока не комментирую комментарий, добавлю свои комментарии в качестве ответа:

man history ответит на все.

ответ на # 1 заключается в том, что история находится в памяти. history -a, чтобы сохранить файл немедленно. history -w также сохранит, но может испортить другие сеансы.

ответить # 2: history -a, gedit, удалить строки, которые вы хотите, history -r

0
ответ дан 24 July 2018 в 18:48

Файл bash_history является скрытым файлом, начиная с точки. Вам нужно сделать

gedit ~/.bash_history

. Это откроет файл в gedit.

4
ответ дан 24 July 2018 в 18:48

1) Запустить sh; это порождает подоболочку золы, которая вообще не записывает историю. Отредактируйте оттуда

2) Добавьте строку HISTCONTROL=ignoreboth в .bashrc и сделайте exec bash, чтобы навсегда заменить текущую оболочку на повторную инициализацию, затем выполните все команды, которые вы не хотите регистрировать с помощью ведущее пространство.

0
ответ дан 24 July 2018 в 18:48

История не сохраняется до выхода из оболочки. Попробуйте выйти из оболочки, а затем снова взгляните на .bash_history. Там должна быть история команд.

0
ответ дан 24 July 2018 в 18:48
  • 1
    Отредактировано как предложено Хорошо сейчас? – The Lightning Stalker 5 September 2017 в 14:51

Если вы хотите удалить только определенные части вашего командного журнала, то указанные выше методы просто прекрасны. Если вы хотите остановить ведение журнала команд для определенного сеанса bash, выполните команду

unset HISTFILE

Чтобы быть более резким, если вы определенные части вашего журнала команд , то вы может сделать

rm ~/.bash_history ln -s /dev/null ~/.bash_history

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

1
ответ дан 24 July 2018 в 18:48

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

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