引子:今天devops的同事给介绍了一个好用的功能,在linux里,使用history可以输出之前的命令行履历,使用!行号,就可以直接调出之前的命令执行,或者敲tab键再次输入该命令,调整或回车执行,很好用的功能,特意搜索整理下常用功能,方便使用。
1 查看命令历史:
# 显示之前执行的命令及其对应的行号
history
2 执行特定行号的命令:
# !行号
# 执行123行的命令
!123
3 执行最后一条命令:
# 重新执行上一次输入的命令
!!
4 执行以特定字符串开头的命令:
# !字符串
# 执行最近一次以 ls 开头的命令
!ls
5 引用最近命令的参数:
# 引用最近命令的最后一个参数:
# !$
# ls !$ 会展开为 ls foo。
echo foo
ls !$
# 引用最近命令的第一个参数:
# !^
# mv !^ directory/ 会展开为 mv file1 directory/。
cp file1 file2
mv !^ directory/
6 替换命令中的字符串:
# ^old^new
# 会执行 echo "hello universe"。
echo "hello world"
^world^universe
7 指定历史记录中的某个单词:
# !命令号:参数位置
# echo !123:2 会展开为 echo file2。
ls file1 file2 file3
echo !123:2
8 不执行命令,仅显示命令:
# !行号:p
# 会显示编号为 123 的命令,但不执行。
!123:p
9 组合使用替换和参数指定:
# !-2:1 会引用倒数第二条命令的第一个参数,即 file1,所以 mv !-2:1 newfile 会展开为 mv file1 newfile。
cp file1 file2
mv !-2:1 newfile
几个常用的示例:
1 ls -l
2 cd /var
3 cp file1 file2
4 echo "Hello, World!"
# 结果是 cp file1 file2
!3
# 结果是 echo "Hello, World!"
!!
# 结果是 cp file1 file2
!cp
# 假设上一条命令是 echo "Hello, World!",结果是 World!"
!$
# 结果是 /var
!2:1
补充:
1 在命令前加 #
可以阻止命令被记录到历史中:
# secret_command
2 使用 HISTSIZE
和 HISTFILESIZE
可以设置历史记录的大小:
export HISTSIZE=1000
export HISTFILESIZE=2000