本篇关于在shell的history命令有一定的了解的童鞋使用,且在删除历史命令和部分删除中操作
1 查看 history
[root@cdh-test-01 ~]# help history
history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...]
显示或操纵历史列表。
带行号显示历史列表,将每个被修改的条目加上前缀 `*'。
参数 N 会仅列出最后的 N 个条目。
选项:
-c 删除所有条目从而清空历史列表。
-d 偏移量 从指定位置删除历史列表。
-a 将当前绘画的历史行追加到历史文件中
-n 从历史文件中读取所有未被读取的行
-r 读取历史文件并将内容追加到历史列表中
中
-w 将当前历史写入到历史文件中
并追加到历史列表中
-p 对每一个 ARG 参数展开历史并显示结果
而不存储到历史列表中
-s 以单条记录追加 ARG 到历史列表中
如果给定了 FILENAME 文件名,则它将被作为历史文件。否则
如果 $HISTFILE 变量有值的话使用之,不然使用 ~/.bash_history 文件。
如果 $HISTTIMEFORMAT 变量被设定并且不为空,它的值会被用于
strftime(3) 的格式字符串来打印与每一个显示的历史条目想关联的时
间戳,否则不打印时间戳。
退出状态:
返回成功,除非使用了无效的选项或者发生错误。
2 清除所有历史记录
[el_robot@cdh-test-01 root]$ history
1 history
2 clear
3 history
4 top
5 ifconfig
6 awk --help
7 history
[el_robot@cdh-test-01 root]$ history -c
[el_robot@cdh-test-01 root]$ history
1 history
[el_robot@cdh-test-01 root]$
3 (尖叫操作)删除部分历史记录
【提神醒脑(前提):bash执行命令时不是马上把命令名称写入history文件的,而是存放在内部的buffer中,等bash退出时会一并写入。
不过,可以调用'history -w'命令要求bash立即更新history文件。history -w 】
部分历史记录的删除 主要是有些童鞋的误操作shell命令太多,或者之前历史记录有带密码参数比如(sqoop -username xxx -password yyy:yyy就是历史记录,被暴露的危险),鉴于安全起见 需要对历史记录做部分删除:
[el_robot@cdh-test-01 ~]$ ll -a
总用量 16
drwx------ 3 el_robot el_robot 108 3月 19 11:57 .
drwxr-xr-x. 5 root root 48 3月 19 11:49 ..
-rw------- 1 el_robot el_robot 144 3月 19 11:57 .bash_history
-rw-r--r-- 1 el_robot el_robot 18 4月 11 2018 .bash_logout
-rw-r--r-- 1 el_robot el_robot 193 4月 11 2018 .bash_profile
-rw-r--r-- 1 el_robot el_robot 231 4月 11 2018 .bashrc
drwxrwxr-x 2 el_robot el_robot 39 3月 19 11:55 .oracle_jre_usage
[el_robot@cdh-test-01 ~]$ id el_robot
uid=1002(el_robot) gid=1002(el_robot) 组=1002(el_robot),984(hive)
[el_robot@cdh-test-01 ~]$ history
1 history
2 sqoop -connect mysql:jdbc://localhost:3306/xxx/yyy --username robot --password robot xxxxxx
3 ls /opt/
4 who
5 w
6 history
7 ll -a
8 ll
9 ls -a
10 ls
11 ll -a
12 id el_robot
13 history
[el_robot@cdh-test-01 ~]$ vi .bash_history
[el_robot@cdh-test-01 ~]$ history -r
[el_robot@cdh-test-01 ~]$ history
其中vi .bash_history中的操作举例参考:
1 history
2 sqoop -connect mysql:jdbc://localhost:3306/xxx/yyy --username robot --password robot xxxxxx
3 ls /opt/
4 who
5 w
6 history
7 ll -a
8 ll
9 ls -a
10 ls
~
:4,10d ### 先set nu,根据行号指定行数范围删除,这里是4-10行的数据d后 按回车 删除
history -d history_id :如 history -d 5 4 根据编号删除!
[el_robot@cdh-test-01 ~]$ clear
[el_robot@cdh-test-01 ~]$ history
1 history
2 sqoop -connect mysql:jdbc://localhost:3306/xxx/yyy --username robot --password robot xxxxxx
3 exit
4 clear
5 history
[el_robot@cdh-test-01 ~]$ history -d 5
[el_robot@cdh-test-01 ~]$ history -d 5 4 ###指定编号 删除指令
[el_robot@cdh-test-01 ~]$ hist
-bash: hist: 未找到命令
[el_robot@cdh-test-01 ~]$ history
1 history
2 sqoop -connect mysql:jdbc://localhost:3306/xxx/yyy --username robot --password robot xxxxxx
3 exit
4 clear
5 history -d 5 4
6 hist
7 history
[el_robot@cdh-test-01 ~]$
4 总结:
在实践中经常会遇到需要清除history的场景,比如签发证书的操作记录等等。【一般常用的就是 history -c,而且能够立即生效】,但是在【非root】登录的场景下,这种方法不生效的场景下,可以像下面这样处理:
1.vim ~/.bash_history
该文件即为历史记录存储文件,我们随意修改
2.修改后再次 history 查看,发现并没有变化。原因:缓存
执行:history -r
读取历史文件并将其内容添加到历史记录中,即重置文件里的内容到内存中,完成修改!
3 . 如果上面1 2 在非root用户下不能生效 ,终极解决:
【
a. 将该文件清理或者者赋空,最简单的方式:echo > .bash_history,相当于往文件中写了个空.
b. 然后执行exit退出当前会话,重新登录即可,注意这里不会立即生效,因为文件虽然被写了空,当时当前会话的缓存中还是存在的,所以必须退出重新建立一个新的会话
】
使得生效快的操作:执行exit退出当前会话,重新登录即可!!