给Linux 初学者的fc示例教程

系统 Linux
fc (Fix Commands 的缩写)是个 shell 内置命令,用于在交互式 shell 里列出、编辑和执行最近输入的命令。你可以用你喜欢的编辑器编辑最近的命令并再次执行,而不用把它们整个重新输入一遍。除了可以避免重复输入又长又复杂的命令,它对修正拼写错误来说也很有用。

[[226998]]

fcFix Commands 的缩写)是个 shell 内置命令,用于在交互式 shell 里列出、编辑和执行最近输入的命令。你可以用你喜欢的编辑器编辑最近的命令并再次执行,而不用把它们整个重新输入一遍。除了可以避免重复输入又长又复杂的命令,它对修正拼写错误来说也很有用。因为是 shell 内置命令,大多 shell 都包含它,比如 Bash 、 Zsh 、 Ksh 等。在这篇短文中,我们来学一学在 Linux 中使用 fc 命令。 

fc 命令教程及示例 

列出最近执行的命令

执行不带其它参数的 fc -l 命令,它会列出最近 16 个命令。

  1. $ fc -l
  2. 507 fish
  3. 508 fc -l
  4. 509 sudo netctl restart wlp9s0sktab
  5. 510 ls -l
  6. 511 pwd
  7. 512 uname -r
  8. 513 uname -a
  9. 514 touch ostechnix.txt
  10. 515 vi ostechnix.txt
  11. 516 echo "Welcome to OSTechNix"
  12. 517 sudo apcman -Syu
  13. 518 sudo pacman -Syu
  14. 519 more ostechnix.txt
  15. 520 wc -l ostechnix.txt
  16. 521 cat ostechnix.txt
  17. 522 clear

-r 选项用于将输出反向排序。

  1. $ fc -lr

-n 选项用于隐藏行号。

  1. $ fc -ln
  2. nano ~/.profile
  3. source ~/.profile
  4. source ~/.profile
  5. fc -ln
  6. fc -l
  7. sudo netctl restart wlp9s0sktab
  8. ls -l
  9. pwd
  10. uname -r
  11. uname -a
  12. echo "Welcome to OSTechNix"
  13. sudo apcman -Syu
  14. cat ostechnix.txt
  15. wc -l ostechnix.txt
  16. more ostechnix.txt
  17. clear

这样行号就不再显示了。

如果想以某个命令开始,只需在 -l 选项后面加上行号即可。比如,要显示行号 520 至最近的命令,可以这样:

  1. $ fc -l 520
  2. 520 ls -l
  3. 521 pwd
  4. 522 uname -r
  5. 523 uname -a
  6. 524 echo "Welcome to OSTechNix"
  7. 525 sudo apcman -Syu
  8. 526 cat ostechnix.txt
  9. 527 wc -l ostechnix.txt
  10. 528 more ostechnix.txt
  11. 529 clear
  12. 530 fc -ln
  13. 531 fc -l

要列出一段范围内的命令,将始、末行号作为 fc -l 的参数即可,比如 520 至 525:

  1. $ fc -l 520 525
  2. 520 ls -l
  3. 521 pwd
  4. 522 uname -r
  5. 523 uname -a
  6. 524 echo "Welcome to OSTechNix"
  7. 525 sudo apcman -Syu

除了使用行号,我们还可以使用字符。比如,要列出最近一个 pwd 至最近一个命令之间的所有命令,只需要像下面这样使用起始字母即可:

  1. $ fc -l p
  2. 521 pwd
  3. 522 uname -r
  4. 523 uname -a
  5. 524 echo "Welcome to OSTechNix"
  6. 525 sudo apcman -Syu
  7. 526 cat ostechnix.txt
  8. 527 wc -l ostechnix.txt
  9. 528 more ostechnix.txt
  10. 529 clear
  11. 530 fc -ln
  12. 531 fc -l
  13. 532 fc -l 520
  14. 533 fc -l 520 525
  15. 534 fc -l 520
  16. 535 fc -l 522
  17. 536 fc -l l

要列出所有 pwdmore 之间的命令,你可以都使用起始字母,像这样:

  1. $ fc -l p m

或者,使用开始命令的首字母以及结束命令的行号:

  1. $ fc -l p 528

或者都使用行号:

  1. $ fc -l 521 528

这三个命令都显示一样的结果。 

编辑并执行上一个命令

我们经常敲错命令,这时你可以用默认编辑器修正拼写错误并执行而不用将命令重新再敲一遍。

编辑并执行上一个命令:

  1. $ fc

这会在默认编辑器里载入上一个命令。

[[226999]]

你可以看到,我上一个命令是 fc -l。你可以随意修改,它会在你保存退出编辑器时自动执行。这在命令或参数又长又复杂时很有用。需要注意的是,它同时也可能是毁灭性的。比如,如果你的上一个命令是危险的 rm -fr <some-path>,当它自动执行时你可能丢掉你的重要数据。所以,小心谨慎对待每一个命令。 

更改默认编辑器

另一个有用的选项是 -e ,它可以用来为 fc 命令选择不同的编辑器。比如,如果我们想用 nano 来编辑上一个命令:

  1. $ fc -e nano

这个命令会打开 nano 编辑器(而不是默认编辑器)编辑上一个命令。

如果你觉得用 -e 选项太麻烦,你可以修改你的默认编辑器,只需要将环境变量 FCEDIT 设为你想要让 fc 使用的编辑器名称即可。

比如,要把 nano 设为默认编辑器,编辑你的 ~/.profile 或其他初始化文件: (LCTT 译注:如果 ~/.profile 不存在可自己创建;如果使用的是 bash ,可以编辑 ~/.bash_profile

  1. $ vi ~/.profile

添加下面一行:

  1. FCEDIT=nano
  2. # LCTT译注:如果在子 shell 中会用到 fc ,***在这里 export FCEDIT

你也可以使用编辑器的完整路径:

  1. FCEDIT=/usr/local/bin/emacs

输入 :wq 保存退出。要使改动立即生效,运行以下命令:

  1. $ source ~/.profile

现在再输入 fc 就可以使用 nano 编辑器来编辑上一个命令了。 

不编辑而直接执行上一个命令

我们现在知道 fc 命令不带任何参数的话会将上一个命令载入编辑器。但有时你可能不想编辑,仅仅是想再次执行上一个命令。这很简单,在末尾加上连字符(-)就可以了:

  1. $ echo "Welcome to OSTechNix"
  2. Welcome to OSTechNix
  3.  
  4. $ fc -e -
  5. echo "Welcome to OSTechNix"
  6. Welcome to OSTechNix

如你所见,fc 带了 -e 选项,但并没有编辑上一个命令(例中的 echo " Welcome to OSTechNix")。

需要注意的是,有些选项仅对指定 shell 有效。比如下面这些选项可以用在 zsh 中,但在 Bash 或 Ksh 中则不能用。 

显示命令的执行时间

想要知道命令是在什么时候执行的,可以用 -d 选项:

  1. fc -ld
  2. 1 18:41 exit
  3. 2 18:41 clear
  4. 3 18:42 fc -l
  5. 4 18:42 sudo netctl restart wlp9s0sktab
  6. 5 18:42 ls -l
  7. 6 18:42 pwd
  8. 7 18:42 uname -r
  9. 8 18:43 uname -a
  10. 9 18:43 cat ostechnix.txt
  11. 10 18:43 echo "Welcome to OSTechNix"
  12. 11 18:43 more ostechnix.txt
  13. 12 18:43 wc -l ostechnix.txt
  14. 13 18:43 cat ostechnix.txt
  15. 14 18:43 clear
  16. 15 18:43 fc -l

这样你就可以查看最近命令的具体执行时间了。

使用选项 -f ,可以为每个命令显示完整的时间戳。

  1. fc -lf
  2. 1 4/5/2018 18:41 exit
  3. 2 4/5/2018 18:41 clear
  4. 3 4/5/2018 18:42 fc -l
  5. 4 4/5/2018 18:42 sudo netctl restart wlp9s0sktab
  6. 5 4/5/2018 18:42 ls -l
  7. 6 4/5/2018 18:42 pwd
  8. 7 4/5/2018 18:42 uname -r
  9. 8 4/5/2018 18:43 uname -a
  10. 9 4/5/2018 18:43 cat ostechnix.txt
  11. 10 4/5/2018 18:43 echo "Welcome to OSTechNix"
  12. 11 4/5/2018 18:43 more ostechnix.txt
  13. 12 4/5/2018 18:43 wc -l ostechnix.txt
  14. 13 4/5/2018 18:43 cat ostechnix.txt
  15. 14 4/5/2018 18:43 clear
  16. 15 4/5/2018 18:43 fc -l
  17. 16 4/5/2018 18:43 fc -ld

当然,欧洲的老乡们还可以使用 -E 选项来显示欧洲时间格式。

  1. fc -lE
  2. 2 5.4.2018 18:41 clear
  3. 3 5.4.2018 18:42 fc -l
  4. 4 5.4.2018 18:42 sudo netctl restart wlp9s0sktab
  5. 5 5.4.2018 18:42 ls -l
  6. 6 5.4.2018 18:42 pwd
  7. 7 5.4.2018 18:42 uname -r
  8. 8 5.4.2018 18:43 uname -a
  9. 9 5.4.2018 18:43 cat ostechnix.txt
  10. 10 5.4.2018 18:43 echo "Welcome to OSTechNix"
  11. 11 5.4.2018 18:43 more ostechnix.txt
  12. 12 5.4.2018 18:43 wc -l ostechnix.txt
  13. 13 5.4.2018 18:43 cat ostechnix.txt
  14. 14 5.4.2018 18:43 clear
  15. 15 5.4.2018 18:43 fc -l
  16. 16 5.4.2018 18:43 fc -ld
  17. 17 5.4.2018 18:49 fc -lf 

fc 用法总结

  • 当不带任何参数时,fc 将上一个命令载入默认编辑器。
  • 当带一个数字作为参数时,fc 将数字指定的命令载入默认编辑器。
  • 当带一个字符作为参数时,fc 将最近一个以指定字符开头的命令载入默认编辑器。
  • 当有两个参数时,它们分别指定需要列出的命令范围的开始和结束。

更多细节,请参考 man 手册。

  1. $ man fc

好了,今天就这些。希望这篇文章能帮助到你。更多精彩内容,敬请期待! 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2018-04-08 14:47:06

Linux命令type

2018-05-14 08:53:51

Linux命令shuf

2011-04-12 10:13:24

2018-02-23 10:03:30

Linux命令mkdir

2011-07-04 14:14:54

java

2018-04-16 08:33:39

Linux命令uniq

2022-06-15 15:30:29

Linux新用户建议

2010-06-13 11:13:38

UML初学者指南

2018-04-02 11:59:04

Linux命令ln

2009-11-18 09:30:43

2016-11-18 17:40:35

2018-02-24 10:38:06

Linux命令rmdir

2012-05-22 14:38:04

2009-12-25 10:11:32

Red hat Lin

2022-09-05 15:36:39

Linux日志记录syslogd

2011-08-24 17:05:01

Lua

2024-03-06 09:31:34

SQL数据库数据结构

2011-04-08 15:07:40

C++

2013-12-12 10:20:00

JavaScript学习

2009-06-23 13:32:48

JavaScript初窍门
点赞
收藏

51CTO技术栈公众号