渗透基础 · 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 系统通常由以下几个部分组成:

  1. 内核(Kernel):管理硬件资源(CPU、内存、设备)
  2. Shell:命令行解释器,用户与系统之间的桥梁(bash/zsh)
  3. 文件系统:一切皆文件,统一目录结构(/etc, /usr, /bin 等)
  4. 系统服务:守护进程,比如 sshd、httpd
  5. 用户空间应用: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系统密码找回


🧚‍♀️ 一、总体思路(通用版本)

  1. 重启系统
  2. 修改 Grub 启动项,进入单用户模式
  3. 直接进入 root shell
  4. 执行 passwd 命令重设密码
  5. 重启恢复正常登录

🧛‍♀️ 二、具体操作步骤(以 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 + XF10 启动

系统会直接进入一个 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 系统(使用 SysVinitSystem 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=4w=2x=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)

🍬 作用:

  1. 对可执行文件:执行时以所属组的身份运行。
  2. 对目录:该目录中新建的文件会自动继承这个目录的所属组

🧪 举例:

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系统:

  1. 打开“控制面板”。
  2. 点击“网络和共享中心”。
  3. 点击连接的网络(例如Wi-Fi或以太网)。
  4. 点击“属性”。
  5. 在网络连接属性窗口,选择“Internet 协议版本 4 (TCP/IPv4)”并点击“属性”。
  6. 选择“使用下面的DNS服务器地址”并输入DNS服务器地址:
    • 首选DNS服务器:比如 8.8.8.8(Google公共DNS)或者 114.114.114.114(国内DNS服务)。
    • 备用DNS服务器:比如 8.8.4.4(Google备用DNS)。

Linux系统(使用命令行配置):

  1. 编辑/etc/resolv.conf文件,添加DNS服务器:
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    
    保存并退出。

macOS系统:

  1. 打开“系统偏好设置”。
  2. 选择“网络”。
  3. 选择你使用的网络连接(例如Wi-Fi),点击“高级”。
  4. 进入“DNS”标签页,点击“+”添加DNS服务器地址。
  5. 输入DNS服务器地址,比如 8.8.8.88.8.4.4

B. DNS服务器配置

如果你是网站管理员或需要配置自建的DNS服务器,通常需要配置DNS服务软件(如BIND、Unbound或dnsmasq)来进行域名解析。

BIND(Berkeley Internet Name Domain)配置:
BIND是最常见的DNS服务器软件,以下是简单的配置步骤。

  1. 安装BIND
    在Linux系统中,使用命令安装BIND:

    sudo apt-get install bind9
    
  2. 编辑配置文件
    主配置文件一般是 /etc/bind/named.conf。你需要配置DNS区域文件来指定解析规则。

    例如,为一个域名 example.com 配置DNS:

    zone "example.com" {
        type master;
        file "/etc/bind/db.example.com";
    };
    
  3. 创建区域文件
    /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
    
  4. 重启BIND服务
    配置完后,重启BIND服务:

    sudo systemctl restart bind9
    

C. 常见的DNS记录类型

  1. A记录(Address Record):将域名映射到IPv4地址。

    • 例如,example.com -> 192.168.1.1
  2. AAAA记录:将域名映射到IPv6地址。

    • 例如,example.com -> 2001:0db8::1
  3. CNAME记录(Canonical Name):将一个域名别名指向另一个域名。

    • 例如,www.example.com -> example.com
  4. MX记录(Mail Exchange):指定邮件服务器的域名。

    • 例如,example.com -> mail.example.com
  5. TXT记录:提供域名的文本信息,通常用于验证或安全目的。

    • 例如,example.com -> v=spf1 include:_spf.example.com ~all
  6. NS记录(Name Server):指定该域名的权威DNS服务器。

    • 例如,example.com -> ns1.example.com
  7. PTR记录(Pointer Record):用于反向DNS解析,将IP地址映射到域名。

3. 常见DNS服务

  • Google DNS8.8.8.88.8.4.4
  • Cloudflare DNS1.1.1.11.0.0.1
  • OpenDNS208.67.222.222208.67.220.220
  • 阿里云DNS223.5.5.5223.6.6.6

总结

DNS配置非常重要,决定了你的设备如何将域名解析为IP地址。设备的DNS配置通常比较简单,而DNS服务器的配置则涉及到复杂的记录设置和服务管理。根据需要选择合适的配置方式即可。如果你有具体的配置问题,随时告诉我,我可以帮助你解答哦,主人你!

ifconfigroutenetstat 是 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:提供了广泛的网络统计信息,包括网络连接、路由表和接口状态等。

如果你需要进一步了解具体的命令示例或配置方法,随时告诉我,主人你!

pskill 命令是 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 终止该进程。
  • 终止所有指定进程:

    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 服务。


🧩 一、准备工作

  1. 安装依赖项:编译 MySQL 需要一些开发工具和库,确保你的系统安装了必要的依赖包。
sudo apt update
sudo apt install -y cmake gcc g++ libncurses5-dev libssl-dev libboost-dev bison

📥 二、下载 MySQL 源码

  1. 获取 MySQL 源码:你可以从官方的 MySQL GitHub 仓库或官网下载源代码包。
cd /opt
sudo git clone https://github.com/mysql/mysql-server.git
cd mysql-server

如果你更倾向于直接下载一个版本的源码包,也可以从 MySQL 官网 下载。


🛠️ 三、编译和安装 MySQL

  1. 创建构建目录
mkdir build
cd build
  1. 配置 MySQL 编译选项:使用 cmake 配置 MySQL 编译参数。这里有很多可选项,你可以根据需要自定义设置。例如:
cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST=boost/

这里使用 -DDOWNLOAD_BOOST=1 表示下载 Boost 库,-DWITH_BOOST=boost/ 指定 Boost 库的位置。

  1. 开始编译
make -j$(nproc)   # 使用多核编译
  1. 安装 MySQL
sudo make install

🔧 四、配置 MySQL

  1. 初始化 MySQL 数据库:在 MySQL 编译完成后,需要初始化数据库文件。
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql
  1. 设置 MySQL 用户和权限:通常情况下,你需要为 MySQL 创建一个系统用户,并设置适当的权限。
sudo useradd mysql
sudo chown -R mysql:mysql /usr/local/mysql/

🎛️ 五、启动 MySQL 服务

  1. 启动 MySQL 服务
sudo /usr/local/mysql/support-files/mysql.server start
  1. 配置 MySQL 为开机自启:如果你希望 MySQL 开机自启,可以使用以下命令:
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo update-rc.d mysql defaults
  1. 登录 MySQL
/usr/local/mysql/bin/mysql -u root -p

输入密码后,你就可以进入 MySQL 命令行界面了。


🧹 六、配置 MySQL 的系统服务

  1. 创建 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
  1. 重新加载 systemd 配置
sudo systemctl daemon-reload
  1. 启动并启用 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 的过程主要包括:

  1. 安装编译依赖。
  2. 下载 MySQL 源代码。
  3. 配置并编译 MySQL。
  4. 初始化数据库、配置 MySQL 用户和权限。
  5. 启动 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:选择 prefork MPM 模式(适用于处理非线程化的请求)。

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.htmlstyle.cssimage.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://localhosthttp://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

💡 小结

通过这个过程,主人你已经完成了:

  1. 从源码编译并安装了 Apache HTTP 服务器。
  2. 配置了 Apache 提供静态网站服务,并将你的网站文件部署到服务器上。
  3. 设置了 Apache 为开机自启(如果需要)。
  4. 管理了 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://localhosthttp://mydynamicwebsite.local,你应该能看到 PHP 输出的内容 Hello, welcome to my dynamic website!


⚙️ 七、配置 PHP-FPM(可选)

如果你希望 PHP 以 PHP-FPM 的方式运行,可以配置 PHP-FPM。

  1. 编辑 PHP-FPM 配置文件
sudo nano /usr/local/php/etc/php-fpm.conf

在配置文件中,确保 listen 指令指向正确的端口(如 127.0.0.1:9000)。

  1. 启动 PHP-FPM
sudo /usr/local/php/sbin/php-fpm
  1. 配置 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 服务文件。

  1. 创建 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
  1. 重新加载 systemd 配置并启用服务
sudo systemctl daemon-reload
sudo systemctl enable apache2
sudo systemctl start apache2

💡 小结

通过这个过程,主人你已经完成了:

  1. 从源码编译并安装了 PHP 服务,并将其与 Apache 集成。
  2. 配置了 Apache 提供 PHP 支持,并搭建了一个简单的动态网站。
  3. 设置了 PHP-FPM(可选),提升了动态网站的性能。
  4. 配置了 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" ]:检查文件是否存在。
  • thenelse 表示不同的执行路径。

4. 循环语句

Shell 脚本支持 forwhile 等循环语句。

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 目录,并按日期创建子目录。


💡 小结

通过今天的学习,主人你已经掌握了:

  1. Shell 脚本的基本结构
  2. 如何定义 变量、使用 条件语句循环语句
  3. 如何创建 函数 和使用常用命令。
  4. 如何调试 Shell 脚本并处理 错误
  5. 写一个简单的 自动备份脚本

主人♥~今天我们来深入学习 Shell 脚本的编写,掌握如何在实际项目中利用 Shell 脚本来提高工作效率和自动化操作!💖


🖋️ 一、Shell 脚本编写流程

Shell 脚本的编写基本流程是:

  1. 确定需求
  2. 设计脚本结构
  3. 编写脚本代码
  4. 测试和调试
  5. 部署和优化

💡 二、编写一个基本 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 点自动运行备份脚本。

✨ 八、小结

通过今天的学习,主人你已经掌握了:

  1. 如何编写一个基本的 Shell 脚本。
  2. 如何使用常见的 Shell 命令(如 echoifforwhile 等)。
  3. 如何调试脚本,处理错误,封装函数。
  4. 了解了 Shell 脚本在批量操作、自动化任务等方面的应用。

wc -c /etc/passwd 查看字节数

posted @ 2025-04-09 12:02  Xia0_0  阅读(375)  评论(0)    收藏  举报