shell特性

记录命令历史

我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。

与命令历史有关的有一个有意思的字符那就是 ‘!’ 了。常用的有这么几个应用:

1) 连续两个 ‘!’, 表示执行上一条指令;

[[email protected] ~]# pwd
/root
[[email protected] ~]# !!
pwd
/root

2) !n 这里的n是数字,表示执行命令历史中第n条指令,例如 !1002 表示执行命令历史中第1002个命令;

[[email protected] ~]# history |grep 1002
1002  pwd
1015  history |grep 1002
[[email protected] ~]# !1002
pwd
/root

history 命令如果未改动过环境变量,默认可以把最近1000条命令历史打印出来。

3) !字符串 (字符串大于等于1),例如 !pw 表示执行命令历史中最近一次以 ‘pw’ 为开头的指令。

[[email protected] ~]# !pw
pwd
/root

  1. 指令和文件名补全

最开始阿铭就介绍过这个功能了,记得吗?它就是按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名。

连续按两次tab键,系统则会把所有的指令或者文件名都列出来。

  1. 别名

前面也出现过alias的介绍,这个就是bash所特有的功能之一了。我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。

如果不想用了,还可以用unalias解除别名功能。直接敲alias会看到目前系统预设的alias.

系统预设的alias指令也就这几个而已,你也可以自定义你想要的指令别名。alias语法很简单,

语法: alias [命令别名]=[‘具体的命令‘]

[[email protected] ~]# alias qiangzi=‘pwd‘
[[email protected] ~]# qiangzi
/root
[[email protected] ~]# unalias qiangzi
[[email protected] ~]# qiangzi
bash: qiangzi: command not found

使用 unalias 命令别名 就可以把设置的别名给解除了。

  1. 通配符

在bash下,可以使用 * 来匹配零个或多个字符,而用 ? 匹配一个字符。

[[email protected] ~]# ls -d test*
test1.txt  test2  test3  test.pl  test.txt
[[email protected] ~]# ls -d test?
test2  test3

  1. 输入输出重定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。

输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>

[[email protected] ~]# echo "123" >1.txt

[[email protected]lhost ~]# echo "123" >>1.txt

[[email protected] ~]# cat 1.txt

123

123

  1. 管道符

前面已经提过过管道符 “|”, 就是把前面的命令运行的结果丢给后面的命令。

[[email protected] ~]# cat /etc/passwd|wc -l

24

wc -l 命令是列出文件行数

  1. 作业控制

当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)。

[[email protected] ~]# vi test1.txt
testtestsstststst

使用 “vi” 编辑test1.txt, 随便输入一些内容,按 “ESC" 后,使用 "Ctrl + z” 使任务暂停:

[[email protected] ~]# vi test1.txt

[1]+  Stopped                 vi test1.txt

可以看到提示 “vi test1.txt” 已经停止了,然后使用fg命令恢复它,此时又进入刚才的 “vi” 窗口了。再次使其暂停,然后输入 jobs, 可以看到在被暂停或者在后台运行的任务:

[[email protected] ~]# jobs
[1]+  Stopped                 vi test1.txt

如果想把暂停的任务丢在后台跑起来,就使用bg命令:

[[email protected] ~]# bg
[1]+ vi test1.txt &

[1]+  Stopped                 vi test1.txt

但是 vi 似乎并不支持在后台运行,那换一个其他的命令:

[[email protected] ~]# vmstat 1 > /tmp/1.log
^Z
[2]+  Stopped                 vmstat 1 > /tmp/1.log
[[email protected] ~]# jobs
[1]-  Stopped                 vi test1.txt
[2]+  Stopped                 vmstat 1 > /tmp/1.log
[[email protected] ~]# bg 2
[2]+ vmstat 1 > /tmp/1.log &

在上面的例子中,又有一个新的知识点需要知道.

那就是多个被暂停的任务会有编号,使用 jobs 命令可以看到两个任务,那么使用bg或者fg的时候,就需要在后面加一个编号了,使用 bg 2 把第二个被暂停的任务丢到后台跑起来了,丢入后台需要使用在命令后边加一个 & 符号,中间有个空格。本例中的 vmstat 1 这个是用来观察系统状态的一个命令

丢到后台的任务如何关掉呢?如果你没有退出刚才的shell, 那么先使用 fg 编号 把任务调到前台,然后使用 “Ctrl + c” 结束任务:

[[email protected] ~]# fg 2
vmstat 1 > /tmp/1.log
^C

另一种情况则是,关闭到当前的shell, 再次打开另一个shell时,使用jobs命令并不会显示在后台运行或者被暂停的任务,要想停掉它的话,则需要先知道其pid, 然后使用kill命令杀死那个进程。

[[email protected] ~]# vmstat 1 > /tmp/1.log &
[1] 9433
[[email protected] ~]# ps aux |grep vmstat
root      9433  0.0  0.0   6180   516 pts/2    S    09:57   0:00 vmstat 1
root      9435  0.0  0.0 103308   848 pts/2    S+   09:58   0:00 grep vmstat

使用 & 把任务丢入后台运行,它会显示pid信息,如果忘记这个pid,我们还可以使用 ps aux 命令找到那个进程,想结束掉该进程,需要使用 kill 命令:

[[email protected] ~]# kill 9433
[1]+  已终止               vmstat 1 > /tmp/1.log

kill命令语法很简单,直接在后面加pid即可,如果遇到杀不死的进程时,可以在kill 后面加一个选项: kill-9 [pid]

时间: 2024-10-10 07:49:01

shell特性的相关文章

Linux_note shell 特性、变量、系统和用户的环境变量配置文件。

shell是一种程序设计语言,是一个命令解释器,就是解释我们输入的命令为内核. 他又分为两种,交互式模式就是shell等待你的输入,并且执行你提交的命令:非交互式模式,不与你进行交互 ,而是读取存放在文件中的命令,并且执行它们. unix下的shell 有:C shell / bash / sh / ksh / csh:我们遇到的就是这些吧 1.shell特性 命令历史文件root用户在家目录下.bash_history即/root/.bash_history默认保存1000条,通过变$HIST

1.1 shell特性

#shell特性 |  管道 > 重定向 >> 追加重定向 <   反向重定向 2> 错误重定向 2>> 追加错误重定向 #作业控制 ctrl + z         把作业暂时停止 jobs              查看作业 fg                 调回前台 +                  优先级更高 fg  2             指定号码调回 bg                 调到后台 sleep 100 &   也是执

Shell学习之Shell特性(一)

Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~username/.bashrc.\cp -rf /etc/hosts 快捷键 ^R ^D ^A ^E ^L ^U ^K ^S ^Q 前后台作业控制 输入输出重定向 输入与输出 管道 | tee 命令排序 命令和文件自动补齐功能 这个不说了,我们在输入命令的时候,按tab键补全. 命令历史记忆功能  hi

Linux之bash shell特性

一.shell是什么? Shell 本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 如图shell是一个应用程序,是用户管理应用程序的一个接口. 二.广义上shell的分类 GUI:图形用户界面 KDE,GNOME,XFCE CLI:

linux的shell特性三兼杂记

shell可以说是一个解释器,同时为代码运行提供了运行环境.并且提供了编程能力 shell没有自己的库,只是写命令调用操作内的小程序命令 bash特性中,bash不支持浮点数,把所有要存储的数据当做字符来进行. linux脚本其实就是一堆命令的堆砌,然后是用程序控制着脚本实施运行. 编程语言的基本结构: 数据,数据存储:变量,数组,等等 表达式:例如赋值语句 语句:顺序语句,选择语句等等 编程风格: 1.过程编程:以指令为中心,数据为指令服务 2.对象编程:以数据为中心,指令服务数据 编译型语言

3.自学Linux之路:shell特性之三:命令历史

命令历史 简介:bash保存了过去曾经执行过的命令列表. 当前shell的命令进程保存在内存中. 退出时,保存到当前用户文件夹中的隐藏文件夹.bash_histroy中,ls -a 可查看 history快捷方式: !#: #为命令历史列表中的命令编号(#history :查看缓存中的命令历史及编号) !!: 执行上一条,等价于方向键上 !-1:执行倒数第一个命令 !string: 执行历史中最近一次以string开头的命令 history -c :清空缓存中的命令历史 history -d #

Linux shell特性

一:别名 1.alias 查看本用户下的alias配置 --自定义别名:alias 别名='shell命令' (注意时单引号) --cat $HOME/.bashrc 在这个用户下配置着alias名的配置

shell特性、通配符、输入输出重定向,命令历史

一:shell介绍 shell是一个命令解释器,提供用户和机器之间的交互,支持特定语法,每个用户都可以有自己特定的shell,centos默认为bash,还有zsh,ksh等. 二:命令历史 history命令环境变量HISTSIZE,在/etc/profle中,可以设置修改环境变量数值,修改最大保存数量.改完需要source一下.保存历史命令的时间:HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S"历史命令保存在家目录下.bash_history文件中,最多存100

Shell编程(三)Shell特性

!$:显示上一条命令最后一个参数 $?: 上个命令的退出状态,或函数的返回值. alias xxx="命令":给命令取别名 xxx 通过 vim ~/.bashrc 里编辑,可以来修改别名. <, <<:重定向输出 .>, >>:重定向到文件 管道:| 命令排序 shell通配符 子shell:重新开一个shell执行. (注:souch script.sh  或  .   script.sh 在当前shell里执行)  /script.sh  ba