RHCE第三周(bash shell)
一:初始bash shell
shell:就是一个解释器,将命令翻译成内核看的懂的语言
shell的种类:bash shell ,csh,ksh等
会了rhel其他的也回了,因为其他的版本的shell默认都是bash shell所以他们的命令万变不离其宗
二:bash shell提供的功能
1:快捷键
| ctrl+A | 移动的命令的最前面 |
| ctrl+E | 移动到命令的最后面 |
| ctrl+c | 终止当前的命令 |
| ctrl+d | 退出当前终端 |
| ctrl+u | 将光标前面的内容剪切 |
| ctrl+k | 将光标后面的内容剪切 |
| ctrl+y | 将剪切的内容复制 |
| ctrl+r | 在历史命令中搜索 |
| ctrl+z | 暂停,并且放入到后台 |
| ctrl+s | 暂停屏幕输出 |
| ctrl+q | 恢复屏幕输出 |
| ctrl+shift+t | 在开一个终端 |
| ctrl+alt+fn | 切换终端 |
| ctrl+l |
清屏 |
2:history历史记录
history:显示历史命令
每个用户都有存放历史命令的文件
选项:
-c:删除历史命令
-w:将历史记录写入到保存历史记录的文件里面去/root/.bash_history这个文件里面去
清空历史记录的文件的操作:
[root@server ~]# history -w [root@server ~]# echo > /root/.bash_history [root@server ~]# history -c [root@server ~]# cat .bash_history
还有一个方法就是
[root@server ~]# history -c [root@server ~]# history -w [root@server ~]# cat .bash_history history -w [root@server ~]#
就是退出终端后,系统会将历史命令保存到这个文件里面去,如果删除这个文件的话,下次登录时,会自动的生成
3:通配符
通配符就是为了快速的匹配文件的
常见的通配符
| * | 匹配所有的文件 |
| ? | 匹配单个字符 |
| [abc] | 匹配里面的任意单个字符 |
| [^abc] | 不匹配里面的任意单个字符 |
| [0-9] | 匹配0到9的数字 |
| [[:alpha:]] | 匹配任意的字母(不区分大小写) |
| [[:lower:]] | 匹配小写的字母 |
| [[:upper:]] | 匹配大小的字母 |
| [[:digit:]] | 匹配数字 |
| [[:alnum:]] | 匹配数字和字母 |
案例:
[[:alpha:]]的2个括号和一个括号的区别:
后面的跟这个一样
#单个的话,就只匹配到里面有的字符 [root@server tmp]# ls [:alpha:].txt a.txt [root@server tmp]# #2个的话,当成一个整体,匹配所有的字母 [root@server tmp]# ls [[:alpha:]].txt a.txt A.txt b.txt B.txt c.txt C.txt m.txt [root@server tmp]#
[^abc]和[0-9]:
[root@server tmp]# ls [^abc].txt A.txt B.txt C.txt m.txt [root@server tmp]# [root@server tmp]# ls [0-9].txt 1.txt 2.txt 3.txt [root@server tmp]# ls [0-9][0-9].txt 10.txt 11.txt 12.txt 13.txt [root@server tmp]#
4:命令扩展符
~:表示当前用户登录的家目录
·命令·:反引号,表示将命令的结果保存,可以执行这个命令
$():也是保存命令的结果的
{1..3}:这个就是匹配多个1,2,3,里面必须是有顺序的(连续的),否则当成一个整体
案列:
1){1..3}
[root@server tmp]# touch {1..3}.txt
[root@server tmp]# ls
1.txt 2.txt 3.txt
[root@server tmp]#
2)步长的{1..10..2}
[root@server tmp]# touch {1..10..2}.txt
[root@server tmp]# ls
1.txt 3.txt 5.txt 7.txt 9.txt
[root@server tmp]#
3){}里面不是连续的话,用逗号隔开
[root@server tmp]# touch {rhel,centos,qqq}.txt
[root@server tmp]# ls
1.txt 2.txt 3.txt 5.txt 7.txt 9.txt centos.txt qqq.txt rhel.txt
[root@server tmp]#
5:shell命令的提示符
[root@server ~]#
root:表示登录的用户
server:表示登录的主机名
~:表示当前工作目录
#:表示root
$:表示普通用户
\:当命令太长的话,可以使用这个命令来操作
三:变量
一:变量的基础知识
1:变量的定义
变量的概述:存储变化数据的内存空间地址,变化的是数据,不变的是内存的空间地址
ip_address=ifconfig | grep netmask | awk '{print $2}' 这个是获取ip地址的,在不同的虚拟机上面,有不同的地址,变化的是ip地址,不变的是内存的空间地址(ip_address)
变量命名的规则:由数字,下划线,字母组成,不能以数字开头,严格区分大小写
2:变量的类型
本地变量:用户自定义的变量
环境变量:存放了系统中的变量
3:变量的一些操作
1)定义变量名
自定义变量:os=100
定义环境变量:export os
2)引用变量名
$变量名
${变量名}
3)查看变量名
set:查看所有的变量名(本地变量和环境变量)
env:查看所有的环境变量名
4)取消变量
unset 变量名
4:区分(环境变量和本地变量)
本地变量是在当前shell下能够执行的,在子shell和新开的一个终端下无法使用
环境变量是在当前shell和子shell下都能执行的
5:常见的系统变量(特殊的环境变量)
| PWD | 显示当前的路径 |
| HOME | 显示当前用户的家目录 |
| PS1 | 命令提示符 |
| PATH | 显示存放命令的目录 |
| USER | 显示当前登录的用户 |
重点的介绍:PS1和PATH这2个
PS1的改变:
[root@server opt]# echo $PS1 [\u@\h \W]\$ [root@server opt]# qcyexport PS1='[\u@\h \W]\$ qcy ' [root@server opt]# qcy ls [root@server opt]# qcy export PS1='[\u@\h \W]\$ ' [root@server opt]# ls ftp.sh ip.sh passwd test useradd.sh user.txt [root@server opt]#
PATH的改变:
就是写了一个命令的脚本,然后添加在这个路径下,就能当成命令一样的执行了
[root@server command]# ls get_user [root@server command]# echo $PATH /root/.local/bin:/root/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin [root@server command]# export PATH='/root/.local/bin:/root/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/opt/command' [root@server command]# get_user 用户id=0(root) 组id=0(root) 组=0(root) [root@server command]# export PATH='/root/.local/bin:/root/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin' [root@server command]# get_user bash: get_user: command not found... Failed to search for file: /media/AppStream was not found [root@server command]#
二:引号和反斜杠和别名
单引号:就是强引用,无论里面有什么特殊的含义都没有用
双引号:不会去掉特殊含义的 $,\,!,`` 都不会去掉
\:就是换行的,如果一行没有输完的话,可以使用这个命令
别名:就是命令的快捷方式,简化了命令的执行方式
查看别名:alias
设置别名:alias qq='cp /etc/passwd /opt/passwd'
取消别名:unalias qq
这些别名的设置都只是临时生效的,如果要是永久生效的话,就要写入到文件里面去
三:登陆shell
理解:用户通过不同的登录方式可以获取不同的shell操作环境,使用图形化登录或者是命令行登录,或者是su - 用户 切换用户都会获取到不同的shell操作环境
1:登陆shell类型:
登陆shell:(一般输入账户和密码,用户登录到的系统)
图形化登录和su - 切换用户,字符页面登录和ssh登录
非登录shell:(用户没有登录到这个系统,只是获取了shell操作的环境)
su 切换用户和伪终端和执行脚本
二者的区别:
登陆shell:就是用户登录到了这个系统
非登录shell:就是用户获得了这个shell的操作环境
还有就是触发的变量的文件不同(在登录时)
2:触发的shell文件
登陆shell触发的文件:
/etc/profile/ /etc/bashrc ~username/.bashrc ~username/.bash_profile
非登录shell触发的环境:
/etc/bashrc ~username/.bashrc 这2个文件
有优先级的区分:
先加载 /etc/bashrc ----->>> /etc/profile-------->>>/etc/bashrc------>>>>~username/.bashrc------>>>~username/.bash_profile的顺序
就是/etc/profile里面还要在加载/etc/bashrc这个文件
题目:所有的用户 a的值都为100 只有q7用户a的值为1000
3:用户的登出shell
用户退出shell时,会触发的文件~username/.bash_logout
总结:
关于登录shell的
无论是登录shell还是非登录shell,切换到用户想要变量名和别名生效的话,就写入到~username/.bashrc
想要所有的用户的变量名和别名都生效的话,写入带/etc/bashrc这个文件里面去
执行的优先级:
/etc/bashrc ---->>>/etc/profile----->>>/etc/bashrc----->>>~username/.bashrc----->>>~username/.bash_profile

浙公网安备 33010602011771号