linux

目录

                                             linux

1  find命令和grep命令查找文件和文件内容

  区别:

一.find命令

 基本格式:find path expression

二、grep命令

基本格式:grep expression

1.主要参数

2.实例 

2 linux下查看进程并杀死进程的命令

3 linux常用命令和部署项目命令

1. 基本的命令

2. 常用命令晋级

3 Nginx命令

4 其他命令

4 linux中用top、ps命令查看进程中的线程

方法一:PS

方法二: Top

方法三: Htop

5 linux查看文件前几行和后几行的命令

6 查看日志

7 查进程和端口

8 查看系统的状态

1 TOP实时查看进程的状态

2free查看内存使用状况

9  Linux下查看某一进程所占用内存的方法

10 awk  sed

补充说明

awk命令格式和选项

awk模式和操作

其它

参考文献


1  find命令和grep命令查找文件和文件内容

  区别:

  1. 在使用linux时,经常需要进行文件查找。其中查找的命令主要有find和grep。两个命令是有区的。
  2. find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
  3. 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

 

https://blog.csdn.net/ShiXueTanLang/article/details/80781089?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

上面两个命令都是列出所有的进程,我们还是通过 |管道和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