Shell:
操作接口:为用户提供简单易用的操作界面
BELL实验室:Nourne shell --> shell
Bill joy:C shell --> cshell --> tcshell
David korn:Korn shell --> kshell
GUN:Bourne Again shell --> bashell(默认的LINUX标准)
Zsh:
默认系统中所支持的shell:
~]# cat /etc/shells
Bash特性:
一. 命令的别名:(自定义命令)
Alias命令可以用来定义和显示命令的别名
但是使用alias命令定义的别名,其生命期仅为当前shell的生命期
对于每个用户来说,都有一个私有的bash配置文件,用于保存别名
~/.bashrc
注意:
1. Alias命令的效果仅限于当前shell的生命期
2. 如果修改.bashrc配置文件,其中保存的别名并不会立即生效,只有在重新加载该文件的内容之后,才会生效,且永久生效
3. 为了能够保证我们设置的别名有效,通常两种操作都要做。
撤销别名:
Unalias:unalias name(别名名称)
二. 命令历史:
Bash进程会保存其回话中用户曾经执行过的命令,以方便用户重复执行某个命令:
通过bash提供的历史命令文件来持久保存此前执行过的命令,每个用户都有其自己私有的历史文件。
登录shell的时候,bash会自动读取~/.bash_history文件中所记录的所有命令:
History命令:
-c:清空历史缓冲区中的历史命令
-d OFFSET:删除特定历史命令条目
重复执行前一个命令的方法:
1. 使用上方向键,回车执行
2. Ctrl + p,回车执行
3. !-1
4. !!
重复执行历史缓冲区中的命令:
!Number(数字)重复执行历史命令中编号为“Number”的命令
!String(字符串):从历史缓冲区中查找最近一次执行过得以“string”开头的命令,并执行。
!?String(字符串):从历史缓冲区查找最近一次执行过的包含“string”的命令,并执行。
!-Number(数字):执行历史缓冲区中倒数第“Number”条命令
Ctrl + r :在历史缓冲区中实施搜索,回车执行即可。
重复使用历史命令中的一部分:
!$:表示最后一次命令中最后一个参数
先按Esc,后按. :表示最后一次命令中最后一个参数
Alt + . (同时按住) :表示最后一次命令中最后一个参数
!^:表示第一个位置的参数
!:Number(数字):表示最后一次命令中第“Number”个位置的参数
!SEQUENCE(数字):Number(数字):表示在历史缓冲区中第“SEQUENCE”个命令的第“Number”个参数
!String(字符串):^丨$丨*丨Number(数字):
与历史相关的bash变量:
HISTSIZE:
HISTFILESIZE:
HISTTIMEFORMAT=”%F %T”
HISTCINTRIL:
Ignoredups:忽略连续且相同的命令的历史缓存
Ignorespace:忽略以空白字符开头的命令
Ignoreboth:以上两个功能都启用
三. 快捷键:
C ---> Ctrl
M ---> alt
E ---> esc
Del ---> backspace
Ctrl + l :clear,清屏
Ctrl + a:将光标跳转至命令行的行首
Ctrl + e:将光标跳转至命令行的行尾
Ctrl + k:删除光标所在位置至行尾的命令行信息
Ctrl + u:删除光标所在位置至行首的命令行信息
Ctrl + c:结束前台进程,取消命令的运行
四. 命令补全机制:
1. 两个方面的理解:
命令本身的字符串的补全
参数的补全
Shell命令的执行过程:
Shell会根据用户输入“enter”来判断用户的输入结束
Shell会将收集的命令信息,根据空白字符来分段(token),第一个分段被理解为命令字段
判断第一个字段是内部命令还是外部命令,如果是内部命令,则直接运行,如果是外部命令,通过path变量所指示的路径信息,去查找相关的位置,以确定是否存在同名文件,如果有,就执行,否则,就报错
判断选项是否正确,判断参数是否正确
使用Tab键可以完成命令补全:
如果给出的字符串不能作为唯一标识,则bash不予补全,再次敲击Tab键,bash会给出参考列表,如果参考列表中的内过多,bash会询问是否显示该列表
根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认该从工作目录进行查找
五. 命令行展开:
~:bash会自动将其展开为当前登录用户的家目录
~STRING(字符串):bash会自动将其展开为以“STRING”为用户名的家目录
~+:调用shell变量“PWD”的值
~-:调用shell变量“OLDPWD”的值
Cd-:
{}:在花括号中可以填充一个以“,”分隔的路径列表,bash会将其展开为多个独立的路径
问题:创建a_c,a_d,b_c,b_d四个目录
六. 命令的执行结果
任何一个linux命令都有两种执行结果
其一:命令的正常输出结果
(跟用户需求相关的返回内容)
``:方向单引号(反引号)
$():标准的命令引用格式
Wc:统计一个文件中的有的行数,字数及字节数
-c:只显示字节数
-l:只显示行数
-w:只显示字数
其二:命令的执行状态返回值
(跟命令执行成功与否相关的返回内容)
保存在bash的一个特殊变量中:$?
0:命令执行成功
1,2,127:bash内置状态返回值
1:表示小问题
2:表示严重问题
127:表示命令本身出现问题
3-126,128-255,用户自定义状态信息
七. 引用特性
“”:弱引用
被双引号引用的内容中,有些特殊字符仍然会保留其特殊含义,比如说:$,/,”
‘’:强引用
凡是被单引号引用的内容,bash一律将其视为普通字符,即使本身有特殊功能和作用也是如此。单引号本身是个例外
问题:备份/etc/整个目录的内容到/tmp,要求备份后的文件名为etc-系统时间
八. 转义功能
\:bash中定义的转义字符,只能使其后一个字符失去特殊意义
九. Globbing:文件名通配,简称glob:
元字符(基本字符):
*:可以去匹配任意长度的任意字符某些特殊位置的“.”字符不能被匹配
?:匹配任意单个字符,必须且只有一个字符
[]:匹配指定范围内的任意单个字符,必须且只有一个字符被匹配
[a-z]:a.A.b.B......y.Y.z
[A-Z]:A.B.b........Y.y.z.Z
字符集:
[:lower:]:所有的小写字母
[:upper:]:所有的大写字母
[:alpha:]:表示所有字母字符
[:digit:]:表示所有的十进制数字
[:alnum:]:表示所有的大小写字母及十进制数字
[:space:]:表示空白字符
[:punct:]:表示的标点符号
^:取反匹配
问题:显示/etc/目录下,以非字母开头,且其后跟了一个字母以及他任意字符的文件
十. 输入输出重定向:
在使用计算机的时候,实现某种功能的主体是:程序
程序 = 指令 + 数据
数据:文件,IO
可以用于输入的设备:文件
键盘设备,在文件系统中的一些常规文件,网卡设备,声卡设备等
可以用于输出的设备:文件
显示器,文件系统中的常规文件,网卡设备,声卡设备等
每一种程序都有三种形式的数据流:
输入数据流:为程序获取的数据流,默认的输入数据流就是键盘
输出数据流:将程序所处理的数据结果展示给用户的数据流,默认的输出数据流的终点就是显示器。
错误数据流:将程序无法处理或处理过程中出现问题的结果展示给用户数据流,默认的错误数据流的终点是显示器
从键盘实现的输入数据流称为标准输入
从显示器上的输出数据流称为标准输出
从显示器上的错误数据流称为标准错误输出,简称标准错误
文件描述符:File descriptor,简称FD
0:标准输入,stdin
1:标准输出,stdout
2:标准错误,stderr
IO重定向:采用非标砖设备文件实现的IO操作,
不是从键盘设备完成的数据流输入就可以称为输入重定向或重定向输入
不是到显示器设备的正确输出数据流或被称为输出重定向或重定向输出
不是到显示器设备的错误输出数据流就被称为错误重定向或重定向错误
输出重定向:
>:覆盖输出重定向
~]# set -C //开启防误覆盖开关
在此开关开启后,可以使用“>丨”符号继续覆盖重定向
~]# set +c //关闭防误覆盖开关
>>:追加输出重定向
错误重定向:
2>:覆盖错误重定向
2>>:追加错误重定向
合并标准输入和标准输出的重定向:
(1.)&>,&>>
(2.)COMMAND>丨>> /PATH/TO/SOMEFILE 2>&1
/dev/null:blackhole,bitbucket(位桶)
Ls /tmp/a.txt &> /dev/null
||(等于)
Ls /tmp/a.txt > /dev/null 2>&1
输入重定向:
<:
<<:here document(此处文档)
<<<:here string(此处字符串)
问题:/etc/passwd 将小写字母换成大写字母 将数字删除