Linux命令


10个重要的Linux ps命令实战
Linux查找并杀死僵尸进程
Linux lsof
在虚拟机目录 /home/yao/linux命令下有部分相关的文件

tar

参考:
打包提tgz:

# 将XXXX文件夹压缩成 --> XXXX.tgz
tar zcvf XXXX.tgz XXXX

解包tgz:

tar  zxvf XXX.tgz

grep

grep -r 'int' .
在当前文件夹下的所有文件中查找'int'

grep int main.c
显示main.c中i包含int的行

grep Int main.c -i
-i:忽略大小写

grep int main.c -c
-c:显示main.c中i包含int的行数

grep 'int' main.c -n
-n:显示行号

grep -d update /etc/acpi
-d 当指定要查找的是目录而非文件时,必须使用这项参数

grep '2020-05-18 12:34' *.log
用在查找日志

grep '12:34' *.log -n
-n:显示行号

grep '12:34' *.log -n -c
-c:显示行数

grep -v 'info' *.log
-v:反向查找,找不是info的行

grep –e "正则表达式" 文件名
^符号用于限定开始字符

awk

log.txt:
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

awk '{print $1,$4}'  log.txt
打印第1列、第4列的内容,打印结果如下:
2 a
3 like
This's 
10 orange,apple,mongo

awk '{printf "%-8s %10s\n" ,$1, $4}' log.txt
格式化打印第1/4列的内容:
2                 a
3              like
This's             
10       orange,apple,mongo

awk -F, '{print $1}' log.txt
-F:指定分隔符为",",打印第1列:
2 this is a test
3 Are you like awk
This's a test
10 There are orangeapple

awk -va=1 '{print $1,$2+a}' log.txt
设置变量a=1,打印第1列以及第1列+a的值:
2 3
3 4
This's 1
10 11

awk '$1>2' log.txt
打印满足条件'$1>2'的行:
3 Are you like awk
This's a test
10 There are orange,apple,mongo

awk '$1==2' log.txt
打印满足条件'$1==2'的行:
3 Are you like awk
This's a test
10 There are orange,apple,mongo

awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt
打印满足条件'$1>2 && $2==are'的行的第1/2/3列:
3 Are you


运行awk脚本
1)先准备好一个普通的文件score.txt
Marry   2143 78 84 77
Jack    2321 66 78 45
Tom     2122 48 77 71
Mike    2537 87 97 95
Bob     2415 40 57 62

2)cal.awk文件用于对score.txt进行操作

#运行前执行的语句,需要注意{和bEGIN必须在同一行
BEGIN{
	math = 0
	english = 0
	computer = 0

	printf "NAME	NO.	    MATH       COMPUTER     TOTAL\n"
	printf "---------------------------------------------\n"
}

#运行时执行的语句
{
	math += $3
	english += $4
	computer += $5
	printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}

#运行后执行的语句,NR表示已经读出的行数
END{
	printf "---------------------------------------------\n"
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}

3)执行awk命令,用-f参数指定awk文件
awk -f cal.awk score.txt
运行结果如下:
NAME	NO.	    MATH       COMPUTER     TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------
  TOTAL:       319      393      350 
AVERAGE:     63.80    78.60    70.00

locate

locate的左右类似于find,用于查找目录或文件,但是locate一般比find要快,因为它是在一个数据库里面去查;

  1. sudo updatedb : 由于是在数据库里面查,而不是在硬盘里面查,所以数据库可能会需要更新:
    在这里插入图片描述
  2. locate version4 : 在/目录下查找文件名或目录名中包含version4的目录或文件,注意只要绝对路径包含version4就会被找到
    在这里插入图片描述

ps

-a:all with tty,不会显示TTY为?的进程
-x:也会显示TTY项为?的进程
-e:显示所有进程(包括TTY为?的)
-A:与-e同义
-f:full-format,显示全部格式
--sort -pXXX:以XXX排序,例如以CPU利用率等
u:user-oriented format,面向用户的格式
-u XXX:显示用户XXX拥有的进程(包括TTY为?的)
-p XX:进程号为p的进程
-o 列1,列2:指定需要输出的列

输出格式:

UIDPIDPPIDSTATC/%CPU%MEMSTIMETTYTIMECMD
用户id进程号父进程号进程状态CPU利用率内存利用率创建时间终端执行时间启动命令

R:Runnable(运行):正在运行或在运行队列中等待
S:Sleeping(休眠):休眠中,受阻,等待某个条件的形成或接收信号
D:un interruptible sleep:不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
Z:zombie:僵死进程,进程已经终止但是尚未被其父进程获取信息
T:stopped:结束,
后缀:
<:优先级高的进程
N:优先级低的进程
L:有些页被锁进内存
s:进程的领导者(在它之下有子进程)
+:位于后台的进程组

  1. ps,显示进程信息
    在这里插入图片描述
  2. ps -ef | less,查看所有进程(-e),全部格式(-f)
    在这里插入图片描述
  3. ps -u yao | less,显示用户yao的进程:
    在这里插入图片描述
  4. ps -x | less:会输出当前用户yao的所有进程(包括那些没有tty的),因此它的结果与ps -u yao类似,但出的格式不同:
    在这里插入图片描述
  5. ps -ax | less,显示所有进程,包括那些没有tty的,因此输出的进程会跟ps -e类似,但是格式不同:
    在这里插入图片描述
  6. ps -aux | less,以面向用户的格式,输出所有进程:
    在这里插入图片描述
  7. ps -aux --sort -pcpu,输出以cpu利用率排序:
    在这里插入图片描述
  8. ps -aux --sort -pcpu,输出以内存占用率排序:
    在这里插入图片描述
  9. ps -p 1,查找进程号为1的进程:
    在这里插入图片描述
  10. 找到僵尸进程
    1)使用-o参数指定输出pid、ppid、stat:
    在这里插入图片描述
    2)ps -aux|awk '{print $8}|grep Z再使用grep进行查找,c此时系统中没有僵尸进程,所以没有结果:
    在这里插入图片描述
    3)可以用top看一下是不是真的没有僵尸进程,结果是没有:
    在这里插入图片描述
    4)假设存在僵尸进程,那么如果想清除僵尸进程,就必须杀死其父进程

kill

kill其实是向进程发送一个信号:

kill 12345		#杀死进程(默认发送信号是15)
kill -HUP 12345	#向进程发送SIGHUP信号
kill -9 12345	#彻底杀死进程(9是信号SIGKILL,不能被进程忽略或者捕获)
kill -l			#显示信号列表

信号含义的列表如下:


在这里插入图片描述

netstat

-n:--numeric,会显示IP和端口,一般都会带上
-p:显示对应的进程PID
-a:显示所有连线中的Socket。
-l:--listening,显示监听中的服务器的Socket
-t:显示tcp
-u:显示udp
  1. netstat -anp | less显示所有网络连接信息:
    在这里插入图片描述
  2. netstat -npl | grep 21查找正在监听21号端口的进程,注意-a与-l不能混用,否则会显示所有连接:
    在这里插入图片描述

lsof

是一个列出当前系统打开文件的工具,在Linux中任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。最好在root权限下执行,否则可能权限不够:

  1. lsof -u yao查看用户yao的进程所打开的文件
    在这里插入图片描述
  2. lsof -p 1| less,查看进程号PID为1的进程打开的文件:
    在这里插入图片描述
  3. lsof -c systemd-c表示可执行文件名称(COMMAND列):
    在这里插入图片描述
  4. lsof -i:21,查看占用21端口的进程状态:
    在这里插入图片描述
  5. lsof -i:1-1024,查看占用端口1-1024的进程状态:
    在这里插入图片描述
  6. lsof -t -i:21-t只输出PID,在杀死进程时十分有用
    在这里插入图片描述

find

man find查看帮助,或者参考:菜鸟教程

# 命令的格式为:
find [path...] [expression]
# 常用格式如下:
find [目录路径,默认为.] [-maxdepth n] [-size [+-]XXb] [-user XXX] [-type X] [-name XXXX]
# expression说明
-maxdepth n:搜索的最深层次为n,n = 0 时表示只在指定路径查找;
-size [+-]XXb:目标文件文件的大小,b代表512位元组的区块,k表示kilo bytes,M表示MB
-user XXX:查找所有者为XXX的文件;
-type X:目标类型为X,X的取值:d代表目录,f代表普通文件;
-name XXX:目标文件或目录名为XXX;

用法举例:

  1. 查找最大深度为2,所有者为root:
    在这里插入图片描述

  2. 查找最大深度为5,名称为lock的文件或目录:
    在这里插入图片描述

  3. 查找./network文件夹下,最大深度为5,大小大于20000 KB(kilo bytes)/ 大于10MB 的文件;
    在这里插入图片描述
    在这里插入图片描述

  4. 查找在目录./network/myhttp/version4下,最大目录深度为1,类型为目录:
    在这里插入图片描述

du

主要用于显示目录/文件的大小。

-a:既显示目录又显示文件(默认条件下du只会显示目录,不显示文件)
--max-depth=XX:规定最大目录深度为XX,这可以避免递归层数太深
-h:用人性化方式显示,但需要注意,用-h之后再用sort就不能完成正确的排序了
-s:只显示统计大小,也就是只显示`.`这一项;

  1. du :递归显示当前目录下的目录大小:
    在这里插入图片描述
  2. du -a既显示目录又显示文件
    在这里插入图片描述
  3. du -s -h:人性化方式显示统计数据(只显示当前目录大小):
    在这里插入图片描述
  4. du --max-dept=2 | sort -nr找出/home/yao目录下的大目录,并用sort进行排序(对于sort -n表示按数值排序,-r表示倒序)
    在这里插入图片描述
  5. 与上面的类似,-m表示以MB为单位:
    在这里插入图片描述
  6. 不能使用-h进行排序,原因是单位不同(有的是KB,有的是MB…):
    在这里插入图片描述

df

用于显示文件系统的磁盘使用情况统计,常用参数:


在这里插入图片描述

  1. df显示文件系统的磁盘使用情况统计:
    在这里插入图片描述
  2. df -h
    在这里插入图片描述

打开超大文件

博客园 : Linux下打开超大文件的方法

  1. head -1000 '2020-07-01(1).log' > tmp.log,将日志文件最后的1000行写入到tmp.log中;
  2. tail - 1000 '2020-07-01(1).log' > tmp.log,将日志文件最前面的1000行写入到tmp.log中;
  3. sed -n '10,1000p' '2020-07-01(1).log' > tmp.log ,将日志文件的10到1000行写入到tmp.log中(共991行);

tail
4. tail -n 100 '1.log' 或 tail -n -100 '1.log':显示最后100行数据
5. tail -n +100 '':显示第100行(包括第100行)到最后1行

head
6. head -n 100 1.log 或 head- n +100 1.log:显示前100行数据
7. head -n -100 1.log:显示第1行到倒数第100行的数据(不包括第100行)

more/less

  • more:按照页来显示文本,"空格"键向下翻页,"b"键往上翻页,还支持vi的查找之类的;
  • less:不是一次性显示文本的,"向上"键往上看,"向下"键往下看,"空格"键向下翻页,"b"键往上翻页,还支持vi的查找之类的。

链接

掘金“软链接” 和“硬链接”的区别
知乎:linux为什么不能硬链接目录

  • 硬链接是:将硬链接的名称与对应文件的inode号链接,会使该inode的引用计数加1,。只有当inode的引用计数为0 时才会被删除。
  • 软链接是:相当于windows下的快捷方式,它实际上是一个特殊的文件,有自己的inode和自己的内容,而它的内容就是对应文件(或目录)的绝对路径;
  • 硬链接只能作用在文件上,不能作用在目录上;
  • 软链接既可以作用在文件上,又可以作用在目录上;
    在这里插入图片描述

例子
1)首先创建一个文件,并写入一行内容:
在这里插入图片描述
2)对它创建一个硬链接,可以看到它们的inode号都是524942:
在这里插入图片描述
通过硬链接修改文件,可以看到,可以通过硬链接修改文件的内容(软链接也可以)。
在这里插入图片描述
3)创建一个软链接,可以看到软链接拥有自己的inode号524947,并且它的类型是"l":
在这里插入图片描述
4)如果把myfile删掉,那么对应的inode引用计数减一,硬链接hard依然能访问;而绝对路径(…/…/…/myfile)失效,导致软链接失效(失效不代表被删除):
在这里插入图片描述
画个图来看就是:
在这里插入图片描述
为什么硬链接不能作用在目录上面
在这里插入图片描述
假设上述行为被允许。ln1是目录dir2的链接,dir2下面有ln2,于是ln1下面也会有ln2,也就是/dir1/ln1/ln2;而ln2是dir1的链接,dir1目录下有ln1,于是/dir1/ln1/ln2下也有ln1,也就是/dir1/ln1/ln2/ln1;以此类推,将会是无限的循环,因此不允许硬链接作用在目录上。

top

在这里插入图片描述

常见问题

杀死指定端口下的进程
# 一条命令
kill -9 'lsof -t -i:8080' # lsof -t -i:8080 只输出进程号PID
# 两条命令
# 先找到pid
lsof -i:8080 或者 netstat -anp|grep 8080
# 再用kill
kill -9 pid
找到大于XXMB的文件并删除

在这里插入图片描述
再用rm即可

which

查看二进制文件安装的位置:

which cd
which ls
which mysql

其他

在vim中执行外部命令::! ls

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值