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 时都会调用这个文件。
注意: 这些文件或文件夹可能并不存在,每个发行版并不一样,要视具体情况而定
相关文章:
2.1 > Shell 是什么、如何更熟练的使用 Bash Shell
Shell 基础知识 Shell是计算机操作系统中的一个命令行解释器,由C语言编写,用于用户与操作系统之间进行交互。用户可以通过Shell输入命令,操作系统接收到这些命令后执行相应的操作。Shell一般还提供了编程语言的基本功能,允许用户…...
YOLO V3 网络构架解析
YOLO V3(You Only Look Once version 3)是由Joseph Redmon等人于2018年提出的一种基于深度学习的目标检测算法。它在速度和精度上相较于之前的版本有了显著提升,成为计算机视觉领域的一个重要里程碑。本文将详细解析YOLO V3的网络架构&#x…...
【zlm】 webrtc源码讲解(二)
目录 webrtc播放 MultiMediaSourceMuxer里的_ring webrtc播放 > MediaServer.exe!mediakit::WebRtcPlayer::onStartWebRTC() 行 60 CMediaServer.exe!mediakit::WebRtcTransport::OnDtlsTransportConnected(const RTC::DtlsTransport * dtlsTransport, RTC::SrtpSession::…...
5G RedCap工业路由器赋能电力物联网应用
随着5G轻量化技术应用的推进,5G RedCap旨在提供低功耗、低成本、广覆盖等功能特点赋能电力智能化升级。特别适用于工业物联网、低空经济、车联网、消费电子和轻量级5G的需求。 5G RedCap工业路由器的特点 低功耗:5G RedCap工业路由器通过节能技术&#…...
029.浏览器自动化-抓取#document下的内容
一、iframe下的#document是什么 #document 是一个特殊的 HTML 元素,表示 <iframe> 元素内部的文档对象。当你在 HTML 页面中嵌入一个 <iframe> 元素时,浏览器会创建一个新的文档对象来表示 <iframe> 内部的内容。这 个文档对象就是 #…...
2024前端html5,css3面试题总汇
1.XML,HTML,XHTML区别⭐ XML:XML是一个可扩展标记语言,主要是用来存储,传输数据的,并非显示数据,可以用来标记数据,定义数据类型,允许用户对自己的标记语言进行定义&…...
css实现外层不换行,内层换行
css实现上图效果,内容A和B整体不换行,B内容中换行 <div className"description"> <div className"label">{formatMessage({id: description})}</Col> <divclassName"value"> &l…...
word取消自动单词首字母大写
情况说明:在word输入单词后首字母会自动变成大写 (1)点击菜单栏文件 (2)点击“更多”——>“选项” (3)点击“校对”——>“自动更正选项” (4)取消“句首字母大写…...
flex常用固定搭配
flex常用固定搭配 flex简写:flex-grow(项目放大),flex-shrink (项目缩小),flex-basis(项目本身) flex: 1; 全写:flex: 1 1 0%;内容自动放大或缩小占满剩余…...
Kafka、Kafka Streams、Drools、Redis 和分布式数据库的风控系统程序
由于实时风控系统难度较大,集成框架设计各个单位均有特点,快速建立一个通用性较强,学习、实施和使用成本较低的框架尤其重要。 提供一个简化的 Java 程序示例,演示如何将 Kafka 消息中间件、Kafka Streams 计算引擎、Drools 规则…...
C++在实际项目中的应用第一课:游戏开发中的C++
第五章:C在实际项目中的应用 第一课:游戏开发中的C 1. 游戏引擎架构的详细分析 游戏引擎是现代游戏开发的核心,负责处理图形渲染、物理计算、音频管理和用户输入等多项功能。以下是游戏引擎架构的各个主要组成部分及其详细分析。 1.1 渲染…...
一键下载海外youtbe视频 解锁版 支持多分辨率
下载:https://pan.quark.cn/s/387e1110ebe5 【应用名称】:Snaptube 【应用版本】:7.28.0 【应用大小】:26.6M 【测试机型】:小米10S 【适用平台】:Andriod 【版本说明】:解锁版...
Scala内部类的运用
内部类:定义在类里面的类(内部类可以访问私有成员用它来操作类的私有成员,封闭性更好) class Student{var age18def say():Unit{}class Book{val bookName: Any "Scala程序设计"}}object Test19 {def main(args: Arra…...
【在Linux世界中追寻伟大的One Piece】Socket编程UDP
目录 1 -> UDP网络编程 1.1 -> V1版本 -echo server 1.2 -> V2版本 -DictServer 1.3 -> V2版本 -DictServer(封装版) 1 -> UDP网络编程 1.1 -> V1版本 -echo server 简单的回显服务器和客户端代码。 备注:代码中会用到地址转换函数。 noc…...
机器学习在聚合物及其复合材料中的应用与实践
在当前的工业和科研领域,聚合物及其复合材料因其卓越的物理和化学性能而受到广泛关注。这些材料在航空航天、汽车制造、能源开发和生物医学等多个行业中发挥着至关重要的作用。随着材料科学的发展,传统的实验和理论分析方法已逐渐无法满足新材料研发的需…...
用大模型或者预训练模型对图片进行OCR
背景:使用大模型或者预训练模型(比如来自huggingface上的模型)对图片进行OCR,并将识别结果标记在图片原文的下方。 愿我们终有重逢之时,而你还记得我们曾经讨论的话题。 QQ group 868373192 QQ second group 277356808 要使用预训练模型对图片进行OCR(光学字符识别)…...
如何使用的是github提供的Azure OpenAI服务
使用的是github提供的Azure OpenAI的服务gpt-4o 说明:使用的是github提供的Azure OpenAI的服务,可以无限薅羊毛。开源地址 进入: 地址 进入后点击 右上角“Get API key”按钮 点击“Get developer key” 选择Beta版本“Generate new to…...
elementUI进度条el-progress不显示白色
效果图 通过设置百分比为100,动态修改进度条的宽度完成 <template><div class"myProgressBox"><div class"index">{{ index }}</div><div class"typeTitle">{{ typeTitle }}</div><div class"twoP…...
学习笔记——路由——IP组播-PIM(协议无关组播)-概述/PIM模式
八、PIM(协议无关组播) 1、前言 在单播中,是一对一的模型,路由器将IP数据包发往目标地址,因此,单播路由器不用关心发送数据包得源地址。而组播数据流量由组播产生,发向一组接收者,那们组播路由器如何这道…...
TCP 协议学习
一、引言 在当今的网络通信世界中,TCP(Transmission Control Protocol,传输控制协议)是最为重要的协议之一。它为各种网络应用提供了可靠的、有序的数据传输服务,是互联网通信的基石。无论是网页浏览、电子邮件发送、…...
python3的基本数据类型:String(字符串)
一. 简介 本文简单学习了一下 python3中的一种数据类型: String(字符串)。 Python中的String类型是一种用于表示文本数据的数据类型。 它可以包含字母、数字、符号等字符,用于存储文本信息。 二. python3的基本数据类型&…...
面试总结(2024/10/16)
面试总结(2024/10/16) 面试11.闭包2.promise3.全局数据的保存4.多模板切换,布局,系统主题颜色5.同一个搜索,不同的搜索条件,输入框不同的校验方法6.自定义一个组件,包括哪些属性7.多个父组件之间…...
从图像识别到聊天机器人:Facebook AI的多领域应用
随着人工智能技术的快速发展,Facebook已在多个领域内广泛应用AI技术,以提升用户体验、提高效率并推动创新。从图像识别到聊天机器人,Facebook的AI应用涵盖了社交媒体的方方面面,下面我们将深入探讨这些应用的具体实现及其对用户生…...
linux中级(NFS服务器)
NFS:用于在NNIX/Linux主机之间进行文件共享的协议 流程:首先服务端开启RPC服务,并开启111端口,服务器端启动NFS服务,并向RPC注册端口信息,客户端启动RPC,向服务器RPC服务请求NFS端口࿰…...
微软主动出击,“钓”出网络钓鱼者
微软正采取一种巧妙的策略来对抗网络钓鱼行为者,其手段是通过访问Azure平台创建高度仿真的蜜罐租户,以此作为诱饵,吸引网络犯罪分子进入,进而收集他们的相关信息。 凭借所收集的数据,微软能够绘制出恶意基础设施的地图…...
Xcode16 编译运行YYCache iOS18 sqlite3_finalize 闪退问题解决方案
问题原因 升级Xcode 16 之后,真机运行APP,发现会有Crash,崩溃堆栈线上Crash 在 YYCache 之中。如下图所示 崩溃堆栈如下: * thread #1, queue com.apple.main-thread, stop reason signal SIGABRTframe #0: 0x00000001d9391…...
Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)
目录 一. Kafka安装包获取 1. 官网地址 2. 百度网盘链接 二. 环境要求 1. Java 运行环境 (1) 对 java 环境变量进行配置 (2) 下载完毕之后进行解压 三. 启动Zookeeper 四. 启动Kafka (1) 修改Conf下的server.properties文件,修改kafka的日志文件路径 (2)…...
django模板相关配置
模板引擎配置 Django支持多种模板引擎,最常用的是Django自带的模板引擎和Jinja2模板引擎。模板引擎的配置主要在settings.py文件中的TEMPLATES列表中进行。 BACKEND:指定模板引擎。例如,BACKEND: django.template.backends.django.DjangoTe…...
MongoDB等保限制下的连接认证问题
目录 一、问题描述 二、解决方案 三、代码示例 四、拓展知识 一、问题描述 用户调整用户连接认证机制以满足等保要求,调整后程序连接mongodb失败。数据库日志报错如下: {"t":{"$date":"2024-10-10T14:39:07.825+08:00"},"s":&q…...
2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP
文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整,仅供参考! 除WEB,RE,PWN外,其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…...
天津b2b网站建设公司报价/体育新闻最新消息
作者:任仲禹 爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来…...
资讯网站模版/百度推广
初学Java Web,看的是明日科技的《Java Web从入门到精通》,其中第六章 JSP内置对象 6.2.3节 获取cookie 有一个例子: 通过cookie保存并读取用户登录信息: index.jsp 代码如下 <% page language"java" contentType&q…...
wordpress精简/比较靠谱的推广平台
java服务器在线上运行了一段时间后,服务器响应缓慢排查。命令:toptop命令截图通过top命令分析:进程编号17195占用内存达到5.2g,但是此进程使用cpu却很少,说明不是进程内存死循环造成的内存开销很大,而是由进…...
博客网站排名/百度号码查询平台
拿代码来说话 我们的需求就是点击翻页功能,实现表格内容局部刷新且能够翻到对应的页面上,不明白? 那么就看看下面的图,需要达到的效果如下所示: 现在要实现的功能就是把红线框起来的表单内容 在点击翻页的时候 只刷新这…...
网站建设流程操作说明/信阳百度推广公司电话
买书问题 1.问题描述 上柜的《哈利波特》平装本系列,一共有五卷。假设每一卷单独销售均需8欧元。如果读者一次购买不同的两卷,就可以扣除5%的费用,三卷则更多。假设具体折扣的情况如下: 本数 2 折扣 5% …...
网站建设公制度/海口seo快速排名优化
写在前面日复一日的生活、日复一日的工作,时间久了,可能会有些厌恶,仿佛每天清晨起就在盼着黄昏来临,但每一天又是那样的漫长,有时候真的觉得度日如年四个字是那么中肯,所以现代社会才会有那么多的人想要放…...