第七章 命令解释器-shell

1. 概述

1.1. 概念

shell:壳,命令解释器,负责解析用户输入的命令

1.2. 分类:

内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都 差不多

外置命令,在文件系统的某个目录下,有个与命令名称相同的文件

1.3. type 命令

1.3.1. 作用

查看命令是内置命令、外置命名、alias命令

1.3.2. 格式

复制代码
type  -参数  命令名

1.3.3. 参数

type -a列出当前命令可以如何执行

type -t仅列出命令按照哪种方式执行

复制代码
[root@server ~]# type -a  cd
cd 是 shell 内建
cd 是 /usr/bin/cd
[root@server ~]# type cd
cd 是 shell 内建
[root@server ~]# type -t  cd
builtin   # 内置命令
[root@server ~]# type tree
tree 是 /usr/bin/tree
[root@server ~]# type -t  tree
file
[root@server ~]# type wget
wget 是 /usr/bin/wget
[root@server ~]# type ls
ls 是"ls --color=auto"的别名
[root@server ~]# type ping
ping 是 /usr/sbin/ping
[root@server ~]# alias ping='ping -c 5'
[root@server ~]# type ping
ping 是"ping -c 5"的别名
[root@server ~]# ping  www.qq.com
PING ins-r23tsuuf.ias.tencent-cloud.net (101.91.22.57) 56(84) 比特的数据。
64 比特,来自 101.91.22.57 (101.91.22.57): icmp_seq=1 ttl=128 时间=31.0 毫秒
64 比特,来自 101.91.22.57 (101.91.22.57): icmp_seq=2 ttl=128 时间=29.2 毫秒
64 比特,来自 101.91.22.57 (101.91.22.57): icmp_seq=3 ttl=128 时间=29.1 毫秒
64 比特,来自 101.91.22.57 (101.91.22.57): icmp_seq=4 ttl=128 时间=30.8 毫秒
64 比特,来自 101.91.22.57 (101.91.22.57): icmp_seq=5 ttl=128 时间=30.6 毫秒--- ins-r23tsuuf.ias.tencent-cloud.net ping 统计 --
已发送 5 个包, 已接收 5 个包, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 29.122/30.150/31.043/0.825 ms

1.4. 执行原理

系统为了让用户在命令行快速方便地执行命令,将可执行文件的路径存储在环境变量PATH中,使得shell知 道命令的可执行文件位置

PATH环境变量:当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文 件,如果有则执行该二进制文件,如果没有则提示命令找不到。

复制代码
[root@server ~]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

2. Linux 中的特殊符号

|-----------------|--------------------------------------------|----------------------------------------------------------------------------------------|
| 特殊符号 | 功能 | 说明 |
| ; | 可使用分号分隔多条命 令 | 在一行上输入和执行多条较短的命令,可使用分号来分隔 命令 |
| * | 匹配任意零个或者多个字符 | 不能用于创建文件 |
| ? | 匹配任意单个字符 | 不能用于创建文件 |
| [] | 匹配方括号中的任意一 个字符,表示范围可以 用"-" | 不能用于创建文件 |
| [^]或者[!] | 匹配方括号中的任意一 个字符或数字后进行取 反 | 用于查找和删除文件,不用于创建文件 |
| {string,string} | 匹配括号中的任意一个 字符串,表示一个范围 时,字符串之间个".." | 可用于创建、查看、删除文件 |
| \ | 使\后面的特殊字符失效 | 例如:可以在命令行后面加一个\,再按回车键时并不表示 执行该命令,而是表示换行,通过此方式将一个较长的命 令分成多行表达,增强命令的可读性。换行后系统自动显 示提示符> |
| ` | 反引号,一般用于引用 命令,执行的时候反引 号里面的命令会被执 行,与()作用相同 | | | ' | 单引号,将单引号内的 所有内容都原样输出 | 所有特殊字符在单引号里面都会失去特殊含义 | | " | 双引号,除了几个特殊 字符外,将双引号内的 几乎所有内容都原样输 出 | ""和"\"以及" ` "在双引号里面仍然保留自己的特殊含义 |

3. 命令别名

3.1. 作用

别名:是命令的快捷方式,对于需要经常执行,并需要很长时间输入的长命令创建快捷方式很有用。

3.2. 格式

复制代码
alias 别名='原命令 -参数'

3.3. 查看设置的别名

复制代码
[root@server ~]# 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 ping='ping -c 5'    
# 上例新建的
alias rm='rm -i'
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'

3.4. 常用的别名

3.4.1. untar

由于 tar 命令的参数太多不好记忆,所以将解压缩设为如下:

复制代码
alias untar='tar -zxvf '

3.4.2. wget

下载大文件时的断点续连,防止网络异常中断:

复制代码
alias wget='wget -c '

3.4.3. getpass

生成 20 个字符的随机数密码,使用 openssl 命令,但命令又很长不方便,可以设置别名:

复制代码
alias getpass="openssl rand -base64 20"

3.4.4. ping

ping url时会无限次输出,但其实没多大意义,可以使用 -c 命令将其限制为 5 次输出:

复制代码
alias ping='ping -c 5'

3.4.5. speed

测试网速命令speedtest-cli ,为了方便使用可以设置别名:

官网: https://www.speedtest.net/zh-Hans/apps/cli

安装

复制代码
[root@server ~]# curl -s 
https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.rpm.sh | 
sudo bash
[root@server ~]# yum install speedtest -y
查看手册
[root@server ~]# speedtest  --help

3.4.6. ipe

公网 IP别名设置:

复制代码
alias ipe='curl ipinfo.io/ip'
[root@server ~]# alias ipe='curl ipinfo.io/ip'
[root@server ~]# ipe
113.132.176.202[root@server ~]#

3.4.7. c

清屏,一般使用 ctrl + l 快捷键,也可以将 clear 命令定义得更短,这样使用起来更直接,更粗暴.

复制代码
alias c='clear'

3.5. 删除别名

3.5.1. 格式

复制代码
unalias 别名

3.5.2. 例

复制代码
[root@server ~]# alias 
[root@server ~]# unalias ping
[root@server ~]# alias 

3.6. 注意:

在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则 这些alias将无法使用。

在linux中提供alias永久化的方法:

将别名命令写入到~/.bashrc和/etc/bashrc文件中

执行 source ~/.bashrc 和 source ~/etc/bashrc 生效

复制代码
[root@server ~]# alias ping='ping -c 5'
[root@server ~]# ping  www.qq.com
# 关闭shell,重新打开
[root@server ~]# ping  www.qq.com  # 别名失效
[root@server ~]# vim  ~/.bashrc
# 写入别名
[root@server ~]# source  ~/.bashrc   # 生效,注意切换仅对当前账户生效
[root@server ~]# vim  /etc/bashrc
# 写入别名
[root@server ~]# source   /etc/bashrc   
# 切换到普通账户测试

4. 命令历史

4.1. 作用 history命令可以查阅命令历史记录

4.2. 格式

复制代码
history -参数

4.3. 参数

复制代码
number:显示最近number条命令历史
-c:清空当前历史命令
[root@server ~]# history  5
   13  vim  ~/.bashrc
   14  ping  www.baidu.com
   15  source  ~/.bashrc
   16  ping  www.baidu.com
   17  history  5
[root@server ~]# !16   # 将第16命令在执行一遍

4.4. 设置history记录命令条数

复制代码
[root@server ~]# vim  /etc/profile
# 定位:HISTSIZE=1000
#退出后重启:reboot
相关推荐
恒创科技HK2 小时前
高防服务器有什么作用?
运维·服务器
星如雨グッ!(๑•̀ㅂ•́)و✧2 小时前
Reactor背压
java·服务器·前端
刘~浪地球2 小时前
Nginx + Tomcat 整合实战(四):会话管理与共享详解
运维·nginx·tomcat
RisunJan2 小时前
Linux命令-mv(移动或重命名文件和目录)
linux·运维·服务器
wh_xia_jun2 小时前
Windows/Linux 自动适配 + Pydantic Settings 配置
linux·运维·windows
第二只羽毛2 小时前
C++ 高并发内存池4
java·大数据·linux·c++·算法
风吹落叶32572 小时前
RabbitMQ 集群
linux·分布式·rabbitmq
long_songs2 小时前
纯前端 PNG/JPG 转 PDF 工具(无需服务器,源码分享)
服务器·前端·pdf
斌味代码2 小时前
Docker + 宝塔:容器化部署最佳实践(2026最新版)
运维·docker·容器