1.命令补全
shell程序在接受到用户执行命令的请求,分析完成之后,最左侧的字符串会被当做命令;查找内部命令;根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;
在给定的一个打头的字符串,如果这个字符串能够唯一的标识程序文件,直接补全;如果不能唯一标定,需要再次敲击Tab键,会给出列表
2.路径补全(依赖根文件系统)
在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件;
Tab:
如果能唯一标识,则直接补全; 否则,再一次敲击Tab,给出列表
Ctrl+l 清屏(并不是删除页面的内容)
Ctrl+c 终止 / 终止前台运行的程序(ping 192.168.0.152)
Ctrl+d 退出 等价exit
Ctrl+a 光标移动到命令行的最前端
Ctrl+e 光标移动到命令行的最后端
Ctrl+u 删除光标前所有字符
Ctrl+k 删除光标后所有字符
Ctrl+r 搜索历史命令,利用关键词
变量 (查看变量方法:echo $变量名)
1.HISTSIZE 当前shell进程可以保存命令历史的条数
2.HISTFILE 保存命令历史的文件
3.HISTFILESIZE 命令历史文件的大小
history -c 清空命令历史列表
-d offset(指的就是序号):指定删除命令历史
-r(读) 从命令历史文件中读取命令历史到命令历史列表
-w(写) 从列表到文件
命令历史列表:shell进程中保留的历史命令
命令历史文件:.bash_history 非实时
!!:再一次执行上一条命令
!#:执行命令历史列表中的第#命令
! string:再一次执行命令历史列表中最近一个以string打头的命令(string为字符串)
!$:调用上一个命令的最后一个参数(或Esc + . Esc键加点号)
HISTCONTROL
ignoredups 忽略重复命令
ignorespace 忽略以空白开头的命令(以空白开头的命令不会记录在命令历史中)
ignoreboth 以上两者都生效
修改变量的方法:只在当前shell环境中有效
NAM='VALUE' HISTCONTROL='ignorespace'
1. 命令别名:
alias 查看命令别名
2.定义别名 alias NAME='commond' (NAME不能是系统中的命令)
alias Net='vi /etc/sysconfig/network-scripts/ifcfg-eth0'
3.撤销别名
unalias NAME
4.永久生效别名 vi /etc/bashrc 中添加一行 alias NAME='commond'
添加之后如果想生效,需重载 source /etc/bashrc
5.如果想跳过别名,执行原有命令 \command(反斜杠+命令)
| 管道符 把上一个命令的执行结果(输出)当做下一个命令的输入
tee 可以把执行中的信息保留下来
. 在Linux中代表当前目录
.. 在Linux系统中代表上一级目录
; 在Linux中执行多条命令时,可以用分号隔开,每个命令之间互不干扰,所有命令都会执行
`` 反单引号 命令替换,反单引号引起的内容当做命令执行
'' 单引号 强引用,所见即所得
[root@localhost ~]# echo '$SHELL' 结果为 $SHELL
" " 双引号 弱引用,可以实现命令替换
[root@localhost ~]# echo "$SHELL" 结果为 /bin/bash
{ } 做扩展使用
* 通配作用
[root@localhost ~]# ls a* (a开头的所有的文件)
Linux提供的三种IO设备
STDIN | 标准输入 | 0(文件描述符) | 默认来自于键盘 |
STDOUT | 标准输出 | 1 | 默认到终端窗口 |
STDERR | 标准错误 | 2 | 默认到终端窗口 |
正确输出重定向
[root@localhost dev]# cd /tmp/
[root@localhost tmp]# date 1> date.file
[root@localhost tmp]# ls
date.file vmware-root_6136-969586290 yum.log
ks-script-s_Trsx vmware-root_6138-961263600[root@localhost tmp]# cat date.file
Tue Jan 18 22:47:52 CST 2022
1> 覆盖
1>> 追加
[root@localhost tmp]# ls /home/
[root@localhost tmp]# ls /aaa
ls: cannot access /aaa: No such file or directory
[root@localhost tmp]# ls /home/ /aaa
ls: cannot access /aaa: No such file or directory
/home/:
[root@localhost tmp]# ls /home/ /aaa 1> stdout
ls: cannot access /aaa: No such file or directory
[root@localhost tmp]# cat stdout
/home/:
[root@localhost tmp]# ls /home/ /aaa 1>> stdout
ls: cannot access /aaa: No such file or directory
[root@localhost tmp]# cat stdout
/home/:
/home/:
错误输出重定向
2> 覆盖
[root@localhost tmp]# ls /home/ /aaa 2> stderr
/home/:
[root@localhost tmp]# cat stderr
ls: cannot access /aaa: No such file or directory
2>> 追加
混合输出
&>
[root@localhost tmp]# ls /home/ /aaa &> std
[root@localhost tmp]# cat std
ls: cannot access /aaa: No such file or directory
/home/:
2>&1
首先,先把错误的重定向到正确的,然后从正确的一同输入到文件
设备文件
/dev/null 数据黑洞 不想要的数据都可以给他
[root@localhost tmp]# ls /home/ /aaa &> /dev/null(相当于出来的数据都直接丢弃了)
/dev/zero 吐零机 可以提供无穷无尽的0
* 匹配任意长度的任意字符
? 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[0-9] 所有数字
[a-z] aAbB......z
[A-Z] AbB......zZ
[[:lower:]] 小写字母
[[:upper:]] 大写字母
[[:digit:]] 数字
[[:alpha:]] 所有字母
[[:punct:]] 标点符号
[[:alnum:]] 数字+字母
[[:space:]] 空白字符
[^[:lower:]] 除小写字母
[root@localhost tmp]# touch af
[root@localhost tmp]# touch a1
[root@localhost tmp]# touch a234
[root@localhost tmp]# ls a*
a1 a234 af
[root@localhost tmp]# ls a?
a1 af
eg:
1、以一个小写字母开头,中间出现任意一个单个字符以一个大写字母结尾
2、以任意一位数字开头,以非数字结尾
3、以字母nmpl任意一位开头,后面跟一个数字,以及其他任意长度的任意字符
1、[[:lower:]]?[[:upper:]] 2、[0-9] *[^0-9] 3、[nmpl] [0-9]* 或 [nmpl] [[:digit:]]*