1) bash简介
a) bashshell的内建指令:type name
b) 反斜杠(\)跳脱紧接着的字符:指令太长时可以使用[\Enter]来换行继续在>之后输入
2) 变量
a) 读取:echo $变量名/echo ${变量名}
b) 变量设定规则
c) 变量与变量内容用【=】等号连接,但是两边不能接空格字符。
d) 变量内容若有空格符,可以用双引号【“】或者单引号【‘】将变量内容结合起来。但双引号的特殊字符,如$,可以保有原有特性,而单引号只表示一般纯文本。
e) 可用跳脱字符[\],将特殊符号变成一般字符。
f) 在一串指令中,还需要借由其它的指令提供的信息,可以使用反单引号[`指令`]或[$(指令)]。
g) 若该变量为扩增变量内容时,可以使用$变量或者${变量}来累加。如:PATH=”$PATH”:/home/bin
h) 若该变量需要在其他子程序(再开启一个bash)中执行,需要用export来使变量变成环境变量。如:export PATH
i) 取消变量:unset 变量名称
j) 简化工作目录:#work="/usr/local/hadoop2.5";#cd$work
k) 观察环境变量:#env environment的简称
l) 观察所有变量:#set
m) 键盘输入变量内容:#read [-pt] 变量名
n) 变量声明:#declare/typeset [-aixr] 变量名
o) 数组变量:#var[index]=content
p) 文件限制:ulimit
3) 变量删除、取代、替换
a) 总体说明
b) 变量删除
c) 变量取代
d) 变量测试
#new_var=${old_var-content}
若old_var为空,则new_var为content
4) 命令别名
#alias 查看系统所有指令的别名
#alias alias_name=’指令’ 设置指令别名
#unalias alias_name 取消指令别名
#history 查询曾经执行过得命令
路径与指令搜寻顺序:先alias再builtin再由$PATH来搜寻,可以使用【type –a –指令名】来查看具体路径。
5) bash配置文件设定
a) 注销bash,前期设定的变量都会失效,除非写入bash配置文件。
b) loginshell与 non-loginshell环境,进入bash需要输入账号密码时为loginshell,否则为non-login shell。
c) loginshell只会读取以下两个配置文件 :
d) /etc/profile:系统整体设定
e) ~/.bash_profile或~/.bash_login或~/.profile:个人设定。其实 bash 的 login shell 设定只会读取上面三个档案的其中一个, 而读取的顺序则是依照上面的顺序。
f) source:读入环境配置文件的指令,无需注销即可生效
#source 变量文件
g) ~/.bashrc(non-login shell 会读)
h) ~/.bash_history:登陆bash之后,首先读取该档案,历史命令
i) ~/.bash_logout:注销 bash 后,系统再帮我做完什么后才离开
6) 终端机的环境设定,stty,set
a) #stty–a 列出所有stty参数,setting tty的简写
b) [#stty按键内容 按键组合] 设定按键功能
#stty erase ^h #删除功能按键组合变为ctrl + h
c) bash中通配符
d) bash中特殊符号
7) 数据流重导向(redirect)
a) standardoutput 与 standarderror output
stdout:指令执行所回传的正确的讯息
stderr:指令执行失败后,所回传的错误讯息
数据流重导向可以将stdout和stderr分别传送到其他的档案或者装置中去。所使用的特殊字符为:
b) 重导向之[>]与[>>]
该档案若不存在,则系统自动建立;若案存在,系统会将之清空,然后再写入;及若以[>]输出到一个已经存在的档案中,该档案会被覆盖掉。
如果需要累加而不覆盖的话,只需要把[>]替换成[>>]即可
c) /dev/null垃圾桶黑洞装置
d) 正确与错误的数据都写到同一档案
e) 重导向之[<]与[<<]
[<]:将原本需要键盘输入的数据,改由档案内容来取代
[<<]:结束的输入字符,相当于ctrl+d
f) 命令执行的判断依据:
g) [;]分号,不考虑指令相关性的连续指令下达
h) 若前一个指令的结果正确,Linux底下会回传一个$?=0的值
记忆的时候,可以记为与、或的关系,认为最终的结果为TRUE
i) 顺序:command1 && command2 || command3
j) 一般情况下,command2和command3放置可以成功执行的指令。
8) 管线命令(pipe)
a) 在每个管线后面接的数据必定是『指令』,而且这个指令必须要能够接受 standard input 的数据才行,这样的指令才可以称为【管线命令】
b) 管线命令仅会处理stdout,对于stderr会忽略。
c) 管线命令必须要能够接受前一个指令的数据成为stdin继续处理才行
d) 撷取命令:cut,grep
#echo $PATH | cut –d ‘:’ –f3,5
# export | cut -c 12-
cut的主要用途在于将同一行里面的数据进行分解,取出想要的。
e) grep:分析行信息
f) 排序命令sort,wc,uniq
# cat /etc/passwd | wc –l 查看系统有多少账户
g) 双向重导向tee
tee 会同时将数据流分送到档案与屏幕(screen),而输出到屏幕的,其实就是stdout,可以让下个指令继续处理。
9) 字符转换命令: tr, col, join, paste, expand
a) tr:删除或者替换讯息
b) col:将【Tab】按键取代成空格键
c) join:两个档案中有相同数据的那一行,才将他加在一起
d) paste:将两行贴在一起,且中间以tab键隔开
e) expand:将tab按键转成空格键、
f) split:档案命令
g) xargs:参数代换
xargs 可以读入 stdin 的数据,并以空格符或断行字符作为分辨,将 stdin 的资料分割成为 arguments。
使用xargs的原因,很多指令其实并不支持管线命令,因此我们可以透过 xargs 来提供该指令引用standard input之用。
10) 总结
a) 由于核心在内存中是受保护的区块,因此我们必须要透过『 Shell 』将我们输入的指令与Kernel 沟通,好让Kernel 可以控制硬件来正确无误的工作。
b) 系统合法的shell均写在/etc/shells档案中
c) 用户默认登陆的 shell 记录于 /etc/passwd 的最后一个字段;
d) locale:用于查看语言资料。
e) bash的配置文件主要分为login shell 与 non-login shell。loginshell 主要读取 /etc/profile 与~/.bash_profile, non-login shell 则仅读取 ~/.bashrc
f) 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。
------以上整理自鸟哥的Linux私房菜