认识BASH这个Shell
文章目录
- 认识BASH这个Shell
- 硬件、内核与shell
- 为什么要学命令行模式的Shell?
- Bash Shell的功能
- 命令与文件补全(TAB)
- 命令别名设置(alias)
- 历史命令(history)
- 任务管理、前台、后台控制(jobs,fg,bg)
- 通配符
- 程序化脚本
- 查询命令是否为Bash shell 的内置命令(type)
- 使用案例
- 命令的执行与快速编辑按钮
认识BASH这个Shell
管理整个计算机硬件的其实是操作系统的内核(kernel),这个内核是需要保护的。所以我们一般只能通过Shell来跟内核沟通,以让内核完成我们所想要实现的任务。那么系统有多少shell可用呢?为什么要使用bash?
硬件、内核与shell
什么是shell?只要摸过计算机,对于操作系统(不论是Linux、UNIX或是Windows)有点概念的朋友大多听过这个名词,因为只要有操作系统那么就离不开shell这个东西。不过,在讨论shell之前,我们先来了解一下计算机的运行情况吧!举个例子:当你要计算机播放出音乐的时候,你的计算机需要什么东西?
- 硬件:当然就是需要你硬件有声卡这个设备,否则怎么会有声音。
- 内核管理:操作系统的内核可以支持这个芯片组,当然还需要提供芯片的驱动程序
- 应用程序:需要用户(就是你)输入发生声音的命令
这就是基本的一个输出声音所需要的步骤,也就是说,你必须要输入一个命令之后,硬件才会通过你执行的命令来工作。那么硬件如何知道你执行的命令?那就是内核(kernel)的管理工作了,也就是说,我们必须要通过Shell将我们输入的命令与内核沟通,好让内核可以控制硬件来正确无误第工作。
操作系统其实就是一组软件,由于这组软件在控制整个硬件与管理系统的活动检测,如果这组软件能被用户随意使用,若用户应用不当,将会使得整个系统崩溃
但是用户总是需要让用户使用操作系统的,所以就有了在操作系统上面发展的应用程序。用户可以通过应用程序来指挥内核,让内核完成我们所需要的硬件任务。
为什么要学命令行模式的Shell?
学习命令行模式的shell有以下几个原因:
提高效率:
在命令行模式下,可以通过简单的命令完成复杂的任务,比如批量修改文件名、查找文件、处理文本等。这些命令可以通过脚本自动化执行,提高操作效率。方便远程操作:
通过ssh等远程登录工具,可以在远程机器上使用命令行模式的shell,方便远程操作,比如服务器管理、文件传输等。更好地理解计算机:
学习命令行模式的shell可以更好地理解计算机的底层工作原理,比如文件系统、进程管理等。更好地理解编程:
很多编程语言都可以在命令行模式下编写和执行,学习命令行模式的shell可以更好地理解编程语言的底层原理和编写脚本的技巧。适用于各种操作系统:
命令行模式的shell是各种操作系统都支持的,学习命令行模式的shell可以适用于各种操作系统,比如Linux、Mac、Windows等。
Bash Shell的功能
不论你是使用的哪个Linux发行版,你都难逃要学习bash的宿命,那么这个shell有什么好处呢,为什么选择它为默认shell?bash的优点主要有下面几个:
命令与文件补全(TAB)
在bash环境中使用【TAB】是一个很好的习惯,可以让你少打很多字,还可以保证你输入的都是正确的。
- 【TAB】接在一串命令的第一个字后面,则为命令补全
- 【TAB】接在一串命令的第二个字后面,则为文件补全
所以我想知道【c】开头的命令呢?就按下【c [TAB] [TAB]】就行了。
命令别名设置(alias)
假如我需要知道这个目录下面所有文件(包含隐藏文件)及所有的文件属性,那么我就必须要执行【ls -al】 这样的命令,很麻烦,我们就可以使用命令别名的方式。例如想让输入 ls 替换为输入 ls -al,那么该如何做呢?
[root@localhost ~]# alias ls='ls -al'
[root@localhost ~]# ls
总用量 48
dr-xr-x---. 3 root root 179 4月 21 16:48 .
dr-xr-xr-x. 17 root root 224 4月 5 20:11 ..
-rw-------. 1 root root 4765 4月 21 10:07 .bash_history
-rw-r--r--. 1 root root 18 4月 20 08:44 .bash_logout
-rw-r--r--. 1 root root 193 4月 20 08:44 .bash_profile
-rw-r--r--. 1 root root 231 4月 20 08:44 .bashrc
drwxr-----. 3 root root 19 4月 20 10:39 .pki
-rw-r--r--. 1 root root 16 4月 21 09:53 utf8zw
-rw-------. 1 root root 4881 4月 21 16:48 .viminfo
-rw-r--r--. 1 root root 83 4月 20 20:16 .vimrc
-rw-r--r--. 1 root root 16 4月 21 09:36 zw
-rw-r--r--. 1 root root 11 4月 21 09:41 zwbig5
-rw-r--r--. 1 root root 11 4月 21 09:43 zwbig555
总所周知root可以删除(rm)任何数据,所以当你使用root的身份在工作时,需要特别小心,但是总有失手的时候,那么rm提供一个选项让我们确认是否删除文件就是-i的选项,所以你可以这样做
[root@localhost ~]# alias rm='rm -i'
这样使用rm的时候,就不用太担心会误删的情况,这也是命令别名的优点.。那么如何知道当前我设置了哪些别名呢?如下所示
[root@localhost ~]# alias
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 -al'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
那么怎么取消别名呢?如下所示
[root@localhost ~]# unalias ls
[root@localhost ~]# alias
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 rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
历史命令(history)
bash里面最棒的就是这个【history】命令它能够记录使用过的命令,我们只需要在命令行里按下【上下键】就可以找到前一个输入的命令。
这么命令在哪里呢?在你的家目录内的【.bash_history】不过,需要留意的是,~/.bash_history记录的是前一次登录以前所执行的命令,而至于这一次登录所执行的命令都被存在内存中,当你成功的注销系统后,该命令才会记录到./bash_history中
。
如果我觉得每次输入history字符太多太麻烦,可以使用命令别名来设置
[root@localhost ~]# alias h='history'
这样输入h等于输入了history,那么history 有什么用法呢?
history [n]
history [-c]
history [-raw] histfiles
选项:n:数字,意思是【列出最近的n条命令】的意思
-c:将目前的shell中的所有history内容全部删除
-a:将目前新增的history命令新增histfiles中,若没有加histfiles,则默认写入~/.bash_history。
-r:将history的内容读到目前这个shell的history记录中
-w:将目前history记录的内容写入histfiles中。
使用案例
列出最近的3条数据
[root@localhost ~]# history 38 echo $bash9 echo $PATH10 history 3
立刻将目前的数据写入histfiles.txt中
[root@localhost ~]# history -w histfiles.txt
那么这个history命令只能让我查询命令而已吗?当然不止,我们还可以利用相关的功能帮我们执行命令
!number
!command
!!
什么意思呢?
number:执行第几条命令的意思
command:有最近的命令向前查找【命令串开头为command】的那个命令,并执行
!!:就是执行上一条命令
使用案例
[root@localhost ~]# h1 h2 cat3 cat -a zw4 whoaim5 whoami 6 echo $7 echo $LANG8 echo $bash9 echo $PATH10 history 311 history -w12 ls13 echo $(HISTSIZE)14 history -w histfiles.txt15 cat histfiles.txt 16 h
[root@localhost ~]# !9 # 执行第9条命令
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/.local/bin:/root/bin
任务管理、前台、后台控制(jobs,fg,bg)
此内容可参考这篇博客https://blog.csdn.net/qq_52089863/article/details/129976536
使用前、后台的控制可以让任务进行的更加顺利,至于任务管理(jobs)的用途更为广泛,可以让我们随时将任务丢到后台执行,不怕使用[ctrl + c]来停掉更该程序,很不错。在单一登录的环境下,达到多任务的目的。
通配符
除了完整的字符串之外,bash还支持许多的通配符来帮助用户查询与命令执行。举例来说我想要知道/usr/bin 下面有多少以X开头的文件,可以使用【ls -l /usr/bin/*X】,此外还有其他可利用的通配符,这些都能够加快用户操作的速度。
程序化脚本
什么是程序化脚本,就是将你平时管理需要执行的连续命令写成一个文件,该文件并且可以通过交互式的方式来进行主机的检测工作,也可以借由shell提供的环境变量及相关的命令来进行设计。
查询命令是否为Bash shell 的内置命令(type)
那我怎么知道这这个命令到底是来自外部命令(指的是非bash所提供的命令)或是内置在bash中呢?可以用type这个命令来观察
type [-tpa] name
选项::不加任何参数时,type显示出name是外部命令还是bash内置命令。
-t:当加入 -t参数时,type将name以下面这些资源显示出它的意义。file :表示外部命令alias:表示该命令为命令别名所设置的名称builtin:表示该命令为bash的内置命令功能
-p:如果后面接的name为外部命令时,才会显示完整的文件名
-a:会由PATH变量定义的路径中,将所有含name的命令都列出来,包括alias
使用案例
查询下rm这个命令是否为bash内置?
[root@localhost ~]# type rm
rm 是 `rm -i' 的别名 # 什么参数都没加,列出rm的最主要使用情况
[root@localhost ~]# type -t rm
alias
[root@localhost ~]# type -a rm
rm 是 `rm -i' 的别名 # 最先展示的是rm的最主要使用情况
rm 是 /usr/bin/rm # 外部命令在所在的路径
那么cd是bash的内置命令吗?
[root@localhost ~]# type cd
cd 是 shell 内嵌 # cd是shell的内置命令
命令的执行与快速编辑按钮
如果命令太长的话,如何用两行来输入?
[root@localhost ~]# cp -rf /etc/sysconfig/network-scripts/ifcfg-ens33 \
> /home/csq/
上面这个命令是将网卡文件复制到 csq这个普通用户下,不过因为命令太长,就利用【\Enter】来将这个按键转义,让【Enter】不在具有执行的功能,好让命令可以继续下一行输入。需要注意的是[Enter]是紧挨着( \ )的,两者中间没有其他字符,因为( \ )仅转义紧接着的下一个字符而已。
如果成功转义[Enter]后,下一行最前面会出现 > 的符号,可以继续输入命令,也就是说,那个 > 是系统自动出现的,不需要你输入。
另外,当你需要执行的命令特别长,或是你输入了一串错误的信息时,你想要快速的将这串命令整个删除,一般来说,我们都是使用删除键。其实还有组合键可以使用。
组合键 | 功能示范 |
---|---|
[ctrl] + u/[ctrl] + k | 分别是从光标处向前删除命令串(ctrl + u)及向后删除命令串(ctrl + k) |
[ctrl] + a/[ctrl] + e | 分别是让光标移动到整个命令串的最前面(ctrl + a) 或最后面(ctlr + e) |
相关文章:

认识BASH这个Shell
文章目录 认识BASH这个Shell硬件、内核与shell为什么要学命令行模式的Shell?Bash Shell的功能命令与文件补全(TAB)命令别名设置(alias)历史命令(history)任务管理、前台、后台控制(jobs,fg,bg)通配符程序化脚本 查询命令是否为Bash shell 的内…...

用SQL语句操作Oracle数据库——数据更新
数据更新 数据库中的数据更新操作有3种:1)向表中添加若干行数据(增);2)删除表中的若干行数据(删);3)修改表中的数据(改)。对于这3种操作…...

二维码+互联网云技术在中建二局施工项目管理中的应用实践
中建二局(全称:中国建筑第二工程局有限公司)是世界500强企业—中国建筑股份有限公司的全资子公司,是集房建、基建、核电、火电、风电等多种建设和投资相融合的、国内最具综合实力的大型国有企业集团公司。中建二局具有土木建筑、设…...

扩散模型原理记录
1 扩散模型原理记录 参考资料: [1]【54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读】 https://www.bilibili.com/video/BV1b541197HX/?share_sourcecopy_web&vd_source7771b17ae75bc5131361e81a50a0c871 [2] https://t.bili…...
Metasploit高级技术【第九章】
预计更新第一章 Metasploit的使用和配置 1.1 安装和配置Metasploit 1.2 Metasploit的基础命令和选项 1.3 高级选项和配置 第二章 渗透测试的漏洞利用和攻击方法 1.1 渗透测试中常见的漏洞类型和利用方法 1.2 Metasploit的漏洞利用模块和选项 1.3 模块编写和自定义 第三章 Met…...

RK3568平台开发系列讲解(调试篇)IS_ERR函数的使用
🚀返回专栏总目录 文章目录 一、IS_ERR函数用法二、IS_ERR函数三、内核错误码沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 IS_ERR 函数的使用。 一、IS_ERR函数用法 先看下用法: 二、IS_ERR函数 对于任何一个指针来说,必然存在三种情况: 一种是合…...

TouchGFX界面开发 | TouchGFX软件安装
TouchGFX软件安装 TouchGFX和STemWin类似,都是一个GUI框架,可以方便的在STM32 Cortex-M4 以及更高级别的STM32芯片上创建GUI应用程序。 本文中的TouchGFX软件安装,是基于已经安装有STM32CubeMX Keil MDK-ARM开发环境的情况下进行的&#x…...

使用 IDEA 远程 Debug 调试
背景 有时候我们需要进行远程的debug,本文研究如何进行远程debug,以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 配置 远程debug的服务,以springboot微服务为例。首先,启动springboot需要加上特定的参数。…...
红黑树和平衡二叉树的优缺点及应用场景
红黑树和平衡二叉树都是为了解决二叉搜索树的缺陷而提出的自平衡二叉树结构。它们的优缺点和应用场景如下: 红黑树: 优点: 时间复杂度为O(logN),可以快速查找、插入和删除。 红黑树具有良好的平衡性,树的高度保持较小,因此查找效率较高。 缺点: 实现比较复杂,需要遵守红黑树的…...

软文推广:真实有效提升软文排名与收录的三大方法!
软文是一种具有良好传播效果的文体,可以通过在搜索引擎中排名靠前的方式,为品牌或企业带来更多曝光。但是,如何让软文在搜索引擎中得到更好的收录和排名呢?在本文中,我们将讨论如何提升软文的收录和排名,以…...
SElinux的介绍及配置
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统 SELinux安全增强型Linux系统,是Linux内核子系统,旨在最大限度的减少服务进程对文件、端口等资源…...
vscode-python环境配置
vscode-python环境配置 1、环境基础 下载vscode找到python插件并安装安装python环境并配置环境变量 2、选择python解释器 尝试执行了一下,直接运行py文件,会使用c的调试工具,需要告诉vscode哪些是python Ctrl Shift P打开命令面板 执行…...

问卷调查样本量的确定方法
我们在进行问卷调查的时候,问卷的收集数量是重要的流程之一。问卷数量取决于几个因素,包括研究的目的和研究的类型。接下来,我们就聊一聊怎么确定所需的调查问卷数量。 1、确定研究目标。 确定所需问卷数量的第一步是明确研究目标。这一步是…...
ios客户端学习笔记(三):学习Swift的设计模式
设计模式是指在软件开发中常用的一些解决问题的方法和思想,它可以帮助你更好地组织代码和提高代码的可维护性。你需要学习常见的设计模式,如MVC、MVVM、单例模式、工厂模式等,在开发应用程序时应用它们。 当你学习常见的设计模式时ÿ…...

406. 根据身高重建队列
假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数组 peopl…...

ESP32使用ESP-NOW协议实现一对多通信和MAC地址存储
目录 介绍ESP-NOW 协议概述在 ESP32 上配置 ESP-NOW使用 ESP-NOW 进行一对多通信在 ESP32 上存储发件人的 MAC 地址代码结论 介绍 ESP32 是一款功能强大的 Wi-Fi 和蓝牙双模模块,可用于使用 ESP-NOW 协议实现低功耗、高效率的一对多通信。本文将介绍如何使用ESP-NO…...

Qt 学生信息数据库管理
1 添加样式表 我们采用了样式表 通过添加Qt resources文件 添加前缀 添加文件,将我们的图标进行添加 2 拖动部件 用到的部件 Label 标签Pushbutton 按钮table view 视图LineEdit 输入框 3 程序编写 1 配置sql环境 在 pro文件中 添加 连接数据库跟访问数据…...

相量的加减乘除计算
相量的加减乘除计算 矢量是物理学中的术语,是指具有大小(magnitude)和方向的量。如速度、加速度、力等等就是这样的量。向量是数学中的术语,也称为欧几里得向量、几何向量、矢量。与向量对应的量叫做数量,在物理学中称…...

JavaScript 代码整洁之道
文章目录 概述篇变量篇函数篇注释篇异常处理篇复杂判断函数篇重构篇代码风格常量大写先声明后调用注释 参考资料 概述篇 书写能让人读懂的代码使用英语编写代码团队协作 制定通用的规则,依靠工具让团队的代码风格保持统一,要让代码看起来是由一个人编写…...

socket 及 字节序转换(嵌入式学习)
socket 及 字节序转换 socket简介Socket为什么需要Socket?socket类型Socket通信模型 字节序主机字节序到网络字节序网络字节序到主机字节序IP地址转换 socket简介 1、1982 - Berkeley Software Distributions 操作系统引入了socket作为本地进程之间通信的接口 2、1…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...

C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...