Linux Shell
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
Linux中标准Shell为Bash,各发行版命令基本通用。
- 查看当前Linux用的什么Shell
- echo $SHELL
- 查看Linux可用的Shell
- vim /etc/shells
- 使用别的shell
- sh
- bash
- 退回上一级shell
- exit
脚本的执行方法
- 赋予执行权限,直接运行
- chmod 755 hello.sh
- ./hello.sh
- 通过bash调用执行脚本
- bash hello.sh
Bash的基本功能
命令别名与快捷键
- 查看系统中的所有命令别名
- alias
- 设定命令别名
- alias 别名 = ‘原命令’
- 临时生效,重启后重置
- 别名永久生生效
- vim ~/.bashrc
- 写入环境变量配置文件,重启后生效
- source ~/.bashrc
- 调用一遍,手动生效
- 删除别名
- unalias 别名
- 临时删除,重启后重置
命令生效顺序
- 执行绝对路径或相对路径执行的命令
- 执行别名
- 执行bash的内部命令
- 执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
常用快捷键
ctrl+c
强制终止当前命令ctrl+l
清屏ctrl+a
光标移动到命令行首ctrl+e
光标移动到命令行尾ctrl+u
从光标所在位置删除到行首ctrl+z
把命令放入后台ctrl+r
在历史命令中搜索ctrl+d
相当于exit
历史命令
- history [选项] [历史命令保存文件]
- -c 情况历史命令
- -w 把缓存中的历史命令写入里面
命令保存文件
- 历史命令保存文件 ~/.bash_history
- 不加文件则处理缓存
- 历史命令默认保存1000条
- 可在/etc/profile中进行修改
- 历史命令的调用
- 上下箭头
- !n 重复执行第n条命令
- !! 重复执行上一条命令
- !字符串 重复执行最后一条以该字符串开头的命令
命令与文件补全
Tab键自动补全,按一次没反映说明有多条补全,连续按两次全部提示
输出重定向
用于记录日志
- 命令 > 文件
- 以覆盖方式,把命令的正确输出输出到指定的文件或设备当中
- 命令 >> 文件
- 追加,正确输出
- 错误命令 2> 文件
- 覆盖,错误输出
- 错误命令 2>> 文件
- 追加,错误输出
正确输出和错误输出同时保存
- 命令 > 文件 2>&1
- 命令 >> 文件 2>&1
- 命令 &> 文件
- 命令 &>> 文件
- 命令 >> 文件1 2>> 文件2
输入重定向
wc [选项] [文件名]
- -c 统计字节数
- -w 统计单词数
- -l 统计行数
命令<文件把文件作为命令的输入
命令<<标识符 … 标识符
- 把标识符之间的内容当作输入
wc < abc.log
- wc abc.log
- 统计文件内的数据
管道符
多命令顺序执行
;
命令1;命令2
- 多个命令顺序执行,命令之间没有任何逻辑联系
&&
命令1&&命令2
- 逻辑与,当命令1正确执行时,命令2才会执行,命令1执行不正确,命令2不执行
||
命令1||命令2
- 逻辑或,当命令1执行不正确,命令2才会执行,命令1执行正确,命令2不执行
例:命令 && echo yes || echo no
判断命令是否正确执行
管道符
命令1 | 命令2
- 命令1的正确输出作为命令2的操作对象
例
- netstat -an | grep ESTABLISHED
- 查看服务器连接状态列表
- netstat -an | grep ESTABLISHED | wc -l
- 查看服务器连接数目
- ll | more
- 分页显示
通配符
?
- 匹配任意一个字符
*
- 匹配0个或任意多个任意字符
[]
- 匹配中括号中任意一个字符,可用-连接,如a-z
[^]
- 匹配不是中括号内的一个字符
bash中其他特色符号
''
- 单引号
- 所有特殊符号没有特殊含义
""
- 双引号
- $ ` \ 有特殊含义
- ` “`
- 反引号
- 引用系统命令,$变量会调用
$()
- 与反引号功能一样
#
- 注释
$
- 调用变量的值
\
- 转义