2.1 > Shell 是什么、如何更熟练的使用 Bash Shell

Shell 基础知识

Shell是计算机操作系统中的一个命令行解释器,由C语言编写,用于用户与操作系统之间进行交互。用户可以通过Shell输入命令,操作系统接收到这些命令后执行相应的操作。Shell一般还提供了编程语言的基本功能,允许用户编写脚本来自动执行任务。

如下图,当用户在Shell上输入命令后,Shell将负责把命令转换成Kernel能够理解的语句交给Kernel来执行
在这里插入图片描述
Shell有多种类型,最常见的有以下几种:

  • Bash(Bourne Again Shell):大多数Linux发行版中默认的Shell,支持丰富的功能和脚本编写。
  • Zsh(Z Shell):与Bash相似,但提供了更多的功能和可配置性。只有少数发行版设置为了默认Shell,如Kali Linux。
  • PowerShell:Windows系统的命令行Shell,集成了.NET框架,支持面向对象的脚本编写。
  • Sh(Bourne Shell):早期的Shell,Bash是其扩展版。

与Shell有关的命令:

[root@demo ~]$ echo $SHELL	 	# 查看当前所使用的Shell类型
/bin/bash[root@demo ~]$ chsh -l		# 列出当前系统所安装的Shell类型有哪些
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/zsh
/bin/zsh[test@demo ~]$ chsh -s /bin/zsh		#更改当前Shell类型
正在更改 test 的 shell。
密码:
shell 已更改。

关于Bash,为什么众多发行版默认选择了Bash??

  • 兼容性好,能向后兼容早期的Sh,能够使用大量已有的脚本。
  • 支持复杂的脚本编写,提供如 if … else … 、for 等丰富的编程语言功能。
  • 强大的历史命令记录和自动补全功能。
  • 简单,零基础都能学会(相比于zsh等其他shell)。
  • 丰富的环境变量和内建命令 等等。

Bash 终端的格式如图:
在这里插入图片描述

  • 目录位置:”~“ 表示当前位置为用户家目录,普通用户在 /home/[用户名] ,root 用户在 /root 。
  • 当前用户标识:”#“ 表示当前用户为 root 用户, “$” 表示当前用户为普通用户,需注意每种shell类型的标识不一定相同。

与Bash有关的常用命令:

[test@demo ~]$ help			#使用 help 查看当前所有的内建命令
GNU bash,版本 4.4.20(1)-release (x86_64-redhat-linux-gnu)
这些 shell 命令是内部定义的。请输入 `help' 以获取一个列表。
......[test@demo ~]$ help cd			#查看一个内建命令的帮助手册
cd: cd [-L|[-P [-e]] [-@]] [目录]改变 shell 工作目录。改变当前目录至 DIR 目录。默认的 DIR 目录是 shell 变量 HOME 的值。
......
[test@demo ~]$ help mkdir		# 查看一个非内建命令
-bash: help: 没有与 `mkdir` 匹配的帮助主题。尝试 `help help``man -k mkdir``info mkdir`。[test@demo ~]$ man cd			# 使用 man 命令可以查看更加详尽的命令说明,前提是英文不错[test@demo ~]$ type cd			# 使用 type 查看一个命令是不是内建命令
cd 是 shell 内建
[test@demo ~]$ type -t mkdir		# 可以使用 -t 选项简略查看, 详细使用方法可以请使用 --help 帮助
file# 支持多命令的执行
[test@demo ~]$ mkdir dir1; cd dir1; touch demo		# 使用 ; 连接,前一个命令无论成功失败,后一个命令都会执行
[test@demo ~]$ tree dir1
dir1
└── demo# 如果命令之间存在相关性,则可以使用 && 或 || 来连接
[test@demo ~]$ mkdir dir1 && touch dir1/demo1		# 使用 && 连接,当前一个成功才会执行后一个
[test@demo ~]$ tree dir1
dir1
└── demo1[test@demo ~]$ ls
[test@demo ~]$ cat demo || touch demo		# 使用 || 连接,当前一个成功则后一个不会执行,当前一个失败后一个才会执行
cat: demo: 没有那个文件或目录
[test@demo ~]$ ls
demo[test@demo ~]$ touch demo1 \		# 支持命令的多行输入, 使用 \ 符号作为每一行的结尾
> demo2 \
> demo3
[test@demo ~]$ ls
demo1  demo2  demo3[test@demo ~]$ history			# 使用 history 查看历史命令,它读取的是用户家目录下的 .bash_history 文件的内容1  touch 12  history[test@demo ~]$ env		# 使用 env ( 或 printenv ) 查看当前 shell 的环境变量
LS_COLORS=rs=0:di=38;5;33:ln=38;5; ......# 使用 alias 创建别名,系统默认创建了 ll、rm、mv 的别名,可在家目录下的 .bashrc 文件中查看
[test@demo ~]$ alias la="ls -a"		# 相反,可以使用 unalias 删除别名
[root@demo ~]$ la		# 执行通过 alias 自定义的命令
.  ..  anaconda-ks.cfg  .bash_logout  .bash_profile  .bashrc  .viminfo[root@demo ~]$ export HELLO="hello"		# 使用 export 设置环境变量,仅在当前进程和其子进程中有效,听不懂就看下面的例子
# 什么叫在其进程和其子进程中生效,请通过下面的例子理解
[root@demo ~]$ WORLD="world"		# 直接设置变量,此变量仅在当前 bash 进程起作用
[root@demo ~]$ echo -e '#!/bin/bash \n echo $HELLO \n echo $WORLD' > 2  # 创建了 demo 文件,在其中执行两个 echo 命令
[root@demo ~]$ bash demo		# 使用 bash (或 ./ ) 命令来执行文件,bash 命令会创建一个子进程来执行该文件
hello# world 并没有打印
[root@demo ~]$ source demo		# 使用 source ( 或 . ) 命令来执行文件,该文件将被放在当前进程来执行
hello
world
# 上述例子说明,WORLD 变量的作用域只有本进程,而 export 定义的变量将是整个 bash 进程树

熟悉 Bash 在加载流程中可能需要用到的文件

  • 对于登录类型的加载,就是用户通过 SSH 或者 TTY 终端的方式进入而加载的 Bash 环境。Bash 将会按照如下顺序来加载配置文件:
    • 首先读取系统配置文件 /etc/profile,此文件所有用户都会加载,加载此文件的时候,会递归加载 /etc/profile.d 目录的文件。
    • 其次将依次读取用户配置文件 ~/.bash_profile 、 ~/.bash_login 、 ~/.profile,这些文件均在用户家目录下,用于每个用户自定义其 Bash 初始化环境或脚本等。
    • 最后加载 ~/.bashrc 文件,此文件一般通过其他文件手动加载(加载此文件的时候,还可能会递归手动加载 /etc/bashrc 文件),如通过 ~/.bash_profile 文件来加载它,若此文件没有被其他文件(如 ~/.bash_profile)手动加载,则登录时将不会加载此文件。
    • 当用户注销登录时,将加载 /etc/bash.bash_logout 和 ~/.bash_logout 两个文件。

注意: 这些文件或者目录可能并不存在,具体要看发行版本

  • 对于非登录类型的加载,就是指此 Bash 是通过其他程序创建或唤醒的,此种情况下只会加载 ~/.bashrc ,和上面一样,递归加载 /etc/bashrc 文件需要用户在 ~/.bashrc 文件中显式的指定。

与 Bash 相关文件的释义

除了我们常见的与 Bash 配置和执行相关的文件如 ~/.bashrc、/etc/profile、/etc/bashrc 等之外,Bash 还涉及许多其他文件,涵盖用户配置、历史记录、别名定义、环境变量、自动补全、登出清理等。以下是与 Bash 相关的一些文件:

除了黄色标记需要熟悉,其他知道就行了

  • 用户相关的配置文件
    • ~/.bash_profile:用于登录 Shell 时加载的用户个性化配置。一般会设置环境变量、调用 ~/.bashrc 等。
    • ~/.bash_login:登录 Shell 时的备用配置文件。如果没有 ~/.bash_profile,则加载此文件。
    • ~/.profile:某些非 Bash Shell 也使用的通用登录配置文件。如果没有 ~/.bash_profile 和 ~/.bash_login,Bash 会尝试加载此文件。
    • ~/.bashrc:用于非登录 Shell 的用户配置文件。常用于定义别名、函数、环境变量等。一般通过 ~/.bash_profile 加载。
  • 全局配置文件
    • /etc/profile:系统范围的登录 Shell 配置文件,所有用户都会加载。通常设置全局环境变量并调用 /etc/profile.d/ 中的脚本。
    • /etc/bashrc(或 /etc/bash.bashrc):系统范围的非登录 Shell 配置文件。通常定义系统范围的别名、Shell 选项等。一般通过 ~/.bashrc 加载。
  • 自动补全相关的文件
    • /etc/bash_completion:自动补全配置文件,用于定义命令的自动补全规则。
    • /etc/bash_completion.d/:目录中包含为特定命令定义的自动补全脚本(比如 git、yum 等)。这些脚本帮助提供命令参数的补全功能。
  • 历史记录相关的文件
    • ~/.bash_history:记录用户执行的命令历史。当用户执行 history 命令时,系统会读取这个文件。
    • HISTFILE 环境变量:指定历史记录文件的路径,默认是 ~/.bash_history,但你可以通过设置 HISTFILE 改变位置。
  • 登出相关的文件。
    • ~/.bash_logout:当用户退出登录 Shell 时,执行该文件中的命令。通常用于清理操作,比如清除历史记录、打印退出消息等。
  • 别名相关文件
    • ~/.bash_aliases:用户自定义别名的文件。某些发行版可能会推荐在这个文件中定义别名,而不是直接在 ~/.bashrc 中。这些别名会在 ~/.bashrc 中被加载。
    • /etc/profile.d/:该目录中可以放置全局别名文件或其他脚本配置。
  • 环境变量相关的文件
    • /etc/environment:用于定义系统范围的环境变量。不同于 /etc/profile,它不会执行 Shell 命令,只用于简单地定义键值对形式的变量。
    • ~/.bash_profile 、 ~/.bashrc、/etc/profile:这些文件也常用于设置环境变量,通过 export 来使变量对所有子进程可见。
  • 启动和初始化相关的文件
    • /etc/rc.local:通常用于定义系统启动时执行的命令。在较老的 Linux 系统中常见,现代发行版中有时被替代为 systemd 的 unit 文件。
    • ~/.inputrc:Bash 使用 GNU Readline 库处理输入,该文件定义了 Readline 的配置,比如键盘快捷键和输入编辑规则。
  • 其他 Bash 相关文件
    • ~/.bash_aliases:某些发行版会推荐将别名放入该文件,并在 ~/.bashrc 中自动加载。
    • /etc/skel/.bashrc 和 /etc/skel/.bash_profile:这些是系统中默认的 Bash 配置文件模板,当新用户账户被创建时,这些文件会被复制到新用户的主目录中,作为初始的 ~/.bashrc 和 ~/.bash_profile。
  • 用户自定义函数文件
    • ~/.bash_functions:用户可以定义自己的 Shell 函数并放在这个文件中,很多发行版推荐通过 .bashrc 加载它。
  • bash命令相关
    • /usr/bin/bash:这是 Bash Shell 程序的二进制文件,位于系统的二进制路径下,用户每次运行 Bash 时都会调用这个文件。

注意: 这些文件或文件夹可能并不存在,每个发行版并不一样,要视具体情况而定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455231.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 VS Code 中轻松绘图:Draw.io Integration 插件详解

文章目录 在 VS Code 中轻松绘图:Draw.io Integration 插件详解一、什么是 Draw.io Integration 插件?二、插件安装指南1. 安装步骤2. 配置插件 三、如何使用 Draw.io Integration 插件?1. 创建新绘图文件2. 编辑现有图表3. 常用功能与技巧 四…

网安加·百家讲坛 | 徐一丁:金融机构网络安全合规浅析

作者简介:徐一丁,北京小西牛等保软件有限公司解决方案部总监,网络安全高级顾问。2000年开始从事网络安全工作,主要领域为网络安全法规标准研究、金融行业安全咨询与解决方案设计、信息科技风险管理评估等。对国家网络安全法规标准…

【数据结构与算法】《布隆过滤器:高效数据筛选的魔法工具》

标题:《布隆过滤器:高效数据筛选的魔法工具》 摘要:本文将带你深入了解布隆过滤器这一神奇的数据结构。从研究推荐系统中的已读内容排除和重复内容去重问题引入,详细介绍布隆过滤器的产生契机、设计思想、优缺点及用途。通过阅读…

机器视觉运动控制一体机在DELTA并联机械手视觉上下料应用

市场应用背景 DELTA并联机械手是由三个相同的支链所组成,每个支链包含一个转动关节和一个移动关节,具有结构紧凑、占地面积小、高速高灵活性等特点,可在有限的空间内进行高效的作业,广泛应用于柔性上下料、包装、分拣、装配等需要…

MyBatis 基础知识:配置文件、映射器与 SQL 示例详解

本篇博客将深入探讨 MyBatis 的基础知识,包括配置文件的设置、映射器的使用以及实际的 SQL 示例。 文章目录 前言 准备工作 根据主键删除 日志输出 ​编辑 预编译SQL SQL注入 ​编辑 参数占位符 新增员工 主键返回 更新 查询(根据ID查询&#x…

世界前沿思想升命学说:鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗、猪

在当今哲学的前沿探索中,山东济南的名人颜廷利教授的《升命学说》一书以其独到的见解和深刻的洞察力,为我们揭示了十二生肖背后的象征意义。这些生肖包括鼠、牛、虎、兔、龙、蛇、马、羊、猴、鸡、狗以及猪,每一种动物都承载着独特的文化寓意…

哥德巴赫猜想渐行渐远

我现在的工作,表明经典分析可能出了问题,如此则连Vinogradov的三素数定理都不成立了,更别说基于L-函数方程的陈氏定理“12”了。事实上即使L-函数方程成立,由于我指出Siegel定理不成立,陈景润和张益唐的工作就不成立。…

卡牌抽卡机小程序,带来新鲜有趣的拆卡体验

随着移动信息技术的发展,小程序得到了快速普及,遍布到了各行各业中,成为企业发展的利器。如今,卡牌抽卡机小程序层出不穷,为玩家带来了更多有趣的拆卡体验。 卡牌在今年中受到了广泛关注,“小马宝莉”等一…

Qt中使用线程之QRunnable

1、自定义1个子类继承自QRunnable 2、重写run方法,编写子线程的业务逻辑 3、使用QThreadPool的全局方法来开启这个线程 4、线程的回收不需要关注,由QThreadPool处理 5、缺点:无法使用信号槽机制 6、适合一些不需要和主线程通信的耗时的任…

如何使用的是github提供的Azure OpenAI服务

使用的是github提供的Azure OpenAI的服务gpt-4o 说明:使用的是github提供的Azure OpenAI的服务,可以无限薅羊毛。开源地址 进入: 地址 进入后点击 右上角“Get API key”按钮 点击“Get developer key” 选择Beta版本“Generate new to…

[Ansible实践笔记]自动化运维工具Ansible(一):初探ansibleansible的点对点模式

文章目录 Ansible介绍核心组件任务执行方式 实验前的准备更新拓展安装包仓库在ansible主机上配置ip与主机名的对应关系生成密钥对将公钥发送到被管理端,实现免密登录测试一下是否实现免密登录 常用工具ansibleansible—docansible—playbook 主要配置文件 Ansible 模…

【数据结构】快速排序(三种实现方式)

目录 一、基本思想 二、动图演示(hoare版) 三、思路分析(图文) 四、代码实现(hoare版) 五、易错提醒 六、相遇场景分析 6.1 ❥ 相遇位置一定比key要小的原因 6.2 ❥ 右边为key,左边先走 …

dd小程序如何监听props中对象的值

组件内代码 Component({mixins: [],data: {infoData:{}},props: {rowData:Object},didMount() {console.log(this.props.rowData,this.props.rowDatathis.props.rowData)this.setData({infoData:this.props.rowData})},didUpdate() {console.log(this.props.rowData)},didUnmo…

落实“双碳”行动,深兰科技推动分子能源技术在AI硬件产品领域的应用及产业化进程

10月21日,上海气候周分子能研究中心(筹)成立仪式在上海环境能源交易所举行。仪式上,深兰科技践行“双碳”目标,与上海东八能源技术有限公司签署分子能源AI应用产业化合作协议。 根据协议,国际分子能量发电开拓者、上海气候周分子能…

论当前的云计算

随着技术的不断进步和数字化转型的加速,云计算已经成为当今信息技术领域的重要支柱。本文将探讨当前云计算的发展现状、市场趋势、技术革新以及面临的挑战与机遇。 云计算的发展现状 云计算,作为一种通过网络提供可伸缩的、按需分配的计算资源服务模式&a…

TMGM平台可靠么?交易是否安全?

在选择外汇交易平台时,安全性与可靠性是投资者最关注的要素之一。作为全球知名的外汇及差价合约交易平台,TMGM(tmgm-pt.com)的安全性与可靠性可以从多个方面进行评估,包括监管环境、资金安全、客户服务、交易技术与服务…

[项目][boost搜索引擎#4] cpp-httplib使用 | log.hpp | 前端 | 测试及总结

目录 编写http_server模块 1. 引入cpp-httplib到项目中 2. cpp-httplib的使用介绍 3. 正式编写http_server 九、添加日志到项目中 十、编写前端模块 十一. 详解传 gitee 十二、项目总结 项目的扩展 写在前面 项目 gitee 已经上传啦 (还是决定将学校和个人…

LabVIEW共享变量通信故障

问题概述: 在LabVIEW项目中,使用IO服务器创建共享变量,并通过LabVIEW作为从站进行数据通信。通讯在最初运行时正常,但在经过一段时间或几个小时后,VI前面板出现错误输出,导致数据传输失败。虽然“分布式系统…

【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线

在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上,华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布。 华为官方透露,截至目前,鸿蒙操作系统在中国市场份额占据 Top2 的领先地位,拥有超过 1.1 亿 的代码行和 6…

[LeetCode] 230. 二叉搜索树中第K小的元素

题目描述: 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 示例 1: 输入:root [3,1,4,null,2], k 1 输出:1示例 2&am…