资源分析
查看系统版本
查看 Linux 发行版
打开终端,输入以下命令:
cat /etc/os-release
cat
是 concatenate
的缩写,我们这里用它来读取 /etc/os-release
这个文件。这个文件中包含了你系统的名字和版本号等信息。
❯ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
查看 Linux 内核版本
如果想知道Linux 内核是什么版本,那么你可以尝试输入以下命令:
uname -r
这里的 uname
命令是 unix name
的缩写,-r
参数的意思是 release
。
❯ uname -r
5.15.153.1-microsoft-standard-WSL2
查看系统架构
如果想知道机器是什么架构,那么你可以尝试输入以下命令:
uname -m
这里的 uname
命令是 unix name
的缩写,-m
参数的意思是 machine
。
❯ uname -m
x86_64
查看本机 IP
在 Linux 中,存在多个命令用以查看系统的 IP 地址和网络配置信息。以下是几个常用的命令:
ifconfig
ifconfig
命令可以显示网络接口的配置信息,包括 IP 地址、子网掩码、广播地址等。在终端中输入以下命令:
ifconfig
ifconfig
命令将显示系统中所有网络接口的配置信息,包括以太网接口(如 eth0
)、无线接口(如 wlan0
)等。
ip addr
ip addr
命令是一个更现代化的工具,用于显示网络接口和 IP 地址信息。在终端中输入以下命令:
ip addr
ip addr
命令将显示所有网络接口的详细信息,包括 IP 地址、子网掩码、广播地址等。
hostname -I
hostname
命令用于查看或设置系统的主机名。通过添加 -I
参数,可以只显示 IP 地址信息。在终端中输入以下命令:
hostname -I
hostname -I
命令将显示系统当前的 IP 地址,多个 IP 地址之间用空格分隔。
curl
或 wget
你还可以使用 curl
或 wget
命令向外部服务器请求获取你的公共 IP 地址。使用 curl
命令:
curl ifconfig.me
或者使用 wget
命令:
wget -qO- ifconfig.me
这将从一个外部服务器获取你的公共 IP 地址并显示出来。
查看 CPU 信息
在 Linux 中,你可以使用多个命令来查看 CPU(中央处理器)的信息。以下是几个常用的命令:
lscpu
lscpu
命令用于显示 CPU 的详细信息,包括 CPU 型号、核心数、线程数等。在终端中输入以下命令:
lscpu
lscpu
命令将显示 CPU 的详细信息,包括 CPU 型号、架构、核心数、线程数、CPU 频率等。
/proc/cpuinfo
Linux 系统将 CPU 信息存储在 /proc/cpuinfo
文件中。你可以使用 cat
命令或 grep
命令来查看该文件的内容。
cat /proc/cpuinfo
或者只查看特定信息,比如 CPU 型号:
grep "model name" /proc/cpuinfo
以上命令将显示 CPU 的型号信息。
top
top
命令可以实时显示系统的性能统计信息,包括内存使用情况。
top
是一个命令行实用程序,用于实时监视系统的运行状态和进程活动。它可以显示各种系统性能指标,如CPU使用率、内存使用、进程列表等,并且会持续刷新显示,以便实时了解系统的性能情况。
在终端中输入以下命令:
top
常见的交互式操作:
- 使用键盘上的箭头键上下浏览进程列表。
- 按下
f
键进入交互界面,使用d
或space
选择是否显示某些字段,使用s
指定字段排序 - 按下
Shift+M
按内存使用排序进程列表。 - 按下
Shift+P
按CPU使用排序进程列表。 - 按下
k
键输入进程PID来终止一个进程。 - 按下
q
键退出top
。
top - 16:50:49 up 11:26, 1 user, load average: 0.08, 0.19, 0.38
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.1 sy, 0.0 ni, 98.8 id, 0.5 wa, 0.0 hi, 0.1 si, 0.0 st
MiB Mem : 7802.3 total, 3004.8 free, 3929.1 used, 868.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 3575.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
267260 root 20 0 2001004 529096 25948 S 4.3 6.6 7:24.02 gunicorn
2998 liusf 20 0 11.4g 230080 53504 S 1.3 2.9 14:52.79 node
5037 999 20 0 5046196 587948 39612 S 0.7 7.4 6:58.62 mysqld
5399 root 20 0 1384596 151788 49056 S 0.7 1.9 8:51.05 prometheus
5416 root 20 0 3039744 92648 16916 S 0.7 1.2 2:57.12 python
1 root 20 0 167220 12472 7960 S 0.3 0.2 4:54.22 systemd
3018 root 20 0 43404 37164 10180 S 0.3 0.5 1:56.00 python3
4907 root 20 0 1229500 14104 1704 S 0.3 0.2 2:48.42 docker-proxy
5398 root 20 0 1364948 137060 51152 S 0.3 1.7 3:51.78 loki
5561 root 20 0 198540 10344 3772 S 0.3 0.1 0:21.41 nginx
2 root 20 0 2476 1500 1384 S 0.0 0.0 0:05.01 init-systemd(Ub
7 root 20 0 2476 4 0 S 0.0 0.0 0:00.00 init
48 root 19 -1 47824 15468 14324 S 0.0 0.2 0:00.94 systemd-journal
71 root 20 0 22224 6144 4556 S 0.0 0.1 0:00.74 systemd-udevd
每一列字段说明:
-
PID
:进程ID,唯一标识一个进程。 -
USER
:进程的所有者用户名。 -
PR
:进程的优先级。 -
NI
:NICE值,影响进程的调度优先级。 -
VIRT
:进程使用的虚拟内存量。 -
RES
:进程使用的实际物理内存量(Resident Set Size)。 -
SHR
:进程使用的共享内存量。 -
S
:进程状态,如运行(R)、等待(S)、停止(T)、僵尸(Z)等。 -
%CPU
:进程使用的CPU资源百分比。 -
%MEM
:进程使用的内存资源百分比。 -
TIME+
:进程在CPU上的累计运行时间。 -
COMMAND
:进程的命令行。
htop
htop
是 top
命令的一个增强版本,它提供了更直观的用户界面和更多的功能。如果系统上没有安装 htop
,你可以先使用包管理器安装它。在终端中输入以下命令安装 htop
:
sudo apt install htop # Debian/Ubuntu 系统
sudo yum install htop # CentOS/RHEL 系统
安装完成后,可以输入以下命令启动 htop
:
htop
htop
将显示类似于 top
命令的实时性能统计信息,但界面更加友好。
查看内存使用情况
在 Linux 中,有多种命令可以查看系统的内存使用情况。这些命令可以帮助你了解系统的内存占用情况和性能表现。以下是几个常用的命令:
free
free
命令可以显示系统的内存和交换空间使用情况。打开终端并输入以下命令:
free -h
这个命令会显示系统的总内存、已用内存、空闲内存以及 swap(交换空间)的信息。而 -h
选项则是让这些信息以人类可读的方式(如 K,M,G)显示出来。
❯ free -h
total used free shared buff/cache available
Mem: 7.6Gi 3.8Gi 2.9Gi 4.0Mi 867Mi 3.5Gi
Swap: 2.0Gi 0B 2.0Gi
vmstat
vmstat
命令能提供关于系统内存,进程,中断,页面等信息。你可以使用下面的命令来查看内存的信息:
vmstat -s
输出中,你会看到关于内存使用的详细数据,包括总内存、可用内存、已用内存、缓冲区和缓存的内存等。
/proc/meminfo
Linux 系统将内存信息存储在 /proc/meminfo
文件中。你可以使用 cat
命令或 grep
命令来查看该文件的内容。
cat /proc/meminfo
或者只查看特定信息,比如可用内存:
grep MemAvailable /proc/meminfo
以上命令将显示系统可用内存的信息。
查看磁盘使用情况
在 Linux 中,你可以使用多个命令来查看磁盘使用情况,包括磁盘空间总量、已用空间、可用空间以及文件系统的挂载情况。以下是几种常用的方法:
df
df
命令用于显示磁盘空间使用情况。
df -h
在命令中的 "-h" 参数将以易读的方式显示磁盘空间大小,以人类可读的单位(如 GB、MB)来表示。
du
du
命令用于计算目录或文件的磁盘使用情况。
du -h 文件或目录路径
在命令中的 "-h" 参数同样以易读的方式显示磁盘空间大小。
lsblk
lsblk
命令用于列出块设备(如硬盘、分区等)的信息。
lsblk
该命令将列出所有块设备的信息,包括设备名称、挂载点、大小等。
fdisk
fdisk
命令用于显示磁盘分区表信息。
sudo fdisk -l
在命令中加上 "sudo" 权限以显示完整信息。
注意事项
- 查看磁盘使用情况可能需要管理员权限(可以使用
sudo
)。 - 在使用
du
命令查看目录大小时,可能需要一些时间,特别是对于大型目录。 - 硬盘分区信息的查看需要管理员权限,谨慎操作。
以上是在 Linux 中查看磁盘使用情况的几种方法。请根据实际需求选择合适的方法,并确保你有足够的权限来查看磁盘使用情况。
查看文件大小
在 Linux 中,你可以使用多个命令来查看文件的大小。以下是几个常用的命令:
ls
ls
命令用于列出文件和目录。要查看文件大小,可以使用 -l
参数来显示详细信息,包括文件大小。在终端中输入以下命令:
ls -l 文件名
将 "文件名" 替换为你要查看大小的文件名。
例如,要查看名为 "example.txt" 的文件大小,执行以下命令:
ls -l example.txt
ls
命令将显示文件的详细信息,包括文件大小(以字节为单位)。
du
du
命令用于估算文件夹的大小。如果你想查看单个文件的大小,可以使用 -h
参数来以人类可读的格式显示文件大小(例如 KB、MB、GB)。
在终端中输入以下命令:
du -h 文件名
将 "文件名" 替换为你要查看大小的文件名。
例如,要以人类可读的格式查看 "example.txt" 文件的大小,执行以下命令:
du -h example.txt
du
命令将以 KB、MB、GB 等格式显示文件的大小。
stat
stat
命令用于显示文件或文件系统的详细状态信息,包括文件大小。在终端中输入以下命令:
stat 文件名
将 "文件名" 替换为你要查看大小的文件名。
例如,要查看 "example.txt" 文件的大小,执行以下命令:
stat example.txt
stat
命令将显示文件的详细状态信息,包括文件大小(以字节为单位)。
ls 和 du 区别
ll -h
即为 ls -lh
是文件的实际大小; du -sh
显示文件所占用的 block 大小;
注:用du命令查看文件大小的时候,当文件只有1个字节,也会占用 4KB (inux默认是4k)。
du == disk usage (磁盘使用量,占用的磁盘空间)
一个文件占用的磁盘空间和一个文件的大小是两码事情。占用空间取决于文件系统的块(block)的大小,linux 一般默认是 4k(4096) , 因此,一个大小为 1 个字节的文件,最小也要占用 4k, 如果你创建文件系统的时候制定块大小是 16K,那么即便一个文件只有 1 个字节,占用空间也是 16K。
如果一个分区上主要放大文件,那么 block 可以大一些,有利于减少磁盘碎片,如果主要放小文件,那么 block 设置小一下,否则太浪费磁盘空间。
通常情况下,ls 显示的文件大小比 du 显示的磁盘占用空间小,比如文件系统的 block 是 4K,一个 13K 的文件占用的空间是 13k/4k = 3.25 个 block,一个 block 只能被一个文件占用,因此实际占用空间就是 4 个 block,就是 16K。
查看文件夹大小
在 Linux 中,有多个命令可以用来查看文件夹的大小。以下是几个常用的命令:
du
du
命令用于估算文件夹的大小。默认情况下,du
命令会递归地计算文件夹及其所有子文件夹的大小,并以字节为单位显示。在终端中输入以下命令:
du 文件夹名
例如,要查看名为 "my_folder" 的文件夹的大小,执行以下命令:
du my_folder
du
命令将显示文件夹的大小,以字节为单位。
如果你想以友好可读的格式(例如 KB、MB、GB)显示文件夹的大小,可以使用 -h
参数。在终端中输入以下命令:
du -h 文件夹名
例如,要以可读性好的格式查看 "my_folder" 文件夹的大小,执行以下命令:
du -h my_folder
du
命令将以 KB、MB、GB 等格式显示文件夹的大小。
ncdu
ncdu
命令是 du
命令的一个增强版本,它提供了更直观和交互式的方式来查看文件夹大小,并且可以在终端中浏览文件夹的大小信息。
如果系统上没有安装 ncdu
,你可以先使用包管理器安装它。在终端中输入以下命令安装 ncdu
:
sudo apt install ncdu # Debian/Ubuntu 系统
sudo yum install ncdu # CentOS/RHEL 系统
安装完成后,可以输入以下命令启动 ncdu
:
ncdu 文件夹名
ncdu
命令将递归地计算文件夹及其子文件夹的大小,并以交互式界面显示大小信息。按下方向键可以浏览文件夹和子文件夹。
查看文件内容命令
在 Linux 中,你可以使用多个命令来查看文件的内容。以下是几种常用的方法:
cat
cat
命令是最简单和常用的查看文件内容的方法,它将整个文件的内容输出到终端。
cat 文件名
例如,要查看文件 "example.txt" 的内容,可以使用以下命令:
cat example.txt
less
less
命令可以分页显示文件内容,方便查看大型文件。
less 文件名
在 less
查看模式下,你可以使用上下箭头来滚动文件内容,按下 "q" 键来退出查看模式。
例如,要查看文件 "example.txt" 的内容,可以使用以下命令:
less example.txt
more
more
命令也是分页显示文件内容的方法,与 less
类似。
more 文件名
在 more
查看模式下,你可以使用空格键来滚动文件内容,按下 "q" 键来退出查看模式。
例如,要查看文件 "example.txt" 的内容,可以使用以下命令:
more example.txt
head
和 tail
head
命令用于显示文件的开头几行,而 tail
命令用于显示文件的末尾几行。
head 文件名
tail 文件名
例如,要查看文件 "example.txt" 的前 10 行,可以使用以下命令:
head -n 10 example.txt
要查看文件 "example.txt" 的最后 10 行,可以使用以下命令:
tail -n 10 example.txt
注意事项
- 查看文件内容的命令不需要管理员权限。
- 如果文件过大,使用
cat
命令可能导致内容无法完全显示,可以使用less
、more
、head
或tail
命令来逐页查看。
查看端口占用
netstat
netstat
是一个用于显示网络状态信息的命令。要查看特定端口是否被占用,可以使用以下命令:
netstat -tuln | grep 端口号
-
-t
: 显示 TCP 连接信息 -
-u
: 显示 UDP 连接信息 -
-l
: 仅显示监听状态的端口 -
-n
: 使用数字格式显示端口号,而不是服务名 -
-p
:显示建立相关链接的程序名 -
grep 端口号
: 使用grep
命令过滤出指定的端口号信息
例如,要查看端口号 80 是否被占用,可以执行:
netstat -tuln | grep 80
ss
ss
是一个更现代化的工具,用于显示套接字统计信息。它比 netstat
更快速和高效。要查看端口占用情况,可以使用以下命令:
ss -tuln | grep 端口号
-
-t
: 显示 TCP 连接信息 -
-u
: 显示 UDP 连接信息 -
-l
: 仅显示监听状态的端口 -
-n
: 使用数字格式显示端口号,而不是服务名 -
-p
:显示建立相关链接的程序名 -
grep 端口号
: 使用grep
命令过滤出指定的端口号信息
例如,要查看端口号 80 是否被占用,可以执行:
ss -tuln | grep 80
lsof
lsof(list open files) 是一个列出当前系统打开文件的工具。
lsof 查看端口占用语法格式:
lsof -i:端口号
查看服务器 8000 端口的占用情况:
# lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nodejs 26993 root 10u IPv4 37999514 0t0 TCP *:8000 (LISTEN)
可以看到 8000 端口已经被轻 nodejs 服务占用。
lsof -i 需要 root 用户的权限来执行,否则只能显示当前用户的进程占用:
Admin-pc# lsof -i | grep 14444
docker-pr 4932 root 3u IPv4 5650272 0t0 TCP docker.v3.cn:14444->172.19.0.3:57430 (ESTABLISHED)
docker-pr 4932 root 4u IPv4 39177 0t0 TCP *:14444 (LISTEN)
docker-pr 4938 root 4u IPv6 38241 0t0 TCP *:14444 (LISTEN)
更多 lsof 的命令如下:
lsof -i:8080:查看8080端口占用
lsof abc.txt:显示开启文件abc.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文件
nc
nc
命令(也称为 netcat)是一个网络工具,它可以用来在终端上进行网络通信。
如果系统上没有安装 nc
,你可以先使用包管理器安装它。
sudo apt install nc # Debian/Ubuntu 系统
sudo yum install nc # CentOS/RHEL 系统
要检查特定端口是否开放,可以使用 nc
命令尝试连接到该端口:
nc -zv IP地址 端口号
将 "IP 地址" 替换为要检查的目标 IP 地址,将 "端口号" 替换为要检查的目标端口号。
如果端口开放,你将看到类似以下的输出:
Connection to IP地址 端口号 port [tcp/*] succeeded!
如果端口未开放,你将看到类似以下的输出:
nc: connect to IP地址 端口号 (tcp) failed: Connection refused
请注意,nc
命令可能需要先安装,你可以使用包管理器来安装它。在 Debian/Ubuntu 系统中,输入以下命令安装 nc
:
sudo apt install netcat
在 CentOS/RHEL 系统中,输入以下命令安装 nc
:
sudo yum install nc
以上这些方法可以帮助你在 Linux 系统中检查端口是否开放。
查看进程
ps
ps
命令用于显示当前正在运行的进程(进程状态)信息。它是一个常用的 Linux 命令,可以监视系统上正在运行的进程,查找特定进程,以及获取关于进程资源使用情况的信息。
基本语法格式如下:
ps [options]
其中,options
是一系列用于指定 ps
命令行为的选项。下面是一些常用的 ps
命令选项及其说明:
-
-e
: 显示所有所有进程,包括正在运行的和已经终止的,无论它们是否在当前终端会话中。 -
-a
:显示当前终端会话中的所有用户进程,包括其他用户的进程,但默认情况下不包括停止的进程。 -
-x
参数用于显示所有与当前用户相关的进程,包括没有终端控制的进程。它会列出不与任何终端相关联的进程,例如守护进程(daemon processes)等。 -
-f
: 显示详细的进程信息,包括用户、PID、PPID、CPU 使用率、内存使用等。 -
-H
: 显示进程树,以缩进方式显示进程之间的层次关系。可以更清晰地展示父进程和子进程的关系。 -
-L
:显示进程的线程信息,如果一个进程有多个线程,这将显示每个线程的信息。 -
-u <user>
: 显示指定用户的进程,可以同时指定多个用户,用逗号分隔 -
-p <PID>
:显示指定进程ID的详细信息,可以添加多个进程ID,用空格分隔 -
--sort
: 按指定的字段排序显示进程列表,例如--sort=-%cpu
按 CPU 使用率降序排序。
以下是一些常用的 ps
命令选项以及案例说明:
# 显示当前终端窗口中的进程列表
ps
# 显示所有进程,包括正在运行的和已经终止的
ps -e
# 显示所有进程的详细信息,包括用户、PID(进程标识符)、CPU 使用率、内存使用等。
ps -ef
ps -aux
# 显示特定用户运行的进程列表
ps -u <用户名>
# 显示特定进程ID的详细信息
ps -p <进程ID>
# 按照 CPU 使用率从高到低的顺序显示进程列表
ps -ef --sort=-%cpu
# 按照内存使用率从高到低的顺序显示进程列表
ps -ef --sort=-%mem
# 显示进程树,包括父进程和子进程的关系
ps -efH
# 显示进程和线程,包括每个线程的详细信息
ps -efL
kill
kill
命令用于向进程发送信号,从而影响进程的行为。信号是一种通知机制,可以用来控制进程的运行状态、执行特定操作或请求进程终止。通过 kill
命令,您可以与正在运行的进程进行交互,例如终止、重新加载配置或重新启动等操作。
基本语法格式如下:
kill [options] <PID>
其中,<PID>
是要操作的进程的进程ID。可以添加多个进程ID,用空格分隔
列出所有可用信号及其编号:
kill -l
kill -9
:- 发送
SIGKILL
信号给目标进程,该信号是终止(kill)信号。 - 使用
-9
选项会强制终止目标进程,进程将立即被终止,不会有清理操作或终止信号处理。 - 这种方式可能会导致进程在终止时无法进行资源释放或状态保存,可能会留下未处理的数据或文件。
- 发送
kill -15
:- 发送
SIGTERM
信号给目标进程,该信号是终止(terminate)信号。 - 使用
-15
选项会优雅地请求目标进程终止,允许进程执行清理操作和终止信号处理。 - 这是一种通常建议的终止方法,因为它允许进程在退出前完成必要的操作。
- 发送
kill -20
:- 发送
SIGTSTP
信号给目标进程,该信号是挂起(suspend)信号。 - 使用
-20
选项会暂停(挂起)目标进程,类似于按下Ctrl+Z
键。进程会停止执行,但可以在后台继续运行。 - 适用于暂停正在运行的进程,然后将其放到后台以便执行其他操作,在后续需要时重新启动它。
- 发送
nohup
nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
基本语法格式如下:
nohup Command [ Arg … ] [ & ]
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
& :让命令在后台执行,终端退出后命令仍旧执行。
以下是一些常用的 nohup
命令选项以及案例说明:
nohup sh -c 'while true; do date; sleep 2; done' > log.txt 2>&1 &
2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 log.txt
文件中。
- 0 – stdin (standard input,标准输入)
- 1 – stdout (standard output,标准输出)
- 2 – stderr (standard error,标准错误输出)