Bash的常见特性

命令历史,bash的基础特性之一
history命令可以用来查看命令历史用来确认在什么时间使用了什么命令也可以用它来重复执行命令。

当我们登录shell时,会读取命令历史文件中记录下的命令,在家目录的.bash_history文件中,很多黑客在入侵你的服务器后,会清除此文件的内容让你不知道他到底做了什么操作。

登录shell后,新执行的命令是记录在缓存中的,命令会在用户退出时追加到命令历史文件中。

我们可以通过配置用户家目录下的.bashrc或者/etc/profile文件以及/etc/profile.d/NAME.sh,来设置history命令的变量及显示特性。推荐写到/etc/profile.d/NAME.sh里面,对于.bashrc和/etc/profile文件,我们会在以后的系统启动过程中学习。

定制命令历史相关环境变量:
    HISTSIZE:shell进程可保留命令历史记录的条数
    HISTFILE:持久保存命令历史的文件,默认为~/.bash_history
    HISTFILESIZE:命令历史文件记录历史的条数
    HISTTIMEFORMAT=“%F %T “ 显示时间
    HISTIGNORE=“str1:str2*:… “ 忽略str1命令,str2开头的历史

控制命令历史的记录方式:
环境变量:HISTCONTROL
    ignoredups 默认,忽略重复的命令,连续且相同为“重复”
    ignorespace 忽略所有以空白开头的命令
    ignoreboth 相当于ignoredups, ignorespace的组合
    erasedups 删除重复命令

export 变量名="值“ 
    存放在 /etc/profile 或 ~/.bash_profile

重复前一个命令,有4种方法
    重复前一个命令使用上方向键,并回车执行
    按 !! 并回车执行
    输入 !-1 并回车执行
    按 Ctrl+p 并回车执行

!:0 执行前一条命令(去除参数)

Ctrl + n 显示当前历史中的下一条命令,但不执行

Ctrl + j 执行当前命令

!n 执行history命令输出对应序号n的命令

!-n 执行history历史中倒数第n个命令

!string 重复前一个以“string”开头的命令

!?string 重复前一个包含string的命令

!string:p 仅打印命令历史,而不执行

!$:p 打印输出 !$ (上一条命令的最后一个参数)的内容

!*:p 打印输出 !*(上一条命令的所有参数)的内容

^string 删除上一条命令中的第一个string

^string1^string2 将上一条命令中的第一个string1替换为string2

!:gs/string1/string2 将上一条命令中所有的string1都替换为 string2

ctrl-r来在命令历史中搜索命令
    (reverse-i-search)`’: 
Ctrl+g:从历史搜索模式退出

要重新调用前一个命令中最后一个参数
    !$ 表示
    Esc, .(点击Esc键后松开,然后点击 . 键)
    Alt+ .(按住Alt键的同时点击 . 键)


调用历史参数
    command !^ 利用上一个命令的第一个参数做cmd的参数
    command !$ 利用上一个命令的最后一个参数做cmd的参数
    command !* 利用上一个命令的全部参数做cmd的参数
    command !:n 利用上一个命令的第n个参数做cmd的参数
    command !n:^ 调用第n条命令的第一个参数
    command !n:$ 调用第n条命令的最后一个参数
    command !n:m 调用第n条命令的第m个参数
    command !n:* 调用第n条命令的所有参数
    command !string:^ 从命令历史中搜索以 string 开头的命令,并获取它的第一 个参数
    command !string:$ 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数
    command !string:n 从命令历史中搜索以 string 开头的命令,并获取它的第n 个参数
    command !string:* 从命令历史中搜索以 string 开头的命令,并获取它的所有参数
命令补全,路径补全
shell程序在接收到用户执行命令的请求,分析完成后,最左侧的字符串会被当做命令;
命令查找机制:
	查找内部命令;
	根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名
给定的打头字符串如果能唯一标识某命令程序文件,则直接补全
				不能唯一标识某命令程序文件,再次tab键一次,会给出列表;

路径补全
	在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件;
		tab:
			如果能唯一标识,则直接补全
			否则,再次tab,给出列表
命令行展开机制
~:自动展开为用户的家目录,或指定的用户的家目录
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径
	例如:/tmp/{a,b} 相当于/tmp/a /tmp/b
命令的执行状态结果
bash通过命令执行的状态返回值来输出此结果:
	成功:0
	失败:1-255

命令执行完成后,其状态返回值保存于bash的特殊变量$?中,命令运行结束后立即使用

命令正常执行时,有的还会有命令返回值
	根据命令及其功能的不同,结果各不相同

引用命令的执行结果:
	$(COMMAND)
	或`COMMAND`
引用
强引用:''
弱引用:""
命令引用:``
快捷键
Ctrl + l    清屏,相当于clear命令
Ctrl + o    执行当前命令,并重新显示本命令
Ctrl + s    阻止屏幕输出,锁定
Ctrl + q    允许屏幕输出
Ctrl + c    终止命令
Ctrl + z    挂起命令
Ctrl + a    光标移到命令行首,相当于Home
Ctrl + e    光标移到命令行尾,相当于End
Ctrl + f    光标向右移动一个字符
Ctrl + b    光标向左移动一个字符
Alt + f     光标向右移动一个单词尾
Alt + b     光标向左移动一个单词首
Ctrl + xx   光标在命令行首和光标之间移动
Ctrl + u    从光标处删除至命令行首
Ctrl + k    从光标处删除至命令行尾
Alt + r     删除当前整行
Ctrl + w 从光标处向左删除至单词首
Alt + d 从光标处向右删除至单词尾
Ctrl + d 删除光标处的一个字符
Ctrl + h 删除光标前的一个字符
Ctrl + y 将删除的字符粘贴至光标后
Alt + c 从光标处开始向右更改为首字母大写的单词
Alt + u 从光标处开始,将右边一个单词更改为大写
Alt + l 从光标处开始,将右边一个单词更改为小写
Ctrl + t 交换光标处和之前的字符位置
Alt + t 交换光标处和之前的单词位置
Alt + N 提示输入指定字符后,重复显示该字符N次 注意:Alt组合快捷键经常和其它软件冲突
globbing文件名通配机制
匹配模式:需要用到元字符(整体文件名匹配,而非部分)
	*:匹配任意长度的任意字符
		pa*,*pa*,*pa,*p*a*
	?:匹配任意单个字符
		pa?,??pa,p?a,p?a?
	[]:匹配指定范围内的任意单个字符
		有几种特殊格式:
			[a-z],[A-Z],[0-9],[a-z0-9]
			[[:upper:]]	所有大写字母
			[[:lower:]]所有小写字母
			[[:alpha:]]所有字母
			[[:digit:]]所有数字
			[[:alnum:]]所有字母和数字
			[[:space:]]所有空白字符
			[[:punct:]]所有标点符号
	[^]:匹配指定范围外的任意单个字符
		[^[:upper:]] 匹配非大写字母
		[^0-9]或[^[:digit:]] 匹配非数字
		[^[:alnum:]] 匹配非正常字符
IO重定向及管道(bashshell的重要特性)

标准IO和管道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Bash 是一种 Unix shell,它提供了一种命令语言和一个命令解释器。Bash 的源码可以帮助我们深入了解它的工作原理和实现细节。在这里,我将简要介绍一些 Bash Shell 的源码解读相关的内容。 1. Bash 的源码获取 Bash 的源码可以从 GNU 官网上下载,也可以从 Linux 发行版的软件源中获取。下载后解压缩,可以看到 Bash 的源码文件。 2. Bash 的编译与安装 在获取了 Bash 的源码后,需要进行编译和安装。在命令行进入 Bash 源码目录后,使用以下命令进行编译和安装: ``` ./configure make sudo make install ``` 3. Bash 的源码结构 Bash 的源码主要包括以下文件和文件夹: - `configure`:用于生成 Makefile 的脚本。 - `Makefile.in`:用于生成 Makefile 的模板。 - `builtins`:内置命令的源码。 - `execute.c`:Bash 解释器的主要源码。 - `parse.y`:Bash 语法分析器的源码。 - `variables.c`:Bash 变量的源码。 - `lib`:Bash 库函数的源码。 4. Bash 的执行过程 Bash 的执行过程可以分为以下几个步骤: - 词法分析:将输入的命令字符串分解成单词。 - 语法分析:将单词序列转换为语法树。 - 执行命令:根据语法树执行相应的命令。 5. Bash 的语法分析器 Bash 的语法分析器使用了自上而下的递归下降分析方法,它通过 parse.y 文件中的语法规则将输入的单词序列转换为语法树。在语法分析阶段,Bash 还会进行一些重要的操作,如变量替换、命令替换和文件名扩展等。 6. Bash 的内置命令 Bash 的内置命令包括了一些常用的命令,如cd、echo、alias、export等。这些命令被编写为 C 函数,并包含在 builtins 目录下的相应源码文件中。 7. Bash 的变量 Bash 的变量包括了环境变量和本地变量。环境变量可以被所有子进程继承,而本地变量只能在当前 Shell 进程中使用。Bash 的变量在 variables.c 文件中定义和实现。 以上是 Bash Shell 源码解读的一些基本内容,希望对你有所帮助。如果你想深入了解 Bash 的实现和工作原理,可以查看 Bash 的源码文件并阅读相关的文档和资料。 ### 回答2: Bash Shell 是一种在 UNIX 和类 UNIX 系统中广泛使用的命令解释器,它允许用户以命令行的方式与操作系统进行交互。解读 Bash Shell 的源码有助于我们深入了解它的工作原理和内部机制。 Bash Shell 的源码主要由 C 语言编写,并且是开源的,这意味着任何人都可以查看和修改它。在源码中我们可以看到它的内部数据结构、函数调用和逻辑实现。 首先,Bash Shell 的源码包含了解释用户输入的部分,即将用户输入的命令解析成程序可以理解的格式。这一部分涉及到词法和语法分析,包括对命令的拆分、参数的解析、管道和重定向的处理等。这些解析的过程能够将命令拆分成合理的数据结构,并为后续的执行做准备。 其次,Bash Shell 的源码也包含了命令执行的逻辑。在这部分中,我们可以看到它是如何实现内置命令(如cd、echo等)和外部命令的执行。它通过调用系统函数和库函数来与操作系统进行交互,执行相应的命令和操作。 此外,源码中还包含了对变量和环境的处理。可以看到它如何定义和使用变量,以及如何读取和设置环境变量。对于环境的处理包括了对用户的主目录、当前工作目录等信息的维护。 通过解读 Bash Shell 的源码,我们可以更好地理解它是如何解释和执行用户的命令的。对于开发者来说,这样的解读可以帮助他们修复和改进 Shell 的功能和性能。对于用户来说,这样的解读可使他们更加深入地理解和使用 Bash Shell,并能够根据自己的需求进行定制和扩展。 总之,Bash Shell 源码解读是一项非常有价值的工作,它可以帮助我们更好地理解和使用 Bash Shell,并为改进和定制 Shell 提供参考。 ### 回答3: bash shell 是一个免费开源的命令行解释器,也是许多类Unix操作系统中最常用的shell之一。对于理解bash shell的工作原理和内部实现细节,直接阅读其源码是最直接的方式之一。 bash shell的源代码是用C语言编写的,位于bash源码包的`builtins`和`execute_cmds`等目录中。阅读源码时,可以从`main`函数开始,了解整个程序的执行流程。 在源码中,可以发现bash shell的核心组件包括解析器、执行器和内建命令。解析器负责解析用户输入的命令,将其转化为可执行的命令结构。执行器负责执行这些命令,并与操作系统交互。内建命令则是一些由shell内置的、不需要通过外部程序执行的命令。 在阅读源码时,可以关注以下几个方面: 1. 解析器:了解解析器是如何将用户的命令解析成可执行的命令结构的,以及如何处理重定向、管道等特性。 2. 执行器:了解执行器是如何执行命令的,包括如何创建子进程、进行进程间通信、进行信号处理等。 3. 内建命令:了解内建命令的实现细节,包括常见的命令如`cd`、`echo`等。 4. 变量和环境:了解shell是如何处理变量和环境,如何从环境变量中读取配置,如何设置和使用shell变量。 总结起来,阅读bash shell源码可以帮助我们深入了解该shell的工作原理、内部机制和核心组件的实现细节。通过仔细研究源码,可以更好地理解shell的运行方式和功能,也可以为我们编写更复杂的脚本和命令提供启发和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值