linux fc命令

时间:2020-03-21 11:47:24  来源:igfitidea点击:

fc命令是fix命令的缩写,是shell内置命令,用于列出,编辑和重新执行交互式shell中最新输入的命令。
我们可以在自己喜欢的编辑器中编辑最近输入的命令,然后运行它们,而不必重新输入整个命令。
此命令有助于纠正先前输入的命令中的拼写错误,并避免重复冗长而复杂的命令。
由于它是shell内置的,因此可以在大多数shell中使用,包括Bash,Zsh,Ksh等。
在此教程中,我们将学习在Linux中使用fc命令。

fc命令教程及示例

列出最近执行的命令

如果不带任何参数运行“ fc -l”命令,它将显示最后16个命令。

$fc -l
507 fish
508 fc -l
509 sudo netctl restart wlp9s0sktab
510 ls -l
511 pwd
512 uname -r
513 uname -a
514 touch theitroad.txt
515 vi theitroad.txt
516 echo "Welcome to theitroad"
517 sudo apcman -Syu
518 sudo pacman -Syu
519 more theitroad.txt 
520 wc -l theitroad.txt 
521 cat theitroad.txt 
522 clear

要反转命令的顺序,请使用-r标志。

$fc -r

我们可以使用“ -n”参数取消显示行号。

$fc -ln
 nano ~/.profile
 source ~/.profile
 source ~/.profile
 fc -ln
 fc -l
 sudo netctl restart wlp9s0sktab
 ls -l
 pwd
 uname -r
 uname -a
 echo "Welcome to theitroad"
 sudo apcman -Syu
 cat theitroad.txt 
 wc -l theitroad.txt 
 more theitroad.txt 
 clear

现在我们将看不到行号。

要从特定命令开始列出结果,只需将行号与-l方法一起使用。
例如,要显示从行号520到当前的命令,我们可以执行以下操作:

$fc -l 520
520 ls -l
521 pwd
522 uname -r
523 uname -a
524 echo "Welcome to theitroad"
525 sudo apcman -Syu
526 cat theitroad.txt 
527 wc -l theitroad.txt 
528 more theitroad.txt 
529 clear
530 fc -ln
531 fc -l

要列出特定范围(例如520到525)中的命令,请执行以下操作:

$fc -l 520 525
520 ls -l
521 pwd
522 uname -r
523 uname -a
524 echo "Welcome to theitroad"
525 sudo apcman -Syu

除了使用行号,我们还可以使用字符串。
例如,列出从“ pwd”命令开始直到重发的命令,只需使用该命令的起始字母(即p),如下所示。

$fc -l p
521 pwd
522 uname -r
523 uname -a
524 echo "Welcome to theitroad"
525 sudo apcman -Syu
526 cat theitroad.txt 
527 wc -l theitroad.txt 
528 more theitroad.txt 
529 clear
530 fc -ln
531 fc -l
532 fc -l 520
533 fc -l 520 525
534 fc -l 520
535 fc -l 522
536 fc -l l

要查看“ pwd”到“ more”命令之间的所有内容,可以使用以下任一方法:

$fc -l p m

或者,使用起始命令命令的首字母和结束命令的行号的组合:

$fc -l p 528

或者,仅是开始和结束命令的行号:

$fc -l 521 528

所有这三个命令将显示相同的结果。

自动编辑并重新运行最后一个命令

有时,我们可能会拼错上一个命令。
在这种情况下,我们可以使用默认编辑器轻松编辑命令的拼写错误并执行,而无需再次输入。

要编辑最后一个命令并再次重新运行它,请执行以下操作:

$fc

这将在默认编辑器中打开最后一个命令。

如我们在上面的 Screen截图中所见,我的最后一个命令是“ fc -l”。
现在,我们可以在命令中进行任何更改,并在保存并退出编辑器后再次自动重新运行它。
当我们使用冗长而复杂的命令或者参数时,这将很有用。
请注意,这也可能是破坏性的。
例如,如果先前的命令是致命命令,例如“ rm -fr <some-path>”,它将自动执行,并且我们可能会丢失重要数据。
因此,在使用命令之前,请务必小心。

更改默认编辑器以编辑命令

fc的另一个显着选项是“ e”,用于选择其他编辑器来编辑命令。
例如,我们可以使用“ nano”编辑器来编辑最后一个命令,如下所示。

$fc -e nano

此命令将打开nano编辑器(而不是默认编辑器)以编辑最后一个命令。

我们可能会发现对每个命令使用-e选项非常耗时。
要将新的编辑器设置为默认编辑器,只需将环境变量FCEDIT设置为要让fc使用的编辑器的名称。

例如,要将“ nano”设置为新的默认编辑器,请编辑~/.profile或者环境文件:

$vi ~/.profile

添加以下行:

FCEDIT=nano

我们还可以使的完整路径,如下所示。

FCEDIT=/usr/local/bin/emacs

键入:wq保存并关闭文件。
要更新更改,请运行:

$source ~/.profile

现在,我们可以键入“ fc”以使用“ nano”编辑器编辑最后一个命令。

重新运行最后一个命令而不对其进行编辑

我们已经知道如果不带任何参数运行“ fc”,它将使用最新命令加载编辑器。
有时,我们可能不想编辑,而只是执行最后一个命令。
为此,请在末尾使用连字符(-),如下所示。

$echo "Welcome to theitroad"
Welcome to theitroad
$fc -e 
echo "Welcome to theitroad"
Welcome to theitroad

如我们所见,即使我使用-e选项,fc也不编辑最后一个命令(即回显“ Welcome to theitroad”)。

请注意,某些选项是特定于Shell的。
它们可能无法在其他shell中工作。
例如,可以在zsh shell中使用以下选项。
它们将无法在Bash或者Kshshell中使用。

显示命令执行时间

要查看命令何时运行,请使用-d,如下所示。

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

现在我们将看到最近执行的命令的执行时间。

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

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

当然,欧洲人可以使用-E选项使用欧洲日期格式。

fc -lE
 2 5.4.2016 18:41 clear
 3 5.4.2016 18:42 fc -l
 4 5.4.2016 18:42 sudo netctl restart wlp9s0sktab
 5 5.4.2016 18:42 ls -l
 6 5.4.2016 18:42 pwd
 7 5.4.2016 18:42 uname -r
 8 5.4.2016 18:43 uname -a
 9 5.4.2016 18:43 cat theitroad.txt
 10 5.4.2016 18:43 echo "Welcome to theitroad"
 11 5.4.2016 18:43 more theitroad.txt
 12 5.4.2016 18:43 wc -l theitroad.txt
 13 5.4.2016 18:43 cat theitroad.txt
 14 5.4.2016 18:43 clear
 15 5.4.2016 18:43 fc -l
 16 5.4.2016 18:43 fc -ld
 17 5.4.2016 18:49 fc -lf
  • 如果不带任何参数运行,fc将在默认文本编辑器中加载最新命令。
  • 当使用数字参数运行时,fc将使用具有指定编号的命令加载编辑器。
  • 当使用字符串参数运行时,fc将从该指定的字符串开始加载最新的命令。
  • 当使用fc的两个参数运行时,这些参数指定命令范围的开始和结束。

有关更多详细信息,请参见手册页。

$man fc