linux分享


grep命令:

对数据进行过滤查找关键字,可以找出文件内的的指定内容在哪一行,

Linux是区分大小写的,-n 参数,显示存在该关键字的行号

比如,搜索系统的一些日志文件,找出关于root相关的信息
[root@localhost opt]# grep -n 'root' /var/log/messages

grep不仅能从文件里搜索关键字,只要是文本数据,就可以进行搜索过滤

grep作用是,从文件中(而非文件夹)匹配出存在该关键字的那一行信息。

-i忽略大小写

greo的忽略大小写参数 -i 结合-n显示行号

[root@localhost opt]# grep -n -i 

利用grep找出nginx软件,配置文件中,定义的网站监听端口号

[root@localhost opt]# grep -n -i 'listen'  /etc/nginx/nginx.conf
39:       listen       80;
40:       listen       [::]:80;
59:#       listen       443 ssl http2;
60:#       listen       [::]:443 ssl http2;
?

 

管道符

管道符,和grep结合的是最多的 管道符,在linux中的表达符号是

| (快捷键shift + )

管道符得标准定义

管道是一种通信机制,通常用于进程间的通信。
?
它表现出来的形式将==前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)==。

 

利用grep和管道符,来查看系统用户信息

1.找出chaoge用户的信息
/etc/passwd 是系统的用户信息存放文件
在这个文件中,是用户通过命令创建的用户,id号是从1000开始的,比如
useradd yejinyang01
添加完之后,就会在这个文件中生成一行信息
?
?
关于查找用户是否存在的命令
# grep 'yejingyang' /etc/passwd
[root@localhost opt]#
[root@localhost opt]#
[root@localhost opt]# # 如何查看linux是否存在某用户,如yejingyang
[root@localhost opt]#
[root@localhost opt]#
[root@localhost opt]# id yejingyang
id: yejingyang: no such user
?
通过grep找到用户,表示该用户存在
[root@localhost opt]# id yejinyang
uid=1001(yejinyang) gid=1001(yejinyang) groups=1001(yejinyang)
[root@localhost opt]#
[root@localhost opt]#
[root@localhost opt]#
[root@localhost opt]# grep 'yejinyang' /etc/passwd
yejinyang:x:1001:1001::/home/yejinyang:/bin/bash

管道符

命令1  | 命令2 
?
命令1,拿到用户文件信息   | 交给grep再去过滤

管道符常见用法

1.查看系统进程信息的命令
?
ps -ef # -e 显示所有的进程信息 -f 格式化显示出进程的id号,等其他信息
?
2.上述命令,找到了一堆进程,如何过滤出我们要的信息呢?
?
学习如何,正确使用 grep 和管道符,去过滤机器上某个进程,判断某个进程是否存在
?
1.找出vim的进程
?
2.找出nginx的进程

检查端口

1.需要学习,检查系统端口的命令,这个命令,和ps -ef  一样,是查看系统某资源信息
netstat -tunlp   # 这个组合参数,是查看系统上,所有的端口信息
?
2. 过滤出,机器上,和ssh远程连接的端口信息,提示程序名叫ssdh,或者端口号是22
?
结合查看端口的命令+ 管道符+ grep,实现,高效的过滤
?
netstat -tunlp   | grep 'nginx'

统计文件数量

1.统计系统中/var/log目录下有多少个log文件
1.先找出/var/log下所有的log文件,find是递归搜索,找出所有的log后缀文件,不放过一个
find /var/log -name '*.log' | wc -l

统计系统用户数量

/etc/passwd 
?
cat /etc/passwd | wc -l

管道符,结合find命令搜索信息

找出系统中所有的txt文件,然后再过滤出,其中包含了apple信息的txt是哪些
?
?
?
find / -name '*.txt' # 这个命令找出的,每一个txt文件的名字吧,并且是,一堆,一行一行的文本
?
判断出,这些文件,哪一个是包含了apple字符串内容的
一个个的去grep这些文件才行!!!
 
# find / -name '*,txt' | grep 'apple'

 

xargs

作用是,简单的说 就是把其他命令的给它的数据,传递给它后面的命令作为参数
命令1 | xargs 选项
?
选项
?
-i 用 {} 代替传递的数据

xargs实现批量备份

 

xargs实现批量重命名

全系统中搜索,包含某数据的文件名

[root@localhost tmp]# find /  -type f  -name '*.txt' | xargs  -i grep -l '666' {}

find

普通查找 -type f    -type d
文件 文件名 查找 -name

通配符查找

*
find / -name "*.log" 找出系统上所有的.log文件
找出机器上的网卡配置文件
[root@yuanlai-0224 ~]# find /etc -name 'ifcfg-*' /etc/sysconfig/network-scripts/ifcfg-lo/etc/sysconfig/network-scripts/ifcfg-ens33

文件时间

创建时间
首次touch   创建的文件,系统默认给他的时间
首次mkdir   创建的文件夹,系统默认给他的时间
?
访问时间
这个文件,文件夹,什么时候被人读取过 关乎于不同的linux命令
只是被别人看过了,没发生实质性的变化
?
修改时间
文件内容,文件属性,发生了实质性的变化

stat文件时间属性

access time
cat
more
less
grep
change time
chmod
chown
mv
当文件名字发生变化,文件属性即发生了变化,导致change时间更改
modify time
文件内容变化     echo "我是文杰" > wenjie.txt
?
mtime变化会同时修改ctime

对应了find命令的三个参数

-atime根据文件的access time查找
-ctimechange time
-mtimemodify time

touch 作用有俩

1.当文件不存在,则创建该文件,以系统当前时间,定义该文件的时间属性
2.如果该文件存在,则是修改它的时间戳
-d 修改日期
-m 修改mtime
由于修改的是modify time,会连带着ctime一起变化
-a 修改atime

exec 和-ok

-exec和上午xargs是一个意思,找到资料后的动作处理
-ok也是一样,只不过多了一个确认的过程

根据文件大小查

-size
find / -name '*.log' -size +10M     #为查找10M的文件
10M正好10M
+10M超过10M
-10M小于10M
?