3.2 > Bash
概览
在上一节中我们了解了关于 Shell 的执行流程,知道了在 Linux 环境中一般有哪些常用的 Shell。而在本节中,将会学习到 Linux 中最常见的一个 Shell —— Bash,了解到 bash 的相关知识和用法。
本节目录
- 概览
- 相关知识
- bash 命令提示符
- bash 基本格式
- bash 常用特殊符号
- 特殊字符:
- 通配符:
- 逻辑运算符:
- 重定向符:
- 命令替换符:
- 变量和环境符:
- 引号符:
- 其他符号:
- bash 有哪些常用配置文件
- 可能常用的系统级配置文件:
- 可能常用的用户级配置文件:
- bash 的配置文件加载顺序:
- bash 内建命令
- 几个常用的内建命令
相关知识
在上一节中说到,bash 是 sh 的拓展集,除开一些特殊情况,它差不多完全兼容 sh,所以说 bash 也是众多 Linux 发行版中默认使用最多的 Shell。
bash 命令提示符
[iris@localhost ~]$
- iris:登录到当前终端的用户名称。
- localhost:当前计算机的主机名称。
- ~:当前用户所在的目录,在此处表示的是用户所在的家目录。
- $:当前用户的级别,在此处表示当前用户为普通用户,# 表示超级用户。
在非特殊情况下,我们并不推荐你使用超级用户来管理你的计算机,必要情况下可以使用 sudo 来暂时切换到超级用户权限来管理计算机,这将会在后面说到。
bash 基本格式
[iris@localhost ~]$ 命令 [OP] [ARG]
- 命令:指定要执行的操作。例如:ls、cd、echo 等。
- OP:命令选项,用于修改命令的行为,通常以单个短划线(-)或双短划线(–)开头;如 ls -l 或 ls --all。
- ARG:命令需要操作的对象,例如文件或目录名称;如 ls -l /usr。
bash 常用特殊符号
所有的特殊符号在后面的所有章节中都会提到
特殊字符:
| 符号 | 含义 | 示例 |
|---|---|---|
| \ | 转义字符,用于转义特殊字符 | echo $HOME |
| # | 注释符,一般用于在bash 脚本中注释文字 | # this is note |
| ~ | 主目录符,表示当前用户家目录 | ls ~ |
| . | 一个点表示当前目录 | ls . |
| … | 两个点表示上一级目录 | cd … |
| - | 表示上一次所在的目录 | cd - |
| & | 将命令置于后台运行 | sleep 5 & |
通配符:
| 符号 | 含义 | 示例 |
|---|---|---|
| * | 匹配 >= 0 个的任意字符 | ls *.txt |
| ? | 匹配任意 1 个字符 | ls file?.txt |
| + | 匹配任意字符至少 1 个 | echo “abc123” | grep -E “[a-z]+” |
| [ ] | 匹配括号中的任意一个字符或者一个范围。如 [a-z] 匹配所有小写字母;[2,e,4] 只能匹配 2、e、4 三个字符;可以与符号 ! 联合使用,[!0-9] 匹配除数字之外的任意字符 | ls file[1-3].txt 匹配以 1、2、3任意一个字符结尾的 txt 文件 |
| { } | 扩展或者枚举括号中每一个字符 | ls -l {a,c,d} 只查看括号中规定的目录 |
逻辑运算符:
| 符号 | 含义 | 示例 |
|---|---|---|
| && | 逻辑与,前一个命令成功后执行后一个命令,不会忽略返回值,成功True、失败False | mkdir test && cd test |
| || | 逻辑或,无论前一个命令是否成功,不会忽略返回值 | cat txt || touch txt |
| ! | 用于执行历史中的命令;也是逻辑非运算 | ! 3 ,执行 history 中的第三条命令 |
| ; | 顺序执行,无论前一个命令是否成功,会忽略返回值 | mkdir test; cd test |
重定向符:
| 符号 | 含义 | 示例 |
|---|---|---|
| > | 输出重定向,将覆盖文件 | echo “Hello” > file.txt |
| >> | 输出重定向,追加内容到文件 | echo “Hello” >> file.txt |
| < | 输入重定向,从文件中读取 | wc -l < file.txt |
| 2> | 错误输出重定向到文件 | ls /invalid-dir 2> error.log |
| &> | 标准输出和错误输出同时重定向到文件 | command &> output.txt |
| << | Here Document,用于多行输入 | cat << EOF |
| | | 管道符,将前一命令的输出作为后一命令的输入 | cat file.txt | grep Hello |
命令替换符:
| 符号 | 含义 | 示例 |
|---|---|---|
| ` ` | 使用反引号执行命令并返回结果 | echo `date` |
| $(cmd) | 与反引号功能相同,但更推荐使用 | echo $(date) |
变量和环境符:
| 符号 | 含义 | 示例 |
|---|---|---|
| $ | 引用变量值 | echo $HOME |
| ${} | 用于更复杂的变量操作或避免歧义 | echo ${USER} |
| $n | 获取命令行传递的第 n 个参数,第 0 个参数为命令本身 | echo $1 |
| $@ | 获取所有参数,将每个参数视为一个独立单元 | echo $@ |
| $* | 获取所有参数,将所有参数视为一个整体,当作一个字符串 | echo $* |
| $# | 脚本中传递的参数总个数 | echo $# |
| $? | 获取上一个命令的退出状态码 | echo $? |
| $$ | 当前进程的 PID | echo $$ |
| $! | 最近运行的后台任务的 PID | echo $! |
更多与 bash shell 编程有关的符号将在后面陆续说到
引号符:
| 符号 | 含义 | 示例 |
|---|---|---|
| ’ | 单引号,原样输出,变量和特殊字符无效 | echo ‘$HOME’ |
| " | 双引号,支持变量替换和转义字符 | echo “Home: $HOME” |
| ` | 引号,命令替换 | echo date |
其他符号:
| 符号 | 含义 | 示例 |
|---|---|---|
| () | 分组,用于控制命令优先级;用于运算 | (cd /tmp && ls) |
| : | 空操作,始终返回成功 | : |
| !! | 执行上一条命令 | !! |
| !* | 获取上一条命令的所有参数 | !* |
还有众多作者未曾使用过的特殊符号,欢迎有人在评论区指正
bash 有哪些常用配置文件
可能常用的系统级配置文件:
- /etc/profile:是系统级的环境变量和启动配置文件,它适用于所有用户的登录 Shell 会话(仅适用于登录 shell)。它在用户登录时被执行,一般用它来设置全局环境变量或者执行其他全局脚本文件。
- /etc/profile.d/:额外的环境变量或启动脚本,所有用户生效。
- /etc/bashrc 或 /etc/bash.bashrc:是系统级的 Bash 配置文件,用于为所有用户的非登录 Shell 提供全局配置。
- /etc/bash_completion.d: Bash 自动补全(tab 补全) 的扩展目录,存放特定命令的补全脚本。当启用了 Bash 补全功能时,该目录下的脚本会自动加载,并为对应的命令提供 Tab 键补全。(通常可以安装 bash-completion 工具包或手动添加补全脚本)。关于此用法将在文章最后的附录部分进行介绍。
- /etc/skel/:是 Linux 系统中的“用户模板目录”,用于存放新用户的默认配置文件。当创建新用户时(使用 useradd 命令),系统会自动复制 skel 目录中的所有文件到新用户的 home 目录。也用于初始化新用户的 Shell 环境,避免每次创建用户都手动配置 .bashrc、.profile 等。
可能常用的用户级配置文件:
- ~/.bashrc:非登录 Shell 配置。
- ~/.bash_profile:登录 Shell 配置。
- ~/.profile:兼容 sh 脚本的用户级登录 Shell 配置。
- ~/.bash_logout:登出Bash 会话时执行。
注意:这些配置文件会随时随着系统版本的变化而变化,但大致作用不会做出大的改变。(如 ~/.profile 在最新的 RHEL9 中就默认不存在,但是如果手动创建它,那它将仍然是一个有效的配置文件)
bash 的配置文件加载顺序:
- 对于登录 shell 的加载顺序:
- 加载全局配置:/etc/profile、/etc/profile.d/*.sh(由 /etc/profile 加载)
- 加载用户级配置:~/.bash_profile:
- 若 ~/.bash_profile 文件不存在:尝试加载 ~/.bash_login:
- 若 ~/.bash_login 也不存在,则加载 ~/.profile
- 若 ~/.bash_profile 文件不存在:尝试加载 ~/.bash_login:
- 若 ~/.bash_profile 里有 source ~/.bashrc,则继续加载 ~/.bashrc
- 登出时加载:~/.bash_logout
- 对于非登录 shell 的加载顺序:
- 加载系统级配置文件:/etc/bashrc(RHEL系列);/etc/bash.bashrc (Debian/Ubuntu等系列)
- 加载用户级配置文件:~/.bashrc
bash 内建命令
bash 内建命令是 bash 自带的命令,它们不依赖于 /usr/bin/ 或其他外部程序,因此执行速度更快,并且即使 /usr/bin/ 不可用,它们仍然可以运行。
[root@localhost ~]# type logout # 查看单个命令是不是 bash 内建命令,type本身也是内建命令
logout 是 shell 内建
[root@localhost ~]# compgen -b # 查看 bash 包含的所有内建命令,或使用 help 查看所有内建命令及其语法
.
:
alias
bg
...
几个常用的内建命令
内建命令 cd:
[root@localhost ~]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg
[root@localhost ~]# cd /usr # 去往各个目录
[root@localhost usr]# ls
bin games include lib lib64 libexec local sbin share src tmp
内建命令 history、fc:
[root@localhost ~]# history # 显示所有历史执行过的命令1 ip a2 ping baidu.com....117 ls118 history
[root@localhost ~]# fc 117 # 编辑并重新执行对应编号的历史命令,将 ls 重新编辑为 ls -l 执行。(!117 只是执行对应编号的命令)
ls -l
总用量 8
-rw-r--r--. 1 root root 2 2月 12 13:00 1
drwxr-xr-x. 2 root root 6 1月 18 10:47 公共
内建命令 alias、unalias:
[root@localhost ~]# la
bash: la: command not found...
[root@localhost ~]# alias la="ls -a" # 给一些命令设置临时别名,也可以写入.bashrc等预加载脚本中永久生效
[root@localhost ~]# la
. 公共 视频 文档 音乐 anaconda-ks.cfg .bash_logout .bashrc .config .local .tcshrc
.. 模板 图片 下载 桌面 .bash_history .bash_profile .cache .cshrc .mozilla
[root@localhost ~]# unalias la # 反过来也可以去取消别名
[root@localhost ~]# la
bash: la: command not found...
内建命令 logout、exit:
[root@localhost ~]# logout # 退出登录 Shell(适用于 SSH 或终端)SSH 192.168.0.100: session closed
按任意键重新连接
[root@localhost ~]# exit # 退出当前 Shell,并返回退出代码
内建命令dirs、pwd:
[root@localhost ~]# cd /usr/share/
[root@localhost share]# dirs # 显示当前目录栈
/usr/share
[root@localhost share]# pwd # 一样的功能
/usr/share
内建命令 jobs、fg、bg:
[root@localhost share]# sleep 100 &
[1] 2704
[root@localhost share]# jobs # 查看所有后台作业
[1]+ 运行中 sleep 100 &
[root@localhost share]# fg # 将后台作业调度到前台执行
sleep 100
[root@localhost share]# bg # 将后台已暂停的作业恢复到后台执行
内建命令 disown、kill:
[root@localhost ~]# sleep 1000 &
[1] 2720
[root@localhost ~]# jobs
[1]+ 运行中 sleep 1000 &
[root@localhost ~]# disown # 让已经存在的任务脱离当前终端运行,当关闭终端时,此任务将不会受到任何影响
[root@localhost ~]# jobs
[root@localhost ~]#
[root@localhost ~]# ps aux | grep sleep # 任务已脱离终端运行
root 2720 0.0 0.0 220956 1024 pts/0 S 12:50 0:00 sleep 1000
root 2724 0.0 0.0 221684 2484 pts/0 S+ 12:52 0:00 grep --color=auto sleep
[root@localhost ~]# kill -9 2720 # 杀死任务id为 2720 的任务
[root@localhost ~]# ps aux | grep sleep
root 2727 0.0 0.0 221684 2428 pts/0 S+ 12:55 0:00 grep --color=auto sleep
其他常用内建命令将在 shell 编程中提到
相关文章:
3.2 > Bash
概览 在上一节中我们了解了关于 Shell 的执行流程,知道了在 Linux 环境中一般有哪些常用的 Shell。而在本节中,将会学习到 Linux 中最常见的一个 Shell —— Bash,了解到 bash 的相关知识和用法。 本节目录 概览相关知识bash 命令提示符bas…...
排序合集(一)
一、直接插入排序 (Insertion Sort) 基本思想 直接插入排序是一种简单直观的排序算法,就像我们打扑克牌时的操作:每次摸到一张牌,都会把它插入到手中已排好序的牌的正确位置。通过这种方式,逐步构建一个有序序列。 步骤 从第一…...
Spring:Spring实现AOP的通俗理解(有源码跟踪)
目录标题 AOP定义SpringAOP和AspectJ联系Spring如何实现AOPAOP的代理对象AOP的代理对象生成过程 AOP定义 AOP (Aspect Orient Programming):直译过来就是 面向切面编程。AOP 是一种编程思想用途:Transactions (事务调…...
通过openresty和lua实现随机壁纸
效果: 图片存放路径: /home/jobs/webs/imgs/ ├── default/ │ ├── image1.jpg │ ├── image2.png ├── cats/ │ ├── cat1.jpg │ ├── cat2.gif ├── dogs/ │ ├── dog1.jpg访问http://demo.com/imgs/default 随机返回…...
Day 36 卡玛笔记
这是基于代码随想录的每日打卡 56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1…...
【Elasticsearch】match查询
Elasticsearch 的match查询是全文搜索中最常用和最强大的查询类型之一。它允许用户在指定字段中搜索文本、数字、日期或布尔值,并提供了丰富的功能来控制搜索行为和结果。以下是match查询的详细解析,包括其工作原理、参数配置和使用场景。 1.match查询的…...
MATLAB 生成脉冲序列 pulstran函数使用详解
MATLAB 生成脉冲序列 pulstran函数使用详解 目录 前言 一、参数说明 二、示例一 三、示例二 总结 前言 MATLAB中的pulstran函数用于生成脉冲序列,支持连续或离散脉冲。该函数通过将原型脉冲延迟并相加,生成脉冲序列,适用于信号处理和系统…...
开源、免费项目管理工具比较:2025最新整理30款
好用的开源、免费版项目管理系统有:1.Redmine;2. Taiga;3. OpenProject; 4.ProjectLibre; 5.GanttProject; 6.Tuleap; 7.Trac;8. Phabricator; 9.Notion; 10.…...
ffmpeg -muxers
1. ffmpeg -muxers -loglevel quiet 显示ffmpeg支持的复用器。复用器的作用是将多个独立的媒体流(如视频流、音频流、字幕流等)按照一定的格式和规则组合成一个单一的复合流;解复用器的作用与复用器相反,它将复合流分解为多个独立…...
设置mysql的主从复制模式
mysql设置主从复制模式似乎很容易,关键在于1)主库启用二进制日志,2)从库将主库设为主库。另外,主从复制,复制些什么?从我现在获得的还很少的经验来看,复制的内容有表,用户…...
ASP.NET Core的贫血模型与充血模型
目录 概念 需求 贫血模型 充血模型 总结 概念 贫血模型:一个类中只有属性或者成员变量,没有方法。充血模型:一个类中既有属性、成员变量,也有方法。 需求 定义一个类保存用户的用户名、密码、积分;用户必须具有…...
君海游戏岗位,需要私我
游戏岗位内推啦,需要找我哈 共14个职位 广告投放主管 社会招聘全国 广告投放 社会招聘全国 设计主管 社会招聘全国 海外投放 社会招聘广东省广州市 海外运营 社会招聘广东省广州市 产品运营专员 社会招聘广东省广州市 平台运营 社会招聘广东…...
IBM服务器刀箱Blade安装Hyper-V Server 2019 操作系统
案例:刀箱某一blade,例如 blade 5 安装 Hyper-V Server 2019 操作系统(安装进硬盘) 刀箱USB插入安装系统U盘,登录192.168... IBM BlandeCenter Restart Blande 5,如果Restart 没反应,那就 Power Off Blade 然后再 Power On 重启后进入BIOS界面设置usb存储为开机启动项 …...
Unity中实现动态图集算法
在 Unity 中,动态图集(Dynamic Atlas)是一种在运行时将多个纹理合并成一个大纹理图集的技术,这样可以减少渲染时的纹理切换次数,提高渲染效率。 实现原理: 动态图集的核心思想是在运行时动态地将多个小纹理…...
MySQL中的覆盖索引的使用
文章目录 1. 覆盖索引的定义2. 覆盖索引的工作原理2.1 索引和回表2.2 如何实现覆盖索引 3. 覆盖索引的优势4. 覆盖索引的限制5. 创建和优化覆盖索引5.1 分析查询模式5.2 确定需要覆盖的列5.3 创建复合索引5.4 使用覆盖索引优化查询5.5 避免过度索引5.6 索引整理与优化 6. 实际应…...
XML DOM
XML DOM XML DOM(Document Object Model)是一种用于访问和操作XML文档的标准方式。它提供了一种树形结构来表示XML文档,使得开发者能够方便地对XML数据进行读取、修改和操作。本文将详细介绍XML DOM的基本概念、结构、操作方法以及应用场景。 一、XML DOM的基本概念 XML …...
[开源]MaxKb+Ollama 构建RAG私有化知识库
MaxKbOllama,基于RAG方案构专属私有知识库 关于RAG工作原理实现方案 一、什么是MaxKb?二、MaxKb的核心功能三、MaxKb的安装与使用四、MaxKb的适用场景五、安装方案、 docker版Docker Desktop安装配置MaxKb安装和配置 总结和问题 MaxKB 是一款基于 LLM 大…...
迅为RK3568开发板篇OpenHarmony实操HDF驱动配置LED-LED测试
将编译好的镜像全部进行烧写,镜像在源码根目录 out/rk3568/packages/phone/images/目录下。 烧写完成之后,在调试串口查看打印日志,如下图所示: 然后打开 hdc 工具,运行测试程序,输入“led_test 1”&…...
将Mac上Python程序的虚拟环境搬到Windows
1. 导出Mac上Python虚拟环境的依赖 cd py && source venv/bin/activate && pip freeze > requirements.txt 2. 在Windows上创建一个新的虚拟环境 python -m venv venv 3. 激活虚拟环境 venv\Scripts\activate 4. 安装依赖 pip install -r requiremen…...
大语言模型评价 怎么实现去偏见处理
大语言模型评价 怎么实现去偏见处理 在训练大语言模型(LLMs)时,去偏处理对于避免模型学习到带有偏见的模式至关重要,以下从数据处理、模型训练、评估监测三个阶段介绍具体实现方法,并结合招聘场景进行举例说明: 数据处理阶段 数据清洗:仔细审查并剔除包含明显偏见的训练…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
