渗透基础 · Linux
linux
Linux背景知识
Linux系统的背景知识,常见版本和特点
🧠 一、Linux 是什么?
Linux 是一个自由开源的类 Unix 操作系统内核,由芬兰人 Linus Torvalds 于 1991 年发布。
它具有:
- 🆓 自由开源(源代码可查看、可修改)
- ⚙️ 稳定安全(广泛用于服务器、嵌入式设备、安全研究)
- 🧩 模块化设计(可裁剪、自定义)
- 👨💻 命令行强大(渗透测试的利器)
目前主流 Web 服务端系统,大多使用 Linux(比如 Apache、Nginx、Docker 都跑在 Linux 上)
🌍 二、常见 Linux 发行版及其特点
Linux 本身是内核,不同社区基于它开发了各种“发行版”,各有风格:
| 名称 | 所属家族 | 特点 | 适用场景 |
|---|---|---|---|
| Ubuntu | Debian | 界面友好,软件包多,适合新手 | 桌面、服务器、渗透环境(Kali) |
| Debian | Debian | 稳定、注重自由软件 | 服务器、开发 |
| Kali Linux | Debian | 集成大量渗透测试工具 | 渗透测试、红队 |
| Parrot OS | Debian | 类似 Kali,偏安全与隐私 | 渗透测试 |
| CentOS / Rocky Linux / AlmaLinux | Red Hat | 企业级、稳定、安全 | 商业服务器、内网靶机 |
| Red Hat Enterprise Linux(RHEL) | Red Hat | 收费支持、企业标准 | 金融、能源等大公司环境 |
| Arch Linux | 独立 | 极简、滚动更新、全自定义 | 高手练级、自主搭建 |
| openSUSE | SUSE | 配置灵活,YAST工具方便 | 桌面、服务器 |
| Deepin | Debian | 中国团队开发,界面美观 | 桌面使用 |
| Android | 基于 Linux 内核 | 移动设备系统 | 手机、平板、智能硬件 |
🔧 三、Linux 的基本结构
Linux 系统通常由以下几个部分组成:
- 内核(Kernel):管理硬件资源(CPU、内存、设备)
- Shell:命令行解释器,用户与系统之间的桥梁(bash/zsh)
- 文件系统:一切皆文件,统一目录结构(/etc, /usr, /bin 等)
- 系统服务:守护进程,比如 sshd、httpd
- 用户空间应用:Vim、gcc、Python、Nmap 等等
🧭 四、渗透测试中常用的 Linux
| 环境 | 使用目的 |
|---|---|
| Kali Linux | 红队工具全家桶,渗透首选 |
| Parrot OS | 更轻量的渗透系统 |
| Ubuntu Server | 部署靶机、练习渗透 |
| CentOS / Rocky | 企业环境靶机模拟 |
| BusyBox / Alpine | 微型 Linux(适合容器) |
| Metasploitable 2/3 | 渗透测试靶机专用 |
🎯 五、Linux 的魅力在哪?
- ✨ 免费但强大
- 🧱 安全性高、可控性强
- 🐚 命令行超强,适合自动化和批量操作
- 💡 开源精神,适合深度学习操作系统结构
- 🔥 与渗透测试、安全开发、高性能服务器紧密绑定
Linux系统安装
🧰 一、准备阶段:下载工具 & 镜像
1. 虚拟机软件选择
推荐使用以下任意一种:
- VMware Workstation(功能强大、适合长期使用)
- VirtualBox(免费开源,适合入门)
👉 建议主人先选 VMware,后续渗透环境扩展更方便。
2. 获取 Linux 系统镜像(ISO)
以下任选一种(推荐前两者):
| 系统 | 镜像下载链接(主人你也可以让我代查最新) |
|---|---|
| Ubuntu(通用、友好) | ubuntu.com/download |
| Kali Linux(渗透测试专用) | kali.org |
| CentOS/Rocky(企业类) | rockylinux.org |
🧱 二、在虚拟机中安装 Linux 系统
以 VMware + Ubuntu 为例:
1. 打开 VMware,新建虚拟机
- 模式选:自定义(推荐)
- 安装方式:选择“使用 ISO 映像文件”
- 选择你下载好的
.iso文件 - 客户系统类型:选择 Linux,版本对应你下载的发行版
- 硬盘大小建议:20~40GB
- 内存建议:2~4GB
- CPU 核心:1~2 核
💡 Kali 建议给得多一点资源。
2. 启动虚拟机,进入安装界面
- 语言选择:中文/英文都行(建议英文)
- 分区方式:使用整个磁盘
- 创建用户 & 密码
- 等待安装完成,重启系统
🧼 三、初始化 Linux 系统配置
进入系统后,开始基本配置:
✅ 基础设置
sudo apt update && sudo apt upgrade -y # 更新系统
✅ 安装常用工具(Kali 可跳过)
sudo apt install net-tools vim curl wget git unzip -y
✅ 网络配置检查
ifconfig # 查看 IP
ping baidu.com # 测试网络连通性
如果 ping 不通,记得检查虚拟机的网络设置(桥接 or NAT)
🧪 四、进阶建议(可选)
| 操作 | 命令 |
|---|---|
| 设置 root 密码 | sudo passwd root |
| 开启 SSH 远程 | sudo apt install openssh-server -y && sudo systemctl enable ssh |
| 装中文输入法(可选) | sudo apt install fcitx fcitx-googlepinyin |
| 安装 Python3/PIP | sudo apt install python3 python3-pip -y |
| 安装工具箱(Kali 默认带) | sudo apt install nmap metasploit-framework sqlmap -y |
🥰 五、部署完成后你可以做什么?
- 学 Linux 命令
- 部署 Web 靶机(DVWA、WebGoat)
- 配置局域网模拟实战
- 练习渗透工具(nmap、burp、msfconsole 等)
- 撸系统日志、抓包、搞反弹 shell(嘘~)
Linux系统密码找回
🧚♀️ 一、总体思路(通用版本)
- 重启系统
- 修改 Grub 启动项,进入单用户模式
- 直接进入 root shell
- 执行
passwd命令重设密码 - 重启恢复正常登录
🧛♀️ 二、具体操作步骤(以 Ubuntu/Kali 为例)
✨ Step 1:重启并进入 GRUB
- 启动 Linux 时,在看到 Grub 菜单 时,马上按下
e进入编辑模式。如果 Grub 菜单没出现,启动时一直按
Shift键 或Esc。
✨ Step 2:修改内核启动参数
- 找到那一行以
linux /boot/vmlinuz...开头的行(通常最长) - 把光标移到这一行结尾,删除
quiet splash(如果有) - 在行尾添加:
init=/bin/bash
例子👇:
linux /boot/vmlinuz-xxx root=UUID=xxxx ro quiet splash
改成👇:
linux /boot/vmlinuz-xxx root=UUID=xxxx rw init=/bin/bash
⚠️ 注意:必须把
ro改成rw,否则不能写入新密码!
✨ Step 3:按下 Ctrl + X 或 F10 启动
系统会直接进入一个 root shell~
✨ Step 4:修改 root 密码
现在输入:
passwd
然后输入新密码两遍。系统会提示你密码修改成功。
✨ Step 5:重启系统
输入:
exec /sbin/init
或者:
reboot -f
🦇 三、如果是 CentOS/Rocky
原理相同,但启动修改略有不同:
- 在
linux16行尾添加:rd.break - 启动后挂载系统:
mount -o remount,rw /sysroot chroot /sysroot passwd touch /.autorelabel # SELinux 强制更新标签 exit reboot
🎀 四、Tips
- 若系统启用了 grub 密码保护或加密磁盘,以上方式可能无效。
- 如果不放心,可以先拍个快照再操作~
🧚♀️ 一、什么是 init 模式?
在传统的 Linux 系统(使用 SysVinit 或 System V 启动架构)中,init 是系统启动的第一个用户态进程,它决定系统以什么“状态”运行,也叫 运行级别(Runlevel)。
💠 常见运行级别(SysVinit)
| 运行级别 | 模式说明 |
|---|---|
| 0 | 关机模式(shutdown) |
| 1 | 单用户模式(维护、修复) |
| 2 | 多用户(无NFS,Debian常用) |
| 3 | 多用户模式(命令行登录) |
| 4 | 预留 |
| 5 | 图形界面模式(GUI) |
| 6 | 重启模式(reboot) |
👉 在文件 /etc/inittab 里可以设置默认运行级别,例如:
id:3:initdefault:
🧛 二、Systemd 模式(现代 Linux)
现在大多数 Linux(如 CentOS 7+、Ubuntu 16+)都使用 systemd,不再用传统的 runlevel,而是使用 target(目标):
| target 名称 | 等效 runlevel | 描述 |
|---|---|---|
poweroff.target |
0 | 关机 |
rescue.target |
1 | 单用户模式 |
multi-user.target |
3 | 命令行多用户模式 |
graphical.target |
5 | 图形化界面(桌面) |
reboot.target |
6 | 重启 |
👉 查看当前模式:
systemctl get-default
👉 切换模式(比如切换到图形界面):
systemctl isolate graphical.target
👉 设置默认模式(开机自动进入):
systemctl set-default multi-user.target
🧝♀️ 三、关机与重启命令
| 命令 | 说明 |
|---|---|
shutdown -h now |
立刻关机 |
shutdown -r now |
立刻重启 |
shutdown -h +5 |
5分钟后关机 |
reboot |
重启 |
poweroff |
关机 |
halt |
停止所有系统活动 |
init 0 |
进入关机 runlevel 0 |
init 6 |
进入重启 runlevel 6 |
systemctl poweroff |
systemd关机(推荐) |
systemctl reboot |
systemd重启 |
🎀 附赠 · 小技巧
🌀 若要优雅通知用户即将关机:
shutdown -h +10 "系统将在10分钟后关机,请保存好文件~"
🌙 立刻取消计划关机:
shutdown -c
目录结构和文件类型
🧭 一、Linux 的目录结构(常见目录介绍)
Linux 的目录像一棵倒挂的树,从 /(根目录)开始向下展开:
| 目录 | 用途说明 |
|---|---|
/ |
根目录,一切开始的地方 |
/bin |
基本命令,所有用户都能用(如 ls, cp) |
/sbin |
系统管理员用的命令(如 shutdown, reboot) |
/etc |
配置文件集中地(如 passwd, hosts, ssh/) |
/home |
普通用户的家目录(如 /home/主人) |
/root |
root用户的家目录 |
/var |
可变文件(如日志 /var/log、邮件、缓存等) |
/usr |
用户安装软件的位置(/usr/bin, /usr/lib) |
/tmp |
临时文件夹,重启后清空 |
/dev |
设备文件(如硬盘 /dev/sda) |
/proc |
虚拟文件系统,进程/内核信息(如 /proc/cpuinfo) |
/lib |
系统运行库(support .so 的地方) |
/boot |
引导文件(如内核 vmlinuz) |
/mnt、/media |
临时挂载点,如U盘、硬盘等 |
📂 二、Linux 文件类型(ls -l 第一列)
在 Linux 里,一切皆文件~
连硬件、目录、管道、套接字、链接……统统是文件!
用 ls -l 查看时第一列最左边的字母表示类型:
| 符号 | 类型 | 说明 |
|---|---|---|
- |
普通文件 | 文本、二进制、可执行文件等 |
d |
目录 | 文件夹 |
l |
符号链接 | 类似 Windows 的快捷方式 |
c |
字符设备文件 | 如串口、终端,/dev/tty |
b |
块设备文件 | 如硬盘,/dev/sda |
s |
套接字文件 | 进程通信用,常用于服务端程序间交流 |
p |
命名管道文件 | 进程通信通道之一 |
🌟 举个小栗子:
ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 8 08:00 /dev/null
c表示字符设备文件- 权限为
rw-rw-rw-,可读写但不能执行 - 属于
root用户和用户组
🎀 主人你可以试试这些命令体验一下:
ls -l /
file /bin/ls
file /dev/sda
🏃♂️ cd —— 切换目录
| 命令 | 含义 |
|---|---|
cd /路径 |
进入某个目录 |
cd .. |
返回上一级 |
cd ~ 或 cd |
回到主目录 |
cd - |
回到上一次所在的目录 |
💡 主人你想去哪,cd 一下就到了!
🔄 mv —— 移动 or 重命名文件
| 命令 | 含义 |
|---|---|
mv 源文件 目标路径 |
移动文件 |
mv file.txt newname.txt |
重命名 |
mv *.txt /home/user/ |
批量移动 .txt 文件 |
💡 移动 与 改名 一个命令两种用法,超方便!
📄 cp —— 复制文件或目录
| 命令 | 含义 |
|---|---|
cp a.txt b.txt |
复制文件 |
cp a.txt /path/ |
把文件复制到目标路径 |
cp -r dir1 dir2 |
递归复制整个目录 |
💡 -r 是复制文件夹的关键,别忘了哟~
🔍 find —— 在海量文件中精准查找
| 命令 | 含义 |
|---|---|
find . -name "*.txt" |
当前目录找所有 .txt |
find / -name "passwd" |
全盘找名叫 passwd 的文件 |
find . -type d |
查找所有目录(d=directory) |
find . -type f |
查找所有文件(f=file) |
💡 find 是你查文件的猎犬,一叫一个准!
📦 tar —— 打包与解压
| 命令 | 含义 |
|---|---|
tar -cvf file.tar dir/ |
打包成 .tar 文件(不压缩) |
tar -xvf file.tar |
解包 .tar 文件 |
tar -czvf file.tar.gz dir/ |
打包+压缩成 .tar.gz |
tar -xzvf file.tar.gz |
解压 .tar.gz |
tar -tzvf file.tar.gz |
查看压缩包里的内容 |
💡 参数小记:
c= create(创建)x= extract(解压)z= gzip(压缩/解压)v= verbose(显示过程)f= file(指定文件名)
getent:调用系统数据库(如 /etc/passwd、NSS 服务等)获取信息
lsb_release -a : 是用来查看 Linux 系统发行版信息的命令,输出你当前系统的详细版本信息。
ChatGPT 说:
lsb_release -a 是用来查看 Linux 系统发行版信息的命令,输出你当前系统的详细版本信息。
👑 三种身份(谁)
| 身份 | 含义 |
|---|---|
所有者(Owner) |
谁创建的文件,谁就是“主人” |
所属组(Group) |
和这个文件“归一组”的人们 |
其他人(Others) |
系统里其他不相关的小喽啰们 |
🔐 三种权限(能做啥)
| 权限 | 符号 | 意义 |
|---|---|---|
| 读权限 | r |
可以看文件内容、列目录 |
| 写权限 | w |
可以改文件、建/删目录里的内容 |
| 执行权限 | x |
可以运行程序、进入目录 |
🧾 举个例子:
ls -l
输出像这样:
-rwxr-xr-- 1 root root 1234 Apr 8 test.sh
前面这串 -rwxr-xr-- 分三段哦:
| 身份 | 权限 | 意义 |
|---|---|---|
| 所有者(user) | rwx |
有读、写、执行权 |
| 所属组(group) | r-x |
有读和执行权 |
| 其他人(others) | r-- |
只能读 |
🛠️ 修改权限和所属
主人可用这几招对权限进行支配:
✨ chmod 更改权限:
chmod u+x file # 给所有者加执行权
chmod g-w file # 取消组的写权限
chmod 755 file # 数字方式设权限(rwxr-xr-x)
数字表示法口诀:
r=4,w=2,x=1- 所有者、组、其他人分别加起来就是数字!
✨ chown 更改所有者:
chown user file # 改变所有者
chown user:group file # 改变所有者和所属组
好的主人♥
我们现在进入 Linux 权限控制中更隐秘、更强大的领域:SUID、SGID、SBIT(Sticky Bit) 以及 ACL(访问控制列表)——这些就像系统里藏着的小符咒,能改变文件和目录的行为。尔铃这就一点点为主人揭开它们的面纱~
🧨 一、SUID(Set User ID)
🍬 作用:
当文件具有 SUID 权限时,执行者会临时以文件“所有者”的身份来运行此程序。
🧪 举例:
ls -l /usr/bin/passwd
输出可能是:
-rwsr-xr-x 1 root root 54256 ...
注意 s 出现在所有者的执行位(x)中,即 rws,说明有 SUID。
🔐 /usr/bin/passwd 允许普通用户修改自己的密码,但文件是 root 所有。
🧨 二、SGID(Set Group ID)
🍬 作用:
- 对可执行文件:执行时以所属组的身份运行。
- 对目录:该目录中新建的文件会自动继承这个目录的所属组。
🧪 举例:
chmod g+s testdir
ls -ld testdir
会看到类似:
drwxr-sr-x 2 user group 4096 ...
🧨 三、SBIT(Sticky Bit)
🍬 作用:
用于目录,表示:目录下的文件只能被文件的所有者或 root 删除,即使别人也有写权限。
👑 最典型例子:
ls -ld /tmp
会看到:
drwxrwxrwt 10 root root 4096 ...
最后那个 t 表示 Sticky Bit。
🧪 特殊权限的设置方法(数字法)
| 权限 | 数值 |
|---|---|
| SUID | 4 |
| SGID | 2 |
| SBIT | 1 |
比如:设置 SUID + SGID:
chmod 6755 文件名
🧚 四、ACL(Access Control List)
当传统的 rwx 权限不够用时,ACL 允许我们给文件/目录 指定多个用户或组的权限,更精细地控制。
🛠 安装支持(某些系统需要):
sudo apt install acl
🍭 常用命令:
- 添加用户权限:
setfacl -m u:用户名:rwx 文件 - 查看 ACL 权限:
getfacl 文件 - 删除 ACL 权限:
setfacl -x u:用户名 文件 - 默认 ACL(用于目录):
setfacl -d -m u:用户名:rwx 目录
🎀 总结表格(甜甜对比):
| 特殊权限 | 作用对象 | 作用内容 | 常见用途 |
|---|---|---|---|
| SUID | 可执行文件 | 执行者临时拥有文件所有者身份 | passwd 等 |
| SGID | 可执行文件/目录 | 继承组权限/保持目录中文件组一致 | 项目共享目录 |
| SBIT | 目录 | 限制删除权限 | /tmp 目录 |
| ACL | 文件/目录 | 细化权限管理 | 多人协作环境 |
静态IP、动态IP和静态路由是计算机网络中常见的概念,下面简要解释它们:
1. 静态IP(Static IP)
静态IP是指一个固定的IP地址,永久分配给设备。这意味着设备每次连接到网络时,都会使用相同的IP地址。静态IP通常用于需要确保设备地址不变的场景,例如服务器、打印机、摄像头等。
优点:
- 设备地址固定,便于管理。
- 对于需要远程访问的设备很有用。
缺点:
- 不灵活,地址分配需要手动设置。
- 相对于动态IP,可能消耗更多的IP资源。
2. 动态IP(Dynamic IP)
动态IP是由DHCP(动态主机配置协议)服务器自动分配给设备的IP地址。每次设备连接到网络时,都会从DHCP服务器获取一个临时的IP地址。这个地址通常会在一定时间后变更。
优点:
- 自动分配,方便管理。
- 节省IP资源,适用于大部分普通用户。
缺点:
- 地址不固定,每次连接网络时可能会改变。
- 对于需要稳定IP地址的服务不太适用。
3. 静态路由配置(Static Routing)
静态路由是手动配置的路由表条目,指定数据包在网络中传输的路径。管理员在路由器上手动设置路由规则,告知数据包从哪个路径经过。
配置方法:
- 静态路由一般通过命令行接口(CLI)配置,如在Cisco路由器中使用
ip route命令。 - 例如,配置一条静态路由:
ip route 192.168.2.0 255.255.255.0 192.168.1.1,意思是如果目标地址属于192.168.2.0/24网络,数据包将通过192.168.1.1网关发送。
优点:
- 配置简单,管理可控。
- 对于小型或简单网络,使用静态路由能提高网络稳定性。
缺点:
- 缺乏灵活性,网络拓扑发生变化时需要手动调整。
- 不适用于复杂、动态变化较多的网络环境。
DNS(域名系统)配置是将域名解析为IP地址的过程。通过DNS,用户可以使用易记的域名来访问网站,而无需记住IP地址。
1. DNS工作原理
- 域名解析:当你在浏览器中输入一个域名(例如
www.example.com),计算机会向DNS服务器请求该域名对应的IP地址。 - 递归查询:DNS服务器会从根DNS服务器开始,逐级向下查询,直到找到该域名对应的IP地址,并返回给用户。
2. DNS配置的基本步骤
在配置DNS时,通常有两种情况:配置本地DNS解析(设备的DNS)和配置DNS服务器(域名提供商的DNS服务)。
A. 设备本地DNS配置
设备通过设置DNS服务器地址来决定使用哪个DNS服务来解析域名。
Windows系统:
- 打开“控制面板”。
- 点击“网络和共享中心”。
- 点击连接的网络(例如Wi-Fi或以太网)。
- 点击“属性”。
- 在网络连接属性窗口,选择“Internet 协议版本 4 (TCP/IPv4)”并点击“属性”。
- 选择“使用下面的DNS服务器地址”并输入DNS服务器地址:
- 首选DNS服务器:比如
8.8.8.8(Google公共DNS)或者114.114.114.114(国内DNS服务)。 - 备用DNS服务器:比如
8.8.4.4(Google备用DNS)。
- 首选DNS服务器:比如
Linux系统(使用命令行配置):
- 编辑
/etc/resolv.conf文件,添加DNS服务器:
保存并退出。nameserver 8.8.8.8 nameserver 8.8.4.4
macOS系统:
- 打开“系统偏好设置”。
- 选择“网络”。
- 选择你使用的网络连接(例如Wi-Fi),点击“高级”。
- 进入“DNS”标签页,点击“+”添加DNS服务器地址。
- 输入DNS服务器地址,比如
8.8.8.8和8.8.4.4。
B. DNS服务器配置
如果你是网站管理员或需要配置自建的DNS服务器,通常需要配置DNS服务软件(如BIND、Unbound或dnsmasq)来进行域名解析。
BIND(Berkeley Internet Name Domain)配置:
BIND是最常见的DNS服务器软件,以下是简单的配置步骤。
-
安装BIND:
在Linux系统中,使用命令安装BIND:sudo apt-get install bind9 -
编辑配置文件:
主配置文件一般是/etc/bind/named.conf。你需要配置DNS区域文件来指定解析规则。例如,为一个域名
example.com配置DNS:zone "example.com" { type master; file "/etc/bind/db.example.com"; }; -
创建区域文件:
在/etc/bind/db.example.com文件中,指定域名的解析记录:$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023040801 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 86400 ) ; Minimum TTL @ IN NS ns1.example.com. @ IN NS ns2.example.com. @ IN A 192.168.1.1 www IN A 192.168.1.2 -
重启BIND服务:
配置完后,重启BIND服务:sudo systemctl restart bind9
C. 常见的DNS记录类型
-
A记录(Address Record):将域名映射到IPv4地址。
- 例如,
example.com->192.168.1.1。
- 例如,
-
AAAA记录:将域名映射到IPv6地址。
- 例如,
example.com->2001:0db8::1。
- 例如,
-
CNAME记录(Canonical Name):将一个域名别名指向另一个域名。
- 例如,
www.example.com->example.com。
- 例如,
-
MX记录(Mail Exchange):指定邮件服务器的域名。
- 例如,
example.com->mail.example.com。
- 例如,
-
TXT记录:提供域名的文本信息,通常用于验证或安全目的。
- 例如,
example.com->v=spf1 include:_spf.example.com ~all。
- 例如,
-
NS记录(Name Server):指定该域名的权威DNS服务器。
- 例如,
example.com->ns1.example.com。
- 例如,
-
PTR记录(Pointer Record):用于反向DNS解析,将IP地址映射到域名。
3. 常见DNS服务
- Google DNS:
8.8.8.8和8.8.4.4 - Cloudflare DNS:
1.1.1.1和1.0.0.1 - OpenDNS:
208.67.222.222和208.67.220.220 - 阿里云DNS:
223.5.5.5和223.6.6.6
总结
DNS配置非常重要,决定了你的设备如何将域名解析为IP地址。设备的DNS配置通常比较简单,而DNS服务器的配置则涉及到复杂的记录设置和服务管理。根据需要选择合适的配置方式即可。如果你有具体的配置问题,随时告诉我,我可以帮助你解答哦,主人你!
ifconfig、route 和 netstat 是 Linux/Unix 系统中常用的网络命令,用于查看和管理网络状态。以下是这三个命令的功能和用法:
1. ifconfig 命令
ifconfig(interface configuration)是用来查看和配置网络接口的命令。它可以显示网络接口的详细信息,包括 IP 地址、MAC 地址、数据包统计信息等。
常见用法:
-
查看所有网络接口的状态:
ifconfig输出将显示系统中所有网络接口的状态,如 IP 地址、MAC 地址、网络接口状态(up 或 down)等。
-
查看特定接口的状态:
ifconfig eth0查看
eth0网络接口的详细信息。 -
配置IP地址:
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up设置
eth0接口的 IP 地址为192.168.1.100,子网掩码为255.255.255.0,并启动该接口。 -
禁用网络接口:
sudo ifconfig eth0 down关闭
eth0网络接口。
注意:
- 在现代 Linux 发行版中,
ifconfig命令已经被ip命令所替代,但ifconfig仍然可以使用,尤其是在一些老旧系统中。
2. route 命令
route 命令用于查看和管理网络路由表。它能够显示当前网络的路由信息,并允许用户修改路由表。
常见用法:
-
查看路由表:
route -n使用
-n选项显示路由表并避免域名解析,输出包括目的网络、网关、网络接口等信息。 -
添加静态路由:
sudo route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.1添加一条静态路由,将目标网络
192.168.2.0/24的流量通过网关192.168.1.1转发。 -
删除路由:
sudo route del -net 192.168.2.0 netmask 255.255.255.0删除到目标网络
192.168.2.0/24的路由。
3. netstat 命令
netstat(network statistics)命令用于显示网络连接、路由表、接口统计等信息。它是用于网络诊断的强大工具。
常见用法:
-
查看所有网络连接:
netstat -a显示所有活动的网络连接,包括正在监听的端口。
-
查看网络连接的状态及协议:
netstat -tuln该命令显示当前所有的 TCP 和 UDP 连接,
-t表示 TCP,-u表示 UDP,-l表示显示监听的端口,-n显示数字格式而不进行域名解析。 -
查看每个端口的连接情况:
netstat -an显示所有活动的网络连接,并以数字形式显示端口号。
-
查看网络接口统计信息:
netstat -i显示每个网络接口的统计信息,如数据包的发送和接收量。
-
查看路由表:
netstat -r显示当前路由表的详细信息,类似于
route -n。
注意:
- 在较新的 Linux 版本中,
netstat命令已经被ss命令所替代,ss提供了更高效、更现代化的网络状态查询方式。
小结
ifconfig:主要用于查看和配置网络接口的基本信息,如 IP 地址、网络接口状态等。route:用于查看和修改路由表,管理网络流量的路径。netstat:提供了广泛的网络统计信息,包括网络连接、路由表和接口状态等。
如果你需要进一步了解具体的命令示例或配置方法,随时告诉我,主人你!
ps 和 kill 命令是 Linux/Unix 系统中用于进程管理的常用命令,下面是这两个命令的详细介绍和常见用法:
1. ps 命令
ps(process status)命令用于显示当前系统中的进程状态。它可以提供进程的详细信息,包括进程ID(PID)、进程状态、CPU 使用率、内存使用情况等。
常见用法:
-
查看当前用户的进程:
ps这个命令显示当前终端会话下的所有进程的基本信息(包括 PID、TTY、运行时间等)。
-
查看当前系统中的所有进程:
ps -e显示系统中所有进程的基本信息。
-
显示所有进程,并显示详细信息:
ps -ef使用
-e显示所有进程,-f显示详细的进程信息,包括父进程ID(PPID)、启动时间、占用CPU和内存的比例等。 -
查看当前终端的进程:
ps -t显示与当前终端相关联的所有进程。
-
查看进程树(显示进程之间的父子关系):
ps -ejH通过
-e显示所有进程,-j输出进程组信息,-H显示进程的层级结构。 -
查看某个用户的进程:
ps -u username显示指定用户的进程。
-
根据进程名称查找进程:
ps -C process_name显示指定进程名的进程信息。
进程状态(ps 输出中的常见字段):
- PID:进程ID。
- TTY:进程所属的终端。
- TIME:进程的CPU使用时间。
- CMD:启动进程的命令。
2. kill 命令
kill 命令用于发送信号给指定进程,常用于终止进程。默认情况下,kill 会发送一个 SIGTERM 信号请求进程正常退出。也可以发送其他信号来强制终止进程。
常见用法:
-
通过进程ID(PID)终止进程:
kill PID这个命令会发送一个默认的
SIGTERM信号(信号编号 15),请求进程优雅地退出。 -
强制终止进程:
kill -9 PID发送
SIGKILL信号(信号编号 9),强制终止进程。SIGKILL信号无法被捕捉或忽略,通常用于无法正常终止的进程。 -
通过进程名终止进程:
pkill process_name使用
pkill可以通过进程名终止进程,kill命令本身并不支持通过名称终止进程。 -
发送其他信号给进程:
kill -s SIGNAL_NAME PID例如,发送
SIGSTOP(暂停进程)或SIGCONT(恢复进程)信号:kill -s SIGSTOP PID # 暂停进程 kill -s SIGCONT PID # 恢复进程 -
查看进程ID(PID)并终止进程:
- 查找进程并获取PID:
ps -e | grep process_name - 获取到进程ID后,使用
kill终止该进程。
- 查找进程并获取PID:
-
终止所有指定进程:
pkill -f process_name使用
-f选项可以根据进程的完整命令行来查找进程并终止。
3. 常用信号说明
kill 命令可以发送不同类型的信号,常见的信号包括:
- SIGTERM (15):请求进程正常终止(默认信号)。
- SIGKILL (9):强制终止进程,无法被捕捉或忽略。
- SIGSTOP (19):暂停进程,进程无法捕捉或忽略。
- SIGCONT (18):恢复暂停的进程。
- SIGHUP (1):终止进程并重新加载配置文件。
- SIGINT (2):相当于 Ctrl+C,通常用于中断前台进程。
小结
ps命令用于查看当前运行的进程,可以帮助你了解系统中运行的进程以及它们的状态。kill命令用于终止或管理进程,发送信号给进程进行控制。
主人♥~尔铃这就为你献上iptables 防火墙的开启/关闭方法与ACL(访问控制列表)规则的设置方式,让你轻松掌控流量、守护安全之门✨
🛡️ 一、iptables 防火墙的开启 / 关闭(针对 Linux 系统)
✅ 开启防火墙
sudo systemctl start iptables # 启动iptables服务
sudo systemctl enable iptables # 开机自动启动
⛔ 关闭防火墙
sudo systemctl stop iptables # 停止iptables服务
sudo systemctl disable iptables # 关闭开机启动
📝 若使用的是
firewalld而非iptables,请改为systemctl stop firewalld
🧾 二、ACL(访问控制列表)规则设置(基于 iptables)
iptables 的本质就是一种 ACL ——基于包的访问控制。
📌 1. 查看现有规则
sudo iptables -L -n -v
📌 2. 设置基础策略(默认允许或拒绝)
# 拒绝所有流量(默认)
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT # 本机主动访问允许
📌 3. 允许本地回环访问(不能漏)
sudo iptables -A INPUT -i lo -j ACCEPT
📌 4. 放行常见端口(示例:SSH 和 HTTP)
# SSH端口22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP端口80
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
📌 5. 拒绝某个IP访问(黑名单)
sudo iptables -A INPUT -s 1.2.3.4 -j DROP
📌 6. 只允许某个IP访问(白名单)
sudo iptables -A INPUT -p tcp --dport 22 -s 1.2.3.4 -j ACCEPT
🧼 7. 清空规则
sudo iptables -F
🗃️ 保存规则(否则重启失效)
Ubuntu/Debian:
sudo iptables-save > /etc/iptables/rules.v4
CentOS/RedHat:
sudo service iptables save
❤️ 小贴士:
| 场景 | 建议 |
|---|---|
| 想临时测试某端口连接性 | 先用 iptables -L 检查规则 |
| 忘了放回环接口导致失联 | 建议开 SSH 时多留个终端保命🌚 |
| 想防某段网段 | 支持CIDR,例如 -s 192.168.0.0/24 |
主人♥~您想要掌握的是 SSH协议与sshd服务的基础原理、远程管理方式、以及服务程序配置方法,尔铃这就以清晰易懂的方式,为您讲解这三块知识内容:
🧩 一、SSH 协议 与 sshd 服务程序
💡 SSH(Secure Shell)协议是什么?
SSH 是一种加密的远程登录协议,用于在不安全网络中安全地访问远程主机。
- 默认端口:
22 - 常见用途:
- 登录远程 Linux 服务器
- 执行命令 / 上传下载文件(
scp,sftp) - 端口转发、代理等高级用法
💡 sshd 是什么?
sshd是运行在服务器端的守护进程,全名:Secure Shell Daemon,用于监听并接受 SSH 连接。
🧠 你本地执行 ssh user@ip 的时候,实际上是:
Client: ssh ➝ Server: sshd
-
启动命令:
sudo systemctl start sshd -
配置文件(重点):
/etc/ssh/sshd_config
🧠 二、Linux 系统远程管理方法
✅ 1. 使用 SSH 登录远程主机
ssh username@remote_ip
-
示例:
ssh root@192.168.1.100 -
首次连接时,会提示保存主机指纹,确认后建立信任关系。
✅ 2. 上传/下载文件
-
上传文件到远程:
scp file.txt user@ip:/path/to/ -
下载远程文件到本地:
scp user@ip:/path/to/file.txt ./
✅ 3. 使用 XShell、PuTTY 等图形工具(Windows)
- 输入 IP、用户名、端口(默认 22)
- 填写密码或加载密钥,即可远程登录服务器。
🔧 三、配置 sshd 服务程序的方法
配置文件:/etc/ssh/sshd_config
使用前建议备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
📌 常用配置项:
| 配置项 | 功能 |
|---|---|
Port 22 |
改变默认监听端口,提升安全性(如换成2222) |
PermitRootLogin no |
禁止 root 用户直接登录 |
PasswordAuthentication no |
禁用密码登录,仅允许密钥 |
AllowUsers user1 user2 |
只允许指定用户远程登录 |
修改完后重启 sshd 服务生效:
sudo systemctl restart sshd
✨ 小总结
| 模块 | 内容 |
|---|---|
| 协议 | SSH,提供加密远程连接 |
| 服务程序 | sshd,服务端守护进程 |
| 远程管理方式 | 命令行 ssh,scp,sftp,图形工具如 XShell |
| 配置服务程序方法 | 编辑 sshd_config 并重启服务 |
主人♥~尔铃这就给你娓娓道来这些关于 Linux 系统的软件管理基础知识~像一位温柔的小助手,带你轻松掌控系统包管理之术🌸:
🪞 一、什么是“镜像源”?
镜像源(Mirror Repository)是存放软件包的远程服务器,Linux 通过它来下载安装系统更新和软件。
💡 为什么要修改为国内源?
国外源连接慢、容易失败,国内镜像源如清华、中科大、阿里云速度快且稳定。
🇨🇳 二、系统如何修改为国内镜像源(以 CentOS 为例)
🐧 CentOS 修改 yum 源:
# 备份原有源
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下载国内阿里云源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 更新缓存
sudo yum clean all
sudo yum makecache
也可以选择:
不同系统(如 Ubuntu)要改
/etc/apt/sources.list,尔铃也能提供哦~
🍜 三、使用 yum 安装软件
sudo yum install 软件名 -y
-y表示自动确认安装。- 示例:
sudo yum install nginx -y
🔍 四、查找软件
1. 查找可用软件包名称
yum search 关键字
- 示例:
yum search httpd
2. 查看软件包详情
yum info 软件名
🗑️ 五、卸载软件
sudo yum remove 软件名 -y
- 示例:
sudo yum remove nginx -y
✨ 小总结表格奉上:
| 操作 | 命令示例 |
|---|---|
| 修改为国内镜像源 | 替换 .repo 文件 ➝ makecache |
| 安装软件 | sudo yum install 软件名 -y |
| 查找软件 | yum search 软件名 |
| 查看软件信息 | yum info 软件名 |
| 卸载软件 | sudo yum remove 软件名 -y |
主人♥~尔铃这就来为你细致讲解 RPM 包管理器的完整用法,包括它的理论基础、查询、安装、卸载等常用操作~让你在 Red Hat 系列系统中如鱼得水✨
🧩 一、什么是 RPM?
RPM(Red Hat Package Manager) 是 RedHat、CentOS、Fedora 等系统中用于管理软件包的工具。
- 文件后缀:
.rpm - 软件包中包含程序、配置文件、安装脚本等
- 适用于离线安装或分发
📦 二、RPM 与 YUM 的区别?
| 对比点 | RPM | YUM(基于RPM) |
|---|---|---|
| 是否依赖处理 | ❌ 手动安装依赖 | ✅ 自动解决依赖 |
| 网络支持 | ❌ 不支持(本地安装) | ✅ 支持联网安装 |
| 使用方式 | rpm 命令 |
yum 命令 |
🔍 三、RPM 查找软件是否安装
rpm -q 软件名
- 示例:
rpm -q nginx
✅ 输出:nginx-1.20.1-9.el7.x86_64 表示已安装
❌ 输出:package nginx is not installed 表示未安装
🔍 四、查看已安装软件的详细信息
rpm -qi 软件名
- 包括安装时间、版本号、描述等。
🔍 五、列出安装的软件包含哪些文件
rpm -ql 软件名
- 你可以看到文件被安装到哪些目录下,非常适合排错或查看配置路径!
🧱 六、安装 .rpm 软件包
sudo rpm -ivh 包名.rpm
| 参数 | 含义 |
|---|---|
-i |
install 安装 |
-v |
verbose 显示过程 |
-h |
hash 显示进度条 |
- 示例:
sudo rpm -ivh nginx.rpm
❗ 如果依赖缺失会报错,可搭配
yum localinstall 包名.rpm自动解决依赖!
🔄 七、升级 .rpm 软件包
sudo rpm -Uvh 包名.rpm
-U表示升级(如有同名老版本则覆盖)
❌ 八、卸载软件包
sudo rpm -e 软件名
-
注意:这里是软件“包名”而不是文件名!
-
示例:
sudo rpm -e nginx
🔎 九、列出所有已安装包
rpm -qa
搭配
grep可模糊查找:
rpm -qa | grep nginx
🎀 小结表格奉上:
| 操作 | 命令 |
|---|---|
| 是否安装 | rpm -q nginx |
| 查看信息 | rpm -qi nginx |
| 查看文件 | rpm -ql nginx |
安装 .rpm 包 |
rpm -ivh xxx.rpm |
升级 .rpm 包 |
rpm -Uvh xxx.rpm |
| 卸载软件 | rpm -e nginx |
| 列出所有包 | rpm -qa |
主人♥~源码安装是最原始也是最自由的一种方式,适合对系统极致定制、或者软件仓库里没有你想要的版本时使用。
来~尔铃这就一步步带你走一遍 Linux 下源码安装的完整流程,并附上一个真实的示例(比如 htop)~✨
🧩 一、源码安装的通用步骤
1. 下载源码包
2. 解压源码包
3. 阅读 README / INSTALL 文件
4. 安装依赖
5. 配置(./configure)
6. 编译(make)
7. 安装(sudo make install)
有些还支持:
8. 卸载(sudo make uninstall)
🛠️ 二、实例演示:源码安装 htop
htop是一个增强版的进程监视工具,比top更直观、可操作性强。
✨ 第一步:安装依赖(编译环境 + htop 所需)
sudo apt update
sudo apt install build-essential libncursesw5-dev git -y
✨ 第二步:下载源码
git clone https://github.com/htop-dev/htop.git
cd htop
✨ 第三步:配置
./autogen.sh # 有 autogen.sh 就先执行(生成 configure)
./configure # 检查系统环境和依赖
你可以加参数自定义安装位置:
./configure --prefix=/usr/local
✨ 第四步:编译
make -j$(nproc) # 自动启用多核编译
✨ 第五步:安装
sudo make install
然后你就可以用 htop 打开帅气的界面了!
✨ 第六步(可选):卸载
如果源代码提供了 uninstall:
sudo make uninstall
否则你可能需要手动 rm /usr/local/bin/htop 之类的。
🌟 附:其他常见源码包的格式和处理方式
| 格式 | 解压命令 |
|---|---|
.tar.gz |
tar -zxvf filename.tar.gz |
.tar.bz2 |
tar -jxvf filename.tar.bz2 |
.tar.xz |
tar -Jxvf filename.tar.xz |
🧙♀️ 主人小贴士:
- 如果你用
make install安装了多个软件,推荐使用checkinstall替代,可以生成.deb包,方便管理与卸载。 - 源码安装通常不被系统包管理器记录,容易遗忘路径和文件,务必记清安装路径或用工具辅助管理。
主人♥~要在 Linux 系统中编译安装 MySQL 服务,首先需要了解基本的编译安装流程和 MySQL 的安装步骤。下面我为你详细讲解如何从源码编译并安装 MySQL,最后还会教你如何配置 MySQL 服务。
🧩 一、准备工作
- 安装依赖项:编译 MySQL 需要一些开发工具和库,确保你的系统安装了必要的依赖包。
sudo apt update
sudo apt install -y cmake gcc g++ libncurses5-dev libssl-dev libboost-dev bison
📥 二、下载 MySQL 源码
- 获取 MySQL 源码:你可以从官方的 MySQL GitHub 仓库或官网下载源代码包。
cd /opt
sudo git clone https://github.com/mysql/mysql-server.git
cd mysql-server
如果你更倾向于直接下载一个版本的源码包,也可以从 MySQL 官网 下载。
🛠️ 三、编译和安装 MySQL
- 创建构建目录:
mkdir build
cd build
- 配置 MySQL 编译选项:使用
cmake配置 MySQL 编译参数。这里有很多可选项,你可以根据需要自定义设置。例如:
cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=boost/
这里使用 -DDOWNLOAD_BOOST=1 表示下载 Boost 库,-DWITH_BOOST=boost/ 指定 Boost 库的位置。
- 开始编译:
make -j$(nproc) # 使用多核编译
- 安装 MySQL:
sudo make install
🔧 四、配置 MySQL
- 初始化 MySQL 数据库:在 MySQL 编译完成后,需要初始化数据库文件。
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql
- 设置 MySQL 用户和权限:通常情况下,你需要为 MySQL 创建一个系统用户,并设置适当的权限。
sudo useradd mysql
sudo chown -R mysql:mysql /usr/local/mysql/
🎛️ 五、启动 MySQL 服务
- 启动 MySQL 服务:
sudo /usr/local/mysql/support-files/mysql.server start
- 配置 MySQL 为开机自启:如果你希望 MySQL 开机自启,可以使用以下命令:
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults
- 登录 MySQL:
/usr/local/mysql/bin/mysql -u root -p
输入密码后,你就可以进入 MySQL 命令行界面了。
🧹 六、配置 MySQL 的系统服务
- 创建 MySQL 系统服务:如果你希望以服务方式运行 MySQL(类似于
systemd管理的服务),可以创建一个mysql.service文件。示例如下:
sudo nano /etc/systemd/system/mysql.service
在文件中加入以下内容:
[Unit]
Description=MySQL Community Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
User=mysql
Group=mysql
Restart=on-failure
LimitNOFILE=8192
[Install]
WantedBy=multi-user.target
- 重新加载 systemd 配置:
sudo systemctl daemon-reload
- 启动并启用 MySQL 服务:
sudo systemctl start mysql
sudo systemctl enable mysql
🌟 七、使用 MySQL
现在 MySQL 已经安装并配置完成,主人你可以使用以下命令进行常见的操作:
- 登录 MySQL 命令行:
/usr/local/mysql/bin/mysql -u root -p
- 检查 MySQL 版本:
mysql --version
- 创建数据库:
CREATE DATABASE mydatabase;
- 创建用户并授予权限:
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
🧙 小结
编译安装 MySQL 的过程主要包括:
- 安装编译依赖。
- 下载 MySQL 源代码。
- 配置并编译 MySQL。
- 初始化数据库、配置 MySQL 用户和权限。
- 启动 MySQL 服务,并可配置为开机自启。
主人♥~今天我们来完成在 Linux 系统中编译安装 Apache 服务 并部署一个简单的 静态网站 的过程。让尔铃一步步带你完成!💖
🧩 一、准备工作
首先,我们需要安装一些编译 Apache 服务所需的依赖包。
1. 安装必要的依赖包:
sudo apt update
sudo apt install -y build-essential libpcre3-dev libssl-dev libexpat1-dev
这些依赖项包括编译 Apache 时需要的工具和库。
📥 二、下载 Apache 源码
1. 获取 Apache HTTP 服务器的源码:
可以直接从 Apache 的官网或者使用 wget 下载。
cd /opt
sudo wget https://downloads.apache.org/httpd/httpd-2.4.54.tar.gz
sudo tar -xvzf httpd-2.4.54.tar.gz
cd httpd-2.4.54
🛠️ 三、编译和安装 Apache
1. 配置 Apache 编译选项:
在源码目录下运行 ./configure 命令来配置编译参数。
./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl --with-mpm=prefork
--prefix=/usr/local/apache2:指定 Apache 安装目录。--enable-so:启用模块支持。--enable-ssl:启用 SSL 支持。--with-mpm=prefork:选择preforkMPM 模式(适用于处理非线程化的请求)。
2. 编译 Apache:
使用 make 命令编译 Apache:
make -j$(nproc)
这里 -j$(nproc) 会根据你的 CPU 核心数来加速编译过程。
3. 安装 Apache:
sudo make install
🎛️ 四、配置 Apache 服务
安装完成后,我们需要配置 Apache。配置文件通常位于 /usr/local/apache2/conf/httpd.conf。
1. 编辑 httpd.conf 文件:
修改配置文件,设置你的网站根目录,并允许 Apache 提供静态网页。
sudo nano /usr/local/apache2/conf/httpd.conf
在文件中,找到并修改以下配置:
DocumentRoot "/usr/local/apache2/htdocs"
<Directory "/usr/local/apache2/htdocs">
AllowOverride None
Require all granted
</Directory>
🌐 五、部署静态网站
1. 准备静态网站文件:
将你的网站文件(如 index.html、style.css、image.jpg 等)放到 Apache 的 htdocs 目录。
sudo mkdir -p /usr/local/apache2/htdocs/mywebsite
sudo cp -r /path/to/your/website/* /usr/local/apache2/htdocs/mywebsite/
2. 配置虚拟主机(可选):
如果你希望通过自定义域名访问,可以配置虚拟主机。在 httpd.conf 中加入以下内容:
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs/mywebsite"
ServerName mywebsite.local
<Directory "/usr/local/apache2/htdocs/mywebsite">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
然后,在 /etc/hosts 文件中添加一行:
127.0.0.1 mywebsite.local
🚀 六、启动 Apache 服务
1. 启动 Apache:
sudo /usr/local/apache2/bin/apachectl start
2. 验证 Apache 是否运行:
访问 http://localhost 或 http://mywebsite.local(如果配置了虚拟主机)来查看静态网站是否能正常访问。
⚙️ 七、设置 Apache 开机自启(可选)
如果你希望 Apache 服务在系统启动时自动启动,可以创建一个 systemd 服务文件。
1. 创建 Apache 服务文件:
sudo nano /etc/systemd/system/apache2.service
添加以下内容:
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
PIDFile=/usr/local/apache2/logs/httpd.pid
User=www-data
Group=www-data
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
2. 重新加载 systemd 配置并启动 Apache 服务:
sudo systemctl daemon-reload
sudo systemctl enable apache2
sudo systemctl start apache2
🌟 八、管理 Apache 服务
- 重启 Apache 服务:
sudo systemctl restart apache2
- 查看 Apache 服务状态:
sudo systemctl status apache2
- 停止 Apache 服务:
sudo systemctl stop apache2
💡 小结
通过这个过程,主人你已经完成了:
- 从源码编译并安装了 Apache HTTP 服务器。
- 配置了 Apache 提供静态网站服务,并将你的网站文件部署到服务器上。
- 设置了 Apache 为开机自启(如果需要)。
- 管理了 Apache主人♥~今天我们来完成在 Linux 系统中编译安装 PHP 服务 并搭建一个 动态网站 的过程。尔铃会一步步带你完成!💖
🧩 一、准备工作
首先,我们需要安装一些编译 PHP 服务所需的依赖包。
1. 安装必要的依赖包:
sudo apt update
sudo apt install -y build-essential libxml2-dev libjpeg-dev libpng-dev libfreetype6-dev libmysqlclient-dev libssl-dev
这些包是编译 PHP 所必需的基础工具和开发库。
📥 二、下载 PHP 源码
1. 获取 PHP 源码:
你可以直接从 PHP 的官网或者使用 wget 下载 PHP 源码。
cd /opt
sudo wget https://www.php.net/distributions/php-8.0.11.tar.bz2
sudo tar -xjf php-8.0.11.tar.bz2
cd php-8.0.11
🛠️ 三、编译和安装 PHP
1. 配置 PHP 编译选项:
在源码目录下运行 ./configure 来配置编译选项。
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --enable-so --enable-mbstring --with-mysqli --enable-fpm
--prefix=/usr/local/php:指定 PHP 安装目录。--with-apxs2=/usr/local/apache2/bin/apxs:将 PHP 集成到 Apache 中。--enable-so:启用 Apache 模块支持。--enable-mbstring:启用多字节字符串支持。--with-mysqli:启用 MySQL 支持。--enable-fpm:启用 PHP-FPM(FastCGI)。
2. 编译 PHP:
make -j$(nproc)
-j$(nproc)用于加速编译过程,利用所有可用的 CPU 核心。
3. 安装 PHP:
sudo make install
🎛️ 四、配置 PHP 服务
1. 配置 PHP:
安装完成后,PHP 的配置文件位于 /usr/local/php/lib/php.ini。
可以根据需要修改 php.ini 文件,如设置时区、调整内存限制等。
sudo nano /usr/local/php/lib/php.ini
2. 配置 Apache 与 PHP 集成:
在 Apache 的配置文件 httpd.conf 中,确保加载 PHP 模块。
sudo nano /usr/local/apache2/conf/httpd.conf
确保以下行没有被注释:
LoadModule php_module /usr/local/php/libphp.so
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html
🌐 五、搭建动态网站
1. 准备网站文件:
将网站文件放到 Apache 的 htdocs 目录。
sudo mkdir -p /usr/local/apache2/htdocs/mydynamicwebsite
你可以将 PHP 网站文件(如 index.php)放到这个目录下。
例如,创建一个简单的 index.php 文件:
sudo nano /usr/local/apache2/htdocs/mydynamicwebsite/index.php
<?php
echo "Hello, welcome to my dynamic website!";
?>
2. 配置虚拟主机(可选):
如果你希望通过自定义域名访问,可以配置虚拟主机。
在 httpd.conf 中添加以下内容:
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs/mydynamicwebsite"
ServerName mydynamicwebsite.local
<Directory "/usr/local/apache2/htdocs/mydynamicwebsite">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
然后,在 /etc/hosts 文件中添加一行:
127.0.0.1 mydynamicwebsite.local
🚀 六、启动 Apache 和 PHP 服务
1. 启动 Apache:
sudo /usr/local/apache2/bin/apachectl start
2. 验证动态网站是否能正常运行:
访问 http://localhost 或 http://mydynamicwebsite.local,你应该能看到 PHP 输出的内容 Hello, welcome to my dynamic website!。
⚙️ 七、配置 PHP-FPM(可选)
如果你希望 PHP 以 PHP-FPM 的方式运行,可以配置 PHP-FPM。
- 编辑 PHP-FPM 配置文件:
sudo nano /usr/local/php/etc/php-fpm.conf
在配置文件中,确保 listen 指令指向正确的端口(如 127.0.0.1:9000)。
- 启动 PHP-FPM:
sudo /usr/local/php/sbin/php-fpm
- 配置 Apache 使用 PHP-FPM:
在 httpd.conf 中添加以下内容,启用 PHP-FPM:
<IfModule mod_proxy_fcgi.c>
SetHandler proxy:fcgi://127.0.0.1:9000
</IfModule>
🌟 八、设置 PHP 和 Apache 开机自启(可选)
如果你希望 PHP 和 Apache 服务在系统启动时自动启动,可以创建一个 systemd 服务文件。
- 创建 Apache 和 PHP 服务文件:
sudo nano /etc/systemd/system/apache2.service
添加以下内容:
[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
ExecStart=/usr/local/apache2/bin/apachectl start
ExecStop=/usr/local/apache2/bin/apachectl stop
ExecReload=/usr/local/apache2/bin/apachectl graceful
PIDFile=/usr/local/apache2/logs/httpd.pid
User=www-data
Group=www-data
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
- 重新加载 systemd 配置并启用服务:
sudo systemctl daemon-reload
sudo systemctl enable apache2
sudo systemctl start apache2
💡 小结
通过这个过程,主人你已经完成了:
- 从源码编译并安装了 PHP 服务,并将其与 Apache 集成。
- 配置了 Apache 提供 PHP 支持,并搭建了一个简单的动态网站。
- 设置了 PHP-FPM(可选),提升了动态网站的性能。
- 配置了 Apache 和 PHP 开机自启(可选)。
主人♥~今天我们来学习一下 Shell 脚本的基础知识,让尔铃带你一起进入脚本编程的世界,轻松应对各种自动化任务!💖
🧩 一、什么是 Shell 脚本?
Shell 脚本是用来自动执行一系列 Shell 命令的脚本文件。通过编写 Shell 脚本,用户可以将多个命令组合成一个脚本,方便重复执行,简化工作流程。
1. Shell 是什么?
Shell 是一种命令行解释器,它可以解释并执行命令。常见的 Shell 有:
- Bash (Bourne Again Shell):是最常用的 Shell,默认的 Linux Shell。
- Zsh (Z Shell):功能强大,支持很多有用的特性。
- Fish (Friendly Interactive Shell):具有自动补全功能的 Shell。
🧑💻 二、Shell 脚本的基本结构
1. 以 #!/bin/bash 开头
Shell 脚本通常以 #! 符号开头,后面跟上 Shell 解释器的路径。这告诉系统使用指定的 Shell 解释器来执行脚本。
#!/bin/bash
这是标准的 Bash 脚本标识符。
2. 脚本内容
Shell 脚本由一系列命令组成,命令按照从上到下的顺序执行。
#!/bin/bash
echo "Hello, world!"
这段脚本会输出 Hello, world!。
3. 脚本文件权限
为了执行脚本文件,必须给脚本文件加上执行权限:
chmod +x script.sh
然后就可以通过以下命令来执行脚本:
./script.sh
📚 三、Shell 脚本中的基本命令
1. echo:输出信息
echo "Hello, world!"
echo 命令用于在终端输出文本。
2. 变量
在 Shell 脚本中,你可以定义变量来存储信息。Shell 中的变量没有类型,可以存储字符串、数字等。
#!/bin/bash
name="Xia0-0"
echo "Hello, $name!"
- 变量赋值时,不需要使用
=之前和之后的空格。 - 使用
$来引用变量的值。
3. 条件语句
Shell 脚本支持条件判断,例如 if 语句。
#!/bin/bash
if [ -f "/path/to/file" ]; then
echo "File exists."
else
echo "File does not exist."
fi
[ -f "/path/to/file" ]:检查文件是否存在。then和else表示不同的执行路径。
4. 循环语句
Shell 脚本支持 for 和 while 等循环语句。
for 循环
#!/bin/bash
for i in {1..5}; do
echo "Number: $i"
done
这个脚本会输出数字 1 到 5。
while 循环
#!/bin/bash
counter=1
while [ $counter -le 5 ]; do
echo "Counter: $counter"
((counter++))
done
这个脚本会输出数字 1 到 5。
🛠️ 四、Shell 脚本中的函数
你可以在 Shell 脚本中定义函数,使代码更模块化。
1. 函数定义
#!/bin/bash
my_function() {
echo "This is a function"
}
my_function
- 定义函数时,不需要
function关键字,直接使用函数名加()即可。 - 调用函数时,直接写函数名即可。
2. 函数带参数
函数也可以接收参数,并在函数内部使用这些参数。
#!/bin/bash
greet() {
echo "Hello, $1!"
}
greet "Xia0-0"
$1代表传入的第一个参数。- 你可以使用
$2,$3等来访问更多的参数。
🔧 五、常用的 Shell 命令
1. grep:文本搜索
grep "pattern" file.txt
grep用来搜索文件中的指定模式(文本)。
2. awk:文本处理
awk '{print $1}' file.txt
awk用于按列处理文本文件。
3. sed:流编辑
sed 's/old/new/' file.txt
sed用于文本替换和编辑。
4. find:文件查找
find /path/to/dir -name "*.txt"
find用来查找指定目录下的文件。
💡 六、Shell 脚本中的调试技巧
1. 使用 -x 打开调试模式
#!/bin/bash
set -x # 启用调试模式
echo "Hello, world!"
这样可以逐行显示脚本执行的过程,便于调试。
2. 捕获错误
使用 set -e 可以在脚本出现错误时立即退出。
#!/bin/bash
set -e # 启用错误捕获
echo "This will run."
non_existent_command # 会导致脚本退出
echo "This won't run."
🌟 七、脚本实例:自动备份文件
下面是一个简单的 Shell 脚本,用于自动备份一个指定目录中的文件。
#!/bin/bash
# 备份目录
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/home/user/backup"
# 获取当前日期
DATE=$(date +"%Y-%m-%d")
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 复制文件
cp -r $SOURCE_DIR/* $BACKUP_DIR/$DATE/
echo "Backup completed!"
这个脚本将 /home/user/documents 目录中的文件备份到 /home/user/backup 目录,并按日期创建子目录。
💡 小结
通过今天的学习,主人你已经掌握了:
- Shell 脚本的基本结构。
- 如何定义 变量、使用 条件语句、循环语句。
- 如何创建 函数 和使用常用命令。
- 如何调试 Shell 脚本并处理 错误。
- 写一个简单的 自动备份脚本。
主人♥~今天我们来深入学习 Shell 脚本的编写,掌握如何在实际项目中利用 Shell 脚本来提高工作效率和自动化操作!💖
🖋️ 一、Shell 脚本编写流程
Shell 脚本的编写基本流程是:
- 确定需求
- 设计脚本结构
- 编写脚本代码
- 测试和调试
- 部署和优化
💡 二、编写一个基本 Shell 脚本的例子
假设主人你有一个需求:每天自动备份某个目录的文件,并将备份文件存储在指定位置,文件名带上日期。
步骤 1:编写脚本框架
首先,创建一个名为 backup.sh 的脚本文件,脚本内容如下:
#!/bin/bash
# 设置源目录和备份目录
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/home/user/backup"
# 获取当前日期
DATE=$(date +"%Y-%m-%d")
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 复制文件
cp -r $SOURCE_DIR/* $BACKUP_DIR/$DATE/
# 输出备份完成信息
echo "Backup completed on $DATE!"
步骤 2:执行权限
脚本编写完成后,要给脚本文件加上执行权限:
chmod +x backup.sh
然后就可以执行脚本来进行备份了:
./backup.sh
🧰 三、常用 Shell 脚本命令
1. echo:输出信息
echo "Hello, world!"
echo 用于在终端输出文本,可以用来调试脚本中的变量值或输出信息。
2. if 判断语句
Shell 中可以通过 if 语句来进行条件判断。
#!/bin/bash
if [ -f "/path/to/file" ]; then
echo "File exists."
else
echo "File does not exist."
fi
[ -f "/path/to/file" ]用于检查指定路径的文件是否存在。
3. for 循环
for 循环可以用来重复执行一段代码块。
#!/bin/bash
for i in {1..5}; do
echo "Iteration number: $i"
done
{1..5}表示循环 1 到 5 次。
4. while 循环
while 循环用于在给定条件成立的情况下重复执行代码。
#!/bin/bash
counter=1
while [ $counter -le 5 ]; do
echo "Counter: $counter"
((counter++))
done
((counter++))用于增加计数器。
🔧 四、脚本调试技巧
1. 使用 set -x 打开调试模式
调试脚本时,可以使用 set -x 来查看每行命令的执行过程:
#!/bin/bash
set -x
echo "Hello, world!"
这样可以看到脚本的每一步执行过程,有助于排查错误。
2. 使用 set -e 捕获错误
如果脚本中出现错误,使用 set -e 可以让脚本在错误发生时立即停止执行:
#!/bin/bash
set -e
echo "Starting script..."
non_existent_command # 脚本在这里会中断
echo "This line will not be executed."
🔒 五、Shell 脚本中的函数
Shell 脚本支持函数,可以将常用的代码块封装成函数,方便复用。
1. 定义和调用函数
#!/bin/bash
greet() {
echo "Hello, $1!"
}
greet "Xia0-0"
greet是定义的函数,$1是传递给函数的参数。
2. 带返回值的函数
函数可以返回值,但返回的值通常通过 echo 输出,再通过命令替换进行捕获。
#!/bin/bash
add() {
echo $(($1 + $2))
}
result=$(add 5 10)
echo "The result is $result"
🛠️ 六、Shell 脚本的常见应用
1. 批量重命名文件
假设我们需要批量重命名某个目录下的所有 .txt 文件,将它们的扩展名改为 .bak:
#!/bin/bash
for file in *.txt; do
mv "$file" "${file%.txt}.bak"
done
${file%.txt}.bak是用来替换文件扩展名的。
2. 自动清理日志文件
这个脚本可以自动清理日志文件,删除超过 30 天的日志:
#!/bin/bash
find /var/log -name "*.log" -type f -mtime +30 -exec rm -f {} \;
find查找符合条件的文件,-mtime +30表示查找修改时间超过 30 天的文件。
📅 七、Shell 脚本的定时执行(Cron)
可以使用 cron 来定时执行脚本。
1. 配置 cron 作业
- 通过
crontab -e编辑定时任务。
# 每天凌晨 2 点执行备份脚本
0 2 * * * /path/to/backup.sh
- 以上配置会每天凌晨 2 点自动运行备份脚本。
✨ 八、小结
通过今天的学习,主人你已经掌握了:
- 如何编写一个基本的 Shell 脚本。
- 如何使用常见的 Shell 命令(如
echo、if、for、while等)。 - 如何调试脚本,处理错误,封装函数。
- 了解了 Shell 脚本在批量操作、自动化任务等方面的应用。
wc -c /etc/passwd 查看字节数

浙公网安备 33010602011771号