linux中Shell历史命令记录文件的路径是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中Shell历史命令记录文件的路径是啥相关的知识,希望对你有一定的参考价值。

参考技术A

现在大多数的Linux系统都使用bash作为默认的shell吧,下面就介绍一下bash的history命令管理功能吧,history命令可以回顾,修改和重用之前使用过的历史命令。

1.一些变量说明:

$HISTFILE bash启动的时候会读取~/.bash_history文件并载入到内存中,这个变量就用于设置.bash_history文件,bash退出时也会把内存中的历史回写到.bash_history文件

$HISTSIZE 设置bash会员期间历史包含的命令数量

$HISTFILESIZE 设置历史文件中实际存储的命令数量

2.显示历史命令

history 显示全部历史

history 数字 显示之前执行过的若干命令,例:history 2 显示执行过的上两条命令

使用上下箭头键也可以查看上一条根下一条命令,

3.运行历史命令

!! 运行上一条命令

!88 运行第88条命令

!88 /test 运行第88条命令并在命令后面加上/test

!?CF? 运行上一个包含CF字符串的命令

!ls 运行上一个ls命令

!ls:s/CF/l 运行上一个ls命令,其中把CF替换成l

fc 编辑并运行上一个历史命令

fc 66 编辑并运行第66个历史命令

fc -e /usr/bin/vim 66 使用vim编辑第66个命令并运行

4.搜索历史命令

使用ctrl+r搜索历史中的字符串,重复按ctrl+r可以在历史命令列表中不断的向前搜索包含字符串的命令,回车就会执行查找的命令

5.清空历史命令

history -c

6.写history

history -w 让bash将历史命令立即从内存写到.bash_history文件

history -a 将目前新增的 history 历史命令写入.bash_history文件

7.history历史命令记录删除

修改/etc/profile将HISTSIZE=1000改成0或1

清除用户home路径下.bash_history

8.history配置

运行 set | grep HISTFILE

显示:HISTFILE=/root/.bash_history

HISTFILESIZE=1000

在.bash_profile文件中添加

HISTFILE=/root/history

export HISTFILE

重新登录后历史命令都会写入到/root/history文件中

其余的一些设置可以在.bashrc文件中设置

export HISTCONTROL=ignoredups #忽略重复的命令

export HISTIGNORE=”[ ]*:&:bg:fg:exit” #忽略由冒号分割的这些命令

export HISTFILESIZE=1000 #设置保存的历史命令的文件大小

export HISTSIZE=100 #设置保存的历史命令的条数

技巧:

shopt -s histappend 在shell中执行这个命令可以使shell保存历史命令的时候使用追加的方式,因为默认是覆盖,在多终端的清空下,最后退出的终端灰覆盖以前的历史记录

在history历史记录中显示时间和执行命令的用户 echo ‘export HISTTIMEFORMAT=”%F %T `whoami` “‘ >> /etc/profile

shell特性

记录命令历史

我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。

与命令历史有关的有一个有意思的字符那就是 ‘!’ 了。常用的有这么几个应用:

1) 连续两个 ‘!’, 表示执行上一条指令;

[[email protected] ~]# pwd /root [[email protected] ~]# !! pwd /root

2) !n 这里的n数字,表示执行命令历史中第n条指令,例如 !1002 表示执行命令历史中第1002个命令;

[[email protected] ~]# history |grep 1002 1002  pwd 1015  history |grep 1002 [[email protected] ~]# !1002 pwd /root

history 命令如果未改动过环境变量,默认可以把最近1000条命令历史打印出来。

3) !字符串 (字符串大于等于1),例如 !pw 表示执行命令历史中最近一次以 ‘pw’ 为开头的指令

[[email protected] ~]# !pw pwd /root

  1. 指令和文件名补全

最开始阿铭就介绍过这个功能了,记得吗?它就是按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名。

连续按两次tab键,系统则会把所有的指令或者文件名都列出来。

  1. 别名

前面也出现过alias的介绍,这个就是bash所特有的功能之一了。我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。

如果不想用了,还可以用unalias解除别名功能。直接敲alias会看到目前系统预设的alias.

系统预设的alias指令也就这几个而已,你也可以自定义你想要的指令别名。alias语法很简单,

语法: alias [命令别名]=[‘具体的命令‘]

[[email protected] ~]# alias qiangzi=‘pwd‘ [[email protected] ~]# qiangzi /root [[email protected] ~]# unalias qiangzi [[email protected] ~]# qiangzi bash: qiangzi: command not found

使用 unalias 命令别名 就可以把设置的别名给解除了。

  1. 通配符

在bash下,可以使用 来匹配零个或多个字符,而用 ? 匹配一个字符。

[[email protected] ~]# ls -d test* test1.txt  test2  test3  test.pl  test.txt [[email protected] ~]# ls -d test? test2  test3

  1. 输入输出重定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。

输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>

[[email protected] ~]# echo "123" >1.txt

[[email protected] ~]# echo "123" >>1.txt

[[email protected] ~]# cat 1.txt

123

123

  1. 管道符

前面已经提过过管道符 “|”, 就是把前面的命令运行的结果丢给后面的命令。

[[email protected] ~]# cat /etc/passwd|wc -l

24

wc -l 命令是列出文件行数

  1. 作业控制

当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)。

[[email protected] ~]# vi test1.txt testtestsstststst

使用 “vi” 编辑test1.txt, 随便输入一些内容,按 “ESC" 后,使用 "Ctrl + z” 使任务暂停:

[[email protected] ~]# vi test1.txt [1]+  Stopped                 vi test1.txt

可以看到提示 “vi test1.txt” 已经停止了,然后使用fg命令恢复它,此时又进入刚才的 “vi” 窗口了。再次使其暂停,然后输入 jobs, 可以看到在被暂停或者在后台运行的任务:

[[email protected] ~]# jobs [1]+  Stopped                 vi test1.txt

如果想把暂停的任务丢在后台跑起来,就使用bg命令:

[[email protected] ~]# bg [1]+ vi test1.txt & [1]+  Stopped                 vi test1.txt

但是 vi 似乎并不支持在后台运行,那换一个其他的命令:

[[email protected] ~]# vmstat 1 > /tmp/1.log ^Z [2]+  Stopped                 vmstat 1 > /tmp/1.log [[email protected] ~]# jobs [1]-  Stopped                 vi test1.txt [2]+  Stopped                 vmstat 1 > /tmp/1.log [[email protected] ~]# bg 2 [2]+ vmstat 1 > /tmp/1.log &

在上面的例子中,又有一个新的知识点需要知道.

那就是多个被暂停的任务会有编号,使用 jobs 命令可以看到两个任务,那么使用bg或者fg的时候,就需要在后面加一个编号了,使用 bg 2 把第二个被暂停的任务丢到后台跑起来了,丢入后台需要使用在命令后边加一个 符号,中间有个空格。本例中的 vmstat 1 这个是用来观察系统状态的一个命令

丢到后台的任务如何关掉呢?如果你没有退出刚才的shell, 那么先使用 fg 编号 把任务调到前台,然后使用 “Ctrl + c” 结束任务:

[[email protected] ~]# fg 2 vmstat 1 > /tmp/1.log ^C

另一种情况则是,关闭到当前的shell, 再次打开另一个shell时,使用jobs命令并不会显示在后台运行或者被暂停的任务,要想停掉它的话,则需要先知道其pid, 然后使用kill命令杀死那个进程。

[[email protected] ~]# vmstat 1 > /tmp/1.log & [1] 9433 [[email protected] ~]# ps aux |grep vmstat root      9433  0.0  0.0   6180   516 pts/2    S    09:57   0:00 vmstat 1 root      9435  0.0  0.0 103308   848 pts/2    S+   09:58   0:00 grep vmstat

使用 & 把任务丢入后台运行,它会显示pid信息,如果忘记这个pid,我们还可以使用 ps aux 命令找到那个进程,想结束掉该进程,需要使用 kill 命令:

[[email protected] ~]# kill 9433 [1]+  已终止               vmstat 1 > /tmp/1.log

kill命令语法很简单,直接在后面加pid即可,如果遇到杀不死的进程时,可以在kill 后面加一个选项: kill-9 [pid]


本文出自 “12350027” 博客,谢绝转载!

以上是关于linux中Shell历史命令记录文件的路径是啥的主要内容,如果未能解决你的问题,请参考以下文章

linux 命令基础

linux怎么清除history记录

linux命令 $- 是啥意思

linux的shell学习笔记

Linux基础命令- history

Linux命令行history