10°

Linux的Shell编程 - Shell内嵌的命令

摘要:本文主要学习了Shell的常用内建命令。

alias命令

alias命令可以为指定命令定义一个别名。

基本语法

查看所有别名:

[root@localhost ~]# alias

设置别名:

[root@localhost ~]# alias 别名=原命令(有空格需要使用引号包裹)

删除别名:

[root@localhost ~]# unalias 别名

执行和别名相同的命令

使用命令的绝对路径:

[root@localhost ~]# /usr/bin/vim test

切换到命令所在的目录,在命令前添加“./”:

[root@localhost ~]# ./vim ~/test

在命令前面添加“\”:

[root@localhost ~]# \vim test

让别名永久有效

我们通过alias命令设置的别名,仅限于在当前的Shell中使用,如果系统重启了,那么新设置的别名就失效了。

如果想让别名永久有效的话,就需要把所有的别名设置方案加入到家录下的.alias文件中(如果系统中没有这个文件,你可以创建一个),然后在.bashrc文件中增加这样一段代码:

# Aliases
if [ -f ~/.alias ]; then
  . ~/.alias
fi

这样设置后,无论怎样重启系统,都不会影响设置的别名啦。

echo命令

echo命令可以将指定字符串打印到屏幕。

基本语法

[root@localhost ~]# echo [选项] 输出的内容

选项说明

-n:表示输出之后不换行。
-e:表示对于转义字符按对应的方式进行处理。

使用举例

[root@localhost ~]# echo 'Hello Word'
Hello Word
[root@localhost ~]#

source命令

source命令用来读取并执行指定文件中的命令(在当前shell环境中)。

source命令也称为“点命令”,也就是一个点符号“.”,是bash的内部命令。

source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

基本语法

[root@localhost ~]#source filename
[root@localhost ~]#. filename

使用source filename与sh filename及./filename执行脚本的区别

当shell脚本具有可执行权限时,用 sh filename 与 ./filename 执行脚本是没有区别的。 ./filename 是因为当前目录没有在PATH中,所以“.”是用来表示当前目录的。

执行 sh filename 会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。

命令 source filename 其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

fc命令

使用fc命令可以从历史记录中选择命令列表。

基本语法

编辑上一条命令并执行:

[root@localhost ~]# fc

打开一个编辑器去修改或重新执行以前输入的命令:

fc [-r] [-e Editor] [First] [Last]

生成一个以前输入的命令的列表:

fc -l [-n] [-r] [First] [Last]

生成带执行时间的以前输入的命令的列表:

fc -t [-n] [-r] [First] [Last]

选项说明

-e Editor:使用指定的编辑器编辑命令。Editor参数应是一个命令名称。该命令用PATH环境变量指定位置。当没有指定-e标志时,环境变量FCEDIT中的值被用作缺省值。如果环境变量FCEDIT是空值或没有设置,则使用ed编辑器。
-l:列出了历史文件中的命令。不调用编辑器去修改它们。按照First和Last参数所指定的顺序写命令,就象-r标志所作用的,在每一个命令的前面有一个命令编号。
-n当与-l标志一起使用时,隐藏命令编号。
-r逆转所列出命令的顺序(当使用-l标志)或者逆转所编辑的命令顺序(当没有指定-l标志时)。
-t在历史文件中列出命令及其执行时间。工作过程与-l标志类似,但是还显示命令的执行时间。
First和Last:选择要列出或编辑的命令。HISTSIZE环境变量值确定了能够访问到的以前所输入命令的数量。
First参数和Last参数必须具有以下数值中的一个:
[+]Number:表示一个特定的命令编号。-l标志可以显示命令编号。缺省值为一个+字符。
-Number:表示一个以前执行的命令,由存储在历史列表中的命令编号指定。例如,-1指出了前一个刚执行过的命令。

使用举例

[root@localhost ~]# fc
echo 'Hello Word ...'
Hello Word ...
[root@localhost ~]# fc -l -1
811    fc -l -5
[root@localhost ~]#

history命令

history命令用于显示历史记录和执行过的指令命令。系统默认保留1000条。

history命令读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2。

history命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量HISTSIZE进行控制。默认是不显示命令的执行时间,命令的执行时间,history已经记录,只是没有显示。

如想查询某个用户在系统上执行了什么命令,可以使用root用户身份登录系统,检查Home目录下的用户主目录下的“.bash_history”文件,该文件记录了用户所使用的命令和历史信息。

显示执行历史记录时间

默认情况下,history并不记录命令的执行时间,分析起来很困难。我们可以使用HISTTIMEFORMAT在历史中显示TIMESTAMP。

把 export HISTTIMEFORMAT='%F %T ' 命令加入到~/.bashrc中即可在登录后自动开启history时间戳了。添加完成后,执行 source .bashrc 让其生效。仅针对当前账号有效。

基本语法

[root@localhost ~]# history [选项]

选项说明

-c:清空命令历史。
-d n:删除历史中指定的命令,n表示命令号。
n:显示最近的n条历史。
-a:追加本次会话新执行的命令历史列表至历史文件,因为多终端所以如果想看当前都发生了什么操作就可以执行-a进行查看。
-n:读历史文件(本地数据)中未读过的行到历史列表(内存数据)。
-r:读历史文件(本地数据)附加到历史列表(内存数据)。
-w:保存历史列表(内存数据)到指定的历史文件(本地数据)。
-s:展开历史参数成一行,附加在历史列表后。用于伪造命令历史。

使用举例

[root@localhost ~]# history 3
  823  history 5
  824  history 7
  825  history 3
[root@localhost ~]#

jobs命令

jobs命令可以用来查看当前终端放入后台的工作,工作管理的名字也来源于jobs命令。

基本语法

[root@localhost ~]# jobs [选项]

选项说明

-l:列出进程的PID号。
-p:只列出进程的PID号。
-r:只列出运行中的进程。
-s:只列出已停止的进程。
-n:只列出上次发出通知后改变了状态的进程。

bg命令

bg命令用于把前台工作放到后台执行。

基本语法

[root@localhost ~]# bg %进程号

选项说明

注意,在使用此命令时,%可以省略。

fg命令

fg命令用于把后台工作恢复到前台执行。

基本语法

[root@localhost ~]# fg %进程号

选项说明

注意,在使用此命令时,%可以省略,但若将%和进程号全部省略,则此命令会将带有+号的工作恢复到前台。

kill命令

kill命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

基本语法

[root@localhost ~]# kill [选项] 进程号

选项说明

-0:代表EXIT,程序退出时收到该信息。
-1:代表HUP,挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
-2:代表INT,表示结束进程,但并不是强制性的,常用的“Ctrl+C”组合键发出就是一个“kill -2”的信号。
-3:代表QUIT,表示退出。
-9:代表KILL,杀死进程,即强制结束进程。
-11:代表SEGV,段错误。
-15:代表TERM,正常结束进程,是kill命令的默认信号。

原文链接:https://www.linuxidc.com/Linux/2019-07/159319.htm

全部评论: 0

    我有话说: