shell-001命令历史

本文深入解析了Bash shell中的历史命令功能,包括如何通过history命令查看和操作命令历史,如何利用!!、!n和!word等快捷方式快速执行历史记录中的命令,以及如何配置HISTSIZE和HISTTIMEFORMAT等变量来定制历史命令的存储和显示方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

history命令,-r和-w
.bash_history
最大1000条
变量HISTSIZE
/etc/profile中修改
HISTTIMEEFORMAT="%Y%m%d %H:%M:%S"
永久保存chattr +a ~/.bash_history
!!
!n
!word
[root@localhost ~]#grep -rn "HISTFILESIZE"  #命令或变量找不见时可以搜索
[root@localhost ~]#history -r #将文件中的命令记忆读出到当前内存,一般登录时候会自定进行
[root@localhost ~]#history -w #将目前内存中的命令写入到history文件,一般登出时候会自定进行
[root@localhost ~]# ls /root/.bash_history
[root@localhost ~]# cat !$ #关机再保存,‘!’, 表示执行上一条指令
[root@localhost ~]# echo $HISTSIZE #history 命令如果未改动过环境变量,默认可以把最近1000条命令历史打印出来。 1000
[root@localhost ~]# history -c #清空内存命令,不能清空配置文件
[root@localhost ~]# vim  /etc/profile #然后使用/HISTSIZE搜索HISTSIZE,修改HISTSIZE大小为5000
[root@localhost ~]# source /etc/profile #使命令生效,或者重启终端
[root@localhost ~]# echo $HISTSIZE    #5000
[root@localhost ~]# HISTTIMEFORMAT="%Y%m%d %H:%M:%S"
[root@localhost ~]# echo $HISTTIMEFORMAT #同样可以在/etc/profile 里面设置%Y%m%d %H:%M:%S
[root@localhost ~]# history
    1  20180813 19:49:09cd
    2  20180813 19:49:09ls /root
    3  20180813 19:49:09mkdir /root/.ssh
   ......
[root@localhost ~]# chattr +a ~/.bash_history #a权限,只能追加,不能删除,就不用设置HISTSIZE

1) !! 执行和显示上一次命令的结果

[root@localhost ~]# pwd
/root
[root@localhost ~]# !!
pwd
/root

2) !n 这里的n是数字,表示执行命令历史中第n条指令

[root@localhost ~]# history |grep 1002 
1002 pwd
1015 history |grep 1002
[root@localhost ~]# !1002 #例如 !1002 表示执行命令历史中第1002个命令;
pwd
/root

3) !字符串 (字符串大于等于1),执行以字符串开头的最近命令

[root@localhost ~]# !pw 例如 !pw 表示执行命令历史中最近一次以 ‘pw’ 为开头的指令。
pwd
/root

补充:

source命令:重新执行刚修改的初始化文件,使之立即生效,如:source /etc/profile  #source filename . filename

source filename 与 sh filename 及./filename执行脚本的区别在那里呢?

1.当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有"."是用来表示当前目录的。  #因为脚本下就是第一句话就是创建一个子shell   #!/bin/bash
2.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
3.source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面
举例说明:
1.新建一个test.sh脚本,内容为:A=1
2.然后使其可执行chmod +x test.sh
3.运行sh test.sh后,echo $A,显示为空,因为A=1并未传回给当前shell
4.运行./test.sh后,也是一样的效果  # 开头#!/bin/bash
5.运行source test.sh 或者 . test.sh,然后echo $A,则会显示1,说明A=1的变量在当前shell中

w命令-->用来查看登录者的信息及他们的行为

[root@localhost ~]# w 
 20:44:12 up 56 min,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      19:48   56:12   0.05s  0.05s -bash
root     pts/0    192.168.224.1    19:49    4.00s  0.38s  0.01s w

备注:

1) 区别于who命令,w命令不仅可以看到登录服务器的用户信息,而且可以看到这些用户做了什么
2) who am i命令,显示出自己在系统中的用户名,登录终端,登录时间
3) whoami命令,显示自己在系统中的用户名
4) logname命令,可以显示自己初次登录到系统中的用户名,主要识别sudo前后情形
5) last命令,查看最近1个月用户登录服务器的情况 
6) tty命令,来查看所连接的设备或终端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值