最近租了个服务器想把我的个人网站再搞一下(先前服务器过期了我不知道导致网站丢了)发现很多linux指令都模糊了,翻到了以前大一做的笔记,在练习一下吧,顺便记录过程。
准备工具:一台linux服务器或者自己装的的虚拟机,我用的是之前装的sentOS 8虚拟机
以下均出于自己手打的笔记(在这里感谢恩师)
运维概念
- 运维是指⼤型组织已经建⽴好的⽹络软硬件的维护,就是要保证业务的上线与运作的正常, 在他运转的过程中,对他进⾏维护,他集合了⽹络、系统、数据库、开发、安全、监控于⼀身的技术 运维⼜包括很多种,有DBA运维、⽹站运维、虚拟化运维、监控运维、游戏运维等等 2)游戏运维⼜有分⼯,分为开发运维、应⽤运维(业务运维)和系统运维 开发运维:是给应⽤运维开发运维⼯具和运维平台的 应⽤运维:是给业务上线、维护和做故障排除的,⽤开发运维开发出来的⼯具给业务上线、维护、做故障排查 系统运维:是给应⽤运维提供业务上的基础设施,⽐如:系统、⽹络、监控、硬件等等 总结:开发运维和系统运维给应⽤运维提供了“⼯具”和“基础设施”上的⽀撑 开发运维、应⽤运维和系统运维他们的⼯作是环环相扣的
Linux基本
1.操作系统之一,基于uinx, Linux 是⼀套免费使⽤和⾃由传播的类 Unix 操作系统⽀持多线 程和多 CPU它⽀持 32 位和 64 位硬件
2.Linux 系统的核⼼是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执⾏软件
体系结构
⽤户空间(User Space) :⽤户空间⼜包括⽤户的应⽤程序(User Applications)、C 库(C Library) 。 内核空间(Kernel Space) :内核空间⼜包括系统调⽤接⼝(System Call Interface)、内核(Kernel)、平台架构相关的 代码(Architecture-Dependent Kernel Code)
BASH 和 DOS
BASH:
- 定义:BASH(Bourne Again SHell)是一种Unix/Linux系统下的命令行解释器,具有强大的脚本编程能力。
- 功能:支持自动化系统管理、日志分析、网络管理、数据处理、软件部署、测试和编译等任务。
- 应用场景:广泛应用于Linux和类Unix操作系统中,用于执行用户命令、编写脚本以自动化日常任务和系统管理。
DOS:
- 定义:DOS(Disk Operating System)是一种早期的操作系统,主要用于个人计算机,提供命令行界面进行操作。
- 功能:提供基本的文件管理、程序执行和系统配置功能。
- 应用场景:尽管已被现代操作系统取代,DOS在嵌入式系统、旧计算机维护和运行老旧软件方面仍有应用。
- BASH和DOS的区别:
- 起源与平台:BASH主要用于Unix/Linux系统,而DOS最初用于早期的Microsoft操作系统。
- 文件路径格式:BASH使用正斜杠(/)分隔目录,DOS使用反斜杠(\)。
- 脚本编程能力:BASH提供强大的脚本编程功能,而DOS的脚本编程能力较弱。
- 环境变量和命令行编辑:BASH使用$符号引用环境变量,并提供丰富的命令行编辑功能;DOS使用%符号,命令行编辑功能相对有限。
- 内置命令和数据流操作:BASH拥有大量内置命令并支持复杂的数据流操作,而DOS的内置命令较少,数据流操作功能不如BASH强大。
- 权限管理:BASH在多用户操作系统上具有详细的权限管理系统,而传统DOS没有权限管理概念。
- BASH 命令区分⼤⼩写,⽽ DOS 命令则不区分;
Linux 进程通信方式
管道(pipe)、流管道(s_pipe)、有名管道(FIFO) 信号(signal) 消息队列 共享内存 信号量 套接字(socket)
root 帐户
就是所谓的超级用户,允许你完全控制系统。你可以在此处创建和维护⽤户帐户,为每个帐户分配 不同的权限。每次安装 Linux 时都是默认帐户,是操作系统的最高权限
Linux 的⽬录结构
/bin:存放⼆进制可执⾏⽂件(ls,cat,mkdir 等),常⽤命令⼀般都在这⾥;
/etc:存放系统管理和配置⽂件;
/home:存放所有⽤户⽂件的根⽬录,是⽤户主⽬录的基点,⽐如⽤户 user 的主⽬录就是/home/user,可 以⽤~user 表示;
/usr:⽤于存放系统应⽤程序
/opt:额外安装的可选应⽤程序包所放置的位置。⼀般情况下,我们可以把 tomcat 等都安装到这⾥;
/proc:虚拟⽂件系统⽬录,是系统内存的映射。可直接访问这个⽬录来获取系统信息;
/root:超级⽤户(系统管理员)的主⽬录(特权阶级 o);
/sbin: 存放⼆进制可执⾏⽂件,只有 root 才能访问。这⾥存放的是系统管理员使⽤的系统级别的管理命令和 程序。如 ifconfig 等;
/dev:⽤于存放设备⽂件;
/mnt:系统管理员安装临时⽂件系统的安装点,系统提供这个⽬录是让⽤户临时挂载其他的⽂件系统;
/boot:存放⽤于系统引导时使⽤的各种⽂件;
/lib :存放着和系统运⾏相关的库⽂件 ;
/tmp:⽤于存放各种临时⽂件,是公⽤的临时⽂件存储点;
/var:⽤于存放运⾏时需要改变数据的⽂件,也是某些⼤⽂件的溢出区,⽐⽅说各种服务的⽇志⽂件(系统 启动⽇志等。)等;
/lost+found:这个⽬录平时是空的,系统⾮正常关机⽽留下“⽆家可归”的⽂件(windows 下***.chk)就在这⾥
Linux 性能调优
查看系统进程命令
ps命令
ps -aux # 显示所有用户的进程(BSD 风格)
ps -ef # 显示全格式进程(UNIX 风格)
ps -u root # 查看 root 用户的进程
ps aux | grep nginx # 过滤包含 "nginx" 的进程
ps aux --sort=-%cpu # 按 CPU 使用率降序排列
ps aux --sort=-%mem # 按内存使用率降序排列
top命令
top # 进入交互界面(默认按 CPU 使用率排序)
top -d 2 # 每 2 秒刷新一次
top -p 1234 # 监控指定 PID 的进程
按 P:按 CPU 使用率排序。
按 M:按内存使用率排序。
按 k:终止指定 PID 的进程。
按 q:退出 top
其他命令
pstree # 以树状结构显示所有进程
pstree -p # 显示 PID
pstree -u root # 仅显示 root 用户的进程树
pgrep nginx # 返回所有 "nginx" 进程的 PID
pidof nginx # 功能类似,但语法略有不同
lsof -p 1234 # 查看 PID 为 1234 的进程打开的文件
lsof /var/log/syslog # 查看谁在使用/var/log/syslog这个文件
使用场景建议
-
快速查看进程状态:
ps -aux | grep <关键词>
-
实时监控资源占用:
top
或htop
-
分析进程关系:
pstree
-
调试文件占用问题:
lsof
1、Disabling daemons (关闭 daemons)。
在Linux系统中,daemon是后台服务进程,通常在系统启动时自动运行,执行各种任务。关闭daemons通常意味着停止这些服务,可能还需要禁用它们,防止它们在下次启动时自动运行。
关闭daemons的方法
使用systemctl命令
启动服务:sudo systemctl start <service_name>
停止服务:sudo systemctl stop <service_name>
重启服务:sudo systemctl restart <service_name>
查看服务状态:sudo systemctl status <service_name>
设置服务开机自启:sudo systemctl enable <service_name>
关闭服务开机自启:sudo systemctl disable <service_name>
重新加载服务配置:sudo systemctl reload <service_name>
检查服务是否启用:sudo systemctl is-enabled <service_name>
列出所有服务:sudo systemctl list-units --type=service
查看系统整体状态:sudo systemctl is-system-running
-
使用kill命令(通过PID终止进程):
-
查找PID: pgrep <service_name> 终止进程: kill <PID> 或强制终止:kill -9 <PID>
-
2、Shutting down the GUI (关闭 GUI(图形用户界面))。
关闭GUI通常意味着停止相关的服务或进程,返回到命令行界面。这可能是因为用户需要优化系统资源,进行维护,或者偏好使用命令行环境。
命令同上面systemctl
3、Changing kernel parameters (改变内核参数)。
改变内核参数是Linux系统管理中高级任务之一,通常涉及到底层系统配置和性能优化
使用sysctl
命令
sysctl -a # 查看所有内核参数及其值
sysctl <parameter_name> # 查看特定参数(如 sysctl vm.swappiness)
sysctl -w <parameter_name>=<value> #临时修改参数
sysctl -p # 加载 /etc/sysctl.conf 中的配置
sysctl -p /path/to/file # 加载指定配置文件
使用 ulimit
命令(资源限制)
ulimit -a #查看当前资源限制
ulimit -n <value> # 最大打开文件数
ulimit -u <value> # 最大用户进程数
ulimit -n 1000000 # 将最大打开文件数设为 1000000
4、Kernel parameters (内核参数)
5、Tuning the processor subsystem (处理器⼦系统调优)。
6、Tuning the memory subsystem (内存⼦系统调优)。
7、Tuning the file system (⽂件系统⼦系统调优)。
8、Tuning the network subsystem(⽹络⼦系统调优)
4-8:做到这里发现太东西太多了,一时半会讲不完,建议大家在博客上搜别人的。
高级功能
日志管理
- 查看服务日志:
journalctl -u <服务名> # 查看指定服务日志 journalctl -u <服务名> -f # 实时跟踪日志 journalctl -u <服务名> --since "时间" --until "时间" # 按时间段筛选
服务依赖与单元控制
- 查看依赖关系:
systemctl list-dependencies <服务名> # 显示依赖树 systemctl show <服务名> --property=Requires # 查看强依赖
强制重载配置:
-
systemctl daemon-reload # 重新加载 systemd 配置
基本的 Vim 命令
·基础操作模式
Vim 有 3 种核心模式,掌握模式切换是高效编辑的关键:
- 普通模式(默认模式,按
Esc
返回) - 插入模式(按
i/a/o
等进入) - 命令模式(按
:
进入,输入命令后回车执行)
- 保存 要保存⽂件,请按ESC按钮并按 :wq! OR :ZZ b)
- 退出 要退出⽂件⽽不进⾏更改,请运⾏命令:q c) 跳转到⽂件中的特定⾏ 按ESC再按j向下移动⼀⾏。 k按键盘上移⼀⾏ 将光标移动到⾏⾸ 按^ 将光标移动到⾏尾 按$ 将光标移动到⽂件的开头1G 将光标移动到⽂件末尾G 将光标移动到⽂件中⾏号“n”的开头nG d)
- 复制⽂本 将光标移动到字符串或⽂本的开头。接下来按键盘上的 v 并向前按光标以突出显示⽂本。到达要复制的⽂本的末 尾后,请按yyank 的缩写来复制⽂本。 要将⽂本从当前位置复制到⾏尾 -y$ 复制整⾏ -yy 要复制下⾯的 4 ⾏ -4yy d)
- 粘贴⽂本 要粘贴⽂本,只需按p键盘上的 删除⽂本 要删除⼀⾏,请移⾄⼀⾏的开头。按下ESC按钮并按下dd 要删除单个单词,请将光标放在单词前⾯并点击dw 删除从当前单词到⾏尾的⽂本d$ 要删除下⾯运⾏的 3 ⾏3dd
vim filename | 打开/创建文件 |
:w | 保存文件 |
:q | 退出(未修改时) |
:q! | 强制退出(放弃修改) |
:wq 或 ZZ | 保存并退出 |
:e newfile | 打开新文件(不关闭当前) |
导航移动
命令 | 功能 |
---|---|
h/j/k/l | 左/下/上/右移动光标 |
0 或 ^ | 跳到行首(^ 到第一个非空字符) |
$ | 跳到行尾 |
w | 跳到下一个单词开头 |
b | 跳到上一个单词开头 |
Ctrl+f | 向下翻页 |
Ctrl+b | 向上翻页 |
gg | 跳到文件开头 |
G | 跳到文件末尾 |
nG | 跳到第 n 行(如 5G ) |
四、编辑文本
1. 进入插入模式
命令 | 功能 |
---|---|
i | 光标前插入 |
I | 行首插入 |
a | 光标后插入 |
A | 行尾插入 |
o | 下方新建行插入 |
O | 上方新建行插入 |
2. 删除文本
命令 | 功能 |
---|---|
x | 删除光标下字符 |
dd | 删除整行 |
ndd | 删除 n 行(如 3dd ) |
dw | 删除到单词末尾 |
d$ 或 D | 删除到行尾 |
d0 | 删除到行首 |
3. 复制粘贴
命令 | 功能 |
---|---|
yy | 复制整行 |
nyy | 复制 n 行 |
yw | 复制单词 |
p | 粘贴到光标后 |
P | 粘贴到光标前 |
五、搜索替换
命令 | 功能 |
---|---|
/pattern | 向下搜索 pattern |
?pattern | 向上搜索 pattern |
n | 跳到下一个匹配项 |
N | 跳到上一个匹配项 |
:%s/old/new/g | 全局替换 old 为 new |
六、撤销重做
命令 | 功能 |
---|---|
u | 撤销上一次操作 |
U | 撤销当前行所有修改 |
Ctrl+r | 重做上一次撤销 |
在linux中搜索⽂件
find
命令(最强大灵活)
# 基本语法
find [搜索路径] [匹配条件] [操作]
# 常用场景示例
1. 按文件名搜索
find /home -name "*.log" # 在/home下找所有.log文件
find . -iname "readme" # 不区分大小写找readme文件
2. 按类型搜索
find /var -type d -name "log" # 在/var下找名为log的目录
find /usr -type f -size +100M # 找大于100MB的普通文件
3. 按时间搜索(单位:天)
find /backup -mtime +7 # 找7天前修改过的文件
find /tmp -atime -1 # 找24小时内访问过的文件
4. 组合条件搜索
find / -user root -perm 777 # 找root用户拥有的777权限文件
5. 对搜索结果执行操作
find /data -name "*.tmp" -delete # 直接删除所有.tmp文件
find . -name "*.sh" -exec chmod +x {} \; # 给所有.sh文件加执行权限
locate
命令(最快但依赖数据库)
功能:通过预建数据库快速查找文件(需定期更新数据库)
# 基本语法
locate [选项] 文件名
# 常用场景示例
1. 快速查找文件
locate nginx.conf # 查找nginx配置文件
locate -i "*.pdf" # 不区分大小写找PDF文件
2. 使用正则匹配
locate -r "/usr/bin/.*python" # 找/usr/bin下含python的路径
3. 统计匹配数量
locate -c mysql # 统计含"mysql"的文件数量
# 更新数据库(需sudo权限)
sudo updatedb
which
命令(找可执行文件路径)
功能:在 $PATH
环境变量中查找命令的绝对路径。
# 示例
which python3 # 显示python3的安装路径
which -a ls # 显示所有名为ls的可执行文件路径
whereis git # 显示git的安装路径、手册页位置
whereis -b nginx # 仅显示nginx的可执行文件路径
grep
命令(文件内容搜索)
功能:在文件中搜索指定字符串或正则表达式。
# 基本语法
grep [选项] "搜索内容" 文件名
# 常用场景示例
1. 简单内容搜索
grep "error" /var/log/syslog # 在日志中找含"error"的行
2. 递归搜索目录
grep -r "TODO" ./src # 在src目录下递归找含"TODO"的文件
3. 显示行号及统计
grep -n "warning" file.txt # 显示行号
grep -c "success" *.log # 统计包含"success"的行数
4. 正则表达式匹配
grep "^[A-Z]" names.txt # 找以大写字母开头的行
LINUX系统软件安装和卸载的常⻅⽅法
- rpm包卸载:rpm -e XXX.rpm (如果想忽略依赖,可加上–nodeps)
- yum remove xxx.rpm这种⽅法⾮常不建议使⽤,卸载过程会将待卸载的软件包所依赖的软件包⼀并卸载掉,很 容易造成系统缺少某些包⽽崩溃等问题
- 源码包卸载:cd命令进⼊编译后的软件⽬录,即安装时的⽬录,执⾏makeuninstall命令即可;或者直接删除安 装⽬录
$PATH和软连接及他的用法
1. $PATH
环境变量
作用:
$PATH
是一个环境变量,定义了系统在哪些目录中查找可执行文件(如命令、脚本等)。当你在终端输入命令时,系统会按照 $PATH
中列出的目录顺序搜索对应的可执行文件。
查看当前 $PATH
:
echo $PATH
# 输出示例:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
修改PATH
export PATH=$PATH:/新的/目录路径
# 例如:将 /home/user/bin 添加到 PATH
export PATH=$PATH:/home/user/bin
永久修改 $PATH:
将上述 export 命令添加到 ~/.bashrc 或 ~/.bash_profile 文件中,然后执行 source ~/.bashrc。
which [命令] #查看命令路径
2. 软连接(符号链接)
-
作用:
软连接(Symbolic Link)是一种特殊文件,指向另一个文件或目录的路径。类似于Windows的“快捷方式”。 -
创建软连接
-
ln -s 目标文件或目录路径 软连接名称 # 示例:将 /var/www/html 链接到当前目录的 web ln -s /var/www/html web
特点:
- 软连接可以跨文件系统。
- 删除软连接不会影响目标文件。
- 可以为目录创建软连接。
-
使用场景:
- 为常用目录创建快捷方式(如
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
)。 - 管理不同版本的软件(如为Python3创建软连接
python
)。
- 为常用目录创建快捷方式(如
3. $PATH
与软连接的结合使用
-
场景:
假设你有一个自定义脚本/home/user/scripts/mytool.sh
,希望直接在终端输入mytool
运行它。 -
创建软连接: ln -s /home/user/scripts/mytool.sh /usr/local/bin/mytool 确保 /usr/local/bin 在 $PATH 中: echo $PATH # 如果输出包含 /usr/local/bin,则无需修改。 直接运行: mytool
总结
$PATH
:控制命令的搜索路径,让系统知道去哪里找可执行文件。- 软连接:为文件或目录创建“快捷方式”,便于访问或管理。
- 结合使用:通过软连接将常用工具链接到
$PATH
中的目录,简化命令输入。
LVS 三种模式的⼯作过程
LVS的三种模式包括NAT(网络地址转换)、TUN(隧道模式)和DR(直接路由模式)。每种模式的工作过程有所不同,适用于不同的场景。
NAT模式(VS-NAT)
1. 工作过程
- 请求分发:客户端向负载均衡器的虚拟IP(VIP)发送请求。
- IP修改与转发:负载均衡器根据调度算法选择后端服务器,修改请求数据包的目标IP为后端服务器的真实IP,并将请求转发给该服务器。
- 响应返回:后端服务器处理请求后,将响应返回给负载均衡器,负载均衡器再将响应返回给客户端。
2. 特点
- 实现简单:无需修改后端服务器配置。
- 地址限制:后端服务器可使用私有IP,仅负载均衡器需合法IP。
- 流量瓶颈:所有请求和响应均需经过负载均衡器。
3. 优缺点
- 优点:适用于小型网络,后端服务器无需公网IP。
- 缺点:负载均衡器可能成为性能瓶颈,扩展性有限。
4. 适用场景
- 小规模集群或测试环境。
- 后端服务器无公网IP,需通过负载均衡器访问。
TUN模式(VS-TUN)
1. 工作过程
- 请求封装:客户端向负载均衡器的VIP发送请求。
- IP隧道封装:负载均衡器将请求封装在新的IP头中(目标IP为后端服务器IP),通过隧道转发给后端服务器。
- 直接响应:后端服务器处理请求后,直接返回响应给客户端(无需经过负载均衡器)。
2. 特点
- 高性能:负载均衡器仅处理请求分发,响应不经过它。
- 跨网段支持:后端服务器可分布在公网或不同网段。
- 协议要求:后端服务器需支持IPTUNNEL协议。
3. 优缺点
- 优点:支持大规模请求,适用于公网环境。
- 缺点:隧道开销可能影响性能,需后端服务器支持特定协议。
4. 适用场景
- 后端服务器分布在公网或异地。
- 需要高性能且支持跨网段的负载均衡。
DR模式(VS-DR)
1. 工作过程
- MAC地址修改:客户端向负载均衡器的VIP发送请求。
- 直接路由:负载均衡器修改请求数据包的目标MAC地址为后端服务器的MAC地址,直接转发请求。
- 响应返回:后端服务器处理请求后,直接返回响应给客户端。
2. 特点
- 最高性能:负载均衡器仅修改MAC地址,无IP封装开销。
- 广播域要求:负载均衡器和后端服务器需在同一个广播域(如同一交换机)。
- IP共享:所有服务器(包括负载均衡器)均配置相同的VIP。
3. 优缺点
- 优点:性能最高,支持跨网段(需路由配置)。
- 缺点:配置复杂,需调整ARP参数避免冲突。
4. 适用场景
- 高性能要求的场景,如大型网站或高并发应用。
- 后端服务器需直接响应客户端,减少延迟。
总结对比
模式 | 性能 | 跨网段支持 | 配置复杂度 | 适用场景 |
---|---|---|---|---|
NAT | 低 | 不支持 | 简单 | 小型网络、测试环境 |
TUN | 中 | 支持 | 中等 | 公网环境、异地服务器 |
DR | 高 | 支持(需路由) | 复杂 | 高性能需求、大型网络 |
linux文件权限修改
符号模式
- 语法:
chmod [选项] [用户表示符][操作符][权限字符] [文件或目录名]
- 用户表示符:u 文件所有者(user),g 文件所有组(group), o 其他用户(Others), a 所有用户(All 等同于 ugo)。
- 操作符:+ 添加权限, - 移除权限, = 设置权限
- 权限字符:r 读权限(Read)w 写权限(Write),x 执行权限(Execute)
-
# 为文件所有者添加执行权限 chmod u+x file.txt # 移除文件所属组的写权限 chmod g-w file.txt # 设置所有用户只读权限 chmod a=r file.txt # 递归修改目录及其子目录和文件的权限 chmod -R u+rwx,go-rwx my_directory/
数字模式
-
语法 chmod [选项] [三位八进制数字] [文件或目录名]
-
权限值:读 (r): 4,写(w): 2,执行(x): 1,
-
注意,数字可叠加比如4+2+1=7(读写执行)4+2=6(读写)4+1=5(读执行)1+2=3(写执行)
-
权限组合
- 第一个数字:文件所有者的权限。
- 第二个数字:文件所属组的权限。
- 第三个数字:其他用户的权限。
-
# 设置文件权限为 rwxr-xr-x(755)文件所有者:rwx(读、写、执行)文件所属组:r-x(读、执行)其他用户:r--(只读) chmod 755 file.txt # 设置文件权限为 rw-r--r--(644) chmod 644 file.txt # 递归设置目录及其子目录和文件的权限 chmod -R 755 my_directory/
其他相关命令
-
修改文件所有者:
chown
-
修改文件所属组:
chgrp
-
chown user:group file.txt # 修改文件所有者和所属组 chown -R user:group directory/ # 递归修改目录及其子目录和文件 chgrp group file.txt # 修改文件所属组 chgrp -R group directory/ # 递归修改目录及其子目录和文件
特殊权限suid,sgid,sbit
1. SUID(Set User ID)
- 作用:
当执行一个设置了SUID位的文件时,进程会以文件所有者的身份运行,而非执行者的身份。- 典型场景:允许普通用户执行需要更高权限的操作(如修改系统密码)。
- 示例:
passwd
命令默认具有SUID权限,普通用户运行它时可修改/etc/shadow
文件(该文件通常仅root可写)。
- 设置与标识:
- 设置命令:
chmod u+s 文件名
- 撤销命令:
chmod u-s 文件名
- 权限标识:
- 若文件有执行权限:所有者权限位的
x
变为s
(如-rwsr-xr-x
)。 - 若文件无执行权限:显示为
S
(大写,此时SUID无效)。
- 若文件有执行权限:所有者权限位的
- 二进制码4000
- 设置命令:
- 安全风险:
若SUID被滥用(如为恶意脚本设置SUID),可能导致提权漏洞。
2. SGID(Set Group ID)
- 作用:
- 对文件:执行时进程继承文件所属组的权限。
- 对目录:用户在该目录下创建的新文件/子目录,自动继承目录的组属性。
- 典型场景:协作开发中,确保所有成员创建的文件属于同一组(如共享目录
/tmp/project
)。
- 设置与标识:
- 设置命令:
chmod g+s 文件名或目录名
- 撤销命令:
chmod g-s 文件名或目录名
- 权限标识:
- 若文件/目录有执行权限:组权限位的
x
变为s
(如-rwxr-sr-x
)。 - 若无执行权限:显示为
S
(大写,此时SGID无效)。
- 若文件/目录有执行权限:组权限位的
- 二进制码2000
- 设置命令:
-
3. SBIT(Sticky Bit)
- 作用:
仅对目录有效。设置后,用户只能删除或重命名自己拥有的文件,即使其他用户对目录有写权限。- 典型场景:保护公共目录(如
/tmp
)中的文件,防止非所有者误删或恶意删除。
- 典型场景:保护公共目录(如
- 设置与标识:
- 设置命令:
chmod +t 目录名
- 撤销命令:
chmod -t 目录名
- 权限标识:目录权限末尾显示
t
(如drwxrwxrwt
)。 - 二进制码1000
- 设置命令:
总结
权限位 | 作用对象 | 核心功能 | 典型场景 |
---|---|---|---|
SUID | 文件 | 以文件所有者身份执行 | passwd 命令、提权脚本 |
SGID | 文件或目录 | 继承文件所属组权限(文件)或强制新文件继承目录组(目录) | 共享开发目录、协作文件 |
SBIT | 仅目录 | 限制删除操作,仅文件所有者或root可删除文件 |
|
注:linux提权以后会单出笔记
CURL命令
curl
是 Linux 中一个强大的命令行工具,用于通过多种协议(如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等)传输数据。它支持上传、下载、测试 API、调试请求等操作,是开发者和系统管理员的常用工具。
基本语法
curl [选项] [URL]
选项表格
以下是 curl
命令的常见用法及选项的表格总结:
选项/用法 | 说明 | 示例 |
---|---|---|
基本请求 | ||
curl [URL] | 默认发起 GET 请求,输出响应内容到终端 | curl https://example.com |
下载文件 | ||
-o <文件名> | 将响应内容保存到指定文件 | curl -o output.html https://example.com |
-O | 使用远程文件名保存文件 | curl -O https://example.com/file.zip |
发送请求 | ||
-X <METHOD> | 指定 HTTP 请求方法(GET、POST、PUT、DELETE 等) | curl -X POST https://example.com/api |
-d "<数据>" | 发送 POST 数据(默认 Content-Type 为 application/x-www-form-urlencoded ) | curl -d "key=value" https://example.com |
--data-binary "<数据>" | 以二进制格式发送 POST 数据 | curl --data-binary "@file.bin" https://example.com |
--data-urlencode "<数据>" | 发送 URL 编码后的 POST 数据 | curl --data-urlencode "q=hello world" https://example.com |
-F "<name=content>" | 以 multipart/form-data 格式发送数据(常用于文件上传) | curl -F "file=@local.txt" https://example.com/upload |
-H "<header>" | 添加自定义请求头 | curl -H "Content-Type: application/json" https://example.com |
认证与安全 | ||
-u <user:password> | 使用 HTTP 基本认证 | curl -u username:password https://example.com |
--oauth2-bearer <token> | 使用 OAuth 2.0 的 Bearer Token | curl --oauth2-bearer "token" https://example.com |
--digest | 使用 HTTP 摘要认证 | curl --digest -u user:pass https://example.com |
-k 或 --insecure | 忽略 SSL 证书验证(仅测试环境使用) | curl -k https://example.com |
--cacert <文件> | 指定 CA 证书文件 | curl --cacert ca.crt https://example.com |
--cert <证书[:密码]> | 指定客户端证书文件及密码 | curl --cert client.pem:password https://example.com |
--key <私钥文件> | 指定私钥文件 | curl --key private.key https://example.com |
请求控制 | ||
-L 或 --location | 自动跟随重定向 | curl -L https://example.com |
--max-time <秒> | 设置整个请求的最大允许时间 | curl --max-time 10 https://example.com |
--connect-timeout <秒> | 设置连接超时时间 | curl --connect-timeout 5 https://example.com |
--limit-rate <速度> | 限制下载速度(如 100K 、1M ) | curl --limit-rate 100K -O https://example.com/largefile.zip |
-C - | 断点续传 | curl -C - -O https://example.com/largefile.zip |
--retry <次数> | 设置传输失败时的最大重试次数 | curl --retry 3 https://example.com |
调试与日志 | ||
-v 或 --verbose | 显示详细输出(调试模式) | curl -v https://example.com |
--trace <文件> | 将详细通信信息写入指定文件 | curl --trace debug.log https://example.com |
--trace-ascii <文件> | 类似 --trace ,但省略二进制部分 | curl --trace-ascii debug.txt https://example.com |
-i 或 --include | 在输出中包含 HTTP 响应头 | curl -i https://example.com |
-I 或 --head | 仅获取 HTTP 响应头(HEAD 请求) | curl -I https://example.com |
Cookie 管理 | ||
-b <字符串/文件> | 发送 Cookie 字符串或从文件读取 | curl -b "name=value" https://example.com |
-c <文件> | 将服务器返回的 Cookie 保存到文件 | curl -c cookies.txt https://example.com |
代理设置 | ||
-x <代理服务器> | 使用 HTTP/HTTPS 代理 | curl -x http://proxy.example.com:8080 https://example.com |
--socks5 <代理服务器> | 使用 SOCKS5 代理 | curl --socks5 socks5://proxy.example.com:1080 https://example.com |
--proxy-user <user:password> | 设置代理服务器的用户名和密码 | curl --proxy-user user:pass -x http://proxy.example.com https://example.com |
协议支持 | ||
--http1.1 | 强制使用 HTTP/1.1 协议 | curl --http1.1 https://example.com |
--http2 | 启用 HTTP/2 协议 | curl --http2 https://example.com |
--http3 | 启用 HTTP/3 协议 | curl --http3 https://example.com |
其他功能 | ||
--compressed | 要求服务器发送压缩的响应(gzip、deflate) | curl --compressed https://example.com |
--write-out "<格式>" | 自定义输出格式(如显示状态码、耗时等) | curl --write-out "%{http_code}\n" https://example.com |
--silent 或 -s | 静默模式(不显示进度条或错误信息,结合 -S 可仅显示错误) | curl -sS https://example.com |
--parallel 和 --parallel-max <并发数> | 并行下载多个文件(需 curl 7.66.0+) | curl --parallel --parallel-max 5 -O https://example.com/file1 -O https://example.com |
示列
默认 GET 请求,输出到终端
lsof命令
lsof
(List Open Files)是 Linux/Unix 系统中用于列出当前系统中所有被打开文件的强大命令行工具。在 Linux 系统中,几乎所有资源(如普通文件、目录、套接字、设备、管道等)都可被视为文件,lsof
能显示这些资源的使用情况,对系统监控、排错和资源管理意义重大。
核心功能
- 查看进程打开的文件:可列出指定进程或所有进程打开的文件、设备、套接字等信息。
- 监控网络连接:能显示进程打开的网络套接字,包括 TCP/UDP 连接、监听端口等。
- 定位资源占用:帮助排查文件被占用无法删除、设备无法卸载等问题。
- 分析进程行为:可查看进程的文件描述符、内存映射文件等,辅助分析进程的资源使用情况。
常用选项
- 基础过滤:
-c <进程名>
:显示指定进程打开的文件,如lsof -c sshd
列出sshd
进程打开的文件。-p <PID>
:显示指定进程 ID 打开的文件,如lsof -p 1234
列出进程 ID 为 1234 的进程打开的文件。-u <用户名>
:显示指定用户打开的文件,如lsof -u root
列出root
用户打开的文件。
- 文件与目录:
+d <目录>
:显示指定目录下被打开的文件(不递归子目录),如lsof +d /var/log
列出/var/log
目录下被打开的文件。+D <目录>
:递归显示指定目录及其子目录下被打开的文件,如lsof +D /var/log
递归列出/var/log
目录及其子目录下被打开的文件。
- 网络相关:
-i
:显示所有网络连接,可结合协议类型、主机名、IP 地址、端口号等进一步过滤,如lsof -i :80
列出所有使用 80 端口的进程,lsof -i TCP
列出所有 TCP 网络连接,lsof -i UDP
列出所有 UDP 网络连接。
- 文件描述符:
-d <文件描述符>
:显示使用指定文件描述符的进程,如lsof -d 1
显示使用标准输出(文件描述符 1)的进程。-d ALL
:显示所有文件描述符的打开文件。
- 其他实用选项:
-a
:与其他选项结合使用时表示“与”的逻辑关系,如lsof -u user -a -p PID
查找某个用户下的指定进程打开的文件。-n
:不将 IP 地址转换为主机名,加快执行速度,如lsof -i -n
。-P
:不解析端口号,如lsof -i -P
。-t
:只显示进程 ID,常用于结合其他命令处理,如lsof -t -i :80
只显示占用 80 端口的进程 ID。-U
:显示打开的 UNIX domain socket 文件。+L1
:显示被删除但仍在使用的文件,数字 1 表示显示链接数小于 1 的文件。-s
:显示打开文件的大小。-l
:显示文件锁定状态。-r <秒数>
:定期重复执行lsof
命令,用于持续监控,如lsof -i :80 -r 2
每 2 秒刷新一次 80 端口的占用情况。
典型应用场景
- 排查文件占用问题:当文件无法删除或设备无法卸载时,使用
lsof
查找占用该文件或设备的进程,如lsof /path/to/file
查找打开指定文件的进程,lsof /dev/sda1
查找占用指定设备的进程。 - 监控网络连接:查看进程打开的网络套接字,排查网络连接问题,如
lsof -i :22
查看 22 端口的占用情况,lsof -i @192.168.1.100
查看连接到指定主机的网络状态。 - 定位进程锁定的文件:排查文件或数据库被锁定的问题,如
lsof -c mysql
查看 MySQL 进程打开的文件,判断是否有锁文件。 - 系统性能分析:查看特定进程占用的文件描述符,判断进程的资源使用情况,如
lsof -p <PID> | wc -l
统计进程打开的文件描述符数量。 - 查找僵尸文件:使用
lsof | grep deleted
查找已被删除但仍被进程占用的文件,释放磁盘空间。 - 恢复已删除文件:若文件被删除但仍有进程占用,可通过
lsof
找到该进程,从/proc/<PID>/fd/
目录下恢复文件,如cat /proc/1234/fd/6 > /path/to/restored/file
。
常用选项表格
选项 | 作用 | 示例 |
---|---|---|
-c <进程名> | 显示指定进程名打开的文件 | lsof -c nginx → 列出 nginx 进程打开的文件 |
-p <PID> | 显示指定进程 ID 打开的文件 | lsof -p 1234 → 列出进程 ID 为 1234 的进程打开的文件 |
-u <用户名> | 显示指定用户打开的文件 | lsof -u root → 列出 root 用户打开的文件 |
+d <目录> | 显示指定目录下被打开的文件(不递归子目录) | lsof +d /var/log → 列出 /var/log 目录下被打开的文件 |
+D <目录> | 递归显示指定目录及其子目录下被打开的文件 | lsof +D /var/log → 递归列出 /var/log 目录及其子目录下被打开的文件 |
-i | 显示所有网络连接(支持协议、端口、IP 过滤) | lsof -i :80 → 列出所有使用 80 端口的进程 |
-i TCP | 显示所有 TCP 网络连接 | lsof -i TCP → 列出所有 TCP 连接 |
-i UDP | 显示所有 UDP 网络连接 | lsof -i UDP → 列出所有 UDP 连接 |
-i @<IP> | 显示连接到指定 IP 的网络连接 | lsof -i @192.168.1.100 → 列出连接到 192.168.1.100 的网络状态 |
-d <描述符> | 显示使用指定文件描述符的进程 | lsof -d 1 → 显示使用标准输出(文件描述符 1)的进程 |
-d ALL | 显示所有文件描述符的打开文件 | lsof -d ALL → 列出所有文件描述符的打开情况 |
-n | 不解析 IP 地址为主机名(加快执行速度) | lsof -i -n → 显示网络连接但不解析主机名 |
-P | 不解析端口号为服务名(如显示 80 而不是 http ) | lsof -i -P → 显示网络连接但不解析端口名 |
-t | 只显示进程 ID(用于脚本处理) | lsof -t -i :80 → 只显示占用 80 端口的进程 ID |
-U | 显示打开的 UNIX domain socket 文件 | lsof -U → 列出所有 UNIX domain socket |
+L1 | 显示被删除但仍在使用的文件 | lsof +L1 → 列出链接数小于 1 的被删除文件 |
-s | 显示打开文件的大小 | lsof -s → 显示文件大小信息 |
-l | 显示文件锁定状态 | lsof -l → 显示文件锁定信息 |
-r <秒数> | 定期重复执行(用于持续监控) | lsof -i :80 -r 2 → 每 2 秒刷新一次 80 端口的占用情况 |
文件操作命令
这个比较简单,我随便写写
ls -l # 以长格式显示文件和目录的详细信息 相当于 ll
ls -a # 显示所有文件,包括隐藏文件
ls -lh # 以人类可读的格式显示文件大小
cp file.txt backup/ # 复制文件到 backup 目录
cp -r source_dir/ target_dir/ # 递归复制整个目录
mv old_name.txt new_name.txt # 重命名文件
mv file.txt /tmp/ # 将文件移动到 /tmp 目录
rm file.txt # 删除文件
rm -r temp/ # 递归删除目录
rm -rf temp/ # 强制递归删除目录(慎用!)
rm -rf* #懂得都懂
touch newfile.txt # 创建一个新的空文件
touch existingfile.txt # 更新已有文件的修改时间
cat file.txt # 一次性显示整个文件内容
head -n 10 file.txt # 显示文件的前 10 行
tail -n 20 file.txt # 显示文件的最后 20 行
tail -f logfile.log # 实时监控日志文件更新
wc -l file.txt #查看文件有多少行
wc -w file.txt #查看文件有多少个单词(以空格判断)
wc -c file.txt #查看文件字节数
./* #linux所有文件
du file.txt #查看文件或目录占用磁盘大小
du -s file.txt #只显示汇总大小
du -h file.txt #以高可读性显示如果不写,默认kb显示
du -sh file.txt #懂得都懂
find /home/user -name "project*" # 查找名称以 project 开头的文件或目录
find . -type f -size +10M # 查找当前目录中大于 10 MB 的文件
grep "error" logfile.log # 在日志文件中搜索包含 "error" 的行
grep -ri "function" src/ # 在 src 目录中递归搜索 "function"
mkdir new_dir # 创建新目录
mkdir -p dir1/dir2/dir3 # 递归创建多级目录
rmdir empty_dir # 删除空目录
cd /path/to/directory # 切换到指定目录
cd .. # 切换到上一级目录
cd ~ # 切换到用户主目录
pwd # 显示当前工作目录的完整路径
ifconfig # 显示已启用的网络接口
ifconfig eth0 up # 启用 eth0 网络接口
ifconfig eth0 down # 禁用 eth0 网络接口
ping example.com # 测试与 example.com 的连通性
netstat -anpt # 显示所有活动的 TCP 连接
echo "Hello, World!" # 输出字符串
tar -czvf archive.tar.gz /path/to/directory # 压缩目录为 tar.gz 文件
zip -r archive.zip /path/to/directory # 压缩目录为 zip 文件
df -h # 查看磁盘空间使用情况(以人类可读格式显示)
du -sh /path/to/directory # 查看目录的大小
man ls # 查看 ls 命令的手册
按ctrl+l #窗口清屏
shutdown -r now # 重新启动操作系统
shutdown now # 关机
shutdown 7:00 # 系统在今天的 7:00 会关机
shutdown +数字 # 系统再过几分钟后自动关机
shutdown -c # 取消之前指定的关机计划
whoami #查看当前用户信息
who #显示已登录用户信息
w #显示系统登录用户信息和负载信息
last #显示近期登录终端加 -数字 是显示几条
lastlog #显示关于用户登录记录
userdel -r 用户名 #删除用户和用户文件(去掉r只删除用户)
useradd 用户名 #添加用户
groupadd 组名 #添加组
groupdel 组名 #删除组
groupmod -n yh -g 1001 admin #将名为admin的组改名为yh并且id号改为1001
id -u #查看用户uid
id -g #查看用户gid
usermod指令:usermod -[参数] [用户名]
-g #设置主组 -G #设置附加组 -u 设置uid -L #上锁 -U #解锁 -c #添加注释 -s #设置登陆shell
usermod -aG 组名 用户名 #在组内添加用户
usermod -G 组1,组2,... 用户名 #在组内移除用户
usermod -aG 组1,组2,... 用户名 #将用户设置在多个组中
usermod -u 1001 -s bin/bash -c 'yunwei' admin #将admin用户uid改为1001+可登录+注释为 yunwei
passwd 用户名 #修改用户密码
id 用户名 #显示用户名id root用户是0,其他用户一般是从1000开始
getent group #显示组的gid和成员列表
sudo chown 用户名 文件名 #修改文件所有者
sudo chmod u+w 文件名 #为用户添加文件写入权限,w为写入
visudo #编辑sudo配置文件
解压命令
1. tar
命令
tar
命令用于处理 .tar
、.tar.gz
、.tar.bz2
等格式的压缩文件。
常用参数:
-x
:解压文件。-v
:显示详细过程。-f
:指定文件名。-z
:使用gzip
解压。-j
:使用bzip2
解压。-J
:使用xz
解压。
示例:
- 解压
.tar
文件:tar -xvf filename.tar
- 解压
.tar.gz
文件:tar -xzvf filename.tar.gz
- 解压
.tar.bz2
文件: -
tar -xjvf filename.tar.bz2
- 解压
.tar.xz
文件: -
tar -xJvf filename.tar.xz
2. gzip
命令
gzip
命令用于解压缩 .gz
文件,通常与 tar
结合使用。
常用参数:
-d
:解压缩文件。-k
:保留原始文件。-r
:递归压缩目录。
示例:
- 使用
gunzip
解压.gz
文件:gunzip filename.gz
- 使用
gzip -d
解压.gz
文件 -
gzip -d filename.gz
3. bzip2
命令
bzip2
命令用于解压缩 .bz2
文件,通常与 tar
结合使用。
常用参数:
-d
:解压缩文件。-k
:保留原始文件。-v
:显示详细过程。
示例:
- 使用
bunzip2
解压.bz2
文件:bunzip2 filename.bz2
- 使用
bzip2 -d
解压.bz2
文件:bzip2 -d filename.bz2
4. unzip
命令
unzip
命令用于解压 .zip
文件。
常用参数:
-d
:指定解压目录。-l
:列出压缩文件内容。-o
:覆盖已存在的文件。
示例:
- 解压
.zip
文件到当前目录:unzip filename.zip
- 解压
.zip
文件到指定目录: -
unzip filename.zip -d /home
总结
命令 | 适用格式 | 示例 |
---|---|---|
tar | .tar , .tar.gz , .tar.bz2 , .tar.xz | tar -xzvf filename.tar.gz |
gzip | .gz | gunzip filename.gz |
bzip2 | .bz2 | bunzip2 filename.bz2 |
unzip | .zip | unzip filename.zip -d /path/to/dir |
重定向 > 和 >>
Linux 允许将命令执行结果 重定向到一个 文件
将本应显示在终端上的内容 输出/追加 到指定文件中
其中
> 表示输出,会覆盖文件原有的内容
>> 表示追加,会将内容追加到已有文件的末尾
完结撒花~