一. Shell是什么
Shell 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的方法。
Shell 是界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell 是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。
Shell 是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
二. Shell的分类
1. Bourne Shell:从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。
2. C Shell:C Shell主要在BSD版的Unix系统中使用,其语言和C语言相似而得名。
Shell的主要语法类型有Bourne和C,这两种语法彼此不兼容。
Bourne家族主要包括:sh、ksh、psh、zsh;
C家族主要包括:csh、tcsh
查看当前计算机运行的shell
echo $SHELL
查看当前计算机支持的shell
vi /etc/shells
进入一种shell语言环境
shell家族的名称即可 eg : bash 或 sh 退出使用 : exit
三. 文本处理工具grep
工具
# grep [选项] '关键字' 文件名
常见选项:
options:
-i:不区分大小写
-v:查找不包含指定内容的行,反向选择
-w:按单词搜索
-o:打印匹配关键字
-c:统计匹配到的次数
-n:显示行号
-r:逐层遍历目录查找
-A:显示匹配行及后面多少行
-B:显示匹配行及前面多少行
-C:示匹配行及前后多少行
-l:只列出匹配的文件名
-L:列出不匹配的文件名
-e:使用正则匹配
-E:使用扩展正则匹配
^key:以关键字开头
key$:以关键字结尾
^$:匹配空行
--color=auto:可以将找到的关键字部分加上颜色显示
eg:# grep --color=auto 'root' original-ks.cfg 这个只是当前有效
查询文件指定内容:
[root@wskh logs]# grep -C 10 name=sec catalina.out
查询文件catalina.out 中内容包含 name=sec 前后10行内容搜索显示
四. 别名 alias
a)查看系统中的所有别名
# alias
b)起别名
# alias 别名= '原命令'
eg:alias grep='grep --color=auto' 临时生效
可以在/etc/bashrc 文件后追加 alias grep='grep --color=auto' 保存对所有用户生效
或 vim ~/.bashrc ///把别名写入环境配置文件
c)删除别名 临时删除
# unalias 别名
d)命令的生效顺序
第一顺位执行用绝对路径或相对路径执行的命令。
第二顺位执行别名
第三顺位执行Bash的内部命令
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到第一个命令
# echo $PATH 可以查看环境变量,外部执行bash命令都在环境变量中有定义才能执行
五. 快捷键
ctrl + c 强制终止当前命令
ctrl + l 清屏
ctrl + a 光标移动到命令行首
ctrl + e 光标移动到命令行尾
ctrl + u 从光标所在位置删除到行首
ctrl + z 把命令放入后台 ,但是命令并没有终止
ctrl + r 在历史命令中搜索
六. 文件查看less
less
与 more
类似,但使用 less
可以随意浏览文件,而 more
仅能向前移动,却不能向后移动,而且less
在查看之前不会加载整个文件。可以通过Shift+G
到达文件底部。
语法:less [参数] 文件
参数说明:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向上翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一页
回车键 滚动一行
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
七. 历史命令查询
1. 命令
# history [选项] [历史命令保存文件]
选项:
-c :清空历史命令
-w :把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令保存文件保存的是本次开机之前的历史命令 ,也可以通过 history -w 手动保存
2.历史命令默认保存1000条,可以在环境变量配置文件 /etc/profile中进行修改
保存历史命令条数 : HISTSIZE=1000
3.历史命令的调用
a)使用上、下箭头调用以前的历史命令
b)使用 !n 重复执行第n条历史命令
c)使用 !! 重复执行上一条命令
d)使用 !字串 重复执行最后一天以该字串开头的命令
4.命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们在输入命令或文件时,
按 Tab键自动补全
如果不能自动补全说明有多个形同开头的命令或文件,
此时再次按下 Tab键 就会显示与当前输入相同开头的文件或命令
八. 输出重定向
1.标准输入输出
设备 | 设备文件名 | 文件描述符 | 类型 |
---|---|---|---|
键盘 | /dev/stdin | 0 | 标准输入 |
显示器 | /dev/sdtout | 1 | 标准输出 |
显示器 | /dev/sdterr | 2 | 标准错误输出 |
2.输出重定向
错误输出中 ‘>’ 、’>>'两边的内容必须紧密相连
类型 | 符号 | 作用 |
---|---|---|
标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出 输出到指定的文件或设备中。 eg:# ifconfig > a.txt |
命令 >> 文件 | 以追加的方式,把命令的正确输出 输出到指定的文件或设备中。 eg:# ifconfig > a.txt | |
标准错误输出重定向 | 错误命令 2>文件 | 以覆盖的方式,把命令的错误输出 输出到指定的文件或设备中。 eg:# ifconfigsdfas > a.txt |
错误命令 2>>文件 | 以追加的方式,把命令的错误输出 输出到指定的文件或设备中。 eg:# ifconfigsdfas > a.txt | |
正确输出和错误输出 | 命令 > 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 eg:# ifconfig > a.txt 2>&1 |
同时保存 | 命令 >>文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 eg:# ifconfig >> a.txt 2>&1 |
命令 &>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。 eg:# ifconfig &> a.txt | |
命令 &>>文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。 eg:# ifconfig &>> a.txt | |
命令>>文件1 2>>文件2 | 把正确的输出追加到文件1中,把错误的输出追加到文件2中。 eg:# sdfasd>>a.txt 2>>b.txt |
3. /dev/null ---- Linux
中的’黑洞’
eg: 相当于windows 中的垃圾回收站,放进去的文件都会被销毁,
ls>>a.txt 2>>/dev/null 错误文件内容将会被抛弃
4. 输入重定向
# wc [选项][文件名] wc 字符内容 :统计键盘输入的内容 按 ctrl+D 开始统计
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
eg:
# wc < 文件名 <===> # wc 文件名 :把文件作为命令的输入
# wc << 标识符 :统计标识符之间的内容
eg:# wc << aaaa
> dfasdf
> asdf
> aaaa
.......
标识符把标识符之间的内容作为命令的输入
九. 管道符
管道符是一个非常实用的linux 命令,它的意义是 将管道符前面的输出 传递到 管道符后面命令的输入 。相当于是一个层级过滤,就是把前的查询的结果 筛选后 得到二次或多次过滤的结果。
1. 多命令顺序执行
多命令执行符 | 格式 | 所用 |
---|---|---|
: | 命令1:命令2 | 多个命令顺序执行,命令之间没有任何逻辑关系 |
&& | 命令1&&命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
|| | 命令1 ||命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 |
2. 命令格式
# 命令1 | 命令2 ///命令1的正确输出作为命令2的操作对象
eg:
# ls -l | more
# ps -ef | grep redis
3. 通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个多个任意字符 eg:# ls tty* |
[] | 匹配括号中的任意一个字符, eg:[abc] 匹配其中一个 |
[-] | 匹配括号中的任意一个字符, -代表范围 eg:[a-z] |
[^] | 逻辑非,表示匹配不是括号内的一个字符, eg:[^0-9] 匹配一个非数字字符 |
eg: # ls tty[^0-9]
4. Bash中的其他特殊符号
符号 | 作用 |
---|---|
‘’ | 单引号。其中的内容都是文本,不可执行 |
“” | 双引号。在双引号中的特殊符号都没有特殊的含义,但是 “$”,"`“和”"是例外,拥有 “调用变量的值”、"引用命令"和"转移符"的特殊含义。 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和 ( ) 作 用 一 样 , 不 过 推 荐 使 用 ()作用一样, 不过推荐使用 ()作用一样,不过推荐使用(),因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 再Shell脚本中,#开头的行代表注释 |
$ | 用于调用变量的值,如需调用变量name的值时,需要用$name的方式得到变量的值。 |
\ | 转移符。跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出"$"符号,而不是当做变量引用 |
// 打印变量中的值
eg1:
[root@localhost dev]# aa='123456'
[root@localhost dev]# echo $aa
123456
// 调用变量中对应的命令:
eg2:
[root@localhost test]# bb=`ls`
[root@localhost test]# echo $bb
a.sh