4-1-1 shell特性
指令history 查看历史指令
root的历史指令存放在 /.bash_history上,默认保存1000条
指令!!查看上一条历史指令和结果
指令!$ 上一条指令的最后一个变量
指令!100 执行历史第100条指令
指令!c
TAB键能自动补充指令
指令alias 查看命令别名
指令alias aa bbb 设置指令bbb的别名aa,输入指令aa就能等于输入指令bbb
指令unalias aa 解除别名aa
ls *.txt 把txt结尾的列出
ls 1* 把1为首的列出
ls ?.txt 只匹配一个字符以txt结尾的 例如1.txt
| 把前一个指令的结果丢给后一个指令 例 cat /etc/passwd|wc -1
> 覆盖写入
>>不覆盖写入
< 把文件内容丢给指令 例如 wc -1<1.txt
指令jibs 查看已停的指令
指令fg 调回前台执行
指令bg 调回后台执行
4-1-2 shell变量
指令env 查看系统变量
指令 echo $变量名 显示变量值
指令set 显示系统环境变量
指令a=1;b=2 设置变量a=1 b=2
echo $a $b 结果 1 2 查看a b的值
变量名首位不能是数字
b=‘ls /tmp /‘ 用单引号把特殊符号引起来
(电脑补一条反引号,引用命令结果)
d=“a”“b”3
echo $d 结果 123 必须用双引号
指令bash 进入全新环境,之前定义的变量无效
指令export a=1 把a=1设置为全局变量 创建新的shell,a也存在
unset d 取消变量d的值
4-1-3系统和用户的环境变量配置文件
vim /etc/profile(配置文件)
PASH 、HOME、SHELL
想改变变量时在 /etc/profile.d去定义 文件名需要加.sh
修改path
vim /etc/profile.d/path.sh
#!/bin/bash (#!可写可不写)
export PATH=$PATH:/tmp/:/data/bin/
:wq
source /etc/profile(重置一下更改)
echo $PATH
vim /etc/bashrc(配置文件)
修改PS1(指令最前的用户名)
cd /etc/init.d/
PS1=‘‘
大致同上
修改umask
vim /etc/profile.d/umask.sh
umask 0000
:wq
source /etc/profile
umask
4-1-4 shell中特殊符号
* 通配符 可以多位 例如 指令ls *.txt 结果 1.txt 22.txt 333.txt
?通配符 一位 例如 ls ?.txt 1.txt 2.txt
# 不生效 指令前,行首加#,该行指令不生效,没意义 例如 #ls 1.txt 不运行不生效 例如 ls #1.txt=ls ,#1.txt没意义
\脱意符合 例如 \# 让#号失去功能 例如ls \#1.txt=ls #1.txt 这里#1.txt是一个文件名
| 管道符 将前一个命令的结果丢给后面的命令
例如 cat 1.txt | wc -1
$ 变量前置 调用变量时加在变量名前 例如 echo $PATH
!$表示调用最后一次的$变量
; 夹在两条命令中间 两条同时运行
~ 用户家目录 ls ~=ls root
& 后台运行 加在命令后面
2> 2>>
[] 一位 例如 ls [12].txt=ls 1.txt 2.txt ls [1-3].txt=ls 1.txt 2.txt 3.txt ls [1-9a-z]=1.txt a
.txt b.txt
4-1-5 cut命令
cut -d:-f 1,2,3 /etc/passwd 把文件中1,2,3段截取出来
cut -c 2 etc/passwd 截取第二个字符
4-1-6 sort命令
sort /etc/passwd 开头以a-z排序
sort -t:-k3 以第三段排序
sort -t:-k3 -n 第三段以小到大排序 (字母比数字小)
-k3,5 第3,4,5段排序
-nr 从大到小排序
sort -u 减去重复项目排序
4-1-7 wc命令
wc -l 1.txt 查看行数
wc -w 1.txt 查看word数
wc -m 1.txt 查看字符数
4-1-8 uniq和tee命令
uniq 2.txt 去掉连着的重复项
uniq -c 2.txt 计算连着的每项数目
tee 重令项+双重输出
echo “111”>1.txt=echo"111" |tee 1.txt 将111写入1.txt 并显示1.txt的内容
4-1-9 tr和split命令
tr 替换
ls 1.txt |tr ‘a-z‘ ‘A-Z‘ 把1.txt中小写字母都改为大写字母
tr ‘a‘ ‘b‘ 把a改为b
split 文件分割
split -b 50m 1.txt 把1.txt分为每个大小50m的文件
split -l 100 1.txt 把1.txt分为几个文件 每个100行
分割后原文件不变 多了几个以x开头的小文件
在1.txt 后加aaa 分割的文件就以aaa开头
4-2-0 shell中连接符
&& 并且
ls 1.txt && ls2.txt 如果前面的命令执行成功就继续执行后面的命令,如果前面的命令执行失败则后面的命令不执行
|| 或
ls 1.txt || ls 2.txt 左边的命令不成功才执行右边的命令
;和
ls 1.txt ;ls 2.txt 左边命令成不成功,右边的命令都执行
4-2-1 grep过滤-1
grep egrep sed awk 正则表达式
grep ‘root‘ /etc/passwd 把含有root的行过滤出来
‘root‘ 前加--color 会有特殊颜色标记
root前加-n 显示行数 第几行
加-c 出现的行数 -v 不出现的行和内容
- A 2 显示有root的行再显示后两行
- B 2 再显示前两行
-C 2再显示前两行后两行
-r 或-rh显示关键词所在的目录
4-2-2grep过滤-2
[a-zA-Z]表示a-z所有大小写字母
grep --color -n ‘[0-9]‘ 1.txt 过滤出含有数字的行
[aN] 包含a或N的行 [3g]包含3或g的行
grep ‘^[1-9]‘ 2.txt 以数字开头的行
grep ‘[^1-9]‘ 2.txt 含有不是数字的字符的行
‘^[1-9]‘ 不以数字开头的行 不包括空行
‘[^$]‘ 表示空行
-v 取反
‘r.o‘ .表示任意字符 即r1o、ruo、r-o等等
‘r*o‘ 任意个r 即ro、rrrro、o
‘r.*o‘ 以r开头o结尾
‘r\?o‘ = -E ‘r?o‘ 含有 ro、o
grep -E==egrep
4-2-3grep过滤-3
grep -E==egrep
‘r+o‘ 1个或多个r 例ro、rrrro 、rrrrrrro
?+ | (){}要加/ 或者egrep、grep -E
‘r|o‘ 含有r或者o
‘(rr)‘含rr
4-2-4 sed命令-1
sed 不能染色显示
sed -n ‘10‘p 1.txt 打开第10行
‘1,10‘p 第一至第十行
‘20,$‘p 20到最后一行
‘/root/‘p 包含root的行
/r.o/、/r*o/ 与grep使用功能一样
+ 、|、()、? 需要加\脱意符号
sed -r -n 后面特殊符号不需要加\
一般用法与grep相似
sed ‘1,19‘d 1.txt 显示1-19以外的行
sed -i ‘1,19‘d 1.txt 原文件删去1-19行
4-2-5sed 命令-2
替换功能
sed ‘1,10s/nologin/login/g‘ 1.txt 第1-10行的nologin换为login ,g是全局的并显示 原文件不变
修改内容存在路径或/符号时,要加\脱意符号或者改用#
1,10改为s 即所有行
替换为空格就删除显示 /nologin//g 原文件不变的
sed -n ‘/user/p;/root/p‘ 1.txt 先搜索一次含有user的行再搜索一次含有root的行
sed -n -r ‘/user|root/p‘ 1.txt 把包含user或root的行显示出来
sed -n -e 1 -e 2 和使用;一样
4-2-6 awk命令-1
awk -F ‘:‘ ‘{print $3,$4}‘ 1.txt 将第三,第四段列出
在{前加OFS=“:” 显示的第三段和第四段以:分割开
awk ‘/user|root/‘ 1.txt 列出包含user或root的行。awk中使用|、?等特殊符号不用加\脱意符号
awk -F‘:‘ ‘$1~/ro/‘ 1.txt 匹配第一段中含有ro的
4-2-7awk 命令-2
awk -F ‘:‘‘$1==“root” ‘ 1.txt 匹配第一段为root的行
‘$1==“root” || $7==“nolog”‘ 匹配出第一段为root或者第七段为nolog的行
‘$3>=500‘ 第三段大于500的行
‘$3>=“500”‘ 第三段大于500(ASCII码排序)的行
!= 不等于
!~不匹配
= 赋值
== 等于
4-2-8awk 命令-3
NR行 NF段
awk -F ‘:‘ ‘NR<10{print $1,$5}‘ 1.txt
显示前9行的第一和第五段
NR==10 第10行
awk -F ‘:‘ ‘ {if(NF==7{print $1,$5}‘ 1.txt 匹配有七段的行 讲第一和第五段显示出来
‘{(sum=sum+$3)};END{print sum}‘ 将所以第三段加起来