linux
目录
1 find命令和grep命令查找文件和文件内容
区别:
- 在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。
- find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
- grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。
一.find命令
基本格式:find path expression
1. 按照文件名查找
(1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2)find /etc -name httpd.conf #在/etc目录下文件httpd.conf
(3)find /etc -name 'srm' #使用通配符(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4)find . -name 'srm' #表示当前目录下查找文件名开头是字符串‘srm’的文件
2.按照文件特征查找
(1)find / -amin -10 # 查找在系统中最后10分钟访问的文件(access time)
(2)find / -atime -2 # 查找在系统中最后48小时访问的文件
(3)find / -empty # 查找在系统中为空的文件或者文件夹
(4)find / -group cat # 查找在系统中属于 group为cat的文件
(5)find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件(modify time)
(6)find / -mtime -1 #查找在系统中最后24小时里修改过的文件
(7)find / -user fred #查找在系统中属于fred这个用户的文件
(8)find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(9)find / -size -1000k #查找出小于1000KB的文件
3.使用混合查找方式查找文件
参数有: !,-and(-a),-or(-o)。
(1)find /tmp -size +10000c -and -mtime +2 #在/tmp目录下查找大于10000字节并在最后2分钟内修改的文件
(2)find / -user fred -or -user george #在/目录下查找用户是fred或者george的文件文件
(3)find /tmp ! -user panda #在/tmp目录中查找所有不属于panda用户的文件
二、grep命令
基本格式:grep expression
1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
2.格式
grep [options]
1.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-i:不区分大小写
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符。
* :有字符,长度可以为0。
2.实例
(1)grep 'test' d* #显示所有以d开头的文件中包含 test的行
(2)grep ‘test’ aa bb cc #显示在aa,bb,cc文件中包含test的行
(3)grep ‘[a-z]{5}’ aa #显示所有包含每行字符串至少有5个连续小写字符的字符串的行
(4)grep magic /usr/src #显示/usr/src目录下的文件(不含子目录)包含magic的行
(5)grep -r magic /usr/src #显示/usr/src目录下的文件(包含子目录)包含magic的行
(6)grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
详细使用参见:http://www.cnblogs.com/end/archive/2012/02/21/2360965.html
2 linux下查看进程并杀死进程的命令
查看进程的命令
以redis为例
ps -ef | grep redis
kill进程命令
kill -s 9 进程号(也就是上述命令的第二行数据)
3 linux常用命令和部署项目命令
1. 基本的命令
cd 切换命令
cp 拷贝
mv 移动
mkdir 创建文件夹
rm 删除
rm -rf 强制删除
touch 创建文件夹
ll 查看文件列表
cat 查看文件全部内容
kill -9 强制杀死一个进程
find 查找文件
ps -elf|grep tomcat 查看tomcat进程
rz 上传
sz filename 下载
yum 在线安装
2. 常用命令晋级
1. vim 编辑文件
vim filename //进入vi命令
:set nu 在vi命令下 显示所有行号
i 进入编辑模式
esc 退出编辑模式
:wq 保存退出vim
:q 不保存退出
:q! :不存盘退出
2. tar 解压缩
解压的文件
解压: tar zxvf FileName.tar.gz
压缩后的名字 要压缩的文件夹
压缩: tar zcvf FileName.tar.gz DirName
3 Nginx命令
1. /usr/local/nginx/sbin/nginx -s reload 重启
2. cd /usr/local/nginx/sbin ./nginx -t 测试配置Nginx文件是否正确
4 其他命令
1 service iptables restart 重启防火墙
2 linux maven jar包默认放在 /root/.m2/repository/ 目录下
3 free -h 查看内存占用情况
4 df -h 查看磁盘占用情况
5 lsb_release -a 查看系统版本号
6 vi /etc/sysconfig/iptables 修改防火墙端口号
7 systemctl restart iptables.service #重启防火墙使配置生效
8 systemctl enable iptables.service #设置防火墙开机启动
9 mysql 重启 service mysqld restart
10 /etc/my.cnf mysql linux的配置位置
11 df -h 查看内存占用多少
12 du -h --max-depth=1 查看当前文件夹下所有文件大小
4 linux中用top、ps命令查看进程中的线程
在Linux上显示某个进程的线程的几种方式。
方法一:PS
在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为<pid>的进程创建的所有线程。
1.$ ps -T -p <pid>
方法二: Top
top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。
1.$ top -H
要让top输出某个特定进程<pid>并检查该进程内运行的线程状况:
2.$ top -H -p <pid>
方法三: Htop
一个对用户更加友好的方式是,通过htop查看单个进程的线程,它是一个基于ncurses的交互进程查看器。该程序允许你在树状视图中监控单个独立线程。
要在htop中启用线程查看,请开启htop,然后按<F2>来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”和“显示自定义线程名”选项。按<F10>退出设置。
5 linux查看文件前几行和后几行的命令
可以使用head(查看前几行)、tail(查看末尾几行)两个命令。 例如: 查看/etc/profile的前10行内容,应该是: # head -n 10 /etc/profile 查看/etc/profile的最后5行内容,应该是: # tail -n 5 /etc/profile 如果想同时查看可以将前10行和后5行的显示信息通过输出重定向的方法保存到一个文档,这样查看文档即可一目了然。 例如: 将内容输出到/home/test文件中 # head -n 10 /etc/profile >>/home/test # tail -n 5 /etc/profile>>/home/test 查看的话只需要打开test文件即可。 cat /home/test
【一】从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000
【二】显示1000行到3000行
cat filename| head -n 3000 | tail -n +1000
*注意两种方法的顺序
分解:
tail -n 1000:显示最后1000行
tail -n +1000:从1000行开始显示,显示1000行以后的
head -n 1000:显示前面1000行
【三】用sed命令
sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。
6 查看日志
线上出现了问题,登上线上的机器查日志是非常常见的操作了。我第一次登上线上机器查日志的时候,我还只记得以下的几个命令(假设现在我们的日志文件叫做service.log
):
cat service.log
tail -f service.log
vim serivice.log
现在日志每天产出的大小大概1GB:
如果是小文件的话,单纯的cat
命令还是可以应付的,但如果你直接用cat
命令打开一个1GB的日志文件,保证卡死你(ctrl + c
退出cat
命令需要很久才能将cat
命令停下来)。
一般我只用cat
来查看这个小文件的文本内容是什么
同样地,如果是小文件,单纯的vim
命令去打开文件也是可以应付的,但如果你用vim
命令去打开一个1GB甚至更大的文件,也能明显感受到缓慢和卡顿。
平时我还是很喜欢用vim
去查找对应的记录的,我一般的操作:
vim service
按G跳转到文件的末尾
按? +关键字搜索对应的记录
按n往上查询,按N往下查询
tail -f service.log
这个命令我一般用于查看流量是否进来了(或者调试的时候可以直接看到日志,再迅速ctrl +c
关掉)
面对比较大的日志文件,这我们就得配合grep
来玩了,比如我们现在得知某个手机号收不到短信验证码,想要看一下这个手机号的日志是怎么样的。于是我们就可以这样搞:
cat service.log | grep 13888888888
这么一搞,就能将service.log
中所有含有13888888888
的记录给搜出来,搜索的速度还是贼快的。
现在我们已经能根据关键字搜到对应的记录了,接着我想看一下那条记录的日志上下文【这样就能知道这条数据大概的执行状态了】
查出对应记录的行号
首先,我们先要查出对应记录的行号,在cat
命令后面加上一个 -n
参数就好了。所以命令是:cat -n service.log | grep 13888888888
,如下图我们就可以查到对应的行号了
现在行数是29506,我们一般只要看一下29506的前10行和后10行就差不多知道问题出现在哪了,于是我们可以这样做:
sed -n "29496,29516p" service.log:从29496行开始检索,到29516行结束
cat -n service.log | tail -n +29496 | head -n 20:从29496行开始检索,往前推20条
如果关键字不太准确(日志输出的记录太多了),我们可以使用more
命令来浏览或者输出到文件上再分析:
cat service.log | grep 13 |more :将查询后的结果交由more输出
cat service.log | grep 13 > /home/sanwai/aa.txt 将查询后的结果写到/home/sanwai/aa.txt文件上
有的时候,我们想统计这个日志输出了多少行,我们可以使用这条命令:
cat service.log | wc -l
https://www.cnblogs.com/xiashan17/p/7059978.html
7 查进程和端口
查进程有两个命令:
ps -ef
ps aux
上面两个命令都是列出所有的进程,我们还是通过 |
管道和grep
来过滤掉想要查的进程,比如说:
ps -ef |grep java
“|”是管道命令操作符,简称管道符。利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推
把进程查出来干嘛?知道它的进程ID了,我们可以把他给杀掉。
kill -9 processId
:杀掉某个进程
查端口也是一个很常见的操作,常见命令:
netstat -lntup
:
l:listening n:num t:tcp u:udp p:display PID/Program name for sockets 查看当前所有tcp/udp端口的信息
查看某个端口详细的信息:lsof -i:4000
8 查看系统的状态
1 TOP实时查看进程的状态
TOP命令查看进程的状态,其中有个load average可能不是那么好理解,下面来解释一下:
load average:在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。
load average 有三个值,分别代表:1分钟、5分钟、15分钟内运行进程队列中的平均进程数量。
- 正在运行的进程 + 准备好等待运行的进程 在特定时间内(1分钟,5分钟,10分钟)的平均进程数
Linux进程可以分为三个状态:
- 阻塞进程
- 可运行的进程
- 正在运行的进程
比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5,load average就是一定时间内的load数量均值。
2free查看内存使用状况
linux的内存管理机制的思想包括(不敢说就是)内存利用率最大化,内核会把剩余的内存申请为cached,而cached不属于free范畴。
如果free的内存不够,内核会把部分cached的内存回收,回收的内存再分配给应用程序。所以对于linux系统,可用于分配的内存不只是free的内存,还包括cached的内存(其实还包括buffers)。
- 可用内存=free的内存+cached的内存+buffers
Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。磁盘的操作有逻辑级(文件系统)和物理级(磁盘块)
参考资料:
9 Linux下查看某一进程所占用内存的方法
Linux下查看某一个进程所占用的内存,首先可以通过ps命令找到进程id,比如 ps -ef | grep kafka 可以看到kafka这个程序的进程id
可以看到是2913,现在可以使用如下命令查看内存:
top -p 2913
这样可以动态实时的看到CPU和内存的占用率,然后按q键回到命令行
也可直接使用ps命令查看: ps -aux | grep kafka
第一个标注的地方是CPU和内存占用率,后面的943100是物理内存使用量,单位是k,此时kafka大约占用943M内存
还可以查看进程的status文件: cat /proc/2913/status
10 awk sed
https://www.cnblogs.com/isykw/p/6258781.html
https://www.zhihu.com/question/297858714/answer/572046422
文本和数据进行处理的编程语言
补充说明
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
awk命令格式和选项
语法形式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
常用命令选项
-F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scripfile 从脚本文件中读取awk命令
-m[fr] val 对val值设置内在限制,-mf选项限制分配给val的最大块数目;
-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
awk模式和操作
awk脚本是由模式和操作组成的。
模式
模式可以是以下任意一个:
- /正则表达式/:使用通配符的扩展集。
- 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
- 模式匹配表达式:用运算符
~
(匹配)和~!
(不匹配)。 - BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
操作
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
- 变量或数组赋值
- 输出命令
- 内置函数
- 控制流语句
其它
参考文献
### linux
#### linux查找命令
- https://blog.51cto.com/whylinux/2043871
#### 项目部署常见linux命令
- https://blog.csdn.net/u010938610/article/details/79625988
- 进程文件里有哪些信息
#### sed 和 awk 的区别
- awk用法:https://www.cnblogs.com/isykw/p/6258781.html
其实sed和awk都是每次读入一行来处理的,区别是:sed 适合简单的文本替换和搜索;而awk除了自动给你分列之外,里面丰富的函数大大增强了awk的功能。数据统计,正则表达式搜索,逻辑处理,前后置脚本等。因此基本上sed能做的,awk可以全部完成并且做的更好。
作者:哩掉掉
链接:https://www.zhihu.com/question/297858714/answer/572046422
#### linux查看进程并杀死的命令
https://blog.csdn.net/qingmu0803/article/details/38271077
#### 有一个文件被锁住,如何查看锁住它的线程?
#### 如何查看一个文件第100行到150行的内容
https://blog.csdn.net/zmx19951103/article/details/78575265
#### 如何查看进程消耗的资源
https://www.cnblogs.com/freeweb/p/5407105.html
#### 如何查看每个进程下的线程?
https://blog.csdn.net/inuyashaw/article/details/55095545
- linux 如何查找文件
linux命令:https://juejin.im/post/5d3857eaf265da1bd04f2437
#### select epoll等问题
https://juejin.im/post/5b624f4d518825068302aee9#heading-13