一、Linux 目录结构
根目录结构说明:
- /bin:存放着最常使用的命令.
- /boot:存放的时 Linux 启动时的核心文件,包括链接文件和镜像文件.
- /dev:dev 是 device(设备)的缩写,存放的是 Linux 外部设备. 在 Linux 中访问设备的方式和访问文件的方式是相同的.
- /etc:存放着重要的系统配置文件,类似于 Windows 中控制面板的数据.
- /home:普通用户的家目录. 每个用户都有一个自己的目录,一般目录名是以用户的账号命名.
- /lib:库文件,包含系统和用户所需要的各种程序.
- /lost+found:故障期间保存的文件都在这里.
- /media:linux 会自动识别一些设备,例如 U盘,光驱... 识别后,会挂载到这个目录下.
- /mnt:外部设备的挂载点,例如 CD-ROM(光驱)或者 数码相机.
- /opt:存放第三方软件,主要是给主机额外安装大型一个用程序的目录.
- /proc:这是一个虚拟目录,他是系统内存的映射,通过访问这个目录来获取系统信息. 这个目录的内容不再硬盘上而是在内存中.
- /root:系统管理员的根目录.
- /sbin:s 就是 Super User 的意思,存放的是系统管理员 root 使用的系统管理程序.
- /tmp:系统使用的零食空间,在重启的时候会清理!因此不要使用它来保存任何重要的文件.
- /usr:用户的应用程序和文件都在这个目录下,类似于 windows 下的 program files 目录.
- /var:用户创建的所有可变文件和临时文件的存储空间,例如日志文件一般都是 /var/log...
二、Linux 中的常用指令
2.1、目录命令
cd 切换目录
cd xxx:切换到当前目录下的 xxx 目录.
cd ~:切换到 root 根目录.
cd ..:回到上一级目录.
Ps:
一个点 "." 表示当前目录,全称为 "./"
两个点 ".." 表示上一级目录,全称为 "../"
pwd 打印当前所在目录
ls 展示当前目录内容
a)常见使用如下:
ls -l:一行显示一个文件.(可以简写为 ll)
ls -a:显示所有文件(包括 . 开头的隐藏文件)
ls -d:显示目录本身而不显示目录下的文件.
ls -t:按照修改时间排序(最近修改的先显示)
ls -tr:按照修改时间排序(最近修改的后显示)
ls -R:列出当前目录下的所有文件,如果有目录遍历所有所有目录及其子目录下的文件.
b)通配符:
- *:匹配一个或多个字符
- ?:匹配一个字符
- []:匹配指定字符范围内的任意字符.
- [^]:匹配指定字符范围外的任意单个字符.
例如如下:
c)ls -l 格式输出说明:
以 drwxr-xr-x. 4 root root 33 1月 26 22:30 es 为例
如下解释标红字符的含义:
drwxr-xr-x. 4 root root 33 1月 26 22:30 es
第一个字符用来表示文件类型:
- "-":表示普通文件.
- "d":表示目录.
- "l":链接文字(符号链接)或者 软链接.
- "c":字符设备文件.
- "b":块设备文件.
- "s":套接字文件.
- "p":命令管道文件.
drwxr-xr-x. 4 root root 33 1月 26 22:30 es
这里一共有 9 个字符,分为 3 组,分别表示文件所有者(owner)、所属组(group)和其他用户(others)的权限,每一组中的三个字符分别表示是否具有 读、写、执行(运行程序) 的权限,如下:
- r:读权限.
- w:写权限.
- x:执行权限.
- -:表示没有权限.
上述案例中,解释如下:
第一组 rwx:表示文件所有者(owner,也表示创建文件的用户)的权限,有 r读、w写、x执行 权限.
第二组 r-x:表示所属组只有读和执行的权限.
第三组 r-x:表示其他用户只有读和执行的权限.
drwxr-xr-x. 4 root root 33 1月 26 22:30 es
如果是目录:表示目录下一级子目录的个数.
如果是文件:表示硬链接的个数(访问该文件的路径数)
drwxr-xr-x. 4 root root 33 1月 26 22:30 es
表示这个目录的创建者是 root 用户.
drwxr-xr-x. 4 root root 33 1月 26 22:30 es
表示这个目录所属的组是 root 组.
drwxr-xr-x. 4 root root 33 1月 26 22:30 es
文件的字节数(大小)
drwxr-xr-x. 4 root root 331月 26 22:30 es
文件最后一次修改的日期
drwxr-xr-x. 4 root root 331月 26 22:30 es
文件名
mkdir 创建目录
du 统计每个目录下的文件字节数
du -s: 只显示每个文件的字节总数.
du -h:转换字节数为 K、M、G 的形式.
du -sh:显示当前文件大小,转化为 K、M、G 的形式.
2.2、文件命令
which 查找 命令字 所在位置
用于在用户的 path 环境变量所定义的目录中查找可执行文件的位置.
find 查找文件
用法:find [路径] [表达式] [操作]
- 路径:指定哪个目录下开始搜索,默认为当前目录.
- 表达式:指定搜索条件. 这个条件可以是基于文件名、文件大小、文件类型、文件权限等.
- 操作:对找到的文件进行的操作. 最常见的是 -print(打印文件名),还有 删除文件、更改文件权限等.
例如:
- 查找当前目录及其子目录的所有 .txt 文件:find . -name '*.txt'
- 查找 /home/user 目录中所有名为 example.sh 的文件:find /home/user -name "example.sh"
- 找到文件后修改权限:find /path/to/search -name "*.sh" -exec chmod +x {} ;
touch 创建一个空文件
如果创建的文件不存在,则创建一个空文件;
如果创建的文件存在,则修改文件的修改日期.
cp 复制文件或文件夹
a)复制单个文件: 复制 ~/test.txt 文件到 /tmp 目录下
cp ~/test.txt /tmp
b)复制整个目录:复制 ~/env 文件夹到 /tmp 目录下
cp -R ~/env /tmp
c)复制并改名: 复制 ~/test.txt 文件到 /tmp 目录下,并改名为 test2.txt
cp ~/test.txt /tmp/test2.txt
mv 移动文件或文件夹
a)移动文件或目录:移动 ~/test.txt 文件到 /tmp 目录下
mv ~/test.txt /tmp
b)移动文件或目录并改名:移动 ~/test.txt 文件到 /tmp 目录下,并改名为 test2.txt
mv ~/test.txt /tmp/test2.txt
rm 删除文件或文件夹
a)删除文件:删除 ~/env/test.txt 文件
rm ~/env/test.txt
b)删除目录:删除 ~/tmp/aaa 目录
**rm -rf ~/tmp/aaa **
Ps:
-f:不提示用户输入 ‘y’ 或 ‘n’ 来确认
-r:表示递归删除所有文件.
cat 输出文本文件内容
-n:输出结果带行号.
tac 倒序输出文本文件内容
和 cat 相反.
more 分页输出文件内容
分页大小为屏幕大小,默认左下角会显示分页进度百分比.
- 空格:向下翻页
- b 向上翻页
- f 向下翻页
- q 退出
less 分页显示文件内容
- -m:显示进度百分比
- 翻页期间可以用 "/" 后跟关键字搜索文件内容.
- q 可以退出翻页.
- 空格上下翻页
- b 向上翻页
- f 向下翻页
tail 查看文件末尾数据
默认查看文件末尾 10 行.
可以通过选项 -n 指定显示末尾 n 行的内容
head 查看文件头部数据
默认查看文件头部 10 行.
可以通过选项 -n 指定显示头部 n 行的内容
zip / unzip 压缩/解压缩
Note:如果没有此命令,可以通过 yum intall zip 下载
a)zip 压缩
- -r:压缩目录
- -y:把软连接作为文件压缩,但不压缩软连接所指向的文件.
例如,将 ~/tmp 文件夹压缩到 ~/aaa 目录下的 tmp.zip 文件中
Ps:这里的 "起点" 和 "终点" 和之前命令写法是反着来的,要注意~
b)unzip 解压缩
- -d 指定解压缩的路径
将 ~/aaa/tmp.zip 解压到 ~/bbb 目录下
Ps:解压缩会自动加一层 root 目录
gzip/gunzipo 压缩/解压缩
-n:压缩率,数字为 1 ~ 9,默认 6.
-r:压缩目录.
Ps:默认压缩之后不会保留源文件,源文件变为 *.gz 格式
例如压缩 ~/test/a.test 文件
解压缩也比较简单
tar 将多个文件或目录打成一个 tar 包(归档)
使用方式如下:
- 打包:tar 选项 目标文件名 源文件名或目录
- 释放:tar 选项 目标文件名 -C 源tar包
选项如下:
- -f:tar 命令必须要要有 -f 选项,并且在所有选项最后.
- -c:创建新归档.
- -x:释放归档 extract
- -z:是使用 gzip 的方式进压缩或解压缩.
- -v:打包进度可视化.
常用方式如下:
a)将 ./aaa 整个目录打包一个新的 ./bbb.tar 文件
b)将 /aaa 整个目录打包一个新的 ./bbb.tar.gz 文件c
c)将 tar 包文件 ./bbb.tar 还原到 ./tmp1 目录下
d)将 tar 包文件 ./bbb.tar.gz 还原到 ./tmp2 目录下
ln 创建硬链接/软连接
链接:类似于 windows 的快捷方式,可以通过链接直接访问到目标文件.
软连接:相当于对源文件的浅拷贝. 如果源文件被删除,则该链接无效.
硬链接:相当于对源文件的深拷贝,inode 不一样(不同的内存空间). 如果源文件被删除,该链接依然有效.
用法:ln 选项 源文件 新链接
选项:
- -s:创建软连接(没有此选项,默认是硬链接)
- -v:可视化.
例如在当前文件下给 aaa 创建软连接 link_aaa:
2.3、系统服务命令
who 查看当前用户登录信息
- 第一列(用户名):root 是超级管理员.
- 第二列(终端类型): - tty1 表示第一个物理控制台终端(通常是键盘和显示器直接连接的终端.- pts/0 表示 伪终端 ,通常是通过 SSH、远程桌面... 出啊关键的会话使用的终端(/0 表示伪终端).
- 第三列(用户最后一次登录到终端的时间):这里不用多讲
- 第四列(远程主机的名称 / IP地址):实际上这里我是通过 tailscale 组的内网.
综上示例表明:有两个 root 用户登录到系统,一个是通过物理控制台(tty1),另一个是通过远程来连接(pts/0),并且远程连接的用户来自 windows-cyk.tail73816.ts.net 这个远程主机.
w 查看当前用户登录信息
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
a)第一行:
- 22:46:28:当前的系统时间.
- 2 users::2 个用户登录到系统.
- load average: 0.00, 0.01, 0.04:系统的负载平均值,表示过去 1 分钟、5 分钟和 15 分钟内系统的平均负载。负载平均值是正在运行或等待 CPU 时间的进程数的度量。上述案例中,系统负载非常低。
b)后续信息(每个登录用户的详细信息):
- USER:用户名.
- TTY:用户终端类型. - tty1 表示第一个物理控制台终端(通常是键盘和显示器直接连接的终端.- pts/0 表示 伪终端 ,通常是通过 SSH、远程桌面... 出啊关键的会话使用的终端(/0 表示伪终端)
- LOGIN@:用户登录到系统的时间.
- IDCE:用户空闲的时间. 上述案例中, tty1 的用户已经空闲了 3 小时 32 分钟,而 pts/0 的用户在执行 w 命令前只空闲了 4 秒。
- JCPU:用户及其所有进程使用的总 CPU 时间.
- PCPU:当前正在执行的进程所使用的 CPU 时间.
- WHAT:用户当前正在进行的操作. 上述案例中 tty1 用户正在运行 -zsh(zsh shell 的一个实例),而 pts/0 的用户正在执行 w 命令.
shutdown 关机命令
- shutdown -h now:立刻关机.
- shutdown -h +10:10 分钟后关机. 每个用户都会收到 "10 分钟后关机" 的消息,并于 10 分钟后关机.
- shutdown -c:取消关机.
reboot 重启系统
这个不多讲...
lscpu 查看系统 cpu 信息
- Architecture:-
x86_64
: 表示CPU是64位架构,兼容x86指令集。 - CPU op-mode(s):-
32-bit, 64-bit
: 表示CPU支持32位和64位的操作模式。 - Byte Order:-
Little Endian
: 数据在内存中的存储顺序是低字节在前,高字节在后。 - CPU(s):-
4
: 系统中有4个逻辑CPU(可能是物理核心或超线程)。 - On-line CPU(s) list:-
0-3
: 当前在线(即活跃)的CPU编号列表。 - Thread(s) per core:-
1
: 每个物理核心只有一个线程,表示没有启用超线程。 - Core(s) per socket:-
2
: 每个CPU插槽(或物理CPU)有2个物理核心。 - 座:-
2
: 可能是指CPU插槽的数量,但这里的用词“座”不太常见,可能是翻译或特定术语。 - NUMA 节点:-
1
: Non-Uniform Memory Access (NUMA)节点的数量。NUMA是一种计算机内存设计,其中处理器访问自己节点上的内存比访问其他节点上的内存更快。 - 厂商 ID:-
AuthenticAMD
: 制造商是AMD。 - CPU 系列:-
25
: AMD的CPU系列编号。 - 型号:-
80
: 具体的AMD CPU型号代码。 - 型号名称:-
AMD Ryzen 7 5800H with Radeon Graphics
: 这是CPU的完整名称,表明它是AMD Ryzen 7 5800H系列,带有集成的Radeon Graphics GPU。 - 步进:-
0
: CPU的步进或修订级别。 - CPU MHz:-
3193.999
: CPU当前的运行频率(以MHz为单位)。 - BogoMIPS:-
6387.99
: 一个衡量CPU性能的数字,但现在已经不太常用。 - 超管理器厂商:-
VMware
: 这表明CPU是在VMware虚拟机中运行的。 - 虚拟化类型:-
完全
: 虚拟机支持完整的硬件虚拟化。 - 缓存信息:-
L1d 缓存
,L1i 缓存
,L2 缓存
,L3 缓存
: 这些是CPU的不同级别的缓存大小。缓存越大,CPU访问数据的速度通常就越快。 - NUMA 节点0 CPU:-
0-3
: NUMA节点0上的CPU编号列表。 - Flags:- 这是一个非常长的列表,列出了CPU支持的各种特性和指令集。例如,
fpu
表示浮点单元,sse
,sse2
,avx
等都是SIMD(单指令多数据)指令集,它们可以提高数据处理的速度。其他的标志,如hypervisor
和vmcall
,表明CPU支持虚拟化技术。
chmod 修改文件权限
关于权限具体的描述在 ls 命令中有讲,可以翻上去看看.
修改权限有以下几种方法:
a)赋值法:
chmod u=具体权限,g=具体权限,o=具体权限 文件名
- u(user):所属用户权限
- g(group):用户组权限
- o(other):除了 所属用户和所属用户组 的其他用户权限
例如如下:
b)加减法:
还可以用 a 表示 all,可以给所有修改权限.
c)权重法:
- 4 表示 r
- 2 表示 w
- 1 表示 x
- 0 表示 -
例如:
d)可以使用 -R 选项级联修改目录下的所有文件权限.
例如: chmod -R 777 ~/env
e)chmod 修改 所有者 和 所属组
例如如下 所有者 和 所属组 都是 root
现在需要都修改为 admin,如下命令
sudo chown admin:admin /data0/
效果如下:
useradd/usermod/userdel/su/passwd 用户相关操作
a)前置知识
用户信息记录在 /etc/passwd 文件中,一行记录就是一个用户信息.
格式如下(":" 是分隔符):
- 第一个字段:用户名.
- 第二个字段:密码字段. 这里存储的是加密密码. 现代系统上,这里通常是一个占位符(如 x),实际的密码存储在 /etc/shadow 文件中(此文件只有 root 有读权限,其他用户没有任何权限).
- 第三个字段:uid 用户唯一标识. - uid = 0 一般是超级管理员.- uid >= 500 一般是权限系统管理,权限有限.- 1 <= uid < 500 仅仅使用系统服务资源,不能登录系统.
- 第四个字段:gid 主组编号. gid 是表示用户的初始组,也是唯一标识.
- 第五个字段:用户备注信息.
- 第六个字段:家目录位置.
- 第七个字段:用户默认的 shell. 例如 bash、zsh...... 若为 sbin/nologin ,则用户不能登录.
b)useradd 添加用户.
用法:useradd [-u UID] [-g GID] [-d HOME] [-s] [-c] 用户名
- -u: 自定义 uid,默认系统会自动编号.
- -g:自定义主组 gid,并且这个组是已经存在的. 若不指定,主组系统会创建一个和用户名一样的组作为用户主组.
- -G:自定义附加组 GID 编号或组名,用逗号隔开,前提是组存在.
- -d:指定家目录,默认为 /home/用户名.
- -s:自定义 shell,默认为 /bin/bash.
- -c:用户备注信息,默认为空.
例如,创建一个 aaa 用户,主组为 12,shell 为 zsh
c)usermod 修改用户信息
用法:usermode [-u UID] [-g GID] [-d HOME] [-s] [-l] 用户名
- -l:修改用户名.
- 其他的不赘述了
例如把 aaa 用户名改为 bbb.
d)userdel 删除用户
选项:
- -r:删除用户的同时,删除家目录和相关系统邮件.
例如,删除用户 aaa,及其其他信息
userdel -r aaa
e)su 切换用户
用法:su [选项] [-] 用户名
选项:
- -:加载目标用户的整个环境(包括 shell 配置文件,如 .bashrc、.bash_profile.....)
- -c <命令>:表示通过当前用户来执行一个命令,而不启动 shell.
例如:
- 切换到 root 用户(如果是 root 用户,用户名可以省略):su
- 切换到 aaa 用户:su aaa
- 以用户身份执行单个命令:su -c 'ls -l'
systemctl
Note:一些老系统中可能是用 service 命令
- systemctl start <service>:启动服务。
- systemctl stop <service>:停止服务。
- systemctl restart <service>:重启服务。
- systemctl status <service>:查看服务状态。
- systemctl enable <service>:设置服务开机自启。
- systemctl disable <service>:禁止服务开机自启。
- systemctl list-unit-files:查看服务名列表(展示:服务名 + 状态).
- systemctl:列出所有已加载的单元(unit)及其状态。
其中关于 systemctl list-unit-files 和 systemctl 的控制:
- 空格:向后翻一页.
- b:向前翻一页
- e:向后翻一条数据.
- /服务名:高亮对应的服务名
systemctl status <service> 以 docker 为栗子如下:
- 服务状态:Active: active (running) 表示 Docker 服务正在运行。
- 主进程ID:Main PID: 1292 (dockerd) 表示 Docker 守护进程(dockerd)的进程ID是1292。
- 内存使用情况:Memory: 131.5M 表示 Docker 服务当前使用了大约 131.5MB 的内存。
- 启动时间:since 二 2024-05-14 19:13:37 CST 表示 Docker 服务在 2024 年 5 月 14 日19:13:37 CST(中国标准时间)启动。
- 日志信息:输出中还包括了一些Docker守护进程的日志信息,这些日志信息提供了关于Docker服务启动和运行过程中发生的事件的详细信息。
free 查看当前系统内存使用情况
选项如下:
- -b:以字节为单位显示内存使用情况。
- -k:以千字节(KB)为单位显示内存使用情况(默认)。
- -m:以兆字节(MB)为单位显示内存使用情况。
- -g:以吉字节(GB)为单位显示内存使用情况。
- -h:以人类可读的格式(如 G、M)显示内存大小。
- -l:显示高低内存的利用率。
- -o:不显示缓冲区/缓存行的信息。
- -s N:每隔 N 秒刷新一次内存信息。
- -t:显示物理内存和交换内存的总计。
输出结果解释:
- total:总物理内存大小。
- used:已使用的物理内存大小。
- free:未使用的物理内存大小。
- shared:被多个进程共享的内存大小(通常这部分值很小)。
- buff/cache:被缓冲(buff)和缓存(cache)占用的内存大小。
- available:估算的可用内存量,这部分内存可以不经过交换(swap)直接被新的应用程序使用。
此外,还会显示交换内存(swap)的使用情况。
a)单位为 MB:
b)单位按照情况来显示
c)每 2 s 刷新一次内存信息.
yum 安装/更新/删除/搜索 软件包
选项:
- -y:下载过程中自动确认.
用法:
- 安装软件包:yum install 软件包名
- 更新软件包: - 更新所有软件包:yum update- 更新特定的软件包:yum update 软件包名
- 删除软件包:yum remove 软件包名
- 查询软件包: - 查询已安装的软件包:yum list installed- 查询可用的软件包:yum list available- 查询软件包的信息:yum info 软件包名
- 清理缓存:yum clean all
- 搜索软件包:yum seach 包名关键字
- 查看 yum 历史记录: - 查看历史记录:yum history- 撤销历史记录中的某个操作:yum history undo last
yum的配置文件位于
/etc/yum.repos.d/
目录下。你可以编辑这些文件来添加、删除或修改 yum 仓库。
最常用的操作就是,先搜索软件包是否存在,然后下载对应的包.
history 查看历史命令
直接 history 就可以查看以前执行过的指令.
Ps:这些命令被保存在一个历史文件中(通常是 ~/.bash_history),以便用户可以回顾和重新执行之前的命令。
2.4、进程命令
ps 查看进程状态
a)用法:ps [选型]
b)常用选项如下:
- -e 或 -A:显示所有进程.
- -l:长格式显示,显示简略信息.
- -r:显示正在运行的进程.
- -L:显示指定进程 ID 的所有线程.
- -f:显示完整格式的输出,包括 PPID(父进程 ID)、C(CPU 占用率)、STIME(启动时间).
- -u [用户]:显示指定用户的进程.
- -p [PID]:显示指定 PID 的进程信息.
- aux:按照特定的格式查看进程.
c)案例
查看系统中的所有进程信息:
- UID:进程所有者 ID
- PID:进程 ID
- PPID:父进程 ID. 0 表示没有父进程(父进程是内核)
- C:CPU 使用率. 表示最近一段时间(通常是最后一次调度一来)该进程使用 CPU 的近似百分比.
- STIME:进程启动时间. 这是进程开始运行的时间.
- TTY:控制终端,表示进程和关联终端类型. 如果没有进程和终端关联(是一个守护进程或内核线程),则这里显示 "?"
- CMD:显示这个进程启动时使用的命令 或者 可执行文件的名称.
查找某一个进程(例如 docker):
查看进程树:
ps aux 固定格式查看
- USER: 运行该进程的用户名。
- PID: 进程ID
- %CPU: 该进程当前使用的CPU百分比。
- %MEM: 该进程当前使用的物理内存百分比。
- VSZ: 虚拟内存大小(Virtual Set Size),表示进程使用的虚拟内存总量,以KB为单位。它通常包括进程使用的所有库和动态链接的程序段,而不仅仅是它当前使用的内存。
- RSS: 常驻集大小(Resident Set Size),表示进程当前在物理内存中占用的空间大小,以KB为单位。
- TTY: 进程关联的终端类型。如果进程没有关联到任何终端(例如守护进程),则此列会显示 ?。
- STAT: 进程状态。常见的状态有: - R (Running or Runnable): 正在运行或在运行队列中等待。- S (Sleeping): 休眠中,等待某个条件形成。- D (Disk Sleep): 不可中断的休眠状态,通常是因为在等待I/O操作。- T (Stopped or Traced): 停止或追踪状态,进程被停止,通常是因为收到SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU等信号。- Z (Zombie): 僵尸状态,进程已终止,但其父进程尚未读取其退出状态。- Ssl:表示可能处于休眠状态,而又使用 SSL 进行网络通讯的.- Sl:表示在进行 SSL 网络通讯.- S+:S 表示处于可中断的休眠状态. + 表示可能该进程在前台运行,意味着和某个终端的会话关联.
- START: 进程启动的时间。
- TIME: 进程使用的CPU时间总量,格式为 MM:SS 或 HH:MM:SS(分钟、秒或小时、分钟、秒)。
- COMMAND: 启动进程的命令名称或命令行。
top 查看各进程的资源占用情况(类似 WIndows 任务管理器)
常用选项:
- -d:设置刷新时间间隔.
- -p [PID]:查看指定进程信息.
- -u [用户名]:查看特定用户的进程信息.
交互命令(使用 top 命令后):
- h:显示帮助.
- k:终止一个进程. 输入 k 后,会提示输入要终止的进程 ID.
- q:退出.
- s:更新刷新频率.
- f:进入字段管理界面,选择显示哪些列.
- m:切换显示内存信息.
- t:切换显示进程和 CPU 信息.
- P:按照 %CPU 使用率排序.
- M:按照内存使用率排序.
- N:按照进程 ID 排序.
- T:按照 CPU 时间排序.
- V:虚拟内存使用
例如,查看所有进程信息,每 2s 刷新一次,并按照 %CPU 使用率排序:使用 top -d 2 进入界面后,输入 M
- top - :系统当前时间.
- up:系统开机多长时间.
- user:当前用户数.
- load average cpu:平均负载,三个数值分别对应 1min、5min、15min.
- Tasks:系统当前进程数 - total:总进程数- running:正在运行的进程数.- sleeping:睡眠的进程数.- stopped:停止的进程数.- zombie:僵尸进程数.
- %Cpu(s): cput 使用率. - us:用户使用 cpu 百分比.- sy:系统内核使用 cpu 百分比.- id:剩余 cpu 百分比- wa:CPU 等待 I/O 操作完成百分比.- hi:处理硬件中断 CPU 时间百分比.- si:处理软件中断的 CPU 百分比.- st:虚拟环境中,当物理 CPU 被其他虚拟机占用时,当前虚拟机无法使用的 CPU 时间百分比.
- Mem:内存使用情况 - total:总内存大小.- free:空闲的内存.- used:已使用的内存.- buff/cache:缓存的内存大小.
- Swap:虚拟内存信息.
- 进程列表信息: - PID:进程 id.- USER:进程所有者.- PR:优先级.- NI:进程优先级 nice 值,负值表示高优先级,正值表示低优先级.- VIRT:进程使用的虚拟内存总量.- RES:进程使用的物理内存大小.- SHR:共享内存大小.- S:进程状态 - D:不可终中断的睡眠状态- R:运行- S:睡眠- T:跟踪/停止.- Z:僵尸进程.- %CPU:进程使用 CPU 占用百分比.- %MEM:进程使用物理内存百分比.- TIME+:进程使用的 CPU 时间总计.- COMMAND:命令名.
pgrep 根据名称查询进程 id
常用选项:
- -c:pgrep 默认会列出所有匹配的 PID,但如果只想知道是否至少有一个匹配项,可以使用 -c.
- -i:匹配的时候忽略大小写.
通常来结合 kill 和 pkill 使用,如下:
kill $(pgrep nacos)
Ps:pkill 更安全简洁一些.
kill/pkill 两种杀死进程的方式
a)kill 命令默认情况下发送 SIGTERM 信号,该信号请求进程安全的终止.
- 使用 kill 命令时,需要指定进程 PID,例如,要杀死 PID 为 1234 的进程: kill 1234
- 如果知道要发送的信号的具体编号或名称,也可以使用 -s 选项指定. 例如发送 SIGINT 信息(和 Ctrl + C 的效果相同):kill -s SIGINT 1234
b)pkill 命令 和 kill 不同,pkill 允许你根据 进程名 或者 其他属性 来终止进程,而无需知道具体的 PID. 这样使得 pkill 在处理相同名称的多个进程时特别有用.
用法:pkill [选项] [进程名或信息]
- -d:仅匹配守护进程(通常 "Daemon" 开头的进程).
例如杀死所有名为 nginx 进程:pkill nginx
nohup 后台运行命令
nohup 使得我们即使 关闭终端/意外终止 也可以确保命令后台运行.
用法:nohup command &
- command 表示要运行的命令.
- & 表示后台运行.
例如想要后台运行一个名为 my.sh 的脚本:nohup ./my.sh &
并且 nohup 命令会在当前目录下创建换一个 nohup.out 的文件,用来保存标准输出和错误输出.
如果想要将输出重定向到其他文件,可以是使用输出重定向操作符 >,例如:
nohup ./my_script.sh > my_output.log 2>&1 &
- nohup:默认情况下,当你关闭终端时,该终端中启动的所有进程都会收到一个 SIGUP 信号,该信号会导致进程终止. 但是 nohup 会忽略这个 SIGUP 信号,确保进程继续运行.
- ./my_script.sh > my_output.log:将 my_script.sh 的标准输出重定向到 my_output.log 文件中. 如果文件存在,则内容被覆盖,如果不存在,则创建一个新文件.
- 2>&1:将标准错误(stderr,文件描述符为 2)重定向到和标准输出相同的位置(1 是标准输出流的文件描述符).
- &:表示命令后台执行.
2.5、网络命令
ping 测试网络连接是否通畅
ping 命令会像目标主机发送 ICMP 协议的回显请求,如果收到回显响应,说明网络通畅.
用法:ping [选项] 目的地址
选项如下:
- -c 次数:指定要发送的 ICMP 回显请求的数量. 不指定该参数,默认无限发送.
- -i 间隔:指定每个请求之间的时间间隔(单位:秒)
- -W 超时:指定等待每个响应的超时时间(单位:秒)
- -s 数量:指定发送数据的字节数
- -v:显示更多输出信息.
- -4 或 -6:指定使用 IPv4 或 IPv6.
例如,像 env-base 发送 4 个请求,并且每个数据包大小为 1024 字节(除了 ICMP 数据包中的 数据 部分大小,还包含了 ICMP 头和其他头部信息,例如 IP 头,因此实际的包大小会 大于 1024)
响应数据信息解释:
- icmp_seq=X:表示这是第 X 个 ICMP 请求的响应。
- ttl=64:生存时间(TTL)是 IP 数据包在网络中传输时可以经过的最大路由器数量。每当数据包通过一个路由器时,TTL 值就会减一。如果 TTL 值减到 0,数据包就会被丢弃。TTL 的初始值通常是由发送者设置的,这里 64 是一个常见的值。
- time=X ms:这是 ICMP 请求和响应之间的往返时间(RTT),单位是毫秒。这个值越小,表示网络延迟越低。
最后的统计信息:
- 4 packets transmitted, 4 received:表示发送了 4 个数据包,并全部收到了响应。
- 0% packet loss:表示没有数据包丢失。
- time 3000ms:表示整个测试过程花费了 3000 毫秒。
- rtt min/avg/max/mdev = 0.017/0.025/0.037/0.009 ms: - min 是 RTT 的最小值。- avg 是 RTT 的平均值。- max 是 RTT 的最大值。- mdev 是 RTT 的均方差,表示 RTT 值的离散程度。
ip(ifconfig)查看/操作 网接口信息.
Note:新版的 Linux 中,ifconfig 已被 ip 命令取代.
ip 用于显示或操作路由、网络设备、策略路由和隧道.
a)显示所有网络接口和配置:
ip addr show
或者
ip a
- 名称:lo 代表本地回环接口,通常用于本机上的网络服务和应用之间的通信.
- 状态 <LOOPBACK,UP,LOWER_UP> 表示这是一个回环接口,并且接口已经启动(UP).
- MTU: mtu 65536 表示最大传输单元为 65536 字节,这对于回环接口来说是常见的,因为它只在本机内部通信。
- qdisc: qdisc noqueue 表示没有使用队列规则(Queueing Discipline)。
- IP地址:
- inet 127.0.0.1/8 是 IPv4 地址,127.0.0.1 是本机地址(localhost),/8 表示子网掩码是255.0.0.0。
- inet6 ::1/128 是 IPv6 地址,与 IPv4 的 127.0.0.1 具有相同的功能。
netstat 查询网络连接、路由表、接口统计等网络相关信息
Note:新版 Linux 系统中,被视为 ss 工具的替代品
选项:
- -a:显示所有活动的网络连接和监听的服务器套接字 -> netstat -a
- -tuln:和 a 的效果一样(-a 只显示 IPv4,-tuln 还会显示 IPv6) - -t 显示 TCP 连接- -u 显示 UDP 连接- -l 仅显示监听套接字- -n 显示数字形式的地址和端口号,而不是尝试确定它们的名称
- -r:显示路由表
- -i:显示每个网络接口的统计信息.
一般我们经常使用的是如下命令(这里以查看 docker 相关的网络连接和监听套接字为例):
解读:
a)第一行:tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1814/docker-proxy
- 协议 (tcp 或 tcp6):这表示正在使用的网络协议。tcp 表示 IPv4 上的 TCP 协议,而 tcp6 表示 IPv6 上的 TCP 协议。
- 本地地址 (0.0.0.0:6379 或 :::6379): - 0.0.0.0:6379 表示套接字正在监听所有可用的 IPv4 地址(即所有网络接口)上的 6379 端口。- :::6379 表示套接字正在监听所有可用的 IPv6 地址(即所有网络接口)上的 6379 端口。
- 外部地址 (0.0.0.0*: 或 :::):这表示套接字当前没有连接到特定的远程地址和端口(因为它处于监听状态,等待连接)。 表示接受任何远程地址和端口的连接。
- 状态 (LISTEN):这表示套接字当前处于监听状态,等待来自远程客户端的连接请求。
- PID/程序名 (1814/docker-proxy 或 1820/docker-proxy):这显示了与套接字关联的进程ID(PID)和进程名。
表示有一个 Docker 容器通过 docker-proxy 在所有可用的 IPv4 地址上监听 TCP 端口 6379. 这里实际上是因为 Docker 容器内的 Redis 容器监听该端口,并通过 Docker 端口映射到宿主机上.
b)第二行:tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1814/docker-proxy
表示同样的服务也在所有可用的 IPv6 地址监听 TCP 端口 6379.
telnet 查看服务器的某一个端口是否可以访问
a)telnet 是一种远程登录的工具,但是由于使用明文传输数据,不安全(很多服务器也默认关闭 telnet 端口),因此现在远程登录服务器的工具都是使用 ssh.
因此 telnet 现在用途就变成了检测服务器的某一个端口是否可以访问.
b)用法:
用法1(登录主机):telnet 服务器IP地址
用法2(确定某个主机端口是否可用):telnet 服务器IP地址 端口号
c)示例
例如,连接 env-base 的 6379 端口,出现以下信息表示连接成功.
Ps: 现在用 telnet 基本看主机端口是否可用,到这一步就结束了. 当然也可以有更多交互操作,如下
按照提示信息,ctrl + ] 进入 socket 交互模式,输入 send ?,可以看到 "?" 支持以下参数占位
例如通过 send ao 进入 socket 交互模式,之后你输入任何东西,按下回车,都是向服务器发送一条消息.
curl 发送请求
这里一般我们不会去手写,能看懂就可以.
选项:
- -H 或者 --header:携带请求头 - curl -H "Accept: application/json" http://example.com/api/data
- -X 或者 --request:指定请求方法为 POST(不指定默认是 GET 请求),并使用 -d 和 --data 选项指定发送的数据. - curl -X POST -d "key1=value1&key2=value2" http://example.com/api/post- curl -X POST -H "Content-Type: application/json" -d '{"key1":"value1", "key2":"value2"}' http://example.com/api/post
- -O:下载文件. -O 选项指定输出文件的名称(如果省略文件名,则使用 URL 中的文件名). - curl -O http://example.com/path/to/file.zip
- -i 或 --include:显示 HTTP 响应头. - curl -i http://example.com
- -l 或 --head:仅显示 HTTP 响应头,不显示内容. - curl -I http://example.com
- --connect-timeout:设置连接超时(秒),使用 --max-time 设置最大请求时间. - curl --connect-timeout 5 --max-time 10 http://example.com
- -b 或 --cookie:发送 cookie - curl -b "cookie_name=cookie_value" http://example.com
- -x 或 - proxy:设置代理 - curl -x http://proxy.example.com:8080 http://example.com
版权归原作者 陈亦康 所有, 如有侵权,请联系我们删除。