0


Linux - 整理工作中常用的 Linux 命令(目录、文件、系统、进程、网络)持续更新~

一、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 信息

  1. Architecture:- x86_64: 表示CPU是64位架构,兼容x86指令集。
  2. CPU op-mode(s):- 32-bit, 64-bit: 表示CPU支持32位和64位的操作模式。
  3. Byte Order:- Little Endian: 数据在内存中的存储顺序是低字节在前,高字节在后。
  4. CPU(s):- 4: 系统中有4个逻辑CPU(可能是物理核心或超线程)。
  5. On-line CPU(s) list:- 0-3: 当前在线(即活跃)的CPU编号列表。
  6. Thread(s) per core:- 1: 每个物理核心只有一个线程,表示没有启用超线程。
  7. Core(s) per socket:- 2: 每个CPU插槽(或物理CPU)有2个物理核心。
  8. :- 2: 可能是指CPU插槽的数量,但这里的用词“座”不太常见,可能是翻译或特定术语。
  9. NUMA 节点:- 1: Non-Uniform Memory Access (NUMA)节点的数量。NUMA是一种计算机内存设计,其中处理器访问自己节点上的内存比访问其他节点上的内存更快。
  10. 厂商 ID:- AuthenticAMD: 制造商是AMD。
  11. CPU 系列:- 25: AMD的CPU系列编号。
  12. 型号:- 80: 具体的AMD CPU型号代码。
  13. 型号名称:- AMD Ryzen 7 5800H with Radeon Graphics: 这是CPU的完整名称,表明它是AMD Ryzen 7 5800H系列,带有集成的Radeon Graphics GPU。
  14. 步进:- 0: CPU的步进或修订级别。
  15. CPU MHz:- 3193.999: CPU当前的运行频率(以MHz为单位)。
  16. BogoMIPS:- 6387.99: 一个衡量CPU性能的数字,但现在已经不太常用。
  17. 超管理器厂商:- VMware: 这表明CPU是在VMware虚拟机中运行的。
  18. 虚拟化类型:- 完全: 虚拟机支持完整的硬件虚拟化。
  19. 缓存信息:- L1d 缓存, L1i 缓存, L2 缓存, L3 缓存: 这些是CPU的不同级别的缓存大小。缓存越大,CPU访问数据的速度通常就越快。
  20. NUMA 节点0 CPU:- 0-3: NUMA节点0上的CPU编号列表。
  21. Flags:- 这是一个非常长的列表,列出了CPU支持的各种特性和指令集。例如,fpu表示浮点单元,sse, sse2, avx等都是SIMD(单指令多数据)指令集,它们可以提高数据处理的速度。其他的标志,如hypervisorvmcall,表明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 发送请求

这里一般我们不会去手写,能看懂就可以.

选项:

标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/CYK_byte/article/details/138806843
版权归原作者 陈亦康 所有, 如有侵权,请联系我们删除。

“Linux - 整理工作中常用的 Linux 命令(目录、文件、系统、进程、网络)持续更新~”的评论:

还没有评论