硬件、核心和Shell
用户通过Shell输入命令与核心(Kernel)沟通,核心再来控制硬件工作
Linux的shell:Bash(Bourne Again SHell)
Bash功能
命令历史(history)
通过上下键来查找bash的history,此次登录输过的命令会暂时存储在内存,当注销时这些命令会存入~/.bash_history
命令补全(tab)
tab接在一串命令的第一个字的后面为命令补全,tab接在一串命令的第二个字后面为文件补全,反正多按tab就对了
命令别名(alias)
通过自定义命令别名:alias lm='ls -al'之后,输入lm相当于输入ls -al,通过alias来乍看自定义的命令别名
shell script(命令脚本)
通配符(wildcard)
查询是否是内建指令:type
指令分行和快速编辑
- 分行:当指令太长时,可以通过\+Enter分行
- 快速编辑: 
- 取用:在变量前加上 - $表示取用该变量
- 设定: - 变量名=变量内容设定规则:- 等号两边不能有空格(java、Python语言学习者表示不适)
- 不能以数字开头
- 双引号中若含有$变量,则可以解析该变量的值,单引号则不行,单引号内不能解析变量
- 可以使用转义符[\]来转义特殊字符,例如enter和空格等
- 变量内容还可以引用其他命令,用反单引号将指令引起,或使用[$(指令)]
- 扩增变量的用法:[PATH="$PATH":/home/usr]或[PATH=${PATH}:/home/usr]
- 通常习惯认为全大写表示系统的默认变量,小写则表示用户自定义的变量
- 取消变量命令:unset用法:[unset + 变量名]环境变量查看自己的环境变量命令:env查看所有变量(环境变量和用户自定义变量):set比较重要的一些变量
 
- $:刀符本身也是一个变量代表本SHELL的进程代号PID,可用 - echo $$查看
- ?:问号代表上一个命令的回传值,一般上一个命令运行成功则返回0,不成功则返回非零 - export将自定义变量转换为环境变量- 环境变量与自定义变量的区别为,自定义变量不能被子程序读取,而环境变量可以。而子程序含义是该BASH下的执行的命令 
 使用export的方法- [export 变量名]- 读取用户控制台输入read- 用法: - [read [-pt] 变量名],加上参数- -p后面可以接提示信息,加- -t表示等待指定时间- 宣告变量类型declare- 一般变量不做处理都是字符串类型,使用declare后可以将变量转化为自己想要的类型 
 用法:- declare [-aixr] variable
- 参数 - [-a]表示将后面的变量定义成数组
- 参数[-i]表示将后面的变量定义成整型
- 参数[-x]将后面的variable转化为全局变量(环境变量)
- 参数[-r]将变量变为readonly(相当于Java的final
限制BASH资源
Linux主机可以由多个人使用,若人数过多,且每个人使用的资源也过多,则会影响每个人的使用,故要限制每个Bash的资源。
一般可以通过限制CPU资源使用率、内存使用率、最大程序数、最大文件容量来达到目的
变量内容的删除、替换
变量的删除
变量删除的用法:echo ${path#/*local/bin:},注意:
- 需要在${}中再删除
- 号作用表示从左到右扫描并删除,%表示从右到做进行扫描并删除
- /号表示起始的那个字符
- *号表示匹配任意字符0到n次
- :表示结束字符
- ${path#/*local/bin:}表示匹配最短的那个字符串,使用双## 表示匹配最长的那个字符串- 变量的替换- 变量的替换用法: - ${path/bin/BIN},表示将变量中第一个遇到的bin替换成BIN,使用双引号- //表示替换所有的字符串- 变量的测试并替换- 用法: - username=${username-root},先判断username是否为null,若为null则将root复制给username,不为空则username不变
 注意:若变量的内容为- "",其实它不为NULL,此时需要这样来判断- username=${username:-root},多一个冒号- 命令历史(history)- 命令: - history [n],- history [-c],- history [-raw]
 参数介绍:
- history [n],列出最近的n条历史
- history [-c],将目前Shell的所有history清除
- history [-raw],- [-r](read)将/.bash_history,- [-w]将目前history的命令写入~/.bash_history- Bash的环境配置文件- 初始的环境变量,以及用户自定义的变量有很多,他们都是在开启时有系统自动导入的。 
 login shell和non-login shell为两种方式取锝的shell(主要在于有没有登录),两种方法所加载的配置文件也是不同的:
- login shell需要两个: - /etc/profile:系统的整体设定,不建议修改,且设置文件是必须被读取的,在系统整体设置上读取这一个文件就够了,因为该文件往往会呼出其他设置文件
- ~/.bsah_profile 或 ~/.bash_login 或 ~/.profile属于用户个人设定,可以修改的是这里
 
- non-login shell: 
- *匹配0到任意个字符
- ?匹配一个任意字符
- []匹配括号内的一个字符,例如- [abcd]则匹配abcd内任意一个字符
- [-]和正则表达式一样了,例如- [a-z]匹配小写字母
- [^]反向选择
 
                         
                                

