硬件、核心和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_historyBash的环境配置文件
初始的环境变量,以及用户自定义的变量有很多,他们都是在开启时有系统自动导入的。
login shell和non-login shell为两种方式取锝的shell(主要在于有没有登录),两种方法所加载的配置文件也是不同的:login shell需要两个:
- /etc/profile:系统的整体设定,不建议修改,且设置文件是必须被读取的,在系统整体设置上读取这一个文件就够了,因为该文件往往会呼出其他设置文件
- ~/.bsah_profile 或 ~/.bash_login 或 ~/.profile属于用户个人设定,可以修改的是这里
non-login shell:
*
匹配0到任意个字符?
匹配一个任意字符[]
匹配括号内的一个字符,例如[abcd]
则匹配abcd内任意一个字符[-]
和正则表达式一样了,例如[a-z]
匹配小写字母[^]
反向选择