Linux基础
shell的含义
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器),是提供用户和内核交互一个程序,广义的shell可以分为GUI图形化界面和CLI命令行界面。
- GUI图形化界面
- gnome、kde、xface
- CLI命令行界面
- sh、csh、bash、ksh、tcsh、zsh
bash特性
查看当前正在使用的shell语言。
查看当前可使用的shell语言。
1.Tab补全、命令历史
文件补全
命令补全
路径补全
命令历史
- 显示历史命令
2.支持管道、重定向
重定向可以分为输入重定向以及输出重定向这两种类型。
- Linux的重定向有三种数据流。
- 输入信息会从 stdin 中读取(标准输入,通常是键盘或鼠标)。文件描述符号为:0
- 输出信息会被输出到 stdout (标准输出,一个文本文件或者数据流)。文件描述符号位:1
- 错误信息会被输出到 stderr。文件描述符号为:2
重定向符号
> 输出重定向到一个文件或设备 覆盖原来的文件
>| 输出重定向到一个文件或设备 强制覆盖原来的文件
>> 输出重定向到一个文件或设备 追加原来的文件
command < filename 以filename文件作为标准输入
command 0<filename 以filename文件作为标准输入,使用<对输入做重定向,如果符号左边没有写值,那么默认就是0
command <<EOF 从标准输入中读入,直到遇到EOF分隔符,EOF可以是任何字符
输入重定向可以将输入信息重定向至命令中作为参数使用。该功能可能比较少用,但是,当命令需要一个参数列表时,而这些参数都存在一个文件中,然后你想快速地将它们从文件中复制粘贴到终端,这时这个功能就能派上用场了。
- cat > 文件名 << EOF开始屏幕输入,直到输入END后结束
- cat << EOF >文件名,命令效果相同。
注意:cat命令本身是带输入和输出的,这里<<EOF定义了cat命令本次执行时用户输入EOF后结束程序。
管道
- 【|】把前一个命令的执行结果当做后一个命令的输入
3.支持命令行展开
~:当前用户的家目录
~USERNAME: 给定用户的家目录 比如cd ~ cd ~ nick
{}:可写一个以逗号分割的列表,将其展开为多个路径。
4.快捷键
- 光标回到命令首行:ctrl+a
- 光标回到命令行尾:ctrl+e
- 复制命令行内容:ctrl+Insert
- 粘贴命令行内容:shift+Insert
- 剪切光标处到行尾的字符:ctrl+k
- 剪切光标处到行首的字符:ctrl+u
- 删除光标前的一个单词:ctrl+w
- 粘贴删除的文本:ctrl+y
- 中断终端正在执行的任务:ctrl+c
- 执行上一条命令:!!
- 执行最近以字母开头的命令:!+命令首字母
- 仅打印最近已ho开头的命令,但不执行: !+命令首字母:p
- 执行命令历史列表的第num(数字)条命令:!49
- 执行上一条命令的最后一个参数
[root@localhost ~]# ahjsgkahjk ghdsjkg ls
-bash: ahjsgkahjk: command not found
[root@localhost ~]# !$
ls
anaconda-ks.cfg lishan
- 获取上一条命令的最后的部分:esc+.
- 移动到当前单词的开头:esc+b
- 移动到当前单词的结尾:esc+f
5.支持命令别名
- alias 命令别名能让较长的命令变得简单,可按自己所需设定!
永久设置命令别名
[root@localhost ~]# vim ~/.bashrc ##~/.bashrc文件只针对当前用户
[root@localhost ~]# source ~/.bashrc ##重新加载文件
/针对系统所有用户设置命令别名
[root@localhost ~]# vim /etc/bashrc ##/etc/bashrc 文件针对系统所有用户
[root@allen ~]# source /etc/bashrc ##重新加载
//临时命令别名
[root@localhost ~]# cdnet
-bash: cdnet: command not found
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# alias cdnet='cd /etc/sysconfig/network-scripts/'
[root@localhost network-scripts]# cdnet
[root@localhost network-scripts]# cd
[root@localhost ~]# cdnet
[root@localhost network-scripts]# reboot
6.支持文件名通配
通配符是一种特殊语句,用来模糊搜索文件。当查找文件夹或目录时,可以使用它来代替一个或多个真正字符。
通配符:
‘ * ’:匹配任意长度的任意字符(包令0个字符)
[root@localhost ~]# ls
a10b a1b a2b a3b a4b a5b a6b a7b a8b a9b anaconda-ks.cfg b c d
[root@localhost ~]# ls a*
a10b a1b a2b a3b a4b a5b a6b a7b a8b a9b anaconda-ks.cfg
‘ ? ’:匹配任意单个字符
[root@localhost ~]# ls
a10b a1b a2b a3b a4b a5b a6b a7b a8b a9b ab anaconda-ks.cfg b c d
[root@localhost ~]# ls a?
ab
‘ [ ] ’: 匹配指定字符范围内的任意单个字符,通配符本身不会匹分大小写的这一点要注意到。
[xyz] # 匹配xyz
[a-z] # 匹配a-z的字母集
[A-Z] # 匹配大写字母集
[0-9] # 匹配数字
[0-9a-zA-Z] # 匹配数字大小写字母
[root@localhost ~]# ls
a10b a1b a2b a3b a4b a5b a6b a7b a8b a9b ab anaconda-ks.cfg b c d
[root@localhost ~]# ls a[0-2][a-z]
a1b a2b
//建议使用POSI规范来匹配,如下的字符集可以匹分大小写
[[:upper:]] 所有大写字母
[[:lower:]] 小写字母
[[:alpha:]] 大小写字母集
[[:digit:]] 数字
[[:alnum:]] 包含数字和字母表
[[:space:]] 空格
[[:punct:]] 标点符号
[^]: 匹配指定范围外的任意单个字符
[^[:upper:]]
[^0-9]
[^[:alnum:]]
[root@localhost ~]# ls
1 2 4 A a1b a3b a5b a7b a9b anaconda-ks.cfg b c d E G I K M O Q S U W Y
{1-5} 3 5 a10b a2b a4b a6b a8b ab {A-Z} B C D F H J L N P R T V X Z
[root@localhost ~]# ls [^[:upper:]]*
1 2 4 a10b a2b a4b a6b a8b ab {A-Z} c
{1-5} 3 5 a1b a3b a5b a7b a9b anaconda-ks.cfg b d
[root@localhost ~]# ls [^[:digit:]]*
{1-5} a10b a2b a4b a6b a8b ab {A-Z} B C D F H J L N P R T V X Z
A a1b a3b a5b a7b a9b anaconda-ks.cfg b c d E G I K M O Q S U W Y
[root@localhost ~]# ls [^[:alnum:]]*
{1-5} {A-Z}
[root@localhost ~]# ls
a10b a1b a2b a3b a4b a5b a6b a7b a8b a9b ab anaconda-ks.cfg
[root@localhost ~]# rm -rf /root/a{1..10}*
[root@localhost ~]# ls
ab anaconda-ks.cfg