1. Linux学习
【个人感觉Linux的命令得过一遍,我用思维导图的形式展出,感觉更清晰一点】
1.1. Linux终端命令格式

1.1.1.1.1. -man的使用操作键

1.2. 常用Linux命令的基本使用
1.2.1. 常用Linux命令的基本使用
| 命令 | 对应英文 | 作用 |
| ls | list | 查看当前文件夹下面内容 |
| pwd | print work directory | 查看当前所在文件夹 |
| cd[目录名] | changge directory | 切换文件夹 |
| touch[文件名] | touch | 如果文件不存在,新建文件 |
| mkdir[目录名] | make directory | 创建目录 |
| rm[文件名] | remove | 删除指定文件 |
| clear | clear | 清屏 |
1.2.2. 快捷方式
通过上下方向键 ↑ ↓ 来调取过往执行过的Linux命令;
命令或参数仅需输入前几位就可以用 Tab 键补全;
Ctrl + R :用于查找使用过的命令(history命令用于列出之前使用过的所有命令,然后输入!命令加上编号 (!2) 就可以直接执行该历史命令);
Ctrl + L:清除屏幕并将当前行移到页面顶部;
Ctrl + C:中止当前正在执行的命令;
Ctrl + U:从光标位置剪切到行首;
Ctrl + K:从光标位置剪切到行尾;
Ctrl + W:剪切光标左侧的一个单词;
Ctrl + Y:粘贴Ctrl + U | K | Y剪切的命令;
Ctrl + A:光标跳到命令行的开头;
Ctrl + E:光标跳到命令行的结尾;
Ctrl + D:关闭Shell会话;
ctrl + shift + =: 放大终端窗口的字体显示
ctrl + -: 缩小终端窗口的字体显示
1.3. 其他命令
1.3.1. 总出
思维导图展出,学习完后可以快速回忆,查询

1.3.2. 查找文件find
用来在 特定的目录下 搜索 符合条件的文件【找文件】
find [路径] -name “文件名”
- 如果省略路径,表示在当前文件夹下查找
1.3.2.1.1. 栗子
1.搜索桌面目录下,文件名包含 1 的文件
find -name "*1*"
2.搜索桌面目录下,所有以 .txt 为扩展名的文件
find -name "*.txt"
3.搜索桌面目录下,以数字 1 开头的文件
find -name "1*"
1.3.3. 软链接和硬链接
1.3.3.1. 软链接
ln -s 被链接的源文件 链接文件
建立文件的软链接,用通俗的方式讲类似于 Windows 下的快捷方式
- 没有 -s 选项建立的是一个 硬链接文件,两个文件占用相同大小的硬盘空间,工作中几乎不会建立文件的硬链接
- 源文件要使用绝对路径,不能使用相对路径,这样可以方便移动链接文件后,仍然能够正常使用
1.3.3.1.1. 栗子
-
- 将桌面目录下的 01.py 移动到 demo/b/c 目录下
mkdir -p ~/Desktop/demo/b/c
mv ~/Desktop/01.py ~/Desktop/demo/b/c/ # 把桌面上的01.py移动到目标目录
cd ~/Desktop # 回到桌面目录准备创建软链接
-
- 在桌面目录下新建 01.py 的 软链接 FirstPython分别使用 相对路径 和 绝对路径 建立 FirstPython 的软链接【一个是简略写法,一个是详细完整的写法】
1.相对路径创建(源文件只写相对于当前桌面的路径)
ln -s demo/b/c/01.py FirstPython_relative
2.绝对路径创建(源文件写完整路径)
ln -s /home/你的用户名/Desktop/demo/b/c/01.py FirstPython_absolute
替换成你自己的用户名,比如如果是root就是/root/Desktop/...
-
- 将 FirstPython 移动到 demo 目录下,对比使用 相对路径 和 绝对路径 的区别
mv FirstPython* ~/Desktop/demo/ # 把两个软链接都移动过去
cd ~/Desktop/demo
- 👉 相对路径链接(FirstPython_relative):打开会提示「No such file or directory」,链接失效,因为它存的路径是
demo/b/c/01.py,现在它自己在demo目录,找的就是demo/demo/b/c/01.py,这个文件不存在。 - 👉 绝对路径链接(FirstPython_absolute):可以正常打开、编辑源文件,因为它存的是完整固定路径,和自己在哪没关系。
1.3.4. 硬链接{用不到,知道即可}
ln 被链接的源文件 链接文件
在使用 ln 创建链接时,如果没有 -s 选项,会创建一个 硬链接,而不是软链接
1.3.4.1.1. 栗子
-
- 在 ~/Desktop/demo 目录下建立 ~/Desktop/demo/b/c/01.py 的硬链接 01_hard
- 使用 ls -l 查看文件的硬链接数(硬链接——有多少种方式可以访问文件或者目录)
cd ~/Desktop/demo
ln ~/Desktop/demo/b/c/01.py 01_hard
执行ls -l查看,你会看到源文件和硬链接的inode编号一样,硬链接数都变成了2。
-
- 删除 ~/Desktop/demo/b/c/01.py ,并且使用 tree 来确认 demo 目录下的三个链接文件文件软硬链接的示意图
rm ~/Desktop/demo/b/c/01.py
tree ~/Desktop/demo # 查看目录结构
- 现在demo目录里,你创建的两个软链接里,只有绝对路径那个能打开,但它也会提示找不到源文件;但硬链接
01_hard依然可以正常打开,内容和原来的01.py完全一样。 - 这就是硬链接的特性:删除源文件不影响硬链接,因为它们本来就是同一个文件的不同名字。
- 在 Linux 中,只有文件的 硬链接数 == 0 才会被删除
- 使用 ls -l 可以查看一个文件的硬链接的数量
文件软硬链接示意图

【在 Linux 中,文件名 和 文件的数据 是分开存储的】
1.4. 打包压缩
- 在不同操作系统中,常用的打包压缩方式是不同的选项 含义
Windows 常用 rar
Mac 常用 zip
Linux 常用 tar.gz
1.4.1. 打包 / 解包
tar 是 Linux 中最常用的 备份工具,
此命令可以 把一系列文件 打包到 一个大文件中,也可以把一个 打包的大文件恢复成一系列文件
1.4.1.1.1. 打包文件
打包文件
tar -cvf 打包文件.tar 被打包文件/路径
-c:--create,创建新的打包文件,这是打包操作的核心参数
-v:--verbose,显示打包过程的详细信息,
会把当前正在打包的每个文件/目录名打印在屏幕上,方便你看到打包进度
-f 文件名:--file,指定打包后输出的归档文件名,
这里就是指定输出为test.tar,-f必须放在所有参数的最后,因为它后面要紧跟文件名
如:
cd ~/Desktop
tar -cvf test.tar test_pack/
就是将test_pack/目录下所有文件都打包进test.tar里面
1.4.1.1.2. 解包文件
tar -xvf 打包文件.tar

1.4.2. 压缩/解压缩
1.4.2.1. gzip【用来压缩tar打包的文件】
tar 与 gzip 命令结合可以使用实现文件 打包和压缩
- tar 只负责打包文件,但不压缩
- 用 gzip 压缩 tar 打包后的文件,其扩展名一般用 xxx.tar.gz
- 【在 tar 命令中有一个选项 -z 可以调用 gzip ,从而可以方便的实现压缩和解压缩的】
1.4.2.1.1. 压缩文件
tar -zcvf 打包文件.tar.gz 被压缩的文件/路径...
栗子:
# 先切换到桌面目录
cd ~/Desktop
# 把test_pack目录压缩为test.tar.gz
tar -zcvf test.tar.gz test_pack/
1.4.2.1.2. 解压缩文件
tar -zxvf 打包文件.tar.gz
栗子:
cd ~/Desktop
tar -zxvf test.tar.gz
执行后会直接在当前桌面目录,重新生成 test_pack 文件夹及其内部所有文件,保持原有目录结构。
1.4.2.1.3. 解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目标路径
-C解压缩到指定目录,注意:要解压缩的目录必须存在
栗子:
比如我们要解压到 /tmp/test_unpack/ 这个目录:
# 1. 先创建目标目录(如果不存在)
mkdir -p /tmp/test_unpack/
# 2. 执行解压,指定目标路径
tar -zxvf test.tar.gz -C /tmp/test_unpack/
参数说明:-C(大写)参数的作用是切换解压目标路径,必须放在压缩包文件名之后。
解压后可以用这条命令验证结果:
ls /tmp/test_unpack/
你会看到 test_pack 目录已经出现在这个指定路径下了。
1.4.2.2. bzip2(two)
【用法与gzip一致】
- 在 tar 命令中有一个选项 -j 可以调用 bzip2 ,从而可以方便的实现压缩和解压缩的功能
命令格式如下:
# 压缩文件
tar -jcvf 打包文件.tar.bz2 被压缩的文件/路径...
# 解压缩文件
tar -jxvf 打包文件.tar.bz2
| 对比维度 | gzip | bzip2 |
| 压缩比 | 较低,对文本通常能压缩到原大小的30%-40%,比bzip2大10%-30% | 更高,相同文件通常比gzip再小10%-30%,对文本类数据优势更明显 |
| 压缩/解压速度 | 更快,计算开销小,实时性好 | 明显更慢,压缩速度通常是gzip的1/4左右 |
| 资源占用 | CPU和内存占用更低 | 内存和CPU消耗更高 |
| 文件后缀 |
|
|
1.5. 软件安装
通过 apt 安装/卸载软件
- apt 是
Advanced Packaging Tool,是 Linux 下的一款安装包管理工具 - 可以在终端中方便的 安装/卸载/更新软件包
# 1. 安装软件
$ sudo apt install 软件包
# 2. 卸载软件
$ sudo apt remove 软件名
# 3. 更新已安装的包
$ sudo apt upgrade
1.6. 文件和目录常用命令
1.6.1. 查看目录内容
1.6.1.1. ls 命令说明
ls 是英文单词 list 的简写,其功能为列出目录的内容,是用户最常用的命令之一,类似于 DOS下的 dir 命令
1.6.1.2. Linux 下文件和目录的特点
Linux 文件 或者 目录 名称最长可以有 256 个字符参数 含义
- 以
.开头的文件为隐藏文件,需要用 -a 参数才能显示 .代表当前目录…代表上一级目录
1.6.1.3. ls 常用选项
| 参数 | 含义 |
| -a | 显示指定目录下所有 |
| -l | 以列表方式显示文件的详细信息 |
| -h | 配合 -l 以人性化的方式显示文件大小 |
1.6.1.4. ls通配符的使用
| 通配符 | 含义 |
| * | 代表任意个数个字符 |
| ? | 代表任意一个字符,至少 1 个 |
| [] | 表示可以匹配字符组中的任一一个 |
| [abc] | 匹配 a、b、c 中的任意一个 |
| [a-f] | 匹配从 a 到 f 范围内的的任意一个字符 |
1.6.1.4.1. 栗子
1. * 代表任意个数(包含0个)的任意字符
*.log→ 匹配所有.log结尾的日志文件,比如access.log、error-2024.logdata*→ 匹配所有以data开头的文件,比如data、data.csv、database*2026*→ 匹配文件名中包含2026的任意文件,比如report-2026.txt、2026-04.tar.gz
2. ? 代表恰好1个任意字符(至少1个,只能是1个)
file?.txt→ 匹配file1.txt、fileA.txt,不匹配file.txt(少一个字符)或file12.txt(多一个字符)??→ 匹配文件名长度恰好为2个字符的文件/目录
3. [] 匹配字符组中的任意一个字符
基础用法:
[abc].txt→ 只匹配a.txt、b.txt、c.txt,不匹配d.txt
范围用法:file[0-9].txt→ 匹配file0.txt~file9.txt任意一个img[a-z].png→ 匹配imga.png到imgz.png任意一个
取反用法(^开头表示不匹配):[^0-9].txt→ 匹配文件名第一个字符不是数字的.txt文件,比如a.txt、data.txt,不匹配1.txt
1.6.2. 切换目录
1.6.2.1. cd
cd 是英文单词 change directory 的简写,其功能为更改当前的工作目录,也是用户最常用的命令之一
【注意:Linux 所有的 目录 和 文件名 都是大小写敏感的,即大小写区分,tset与Tset不一样】
| 命令 | 含义 |
| cd | 切换到当前用户的主目录(/home/用户目录) |
| cd ~ | 切换到当前用户的主目录(/home/用户目录) |
| cd . | 保持在当前目录不变 |
| cd … | 切换到上级目录 |
| cd - | 可以在最近两次工作目录之间来回切换 |
1.6.2.2. 相对路径和绝对路径
| 类型 | 开头特征 | 优点 | 适用场景 |
| 绝对路径 |
| 不依赖当前位置,不会出错 | 脚本写固定路径、访问系统目录 |
| 相对路径 | 无斜杠开头 | 更简洁,项目迁移方便 | 日常操作同一项目内的文件 |
1.6.2.2.1. 绝对路径示例(以 / 或 ~ 开头)
绝对路径是从根目录/家目录开始的完整路径,不管你当前在哪个目录,它都指向唯一位置:
/home/yourname/Documents/note.txt:从根目录开始,完整定位到你的文档下的笔记~/project/ctf/web:~自动展开为当前用户的家目录,等价于/home/你的用户名/project/ctf/web/var/www/html/test.php:Apache默认网站根目录的完整绝对路径
回顾:上面的软链接使用绝对路径
ln -s /home/yourname/ctf/payload.php /var/www/html/shell.php
1.6.2.2.2. 相对路径示例(不以 / 开头,相对于当前工作目录)
相对路径是相对于你当前所在目录的位置,当前目录变了,同一个相对路径指向的位置也会变:
- 如果你当前在
/home/你的用户名/目录,那么:
-
./Documents:.代表当前目录,等价于/home/你的用户名/Documents../opt:..代表上级目录,等价于/home/optproject/ctf:从当前目录往下找,等价于/home/你的用户名/project/ctf
1.6.3. 创建和删除操作
1.6.3.1. touch【创建文件或修改文件时间】
- 如果文件 不存在,可以创建一个空白文件
- 如果文件 已经存在,可以修改文件的末次修改日期
1.6.3.2. mrdir【创建一个新的目录】
| 选项 | 含义 |
| -p | 可以递归创建目录 |
新建目录的名称 不能与当前目录中 已有的目录或文件 同名
1.6.3.3. rm【删除文件或目录】
使用 rm 命令要小心,因为文件删除后不能恢复
| 选项 | 含义 |
| -f | 强制删除,忽略不存在的文件,无需提示 |
| -r | 递归地删除目录下的内容,删除文件夹 时必须加此参数 |
1.6.4. 拷贝和移动文件
| 命令 | 对应英文 | 作用 |
| tree [目录名] | tree | 以树状图列出文件目录结构 |
| cp 源文件目标文件 | copy | 复制文件或者目录 |
| mv 源文件 目标文件 | move | 移动文件或者目录/文件或者目录重命名 |
1.6.4.1. tree
- tree 命令可以以树状图列出文件目录结构
| 选项 | 含义 |
| -d | 只显示目录 |
1.6.4.1.1. 栗子
- 展示当前目录所有文件和子目录:
tree
- 只展示当前目录的子目录(忽略文件):
tree -d
示例效果:会只列出uploads、logs、config这类目录,不会列出目录里的脚本文件。
1.6.4.2. cp
- cp 命令的功能是将给出的 文件 或 目录 复制到另一个 文件 或 目录 中,相当DOS 下的 copy命令
| 选 项 | 含义 |
| -i | 覆盖文件前提示 |
| -r | 若给出的源文件是目录文件,则 cp 将递归复制该目录下的所有子目录和文件, 目标文件必须为一个目录名 |
1.6.4.2.1. 栗子
- 复制单个文件:把当前目录的
test.php复制一份叫test_backup.php
cp test.php test_backup.php
- 复制整个目录:把
dirsearch目录下所有内容,递归复制到/opt/dirsearch
cp -r ./dirsearch /opt/dirsearch
- 覆盖前提示:复制
payload.txt到payloads目录,如果目标已经有同名文件,会先提示你确认
cp -i payload.txt payloads/
1.6.4.3. mv
- mv 命令可以用来 移动 文件 或 目录,也可以给 文件或目录重命名
| 选项 | 含义 |
| -i | 覆盖文件前提示 |
1.6.4.3.1. 栗子
- 重命名文件:把
old.php改名为new.php【文件对文件】
mv old.php new.php
- 移动文件:把
shell.php移动到uploads目录下【文件移到目录下】
mv shell.php uploads/
- 移动并覆盖提示:把
test.txt移动到/tmp目录,如果目标已有同名文件,会提示确认
mv -i test.txt /tmp/
1.6.5. 查看文件内容
| 命令 | 对应英文 | 作用 |
| cat 文件名 | concatenate | 查看文件内容、创建文件、文件合并、追加文件内容等功能 |
| more 文件名 | more | 分屏显示文件内容 |
| grep 搜索文本 文件名 | grep | 搜索文本文件内容 |
1.6.5.1. cat
cat 命令可以用来 查看文件内容、创建文件、文件合并、追加文件内容 等功能
cat 会一次显示所有的内容,适合 查看内容较少 的文本文件
| 选项 | 含义 |
| -b | 对非空输出行编号 |
| -n | 对输出的所有行编号 |
1.6.5.1.1. 栗子
这个选项就是编号,
1 <?php
2 echo "this is webshell";
3 system($_GET['cmd']);
4 ?>
1 <?php
2
3 echo "this is webshell";
4
5 system($_GET['cmd']);
6
7 ?>
1.6.5.2. more
- more 命令可以用于分屏显示文件内容,每次只显示一页内容
- 适合于 查看内容较多的文本文件
使用 more 的操作键:
| 操作键 | 功能 |
| 空格键 | 显示手册页的下一屏 |
| Enter键 | 一次滚动手册页的一行 |
| b | 回滚一屏 |
| f | 前滚一屏 |
| q | 退出 |
| /word | 搜索 word 字符串 |
1.6.6. grep
Linux 系统中 grep 命令是一种强大的文本搜索工具
grep 允许对文本文件进行 模式查找,所谓模式查找,又被称为正则表达式。
【grep [选项] "匹配模式" [文件/目录路径]】
| 选项 | 含义 |
| -n | 显示匹配行及行号 |
| -v | 显示不包含匹配文本的所有行(相当于求反) |
| -i | 忽略大小写 |
1.6.6.1.1. 栗子
- 基础搜索:在指定文件中查找包含关键词的行
# 在error.log中查找包含"SQL"的行
grep "SQL" error.log
- -i 忽略大小写:不区分大小写匹配,避免漏匹配
# 匹配Error、error、ERROR等各种形式
grep -i "error" access.log
- -n 显示行号:输出匹配行在文件中的具体行号,方便快速定位
grep -n "eval" webshell.php
- -v 反向匹配:只输出不包含关键词的行,用来过滤无用信息
# 筛选出日志中不是"success"的行(看异常)
grep -v "success" system.log
- -c 统计匹配行数:只输出匹配到的总行数,适合快速统计
# 统计访问日志里一共出现了多少次404错误
grep -c " 404 " /var/log/nginx/access.log
- -r 递归搜索:遍历指定目录下所有子目录和文件搜索
# 在当前目录所有PHP文件里找包含"eval"关键词的一句话木马
grep -r "eval" . --include="*.php"
- 上下文显示(看报错前后内容很有用)
-
-A n:显示匹配行 + 后面n行-B n:显示匹配行 + 前面n行-C n:显示匹配行 + 前后各n行
# 找日志里的fatal错误,并显示错误前后各1行上下文
grep -C 1 "fatal" /var/log/nginx/error.log
- 正则匹配:支持正则表达式实现精准匹配
# 查找以"[ERROR]"开头的行
grep "^\\[ERROR\\]" system.log
# 查找包含IP地址的行
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" access.log
- 结合管道的常用技巧
grep经常和其他命令搭配做过滤,非常高效:
# 列出当前目录下所有log后缀的文件
ls | grep ".log"
# 实时监控日志,只输出带Timeout的新日志
tail -f service.log | grep "Timeout"
1.6.6.1.2. 常用的两种模式查找
| 参数 | 含义 |
|
| 行首,搜寻以 a 开头的行 |
|
| 行尾,搜寻以 ke 结束的行 |
1.7. 系统信息相关命令
1.7.1. 时间和日期
| 命令 | 作用 |
| date | 查看系统时间 |
| cal | calendar 查看日历, -y 选项可以查看一年的日历 |
【突然想到黑神话悟空的那道题,要注意date的形式,可以去查日历?】
1.7.2. 磁盘信息
| 命令 | 作用 |
| df -h | disk free 显示磁盘剩余空间 |
| du -h [目录名] | disk usage 显示目录下的文件大小 |
1.7.3. 进程信息【 当前正在执行的一个程序】
| 命令 | 作用 |
| ps aux | process status 查看进程的详细状况 |
| top | 动态显示运行中的进程并且排序 |
| kill [-9] 进程代号 | 终止指定代号的进程, -9 表示强行终止 |
1.7.3.1. ps
ps 默认只会显示当前用户通过终端启动的应用程序
ps 选项说明
| 选项 | 含义 |
| a | 显示终端上的所有进程,包括其他用户的进程 |
| u | 显示进程的详细状态 |
| x | 显示没有控制终端的进程 |
1.7.3.1.1. 栗子
ps aux | grep nginx
过滤出你想要找的进程,比如找nginx
1.7.3.2. top
打开一个交互式界面,实时刷新显示进程的CPU、内存使用率,适合排查服务器卡慢问题。
常用交互操作:
- 按
P:按CPU使用率排序,找出占CPU最高的进程 - 按
M:按内存使用率排序 - 按
q:退出top界面 - 直接输入top就可以启动了
1.7.3.3. kill
使用 kill 命令时,最好只终止由当前用户开启的进程,而不要终止 root 身份开启的进程,否则可能导致系统崩溃
1.7.3.3.1. 栗子
实用例子:
- 先找到占用端口的PHP-FPM进程PID:
ps aux | grep php-fpm
假设得到进程ID是 1234
2. 强制杀死这个进程:
kill -9 1234
其他常见用法:如果要温和停止进程可以不用-9,用kill 进程PID发送默认终止信号,让进程正常退出。
1.8. 用户权限相关命令
1.8.1. 组管理
【创建组/删除组的终端命令都需要通过sudo执行】
{sudo 是Linux/Unix系统中临时获取管理员权限执行命令的工具}
| 命令 | 作用 |
| groupadd 组名 | 添加组 |
| groupdel 组名 | 删除组 |
| cat /etc/group | 确认组信息 |
| chgrp -R 组名 文件/目录名 | 递归修改文件/目录的所属组 |
- 组信息保存在
/etc/group文件中 /etc目录是专门用来保存 系统配置信息 的目录
1.8.2. 用户管理
【创建用户 / 删除用户 / 修改其他用户密码 的终端命令都需要通过 sudo 执行】
1.8.2.1. 创建用户/设置密码/删除用户
| 命令 | 作用 | 说明 |
| useradd -m -g组 新建用户名 | 添加新用户 | -m是自动建立用户家目录【如果忘记就删除用户重新建立】 -g指定用户所在的组,否则建立一个与用户同名的组 |
| passwd 用户名 | 设置用户密码 | 如果是普通用户,直接用passwd修改自己的密码 |
| userdel -r 用户名 | 删除用户 | -r是自动删除用户的家目录 |
| cat/etc/passwd |grep 用户名 | 确认用户信息 | 新建用户后,用户信息会保存在/etc/passwd |
1.8.2.1.1. 疑问?家目录是什么
Linux的家目录是每个用户专属的个人存储空间,是用户登录系统后的默认工作目录,用于存放用户的私人文件、配置文件和应用数据。
标准默认路径
- 普通用户:默认存放在
/home/用户名,例如用户test的家目录是/home/test - 超级管理员root:家目录为独立的
/root,不在/home路径下
1.8.2.2. 查看用户信息
| 命令 | 作用 |
| id [用户名] | 查看用户 UID 和 GID 信息 |
| who | 查看当前所有登录的用户列表 |
| whoami | 查看当前登录用户的账户名 |
1.8.2.2.1. uid,gid是什么意思
UID(User ID,用户ID)和GID(Group ID,组ID)是Linux系统权限管理的核心数字标识符,系统通过它们而非用户名/组名来判断权限。
| 标识符 | 作用对象 | 核心作用 | 常见ID范围 |
| UID | 单个用户 | 唯一标识系统用户, 决定用户对系统资源(文件/进程)的访问权限 | <br>- <br>- |
| GID | 用户组 | 唯一标识用户组, 简化同组用户的共享权限分配 | <br>- <br>- <br>- |
1.8.2.2.2. uid,gid使用栗子
所有用户和组的UID/GID信息都明文存储在两个系统配置文件中:
/etc/passwd:存储所有用户信息,每行格式为:
用户名:密码占位符(x):UID:GID:用户说明:家目录:登录Shell
示例(root用户条目):
root:x:0:0:root:/root:/bin/bash
可以看到:root的UID=0、GID=0。
/etc/group:存储所有用户组信息,包含组成员列表。
查看当前/指定用户的UID/GID:
# 查看当前登录用户
id
# 查看指定用户(比如test)
id test
输出示例:
uid=1000(test) gid=1000(test) groups=1000(test),4(adm)
其中gid是用户主组GID,后面groups是用户加入的所有附加组。
1.8.2.2.3. uid,gid涉及到一个考点(漏洞)
权限提升风险:只要用户的UID被设置为0,无论用户名是什么,都会被内核识别为root,获得最高权限。攻击者常会通过修改普通用户UID为0来实现提权。
可以用命令排查异常特权用户:
# 找所有UID为0的异常用户
awk -F: '$3 == 0 {print $1}' /etc/passwd
1.8.2.2.4. which
which命令可以查看执行命令所在位置,【注意,cd不行】
which ls
# 输出
# /bin/ls
which useradd
# 输出
# /usr/sbin/useradd
1.8.2.2.5. bin 和 sbin
在 Linux 中,绝大多数可执行文件都是保存在 /bin 、 /sbin 、 /usr/bin 、 /usr/sbin
/bin ( binary )是二进制执行文件目录,主要用于具体应用
/sbin ( system binary )是系统管理员专用的二进制代码存放目录,主要用于系统管理
/usr/bin ( user commands for applications )后期安装的一些软件
/usr/sbin ( super user commands for applications )超级用户的一些管理程序
1.8.2.3. 切换用户
| 命令 | 作用 | 说明 |
| su - 用户名 | 切换用户,并且切换目录 | 可以切换到用户家目录,否则保持位置不变 |
| exit | 退出当前登录账户 |
1.8.2.3.1. 注意有没有带-
| 命令 | 环境变量 | 工作目录 | 适用场景 |
|
| 加载目标用户的完整环境 | 自动切到目标用户家目录 | 需要以目标用户完整身份操作时(推荐标准用法) |
|
| 保留当前原用户的环境变量 | 留在原用户的当前工作目录 | 只需要切换身份但保留当前环境时 |
- 普通用户切换到任何其他用户都需要输入目标用户的密码;
- root切换到任何用户都不需要密码。【我突然在思考一个问题,没别的意思,如果老大要看地下员工工作情况,可以直接切换账号进来吗】
1.8.2.4. 切换文件权限
| 命令 | 作用 |
| chown | 修改拥有者 |
| chgrp | 修改组 |
| chmod | 修改权限 |
命令:
# 修改文件|目录的拥有者
chown 用户名 文件名|目录名
# 递归修改文件|目录的组
chgrp -R 组名 文件名|目录名
# 递归修改文件权限
chmod -R 755 文件名|目录名
1.9. 远程管理常用命令
1.9.1. 关机/重启
| 命令 | 对应英文 | 作用 |
| shutdown | 选项 时间 shutdown | 关机/重新启动 |
命令
# 重新启动操作系统,其中 now 表示现在
$ shutdown -r now
# 立刻关机,其中 now 表示现在
$ shutdown now
# 系统在今天的 20:25 会关机
$ shutdown 20:25
# 系统再过十分钟后自动关机
$ shutdown +10
# 取消之前指定的关机计划
$ shutdown -c
- 不指定选项和参数,默认表示 1 分钟之后 关闭电脑
- 远程维护服务器时,最好不要关闭系统,而应该重新启动系统
1.9.2. 查看配置网卡信息
| 命令 | 对应英文 | 作用 |
| ifconfig | configure a network interface | 查看/配置计算机当前的网卡配置信息 |
| ping ip地址 | ping | 检测到目标 ip地址 的连接是否正常 |
1.9.2.1. ifconfig
ifconfig是Linux早期经典的网卡配置查看工具,全称是interface configuration,属于net-tools工具包(部分新版系统默认不预装)。
1.9.2.1.1. 基础用法
- 查看全部网卡的完整配置信息
$ ifconfig
- 过滤提取所有IP地址
$ ifconfig | grep inet
1.9.2.1.2. ✅ 补充要点
- 网卡命名规则:一台计算机通常会包含多种网卡:
-
- 物理网卡:新版Linux(CentOS 7+/Ubuntu 15+)默认命名为
ensXX或enp0sX,老式命名为eth0/eth1; - 虚拟网卡:比如Docker的
docker0、VMware虚拟机的vmnet、本地环回lo;
- 物理网卡:新版Linux(CentOS 7+/Ubuntu 15+)默认命名为
- 本地回环地址
127.0.0.1:专门用于本机进程间网络通信,永远代表本机本身,通常用来测试本机TCP/IP协议栈是否正常工作。【一般用来测试本机网卡是否正常】
1.9.2.2. ping
ping命令用于检测本机到目标主机之间的网络连通性和延迟质量,它的命名取自声纳探测的回声,网络中也常用作动词:比如"ping一下这个IP看看有没有开机"。
【ping 一般用于检测当前计算机到目标计算机之间的网络 是否通畅,数值越大,速度越慢】
1.9.2.2.1. 基础用法
- 检测到目标主机的连通状态
$ ping <IP地址或域名>
示例:ping www.baidu.com
- 检测本地网卡/TCP协议栈是否正常
$ ping 127.0.0.1
1.9.2.2.2. ✅ 补充要点
- 工作原理:ping基于ICMP协议,向目标主机发送
Echo Request(回声请求)数据包,如果目标主机在线且允许ICMP请求,就会回复Echo Reply(回声应答); - 延迟判断:输出中的
time=xx ms就是本次请求往返的延迟,数值越大说明网络延迟越高,连接质量越差; - 常用参数:默认Linux下
ping会一直发包,按Ctrl+C停止;如果只需要指定发包次数,可以加-c参数:ping -c 4 127.0.0.1(发送4个包后自动停止); - 排坑提示:ping不通不代表目标一定不在线,很多服务器会开启防火墙拦截ICMP数据包,此时需要结合其他端口检测方式(比如telnet、nc)进一步验证。
1.9.3. 远程登录和赋值文件
| 命令 | 作用 |
| ssh 用户@ip | 关机/重新开机 |
| scp 用户名 @ip:文件名或路径 | 远程复制文件 |
1.9.3.1. ssh
SSH 全称Secure Shell(安全外壳协议),是目前最主流的加密远程通信协议,专为解决传统远程工具的安全缺陷而生。
通过 SSH 客户端 我们可以连接到运行了 SSH 服务器 的远程机器

使用:ssh [-p port] user@remote
- user 是在远程机器上的用户名,如果不指定的话默认为当前用户
- remote 是远程机器的地址,可以是 IP/域名,或者是 后面会提到的别名
- port 是 SSH Server 监听的端口,如果不指定,就为默认值 22
栗子:
如:远程登录服务器
# 标准用法:用户名@服务器IP/域名
ssh user@192.168.1.100
# 指定非默认端口
ssh -p 2222 user@your-server.com
1.9.3.2. scp
它的地址格式与 ssh 基本相同,需要注意的是,在指定端口时用的是大写的 -P 而不是小写的
scp [参数] 源路径 目标路径
【第一个参数永远是要复制的文件/目录,第二个参数是保存位置,不需要刻意区分本地和远端,只需要按照规则写路径即可。】
1.9.3.2.1. 常用参数说明
| 参数 | 作用 |
|
| 递归复制,传输目录时必须加 【若给出的源文件是目录文件,则 scp 将递归复制该目录下的所有子目录和文件,目标文件必须为一个目录名】 |
|
| 大写P,指定远程 SSH 端口(默认22),非默认端口必须指定 |
|
| 小写p,保留源文件的修改时间、访问时间和权限 【保留文件的属性】 |
|
| 启用压缩传输,大文件、慢网络下可节省带宽 |
|
| 显示详细传输过程,适合调试连接问题 |
|
| 静默模式,隐藏传输进度条 |
|
| 限制传输带宽,单位为 kbit/s,避免占满整个网络 |
|
| 指定密钥文件,适合基于公钥免密登录的场景 |
1.9.3.2.2. 常见场景使用示例
1. 本地 → 远程:上传文件
# 上传单个文件
scp /本地路径/test.txt root@192.168.1.100:/远程目标路径/
# 上传整个目录(必须加 -r)
scp -r /本地路径/项目目录 root@192.168.1.100:/远程目标路径/
# 远程SSH端口非默认(如2222)的情况
scp -P 2222 ./test.txt root@192.168.1.100:/data/
2. 远程 → 本地:下载文件
只需要调换源路径和目标路径的顺序即可:
# 下载单个文件到本地当前目录(. 代表当前目录)
scp root@192.168.1.100:/var/log/nginx.log .
# 下载整个目录到本地
scp -r root@192.168.1.100:/var/log/nginx ~/本地备份目录/
3. 远程 → 远程:直接中转(本地当跳板)
如果需要在两台远程服务器之间直接传文件,本地同时能连通两台的情况下可以直接传输,不需要先下载再上传:
scp user1@主机1IP:/源文件路径 user2@主机2IP:/目标路径
14万+



被折叠的 条评论
为什么被折叠?



