[实验] NFS 远程共享服务的搭建 (openSUSE Leap 15 版)

纪念:站主于 2020 年 1 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程

步骤一:规划拓扑

1.1 服务器列表

服务端 192.168.1.20
客户端 192.168.1.21

1.2 服务器列表简介

1) 服务器提供 NFS 服务将自己的目录分享
2) 客户端挂载和使用 NFS 服务将服务端分享的目录挂载在自己的目录上

步骤二:系统环境要求

1) 所有服务器的系统都需要是 openSUSE 15.1 版本
2) 所有服务器都要关闭防火墙
3) 所有服务器系统都要配置好可用的软件源(最好是软件数量最多的官方版本)
4) 需要按照拓扑图给对应的服务器配置好 IP 地址和主机名
5) 所有服务器都要可以相互 ping 通自己和对方的 IP 地址和主机名

步骤三:所有服务器安装 NFS 服务

3.1 所有服务器安装 NFS 服务

(分别在服务端和客户端上执行以下步骤)

# zypper install nfs-kernel-server
# zypper install nfs-client

3.2 设置所有服务器开机自启 NFS 服务

(分别在服务端和客户端上执行以下步骤)

# systemctl enable rpcbind
# systemctl enable nfsserver

3.3 所有服务器启动 NFS 服务

(分别在服务端和客户端上执行以下步骤)

# systemctl start rpcbind
# systemctl start nfsserver

步骤四:配置 NFS 服务

4.1 创建用于 NFS 服务的目录

4.1.1 创建被 NFS 服务共享的目录

(只在服务端上执行以下步骤)

# mkdir /nfsserver
4.1.2 创建用于挂载 NFS 服务分享目录的目录

(只在客户端上执行以下步骤)

# mkdir /nfsclient

4.2 配置服务端的 NFS 服务配置文件

4.2.1 在服务端上添加可被 NFS 服务挂载的选项

(只在服务端上执行以下步骤)

# vi /etc/exports

添加以下内容:

......
/nfsserver 192.168.1.21(rw,no_root_squash,no_subtree_check)

(补充:这里的 192.168.1.21 是客户端的 IP 地址)

4.2.2 让刚刚修改的 NFS 服务配置文件生效

(只在服务端上执行以下步骤)

# exportfs -a

4.3 配置客户端的 NFS 服务挂载文件

4.3.1 在客户端上添加开机挂载 NFS 的选项

(只在客户端上执行以下步骤)

# vi /etc/fstab

添加以下内容:

......
192.168.1.20:/nfsserver /nfsclient nfs  timeo=120,rw,soft,nolock  0 0
4.3.2 让刚刚修改的 NFS 服务挂载文件生效

(只在客户端上执行以下步骤)

# mount -a

步骤五:确认 NFS 服务是否搭建成功

(只在客户端上执行以下步骤)

# df -h | grep 192.168.1.20

(补充:如果出现了类似 “192.168.1.20:/nfsserver 38G 5.5G 31G 16% /nfsclient”,则代表 NFS 搭建成功了)

[命令] Linux 命令 find (查找文件或目录)

内容一:find 格式

# find <directory> <parameter> <parameter> ...... -print <-exec|-ok> <command|file> {<command>} \;

内容二:find 选项

1) 目录 指需要查找的目录
2) 参数 限制匹配的条件,可以有多个
3) -print 将匹配的结果进行标准输出
4) -exec 让后面的命令执行查找到的内容
5) -ok 和 -exec 的作用相同,只不过每执行一步就需要用户确认一下
6) command 对匹配的结果执行命令
7) file 对匹配的结果进行文件种类分析,后面的 {} 里的命令必须为空
8) 命令 对匹配结果要执行的命令

(注意:<-exec|-ok> {} \;,这是一个固定格式,谁也不能被缺少。并且 {<命令>} 和 \ 之间有一个空格)

9) -xdev 不显示警告,只显示查找到的内容,这样显示起来简单美观

内容三:find 参数

3.1 匹配名称的参数

1) -name n 名称是 n 的文件或目录
2) -iname n 名称是 n 的文件或目录,并且忽略大小写
3) -lname n 名称是 n 的链接

(注意:在 3) 参数中,n 是被链接文件的名称而不是链接文件本身的名称)

3.2 匹配属性的参数

-type n :文件类型是 n 的文件

(补充:这里的 n 可以是 d、f、l,它们分别代表目录、文件、链接)

3.3 匹配所有者的参数

1) -uid n 所属 gid 是 n 的文件或目录
2) -user n 所属主名称为 n 的文件或目录
3) -gid n 所属 gid 是 n 的文件或目录
4) -group n 所属组名称为 n 的文件或目录
5) -nouser 匹配无所属主的文件或目录
6) -nogroup 匹配无所属组的文件或目录

3.4 匹配权限的参数

1) -perm /u=n 所属主权限是 n 的文件或目录
2) -perm /u=n 所属组权限是 n 的文件或目录
3) -perm /o=n 所其他的权限是 n 的文件或目录

(补充:在以上 1) 到 3) 参数中 n 可以是 r、w、x 它们分别代表读权限、写权限、执行权限)

4) -perm -n 所属主、所属组、其他的权限是 n 的文件或目录

(补充:在 (4 参数中 n 是可以是 1、2、4)

5) -perm nnn 权限是 nnn 的文件或目录


补充:
在 5) 参数中:
n 是数字
第一个 n 是特殊权限
第二个 n 是所属主的权限
第三个 n 是所属组的权限
第四个 n 是其他的权限
例:600

6) -perm nnnn 权限是 nnnn 的文件或目录


补充:
在 6) 参数中:
n 是数字
第一个 n 是特殊权限
第二个 n 是所属主的权限
第三个 n 是所属组的权限
第四个 n 是其他的权限
例:0600

3.5 匹配时间的参数

1) -amin n 在过去 n 分钟内被读取过的文件或目录
2) -anewer file 比文件 file 更晚被读取过的文件或目录
3) -atime n 在过去 n 天内被读取过的文件或目录
4) -mmin n 在过去 n 分钟内被修改过内容的文件或目录
5) -mnewer file 比文件 file 更晚被修改过内容的文件或目录
6) -mtime n 在过去 n 天内被修改过内容的文件或目录
7) -cmin n 在过去 n 分钟内被修改过属性(比如新建)的文件或目录
8) -cnewer file 比文件 file 更晚被修改过属性(比如新建)的文件或目录
9) -ctime n 在过去 n 天内被修改过属性(比如新建)的文件或目录

(补充:在以上 1) 到 9) 参数中 n 是数字, +n 表示 n 以前,-n 表示 n 以内,n 表示第 n)

3.6 匹配大小的参数

1) -empty 为空的文件或目录
2) -size n 文件大小是 n 的文件或目录

(补充:在 2) 参数中 n 是数字, +n 表示比 n 大,-n 表示比 n 小,单位有 b、m、g 等)

3.7 匹配目录的参数

1) -path ‘n’ 路径名称符合 n 的文件或目录
2) -ipath ‘n’ 路径名称符合 n 的文件或目录,并且忽略大小写
3) -depth n 路径深度为 n 的文件或目录
4) -maxdepth n 最大路劲深度为 n 的文件或目录

(补充:在以上 1) 到 4) 参数中 n 是数字)

3.8 匹配格式化方式的参数

1) -fstype n 匹配硬盘格式为 n 文件或目录

(补充:1) 参数中 n 可以是 ext3、ext4、xfs 等硬盘格式)

2) -mount 是被挂载的文件或目录

3.9 逻辑匹配参数

1) -not 不匹配后面的参数,需要放在其他参数前面
2) ! 不匹配后面的参数,需要放在其他参数前面
3) -a 和,需要放在两个参数之前
4) -and 和,需要放在两个参数之前
5) -o 或,需要放在两个参数之前
6) -or 或,需要放在两个参数之前
7) <parameter> ( <parameter> n <parameter> ) 指定将某两个参数作为一个整体和另一个逻辑参数进行匹配
8) <parameter> -prune -n <parameter> <parameter> 指定某两个参数进行逻辑匹配

(补充:在以上 7) 到 8) 参数中 n 可以是 -a、-and、-o、-or 以上 3) 到 6) 参数)

内容四:find 的使用案例

4.1 案例一:匹配名称的参数

4.1.1 在当前目录查找以 txt 结尾的文件和目录
# find . -name "*\.txt"
4.1.2 在当前目录查找以 txt 结尾,但名称不为 test1.txt 和 test2.txt 的文件和目录
# find . -name "*\.txt" -not -name "test1.txt" -not -name "test2.txt"
4.1.3 在 /var/log 目录查找所有名称不为 wtmp、btmp 和 lastlog 的文件,并去掉它们的其它权限的读、写和执行
# find /var/log -type f -not -name "wtmp" -not -name "btmp" -not -name "lastlog" -exec chmod o-rwx {} +

4.2 案例二:匹配属性的参数

4.2.1 在当前目录查找目录
# find . -type d
4.2.2 在 /tmp 目录查找 1 级目录,并把当前目录下的 .htaccess 文件拷贝到查找到的目录下,并重新命名为 .htaccess.orig
# find /tmp/ -maxdepth 1 -type d -exec cp -p -f ./.htaccess.orig '{}'/.htaccess \;

4.3 案例三:匹配所有者的参数

4.3.1 在当前目录查找所属主是 root 的文件和目录
# find . -user root
4.3.2 在当前目录查找没有所属主和所属组的文件和目录
# find . -nouser -o -nogroup
4.3.3 查找所有所属主是 natasha 的文件并将它们复制到 /root/findfiles 目录下
# find / -user natasha -exec cp -rp {} /root/findfiles/ \;

4.4 案例四:匹配权限的参数

4.4.1 在当前目录查找所有权限为 0777 的文件,并将其显示出来
# find . -type f -perm 0777 -exec ls -l {}\;
4.4.2 在当前目录查找权限为 222 的文件
# find . -type f -perm -2
4.4.3 在当前目录查找有任何执行权限的文件和目录
# find . -perm /a=x
4.4.4 查找所有包含特殊权限的文件和目录
# find / -type f \( -perm -1000 -o -perm -2000 -o -perm -4000 \) -print

4.5 案例五:匹配时间的参数

4.5.1 在当前目录查找 10 天内被修改过的文件
# find . -ctime -10
4.5.2 在 /var/log/mysql 目录查找在过去 3 天被修过的文件和目录,并在确认后将其删除
# find /var/log/mysql -type f -mtime +3 -ok rm {}\;

(注意:此方法会出现交互界面,需要在交互界面确认以后才会对找到的文件进行操作)

4.6 案例六:匹配大小的参数

4.6.1 在当前目录查找所有大小为 0 的文件,并将其显示出来
# find . -type f -size 0 -exec ls -l {} \;
4.6.2 在当前目录查找所有大小为 0 的文件
# find . -type f -empty

4.7 案例七:匹配目录的参数

在 / 目录和 /proc/ 目录查找文件格式为 ext3 无所属主或所属组的文件和目录

# find / -path '/proc/*' -prune -o -fstype ext3 -nouser -o -nogroup

4.8 案例八:匹配格式化方式的参数

在 \ 目录查找以

# find . -type f

4.9 案例九:逻辑匹配参数

4.9.1 在当前目录查找以 “.txt” 结尾和以 “.dox” 结尾的文件
# find . -type f \( -name "*.txt" -or -name "*.dox" \)
4.9.2 在当前目录查找权限不是 777 的文件
# find . -type f ! -perm 777
4.9.3 在当前目录查找权限为 2000 和 4000 的文件,并分析文件属性
# find . -type f \( -perm -2000 -o -perm -4000 \) -exec file {} \;
4.9.4 在根 “/” 目录查找没有所属主和所属组的文件和目录
# find / -nouser -o -nogroup

[内容] Linux RPM 软件包的解压 (判断安装一个 RPM 文件之后哪些目录和文件会被创建)

内容一:RPM 简介

1) RPM 的全名是 RPM Package Manager
1) RPM 是 CentOS、RHEL、openSUSE、SUSE 的软件安装包
2) RPM 是使用 cpio 格式压缩成的包

内容二:解压 RPM 文件的方法

#  rpm2cpio <文件名> | cpio -div

(补充:解压之后就可以看到如果安装这个 RPM 文件的话,有哪些目录和文件会被创建)

[实验] Nginx 源码软件包的安装

纪念:站主于 2019 年 9 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程

软件准备:

在 Nginx 官网上下载搭建集群所需软件 Nginx:

http://nginx.org/en/download.html

正文:

步骤一:系统环境要求

(1)服务器的系统需要是 CentOS Linux 7 版本
(2)服务器系统需要有 yum 源

步骤二:安装 Nginx 的依赖软件

# yum -y install gcc pcre-devel openssl-devel

步骤三:安装 Nginx

3.1 添加一个用于启动 Nginx 的用户身份

# useradd -s /sbin/nologin nginx

3.2 解压 Nginx 安装包

# tar -xvf nginx-1.16.1.tar.gz

(补充:这里要安装的 Nginx 版本是 1.16.1)

3.3 进入 Nginx 安装包目录

# cd nginx-1.16.1

(补充:这里要安装的 Nginx 版本是 1.16.1)

3.4 配置 Nginx

# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module

3.5 编译并安装 Nginx

# make && make install

步骤四:测试 Nginx

4.1 启动 Nginx

# /usr/local/nginx/sbin/nginx

4.2 访问 Nginx 实现的网页服务

# curl 127.0.0.1

4.3 显示已安装 Nginx 的版本

# /usr/local/nginx/sbin/nginx -V

[实验] Linux RPM 软件包的制作 (通过 rpm-build 实现) (Nginx 版)

注意:

文中的很多信息例如软件的名称等是站主在本次操作中随意取的名称,读者可以根据自己的喜好换成任意别的名称

软件准备:

在 Nginx 官网上下载搭建集群所需软件 Nginx:

http://nginx.org/en/download.html

正文:

步骤一:系统环境要求

1) 服务器的系统是 CentOS 7 版本
2) 服务器系统要配置好 YUM 源

步骤二:准备 rpm-build 软件

2.1 安装 rpm-build

# yum -y install rpm-build

2.2 生成 rpm-build 目录

# rpmbuild -ba nginx.spec
error: failed to stat /root/nginx.spec: No such file or directory

2.3 显示生成的 rpm-build 目录

# ls /root/rpmbuild/
BUILD  BUILDROOT  RPMS	SOURCES  SPECS	SRPMS

步骤三:制作 Nginx 软件的 RPM 包

3.1 将 Nginx 的源码安装包放在固定的位置

# cp nginx-1.16.1.tar.gz /root/rpmbuild/SOURCES/

(补充:这里要安装的 Nginx 版本是 1.16.1)

3.2 制作 Nginx 的 nginx.spec 文件

# vi /root/rpmbuild/SPECS/nginx.spec

将部分内容修改如下:

Name:nginx
Version:1.16.1
Release:1.0
Summary:Nginx is a web server software.
......
License:GPL
URL:www.nginx.org
Source0:%{name}-%{version}.tar
......
%description
nginx is an HTTP and reverse proxy server ......
......
%post
useradd nginx
......
%prep
%setup -q
......
%build
./configure --user=nginx --group=nginx --with-http_ssl_module
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
......
%files
......
%doc
/usr/local/nginx/*
......
%changelog


补充:
1) 这里的 Name:nginx 是指软件名称是 nginx
2) 这里的 Version:1.16.1 是指软件的版本是 1.16.1
3) 这里的 Release:1.0 是指发布的版本是 1。0
4) 这里的 Summary: Nginx is a web server software. 是指软件的描述是 Summary: Nginx is a web server software.
5) 这里的 License:GPL 是指软件使用的协议是 GPL
6) 这里的 URL:www.nginx.org 是指软件的官网是 www.nginx.org
7) 这里的 Source0:%{name}-%{version}.tar 是指软件源码文件的名称
8) 这里的 #BuildRequires: 是指软件编译安装时需要的依赖包,这里没有内容
9) 这里的 #Requires: 是指软件安装时所需要的依赖包,这里没有内容
10) 这里的 %description 是指软件的详细描述,这里没有内容
11) 这里的

%post
useradd nginx

是指软件安装后创建 nginx 用户

12) 这里的 %prep 是指软件安装前的准备,这里没有内容
13) 这里的 %setup –q 是指自动解压软件的源码包,并 cd 进入刚刚解压出来的目录
14) 这里的

%build
./configure
make %{?_smp_mflags}

是指对源码安装包进行配置
15) 这里的

%install
make install DESTDIR=%{buildroot}

是指对源码安装包进行编译安装
16) 这里的

%files
%doc
/usr/local/nginx/*

是指将源码安装包安装到 /usr/local/nginx/ 目录里

3.4 安装 Nginx 软件的依赖包

# yum -y install gcc pcre-devel openssl-devel

3.5 生成 Nginx rpm 软件包

# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec

3.6 显示新生成的 Nginx rpm 软件包

# rpm -qpi /root/rpmbuild/RPMS/x86_64/nginx-1.16.1-1.0.x86_64.rpm

步骤四:使用新生成的 Nginx rpm 软件包

4.1 安装刚刚新生成的 Nginx rpm 软件包

# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.16.1-1.0.x86_64.rpm

4.2 启动 Nginx 服务

# /usr/local/nginx/sbin/nginx

4.3 显示 Nginx 服务的启动状态

4.3.1 显示 Nginx 网页是否可以访问
# curl http://127.0.0.1/
4.3.2 显示 Nginx 的端口有没有启动
# ss -ntulap | grep 80