操作系统--->shell---->kernel
操作系统OS : 里面包含很多应用程序,和命令,用户输入的命令并不能被内核识别,需要通过shell进行解析并传递给内核
shell(壳) : 作用是解析命令并且传递给内核,然后让内核执行操作
kernel : 执行shell指派的动作
history : 查看内存中的历史纪录,在.bash_ history里面可以查看所有的历史记录信息
history -c : 清空内存中的历史纪录
-w 1.txt : 把内存中的历史记录保存到文件1.txt中
bash shell 功能快捷键 :
ctrl + u : 剪切光标前面的所有命令
ctrl + k : 剪切光标后面的所有命令,与ctrl + u效果相反
ctrl + w : 剪切光标前面的单词,就是以空格作为分隔符
ctrl + y : 粘贴前面剪切的命令
bash shell 通配符:
在[]中只能匹配单个字符
* : 例如ls file* : 匹配0或者多个字符
? : 例如ls file1.tx? : 匹配一个任意字符
[0-9] : ls file[0-9].txt : 匹配0-9里面的任意一位数字
[abc] : ls fil[efg][0-9].txt : 匹配abc中的任意一位字符
[^abc] : ls [^a].txt : 匹配除了a.txt之外的其他的.txt文件
~: 指向用户的主目录
cat ~/.bast_profile
也可以指向其他用户的主目录
cat ~user1/.bash_history
bash shell命令扩展符:
$(命令)例如 : echo "This system's hostname is $(hostname)" : (hostname)里面的hostname是一个命令,表示把一个命令作为另一个命令的参数,直接输出$(hostname),会把输出结果作为另一个命令
bash shell大括号扩展{} : 可用于创建多个目录
例如: echo file{1,3,5,2} : 输出file1,file3,file5,file2
echo {1..10} : 输出1到10
在bash shell中的变量(程序中保存用户数据的一块内存空间,变量名就是这块内存空间的地址,也就是说变量名不可变,变量的值可以变化)分为本地变量和环境变量
定于本地变量(变量名必须以字母或下划线开头,区分大小写,一般用大写字母比较好) :
定义方法 : 例如: A=100,_A=abc,注意在bash shell中不要加空格,因为默认是以空格作为分隔符,以第一个为命令,后一个为选项,调用时用echo $A
查看变量 : echo $变量名,例如 : echo $A 或者 echo ${A}
取消变量 : unset 变量名
作用范围 : 仅在当前shell中生效,(没开个窗口都是一个新的shell,包括用了bash进入的子shell)在别的窗口的shell无法生效,可用exit退出当前shell
注意 : 用set配合grep可以查看当前定义的本地变量,用pstree可以查看进程树,配合bash也可查看bash的子shell、父shell和新shell
set : 查看在当前shell中生效的所有变量,包含环境变量和本地变量,可以用管道符
env : 查看在当前shell中生效的所有环境变量,可以用管道符
pstree : 查看进程树,可查看目录的结构,以及在第几层shell中
环境变量(主要用作保存系统操作环境相关的数据,例如当前登录用户的家目录,命令提示符等)
定义方法 : export back_dir2=/home/backup 或者export B=100
查看变量 : echo $B,或者echo ${B}
取消变量 : unset 变量名
作用范围 : 只可作用到当前shell和子shell中,父shell中就不行了
系统常见的变量有
PS1 : 提示符变量,就是用户登陆系统的界面[root@wm tmp]#这些提示符,格式为[\u@\h \W]\$
HISTSIZE : 历史记录条目数
PATH : 用户可执行文件或命令所在目录,用户之所以可以执行命令,是因为/usr/bin,/usr/sbin里面的文件写入了环境变量
/etc/profile : 定义系统全局的环境变量,针对所有用户都生效
用source /etc/profile ; su - user ; 重启系统都可以生效
/etc/bashrc : 定义的全局变量,也是针对所有用户生效的
~/.bash_profile : 定义用户的环境变量,针对用户生效
~/.bashrc : 定义用户的变量,针对用户生效
登录shell(注意,su - 为登录shell,其他都是非登录shell)
图形界面或者字符界面时
su - 切换用户
/etc/profile,~/.bash_profile,/etc/bashrc,~/.bashrc文件都会被读到,都会生效
4个文件的读取顺序 : /etc/profile ----> /etc/bashrc -----> ~/.bash_profile -----> ~/.bashrc ------> /etc/bashrc
非登录shell(只会读取到/etc/bashrc,~/.bashrc,环境变量的shell不会被读取到,注意: 开启的子shell也是会继承当前shell的生效的变量)
1、su 切换用户
2、在图形界面打开一个终端
3、bash
4、执行脚本时
5、其他情况,等等
注意: source file 和 . file 是一样的,都是使变量在当前shell中生效
命令别名alias : 用于命令比较长而且要经常执行的情况下
查看别名 : alias
定义别名 : alias copy='command'
取消别名 : unalias copy
定义别名永久生效 : /etc/bashrc和~/.bashrc中用source生效
在shell中\,单引号和双引号
\ : 去掉\后面字符的特殊含义
'' : 去掉引号内所有字符的特殊含义
"" : 去除引号内所有字符的特殊含义,除了以下几种情况不能去除
注意: 要用echo调用
1、$: 调用变量
2、$(): 调用命令执行的结果
3、`` : 调用命令执行的结果,例如: echo `ls -a`