# linux - 常用命令
# 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
2
3
4
5
6
7
8
9
10
11
12
13
14
- 使用
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
2
3
4
5
6
7
8
9
10
11
参数介绍:
- -t (tcp) 仅显示tcp相关选项
- -u (udp)仅显示udp相关选项
- -n 拒绝显示别名,能显示数字的全部转化为数字
- -l 仅列出在Listen(监听)的服务状态
- -p 显示建立相关链接的程序名
# 2.查看和终止进程
ps
查看进程,找到进程 pid
ps -ef | grep node
# 查看所有进程里 CMD 是 node 的进程信息
ps -aux | grep node
# -aux 显示所有包含其他使用者的进程
# ps 命令用于查看当前正在运行的进程
# grep 搜索
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
kill
终止进程,通过 pid
kill -9 [pid]
# -9 表示强制停止
1
2
3
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
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
2
3
4
5
6
7
8
9
# 5.查看文件大小
- 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
2
3
4
5
6
7
- du 方案
# 列出当前文件以及文件夹的大小
du -sh *
# 24M blog
# 930M back
# 1.7M deploy
# 334M task
1
2
3
4
5
6
2
3
4
5
6
列出某个目录下文件大小的总和: du -sh /data
- 查看单个文件/目录大小
du -sh foo.sh
ls -lh foo.sh
# 6.拆分 log 文件
- 指定拆分后文件行数
split -l 300 large_file.txt new_file_prefix
1
- 指定拆分后文件大小
split -b 10m server.log new_file_prefix
1
- 合并文件
cat small_files* > large_file
1
# 7.查看 Linux 系统版本
- 列出所有版本信息
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
2
3
4
5
6
cat /etc/redhat-release
cat /etc/redhat-release
# CentOS Linux release 7.4.1708 (Core)
1
2
2
- 据说适用于所有的Linux发行版,但是上面那个版本的服务器输出空白
cat /etc/issue
# CentOS release 6.5 (Final)
# Kernel \r on an \m
1
2
3
2
3
# 8.查看 Linux 内核版本
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
2
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
2
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
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
2
3
4
5
6
7
8