首页 > 代码库 > Linux学习第三章

Linux学习第三章

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}‘ 将所以第三段加起来




Linux学习第三章