执行命令过程
输入命令后回车,通过shell程序找到键入的命令找到所对应的可执行程序或代码,并由其分析后提交给内核分配资源将其运行。
执行命令的过程(优先级):
别名>内部命令>外部命令hash>外部命令路径
shell中可执行的两类命令
内部命令:由shell自带,通过某命令形式提供,不同shell中内部命令不尽相同。
外部命令:在文件系统路径下有对应的可执行程序文件。
判断命令类型
type COMMAND(type 后跟想要查看的命令即可)
添加选项[-a],可以查看所有类型如果输出结果是COMMAND is a shell builtin,则该命令是内部命令,如果输出结果显示的是包含bin目录的路径,则是外部命令,外部命令执行过一次之后会,路径会被写入hash内存中,重启或退出之后,hash路径会消失。
范例
history是内部命令
[10:48:55 root@centos8 ~]#type -a history
history is a shell builtin
cat是外部命令
[10:28:50 root@centos8 ~]#type -a cat
cat is /usr/bin/cat
有的命令既是内部命令又是外部命令,如echo
[10:35:22 root@centos8 ~]#type -a echo
echo is a shell builtin
echo is /usr/bin/echo
对于既是内部命令又是外部命令的命令,想要让其使用外部部命令去执行,则可以禁用内部命令,通过enable命令可实现。
[10:49:13 root@centos8 ~]#enable -n echo
[11:07:04 root@centos8 ~]#type -a echo
echo is /usr/bin/echo
#若要重新启用内部命令则可以
[11:10:13 root@centos8 ~]#enable echo
[11:10:34 root@centos8 ~]#type -a echo
echo is a shell builtin
echo is /usr/bin/echo
命令若是别名,则不能执行原来命令的功能,只实现别名的作用,如下
[root@centos8mini ~]#echo abc
abc
[root@centos8mini ~]#alias "echo=history"
[root@centos8mini ~]#alias echo
alias echo='history'
[root@centos8mini ~]#echo abc
-bash: history: abc: numeric argument required
[root@centos8mini ~]#history
1 echo abc
2 alias "echo=history"
3 alias echo
4 echo abc
5 history
#此时echo执行的是history命令
[root@centos8mini ~]#echo
1 echo abc
2 alias "echo=history"
3 alias echo
4 echo abc
5 history
6 echo
#若要执行原来echo的功能,则需加"\"或通过unalias COMMAND取消别名即可恢复
[root@centos8mini ~]#\echo abc
abc
[root@centos8mini ~]#unalias echo
[root@centos8mini ~]#echo abc
abc
hash命令的常见用法
hash 显示hash缓存
hash -l 显示hash缓存,可作为输出使用
hash -p path name 将命令全路径path起别名为name
hash -t name 显示缓存中name的路径
hash -d name 清除指定命令名字的缓存
hash -r 清除所有缓存
命令别名作用
可以把一些较长的命令通过起别名的方法,使其变短,方便操作。
alias 命令可以显示当前shell的所有别名
[root@centos8mini ~]#alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'
定义别名alias NAME=‘原命令’ 例:
[root@centos8mini ~]#free
total used free shared buff/cache available
Mem: 810524 230324 330104 5744 250096 444832
Swap: 2097148 0 2097148
[root@centos8mini ~]#free -h
total used free shared buff/cache available
Mem: 791Mi 224Mi 322Mi 5.0Mi 244Mi 434Mi
Swap: 2.0Gi 0B 2.0Gi
[root@centos8mini ~]#alias 'free=free -h'
[root@centos8mini ~]#free
total used free shared buff/cache available
Mem: 791Mi 225Mi 322Mi 5.0Mi 244Mi 434Mi
Swap: 2.0Gi 0B 2.0Gi
#以上方法只能暂时更改别名,重启或退出后消失,若要永久更改可如下将别名定义写入配置文件
[root@centos8mini ~]#echo "alias free='free -h'">> .bashrc
#重启别名配置文件
[root@centos8mini~] #source ./.bashrc
别名写入“~/.bashrc”仅对当前用户有效;
别名写入/etc/bashrc对所有用户有效
撤销别名unalias [-a] name
unalias -a 可以取消所有别名
如果要临时执行原命令,可使用\ALIASNAME
日期和时间
系统时间
[root@centos8mini ~]#date
Wed Jul 29 17:02:58 CST 2020
硬件时间
[root@centos8mini ~]#clock
2020-07-29 15:03:10.429188+08:00
date相关命令
-d datestr(指定时间) : 显示 datestr 中所设定的时间 (非系统时间)
–help : 显示辅助讯息
-s datestr : 将系统时间设为 datestr 中所设定的时间
-u : 显示目前的格林威治时间
–version : 显示版本编号
时间方面:
% : 印出 %
%n : 下一行
%t : 跳格
%H : 小时(00…23)
%I : 小时(01…12)
%k : 小时(0…23)
%l : 小时(1…12)
%M : 分钟(00…59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00…61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期方面:
%a : 星期几 (Sun…Sat)
%A : 星期几 (Sunday…Saturday)
%b : 月份 (Jan…Dec)
%B : 月份 (January…December)
%c : 直接显示日期与时间%d : 日 (01…31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b%j : 一年中的第几天 (001…366)
%m : 月份 (01…12)
%U : 一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0…6)
%W : 一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000…9999)
clock相关命令
-s,以硬件时间为准校正系统时间
-w,以系统时间为准校正硬件时间
显示日历
#显示当月日历
[root@centos8mini ~]#cal
#显示全年日历
[root@centos8mini ~]#cal -y
#显示指定年日历 例如
[root@centos8mini ~]#cal 9 1752
September 1752
Su Mo Tu We Th Fr Sa
1 2 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
关机和重启命令
关机:halt poweroff
重启:reboot -f:强制 -p:切断电源
关机或重启:shutdown
-r:重启
-h:halt
-c:取消关机或重启
shutdown 可定时关机
shutdown不加任何参数,默认相当于+1
now 立刻关机,相当于+0
+number,相对时间,几分钟之后关机
hh:mm 绝对时间,指定关机时间