第七章 命令解释器-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
相关推荐
Adorable老犀牛1 分钟前
nginx_exporter:Prometheus 监控 Nginx 基础指标
运维·nginx·prometheus
山里幽默的程序员2 分钟前
DevOps 必备:盘点2026 年最强RESTful API 接口测试方案
运维·restful·devops·api开发·api开发工具
happymaker06264 分钟前
Linux常见命令总结
linux·运维·服务器
加农炮手Jinx6 分钟前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops
不念霉运7 分钟前
Gitee领跑2025中国DevOps市场:本土力量崛起
运维
无心水7 分钟前
【Hermes:团队、企业、生态与边界】47、Hermes 在 CI/CD 中的完整 DevOps 流水线:从 PR 审查到自动部署,让 Agent 接管你的发布流程
运维·人工智能·devops·openclaw·养龙虾·hermes·honcho
lbb 小魔仙8 分钟前
【Linux】DevOps 工程师必备:Linux 自动化脚本与高效工具链整合
linux·自动化·devops
开源量化GO20 分钟前
期货 K 线算信号 tick 级止损:天勤双序列 wait_update 触发规则
linux·运维·服务器·python
m0_7381207221 分钟前
HVV应急溯源基础——Linux 系统安全加固配置指南(一)
linux·运维·服务器·安全·网络安全·系统安全
武子康25 分钟前
调查研究-167 Docker Compose 详解:从单容器到多服务编排的工程化入口
运维·docker·云原生·容器·kubernetes·k8s·docker-compose