history的历史记录,同一个用户的各个会话,读取到的内容也是不一样的,原因是它读取的是shell会话缓存里的内容。只有当用户退出当前会话的时候,会话里的缓存内容才会写入~/.bash_history里。
猜测:用户登录后,首先把~/.bash_history里的内容读入缓存,然后当前会话的命令执行记录,也写入缓存中,这样相同用户不同会话,读到的history内容是不一样的。
linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的。

export HISTTIMEFORMAT="`whoami` : |  %F  | %T: | "
网管还应该在"/etc/skel/.bash_logout" 文件中添加下面这行"rm -f $HOME/.bash_history" 。这样,当用户每次注销时,“.bash_history”文件都会被删除.
$HISTSIZE 设置bash会员期间历史包含的命令数量
$HISTFILESIZE 设置历史文件中实际存储的命令数量
$HISTFILE bash启动的时候会读取~/.bash_history文件并载入到内存中,这个变量就用于设置.bash_history文件,bash退出时也会把内存中的历史回写到.bash_history文件
清空当前会话缓存里历史命令 history -c 要想彻底清空历史命令,需要先将 .bash_history的内容删除,接着使用 history -c, 这样才会彻底清空命令历史。

HISTSIZE:shell进程的缓冲区保留的历史命令的条数;
HISTFILESIZE:命令历史文件可保存的历史命令的条数;
HISTIGNORE="str1:str2:…"忽略string1,string2历史;

history -w 让bash将历史命令立即从内存写到.bash_history文件
history -a 将目前新增的 history 历史命令写入.bash_history文件

history 命令常见用法 ?
语法:

history [n | -c | -rnaw histfile]
参数:

n:数字,列出最近的 n 条历史命令
-c:将当前shell 缓存中的 history 内容全部清除
-a:将当前shell缓存中的history 内容append附加到 histfile 中,如果没有指定 histfile,则默认写入 ~/.bash_histroy;-a:将bash 内存中历史命令追加到 .bash_history 历史命令文件中, 默认只有退出 shell 是才会保存
-r:将 histfile 中的内容读取到当前shell的缓存中;-r:读取历史文件到历史列表(将 .bash_history重新读取一遍,写入到当前bash进程的内存中)
-w:将当前shell缓存的history历史列表写入到指定的文件;-w:保存历史列表到指定的历史文件(history -w /PATH/TO/SOMEFILE 将内存中命令执行的历史列表保存到指定的 /PATH/TO/SOMEFILE中)
-a: 追加本次会话新执行的命令历史列表至历史文件,因为多终端所以如果想看当前都发生了什么操作就可以执行-a进行查看
-n: 读历史文件(本地数据)中未读过的行到历史列表(内存数据)
-r: 读历史文件(本地数据)附加到历史列表(内存数据)
-w: 保存历史列表(内存数据)到指定的历史文件(本地数据)
-s: 展开历史参数成一行,附加在历史列表后。用于伪造命令历史

http://blog.51cto.com/skypegnu1/1941153  

  利用history命令,可以使每个登录会话只看到自己的命令历史记录,这样即保证安全,又方便使用。即使是同一个用户的不同会话,也要保证同一个用户的各个会话只能看到自己的历史记录。不方便的是,你每次登录进去,都是一个新的会话,就看不到任何的history记录。

  • HISTCONTROL:如果设置为 ignorespace, 以 space 开头的行将不会插入到历史列表中。如果设置为 ignoredups, 匹配上一次历史记录的行将不会插入。设置为 ignoreboth 会结合这两种选项。如果没有定义,或者设置为其他值,所有解释器读取的行都将存入历史列表,但还要经过 HISTIGNORE 处理。这个变量的作用可以被 HISTIGNORE 替代。多行的组合命令的第二和其余行都不会被检测,不管 HISTCONTROL 是什么,都会加入到历史中。
  • HISTFILE:保存命令历史的文件名 (参见下面的 HISTORY 历史章节)。默认值是 ~/.bash_history。如果取消定义,在交互式 shell 退出时命令历史将不会保存。
  • HISTFILESIZE:历史文件中包含的最大行数。当为这个变量赋值时,如果需要的话,历史文件将被截断来容纳不超过这个值的行。默认值是 500。历史文件在交互式 shell 退出时也会被截断到这个值。
  • HISTIGNORE:一个冒号分隔的模式列表,用来判断那个命令行应当保存在历史列表中。每个模式都定位于行首,必须匹配整行 (没有假定添加 ‘*’)。在 HISTCONTROL 指定的测试结束后,这里的每个模式都要被测试。除了平常的 shell 模式匹配字符, ‘&’ 匹配上一个历史行。‘&’ 可以使用反斜杠来转义;反斜杠在尝试匹配之前将被删除。多行的组合命令的第二行以及后续行都不会被测试,不管 HISTIGNORE 是什么,都将加入到历史中。
  • HISTSIZE:命令历史中保存的历史数量 (参见下面的 HISTORY 历史章节)。默认值是 500。

  

实例来自https://blog.csdn.net/m0_38020436/article/details/78730631
设置uid大于等于500的用户的history安全性
需求:
记录统一转移到/var/history目录下;
用户无法删除自己的history文件,无法清空history;
多个终端共享history,实时追加;
限制history文件大小和保存的条数;
举例用户,lionel;uid=523

1)配置全局环境变量文件/etc/profile
# vi /etc/profile //添加以下内容
# add by coolnull
if [ $UID -ge 500 ];then
readonly HISTFILE=/var/history/$USER-$UID.log
readonly HISTFILESIZE=50000
readonly HISTSIZE=10000
readonly HISTTIMEFORMAT='%F %T '
readonly HISTCONTROL=ignoredups
shopt -s histappend # 这条配置,就可以使一个终端的用户监控到另一个终端用户输入的命令内容
readonly PROMPT_COMMAND="history -a"
fi 创建目录结构
# mkdir /var/history 配置目录权限,使得用户有权限创建自己的history文件
# chmod 777 /var/history
# chmod a+t /var/history 2)限制用户删除自己的history文件
# chattr +a /var/history/lionel-522.log 3)限制用户修改自己主目录的环境变量配置文件
# chattr +a /home/lionel/.bash* # lsattr /home/lionel/.bash*
-----a------- /home/lionel/.bash_logout
-----a------- /home/lionel/.bash_profile
-----a------- /home/lionel/.bashrc 4)禁止普通用户切换到系统中其他shell环境(一般包括csh,tcsh,ksh)
# chmod 750 tcsh(csh是tcsh的软连接,设置tcsh就可以了)
# chmod 750 /bin/ksh 普通帐号测试
[zhangfei@node1 ~]$ tcsh
-bash: /bin/tcsh: Permission denied
[zhangfei@node1 ~]$ ksh
-bash: /bin/ksh: Permission denied

Bash Shell 中的 PROMPT_COMMAND的含义:每天命令执行前,先执行Bash Shell 中的 PROMPT_COMMAND命令。

https://jaminzhang.github.io/shell/PROMPT-COMMAND-in-bash-shell/

http://blog.51cto.com/chenchao40322/411855

参考shell十三问:http://wiki.jikexueyuan.com/project/13-questions-of-shell/double-single.html

参考:

1、https://blog.csdn.net/m0_38020436/article/details/78730631

2、http://xiaqunfeng.cc/2017/01/11/Linux%E5%91%BD%E4%BB%A4%E2%80%94%E2%80%94history%E5%8F%8A%E5%85%B6%E4%BC%98%E5%8C%96/

3、https://askubuntu.com/questions/80371/bash-history-handling-with-multiple-terminals  如何保存多个终端会话的历史命令

linux的history命令设置的更多相关文章

  1. Linux下history命令用法

    如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...

  2. 【转】Linux下history命令用法

    转自:http://blog.sina.com.cn/s/blog_5caa94a00100gyls.html 如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你 ...

  3. linux下history命令显示历史指令记录的使用方法

    Linux系统当你在shell(控制台)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中.默认保存1000条,你也可以更改这个值 ...

  4. Linux下history命令详解---转载

    Linux下History命令主要用于显示历史指令记录内容, 下达历史纪录中的指令 . >History命令语法:[www.linuxidc.com@linux]# history [n][ww ...

  5. [Linux] 关于 history 命令的简单使用

    1. 如果不想记录当前 会话操作的命令的话 可以使用命令 set +o history 但是这个命令有一个坏处, 他自己被记住了... 2. 还有一个办法 就是 在退出登录之前执行命令 history ...

  6. Linux:history命令详解

      Linux下History命令 主要用于显示历史指令记录内容, 下达历史纪录中的指令 . 语法 history [n] history [-c] history [-raw] histfiles ...

  7. linux中history命令使用与配置

    history中设置显示命令的执行时间 vi /root/.bashrc HISTTIMEFORMAT="%Y-%M-%D %H:%M:%S" export HISTTIMEFOR ...

  8. 修改linux系统history命令的条数和格式

    在一次测试环境遇到的情况,发现服务莫名其妙挂了,以为服务有bug,查了一下午,后来一个同事说,是我把服务关了啊.... 是可忍孰不可忍,原生的history命令,只能看到输入的命令历史,看不到什么时候 ...

  9. linux下history命令显示执行时间

    想在输入history命令之后,显示自己历史的命令执行的时间,需要在用户目录下~/.bashrc的文件末尾追加添加如下几行 之前一直想看一下自己历史命令执行的时间,找了很多教程都没有卵用,最终参考了如 ...

随机推荐

  1. #ifndef、#def、#endif说明

    你所遇到的这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一 部分内容指定编译的条件,这就是“条件编译”.有时,希望 ...

  2. BZOJ 5334: [Tjoi2018]数学计算

    线段树裸题 难度在于认识到这个没法线性做 #include<cstdio> using namespace std; int n,mod,tr[400005]; void insert(i ...

  3. UVa 12167 & HDU 2767 强连通分量 Proving Equivalences

    题意:给出一个有向图,问最少添加几条有向边使得原图强连通. 解法:求出SCC后缩点,统计一下出度为0的点和入度为0的点,二者取最大值就是答案. 还有个特殊情况就是本身就是强连通的话,答案就是0. #i ...

  4. 光学字符识别OCR-2

    灰度聚类 接着我们就对图像的色彩进行聚类.聚类的有两个事实依据:         1.灰度分辨率   肉眼的灰度分辨率大概为40,因此对于像素值254和255,在我们肉眼看来都 只是白色:       ...

  5. 十分钟了解HTTP协议

    概念 HTTP(Hypertext Transfer Protocol,超文本传输协议)是TCP/IP协议的应用(封装). HTTP协议是单向通讯,无状态,主要应用于B/S模型的网络软件,客户端一(多 ...

  6. 组合数学之Polya计数 TOJ1116 Let it Bead

    1116: Let it Bead  Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByteTotal Submit: 7 ...

  7. Educational Codeforces Round 20 B. Distances to Zero

    B. Distances to Zero time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  8. JS实现并集,交集和差集

    var set1 = new Set([1,2,3]);var set2 = new Set([2,3,4]); 并集let union = new Set([...set1, ...set2]); ...

  9. QTREE系列题目总结

    $QTREE$ 就是一套树上数据结构练习题. 这套题貌似来源于 $SPOJ$,我是在 $luogu$ 看到的. $QTREE1$ 题意 一棵 $n$ 个点的带边权树,要求支持 单边改权值 和 询问路径 ...

  10. 区间合并 POJ3667+HDU4553

    两道题都是线段树的区间合并 lsum, rsum分别表示左/右端点 开始向右/左 符合条件的元素的最长连续长度 sum表示这个区间的符合条件的元素的最长连续长度 所以pushUp可写: void pu ...