认识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…...

Java之~ Aop自定义注解日志
大纲步骤: 一,创建需要记录的日志表,创建基础方法。(省略) 二,在需要加记录日志的方法上加Aop注解1,创建一个注解类,Aop中定义一个注解import java.lang.annotation.*; /*** http 请…...

编译原理个人作业--第四章
构造FIRST和FOLLOW的大白话网站 第四章 1 考虑文法 G 1 G_1 G1: S → a ∣ ∧ ∣ ( T ) T → T , S ∣ S S \rightarrow a|\land|(T) \\ T\rightarrow T,S|S S→a∣∧∣(T)T→T,S∣S 先复习左递归如何消除 原书p69页 类似于 P → P a ∣ b P\rightarrow Pa|b P→Pa∣b的…...

学习笔记:数据库简介
数据库是一系列可以方便的访问和修改的数据的集合。 所有数据库管理系统的主要工作都是可靠的存储数据并使其对用户可用。 目前最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。 一、按数据的组织方式 数据从组织的角度上,主要分为结…...

day18_集合
今日内容 零、 复习昨日 一、集合框架体系 二、Collection 三、泛型 四、迭代 五、List 六、ArrayList 七、LinkedList 零、 复习昨日 晨考 一、集合框架体系 数组: 是一个容器,用来存放数据的 定长只能存储同一种数据类型的数据int[] 可以存储int值,Student[] 可以存储引用类型…...

Go面试必会基础题
文章目录 1.下面代码有什么错误?2.下面代码有什么问题?3.下面代码输出什么?4.下面这段代码输出什么? 1.下面代码有什么错误? func main() {one : 0one : 1 }参考答案及解析:变量重复声明。不能在单独的声…...

发送封包协议实现XXZ批量秒分解装备
通过发送封包,我们可以让一些反复的枯燥的行为变的简单,高效。 比如XXZ的萃取装备,我们可以一瞬间萃取大量的装备,而省去读条的过程。 我们来萃取一下看看效果 手动萃取是有读条的,那么如果很多装备的话,…...

Spring学习——Nginx
Nginx概述 Nginx介绍 Nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网…...

记录 vue-cli 安装过程
1. VueCli CLI 是 Commond-Line Interface 的缩写 如果开发大型项目,肯定需要考虑代码目录结构、项目结构和部署、热加载、代码单元测试等事情,那么你必然需要使用 VueCLI,使用 VueCLI 可以快速搭建 vue 开发环境以及对应的 webpack 配置。 …...

含氢微网优化调度模型matlab
目录 1 主要内容 模型示意图 目标函数 2 部分程序 3 程序结果 4 下载链接 1 主要内容 最近咨询含氢微网优化调度模型的同学较多,本次就分享一个高质量的源码资源。该程序方法复现《Simulation of design and operation of hydrogen energy utilization syste…...

【springcloud开发教程】路由网关——zuul
官方资料:https://github.com/Netflix/zuul/ 什么是Zuul? Zuul包含了两个主要的功能:路由和过滤 路由功能将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预&#…...