1 认识bash这个shell
用户通过shell与内核进行通信,而内核与硬件进行通信。
shell的功能只是提供用户操作系统的一个接口,因此它需要调用其他独立的软件(应用程序)。
1.1 环境变量的功能
- env命令:查看环境变量
- set命令:查看所有变量(含环境变量与自定义变量)
- export命令:自定义变量转成环境变量
- 登陆Linux并取得一个bash后,这个bash就是一个独立的进程。在bash下面执行的任何命令都是由这个bash衍生出来的,那些被执行的命令称为子进程。子进程会继承父进程的环境变量,但不会继承父进程的自定义变量。
- export 变量名称 将自定义变量转为环境变量
1.1 变量内容的删除、替代与替换
// 先让小写path与PATH内容相同
path=${PATH}
echo path
> /usr/kk/sbin:/usr/kk/bin:/usr/local/sbin
现在要删除kk
echo ${path#/*kk/bin:}
2 命令别名与历史命令:alias、unalias
- alias使用别名
alias lm='ls -l | more'
alias rm = 'rm -i'
- unalias取消别名
unalias lm='ls -l | more'
unalias rm = 'rm -i'
3 历史命令:history
history [n]
history [-c]
history [-raw] histfiles
n:数字,要列出最近的n条命令行
-c:clear目前shell中的所有history内容
-a:将目前新增的history命令新增如histfiles中,若没有加histfiles,则默认写入~/.bash_history
-r:读histfiles内容至shell的history
-w:将shell的history写入histfiles
4 数据流重定向
4.1 standard output 与 standard error output
标准输出——命令执行所回传的正确信息;
标准错误输出——命令执行失败后,所回传的错误信息;
数据流重定向可以将stdout于stderr分别传送到其他文件或设备,而分别传送所用的特殊字符则如下所示:
1 标准输入:代码为0,使用<或<<
2 标准输出:代码为1,使用> (覆盖已有数据) 或>>(append操作)
3 标准错误输出:代码为2,使用2> (覆盖已有数据) 或2>>(append操作)
4.2 命令执行的判断根据:;,&&,ll
几种一次性输入多条指令的方法
-
cmd; cmd【不考虑命令相关性的连续命令执行】
-
$?(命令回传码)与&&或|| 【后一个命令与前一个命令有关】
若前一个命令执行正确,Linux则会回传一个$?=0的值
通过回传码及 “&&” 与 “||” 来判断后续命令是否要执行.
5 管道命令(pipe)
bash命令执行的时候有输出的数据出现,若这群数据必须要经过几道手续后才能得到我们想要的格式,应该如何来设置?——使用管道命令。
举例:
- 对ls -al /etc的输出执行less操作
管道命令“ | ”仅能处理经由前面一个命令传来的正确信息(即stdout),而不支持stderr。ls -al /etc | less
6 选取命令:cut, grep
选取命令,即对一段数据进行分析取出我们所想要的信息。选取信息通常是针对“行”来分析的,而不是对整篇信息分析。
-
cut
cut -d '分割字符' -f fields <= 用于分隔字符 cut -c 字符范围 <= 用于排列整齐的信息
-d:后面接分隔字符,与-f一起使用;
-f:依据-d的分隔字符将一段信息分割成为数段,用-f取出第几段的意思
-c:以字符的单位取出固定字符区间
例子:
export
export | cut -c 12- //【将export的内容 按行取第12个字符之后的所有数据】
-
grep:分析一行信息,若含有我们所需信息则取出
grep [-acinv] [--color=auto] '查找字符串' filename
-a:将binary文件以text文件的方式查找数据;
-c:计算找到’查找字符串’的次数;
-i:忽略大小写差异
-n:顺便输出行号;
-v:反向选择,即显示出没有’查找字符串’内容的那一行
–color=auto:可以将找到的关键字部分加上颜色显示# ①将 last 当中有出现root的那一行取出来
last | grep ‘root’
# ②将 last 当中没有出现root的那一行取出来
last | grep -v ‘root’
# ③在 last 的输出信息中, 只要有root就取出来,且取第一列
last | grep ‘root’ | cut -d ’ ’ -f1
7 双向重定向:tee
tee会同时将数据流传到文件与屏幕screen(stdout);
tee [-a] file
参数:
-a:以append的方式将数据加入至file中
last | tee last.list | cut -d " " -f1
# 将 last 的输出存一份到last.list中
ls -l /home | tee [-a] ~/homefile | more
# 将 last 的输出存一份到last.list中,同时屏幕也有输出信息
8 切割命令:split
-
split 将一个大文件切割成若干个小文件
split [-bl] file PREFIX
-b:后街欲切割成的文件大小,可加单位,如b,k,m等;
-l:以行数来切割;
PREFIX:前导符,可作为切割文件的前导文字cd /tmp; split -b 300k /etc/termcap termcap #将/etc/termcap切割成300k大小的若干小文件,前导符为termcap # 结果会生成termcapaa, termcapab, termcapac等文件
-
如何将若干小文件合成一个大文件?
cat termcap* >> termcapback