# linux - 常用命令

# 1.查看端口占用

  1. 使用 lsof
lsof -i:端口号

lsof -i:9229 # 查看9229端口占用
# COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
# node    21848 root   22u  IPv4 9910325      0t0  TCP localhost:9229 (LISTEN)

lsof foo.txt # 显示开启了foo.txt的进程
lsof -c abc # 显示abc进程现在打开的文件
lsof -c -p 1234 # 列出进程号为1234的进程所打开的文件
lsof -g gid # 显示归属gid的进程情况
lsof +d /usr/local/ # 显示目录下被进程开启的文件
lsof +D /usr/local/ # 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 # 显示使用fd为4的进程
lsof -i -U # 显示所有打开的端口和UNIX domain文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  1. 使用 netstat
netstat -anp|grep 80
# tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      1836/nginx: master
# tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      1836/nginx: master
# tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN      1836/nginx: master
# tcp        0      0 0.0.0.0:8003            0.0.0.0:*               LISTEN      1836/nginx: master
# tcp        0      0 0.0.0.0:8004            0.0.0.0:*               LISTEN      1836/nginx: master
# tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1836/nginx: master

# 或者
netstat -tunlp |grep 80
netstat -ntlp   # 查看当前所有tcp端口
1
2
3
4
5
6
7
8
9
10
11

参数介绍:

  • -t (tcp) 仅显示tcp相关选项
  • -u (udp)仅显示udp相关选项
  • -n 拒绝显示别名,能显示数字的全部转化为数字
  • -l 仅列出在Listen(监听)的服务状态
  • -p 显示建立相关链接的程序名

# 2.查看和终止进程

  1. ps 查看进程,找到进程 pid
ps -ef | grep node
# 查看所有进程里 CMD 是 node 的进程信息

ps -aux | grep node
# -aux 显示所有包含其他使用者的进程
# ps 命令用于查看当前正在运行的进程
# grep 搜索

1
2
3
4
5
6
7
8
  1. kill 终止进程,通过 pid
kill -9 [pid]
# -9 表示强制停止

1
2
3

# 3.查看日志

# 查询最后100行日志
tail -n 100 info.log

# 查询从100行之后的所有日志
tail -n +100 info.log

# 查询日志文件中的头10行日志;
head -n 10 info.log

# 查询日志文件除了最后10行的其他所有日志;
head -n -10 info.log

# 获取关键字的行号
# -n 显示行号
cat -n test.log |grep "关键字"

# 查询超多日志
# 1. 使用 more 和 less 命令,分页打印,然后空格翻页
cat -n info.log |grep "_id" |more
# 2. 使用 > xxx.txt 把输出的内容导入文件,然后拉下文件分析
cat -n info.log |grep "_id" >xxx.txt

# 查询日志并自动更新
tail -f info.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 4.查看内存占用

# 查看占用内存最大的10个进程
ps -aux | sort -k4nr | head -n 10

# 查看内存占用最大的进程
ps aux| grep -v "USER" |sort -n -r -k 4 |awk 'NR==1{ print $0}'

# 找到目标进程后,可以通过下面方式 kill
kill -9 $(ps aux | grep 进程名 |grep -v grep| awk '{print $2}')

1
2
3
4
5
6
7
8
9

# 5.查看文件大小

  1. ls 方案
# 列出当前目录下所有文件的大小,以及所有文件大小的统计总和。文件夹会显示 4k
ls  -lht
# total 64K
# drwxr-xr-x  3 root root 4.0K Jun 16 10:20 _back202006161020
# drwxr-xr-x 10 root root 4.0K Jun 16 09:07 task
# drwxr-xr-x  7 root root 4.0K Jun 15 22:58 blog
# drwxr-xr-x  5 root root 4.0K Jun  4 10:50 deploy
1
2
3
4
5
6
7
  1. du 方案
# 列出当前文件以及文件夹的大小
du -sh *
# 24M     blog
# 930M    back
# 1.7M    deploy
# 334M    task
1
2
3
4
5
6

列出某个目录下文件大小的总和: du -sh /data

  1. 查看单个文件/目录大小
  • du -sh foo.sh
  • ls -lh foo.sh

# 6.拆分 log 文件

  1. 指定拆分后文件行数
split -l 300 large_file.txt new_file_prefix
1
  1. 指定拆分后文件大小
 split -b 10m server.log new_file_prefix
1
  1. 合并文件
cat small_files* > large_file
1

# 7.查看 Linux 系统版本

  1. 列出所有版本信息
lsb_release -a
# LSB Version:    :core-4.1-amd64:core-4.1-noarch
# Distributor ID: CentOS
# Description:    CentOS Linux release 7.4.1708 (Core) 
# Release:        7.4.1708
# Codename:       Core
1
2
3
4
5
6
  1. cat /etc/redhat-release
cat /etc/redhat-release
# CentOS Linux release 7.4.1708 (Core) 
1
2
  1. 据说适用于所有的Linux发行版,但是上面那个版本的服务器输出空白
cat /etc/issue
# CentOS release 6.5 (Final)
# Kernel \r on an \m
1
2
3

# 8.查看 Linux 内核版本

  1. cat /proc/version
cat /proc/version
# Linux version 3.10.0-693.17.1.el7.x86_64 (xx) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Thu Jan 25 20:13:58 UTC 2018
1
2
  1. uname -a
uname -a
# Linux xx 3.10.0-693.17.1.el7.x86_64 #1 SMP Thu Jan 25 20:13:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
1
2
  1. cat /proc/version
cat /proc/version
# Linux version 3.10.0-693.17.1.el7.x86_64 (xxx) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Thu Jan 25 20:13:58 UTC 2018
1
2

/proc 文件系统。它不是普通的文件系统,而是系统内核的映像,也就是说,该目录中的文件是存放在系统内存之中的,它以文件系统的方式为访问系统内核数据的操作提供接口。而我们使用命令 uname -a 的信息就是从该文件获取的,当然用 cat /proc/version 方法直接查看它的内容也可以达到同等效果。另外,加上参数"-a"是获得详细信息,如果不加参数为查看系统名称。

# 9.查看指定用户的所有进程

# 查看 root 用户的所有进程
top -u root

# 或者
ps -ef | grep 'root'

# 查看所有用户进程
ps -aux | more
1
2
3
4
5
6
7
8

# 参考

上次更新: 9/29/2022, 11:39:50 AM