1.Linux系统终端概述
服务器终端切换: Ctrl + Alt + F1 … F6
虚拟机终端切换: Ctrl +Shift +Alt +F1 … F6
虚拟终端由mingetty
程序生成
//物理机执行为本地终端
[root@linux ~]# tty
/dev/tty1
//通过网络使用模拟终端远程连接Linux, 日常运维中就是这种方式。
[root@linux ~]# tty
/dev/pts/1
2.Linux系统Bash管理
简单的说, Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。 Linux也提供了像MicrosoftWindows那样的可视的命令输入界面X Window的图形用户界面它提供了很多桌面环境系统,其操作就像Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。GNOME。
Linux, Shell也有多种不同的版本。主要有下列版本的Shell:
BASH Shell: 是一个为GNU计划编写的Unix shell, 是许多Linux发行版的默认Shell C Shell: 是SUN公司Shell的BSD版本。 Z Shell: 它集成了bash、ksh的重要特性,同时又增加了自己独有的特性。
还有许多传统UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等, Shell Script大致都类同,当您学会一种Shell以后,其它的Shell很快就上手, 大多数的时候, 一个Shell脚本 通常可以在很多种Shell上使用。
2.1.Bash特性:命令补全
通过上下方向键来调取过往执行过的Linux命令; 命令或参数仅需输入前几位就可以用Tab键补全;
tab
键可以实现命令补全, 路径补全和命令实现方式一致, 工作中我们经常用到tab补全, 减少执行命令以及路径出错率。
//查看ip时忘记具体了命令
[root@nfs1 ~]# ifcon
//按下tab键会自动补全
[root@nfs1 ~]# ifconfig
//按一下tab键没有反应, 按两下tab键列出所有if开头的命令
[root@nfs1 ~]# if
if ifconfig ifenslave ifrename
ifcfg ifdown ifnames ifup
//linux路径较深, 经常使用tab键进行补全, 如果路径出错是没有办法补全
[root@nfs1 ~]# ls /etc/sysconfig/network-scripts/
2.2.Bash特性:命令快捷键
终端快捷键的使用可以帮助我们大大提升效率
Ctrl + A //光标跳转至正在输入的命令行的首部
Ctrl + E //光标跳转至正在输入的命令行的尾部
Ctrl + C //终止前台运行的程序
Ctrl + D //在shell中,ctrl-d表示推出当前shell。
Ctrl + Z //将任务暂停,挂至后台
Ctrl + L //清屏,和clear命令等效。
Ctrl + K //删除从光标到行末的所有字符
Ctrl + U //删除从光标到行首的所有字符
Ctrl + R //搜索历史命令, 利用关键字
//在命令行前加面加 "#" 则该命令不会被执行
History
查看系统命令历史, 追溯之前发生情况
命令选项 -w 保存命令历史到历史文件 -c 清空命令历史记录, 不会情况文件 -d 删除命令历史的第 N 条行
//使用双 !! 可执行上一条命令
[root@localhost ~]# ls
localhost.com
[root@localhost ~]# !!
ls
localhost.com
//输入!6, 执行history命令历史中第 6 行命令
[root@localhost ~]# !6
touch localhost.com
//使用!cat, 调用history命令历史最近一次执行过的cat命令
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# !cat
cat /etc/sysconfig/network-scripts/ifcfg-eth0
执行当前命令, 调用上一条命令最后一个参数
[root@localhost ~]# ls /etc/passwd
//调用上一条命令的最后一行, 按下ESC松开, 然后按下 "."
[root@localhost ~]# cat
[root@localhost ~]# cat /etc/passwd
//第二种方式, 输入!$
[root@localhost ~]# ls !$
ls /etc/passwd
/etc/passwd
2.3.Bash特性:命令流程
当我们执行一个命令, 整个命令执行流程如下: 1.判断命令是否通过绝对路径执行 2.判断命令是否存在别名 3.判断用户输入的是内部命令还是外部命令 4.内部命令直接执行, 外部命令检测是否存在缓存 5.检测PATH路径, 有执行, 无报错
内部命令: shell程序自带的命令。 外部命令: 在系统PATH变量的某个路径下的可执行程序。
//1.定义临时别名, if1为查看eth0网卡别名
[root@localhost ~]# alias if0='ifconfig eth0'
[root@localhost ~]# if0
//如果定义命令本身, 会执行什么?
[root@localhost ~]# alias ifconfig='ifconfig eth0'
//绝对路径执行, 调用命令本身
[root@localhost ~]# /sbin/ifconfig
//通过\转义字符, 调用命令本身
[root@WebServer ~]# \ifconfig
//2.定义系统永久生效别名, 将命令别名添加至当前用户环境配置文件
[root@localhost ~]# echo "alias ifconfig='ifconfig eth0'" >> ~/.bashrc
//如将别名命令添加至/etc/bashrc , 对所有用户生效
//3.取消临时别名
[root@localhost ~]# unalias ifconfig
2.4.Bash特性:命令流程
当我们执行一个命令, 整个命令执行流程如下: 1.判断命令是否通过绝对路径执行 2.判断命令是否存在别名 3.判断用户输入的是内部命令还是外部命令 4.内部命令直接执行, 外部命令检测是否存在缓存 5.检测PATH路径, 有执行, 无报错
内部命令: shell程序自带的命令。 外部命令: 在系统PATH变量的某个路径下的可执行程序。
使用type命令检测用户输入的命令属于内部命令还是外部命令。
//cd命令属于shell内部命令
[root@linux-node1 ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
//ping属于外部命令, 同时会打印当前命令路径
[root@localhost ~]# type -a ping
ping is /bin/ping
PATH变量定义的路径, 作用是告诉Bash执行的外部命令存放的位置,Bash会在这些路径中进行逐个扫描。
//echo所见即所得
[root@localhost ~]# echo "123"
123
[root@localhost ~]# echo -e "123 \n456"
123
456
//打印当前环境变量目录
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
//PATH由多个路径组成,每个路径值之间用冒号间隔,对这些路径的增加和删除操作都将影响到Bash解释器对Linux命令的查找。
//修改PATH变量
[root@localhost ~]# PATH=/soft/bin:$PATH
//写入/etc/profile配置文件永久生效
echo 'export PATH=/soft/bin:$PATH' >> /etc/profile
事实上执行过的外部命令都会保存在内存缓存中, 当再次执行相同的命令, 会通过缓存调取执行, 也就意味着不会搜索PATH路径。
//表缓存命令所在位置
[root@localhost ~]# hash
hits command
1 /usr/bin/tty
3 /sbin/ifconfig
//已缓存命令,如果移动位置会导致无法找到该命令
[root@localhost ~]# mv /sbin/ifconfig /bin/
[root@localhost ~]# ifconfig
-bash: /sbin/ifconfig: No such file or directory
//删除缓存过的ifconfig命令, 即可执行
[root@localhost ~]# hash -d ifconfig
[root@localhost ~]# ifconfig
//当然可以情况缓存表
[root@localhost ~]# hash -r
//命令缓存hash需要注意如下情况:
1.如果执行外部命令1次就会对该命令进行缓存
2.如果将命令移动了位置
a.使用绝对路径执行
b.删除hash表的缓存指令
```
总结, 当我们执行了一个ping命令之后, 整个命令执行的流程步骤如下:
>1.检查执行的是否是绝对路径执行
2.检查该ping命令是否存在别名
3.检查该ping命令是内部命令还是外部命令
4.如果是内部指令直接执行, 如果是外部命令
5.检测该命令是否有缓存,如果没有,查找PATH变量
6.检查PATH路径直到查找到该命令然后执行
7.如果没有找到该命令则返回错误。command not found
## 2.5.Bash特性:路径展开
`Linux Shell`下路径展开用花括号包括, 逗号分隔, 这样花括号里的内容会被展开形成列表。
[root@localhost ~]# mkdir /tmp/zz/a/b /tmp/yy/a/b -pv
mkdir: created directory /tmp/zz' mkdir: created directory
/tmp/zz/a'
mkdir: created directory /tmp/zz/a/b' mkdir: created directory
/tmp/yy'
mkdir: created directory /tmp/yy/a' mkdir: created directory
/tmp/yy/a/b'
//删除目录 [root@localhost ~]# rm -rf /tmp/{zz,yy}
//通过路径展开方式创建目录
[root@localhost ~]# mkdir /tmp/{zz,yy}/a/b -pv
mkdir: created directory /tmp/zz' mkdir: created directory
/tmp/zz/a'
mkdir: created directory /tmp/zz/a/b' mkdir: created directory
/tmp/yy'
mkdir: created directory /tmp/yy/a' mkdir: created directory
/tmp/yy/a/b'
思考:在/tmp 路径下创建以下目录 etc/init.d etc/sysconfig usr/lib usr/bin usr/include var/spool var/run proc sys bin
## 2.6.Bash特性:转义字符
Shell解释器提供了非常丰富的转义字符, 来实现字符处理以及命令替换。
4类常用转义字符
>反斜杠(\):使反斜杠后面的一个变量变为字符串。
单引号(''):转义其中所有的变量为单纯的字符串。
双引号(""):保留其中的变量属性,不进行转义处理。
反引号(``):把其中的命令执行后返回结果。
//将特殊字符转换为正常字符 [root@localhost ~]# echo "shoping is $500" shoping is 00 [root@localhost ~]# echo "shoping is $500" shoping is $500 //转义其中特殊字符为普通字符串 [root@localhost ~]# echo 'shoping is $500' shoping is $500
//使用$()实现命令替换
[root@localhost ~]# echo "The Directory is $(pwd)"
The Directory is /root
//使用``实现命令替换
[root@localhost ~]# echo "The Directory is pwd
"
The Directory is /root
//转义其中所有的变量为单纯的字符串
[root@localhost ~]# touch file-date +%F-%H-%S
[root@localhost ~]# ls
file-2017-12-03-04-18
[root@localhost ~]# touch 'file-date +%F-%H-%S
'
[root@localhost ~]# ls
file-2017-12-03-04-18 file-date +%F-%H-%S
## 2.7.Bash特性:获取帮助
1.通过man命令获取帮助
手册的常见级别: 1(普通用户命令手册) , 5(配置文件手册), 8(管理员命令手册) g : 回到手册的顶部 G : 去到文档的底部 / : 输入要搜索的关键字,进行文档搜索 q: 退出文档 回车: 往下滚动一行 空格键: 往下翻一页 man -a passwd man 5 passwd man 1 passwd man -k passw 找到所有的包含passwd关键字的手册并且列出来
2.通过info或pinfo获得帮助
首页寻找Textinfo文档,如果没有,强制打开对应的Man文档 与vi风格类似,快捷键: 空格:翻页 HOME: 返回页面顶部 END:返回页面底部 上箭头: 光标上移动一行 下箭头: 光标下移动以行 左箭头: 返回上一章节 右箭头: 浏览光标所在章节 d: 回到手册首页 q: 退出手册
强制打开指定级别的man文档 $ pinfo -m 5 passwd