Shell快捷按键

发布时间 2023-11-27 22:33:22作者: 飔鬏

Shell的快捷按键

用来导航命令行的按键:

按键

全称

含义

Ctrl+F

向前一个字符

前进一个字符

Ctrl+B

向后一个字符

前后一个字符

Alt+F

向前一个单词

向前一个单词

Alt+B

向后一个单词

向后一个单词

Ctrl+A

命令行开头

转到当前命令行的开头

Ctrl+E

命令行结尾

转到当前命令行的结尾

Ctrl+L

清除屏幕

清除屏幕,并使光标停留在屏幕顶部

用来编辑命令行的按键

按键

全称

含义

Ctrl+D

删除当前字符

删除当前字符

Backspace

删除前一个字符

删除前一个字符

Ctrl+T

调换字符

交换当前字符和前一个字符的位置

Alt+T

调换单词

交换当前单词和前一个单词的位置

Alt+U

大写单词

将当前单词改为大写

Alt+L

小写单词

将当前单词改为小写

Alt+C

首字母大写单词

把光标当前位置单词的头一个字母变为大写

Ctrl+V

插入特殊字符

添加一个特殊的字符。例如,为了添加字符Tab,单击Ctrl+V+Tab

Shell命令重复执行

[root@fedora32 ~]# history #查看历史命令列表

1 ls

2 cat original-ks.cfg

3 poweroff

4 cd /etc

5 ls

6 ll

[root@fedora32 ~]# !1 #重复执行指定数字的命令

ls

original-ks.cfg passwdbak

[root@fedora32 ~]# !! #运行前一个命令

ls

original-ks.cfg passwdbak

[root@fedora32 ~]# !?ca? #运行包含特定字符串(ca)的命令

cat passwdbak

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

除了上述的history命令外,还可以使用fc命令,输入fc,并紧跟一个历史命令行编号,将会在一个文本编辑器中打开该命令行(默认情况下为vi文本编辑器)可以修改命令行。当退出编辑器后,该命令运行。另外,还可以输入行编号的范围,此时范围内的所有命令都会在文本编辑器中打开,当文本编辑器关闭后,命令会一个接一个地运行。

[root@fedora32 ~]# fc 18 #打开文本编辑器,可以使用:wq保存和退出

history 5

21 cp /etc/passwd /root/passwdbak

22 ls

23 cat passwdbak

24 history

25 history 5

[root@fedora32 ~]# fc 15 18 #使用命令行范围

echo $OSTYPE

linux-gnu

cd ~root/

exit

logout

# ~/.bash_logout

[vagrant@fedora32 ~]$

Shell连接和拓展命令

Shell真正强大的功能在于能够将命令的输入和输出重定向到其他命令或者文件中,反之亦然。为将命令串在一起,shell使用了元字符(metacharacter)。元字符是对shell有特殊含义的输入字符,用于连接命令和请求拓展。

元字符包括管道字符(|)、与号(&)、分号(;)、右括号())、左括号(()、小于号(<)、大于号(>)。

  • 命令之间的管道 |

将一个命令的输出连接到另一个命令的输入,就可以首先让一条命令实用数据然后让下一条命令处理结果。

[root@fedora32 ~]# cat passwdbak | sort | less

#cat列出文件内容,将输出发送到sort,sort按照文件中每一行开头的用户名的字母顺序进行排序,之后输出发送到less展示

adm:x:3:4:adm:/var/adm:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

chrony:x:996:993::/var/lib/chrony:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  • 连续命令

在同一命令行中输入多条命令,并使用(;)进行分隔。

[root@fedora32 ~]# date ; troff -me veryargedocument | lpr ; date

#显示格式化开始之前的时间,之后troff格式化文档,并将输出发送到打印机(lpr),之后显示格式化后的时间,可知troff格式化花费多长时间。

Mon 27 Nov 2023 01:30:38 PM UTC

troff: fatal error: can't find macro file e

Mon 27 Nov 2023 01:30:38 PM UTC

可在较长的命令行结尾添加另一条有用命令mail。

[root@fedora32 ~]# ;mail -s "Finished the long command" vagrant@example.com

#在命令执行完成后,将向用用户发送一条邮件信息。
  • 后台命令 &

一些命令可能需要花费很长时间才能完成,但又不希望占用shell等待命令完成,可使用与号(&)让命令在后台运行。

[root@fedora32 ~]# troff -me verylargdocument | lpr &
  • 拓展命令

通过命令替换,可以由shell解释命令的输出,而不是由命令自身解释。可以使一条命令的标准输出变为另一条命令的一个参数。命令替换的两种形式是$(commond)和`commond`(反引号,不是单引号)。

两种形式中的命令可以包含选项、元字符和参数。如下为使用命令替换的示例:

[root@fedora32 ~]# vi $(find /home | grep sdf)

或

[root@fedora32 ~]# vim $`find /home | grep sdf`

#示例中,在vi命令运行之前完成了命令替换。首先,find命令从/home目录开始,并打印出文件系统中该目录下的所有文件和目录,然后将输出连接到grep命令,并将文件名中不包括字符串sdf的文件过滤掉,之后使用vi命令打开所有的文件进行编辑(每次打开一个文件)。
  • 拓展算数表达式

将算术结果传递给一条命令。可以使用此种形式来拓展算术表达式并将其传递给shell:$[expression]。示例如下:

[root@fedora32 ~]# echo "I am $[2020-1957] years old"

I am 63 years old

[root@fedora32 ~]# echo "There are $[ls | wc -w] files in this directory."

There are 0 files in this directory.
  • 拓展变量

使用美元符号($)对shell中用来存储信息的变量进行拓展。当在命令行中拓展出一个环境变量时,所打印出的是变量的值,而不是变量名。

[root@fedora32 ~]# ls -l $BASH

-rwxr-xr-x. 1 root root 1224424 Jun 2 2020 /bin/bash

Shell变量

查看为当前shell设置的所有变量:

[root@fedora32 ~]# set

BASH=/bin/bash

BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath

BASHRCSOURCED=Y

BASH_ALIASES=()

BASH_ARGC=([0]="0")

以下的命令与set的作用相似:

[root@fedora32 ~]# declare

[root@fedora32 ~]# env #查看环境变量

SHELL=/bin/bash

SUDO_GID=1000

HISTCONTROL=ignoredups

常见的shell环境变量:

[root@fedora32 ~]# echo $BASH_VERSION #表示当前Bash命令版本的一个数字

5.0.17(1)-release

[root@fedora32 ~]# echo $EUID #表示当前用户有效的用户ID号

0

[root@fedora32 ~]# echo $HISTFILE #表示历史命令文件的位置

/root/.bash_history

[root@fedora32 ~]# echo $HISTFILESIZE #可以存储的历史命令条目数

100000

[root@fedora32 ~]# echo $HISTCMD #该变量返回历史命令列表中当前命令的数量

58

[root@fedora32 ~]# echo $HOSTTYPE #描述了Linux系统正在运行的计算机系统结构

x86_64

[root@fedora32 ~]# echo $MAIL #表示邮箱文件的位置

/var/spool/mail/root

[root@fedora32 ~]# echo $OSTYPE #用来识别当前操作系统

linux-gnu

[root@fedora32 ~]# echo $PPID #表示启动了当前shell的命令的进程ID

3243

[root@fedora32 ~]# echo $SECONDS #表示自shell启动之后的秒数

3237

[root@fedora32 ~]# echo $SHLVL #表示与当前shell会话相关联的shell级别数

1

[root@fedora32 ~]# echo $TMOUT #表示shell可以空闲的秒数,当秒数到达,shell退出

创建和使用别名

通过使用alias命令,可有效地为日后想要运行的任何命令和选项创建快捷方式,还可以添加和列出别名。

[root@fedora32 ~]# alias mv='mv -i'

当打开shell之后,可以输入alias命令查看设置了哪些别名,想要删除一个别名,可以使用unalias。当想要退出shell时,可以输入exit或者单击Ctrl+D。