菜鸟科技网

aix history命令

history 命令是几乎所有现代 Unix/Linux shell(包括 AIX 上的 KornShell - ksh)都内置的一个非常有用的功能,它用于记录、显示和管理用户在当前会话中执行过的命令历史。

aix history命令-图1
(图片来源网络,侵删)

基本用法

最简单的用法就是直接输入 history 命令。

history

这会显示当前会话中执行过的所有命令列表,每条命令前带有一个数字(历史记录编号)。

示例输出:

  101  ls -l
  102  cd /tmp
  103  pwd
  104  vi myscript.ksh
  105  history

常用选项

history 命令本身有一些选项,但更强大的功能通常与 fc (fix command) 命令结合使用。

aix history命令-图2
(图片来源网络,侵删)

history -n

显示最近 n 条命令。

# 显示最近5条命令
history -5

示例输出:

  106  ls -l /etc
  107  ps -ef | grep root
  108  df -h
  109  history -5
  110  history

history -c

清除当前会话的命令历史记录。

history -c
history  # 再执行,会发现列表为空

注意:这只会清除内存中的当前会话历史,不会清除历史文件。

aix history命令-图3
(图片来源网络,侵删)

history -r

从历史文件中读取命令,并将其添加到当前历史列表的末尾,这通常在启动一个新的 shell 时由系统自动完成。

核心功能:执行历史命令

history 命令真正的威力在于如何快速地重新执行或编辑之前的命令,这通常通过 、!n!string 等事件指定符(Event Designators)来实现。

(双感叹号)

执行上一条命令。

# 假设你刚执行了一个很长的命令,但忘了加 sudo
vi /etc/profile
# 系统提示权限不足,你可以用 !! 快速重新执行并加上 sudo
sudo !!

这会执行 sudo vi /etc/profile

!n (感叹号 + 数字)

执行历史记录中编号为 n 的命令。

# 从 history 输出中找到命令编号
#   105  vi myscript.ksh
# 重新执行第105条命令
!105

!string (感叹号 + 字符串)

执行历史记录中最近一个以 string 开头的命令。

# 假设你之前执行过 ps -ef
# 现在想再次执行
!ps

这会执行 ps -ef

!?string? (感叹号 + 问号 + 字符串 + 问号)

执行历史记录中最近一个包含 string 的命令。

# 假设你之前执行过 grep "error" /var/log/messages
# 现在想再次执行
!?error?

这会执行 grep "error" /var/log/messages

^old^new (插入符替换)

快速替换上一条命令中的 oldnew 并执行。

# 假设你输错了目录
cd /usr/local/bin
# 但你想去 /usr/local/sbin
# 你可以不用重输整个命令,直接替换
^local^local/sbin

这会执行 cd /usr/local/sbin

(感叹号 + 美元符号)

使用上一条命令的最后一个参数。

# 假设你刚执行了一个命令,其参数是一个很长的路径
ls -l /very/long/path/to/a/specific/file.log
# 现在你想用 `vim` 打开同一个文件
vim !$

这会执行 vim /very/long/path/to/a/specific/file.log

配置历史记录

history 命令的行为由环境变量控制,你可以在用户的配置文件(通常是 ~/.profile~/.kshrc)中设置这些变量。

HISTSIZE / HISTFILESIZE

  • HISTSIZE: 定义了当前 shell 会话中可以保存多少条历史命令(内存中的历史记录数量)。
  • HISTFILESIZE: 定义了历史文件(~/.sh_history)中可以保存多少条历史命令。

在 AIX 的 KornShell 中,这两个变量通常是同一个,在 ~/.profile 中设置:

# 设置历史记录文件大小为1000条
HISTSIZE=1000
export HISTSIZE

HISTFILE

指定历史记录文件的路径,默认通常是 ~/.sh_history

# 在 ~/.profile 中设置
HISTFILE=/home/myuser/.my_history
export HISTFILE

EDITOR

指定用于编辑历史命令的文本编辑器,当使用 fc 命令时,会调用这个编辑器。

# 在 ~/.profile 中设置
export EDITOR=vi

fc (Fix Command) 命令

fchistory 的一个互补命令,提供了更强大的编辑和执行历史命令的功能。

fc -l

列出历史记录,功能和 history 类似。

fc -l

fc -e vi

打开一个 vi 编辑器,里面包含了最近执行的一条命令,你可以修改它,然后保存退出,shell 就会执行编辑后的命令。

fc -e - old_command

重新编辑并执行 old_command

# 假设你想修改并重新执行第105条命令
fc -e - 105

fc old new

编辑并执行从 oldnew 编号之间的所有命令。

# 编辑并执行从 100 到 105 的所有命令
fc 100 105

持久化与安全

历史记录文件在哪里?

在 AIX 上,历史记录默认保存在用户主目录下的 .sh_history 文件中。

ls -la ~/.sh_history

安全注意事项

.sh_history 文件会记录你输入过的所有命令,包括可能包含密码、敏感信息或密钥的命令,需要注意:

  1. 文件权限:确保 .sh_history 文件的权限设置正确,只有你本人可以读写。
    chmod 600 ~/.sh_history
  2. 敏感命令:尽量避免在命令行中直接输入密码,如果必须,可以在执行后立即从历史记录中删除。
    # 执行了一个包含密码的命令后,从历史记录中删除它
    history -d <历史记录编号>
  3. 清除历史:当你使用一个共享账户或在不安全的环境下操作时,在退出 shell 之前执行 history -c 来清除内存中的历史记录,并可以考虑清空或删除历史文件。
功能/命令 描述
history 显示所有历史命令
history -n 显示最近 n 条命令
history -c 清除当前会话历史
执行上一条命令
!n 执行编号为 n 的命令
!string 执行最近以 string 开头的命令
!?string? 执行最近包含 string 的命令
^old^new 替换上一条命令中的 oldnew 并执行
使用上一条命令的最后一个参数
fc -l 列出历史记录 (类似 history)
fc -e vi vi 编辑并执行最近的一条命令
HISTSIZE / HISTFILE ~/.profile 中配置历史记录的大小和路径

掌握 history 命令及其相关技巧,可以极大地提高你在 AIX 系统上的命令行操作效率。

分享:
扫描分享到社交APP
上一篇
下一篇