遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。
一、Linux中的基础命令和操作(约30%-40%)
1.用户和组(5%左右)
1.1用户简介(了解)
要求:了解,知道有三个用户类型,知道之间的区别
在Linux中,主要分为以下三种用户类型:
(1)root用户:在Linux系统中,root用户的uid为0,该用户对所有的命令和文件具有访问、修改、执行的权限。
(2)普通用户:系统中大多数的用户为普通用户,需要管理员用户进行创建,拥有的权限收到一定的限制,一般只在用户自己的主目录拥有完全权限,提升权限时,需要使用sudo命令。
(3)系统用户:通常会用于一个守护进程或者软件,这类用户在安装系统后默认存在,且默认情况下通常不允许通过shell的交互式登录系统,但此类用户方便系统管理,对于系统的正常运行是必不可缺的。
1.2用户管理的三个配置文件
1.2.1 /etc/passwd(掌握)
文件格式如下:
文件作用:
/etc/passwd
的角色:/etc/passwd
是用于记录用户基本信息的文件,如同系统中用户的花名册,包含系统内所有用户的登录相关记载。例如系统中的root
用户、普通用户等,都在该文件中有对应的记录行,记录着用户名、用户 ID(UID)、组 ID(GID)、家目录、登录 Shell 等基本信息。- 登录验证流程
- 账号检查:当用户尝试登录系统时,系统首先会查阅
/etc/passwd
文件,查看是否存在用户输入的账号。比如输入用户名testuser
,系统就在/etc/passwd
中查找是否有以testuser
为用户名的记录行。 - 确定 UID:若找到对应的账号记录,系统就会从记录中提取该用户的用户 ID(UID) 。UID 是系统识别用户身份的重要标识,每个用户都有唯一的 UID 。
- 密码核对:系统依据确定的 UID ,到
/etc/shadow
文件中找到对应的加密密码。因为/etc/shadow
存储着用户加密后的密码以及相关密码属性信息。然后将用户输入的密码进行加密处理,并与/etc/shadow
中存储的加密密码进行比对。 - 登录成功:如果密码核实无误,说明用户身份合法,系统允许用户登录。登录后,系统会读取该用户的配置文件,加载用户个性化的设置,如环境变量、Shell 配置等,从而为用户提供相应的操作环境 。
- 账号检查:当用户尝试登录系统时,系统首先会查阅
要求:主要理解/etc/passwd文件的格式,看到具体的文件内容可以知道每一项代表的是啥
/etc/passwd | /etc/shadow | |
---|---|---|
主要存储内容 | 用户名:密码占位符:用户 ID:组 ID:用户注释:家目录:登录 Shell | 用户名、加密密码、密码最后修改时间、密码最短有效期、密码最长有效期、密码警告期、密码不活动期、账号失效时间 |
文件权限 | 通常为 rw-r--r-- ,所有用户可读,root 可写 | 通常为 rw------- ,仅 root 可读写 |
作用 | 提供用户基本信息,供系统识别用户身份、确定用户家目录及默认 Shell 等 | 用于验证用户输入密码是否正确,保障密码安全 |
密码相关 | 早期存加密密码,现多为占位符(x ) | 存储经加密算法处理后的真实密码 |
互补关系体现 | 为系统提供用户基本属性框架,与密码信息分离,保障安全性 | 补充存储密码及相关属性,与基本信息配合完成用户身份验证 |
示例:
解释:
root:x:0:0:root:/root:/bin/bash
root
:用户名,是用户登录系统时使用的名称 。x
:密码占位符,在早期系统中存放加密后的密码,现在密码通常存储在/etc/shadow
文件,这里仅为占位 。0
:用户 ID(UID),0
代表超级用户,具有系统最高权限 。0
:组 ID(GID),表明该用户所属初始组的 ID ,这里0
对应的组一般也是root
组 。root
:用户描述字段,可用于记录用户相关信息,如真实姓名等,这里是root
。/root
:用户的家目录,root
用户的家目录为/root
,用于存放用户个人文件等 。/bin/bash
:用户登录后使用的默认 Shell,bash
是常用的交互式 Shell,提供命令行操作环境 。
bin:x:1:1:bin:/bin:/sbin/nologin
bin
:用户名,系统用户,主要用于运行一些系统相关的二进制文件程序 。x
:密码占位符 。1
:用户 ID(UID) 。1
:组 ID(GID) 。bin
:用户描述 。/bin
:家目录,存放相关程序文件 。/sbin/nologin
:表示该用户不能用于交互式登录系统,nologin
会阻止用户登录并提示该账号不可用 。
1.2.2 /etc/shadow(一般了解就行)
文件格式:
示例:
分析:
root
:用户名,代表系统的超级用户,拥有最高权限。$6$.fFMoeVPf9Kh5oGb$Il3UTpAdkyL63cZSewcK33jq r/8ZJJr04Ue.Cq6Fd1tjUxekl75W9K7ukjC57UntX/
:加密后的密码。$6$
表示采用 SHA - 512 加密算法 ,中间部分.fFMoeVPf9Kh5oGb
是盐值(用于增强密码加密安全性 ),后面部分是加密后的密码字符串。0
:密码最后修改时间,指从 1970 年 1 月 1 日起到密码最后一次修改时的天数 ,这里表示密码最后修改时间距离 1970 年 1 月 1 日过去了 0 天(实际可能因系统设置或记录方式存在特殊情况 )。99999
:密码最大使用期限,即密码必须修改的最长天数,超过此天数密码将失效,这里表示大约 274 年(99999÷365≈274 )才会强制要求修改密码。7
:密码警告时间,指密码过期前提前警告用户修改密码的天数 ,这里表示在密码过期前 7 天,系统会提醒用户修改密码。::
:后面几个字段(密码最短使用期限、密码禁用期、账号失效时间、保留字段 )为空 ,表示未设置相关内容。
1.2.3 /etc/group(一般了解就行)
文件格式:
示例:
分析:
root:x:0:
root
:用户组名,此为系统中权限最高的用户组,通常超级用户root
属于该组。x
:密码占位符,在早期系统中用于存放用户组密码,但现在很少使用,一般仅为占位。0
:组 ID(GID),0
这个 GID 具有特殊意义,与超级用户相关联。- 空字段:该字段用于记录属于这个用户组的用户名列表,这里为空,不代表没有成员 ,像
root
用户默认属于root
组,但不一定在此列出。
bin:x:1:
bin
:用户组名,主要用于与系统二进制文件相关的程序或服务 。x
:密码占位符 。1
:组 ID(GID) 。- 空字段:同样用于记录组成员,此处为空,但不意味着没有成员归属该组 。
1.2.4 /etc/gshadow (了解)
文件格式:
1.3用户管理操作(掌握)
经典四大件:增删改查
要求熟练掌握:增删改查操作
操作类型 | 命令及示例 | 解释 |
---|---|---|
添加用户 | sudo useradd [options] username 示例: sudo useradd -m username sudo passwd username | useradd 用于创建新用户,[options] 是可选项。-m 选项表示在创建用户时自动为其创建家目录。创建用户后,使用 passwd 命令为该用户设置密码,执行该命令后会提示输入新密码及确认密码。 |
删除用户 | sudo userdel -r username | userdel 用于删除用户,-r 选项表示在删除用户的同时,会一并删除该用户的家目录和邮件目录,避免残留无用的数据。 |
修改用户信息 - 更改用户名 | sudo usermod -l newusername oldusername | usermod 用于修改用户的各种属性。-l 选项用于指定新的用户名,此命令将原用户名 oldusername 更改为 newusername 。 |
修改用户信息 - 更改用户登录 shell | sudo usermod -s /bin/bash username | usermod 的 -s 选项用于指定用户登录时使用的 shell。这里将用户 username 的登录 shell 设置为 /bin/bash 。 |
查看用户信息 - 显示当前用户 | whoami | 该命令会显示当前登录系统的用户的用户名。 |
查看用户信息 - 显示系统中所有用户 | who | 此命令会显示当前登录到系统的所有用户的相关信息,包括用户名、登录终端、登录时间等。 |
查看用户信息 - 显示当前登录系统的用户列表 | users | 该命令会以简洁的方式列出当前登录到系统的所有用户的用户名。 |
对ueradd的参数详细讲解:
1. -c
:加上备注文字
sudo useradd -c "This is a test user" testuser
解释:此命令创建了一个名为 testuser
的新用户,并且添加了备注信息 “This is a test user”。你可以通过查看 /etc/passwd
文件中该用户的记录,在对应字段看到添加的备注内容。
2. -d
:指定新账户的主目录
sudo useradd -d /home/newtestuser testuser2
解释:该命令创建了用户 testuser2
,并将其主目录指定为 /home/newtestuser
。默认情况下,useradd
会为用户在 /home
目录下创建以用户名命名的主目录,但使用 -d
选项可以自定义主目录位置。
3. -g
:指定新账户主组的名称或 ID
# 通过组名指定
sudo useradd -g staff testuser3
# 通过组 ID 指定
sudo useradd -g 1001 testuser4
解释:
第一条命令创建用户 testuser3
,并将其主组设置为 staff
组。
第二条命令创建用户 testuser4
,将其主组设置为 ID 为 1001
的组。可以通过 /etc/group
文件查看组名和对应的组 ID。
4. -G
:设置新账户的附加组列表
sudo useradd -G staff,developers testuser5
解释:此命令创建了用户 testuser5
,并将其添加到 staff
和 developers
这两个附加组中。除了主组外,用户可以属于多个附加组,从而拥有这些组的相关权限。
5. -p
:设置加密后的新账户密码
# 假设加密后的密码是通过 openssl passwd -1 生成的
encrypted_password=$(openssl passwd -1 "password123")
sudo useradd -p "$encrypted_password" testuser6
解释:首先使用 openssl passwd -1
命令生成了密码 “password123” 的加密形式,然后将其作为参数传递给 -p
选项,为新创建的用户 testuser6
设置了加密后的密码。
6. -M
:不创建用户的主目录
sudo useradd -M testuser7
解释:该命令创建了用户 testuser7
,但不会为其创建默认的主目录。在某些场景下,如用户不需要在系统上有个人存储目录时可以使用此选项。
1.4群组管理操作(掌握)
经典四大件:增删改查
要求熟练掌握:增删改查操作
操作类型 | 命令及示例 | 详细解释 |
---|---|---|
添加组 | sudo groupadd groupname 示例: sudo groupadd developers | groupadd 是用于在 Linux 系统中创建新用户组的命令。使用 sudo 以超级用户权限执行此命令,确保有足够的权限进行操作。groupname 是要创建的组的名称,如示例中的 developers 组。执行该命令后,系统会在 /etc/group 文件中添加一条新的记录,记录该组的相关信息。 |
删除组 | sudo groupdel groupname 示例: sudo groupdel developers | groupdel 用于删除指定的用户组。同样需要 sudo 权限。groupname 是要删除的组的名称,如示例中的 developers 组。执行该命令时,系统会检查该组是否有用户属于它,如果有用户属于该组,通常不能直接删除,需要先将用户从该组移除或转移到其他组。删除成功后, /etc/group 文件中对应的组记录会被移除。 |
将用户添加到组 | sudo usermod -aG groupname username 示例: sudo usermod -aG developers john | usermod 用于修改用户的属性。-aG 选项表示将用户添加到一个附加的组,而不是主要组。-G 用于指定要将用户添加到的组,-a 表示追加,即把用户添加到指定组作为附加组,而不是替换其主要组,-g 则是添加到主组。groupname 是目标组的名称,username 是要添加到组的用户的名称,如示例中将用户 john 添加到 developers 组作为附加组。执行该命令后,用户会获得该组的相关权限。 |
从组中移除用户 | sudo gpasswd -d username groupname 示例: sudo gpasswd -d john developers | gpasswd 用于管理用户组的密码和成员。-d 选项表示从指定组中删除用户。username 是要从组中移除的用户的名称,groupname 是目标组的名称,如示例中将用户 john 从 developers 组中移除。执行该命令后,用户将不再拥有该组的相关权限。 |
查看组成员 | groups username 示例: groups john | groups 命令用于显示指定用户所属的所有组。username 是要查看其所属组的用户的名称,如示例中查看用户 john 所属的所有组。执行该命令后,系统会列出该用户所属的所有组的名称。 |
为群组某一成员(如YXS)设置root权限(修改/etc/sudoers)
[root@@localhost ~]#visudo
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
YXS ALL=(ALL) ALL
root ALL=(ALL) ALL
:这是一个sudo
规则。第一个root
表示用户名,即此规则针对root
用户;ALL
表示该用户可以从任何主机登录;(ALL)
表示该用户可以以任何用户身份执行命令;最后的ALL
表示该用户可以执行任何命令。这条规则意味着root
用户可以不受限制地执行任何sudo
命令。YXS ALL=(ALL) ALL
:这也是一个sudo
规则。YXS是用户名,此规则表示用户 YXS 可以从任何主机登录,并且可以以任何用户身份执行任何命令。即用户YXS拥有和root
一样的sudo
权限,在执行需要sudo
授权的命令时,等同于root
权限(前提是输入正确密码等满足验证条件 )。 这样设置后,用户YXS就可以在系统中执行一些原本只有root
权限才能进行的操作,如安装软件、修改系统配置文件等 。不过这种赋予全部权限的设置需要谨慎,因为如果用户YXS 账户被恶意利用,可能会对系统安全造成严重威胁 。
如何限制群组成员的权限 (修改/etc/sudoers)
例子:
对于Z用户和L用户进行限制,允许Z用户可以执行/usr/bin、/bin下面的所有命令,限制Z用户不可以修改其他用户的密码和kill其他用户的进程,L用户可以使用/bin目录下面所有命令,但是不能修改其他用户的密码以及kill其他用户的进程和使用nmcli命令
1. 为 Zhang 用户设置权限
使用 visudo
命令在 /etc/sudoers.d
目录下创建与用户同名的策略文件并进行配置:
sudo visudo -f /etc/sudoers.d/Z
在打开的文件中添加如下内容:
Z ALL=(ALL) /usr/bin/*, /bin/*, !/usr/bin/passwd, !/bin/kill
解释:
-
Z
:用户名,表明该规则针对用户 Z。 -
ALL=(ALL)
:表示 Z可以从任何主机登录,并且可以以任何用户身份执行命令。 -
/usr/bin/*, /bin/*
:允许 Z 执行/usr/bin
和/bin
目录下的所有命令 。 -
!/usr/bin/passwd, !/bin/kill
:!
符号表示禁止,即不允许 Z 执行/usr/bin/passwd
(修改其他用户密码 )和/bin/kill
(终止其他用户进程 )命令。
2. 为 L 用户设置权限
同样使用 visudo
命令创建策略文件:
sudo visudo -f /etc/sudoers.d/L
在打开的文件中添加以下内容:
L ALL=(ALL) /bin/*, !/usr/bin/passwd, !/bin/kill, !/usr/bin/nmcli
解释:
-
L
:用户名,此规则针对用户 L。 -
ALL=(ALL)
:意味着 L 可以从任何主机登录,且能以任何用户身份执行命令。 -
/bin/*
:允许 Li 执行/bin
目录下的所有命令。 -
!/usr/bin/passwd, !/bin/kill, !/usr/bin/nmcli
:禁止 Li 执行/usr/bin/passwd
(修改其他用户密码 ) 、/bin/kill
(终止其他用户进程 )以及/usr/bin/nmcli
命令。
1.5 几个特殊的命令 setuid(SUID)、setgid(SGID)和Sticky Bit(SBID)
1.5.1 setuid(SUID)
作用:
- 当用户执行设置了SUID的二进制文件时,进程将以文件所有者的身份运行,而非执行者的身份。
- 仅对可执行文件有效,脚本通常不继承SUID(出于安全考虑)。
典型场景:
例如/usr/bin/passwd
命令,普通用户执行时,临时获得root权限以修改受保护的/etc/shadow
文件。
设置方法:
符号模式:chmod u+s <file>
数字模式:在权限前加4
,如chmod 4755 <file>
(权限为-rwsr-xr-x
)。
查看权限:
ls -l
中所有者的执行位显示为s
(若同时有执行权限)或S
(无执行权限)。
说明:
- 只有命令才能被设定setuid权限,其他文件和Shell脚本不能;
- 只有具有可执行权限的命令,才能设置setuid ;
- setuid权限,能够使命令的执行者在执行该命令时,自动获取该命令所有者身份,且只在命令执行过程中有效;
1.5.2 setgid(SGID)(共享文件)
作用:
对文件:执行时进程的有效组变为文件的所属组。
对目录:在该目录下新建的文件或子目录,继承目录的所属组(而非用户的主组)。
典型场景:
共享目录(如/data/team
)设置SGID后,所有新建文件自动归属团队组,便于协作。
设置方法:
符号模式:chmod g+s <目录或文件>
数字模式:在权限前加2
,如chmod 2775 <dir>
(权限为drwxr-sr-x
)。
查看权限:
ls -l
中组的执行位显示为s
或S
。
说明:
- 设置setgid的目录时,前提用户对该目录具有r和x;
- 用户进入此目录有,被赋予该目录的用户组身份;
- 若用户在此目录下具有w,则创建的文件和目录,将属于此目录的用户组。
1.5.3 Sticky Bit(SBID)
2.文件/目录操作 (10%-20%左右)
2.1文件基础知识汇总
类别 | 内容 | 说明 | 重点 |
---|---|---|---|
文件类型 | 普通文件 (- ) | 文本、二进制、图像等常规文件。 | ✔️ 最常见类型 |
目录 (d ) | 存储文件和其他目录的容器。 | ✔️ 使用 mkdir 创建 | |
符号链接 (l ) | 指向其他文件/目录的快捷方式。 | ✔️ 使用 ln -s 创建 | |
字符设备文件 (c ) | 按字符流处理的设备(如终端 /dev/tty )。 | ||
块设备文件 (b ) | 按块处理的设备(如硬盘 /dev/sda )。 | ||
套接字 (s ) | 进程间通信文件。 | ||
管道 (p ) | 进程间单向通信。 | ||
权限与所有权 | 用户权限 (rwx ) | 所有者权限:读(r)、写(w)、执行(x)。 | ✔️ 权限管理核心 |
组权限 (rwx ) | 所属用户组的权限。 | ||
其他用户权限 (rwx ) | 其他用户的权限。 | ✔️ 安全关键点 | |
权限数字表示法 | r=4 , w=2 , x=1 (如 755 表示 rwxr-xr-x )。 | ✔️ 常用 chmod 755(目录) | |
所有者与所属组 | 通过 chown 和 chgrp 修改文件所有者和组。 | ||
目录结构 | / (根目录) | 所有目录和文件的起点。 | ✔️ 绝对路径起点 |
/bin 和 /usr/bin | 基础命令和用户命令的二进制文件。 | ✔️ 常用命令存放位置 | |
/etc | 系统配置文件(如网络配置、用户信息)。 | ✔️ 关键配置文件位置 | |
/home | 普通用户的家目录。 | ✔️ 用户文件默认位置 | |
/root | 超级用户的家目录。 | ||
/var | 可变数据(如日志、数据库)。 | ✔️ 日志文件存放位置 | |
路径类型 | 绝对路径 | 从根目录开始的完整路径(如 /home/user/file.txt )。 | ✔️ 精确指向文件 |
相对路径 | 相对于当前目录的路径(如 ./file.txt 或 ../folder )。 | ✔️ 灵活但需注意当前目录 | |
链接类型 | 硬链接 | 直接指向文件数据的多个入口,共享inode,不能跨文件系统。 | ✔️ 修改同步,删除不影响原文件 |
符号链接(软链接) | 存储目标路径的快捷方式,可跨文件系统,原文件删除后失效。 | ✔️ 常用,类似Windows快捷方式 | |
常用命令 | ls -l | 查看文件详细信息(类型、权限、所有者等)。 | ✔️ 基础命令 |
chmod | 修改 文件权限(如 chmod 755 file )。 | ✔️ 权限管理核心命令 | |
chown | 修改文件所有者(如 chown user:group file )。 | ||
mkdir /rmdir | 创建/删除目录。 | ||
touch | 创建空文件或更新文件时间戳。 | ||
cp /mv /rm | 复制/移动/删除文件。 | ✔️ 高频操作命令 | |
ln | 创建链接(ln file hardlink 或 ln -s file softlink )。 | ✔️ 区分硬链接和软链接 |
2.2基础命令汇总(重点掌握红色标记的)
类别 | 命令 | 语法/示例 | 说明 | 重点 |
---|---|---|---|---|
文件操作 | ls | ls -l (详细信息)ls -a (包含隐藏文件) | 列出目录内容。-l 显示权限、所有者、大小等。 | ✔️ 最基础命令,-l 必学 |
cd | cd /path (切换目录)cd .. (返回上级目录) | 切换工作目录。 | ✔️ 路径操作核心 | |
cp | cp file1 file2 cp -r dir1 dir2 (复制目录) | 复制文件或目录。 | ✔️ -r 用于目录复制 | |
mv | mv old.txt new.txt mv file /target (移动文件) | 移动或重命名文件。 | ✔️ 高频操作 | |
rm | rm file rm -r dir (删除目录)rm -f (强制删除) | 删除文件或目录。慎用! | ✔️ -r 和-f 需谨慎 | |
mkdir | mkdir dirname mkdir -p dir1/dir2 (递归创建) | 创建目录。 | ||
touch | touch file.txt | 创建空文件或更新文件时间戳。 | ||
cat | cat file.txt cat file1 > file2 (合并内容) | 查看或拼接文件内容。 | ✔️ 快速查看文件 | |
more /less | more file.txt less file.txt (支持上下滚动) | 分页查看长文件内容。 | ✔️ less 功能更强大 | |
find | find /path -name "*.txt" find . -type f (搜索文件) | 根据名称、类型等查找文件。 | ✔️ 高级搜索必备 | |
权限管理 | chmod | chmod 755 file chmod u+x file (添加执行权限) | 修改文件权限(用户/组/其他)。 | ✔️ 权限控制核心命令 |
chown | chown user:group file | 修改文件所有者和所属组。 | ✔️ 权限分配关键 | |
chgrp | chgrp group file | 修改文件所属组。 | ||
系统监控 | top | top | 实时监控系统进程和资源占用(CPU、内存等)。 | ✔️ 性能分析工具 |
ps | ps aux (查看所有进程)ps -ef | grep "nginx" | 显示当前进程状态。 | ✔️ 进程管理常用 | |
df | df -h (以易读格式显示) | 查看磁盘空间使用情况。 | ✔️ 磁盘管理必备 | |
free | free -h | 查看内存使用情况。 | ||
uname | uname -a (显示全部系统信息) | 查看系统内核信息。 | ||
网络操作 | ping | ping example.com | 测试网络连通性。 | ✔️ 网络故障排查 |
curl /wget | curl -O http://example.com/file wget http://example.com/file | 从网络下载文件。 | ✔️ 常用下载工具 | |
ssh | ssh user@host | 远程登录服务器。 | ✔️ 远程管理核心 | |
scp | scp file user@host:/path (上传)scp user@host:/path/file . (下载) | 安全复制文件(基于SSH)。 | ✔️ 跨服务器传输文件 | |
netstat | netstat -tuln (查看端口监听状态) | 显示网络连接、路由表等信息。 | ||
软件管理 | yum /dnf (RHEL) | yum install package dnf remove package | RHEL/CentOS/Fedora包管理工具。 | ✔️ RHEL系必学 |
进程管理 | kill | kill -9 PID (强制终止进程) | 终止指定进程(kill 只是发送信号)。 | ✔️ 强制终止进程 |
killall | killall process_name | 终止所有同名进程。 | ||
bg /fg | bg (后台运行)fg %1 (前台恢复任务1) | 控制后台/前台任务。 | ||
压缩与解压 (了解) | tar | tar -cvf archive.tar dir (打包)tar -xvf archive.tar (解包) | 归档和解压文件。 | ✔️ 常用参数-c/x/v/z |
gzip /gunzip | gzip file (压缩)gunzip file.gz (解压) | 压缩/解压.gz 文件。 | ||
zip /unzip | zip archive.zip file unzip archive.zip | 压缩/解压.zip 文件。 | ||
搜索与过滤 | grep | grep "text" file grep -r "text" /dir (递归搜索) | 在文件中搜索文本模式。 | ✔️ 文本处理核心工具 |
find | find / -name "*.log" -mtime +7 (查找7天前的日志文件) | 根据条件(名称、时间等)查找文件。 | ✔️ 高级文件搜索 | |
locate | locate file.txt | 快速查找文件(依赖数据库更新)。 | ||
用户管理 | useradd | useradd username useradd -m username (创建家目录) | 添加新用户。 | ✔️ 系统管理员常用 |
passwd | passwd username | 修改用户密码。 | ||
su /sudo | su - username (切换用户)sudo command (以root权限执行) | 切换用户或提权操作。 | ✔️ 权限提升核心 | |
其他实用命令 | echo | echo "Hello" echo $PATH (输出环境变量) | 输出文本或变量内容。 | |
man | man ls | 查看命令手册。 | ✔️ 学习命令的权威文档 | |
history | history !100 (执行历史记录第100条命令) | 查看或重用命令历史。 | ||
alias | alias ll='ls -l' | 创建命令别名。 | ✔️ 提升效率的小技巧 |
2.3文件/目录管理(掌握)
2.3.1 ls 命令
要求:明确ls 命令的用法,并且能看懂ls 的结果(蓝色标记重点)
ls命令用于列出指定目录的目录内容;如果未指定目录,则列出当前目录的内容。
参数 | 说明 | 示例 | 输出解析 | 重点 |
---|---|---|---|---|
无参数 | 列出当前目录的非隐藏文件(短格式)。 | ls | 显示文件名列表,按字母顺序排列。 | 基础查看 |
-a | 显示所有文件(含隐藏文件,以 . 开头的文件)。 | ls -a 输出: . .. file.txt .hidden | . 表示当前目录,.. 表示上级目录,.hidden 是隐藏文件。 | ✔️ 查看隐藏文件 |
-l | 以长格式显示详细信息。 | ls -l 输出: -rwxr--r-- 1 user group 1.2K Sep 1 10:00 file.txt | 各列含义: 1. 权限(如 -rwxr--r-- )2. 硬链接数 3. 所有者 4. 所属组 5. 文件大小(默认字节) 6. 最后修改时间 7. 文件名 | ✔️ 核心参数,必学 |
-R | 递归列出子目录内容(常用于遍历多层目录结构)。 | ls -R dir 输出: dir/file1 dir/subdir: subdir/file2 | 按层级显示目录及其子目录内容。 | ✔️ 目录结构分析 |
-h | 与 -l 结合使用,以易读格式显示文件大小(如 KB、MB)。 | ls -lh 输出: -rw-r--r-- 1 user group 1.2K Sep 1 10:00 file.txt | 将字节转换为 K 、M 、G ,便于阅读。 | ✔️ 文件大小直观化 |
-t | 按修改时间排序(最新文件在前)。 | ls -lt | 常用于快速查找最新修改的文件。 | 时间排序 |
-S | 按文件大小排序(从大到小)。 | ls -lS | 结合 -l 查看大文件。 | 空间管理 |
-d | 仅显示目录本身(而非其内容),常用于查看目录属性。 | ls -ld dir 输出: drwxr-xr-x 2 user group 4.0K Sep 1 10:00 dir | 避免递归显示子目录内容。 | 目录属性查看 |
-i | 显示文件的 inode 编号(唯一标识文件系统对象)。 | ls -i 输出: 123456 file.txt |
示例:
# 执行ls -l命令
ls -l
total 16
drwxr-xr-x 2 user group 4096 May 6 10:00 dir1
-rw-r--r-- 1 user group 1024 May 6 10:00 file1.txt
-rw-r--r-- 1 user group 2048 May 6 10:00 file2.txt
解析:
total 16
:表示当前目录下所有文件和子目录占用的磁盘块总数。- 第一列(如
drwxr-xr-x
):表示文件的权限和类型。d
表示目录,-
表示普通文件;后面的 9 个字符分为三组,分别表示所有者、所属组和其他用户的读(r
)、写(w
)、执行(x
)权限。 - 第二列(如
2
):表示文件的硬链接数。 - 第三列(如
user
):表示文件的所有者。 - 第四列(如
group
):表示文件所属的组。 - 第五列(如
4096
):表示文件的大小(以字节为单位)。 - 第六列(如
May 6 10:00
):表示文件的最后修改时间。 - 最后一列(如
dir1
):表示文件或目录的名称。
2.3.2 pwd命令
(1)每个shell和系统进程都有一个当前的工作目录。
(2)CWD当前工作目录:current work directory。
(3)pwd命令可以显示当前shell CWD的绝对路径。
2.3.3 cd命令
语法格式 | 说明 | 权限要求 | 示例 |
---|---|---|---|
1. cd pathname | 切换到指定路径(支持绝对路径或相对路径)。 | 需有目录的 x 执行权限 | cd /var/log cd ../downloads |
2. cd 或 cd ~ | 切换到当前用户的家目录(等价于 cd $HOME )。 | 无需额外权限 | cd → 进入 /home/user |
3. cd ~USERNAME | 切换到指定用户的家目录(如 ~root 为 /root ,~nginx 为 /var/www 等)。 | 需管理员权限(sudo ) | sudo cd ~root → 进入 /root (普通用户无权直接访问) |
4. cd - | 切换到前一个工作目录(类似“返回”功能)。 | 需前目录有权限 | cd /opt → cd /var → cd - → 返回 /opt |
5. cd -P DIR | 切换到物理路径(忽略符号链接,直接进入实际路径)。 | 需目录的 x 权限 | 若 link_dir 是符号链接:cd -P link_dir → 进入目标真实目录而非链接路径 |
2.3.4 mkdir命令
mkdir
命令基础
-
全称:Make Directory(创建目录)
-
作用:在指定路径创建新目录,支持单层或多级目录结构。
-
默认行为:若父目录不存在,直接报错;目录权限由
umask
决定。
参数 | 说明 | 示例 |
---|---|---|
无参数 | 创建单层目录,若父目录不存在则报错。 | mkdir dir1 → 创建 dir1 |
-p | 自动创建所需父目录(递归创建),目录已存在时不报错。 | mkdir -p a/b/c → 创建 a 、a/b 、a/b/c (即使 a 或 b 不存在) |
-v | 显示详细操作信息(Verbose),报告每个创建的目录。 | mkdir -v dir2 → 输出:mkdir: created directory 'dir2' |
-m MODE | 直接指定目录权限(无需依赖 umask ),使用数字模式(如 755 )。 | mkdir -m 700 private → 创建权限为 rwx------ 的目录 private |
例子:
场景 1:递归创建多级目录(-p
参数)
$ mkdir -p project/{src,doc,test}
-
解析:
创建目录结构如下:project/
├── src/
├── doc/
└── test/ -
注意:
若project
已存在,直接创建子目录;若不存在,先创建project
再创建子目录。
场景 2:显示详细信息(-v
参数)
$ mkdir -pv logs/{2023,2024}/quarter{1..2}
mkdir: created directory 'logs'
mkdir: created directory 'logs/2023'
mkdir: created directory 'logs/2023/quarter1'
mkdir: created directory 'logs/2023/quarter2'
mkdir: created directory 'logs/2024'
mkdir: created directory 'logs/2024/quarter1'
mkdir: created directory 'logs/2024/quarter2'
-
作用:明确显示每个被创建的目录,便于调试或确认操作结果。
场景 3:指定目录权限(-m
参数)
$ mkdir -m 750 shared_dir
$ ls -ld shared_dir
drwxr-x--- 2 user group 4096 Sep 5 15:30 shared_dir
-
解析:
-
750
权限表示:-
所有者:
rwx
(7) -
所属组:
r-x
(5) -
其他用户:无权限(0)
-
-
常用于创建需严格控制的目录(如团队共享目录)。
-
组合使用参数
$ mkdir -pm 755 /opt/app/{config,data,logs}
-
效果:
-
递归创建
/opt/app
及其子目录config
、data
、logs
。 -
所有新目录权限设为
755
(rwxr-xr-x
)。
-
权限对照表
数字模式 | 符号权限 | 说明 |
---|---|---|
|
| 仅所有者可读写执行。 |
|
| 所有者全权,其他用户只读。 |
|
| 所有用户全权(慎用!)。 |
2.3.5 touch命令
touch
命令基础
-
作用:
-
创建空文件(若文件不存在)。
-
更新文件时间戳(访问时间
atime
、修改时间mtime
、元数据变更时间ctime
)。
-
-
默认行为:
-
若文件存在,更新
atime
和mtime
为当前时间。 -
若文件不存在,创建空文件并设置时间戳为当前时间。
-
命令语法与参数解析
参数 | 说明 | 示例 |
---|---|---|
无参数 | 创建空文件(若不存在)或更新现有文件的 |
|
| 仅更新 |
|
| 仅更新 |
|
| 不创建新文件(仅更新时间戳)。 |
|
| 指定自定义时间戳(支持多种时间格式)。 |
|
| 同步其他文件的时间戳(复制参考文件的时间)。 |
|
时间戳类型说明
时间戳 | 全称 | 触发条件 | 查看方式 |
---|---|---|---|
atime | Access Time | 文件被读取(如 |
|
mtime | Modification Time | 文件内容被修改(如写入数据)。 |
|
ctime | Change Time | 文件元数据变更(如权限、所有者、链接数等)。 |
|
示例与场景分析
场景 1:创建空文件
$ touch file1.txt file2.txt # 创建两个空文件
$ ls -l
-rw-r--r-- 1 user group 0 Sep 6 10:00 file1.txt
-rw-r--r-- 1 user group 0 Sep 6 10:00 file2.txt
场景 2:更新时间戳
# 仅更新访问时间 (atime)
$ touch -a file.txt
$ stat file.txt
Access: 2023-09-06 10:05:00.000000000 +0800# 仅更新修改时间 (mtime)
$ touch -m file.txt
$ stat file.txt
Modify: 2023-09-06 10:05:00.000000000 +0800
场景 3:自定义时间戳
# 设置文件时间为 2023 年 1 月 1 日
$ touch -m --date="2023-01-01" tsttime
$ stat tsttime
Modify: 2023-01-01 00:00:00.000000000 +0800# 使用复杂时间格式
$ touch --date="2023-12-31 23:59:59" deadline.txt
$ stat deadline.txt
Modify: 2023-12-31 23:59:59.000000000 +0800# 使用相对时间
$ touch --date="2 days ago" oldfile.txt
$ stat oldfile.txt
Modify: 2023-09-04 10:00:00.000000000 +0800
场景 4:同步其他文件时间戳
$ touch -r source.txt target.txt # 使 target.txt 时间与 source.txt 一致
$ stat source.txt target.txt
Modify: 2023-09-05 08:00:00.000000000 +0800 (source.txt)
Modify: 2023-09-05 08:00:00.000000000 +0800 (target.txt)
时间格式支持
--date
参数支持多种时间字符串格式:
-
绝对时间:
"2023-01-01"
、"2023/01/01 12:00:00"
-
相对时间:
"yesterday"
、"2 hours ago"
、"next Monday"
-
时间戳:
"@1622505600"
(Unix 时间戳,秒数)。
注意事项
更新时间戳需对文件有写权限。
创建文件需对目录有写权限。
常用组合命令
用途 | 命令示例 |
---|---|
批量创建文件 |
|
快速更新所有文件时间戳 |
|
修复文件时间 |
|
2.3.6 cp 命令
功能:复制文件或目录。
核心选项:
-
-R
/-r
:递归复制目录(包括子目录和文件)。 -
-f
:强制覆盖已存在的目标文件(不提示用户)。 -
-i
:覆盖前询问用户(与-f
冲突,默认行为可能因系统配置不同)。 -
示例:
# 复制文件 file1 到 file2 cp file1.txt file2.txt# 复制目录 dir1 到 dir2(递归复制) cp -r dir1 dir2# 强制复制文件,覆盖已存在的目标 cp -f source.txt destination.txt# 复制多个文件到目录(目标目录必须存在) cp file1.txt file2.txt /target_dir/
2.3.7 mv 命令
mv
(移动/重命名文件或目录)
-
功能:移动文件/目录,或重命名。
-
特点:
-
默认直接覆盖目标文件(无确认提示)。
-
若目标为目录且存在,则将源移动到该目录;若不存在,则重命名。
-
-
示例:
# 重命名文件 mv old_name.txt new_name.txt# 移动文件到目录(目标目录必须存在) mv file.txt /target_dir/# 移动并重名文件到目录 mv file.txt /target_dir/new_file.txt# 移动多个文件到目录 mv file1.txt file2.txt /target_dir/# 移动目录 dir1 到 dir2(若 dir2 存在,dir1 成为其子目录) mv dir1 dir2
2.3.8 rm 命令
rm
(删除文件/目录)
-
功能:删除文件或目录。
-
核心选项:
-
-r
/-R
:递归删除目录(包括子目录和文件)。 -
-f
:强制删除(忽略不存在的文件,无确认提示)。 -
-i
:删除前确认(与-f
冲突)。
-
-
示例:
# 删除文件 rm file.txt# 删除目录(必须用 -r) rm -r dir1# 强制删除目录(无提示) rm -rf dir1# 删除当前目录下所有内容(危险!) rm -rf *
2.4 文件/目录的查找与筛选(掌握)
2.4.1. 核心命令
命令 | 核心功能 | 适用场景 | 关键特性 |
---|---|---|---|
grep | 在文本内容中搜索匹配模式 | 日志分析、代码搜索、文本过滤 | 支持正则表达式、递归搜索 |
find | 根据属性查找文件或目录 | 清理旧文件、批量操作、应急排查 | 多条件组合、支持复杂逻辑 |
cat | 查看文件内容或合并文件 | 快速预览、数据拼接、内容重定向 | 简单高效、支持管道操作 |
2.4.2. 常用选项与示例
命令 | 核心选项 | 示例 | 功能解析 |
---|---|---|---|
grep | -i (忽略大小写) | grep -i "error" log.txt | 在 log.txt 中查找所有包含 "error"(不区分大小写)的行 |
-r (递归搜索) | grep -r "TODO" ~/projects | 递归搜索 ~/projects 目录下所有文件中包含 "TODO" 的内容 | |
-n (显示行号) | grep -n "#include" main.c | 在 main.c 中查找 #include 并显示匹配行号 | |
-v (反向匹配) | grep -v "^#" config.conf | 过滤掉 config.conf 中所有以 # 开头的注释行 | |
find | -name (按名称匹配) | find /var/log -name "*.log" | 查找 /var/log 目录下所有 .log 文件 |
-mtime (按时间过滤) | find /backup -mtime +30 -delete | 删除 /backup 下 30 天前修改的文件 | |
-exec (执行操作) | find . -type f -name "*.tmp" -exec rm {} \; | 删除当前目录下所有 .tmp 文件 | |
-size (按大小过滤) | find /data -size +100M -size -1G | 查找 /data 下大小在 100MB 到 1GB 之间的文件 | |
cat | 查看文件内容 | cat config.ini | 直接显示 config.ini 的内容 |
合并文件 | cat file1.txt file2.txt > combined.txt | 将 file1.txt 和 file2.txt 合并为 combined.txt | |
创建文件 | cat > newfile.txt (输入内容后按 Ctrl+D 保存) | 创建 newfile.txt 并写入用户输入的内容 | |
显示行号 | cat -n script.sh | 查看 script.sh 并显示行号 |
2.4.3. 典型场景示例分析
场景 1:日志分析(grep
与 cat
结合)
cat access.log | grep "404" | grep -v "robots.txt"
- 功能:从
access.log
中筛选所有404
错误,并排除与robots.txt
相关的请求。 - 解析:
cat
输出日志内容;- 第一个
grep
匹配404
状态码; - 第二个
grep -v
反向过滤掉无关条目
场景 2:清理旧文件(find
高级用法)
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
- 功能:查找
/var/log
下 7 天前的日志文件并压缩。 - 解析:
-name
和-mtime
组合过滤目标文件;-exec gzip
对匹配文件执行压缩操作
场景 3:快速创建配置文件(cat
重定向)
cat > settings.conf << EOF
[Database]
host=localhost
user=admin
password=secret
EOF
- 功能:通过重定向直接生成
settings.conf
文件。 - 解析:
<< EOF
指定输入结束符;- 输入内容自动保存到文件
2.4.4. 核心要点总结
命令 | 核心优势 | 适用操作 | 注意事项 |
---|---|---|---|
grep | 正则表达式支持、多文件递归搜索 | 文本过滤、模式匹配 | 复杂正则需用 -E 或 -P 选项 |
find | 多条件组合、支持批量操作 | 文件查找、清理、权限管理 | 慎用 -delete 避免误删 |
cat | 快速预览、简单合并 | 内容查看、数据拼接 | 大文件建议用 less 分页查看 |
2.4.5. 工具联动示例(了解)
find /var/www -type f -name "*.php" -exec grep -Hn "mysql_connect" {} \;
- 功能:递归查找所有
.php
文件,并搜索包含mysql_connect
的行。 - 解析:
find
定位文件;grep -Hn
显示文件名、行号和匹配内容
2.4.6 高级文件/目录筛选--正则表达式(掌握)
grep
命令核心功能
grep
(Global Regular Expression Print)是 Linux/Unix 系统中用于文本模式匹配的工具,支持基本正则表达式(BRE)和扩展正则表达式(ERE),能快速搜索文件或输入流中符合特定模式的行
基本语法:
grep [选项] "正则表达式" 文件
正则表达式核心语法
正则表达式是描述文本模式的字符串,通过元字符和语法规则实现灵活匹配。以下是关键语法规则:
1. 基础元字符
-
^
:匹配行首(如^abc
匹配以 "abc" 开头的行) -
$
:匹配行尾(如xyz$
匹配以 "xyz" 结尾的行) -
.
:匹配任意单个字符(如a.c
匹配 "abc"、"a1c" 等) -
*
:匹配前一个字符 0 次或多次(如go*gle
匹配 "ggle"、"gogle" 等) -
+
(需-E
):匹配前一个字符 1 次或多次(如go+gle
匹配 "gogle" 但排除 "ggle") -
?
(需-E
):匹配前一个字符 0 次或 1 次(如colou?r
匹配 "color" 和 "colour")
2. 字符类与范围
-
[abc]
:匹配括号内任意一个字符(如[aeiou]
匹配元音字母) -
[^abc]
:匹配不在括号内的字符(如[^0-9]
排除数字) -
[[:digit:]]
:预定义字符类(匹配数字,等效[0-9]
)
3. 分组与引用
-
()
:分组表达式(如(ab)+
匹配 "ab"、"abab" 等) -
\1
:引用第一个分组的匹配结果(如(a)\1
匹配 "aa")
4. 量词扩展
-
{n}
:精确匹配 n 次(如o{2}
匹配 "oo") -
{n,m}
:匹配 n 到 m 次(如a{2,4}
匹配 "aa"、"aaa"、"aaaa")
grep
常用选项
-
-i
:忽略大小写(如grep -i "error" log.txt
) -
-v
:反向匹配(显示不包含模式的行) -
-r
:递归搜索目录(如grep -r "TODO" /project
) -
-n
:显示匹配行的行号 -
-E
:启用扩展正则表达式(等效egrep
) -
-o
:仅输出匹配的内容(如提取 IP 地址) -
-A
/-B
/-C
:显示匹配行的上下若干行(如-C2
显示前后 2 行)
典型应用场景
1. 基础搜索
-
查找包含特定字符串的行:
grep "error" log.txt
-
忽略大小写匹配:
grep -i "warning" system.log
2. 复杂模式匹配
-
匹配 IP 地址(使用扩展正则):
grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log
-
提取邮箱地址:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" emails.txt
3. 过滤与统计
-
排除注释行:
grep -v "^#" config.conf
-
统计匹配行数:
grep -c "success" report.csv
4. 文件与目录操作
-
递归搜索目录:
grep -r "function_name" src/
-
多文件批量处理:
grep "pattern" *.log # 搜索所有 .log 文件
高级技巧
联合其他命令
-
结合
find
定位文件后搜索:find /var/log -name "*.log" -exec grep "error" {} \;
-
管道处理输出:
cat data.txt | grep "keyword" | sort | uniq
正则表达式优化
-
精确匹配单词:
grep -w "word" file.txt # 匹配 "word" 而非 "wordpress"
-
使用预定义字符类:
grep "[[:space:]]" file.txt # 匹配包含空白字符的行
调试与可视化
-
高亮显示匹配内容:
grep --color=auto "pattern" file.txt
-
显示文件名与行号:
grep -Hn "pattern" *.log
2.4.7 管道符 | (掌握)
核心作用
管道符 |
是 Linux/Unix 系统中用于实现 命令间数据传递 的核心工具,其核心作用包括:
-
串联命令:将一个命令的标准输出(
stdout
)作为另一个命令的标准输入(stdin
),形成数据处理链 -
高效过滤与组合:通过多命令协作,实现复杂的数据处理逻辑(如过滤、排序、统计等)
-
进程间通信:基于匿名管道(Anonymous Pipe)实现进程间单向数据传输
基本语法与示例
1. 基础语法
command1 | command2 | command3 ...
-
规则:
-
仅传递
command1
的标准输出(stdout
),不传递错误输出(stderr
) -
数据流单向流动,读取后从管道中清除,不可逆
-
2. 典型用法示例
场景 | 示例命令 | 功能解析 |
---|---|---|
过滤内容 |
| 列出当前目录文件,筛选文件名含 |
统计数量 |
| 统计 |
多级处理 |
| 提取系统日志中的错误信息,同时输出到屏幕和文件 |
排序与去重 |
| 对文件内容排序并去重 |
2.5 文件/目录权限管理(掌握)
图片源自网络
内容分类 | 具体内容 |
---|---|
符号含义 | u: 所有者 g: 所有组 o: 其他人 a: 所有人 (u、g、o 的总和) |
方法 1 语法 | chmod [{ugo a}{+- =}{rwx}] 文件或目录 |
方法 1 - 增加权限示例 | u+x, u+r, u+w, g+w, g+r, o+r, a+r 等 |
方法 1 - 取消权限示例 | u-x, u-r, u-w, g-w, g-r, o-r, a-r 等 |
方法 1 - “=” 的含义 | 赋予给定权限,并取消其他所有权限(如原来 u 是 rwx,设置 u=r,u 就剩 r) |
方法 2 语法 | chmod [mode=421][文件或目录] |
方法 2 - 权限数值对应 | r=4 w=2 x=1 rwx=4+2+1=7 |
方法 2 - 无权限表示 | 数字 0 表示 |
方法 2 - 全开权限表示 | 数字 7 表示,即 7=4+2+1 |
2.6 向文件写入内容
2.6.1. 使用 echo
命令追加或覆盖内容(掌握)
-
覆盖写入:借助
>
重定向符号,可将echo
命令的输出覆盖写入到指定文件中。若文件不存在,会自动创建;若文件已存在,原内容会被新内容替代。
echo "这是新内容" > test.txt
在上述命令中,echo
输出的 “这是新内容” 会被覆盖写入到 test.txt
文件中。
-
追加写入:使用
>>
重定向符号,能把echo
命令的输出追加到指定文件的末尾。若文件不存在,同样会自动创建。
echo "追加的新内容" >> test.txt
此命令会将 “追加的新内容” 添加到 test.txt
文件的末尾。
2.6.2. 使用 cat
命令写入多行内容
-
覆盖写入:利用
cat
结合>
重定向符号,可实现多行内容的覆盖写入。输入完内容后,按Ctrl + D
结束输入。
cat > test.txt << EOF
第一行内容
第二行内容
EOF
这里,EOF
是自定义的结束符,你也可以使用其他字符串。输入完内容后,按 Ctrl + D
,这些内容就会被覆盖写入到 test.txt
文件中。
-
追加写入:使用
cat
结合>>
重定向符号,可将多行内容追加到文件末尾。
cat >> test.txt << EOF
追加的第一行内容
追加的第二行内容
EOF
输入完内容并按 Ctrl + D
后,这些内容会被追加到 test.txt
文件的末尾。
2.6.3. 使用文本编辑器写入内容
-
使用
vim
编辑器:vim
是一款功能强大的文本编辑器,常用于编辑和写入文件内容。
vim test.txt
执行上述命令后,会进入 vim
编辑器。按下 i
键进入插入模式,此时就可以输入内容了。输入完成后,按下 Esc
键退出插入模式,然后输入 :wq
并回车,即可保存并退出编辑器。
3.进程管理(5%-10%)
3.1 核心命令汇总(重点蓝色)
命令 | 用途 | 基本语法/常用选项 | 重点说明 | 示例分析 |
---|---|---|---|---|
ps | 查看当前进程快照 | ps [选项] | 常用组合 ps aux :显示所有用户的所有进程(含资源占用)。-e :显示全部进程。 | ps aux | grep nginx :查找所有与 nginx 相关的进程(如查看服务是否运行)。 |
top | 实时监控进程及系统资源 | top | 交互式命令:k :终止进程;M :按内存排序;P :按CPU排序。 | 运行 top 后按 P 查看CPU占用最高的进程,按 k 输入PID终止异常进程。 |
htop | 增强版 top (需安装) | htop | 可视化更强,支持鼠标操作和颜色标记。 | htop 中直接选中进程按 F9 发送信号终止。 |
kill | 终止进程 | kill [信号] PID | 常用信号:SIGTERM(15) :默认,优雅终止;SIGKILL(9) :强制终止(慎用)。 | kill -9 1234 :强制终止PID为1234的进程(用于进程无响应时)。 |
pkill | 按进程名终止进程 | pkill [选项] 进程名 | 模糊匹配进程名,支持正则表达式。 | pkill -f "python script.py" :终止所有包含 python script.py 的进程。 |
killall | 按进程名终止所有同名进程 | killall [信号] 进程名 | 精确匹配进程名(与 pkill 区别)。 | killall nginx :终止所有名为 nginx 的进程。 |
nice | 启动进程时指定优先级(-20~19,值越大越“谦让”) | nice -n <优先级> 命令 | 优先级调整:数值越低,CPU优先级越高(默认0)。 | nice -n 10 tar -zcf backup.tar.gz /data :以低优先级压缩文件,减少对系统影响。 |
renice | 修改运行中进程的优先级 | renice -n <优先级> -p PID | 需root权限调整其他用户的进程优先级。 | renice -n 5 -p 5678 :将PID 5678的进程优先级调整为5。 |
pgrep | 按名称查找进程PID | pgrep [选项] 进程名 | 常用于脚本中获取PID。 | pgrep -u root sshd :查找root用户运行的 sshd 进程PID。 |
pstree | 以树形结构显示进程关系 | pstree [选项] | 直观展示父子进程关系,适合分析进程依赖。 | pstree -p :显示带PID的进程树,查看某个进程的子进程。 |
jobs | 查看当前Shell的后台任务 | jobs | 结合 & 、bg 、fg 使用,管理后台任务。 | 运行 sleep 100 & 后,jobs 显示后台任务列表;fg 1 将任务1切换到前台。 |
nohup | 运行不受退出终端影响的进程 | nohup 命令 & | 脱离终端运行,输出默认保存到 nohup.out 。 | nohup python server.py & :启动一个持久运行的Python服务,即使关闭终端仍继续运行。 |
systemctl | 管理系统服务(systemd系统) | systemctl [动作] 服务名 | 核心操作:start /stop /restart /status /enable /disable 。 | systemctl status nginx :查看Nginx服务状态;systemctl restart sshd :重启SSH服务。 |
crontab | 管理定时任务 | crontab -e (编辑任务) | 格式:分钟 小时 日 月 周 命令 。 | crontab -e 添加 0 3 * * * /backup.sh :每天凌晨3点执行备份脚本。 |
lsof | 列出被进程打开的文件 | lsof [选项] | 常用选项:-i :查看网络连接;-p PID :按进程ID过滤。 | lsof -i :80 :查看占用80端口的进程;lsof -p 1234 :查看PID 1234打开的文件。 |
3.2监控与调试(掌握)
要求:知道命令的用法,并且可以看懂命令的结果
Linux 进程状态表格
状态符号 | 状态名称 | 描述 | 常见场景 |
---|---|---|---|
R | 运行/可运行 (Running) | 进程正在执行或等待CPU调度(就绪状态)。 | 执行计算密集型任务(如编译程序)或等待CPU时间片的进程。 |
S | 可中断睡眠 (Sleeping) | 进程等待事件完成(如用户输入、网络响应),可被信号唤醒。 | 等待用户输入的命令(如read )、等待网络请求的Web服务器进程。 |
D | 不可中断睡眠 (Uninterruptible Sleep) | 进程等待硬件操作完成(如磁盘I/O),无法被信号或kill 终止,需等待操作完成。 | 执行磁盘写入操作(如sync 命令)、内核级别的硬件交互。 |
T | 停止 (Stopped) | 进程被信号暂停(如SIGSTOP 、SIGTSTP ),可通过信号恢复(如SIGCONT )。 | 用户按下Ctrl+Z 暂停前台进程,调试器暂停进程进行断点分析。 |
Z | 僵尸 (Zombie) | 进程已终止,但父进程未回收其资源(如PID、退出状态),占用极少量系统资源。 | 父进程未正确处理子进程终止(编程缺陷),需由父进程调用wait() 回收或终止父进程解决。 |
X | 死亡 (Dead) | 进程完全终止,仅在内核中短暂存在,通常不可见。 | 进程结束后的最终状态,用户空间不可见。 |
t | 跟踪停止 (Tracing Stop) | 进程被调试器跟踪时暂停(如gdb 断点)。 |
top
/htop
:实时查看CPU、内存占用,快速定位资源瓶颈。
ps aux \| grep 进程名
:确认进程是否存在及运行状态。
3.2.1 ps
命令:进程快照
作用:显示当前系统中的进程状态(静态快照)。
常用语法:
ps aux # 显示所有用户的进程详细信息
ps -ef # 显示完整进程列表(含父进程PPID)
示例 1:ps aux
输出解析
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169316 13056 ? Ss Aug01 0:12 /sbin/init
nginx 1234 0.5 2.0 300000 20000 ? S Aug02 1:23 nginx: worker process
user 5678 2.0 0.5 250000 5000 pts/0 R+ 12:30 0:10 python script.py
字段说明:
-
USER:进程所有者。
-
PID:进程ID。
-
%CPU:CPU占用百分比。
-
%MEM:内存占用百分比。
-
VSZ:虚拟内存大小(KB)。
-
RSS:实际物理内存占用(KB)。
-
TTY:终端关联(
?
表示无终端,如守护进程)。 -
STAT:进程状态(如
S
=睡眠,R
=运行,+
=前台进程)。 -
START:进程启动时间。
-
TIME:累计CPU占用时间。
-
COMMAND:进程名称或命令行。
示例分析:
-
Nginx 进程(PID=1234):
-
CPU占用0.5%,内存2%,作为工作进程(
nginx: worker process
)运行。 -
状态
S
表示可中断睡眠(可能在等待网络请求)。
-
-
Python 脚本(PID=5678):
-
高CPU占用(2.0%),状态
R+
表示正在运行且是前台进程。 -
终端
pts/0
表示由用户通过SSH或终端直接启动。
-
示例 2:ps -ef
输出解析
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug01 ? 00:00:12 /sbin/init
root 567 1 0 Aug01 ? 00:00:05 /usr/lib/systemd/systemd-journald
nginx 1234 1233 0 Aug02 ? 00:01:23 nginx: worker process
字段说明:
-
PPID:父进程ID(如PID=1233是Nginx主进程)。
-
C:CPU利用率(粗略值)。
-
CMD:完整命令行(可能包含参数)。
实际应用:
-
查找父进程关系:
ps -ef | grep nginx
可查看Nginx主进程(PPID=1)及其子进程。
3.2.2. top
命令:实时进程监控
作用:动态显示系统资源使用情况和进程状态(实时刷新)。
基本操作:
top # 启动实时监控
按 `P` # 按CPU使用率排序
按 `M` # 按内存使用率排序
按 `k` # 终止指定PID的进程
按 `q` # 退出
top
输出解析
第一部分:系统资源概览(了解)
top - 14:20:30 up 10 days, 2:15, 2 users, load average: 0.50, 0.30, 0.20
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.6 us, 2.3 sy, 0.0 ni, 91.8 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7986.2 total, 1024.5 free, 4096.0 used, 2865.7 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 3560.2 avail Mem
关键字段:
-
load average:系统1/5/15分钟的平均负载(数值≈CPU核心数为理想状态)。
-
Tasks:进程总数及状态分布(运行、睡眠、停止、僵尸)。
-
%Cpu(s):
-
us
:用户空间CPU占用(如应用程序)。 -
sy
:内核空间CPU占用(如系统调用)。 -
wa
:I/O等待时间(高表示磁盘瓶颈)。 -
id
:空闲CPU百分比。
-
-
内存:总内存、空闲、已用、缓存使用情况。
-
Swap:交换空间使用量(高使用率可能表示物理内存不足)。
第二部分:进程列表
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5678 user 20 0 250000 5000 3000 R 20.0 0.1 0:10.05 python script.py
1234 nginx 20 0 300000 20000 10000 S 0.5 0.2 1:23.00 nginx: worker process1 root 20 0 169316 13056 8000 S 0.0 0.1 0:12.00 /sbin/init
关键字段:
-
PR:进程优先级(值越小优先级越高)。
-
NI:进程的“谦让度”(Nice值,范围-20~19,影响优先级越小表示优先级越高)。
-
VIRT:虚拟内存总量(KB)。
-
RES:实际物理内存占用(KB)。
-
SHR:共享内存大小(KB)。
-
S:进程状态(同
ps
的STAT)。 -
%CPU/%MEM:CPU/内存占用百分比。
-
TIME+:累计CPU时间(精确到百分之一秒)。
总结:ps
vs top
场景 | ps | top |
---|---|---|
用途 | 静态查看某一时刻的进程快照 | 实时监控进程及系统资源动态变化 |
输出更新 | 一次性输出,不刷新 | 默认每3秒刷新一次 |
交互性 | 无 | 支持按键排序、终止进程等操作 |
适用场景 | 快速查找进程信息(如PID、启动命令) | 实时诊断资源瓶颈(如CPU、内存占用高) |
3.3终止进程(掌握)
kill -9 PID
:强制终止无响应进程(可能导致数据丢失,慎用)。
pkill -f "pattern"
:批量终止匹配特定模式的进程。
kill
命令基础
-
作用:向进程发送信号(默认发送
SIGTERM
,请求进程终止)。 -
语法:
kill [选项] <PID> # 终止指定PID的进程 kill -<信号名或编号> <PID> # 发送特定信号
1.常用信号及作用(表格总结)
信号编号 | 信号名 | 默认行为 | 典型用途 | 示例场景 |
---|---|---|---|---|
1 | SIGHUP | 挂起 | 重新加载配置(守护进程常监听此信号以重载配置)。 | kill -1 1234 :通知Nginx重载配置文件(等效于 nginx -s reload )。 |
2 | SIGINT | 中断 | 键盘中断(等同于按 Ctrl+C ),请求进程终止。 | 前台进程按 Ctrl+C 终止时触发此信号。 |
9 | SIGKILL | 强制终止进程 | 立即杀死进程,无法被捕获或忽略(慎用,可能导致数据丢失)。 | kill -9 5678 :强制终止无响应的进程(如卡死的Python脚本)。 |
15 | SIGTERM | 默认终止信号 | 请求进程正常退出,允许进程清理资源(优雅终止)。 | kill 1234 或 kill -15 1234 :正常终止进程(推荐首选)。 |
18 | SIGCONT | 恢复进程执行 | 恢复被暂停的进程(与 SIGSTOP 配合使用)。 | kill -18 1234 :恢复PID 1234的进程(如被 Ctrl+Z 暂停的进程)。 |
19 | SIGSTOP | 暂停进程 | 立即暂停进程,不可被捕获或忽略(进程进入 T 状态)。 | kill -19 1234 :暂停进程(常用于调试或资源控制)。 |
3 | SIGQUIT | 终止并生成核心转储 | 类似 SIGINT ,但会触发核心转储(调试用途)。 | kill -3 1234 :调试时获取进程崩溃的堆栈信息。 |
20 | SIGTSTP | 暂停进程(可捕获) | 终端暂停信号(等同于按 Ctrl+Z ),进程可自定义处理。 | 按 Ctrl+Z 暂停前台进程,进程可执行清理操作后暂停。 |
示例场景分析
1. 优雅终止进程(SIGTERM)
kill 1234 # 发送SIGTERM(15)请求进程正常退出
-
适用场景:终止Web服务器(如Nginx)、数据库(如MySQL)等需要保存数据的进程。
-
优势:进程可执行清理操作(如关闭文件、释放连接)。
2. 强制终止无响应进程(SIGKILL)
kill -9 5678 # 强制终止PID 5678的进程
-
适用场景:进程卡死或拒绝响应
SIGTERM
。 -
风险:可能导致数据丢失或资源泄漏(如未保存的文件、未释放的锁)。
3. 重新加载服务配置(SIGHUP)
kill -1 1234 # 通知进程重载配置(如Nginx、Apache)
-
原理:守护进程(如Nginx)会监听
SIGHUP
信号并重新读取配置文件。
4. 暂停与恢复进程(SIGSTOP/SIGCONT)
kill -19 1234 # 暂停进程(进入停止状态) kill -18 1234 # 恢复进程运行
-
场景:临时释放CPU资源或调试进程状态。
3.4 服务管理/守护进程(掌握)
systemctl
:管理系统服务(如Web服务器、数据库)。
journalctl -u 服务名
:查看服务日志(配合systemctl使用)。
3.4.1 systemctl
核心功能
用于管理系统服务(启动、停止、重启)、查看状态、设置开机自启等,是 systemd
服务管理工具的核心命令。
3.4.2 常用命令及示例
1. 服务状态管理
命令 | 作用 | 示例分析 |
---|---|---|
systemctl start <服务名> | 启动服务 | systemctl start nginx :启动 Nginx Web 服务器。 |
systemctl stop <服务名> | 停止服务 | systemctl stop mysql :停止 MySQL 数据库服务。 |
systemctl restart <服务名> | 重启服务 | systemctl restart sshd :重启 SSH 服务(应用新配置)。 |
systemctl reload <服务名> | 重新加载配置 | systemctl reload nginx :重新加载 Nginx 配置(不中断服务)。 |
systemctl status <服务名> | 查看服务状态 | systemctl status docker :查看 Docker 服务是否运行及详细日志。 |
systemctl enable <服务名> | 设置开机自启 | systemctl enable httpd :设置 Apache 服务开机自动启动。 |
systemctl disable <服务名> | 禁用开机自启 | systemctl disable postfix :禁止邮件服务开机启动。 |
systemctl is-enabled <服务名> | 检查服务是否开机自启 | systemctl is-enabled cron :查看定时任务服务是否启用开机启动。 |
systemctl mask <服务名> | 禁止服务被启动 | systemctl mask telnet.socket :彻底禁用 Telnet 服务(即使手动也无法启动)。 |
systemctl unmask <服务名> | 解除服务的禁止启动状态 | systemctl unmask telnet.socket :恢复 Telnet 服务的启动权限。 |
2. 系统与服务监控
命令 | 作用 | 示例分析 |
---|---|---|
systemctl list-units | 列出所有已加载的服务 | systemctl list-units | grep running :筛选出当前正在运行的服务。 |
systemctl list-unit-files | 列出所有已安装的服务文件 | systemctl list-unit-files --type=service :仅显示服务类型的单元文件。 |
systemctl --failed | 查看启动失败的服务 | 用于诊断系统启动失败的服务(如依赖缺失或配置错误)。 |
systemctl daemon-reload | 重载 systemd 配置 | 修改服务文件(如 .service )后必须执行此命令,使配置生效。 |
3.服务日志查看
命令 | 作用 | 示例分析 |
---|---|---|
journalctl -u <服务名> | 查看指定服务的日志 | journalctl -u nginx :查看 Nginx 服务的所有日志。 |
journalctl -u <服务名> -f | 实时跟踪服务日志 | journalctl -u mysql -f :实时监控 MySQL 日志输出(类似 tail -f )。 |
journalctl --since "时间" | 按时间过滤日志 | journalctl -u sshd --since "2023-08-01" :查看 SSH 服务 8 月 1 日后的日志。 |
3.4.3 实际场景示例分析
场景 1:部署 Nginx 服务
# 1. 安装 Nginx
sudo apt install nginx# 2. 启动服务并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx# 3. 检查状态(确保显示 "active (running)")
sudo systemctl status nginx# 4. 修改配置后重新加载(不中断服务)
sudo systemctl reload nginx
场景 2:诊断服务启动失败
# 1. 查看所有失败的服务
systemctl --failed# 输出示例:
# UNIT LOAD ACTIVE SUB DESCRIPTION
# mysql.service loaded failed failed MySQL Community Server# 2. 查看详细日志
journalctl -u mysql# 3. 根据日志修复问题(如配置错误、端口冲突)
# 4. 重启服务
sudo systemctl restart mysql
3.4.4 服务状态解释
通过 systemctl status <服务名>
可查看服务的详细状态,常见状态包括:
-
active (running)
:服务正在运行。 -
active (exited)
:服务已成功完成单次任务(如定时任务)。 -
inactive (dead)
:服务未运行。 -
failed
:服务启动失败(需检查日志)。
4.网络基础配置(5%-10%)
要求:
- 会查看当前网络设备的信息
- 会配置网络的基本参数如ip地址、子网掩码,网络地址,虚拟地址等
- 指定一个虚拟的MAC地址,怎么指定
- 知道如何去创建一个网络连接
4.1 网络配置文件(了解)
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
NAME=ens33
UUID=16862343-b55e-4248-b05d-a3ea662a84a4
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.80.10
PREFIX=24
GATEWAY=192.168.80.2
DNS1=192.168.80.2
DNS2=114.114.114.114
解释
- 网络类型
TYPE=Ethernet
:指定网络连接类型为以太网,表明这是用于配置以太网网卡的文件 。
- 代理及浏览器相关
PROXY_METHOD=none
:表示不使用代理方法。BROWSER_ONLY=no
:意味着不是仅用于浏览器相关的网络配置 。
- IP 地址获取方式
BOOTPROTO=none
:说明网卡采用静态 IP 地址配置,不通过 DHCP 自动获取 IP ,等同于ipv4.method manual
。
- 路由及 IPv4 相关
DEFROUTE=yes
:表示该连接设置的路由为默认路由,即通过此连接发送没有特定路由的流量 。IPV4_FAILURE_FATAL=no
:IPv4 配置失败时,不会导致网络接口配置整体失效 。
- IPv6 相关
IPV6INIT=no
:表示不启用 IPv6 功能 。
- 连接标识相关
NAME=ens33
:连接的名称为ens33
,用于标识该网络连接 。UUID=16862343-b55e-4248-b05d-a3ea662a84a4
:通用唯一识别码,用于唯一标识该网络连接配置 。DEVICE=ens33
:指定网络设备名称为ens33
,即配置针对的是名为ens33
的网卡 。
- 启动及 IP 配置相关
ONBOOT=yes
:表示开机时自动启动该网络连接 。IPADDR=192.168.80.10
:设置网卡的 IPv4 地址为192.168.80.10
。PREFIX=24
:子网掩码的前缀长度为 24,等同于255.255.255.0
。GATEWAY=192.168.80.2
:设置网关地址为192.168.80.2
。DNS1=192.168.80.2
:首选 DNS 服务器地址为192.168.80.2
。DNS2=114.114.114.114
:备用 DNS 服务器地址为114.114.114.114
。
其他补充参数解释
NETMASK
:子网掩码,用于划分 IP 地址的网络部分和主机部分,和PREFIX
作用相关,只是表示形式不同 。BROADCAST
:广播地址,在局域网中用于向所有主机发送消息的特殊地址 。HWADDR/MACADDR
:MAC 地址,网卡的硬件地址,全球唯一,用于在链路层标识设备 。PEERDNS
:决定是否根据 DHCP 设置修改/etc/resolv.conf
中的 DNS 配置 。NM_CONTROLLED
:控制 Network Manager 是否管理该网络接口 。USERCTL
:用于控制非 root 用户是否有权限管理该网络接口 。IPV6ADDR
:用于设置 IPv6 地址及前缀长度 。
4.2 四个命令 ifconfig(被替代) nmcli netstat ip
命令 | 用途 | 基本语法/示例 | 说明 | 状态 |
---|---|---|---|---|
ifconfig | 配置和查看网络接口(传统工具) | ifconfig eth0 up ifconfig eth0 192.168.1.10 netmask 255.255.255.0 | 显示/设置IP地址、子网掩码、启用/禁用接口。 | 已过时,推荐使用 ip 命令。 |
nmcli | 管理网络连接(NetworkManager工具) | nmcli dev status nmcli con up "WiFi-Profile" | 动态管理WiFi、以太网连接,支持VPN、DNS等高级配置。 | 现代工具,适合桌面/服务器动态网络。 |
netstat | 显示网络连接、路由表、端口监听状态 | netstat -tulnp netstat -r | 查看TCP/UDP端口监听、路由表、连接统计。 | 部分过时,路由功能用 ip route ,连接统计用 ss 。 |
ip | 多功能网络配置工具(iproute2 套件) | ip addr show ip route add default via 192.168.1.1 ip link set eth0 up | 管理接口、IP地址、路由、ARP表等,替代 ifconfig 、route 、arp 等命令。 | 现代标准工具,功能全面。 |
4.2.1 nmcli
ifconfig是临时的,nmcli会写到配置文件当中,变成一个永久有效的基本信息。
功能分类 | 命令/操作 | 示例 | 说明 |
---|---|---|---|
查看设备状态 | nmcli dev status | nmcli dev status | 列出所有网络设备(如 WiFi、以太网)及其连接状态。 |
查看连接配置 | nmcli con show | nmcli con show | 显示所有已保存的网络连接配置(名称、UUID、类型等)。 |
启动/停止连接 | nmcli con up <连接名> nmcli con down <连接名> | nmcli con up "有线连接 1" nmcli con down eth0 | 激活或停用指定连接(按名称或 UUID)。 |
配置静态 IP | nmcli con mod <连接名> ipv4.addresses <IP/掩码> + ipv4.gateway <网关> | nmcli con mod eth0 ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 | 为连接设置静态 IP 地址和网关(需重启连接生效)。 |
配置 DNS | nmcli con mod <连接名> ipv4.dns "<DNS1 DNS2>" | nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4" | 设置 DNS 服务器(多个 DNS 用空格分隔)。 |
启用 DHCP | nmcli con mod <连接名> ipv4.method auto | nmcli con mod eth0 ipv4.method auto | 将连接配置为自动获取 IP(DHCP)。 |
管理 WiFi | nmcli dev wifi list nmcli dev wifi connect <SSID> password <密码> | nmcli dev wifi connect MyWiFi password mypass123 | 扫描可用 WiFi 并连接到指定网络。 |
创建新连接 | nmcli con add type <类型> ifname <接口> ... | nmcli con add type ethernet ifname eth0 con-name "Static-LAN" | 创建新连接(如以太网),后续需配置 IP/DNS。 |
删除连接 | nmcli con del <连接名> | nmcli con del "旧连接" | 删除已保存的连接配置。 |
详细场景示例分析
场景 1:配置静态 IP 和 DNS
# 1. 查看当前以太网连接名(假设为 "eth0")
nmcli con show# 2. 设置静态 IP、网关和 DNS
nmcli con mod eth0 ipv4.addresses 192.168.1.100/24
nmcli con mod eth0 ipv4.gateway 192.168.1.1
nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod eth0 ipv4.method manual # 指定手动配置# 3. 重启连接使配置生效
nmcli con down eth0 && nmcli con up eth0# 4. 验证
ip addr show eth0
ping google.com
场景 2:创建并配置新以太网连接
# 1. 创建名为 "Office-LAN" 的连接
nmcli con add type ethernet ifname eth0 con-name "Office-LAN"# 2. 配置静态 IP 和 DNS
nmcli con mod "Office-LAN" ipv4.addresses 10.0.0.5/24
nmcli con mod "Office-LAN" ipv4.gateway 10.0.0.1
nmcli con mod "Office-LAN" ipv4.dns "10.0.0.2"# 3. 启用连接
nmcli con up "Office-LAN"
常用选项说明
选项 | 作用 |
---|---|
con | 管理连接配置(如 con show 、con up )。 |
dev | 操作物理设备(如 dev status 、dev disconnect )。 |
-a 或 --active | 仅显示活动连接(如 nmcli con show --active )。 |
-p | 以友好格式输出(更易读,适合脚本调试)。 |
+ 修改多值参数 | 使用 +ipv4.dns 添加 DNS(保留原有值),直接赋值会覆盖。 |
4.2.2 ip
子命令 | 用途 | 常用选项/参数 | 示例 | 说明 |
---|---|---|---|---|
ip addr | 管理 IP 地址 | add , del , show , flush | ip addr show eth0 ip addr add 192.168.1.10/24 dev eth0 | 查看/添加/删除接口的 IP 地址。 |
ip link | 管理网络接口 | set , show , up , down | ip link set eth0 up ip link show | 启用/禁用接口、设置 MTU、查看接口状态。 |
ip route | 管理路由表 | add , del , show , flush | ip route show ip route add default via 192.168.1.1 | 添加/删除路由、设置默认网关、查看路由规则。 |
ip neigh | 管理 ARP 表(邻居) | show , add , del , flush | ip neigh show ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0 | 查看/管理 ARP 缓存条目(IP 与 MAC 地址映射)。 |
ip rule | 管理策略路由规则 | add , del , show | ip rule show ip rule add from 10.0.0.0/24 lookup 100 | 定义基于源 IP、标记等的路由策略(高级路由场景)。 |
ip tunnel | 管理隧道接口 | add , del , show | ip tunnel add mytun mode gre remote 203.0.113.1 local 198.51.100.1 | 创建 GRE、IPIP 等隧道接口。 |
ip maddr | 管理多播地址 | add , del , show | ip maddr show dev eth0 | 查看/配置接口的多播地址。 |
ip monitor | 实时监控网络事件 | address , route , link | ip monitor address ip monitor route | 实时跟踪 IP 地址、路由或链路状态变化。 |
常用操作示例详解
1. 查看网络接口信息
ip addr show # 显示所有接口的 IP 地址
ip link show eth0 # 查看 eth0 接口的 MAC 地址和状态
2. 配置静态 IP 地址
ip addr add 192.168.1.10/24 dev eth0 # 为 eth0 添加 IPv4 地址
ip link set eth0 up # 启用接口
3. 设置默认网关
ip route add default via 192.168.1.1 # 设置默认网关
ip route show # 验证路由表
关键选项说明
选项 | 适用子命令 | 作用 |
---|---|---|
add | addr , route | 添加 IP 地址、路由规则等。 |
del | addr , route | 删除指定配置。 |
show | 所有子命令 | 显示当前配置信息(如 ip addr show )。 |
flush | addr , route | 清空所有配置(如 ip addr flush eth0 清空 eth0 的所有 IP)。 |
dev <接口> | 所有子命令 | 指定操作的网络接口(如 dev eth0 )。 |
via <网关> | ip route | 指定网关地址(如 via 192.168.1.1 )。 |
5.杂项
如何定义符号链接
假设在 Linux 系统中有以下文件和目录结构:
/home └── user├── documents│ └── file.txt└── links
定义符号链接
使用
ln -s
命令来创建符号链接,语法为ln -s [目标文件或目录] [符号链接名称]
。例如,要创建一个指向/home/user/documents/file.txt
的符号链接link.txt
,可以在终端中输入ln -s /home/user/documents/file.txt /home/user/links/link.txt
。使用符号链接
通过符号链接
link.txt
来访问文件,例如使用cat /home/user/links/link.txt
,系统会先读取link.txt
中的目标路径/home/user/documents/file.txt
,然后再去访问该路径下的file.txt
文件并显示其内容。如果删除符号链接link.txt
,使用rm /home/user/links/link.txt
命令,这并不会影响到实际的file.txt
文件及其内容。但如果删除了file.txt
文件,再访问link.txt
时,就会出现错误提示,因为它所指向的目标文件已不存在。如何创建命令的别名?