7.Linux常用命令2

之前有一篇介绍最基本的linux系统日常使用命令,见《1.linux日常》

1. 重定向符号>, >> , >&, &>

COMMAND > file 命令的标准输出stdout的内容覆盖file中内容,若file不存在,则新建一个

COMMAND >> file 命令标准输出stdout的内容追加到file中,若file不存在,则新建一个

COMMAND >& file 或 COMMAND >& 1 cmd标准stdout/错误stderr输出一起追加到file或标准输出上,其中1代表标准输出描述符。注意,这里是标准输出和错误输出合并重定向

COMMAND &> file 和>&类似,但是后面只能跟文件名,不可跟描述符

2. env

        打印当前所有环境变量

3.sed 

        3.1 s替换功能,语法:sed "[address]s/pattern/replacement/flags" file

sed "s/abc/ABC/g" file.txt address address缺省时,sed作用于全体file内容

sed "2s/^$head/head:$head/" file 在第二行找以字符串变量head开头的字符串,并在它前加上head:

sed '3,$s/$var$/tail:$var/' file 从第3行到最后所有内容中,匹配以字符串变量var结尾的字符串,并在字符串前面加tail:

sed '/name/s/ABC/abc/' file 在含有name的行匹配将ABC替换成abc

cat my.sh

/what/{

s/name/NAME/

s/your/her

}

sed -f my.sh file 通过-f引入匹配脚本,my.sh表示匹配what所在行,替换name和your

        3.2 d删除功能,语法:sed '[address]d' file

sed '3d' file 删除第3行

sed '3,7d' file 删除第3到第7行

sed '3,$' file 从第3行到结尾全删除

sed '/name/d' 删除所有含name的行 

        3.3 a追加(在目标后一行)和i插入(在目标前一行)新内容,语法:sed '[address]i(或a) content' file

sed '3i hello' file 在第3行之前插入新的一行,内容是hello

sed '5a good' file 在第5行之后追加新的一行,内容是good 

        3.4 c替换整行,调法:sed '[address]c content' file

sed '5c Good morning' file 将第5行换成Good morning

         3.5 y映射替换,语法:sed '[address]y/inchars/outchars/' file

inchars和outchars必须字符数相等,否则报错

inchars和outchars一一映射,匹配到inchars中第几个字符,就会替换outchars中第几个字符

echo "hello world" | sed 'y/hwl/HWL/' 输出:HeLLo WorLd

        3.6 p显示匹配项,语法:sed '[address]/p' file

p大部分要和-n选项配合使用,没有-n会打印其它不匹配的内容

sed -n '/what/p' file 显示所有匹配what的行

        3.7 w写入,语法:sed '[address]w filename' file

将匹配的项写到另一个文件中

sed '1,7w other.txt' file 将file中1到7行写入other.txt文件中

        3.8 r读取,语法:sed '[address]r filename' file 

读取filename中的内容插到file的第adress行后面

sed '4r tar.txt' file

        3.9 选项

-e 将后跟的命令加到sed命令中

-f 将后面的文件脚本的命令加到sed命令中,例如3.1最后一个示例

-n 屏蔽默认输出,配合p只输出特定内容,如3.6

-i 默认是不修改原文件的,本选项直接修改原文件

4. find

        4.1 语法:find [范围] [类型] 查找的数据

        find /etc/ -name "pas*"

        4.2 -name 按文件的名称来查找,可使用通配符*或?

find /etc/ -name "[A-Z]+"  在/etc中找以大写字母开头的文件

-iname 表示不区分大小写

-inum 以inode号来查找

        4.3 -size 按文件大小来查找

find /etc/ -size +1G  在/etc下查找大于1G的文件

find /etc/ -size -1G 在/etc下查找小于1G的文件

find /etc/ -size 1G 在/etc下查找等于1G的文件

        4.4 -user 按用户名来查找 -group按组名来查找

find /etc/ -user ysz -group YSZ 在/etc下查找用户名为ysz同时组名为YSZ的文件

find /home -user ysz 在/home下找用户名为root的文件

        4.5 -type 按文件类型查找,f:普通文件;d:目录;b:块设备文件(硬盘,U盘等);c:字符设备文件(IO传输过程中以字符为单位传输的设备,如键盘,显示屏,鼠标等);l:链接文件

find /dev/ -type b 查找/dev下所有设备文件

find /etc -type l 查找/etc/下所有链接文件

        4.6 -perm 按权限查找 

find ./ -perm 755 查找本目录内所有权限是755的文件

find ./ -perm -644 查找本目录内文件权限至少是644的文件 

        4.7 -m[time,min] 按修改/创建时间查找

find ./ -mtime +5  -type f 查找修改(创建)时间超过5天的且文件类型是普通文件的文件

find ./ -mmin -10 查找十分钟内修改过的文件

        4.7 -maxdepth 指定深度

find /home -user ysz -maxdepth 2 在/home中查找用户是ysz的文件,最大查找深度为2

        4.8 多型 -a(并且),-o(或者),-!(取反)

find /home -user ysz -a -size +10M 在/home下找用户为ysz的大于10M的文件 

        4.10 处理动作

-print 默认动作,即查找到的文件显示到终端

-delete 找到了文件后,执行删除动作

find ./ -perm -644 -delete 对本目录至少有644权限的所有文件执行删除操作

-exec COMMAND {} \; 对查到的每个文件执行COMMAND操作,注意{}和\;之间有空格

find ./ -name "tar*" -exec sed 's/good/Bad/' {} \;  替换所有tar开头的文件中good为Bad

find /log/ -mtime +5 -type f -exec rm {} \; 删除创建超过5天的log日志

5.awk

        5.1 语法:awk [options] '[BEGIN]{COMMANDS} [pattern] {COMMANDS} [END]{COMMANDS}' file

        原理和作用:处理文件文本,sed和awk都是读取文件一行一行的处理,不同的是,sed以整行为处理单位,而awk是把一行分为很多字段(连续的无分隔符(可指定)的字符组成的字符串)处理。

awk执行过程:        

        若存在BEGIN,则先执行BEGIN后面的{}指令,然后继续下一步;

        从stdin或文件中读取一行文本,根据分隔符分隔成若干字段,将每个字段匹配pattern,若匹配得上pattern,则执行后面的{}指令,否则继续读下一行,直到读取完毕。

        若存在END,则最后执行一次END后面的{}指令。

        pattern后面的指令,只要有匹配都会被执行,而BEGIN和END后面的指令,最多只执行一次。

        5.2 -F选项指定分隔符,指令print执行打印

默认分隔符是空格,若存在-F,则以它后面指定的字符为分隔符

awk -F ':' '{print $1 $3}' /etc/passwd 指定分隔符为:号,打印/etc/passwd中第1和第3字段

awk -F ':' '/ysz/{print $1 $3}' /etc/passwd [pattern]是/ysz/,即匹配含有ysz的一行,再打印第1和第3字段。

        5.3 条件判断与项的算术运算综合

$1>$2 符合项1比项2大时,执行后面的命令

awk 'BEGIN{print "test score."} $2>$1{print $0} END{print "test over."}' tar.txt

'$1<=$2{print $0}' 打印项1小于或等于项2的行

'NR==5{print $0}' 打印第5行

'NR%2==0{print $0}' 打印偶数行

'{if($1>$2){print $0}else{print $3}}' 若项1大于项2打印整行,否则打印第3项

'{for(i=0;i<3;i++){print $0}}' 每一行重复打印3次

'{i=0;while(i<3){print $0;i++}}' 每一行重复打印3次

6. grep

这是一个使用正则表达式搜索文本的工具,语法:grep [options] "target" files

它也是一行一行的读,以行为单位进行匹配

        6.1  files可以是多个文件,也可以是通配符指示的多文件

grep "ysz" file1.txt file2.txt

grep "ysz" file*.txt

grep "ysz" ./*

         6.2 选项

grep -c "tar" myfile  只显示匹配项的行总数

grep -i "tar" myfile 不区分大小写搜索,默认情况下是区分大小写的

grep -n "tar" myfile 显示tar所在的行以及行号

grep -s "tar" myfile 不显示无匹配文本的错误信息

grep -E "^[a-z]+" myfile 以正则表达式搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值