Linux系统之fc命令的基本使用
- 一、fc命令介绍
- 1.1 fc命令简介
- 1.2 fc命令用途
- 二、fc命令的帮助信息
- 2.1 fc的man帮助
- 2.2 fc命令的使用帮助
- 2.3 fc命令与history命令区别
- 三、fc命令的基本使用
- 3.1 显示最近执行的命令
- 3.2 指定序号查询历史命令
- 3.3 使用vim编辑第n条历史命令
- 3.4 替换上次执行命令的某个字符串
- 四、fc命令的注意事项
- 五、总结
一、fc命令介绍
1.1 fc命令简介
fc命令是一个非常实用的命令,可以帮助我们查找、编辑和执行历史命令。
1.2 fc命令用途
-
显示历史列表中的命令。
-
编辑并重新执行历史列表的命令。
二、fc命令的帮助信息
2.1 fc的man帮助
《man手册》(Manual pager documentation)是Unix-like操作系统中的一种在线帮助工具,用于浏览和搜索命令行程序的手册页(man page)。它由Brian Kernighan和Dennis Ritchie于1971年创造,被广泛应用于各种Unix和类Unix系统上。执行以下命令,我们查询man手册中fc帮助信息。
man fc
2.2 fc命令的使用帮助
- 选项
-e ename 选择使用的编辑器,默认调用次序为环境变量`FCEDIT`、环境变量`EDITOR`、`vi`。
-l 列出而不是编辑。
-n 列出时不输出行号(需配合-l选项)。
-r 倒序列出命令,最近执行的先列出(需配合-l选项)。
-s [pat=rep] [command] command(未指定时为最后执行的命令)将在pat替换为rep后重新执行。
-t <历史命令编号>:执行历史命令编号指定的命令,但不将其添加到历史记录中。
- 参数
first:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为前一个命令并且偏移量为-16(最近的16条命令)。
last:可选;可以是字符串(以该字符串开头的最新命令)、数字(历史列表索引,负数代表当前命令号的偏移);未指定时设置为参数first。
2.3 fc命令与history命令区别
history命令偏向于查看和检索历史命令,而fc命令则在查看的基础上增加了编辑和即时执行的功能,更加灵活强大,适用于需要对历史命令进行细致操作的场景。
三、fc命令的基本使用
3.1 显示最近执行的命令
使用
-l
选项,列出最近执行的命令,默认是查询最近执行的16条命令。
[root@jeven ~]# fc -l
986 systemctl status httpd
987 systemctl stop firewalld && systemctl disable firewalld
988 cd /var/www/html/
989 ls\
990 ls
991 git clone https://github.com/gd4Ark/star-battle.git
992 ls
993 unzip star-battle-master.zip
994 ls
995 mv star-battle-master star-battle
996 ls
997 tree -L 1 star-battle
998 tree -L 2 star-battle
999 systemctl restart httpd
1000 ls
1001 fc -l 12
倒序查看,加上-r选项。
[root@jeven ~]# fc -l -r
1002 fc -l
1001 fc -l 12
1000 ls
999 systemctl restart httpd
998 tree -L 2 star-battle
997 tree -L 1 star-battle
996 ls
995 mv star-battle-master star-battle
994 ls
993 unzip star-battle-master.zip
992 ls
991 git clone https://github.com/gd4Ark/star-battle.git
990 ls
989 ls\
988 cd /var/www/html/
987 systemctl stop firewalld && systemctl disable firewalld
3.2 指定序号查询历史命令
在-l选项后面,加上开始序号和结束序号,查看这个区间的历史执行命令。
[root@jeven ~]# fc -l 500 510
500 ls
501 cd
502 docker run -itd --name test01 -h con01 --network=bridge centos:7.6
503 docker run hello-world
504 sudo systemctl daemon-reload && systemctl restart docker
505 sudo echo aa > test.aa
506 ls
507 docker ps
508 docker run -itd --name test01 -h con01 --network=bridge centos:7.6
509 docker run -itd --name test01 -h con01 --network=bridge centos:7
510 docker ps
3.3 使用vim编辑第n条历史命令
查询最后一次执行的命令为
ls /tmp
[root@jeven ~]# ls /tmp
clr-debug-pipe-8964-1534-in
clr-debug-pipe-8964-1534-out
dotnet-diagnostic-8964-1534-socket
systemd-private-0d92e915344242af95072eb065c418ab-bolt.service-3CqP86
systemd-private-0d92e915344242af95072eb065c418ab-chronyd.service-zOEnpD
systemd-private-0d92e915344242af95072eb065c418ab-colord.service-jUk2sY
systemd-private-0d92e915344242af95072eb065c418ab-cups.service-3eUtDi
systemd-private-0d92e915344242af95072eb065c418ab-httpd.service-NGOJRE
systemd-private-0d92e915344242af95072eb065c418ab-rtkit-daemon.service-5mnV6w
vmware-root_8987-3852964261
[root@jeven ~]# fc -l
990 ls
991 git clone https://github.com/gd4Ark/star-battle.git
992 ls
993 unzip star-battle-master.zip
994 ls
995 mv star-battle-master star-battle
996 ls
997 tree -L 1 star-battle
998 tree -L 2 star-battle
999 systemctl restart httpd
1000 ls
1001 fc -l 12
1002 fc -l
1003 fc -l -r
1004 fc -l 500 510
1005 ls /tmp
使用-e选项,编辑第1005序号的历史命令ls /tmp,修改为cd /tmp ,退出编辑时,会自动执行编辑后的历史命令。
[root@jeven ~]# fc -e vim 1005
cd /tmp
[root@jeven tmp]#
3.4 替换上次执行命令的某个字符串
使用-s选项,将上一条命令中的old字符串替换为new字符串,并执行替换后的命令。
[root@jeven ~]# fc -s ls=cd
cd /tmp
[root@jeven tmp]#
四、fc命令的注意事项
-
fc命令默认使用vi编辑器,如果需要使用其他编辑器,如nano、emacs等,可以在命令中添加-e选项,如fc -e nano。
-
fc命令默认编辑并执行上一条命令,如果需要编辑并执行其他历史命令,可以在命令中添加数字参数,如fc 123可以编辑并执行历史命令号为123的命令。
-
fc命令可以用来执行之前执行过的命令,但是它不能修改已经执行过的命令。如果需要修改已经执行过的命令,可以使用其他编辑器命令如sed、awk等。
-
当使用fc命令时,需要确保执行过的命令的历史记录已经被保存在命令历史记录文件中。如果历史记录文件被删除或禁用了命令历史记录功能,fc命令将无法正常使用。
-
在编辑完命令后,需要保存文件并退出编辑器才能执行命令。
-
fc命令可以使用很多选项来执行不同的操作,例如-l选项可以列出命令历史记录,-n选项可以输出编辑后的命令,但是这些选项只能在使用了-e选项后才能使用。
五、总结
fc
命令在Linux中提供了一种便捷的方式来回顾、修改并立即重新执行历史命令,通过直接跳转到文本编辑器的交互式体验,提升了命令行操作的灵活性和效率,尤其适合于调试复杂数步操作或重复使用已有命令片段的场景。