不想当一个好运维的安全狗不是好的研究员
ps
用来看进程信息
首先看一下文档
好像没什么东西, 实际上他需要这样
ps --help all |
就会看到很多参数了(上面只是一部分)
先简单的了解一下
ps |
ps支持-x
的参数形式, 也可以x
直接调用
ps -x |
其中-x
是SYSV
风格, 而x
是BSD
风格
那么我们看一下常用的使用场景
如果我们想看到当前的所有进程, 可以用
ps ax |
a
: 表示所有控制tty的进程x
: 表示未控制tty的进程
如果想看cpu占用的相关信息, 加上一个u
ps aux |
可以看到输出的内容变得更加详细, 这也是最常用的一个命令
有个类似的命令是
ps -ef |
这个命令和ps aux
大致相同, 输出的信息会有些不同, 可以参考 https://hao5743.github.io/2018/08/30/2018-08-30/ 查看一下各列的不同
网上主要推荐的是
ps -ef
, 另外虽然-aux
等效于aux
, 但是不太建议使用
如果想看某个用户的, 例如root, 可以使用
ps -u root |
查看当前占用cou最高的命令可以使用
ps aux --sort -pcpu |
降序输出的话是
ps aux --sort +pcpu |
ps auxf |
可以用来看进程的关系
更简洁的是
pstree |
如果有些命令太长了, 我们可以用ww
修饰
其他的功能我们基本上可以通过结合grep
, awk
之类的命令去处理, 就不展示了
netstat
主要用来看网络相关的信息
在查资料的时候看到了有趣的说明
在Linux上,推荐使用
ss
替代netstat
,使用ip route
替代netstat -r
,使用ip -s link
替代netstat -i
,使用ip maddr
替代netstat -g
维基百科
但是在默认的发行版上, 不一定会集成ss
命令, 但是一般都会有netstat
想看所有的连接信息的话, 可以用
netstat -a |
不想打码, 所以图片一般只截取部分, 请谅解
在测试这条命令的时候, 我已经感受到了ss
的优越性
ss -a |
相比之下要快很多很多
继续看-a
的命令, 这条命令会列出tcp, udp, unix协议下的套接字的连接
如果想看tcp的话, 可以用
netstat -at |
udp则是-u
如果不需要看主机名, 可以使用-n
直接显示ip地址来提升速度
看具体的进程信息的话, 加上-p
netstat -anpt |
由于有些进程只能通过root查看, 所以我们要加上sudo
如果要看进程的用户, 加上-e
netstat -anpte |
这里会发现用户的地方是uid
, 我们可以去掉-n
使得用户名解析
如何看正在监听的端口呢, 使用-l
netstat -nltp |
注意不要混合-a
, 不然会输出全部信息
如果想看网络接口的信息, 可以使用
netstat -ie |
其中-i
是输出网络接口信息, -e
是使得信息更可读
实际上这也是我们熟知的
ifconfig |
ss
既然提到了ss的优越性, 我们就来看看怎么用
查看所有监听端口
ss -l |
加上p显示进程
ss -lp |
如果想查某个端口的应用情况
ss -lp|grep port |
从图中我们可以看到, 如果不加-n
的话, 常用端口会被解析成程序名, grep的结果就会发生变化, 加上-n
会更直观
查看tcp连接的话使用-t
同理udp就是-u
ss还有一套类似于wireshark的过滤语法, 比如列出所有http连接
ss -o state established '( dport = :http or sport = :http )' |
过滤来源的话可以用
ss src ip[:port] |
这里不太明白的是为什么会有端口号超过
65537
, 是因为不是tcp这类的端口号吗
查看统计信息的话, 使用
ss -s |
lsof
这个命令用于查看进程相关的一些系统信息, 例如文件操作, 网络连接等等
如果想查询某个端口的相关信息, 可以使用
lsof -i :port |
其他的类型还有
# ipv4 |
查看某个用户打开的文件信息
查看某个进程号
lsof -p 6644 |
查看某个进程名的信息, 例如查看mysql开头的进程的信息
lsof -c mysql |
根据文件描述符查找, 我们知道0,1,2分别对应标准输入, 输出和错误流, 程序打开的文件一般会从3开始
lsof -d 3 |
可以说lsof是把linux一切皆文件的思想表现的最具体的一个命令了
kill
这个命令实际上我们一般用到的是
kill pid |
也就是不带参数, 我们先启动一个进程
python3 -m http.server 8000 |
然后查一下对应的pid
ps -ef|grep python3 |
kill 16256 |
直接杀死即可, 效果如下
一般加上-9
强制杀死僵尸进程, 因为默认发送的是15
, 含义可以看下图
在awd中, 如果要批量杀死某个进程, 我们可以用
ps -ef|grep python|awk '{print $2}'|xargs kill -9 |
效果如下
如果有相关命令不太理解的话, 可以看一下我前面的文章
https://cjm00n.top/Linux/linux-command-learning.html
我们也可以通过
killall python3 |
来杀死匹配到的进程, 例如awd中我们常用
killall -9 apache2 |
来杀死所有Apache2的进程, 可以加上-I
忽略大小写, 加上-v
打印日志信息
还有一个相关命令是pkill
, 这个用于比较骚的情况, 例如我们拿到了某个服务器的ssh, 用来把别人踢下线, 可以用pkill
, 先用
w |
看一下登录信息
然后通过
pkill -u username |
踢掉即可, 当然还是不太建议这样断人后路, 我们要做个善良的人
tcpdump
tcpdump的话也是常用的命令, 可以用来捕获数据包
需要root权限
常用的话一般是
tcpdump -i eth0 -w flow.pcap |
-i
过滤网卡, -w
表示将流量写到文件中, 或者使用-vv
来打印详细的流量信息, 但是一起用的话不会打印
我们可以加上一些过滤
tcpdump host 0.0.0.0 |
来过滤主机地址, 或者用
tcpdump net 192.168.1.0/24 |
来过滤一个网段
也可以加上协议进行过滤, 例如过滤http协议
tcpdump http |
我们可以捕获包后用wireshark之类的软件进行流量分析, 当然在ctf中, 如果有流量包, 一般都是主办方给的2333
这里顺带提一下, 如果我们是https的通信方式, tcpdump捕获的包是tls加密的, 这和我们用wireshark抓包是一致的
参考链接
- https://linux.cn/article-4743-1.html
- https://juejin.im/post/5d75b6d5e51d453b5c121938#heading-0
- https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/lsof.html
作者: cjm00n
地址: https://cjm00n.top/Linux/system-command-learning.html
版权声明: 除特别说明外,所有文章均采用 CC BY 4.0 许可协议,转载请先取得同意。
评论