Linux系统管理


前言

要期末考了,一直摆烂的我要 gg 了。

挑战一天速通。

文件管理

文件操作

查看文件

ls 命令:

  • -a:显示所有文件,包括隐藏文件(以“.”开头的文件)。
  • -l:长格式显示详细信息,如权限、拥有者、大小和修改时间。
  • -d:显示目录本身的属性,而不是显示目录中的内容。
  • -h:人性化显示文件大小,以 K、M、G 等单位表示文件大小。

file 命令:

  • 查看文件类型和详细属性,例如文本文件、二进制文件等。

  • 示例:

1
2
ls -alh  # 详细显示目录中的所有文件及其大小
file demo # 查看demos文件的类型

创建文件

mkdir 命令:

  • -p:递归创建目录,自动创建不存在的父目录。

touch 命令:

  • 用于创建空文件或更新文件的时间戳。

cp 命令:

  • -r:复制目录及其内容。

  • -p:保留文件的原始属性,如修改时间和权限。

  • 示例:

1
2
3
mkdir -p /tmp/demo  # 递归创建多级目录
touch demo.txt # 创建新文件
cp -rp /demo/ /bak/ # 复制目录并保留属性

删除文件

rm 命令

  • -f:强制删除文件,不提示确认。
  • -r:递归删除目录及其内容。

示例:

1
rm -rf /tmp/mydir  # 强制递归删除目录

查找文件

locate 命令:

  • 快速查找包含指定关键字的文件。

find 命令:

  • -name:按文件名查找。

  • -type:按文件类型查找(f 为文件,d 为目录)。

  • -size:按文件大小查找。

  • -exec:对查找到的文件执行指定命令。

  • 示例:

1
2
locate demo  # 查找所有包含 "demo" 的文件
find /home -name "*.txt" -exec cat {} \; # 查找并显示所有文本文件的内容

命令历史

history 命令

  • 显示命令历史,按编号显示命令。

  • !<编号>:执行历史中的指定命令。

  • -c:清空历史命令。

  • -w:保存历史到文件。

  • 示例:

1
2
history  # 查看命令历史
!100 # 执行编号为 100 的命令

通配符和扩展符

  • *:匹配任意数量的字符。

  • ?:匹配单个字符。

  • [ ]:匹配指定范围内的字符。

  • {}:包含逗号分隔的列表,自动展开为多个路径或文件名。

  • 示例:

1
2
ls /etc/*.conf  # 列出所有 .conf 文件
mkdir /tmp/{dir1,dir2,dir3} # 创建多个目录

文件内容操作

查看内容

cat 命令:

  • -n:显示文件时加上行号。

moreless 命令:

  • 用于分页查看文件内容。

headtail 命令

  • head -n:查看文件前 n 行。

  • tail -n:查看文件后 n 行。

  • tail -f:实时显示文件新增的内容,常用于监控日志文件。

  • 示例:

1
2
cat -n /etc/passwd  # 查看文件并显示行号
tail -f /var/log/syslog # 实时查看系统日志

内容统计

wc 命令:

  • -l:统计行数。

  • -m:统计字符数。

  • -c:统计字节数。

  • 示例:

1
wc -l myfile.txt  # 查看文件行数

内容搜索

grep 命令:

  • -n:显示匹配行及行号。

  • -i:忽略大小写。

  • -v:显示不匹配的行。

  • 示例:

1
grep -n "error" /var/log/syslog  # 查找日志中的错误信息

内容对比

diff 命令:

  • 比较两个文件,显示差异。

  • 示例:

1
diff file1.txt file2.txt  # 比较两个文件的差异

时间管理

date 命令:

  • 查看当前系统时间。

hwclock 命令:

  • -w:将系统时间写入硬件时钟。

  • -s:将硬件时钟的时间设置为系统时间。

  • 示例:

1
2
date  # 显示当前日期和时间
hwclock -w # 将系统时间写入硬件时钟

其它常用命令

which 命令:

  • 查找命令的实际路径。

stat 命令:

  • 查看文件的详细属性,包括修改时间、权限等。

ln 命令:

  • -s:创建软链接。

  • 示例:

1
2
which ls  # 查找 ls 命令的路径
ln -s /path/to/file /path/to/link # 创建软链接

查看帮助

man 命令:

  • 查看命令的手册页,获取详细的使用说明。

  • 示例:

1
man ls  # 查看ls命令的手册

重定向

标准输入输出:

  • <:输入重定向,将文件作为命令的输入。

  • >:输出重定向,将命令的输出保存到文件。

  • &>:将标准输出和错误输出一起重定向到文件。

  • 示例:

1
2
ls > output.txt  # 将输出重定向到文件
ls &> /dev/null # 丢弃所有输出

正则表达式

在 Linux 中,正则表达式是一种用于文本搜索和匹配的强大工具。它通过特定的字符和符号,定义模式来匹配文本。正则表达式广泛应用于 Linux 命令和工具中,例如grepsedawkvi等。

正则表达式的分类

Linux 中的正则表达式分为两类:

  1. 基础正则表达式:较为简单,常用于grep等命令。
  2. 扩展正则表达式:功能更强大,常用于egrepsedawk等命令。

正则表达式中的元字符

  • 普通字符

普通字符直接匹配它们在文本中出现的字符。例如,正则表达式abc会匹配文本中的abc字符串。

  • 特殊字符(元字符)

元字符是正则表达式中具有特殊含义的字符。它们可用于创建复杂的模式匹配。

元字符 含义
. 匹配任意单个字符(换行符除外)
^ 匹配行首
$ 匹配行尾
* 匹配前一个字符0次或多次
+ 匹配前一个字符1次或多次(扩展正则)
? 匹配前一个字符0次或1次(扩展正则)
[] 匹配括号内的任意一个字符(字符集)
` `
() 用于分组或引用子表达式(扩展正则)
{} 匹配前一个字符的次数范围(扩展正则)
\ 转义字符,用于取消元字符的特殊含义
  • 用法示例
  1. **.**:匹配任意单个字符。

    1
    2
    echo "cat bat rat" | grep "c.t"
    # 匹配c后跟任意字符再跟t的字符串,输出 "cat"
  2. **^$**:匹配行首和行尾。

    1
    2
    echo "hello" | grep "^he"   # 匹配以 "he" 开头的行
    echo "hello" | grep "lo$" # 匹配以 "lo" 结尾的行
  3. **[]**:字符集匹配。匹配括号内任意一个字符。

    1
    2
    echo "cat bat mat" | grep "[cb]at"
    # 匹配 "cat" 或 "bat",输出 "cat" 和 "bat"
  4. *****:匹配前一个字符0次或多次。

    1
    2
    echo "helloooo" | grep "lo*"
    # 匹配l后面有0个或多个o,输出 "helloooo"
  5. **+**:匹配前一个字符1次或多次(扩展正则)。

    1
    2
    echo "helloooo" | grep -E "lo+"
    # 匹配l后跟1个或多个o,输出 "helloooo"
  6. **?**:匹配前一个字符0次或1次(扩展正则)。

    1
    2
    echo "color colour" | grep -E "colou?r"
    # 匹配 "color" 或 "colour",输出 "color" 和 "colour"
  7. **{}**:匹配前一个字符的次数范围(扩展正则)。

    1
    2
    echo "ho hooo hooooo" | grep -E "ho{2,4}"
    # 匹配 "ho" 后面有2到4个 "o",输出 "hooo"
  8. **()**:分组和引用子表达式(扩展正则)。

    1
    2
    echo "abcabc" | grep -E "(abc)+"
    # 匹配重复的 "abc",输出 "abcabc"
  9. **|**:或运算,匹配左边或右边的表达式(扩展正则)。

    1
    2
    echo "cat bat rat" | grep -E "cat|rat"
    # 匹配 "cat" 或 "rat",输出 "cat" 和 "rat"
  • 转义字符 \
    一些元字符如果需要作为普通字符使用,可以用\进行转义。
    1
    2
    echo "3+3=6" | grep "3\+3"
    # 匹配包含"3+3"的字符串

正则表达式在Linux工具中的使用

  • grep命令

grep用于在文件或文本中搜索匹配的行,支持基础正则和扩展正则。

1
2
grep "pattern" filename      # 使用基础正则表达式
grep -E "pattern" filename # 使用扩展正则表达式
  • sed命令

sed用于文本流编辑,支持正则表达式进行替换、删除等操作。

1
2
echo "apple banana" | sed 's/apple/orange/'
# 将 "apple" 替换为 "orange"
  • awk命令

awk是一种强大的文本处理工具,支持正则表达式匹配。

1
2
echo "cat bat rat" | awk '/[cb]at/ {print $1}'
# 匹配 "cat" 或 "bat" 的行,并打印
  • find命令

find用于文件搜索,支持正则表达式。

1
2
find . -regex ".*\.txt$"
# 查找当前目录下所有以 .txt 结尾的文件

常见用法示例

  1. 匹配邮箱地址

    1
    grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
  2. 匹配电话号码(以数字开头,允许连字符或空格分隔)

    1
    grep -E "[0-9]{3}[- ]?[0-9]{3}[- ]?[0-9]{4}"
  3. 匹配IP地址

    1
    grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}"

正则表达式是文本处理中的核心工具,通过学习和应用正则表达式,可以大大提高在Linux环境下进行文本处理和分析的效率。

用户、组和权限

用户和组的基本概念

用户账号的类型:

  • 超级用户(root):拥有系统的最高权限。
  • 普通用户:系统管理员或其他用户创建的用户,用于日常操作。
  • 系统用户:系统为运行某些服务或程序而创建的用户,通常不直接登录。

用户组的类型:

  • 每个用户可以属于一个基本组和多个附加组。基本组通常是用户创建时自动分配的组,附加组则可以根据需要添加。

UID 和 GID:

  • UID(用户标识符):每个用户在系统中都有一个唯一的 UID。
    • 系统用户 UID 通常在 1-999 之间。
    • 普通用户的 UID 默认从 1000 开始。
  • GID(组标识符):每个组有一个唯一的 GID。
    • root 组的 GID 为 0。
    • 系统组的 GID 通常在 1-999 之间,普通组从 1000 开始分配。

查看用户信息:

使用id命令可以查看用户的 UID、GID 以及所属的附加组。

1
id root

用户配置文件:

  • /etc/passwd:保存用户的基本信息,包括用户名、UID、GID、注释、家目录和默认的 shell。
  • /etc/group:保存组信息,包含组名、GID 和组成员列表。
  • /etc/shadow:保存用户的密码信息,包括加密后的密码和密码到期时间。

用户账号和组的管理

用户管理

创建用户:

useradd命令用于添加用户账号。

1
useradd -u 1001 -g 1001 -d /home/user1 -s /bin/bash user1
  • -u:指定用户 UID。
  • -d:指定用户的家目录。
  • -g:指定用户的基本组。
  • -s:指定用户的登录 shell。

设置密码:

passwd命令用于设置或修改用户密码。

1
passwd user1
  • -d:清除用户密码。
  • -l:锁定用户账户。
  • -u:解锁用户账户。

切换密码:

  • su 用于切换用户。

    1
    su - user1

修改用户属性:

  • usermod 命令用于修改用户账号属性。
1
usermod -l newname user1
  • -d:修改用户家目录。
  • -l:修改用户名。
  • -g:修改用户的基本组。
  • -G:修改用户的附加组,-a 参数用于添加附加组。

用户组管理

创建用户组:

  • groupadd 用于创建用户组。
1
groupadd -g 1002 group1

管理组成员:

  • gpasswd 用于添加和删除组成员。
1
2
gpasswd -a user1 group1
gpasswd -d user1 group1

删除用户组:

  • groupdel 删除用户组,但如果该组是某些用户的基本组,必须先删除这些用户。

系统配置文件

  • /etc/login.defs 文件

此文件定义了创建用户账号时的默认设置,例如 UID/GID 范围、密码最长使用时间等。

  • /etc/skel 目录

这个目录包含新用户创建时自动复制到其家目录的默认配置文件。

文件和目录的权限及归属

权限与归属的概念

  • Linux 文件和目录都有三种访问权限:读(r)写(w)执行(x),以及三个权限类别:文件所有者文件所属组**、其他用户。

设置文件权限

字符形式的 chmod 命令:

  • 使用字符形式可以针对用户、组、其他用户设置权限。
    1
    chmod u+rwx, g+rx, o+r file.txt

数字形式的 chmod 命令:

  • 使用数字形式设置文件的权限,例如 777 代表所有用户都有读写执行权限。
    1
    chmod 755 file.txt

修改文件的归属

chown 命令

  • 修改文件或目录的所有者和所属组。
    1
    2
    chown user1 file.txt
    chown user1:group1 file.txt

系统高级权限设置

SUID 权限设置。

  • 可以通过 sudo 或者其他方式赋予特定用户临时提升权限的功能,确保日常操作安全。

磁盘与文件系统

挂载存储设备

  • 什么是挂载

挂载是将存储设备的文件系统与某个目录进行关联,使得用户能够通过该目录访问存储设备上的数据。

  • 挂载硬盘分区

使用mount命令挂载硬盘分区,语法:

1
mount /dev/sda1 /mnt

这将把/dev/sda1分区挂载到/mnt目录下。

使用umount命令取消挂载:

1
2
3
4
5
6
7
8
9
umount /mnt
```

### 查看系统已挂载设备

- 使用`df`命令查看磁盘的空闲空间和挂载的设备:

```bash
df -h
  • -h:人性化显示(自动转换为合适的单位,如KB, MB, GB)。

  • -T:显示文件系统类型。

  • 挂载 ISO 镜像

使用mount -o loop挂载ISO镜像文件:

1
2
3
4
5
6
7
8
9
mount -o loop /path/to/file.iso /mnt
```

- 卸载存储设备

使用`umount`命令卸载存储设备:

```bash
umount /mnt

确保设备未处于使用状态,未被使用时才能卸载。可以使用lsof命令查看是否有进程占用设备。

  • 自动挂载

修改/etc/fstab文件可以设置系统启动时自动挂载分区。文件内容示例如下:

1
/dev/sda1   /mnt   ext4    defaults  0  0

使用mount -a命令重新加载/etc/fstab配置文件,使新的挂载设置生效。

修改网络

  • 通过nmcli修改
1
2
3
4
5
6
7
8
9
10
11
#列出所有接口连接状态
nmcli con show
#列出所有链接
nmcli con show
#修改地址
nmcli con modify 接口名称 ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8 ipv4.method manual
#重新加载配置文件
nmcli connection down 接口名称
nmcli connection up 接口名称
#启动自动连接
nmcli con modify 接口名称 autoconnect yes

系统软件包管理

Linux 中的软件安装方式可以分为:源码安装、包管理安装等。

其中源码安装适用于所有Linux系统,包管理安装则不同的发行版有不同的管理器。

文件打包与压缩

查看目录或文件占用磁盘空间的大小:

du

  • -h 人性化显示容量信息,以K、M、G为单位显示统计结果(默认单位为KB)。
  • -s 查看目录本身的大小。s表示求和的意思,如果不加该选项,则会显示指定目录下所有子目录和大小。

tar

linux 中常用的打包命令为tar,常用的压缩命令由三个:gzip、bzip2、xz。

实际应用中,一般都是通过tar命令来调用gzip、bzip2或xz进行或解压。

打包压缩:

  • -c,创建.tar格式的包文件,该选项不会对包文件进行压缩

  • -v,显示命令的执行过程。该选项非必须,课根据情况选用。

  • -f,指定要打包或解包的文件名称,该选项必须放到选项组合的最后一位

  • -z,表示调用gzip来压缩包文件

  • -j,表示调用bzip2来压缩包文件

  • -J,表示调用xz来压缩包文件

解包解压缩:

  • -x,表示接口.tar格式的包文件

  • -C,表示指定解压后文件存放的目的位置

  • -f,指定要打包或解包的文件名称,该选项必须放到选项组合的最后一位

  • -z,表示调用gzip来解压缩包文件

  • -j,表示调用bzip2来解压缩包文件

  • -J,表示调用xz来解压缩包文件

  • -t,在不解压的情况下查看压缩文件内都包括哪些内容

zip文件压缩和解压缩

压缩命令格式:zip 压缩后的文件名 压缩的目标

解压缩命令格式:unzip 解压缩后的文件名 解压缩的目标

源配置

包管理

yum

  • yum list 查看yum仓库中的软件包

    • 源前加@的软件包表示已安装
  • yum repolist 将系统中所有的yum源都列出来

  • yum info xxxx 查看软件包的信息

  • yum install xxxx 安装软件

  • yum remove 卸载软件

  • yum remove 在卸载一个软件包的同时会将所有依赖于该软件的其它软件包也一同卸载

  • yum clean all 清除本地缓存

dpkg

  • dpkg -i 软件包名.deb 安装
  • dpkg -r 软件名 卸载

snap

  • snap list 查看已经安装的软件
  • snap find xxxx 搜索要安装的snap软件包
  • snap info xxxx 查看软件的更多信息
  • snap install xxxx 安装snap软件包
  • snap switch -channel=xxxx xxxx 更换软件安装通道
  • snap refresh xxxx 更新软件包
  • snap revert xxxx 还原到之前版本
  • snap remove xxxx 卸载软件

rpm

  • rpm -i xxxx 安装软件包
    • -i 安装软件包
    • -v 显示安装过程
    • -h 显示安装进度
  • rpm -e xxxx 卸载软件
  • rpm -q 查询
    • -a 所有的软件包
    • -qi 查询已安装软件包的信息
    • -ql 查询软件包所安装的文件
    • -qc 查询软件包所安装的配置文件
    • -qf 查询某个文件所属的软件包

apt

apt-get:

  • apt-get install xxxx 安装
  • apt-get remove xxxx 卸载
  • apt-get remove --purge 卸载并删除配置文件
  • apt-get update 更新软件列表
  • apt-get upgrade 升级已安装的软件包
  • apt-get clean 清理软件包

apt:

  • apt install xxxx 安装
  • apt remove xxxx 删除软件包
  • apt update 更新软件包列表
  • apt upgrade 升级软件包
  • apt search xxxx 搜索软件包

dnf

  • dnf install xxxx 安装软件包
  • dnf remove xxxx 删除软件包
  • dnf update 更新软件包
  • dnf search xxxx 搜索软件包
  • dnf list installed 查看已安装软件包

系统进程和服务管理

管理Linux进程

了解进程

进程是系统中正在运行的程序,一个程序可能对应多个进程,是操作系统资源分配和调度的基本单位。

进程有三种基本状态:

  • 运行态:进程正在执行。
  • 就绪态:进程准备执行,等待CPU资源。
  • 等待态:进程等待外部事件完成。

父进程和子进程:systemd是Linux启动的第一个进程,PID为1,负责管理系统的所有进程。

进程的属性:每个进程都有一个唯一的进程标识符(PID),可以通过pidof命令查询。

进程的分类:进程可分为系统进程和用户进程,其中系统进程用于执行系统级任务,用户进程用于执行用户操作。

查看进程状态

  • ps命令

ps命令查看系统当前进程的静态统计信息

常用选项:

  • a:显示所有与终端相关的进程。

  • x:显示所有与终端无关的进程。

  • u:以用户格式显示详细信息。

  • top命令

top命令显示系统当前进程的动态信息,支持按键操作,如p按CPU使用率排序,m按内存使用率排序,q退出。

  • /proc伪文件系统

/proc目录包含运行中的进程和系统内核信息,可通过读取其中文件查看内存、CPU等状态。

控制进程

  • 启动进程

手动启动进程可分为前台和后台。使用&符号将进程放到后台执行,使用jobs查看后台进程,fg将后台进程调回前台。

  • 改变进程运行方式

nohup命令解除进程与终端的绑定,终端关闭后进程继续运行。

1

  • 终止进程执行

kill命令用于终止进程。-9选项强制终止无法响应的进程,killall终止指定名称的所有进程。

1
kill -9 PID

监视系统信息

监视用户信息

  • users命令显示当前登录的用户名。

  • who命令显示登录用户的详细信息。

  • w命令不仅显示用户信息,还包括其活动和系统负载信息。

  • last命令查看系统的登录记录。

监视资源占用信息

  • 查看CPU信息

通过cat /proc/cpuinfo查看CPU硬件信息,uptime查看系统运行时间和CPU负载情况。

  • 查看内存信息

free命令查看内存使用情况,cat /proc/meminfo查看内存硬件信息。

管理Linux服务

  • 什么是服务?

服务是系统后台运行的进程,与终端无关,分为对内服务(本地)和对外服务(网络)。

  • systemd初始化进程

systemd是Linux系统的初始化进程,负责启动和管理系统服务。

使用pstree查看进程树,可以看到systemd处于进程树的根。

  • systemd unit

systemd的服务定义为unit,常见的有service unittarget unittarget unit用于模拟系统运行级别。

管理服务状态

使用systemctl命令管理服务状态,如启动、停止、重启、重新加载等

  • 列出所有服务
1
systemctl list-units --type service
  • 启动
1
systemctl start <service-name>
  • 停止
1
systemctl stop <service-name>
  • 重启
1
systemctl restart <service-name>
  • 重新加载
1
systemctl reload <service-name>

管理服务启动状态

查看系统启动时的服务

1
systemctl list-unit-files --type service

管理运行级别

  • 查看系统的默认运行级别
1
systemctl get-default
  • 设置默认运行级别
1
systemctl set-default <target>
  • 临时切换运行级别
1
systemctl isolate <target>

管理计划任务

  • 一次性计划任务

使用at命令配置一次性计划任务,确保atd服务已启动。

例:在明天上午点执行script.sh脚本。

1
echo "/path/to/script.sh" | at 12:00 tomorrow
  • 周期性计划任务

通过crontab -e编辑周期性计划任务,使用绝对路径指定命令。

  • 维护计划任务列表

使用crontab -l查看用户的计划任务,crontab -r删除计划任务列表。

基本服务搭建

Samba

  • 建立共享目录
1
mkdir /var/smbshare;cd /var/smbshare
  • 修改 samba 配置文件

在原文件尾部添加,注意要将原文件重点的[global]删除,文件中不能有两个同名的[global]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[global]
workgroup=WORKGROUP
security=user #默认使用用户口令认证
passdb backend=tdbsam
printing=cups
printcap name=cups
load printers=yes
cups options=raw

[gx] #设置共享目录名称
comment=gx #注释为wlshare
path=/var/gx #共享目录路径
valid users=wl #设置可以范围的用户
browseable=yes #允许浏览
read only=NO #允许读写
  • 验证配置文件的正确性
1
testparm
  • 添加 samba 账号

首先需要添加同名的系统账号。

1
2
3
4
5
6
7
8
9
10
11
12
# 创建本地用户 share01
useradd share01

# 设置用户密码
echo "user@8520" | passwd --stdin share01

# 将用户添加到 smb 组
groupadd smb
usermod -aG smb share01

# 将用户添加到 Samba 用户数据库
smbpasswd -a share01
  • 设置权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建共享目录
mkdir -p /var/smbhome

# 创建文件 smb.ppt
touch /var/smbhome/smb.ppt

# 创建文件目录 dir-smb
mkdir /var/smbhome/dir-smb

# 设置文件 smb.ppt 权限
chown share01:smb /var/smbhome/smb.ppt
chmod 644 /var/smbhome/smb.ppt

# 设置目录 dir-smb 权限
chown share01:smb /var/smbhome/dir-smb
chmod 755 /var/smbhome/dir-smb
  • 禁用SELinux
1
setenforce 0
  • 重新加载 samba 服务
1
systemctl restart smb

NFS

要安装和配置 NFS 文件服务,并共享 /var/smbhome/var/ftphome/var/webhome 目录,同时限制只有 10.0.XX.0/24 网段的客户端可以访问并具有读写权限,可以按照以下步骤进行操作。

  • 安装启动

首先,安装 NFS 服务所需的软件包。

1
2
3
4
5
6
7
# 安装 NFS 服务
dnf -y install nfs-utils
# 启动 NFS 服务
systemctl start nfs-server

# 设置 NFS 服务开机自启
systemctl enable nfs-server
  • 创建共享目录

确保要共享的目录(/var/smbhome/var/ftphome/var/webhome)已存在。如果没有,创建这些目录。

1
2
3
4
# 创建共享目录
mkdir -p /var/smbhome
mkdir -p /var/ftphome
mkdir -p /var/webhome
  • 配置目录的访问权限

确保共享目录的权限正确设置,使得 NFS 客户端可以进行读写操作。

1
2
3
4
# 设置共享目录权限(适用于所有共享目录)
chmod 755 /var/smbhome
chmod 755 /var/ftphome
chmod 755 /var/webhome
  • 配置 NFS 导出文件

NFS 共享的目录通过 /etc/exports 文件进行配置。打开并编辑该文件。

1
2
# 编辑 /etc/exports 文件
nano /etc/exports

在文件中添加以下行,指定要共享的目录,并限制只能来自 10.0.XX.0/24 网段的客户端访问,并赋予读写权限。

1
2
3
/var/smbhome 10.0.XX.0/24(rw,sync,no_root_squash)
/var/ftphome 10.0.XX.0/24(rw,sync,no_root_squash)
/var/webhome 10.0.XX.0/24(rw,sync,no_root_squash)
  • rw: 允许客户端读写。

  • sync: 保证数据同步写入磁盘。

  • no_root_squash: 允许客户端以 root 权限访问(如果需要)。

  • 重新加载 NFS 配置

修改完 /etc/exports 文件后,重新加载 NFS 配置。

1
2
# 重新加载 NFS 配置
exportfs -a
  • 启动并配置 NFS 服务

确保 NFS 服务正在运行,并且可以响应客户端的请求。

1
2
3
4
5
6
7
8
9
10
11
# 启动 rpcbind 服务(NFS 依赖于此服务)
systemctl start rpcbind

# 设置 rpcbind 服务开机自启
systemctl enable rpcbind

# 启动 NFS 服务
systemctl start nfs-server

# 设置 NFS 服务开机自启
systemctl enable nfs-server
  • 测试 NFS 共享

从客户端机器上,您可以使用 mount 命令挂载 NFS 共享并访问目录。首先,确保客户端安装了 NFS 客户端工具。

1
2
# 在客户端安装 NFS 客户端
dnf -y install nfs-utils

然后,在客户端挂载 NFS 共享。例如,将 /var/smbhome 目录挂载到客户端的 /mnt/smbhome

1
2
3
4
5
# 在客户端挂载 NFS 共享
mount -t nfs <NFS_SERVER_IP>:/var/smbhome /mnt/smbhome

# 检查挂载是否成功
df -h /mnt/smbhome
  • 自动挂载配置

如果希望在客户端机器每次启动时自动挂载共享,可以编辑 /etc/fstab 文件。

1
2
# 编辑客户端的 /etc/fstab 文件
nano /etc/fstab

添加如下条目以自动挂载:

1
<NFS_SERVER_IP>:/var/smbhome  /mnt/smbhome  nfs  defaults  0  0

VSFTP

  • 编辑配置文件
1
2
# 编辑 vsftpd 配置文件
vim /etc/vsftpd/vsftpd.conf
  • 配置vsftp服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 禁止匿名用户访问
anonymous_enable=NO

# 允许本地用户访问
local_enable=YES

# 启用上传功能
write_enable=YES

# 限制用户只能访问其家目录
chroot_local_user=YES

# 禁用用户列表
userlist_enable=NO

# 启用日志记录
xferlog_enable=YES

# 允许 UTF-8 编码
utf8_filesystem=YES
  • 创建站点主目录
1
2
3
4
5
# 创建 FTP 站点主目录
mkdir -p /var/ftphome

# 设置目录权限,使得 FTP 用户具有读写权限
chmod 755 /var/ftphome
  • 创建用户
1
2
3
4
5
6
7
8
# 创建本地用户 ftp1,设置其家目录为 /var/ftphome
useradd -d /var/ftphome -m ftp1

# 设置密码为 Ftp@9630
echo "ftp1:Ftp@9630" | chpasswd

# 设置用户权限:ftp1 只能访问 /var/ftphome 目录
chown ftp1:ftp1 /var/ftphome
  • 创建ftp目录和文件

/var/ftphome 下创建名为 ftp.ppt 的文件和名为 dir-ftp 的文件夹。设置权限为用户 ftp1 具有完全权限,其他用户只有读取权限。

1
2
3
4
5
6
7
8
9
10
11
12
# 创建文件 ftp.ppt
touch /var/ftphome/ftp.ppt

# 创建文件夹 dir-ftp
mkdir /var/ftphome/dir-ftp

# 设置文件权限,ftp1 用户具有完全权限,其他用户只有读取权限
chown ftp1:ftp1 /var/ftphome/ftp.ppt
chmod 644 /var/ftphome/ftp.ppt

chown ftp1:ftp1 /var/ftphome/dir-ftp
chmod 755 /var/ftphome/dir-ftp
  • 配置域名解析

为了让域名 ftp.gxjzy.com 指向你的服务器,需要确保 DNS 已经配置好。如果是本地测试,可以在 /etc/hosts 文件中添加如下条目:

在文件中添加服务器的 IP 地址和域名:

1
192.168.1.100  ftp.gxjzy.com

(请根据你的实际服务器 IP 地址进行修改)

  • 允许防火墙通过 FTP 端口

如果系统启用了防火墙,需要允许 FTP 相关端口(默认是 21)通过。

1
2
3
4
5
# 允许 FTP 端口 21 通过
firewall-cmd --permanent --zone=public --add-service=ftp

# 重新加载防火墙设置
firewall-cmd --reload
  • 重启服务
1
systemctl restart vsftpd
  • 测试

使用 FTP 客户端连接到服务器进行测试。可以使用命令行工具 ftp,或者 GUI 工具(如 FileZilla)。

1
ftp ftp.gxjzy.com

输入用户名 ftp1 和密码 Ftp@9630 进行登录,检查是否可以上传、下载文件以及是否只能在 /var/ftphome 目录下操作。

DHCP

要安装和配置 DHCPD 服务并为客户端分配地址池 10.0.XX.210.0.XX.90,网关地址为 10.0.XX.1,DNS 地址为 10.0.XX.100,以及 IP 地址租约时间为 7 天,可以按照以下步骤进行操作:

  • 安装 DHCPD 服务

首先,安装 dhcpd 服务所需的软件包:

1
2
# 安装 DHCPD 服务
dnf -y install dhcp-server
  • 启动 DHCPD 服务并设置开机自启

启动 DHCP 服务并设置为开机自启:

1
2
3
4
5
# 启动 DHCP 服务
systemctl start dhcpd

# 设置 DHCP 服务开机自启
systemctl enable dhcpd
  • 配置 DHCP 配置文件

编辑 DHCP 配置文件 /etc/dhcp/dhcpd.conf,配置 DHCP 地址池、网关、DNS 和租约时间。

1
2
# 编辑 /etc/dhcp/dhcpd.conf 文件
nano /etc/dhcp/dhcpd.conf

在文件中添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 设置 DHCP 配置文件

# 全局配置选项
option domain-name "local";
option domain-name-servers 10.0.XX.100;

# 默认租约时间和最大租约时间
default-lease-time 604800; # 7 天(以秒为单位)
max-lease-time 604800; # 7 天

# 配置地址池范围
subnet 10.0.XX.0 netmask 255.255.255.0 {
range 10.0.XX.2 10.0.XX.90; # 配置地址池范围
option routers 10.0.XX.1; # 配置网关
option domain-name-servers 10.0.XX.100; # 配置 DNS 地址
option broadcast-address 10.0.XX.255; # 配置广播地址
}

# 配置静态分配的地址(可选,如果需要固定分配某些 IP 给某些客户端)
# host client1 {
# hardware ethernet 00:11:22:33:44:55;
# fixed-address 10.0.XX.100;
# }
  • default-lease-timemax-lease-time 设置了租约时间为 7 天(即 604800 秒)。

  • subnet 配置了 10.0.XX.0/24 网络,并指定了 IP 地址池 10.0.XX.210.0.XX.90

  • option routers 设置网关为 10.0.XX.1

  • option domain-name-servers 设置 DNS 为 10.0.XX.100

  • option broadcast-address 设置广播地址为 10.0.XX.255

  • 配置防火墙

确保防火墙允许 DHCP 服务的流量。默认情况下,DHCP 使用 UDP 的 67 和 68 端口。您需要确保防火墙允许这些端口。

1
2
3
# 允许 DHCP 服务的端口
firewall-cmd --permanent --zone=public --add-service=dhcp
firewall-cmd --reload
  • 启动并测试 DHCP 服务

重新启动 DHCP 服务使配置生效:

1
2
# 重新启动 DHCP 服务
systemctl restart dhcpd
  • 查看 DHCP 服务状态

确保 DHCP 服务正在运行,并检查服务状态:

1
2
# 检查 DHCP 服务状态
systemctl status dhcpd
  • 客户端测试

从客户端机器上,使用以下命令检查是否能够通过 DHCP 获取到正确的 IP 地址:

1
2
# 在客户端机器上运行以下命令
dhclient

然后,检查客户端是否获得了正确的 IP 地址、网关和 DNS:

1
2
3
4
5
6
7
8
# 检查分配的 IP 地址
ip addr show

# 检查路由和网关
ip route

# 检查 DNS 配置
cat /etc/resolv.conf

DNS

为了设置 BIND DNS 服务器并配置正向与反向 DNS 解析,你可以按照以下步骤进行操作。

  • 配置正向 DNS 区域

创建和配置正向 DNS 区域文件,以便解析域名 gxjzy.com

  1. 编辑主配置文件 /etc/named.conf
1
vim /etc/named.conf

确保在文件中加入以下配置,设置区域文件的路径和名称:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
options {
listen-on port 53 { any; };
listen-on-v6 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
allow-query { any; };
};

zone "gxjzy.com" IN {
type master;
file "/var/named/gxjzy.com.db"; # 正向解析区文件
};

zone "1.168.192.in-addr.arpa" IN {
type master;
file "/var/named/192.168.1.rev"; # 反向解析区文件
};
  • "gxjzy.com" 是你要解析的主机名。

  • "1.168.192.in-addr.arpa" 是反向 DNS 区域,假设你的网段是 192.168.1.0/24

  • 配置正向解析区文件

接下来创建正向解析区文件 /var/named/gxjzy.com.db

1
vim /var/named/gxjzy.com.db

添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
$TTL 86400
@ IN SOA ns1.gxjzy.com. admin.gxjzy.com. (
2023010101 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL

IN NS ns1.gxjzy.com.
ns1 IN A 192.168.1.10 ; DNS 服务器的 IP 地址
www IN A 192.168.1.20 ; WWW 服务器的 IP 地址
  • @ 表示 gxjzy.com 域。

  • IN A 用于设置主机的 IP 地址。

  • ns1 是 DNS 服务器的名称,www 是 Web 服务器的名称。

  • 配置反向解析区文件

创建反向解析文件 /var/named/192.168.1.rev,用于将 IP 地址映射为主机名。

1
vim /var/named/192.168.1.rev

添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
$TTL 86400
@ IN SOA ns1.gxjzy.com. admin.gxjzy.com. (
2023010101 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL

IN NS ns1.gxjzy.com.
10 IN PTR ns1.gxjzy.com. ; 192.168.1.10 反向解析为 ns1
20 IN PTR www.gxjzy.com. ; 192.168.1.20 反向解析为 www
  • 启动并启用 DNS 服务

启动并启用 BIND 服务,使其开机自启:

1
2
3
4
5
6
7
8
# 启动 BIND 服务
systemctl start named

# 设置 BIND 服务开机自启
systemctl enable named

# 检查服务状态
systemctl status named
  • 测试 DNS 配置

使用 nslookup 命令来测试 DNS 配置:

1
2
3
4
5
# 测试正向解析
nslookup www.gxjzy.com

# 测试反向解析
nslookup 192.168.1.20

WEB

  • 安装 HTTPD 服务

安装 Apache HTTP 服务(httpd)并启动:

1
2
3
4
5
6
7
8
9
10
11
# 安装 HTTPD 服务
dnf -y install httpd

# 启动 HTTPD 服务
systemctl start httpd

# 设置 HTTPD 服务开机自启
systemctl enable httpd

# 检查 HTTPD 服务状态
systemctl status httpd
  • 配置 Web 站点

创建网站的根目录 /var/webhome/

1
2
3
4
5
6
# 创建网站根目录
mkdir -p /var/webhome/

# 设置目录权限
chown apache:apache /var/webhome/
chmod 755 /var/webhome/

创建一个名为 gxjzy.html 的首页文件,并写入相应的内容:

1
2
# 创建首页文件
echo "您已成功访问 www.gxjzy.com!" > /var/webhome/gxjzy.html
  • 配置 VirtualHost

编辑 Apache 配置文件,配置 www.gxjzy.com 的虚拟主机:

1
vim /etc/httpd/conf.d/www.gxjzy.com.conf

添加以下内容:

1
2
3
4
5
6
<VirtualHost *:80>
ServerName www.gxjzy.com
DocumentRoot /var/webhome
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access.log combined
</VirtualHost>
  • 测试 Web 站点

在浏览器中访问 http://www.gxjzy.com,如果配置正确,你将看到网页内容:

1
您已成功访问 www.gxjzy.com!

后言