shell是和内核通信的接口,shell有很多种,Linux默认是bash
bash shell功能
命令记忆(history)
- 用户注销时,系统会将最近的HISTSIZE条命令更新到
~/.bash_history
history
命令列出最近的命令!number
执行第number条命令!!
相当于按↑再按enter!command
由最近向前搜索开头为command的命令,并执行
Tab键补全
- 按Tab键可补全命令或文件
- 输入多行命令时可使用
\enter
转义回车键
命令别名(alias)
设置别名:alias 别名='命令参数...'
,取消别名:unalias 别名
,列出所有别名alias
,如
alias lm='ls -al'
unalias lm
alias
使别名永久生效
上面的方法只是暂时,重启后则别名失效,可以通过将alias xx='xxxx'
写入环境变量文件如~/.bashrc
使别名永久生效
通配符
符号 | 意义 |
---|---|
* | 代表0到无穷多个任意字符 |
? | 代表一定有一个任意字符 |
[] | 代表一定有一个在中括号内的字符,如[abcd]代表一定有一个字符,可能是a,b,c,d中任一个 |
[-] | 代表在编码顺序内的所有字符,例如[0-9]代表0-9之间的所有数字 |
[^] | 中括号内第一个字符为\^,例如[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受 |
数据流重定向
定义:将命令执行后应出现在屏幕上的数据传输到其他地方
- 标准输入:代码为0,使用
<
或<<
- 标准输出:代码为1,使用
>
或>>
- 标准错误输出:代码为2,使用
2>
或2>>
- >是创建,如果文件已存在则将内容清空,>>是追加,在已有文件后继续写入内容
ll /home > ~/home_file #将ll /home的信息输出到~/home_file文件中
/dev/null
可以吃掉任何导向这个设备的信息(不显示,不存储)
ll /home 2> /dev/null #将错误信息丢弃
将输出与错误输出写入不同文件和同个文件
ll /home > list_right 2> list_error #输出到不同文件
ll /home/admin > list 2>&1 #正确输出和错误输出顺序写入同个文件,2>&1之间没有空格
ll /home/admin > list 2> list #正确输出和错误输出可能交叉写入同个文件
标准输入将原本由键盘输入改由文件内容输入,<<
代表结束输入
cat > cat_file < ~/.bashrc #将.bashrc文件内容存入cat_file
cat > cat_file << aaa #当输入aaa时,此次输入结束
命令执行的判断依据
一次输入多重命令执行,&&
和||
的执行顺序与Java中条件表达式的短路原则一致,此处&&
和||
的优先级一样(Java中&&
比||
高)
命令方式 | 含义 |
---|---|
cmd1 ; cmd2 | 命令之间无相关性,顺序执行 |
cmd1 && cmd2 | 若cmd1执行正确,则开始执行cmd2;若cmd1执行错误,则cmd2不执行 |
cmd1 || cmd2 | 若cmd1执行正确,则cmd2不执行;若cmd1执行错误,则开始执行cmd2 |
#不管/tmp/abc是否存在,一定要创建/tmp/abc/hehe文件
ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/hehe
管道命令
管道命令|
仅会处理前一个命令的标准输出,忽略标准错误输出
选取命令
选取信息是针对“行”为单位
- cut命令按要求对每一行进行切割
cut -d '分隔字符' -f number
cut -c 字符范围
# -d: 与-f一起使用
# -f: 依据-d将一行切割成数段,-f取出第几段,从1开始计数
# -c: 以字符单位取出固定字符区间,如2-5则取出第2到第5个字符内容,从1开始计数
#例子
echo $PATH | cut -d ':' -f 5 #取出PATH路径中的第5个路径
export | cut -c 12- #取出每一行第12个字符后的内容
- grep命令分析一行信息,符合要求则将该行拿出来
grep [-acinv] [-AB n] [--color=auto] '查找字符串' filename
# '查找字符串': 可包含正则表达式
# -a: 将binary文件以text文件的方式查找数据
# -c: 计算找到'查找字符串'的次数
# -i: 忽略大小写,所有大小写视为相同
# -n: 顺便输出行号
# -v: 反向选择,即显示出没有'查找字符串'内容的那一行
# -A: 后面可加数字,为after的意思,除了列出该行外,后续的n行也列出来
# -B: 后面可加数字,为before的意思,除了列出该行外,前面的n行也列出来
# --color=auto: 将关键字加上颜色
#例子
last | grep -n 'root' #取出root登录的行
grep 'MANPATH' /etc/man.config #man.config文件内包含有'MANPATH'的行显示出来