IPython:如何有选择地安全地擦除IPython的历史记录?

roo*_*-11 27 ipython ipython-notebook

我一直在学习如何使用该paramiko包只发现我在IPython中以纯文本形式存储的所有密码%hist.不太好.

因此,我需要摆脱存储内容的特定部分%hist.说,我不想抹去整个历史.- 只有我不小心打字的部分password =或类似的选择条款.

谢谢


评论我不需要:

  • %clear只清除会话.它没有抹去历史.
  • 是.从现在开始我只会使用xSA_keys.

Mat*_*att 35

历史记录$(ipython locate)/profile_default/history.sqlite默认存储.您可以删除文件,或者对其执行任何操作(安全擦除等).它是一个sqlite文件,因此您可以使用任何sqlite程序加载它并对其进行查询.

签入$(ipython locate)/profile_default/和其他$(ipython locate)/profile_xxx您没有任何其他历史文件.$(ipython locate)通常~/.ipython/但可以有所不同:

ls $(ipython locate)/profile_*/*.sqlite
Run Code Online (Sandbox Code Playgroud)


小智 19

一个解决方案是:

sqlite ~/.ipython/profile_default/history.sqlite

delete from history where source like '%password =%';
Run Code Online (Sandbox Code Playgroud)

  • `sqlite`不起作用,但`sqlite3`没有 (7认同)
  • 如果你这样做,你可能想删除 `~/.sqlite_history` 中的 sqlite3 历史记录。 (2认同)

Zag*_*ags 9

如果您想删除特定会话的历史记录,请运行:

sqlite ~/.ipython/profile_default/history.sqlite
Run Code Online (Sandbox Code Playgroud)

请注意,在某些系统上,您需要运行sqlite3而不是sqlite.

SQLite 内部:

select * from history;
# session is the first column in history
delete from history where session=XXX;
Run Code Online (Sandbox Code Playgroud)

另外,这里有一个 SQLite 查询,它将为您提供上次会话的 ID:

select session from history order by -session limit 1;
Run Code Online (Sandbox Code Playgroud)


hob*_*obs 5

结合@Ovidiu Ghinet答案@马特S'接受的答案

sqlite $(ipython locate)/profile_*/*.sqlite || sqlite3 $(ipython locate)/profile_*/*.sqlite
Run Code Online (Sandbox Code Playgroud)

然后从 sqlite 控制台中:

delete from history where source like '%password%';
select * from history; /* confirm that no passwords left        */
.quit                  /* forgot how to exit sqlite console? ;) */
Run Code Online (Sandbox Code Playgroud)