NFS服务器与CGI程序详解
目录
NFS 服务器
一,NFS 服务器简介
二,NFS的使用
三,客户端使用 autofs 自动挂载
1,autofs产生的原因
四,autofs的安装与配置文件
五,autofs的使用
www服务器---cgi程序
CGI程序的应用
NFS 服务器
一,NFS 服务器简介
NFS(Network File System,网络文件系统)是 FreeBSD 支持的文件系统中的一 种,它允许网络中的计算机(不同的计算机、不同的操作系统)之间通TCP/IP 网络共享资源,主要在 unix 系列操作系统上使用。在 NFS 的应用中,本地NFS 的 客户端应用可以透明地读写位于远端 NFS 服务器上的文件,就像访问本地文件一 样。
NFS 服务器可以让 PC 将网络中的 NFS 服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目录就好像是自己的一个磁盘分区一样。
由于NFS 支持的功能比较多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此 NFS 的功能所对应的端口并不固 定,而是随机取用一些未被使用的小于 1024 的端口用于传输。但如此一来就会产 生客户端连接服务器的问题,因为客户端需要知道服务器端的相关端口才能够连接。
此时就需要 RPC(Remote Procedure Call,远程过程调用)的服务。由于当服务器在启动 NFS 时会随机选取数个端口号,并主动向 RPC 注册,所以 RPC 知道每个NFS 功能所对应的端口号,RPC 将端口号通知给客户端,让客户端可以连接到正确的端口上去。RPC 采用固定端口号port 111 来监听客户端的需求并向客户端响应正确的端口号。
注:在启动 NFS 之前,要先启动 RPC,否则 NFS 会无法向 RPC 注册。另外,RPC 若重新启动,原来注册的数据会消失不见,因此 RPC 重启后,它管理的所有服务都需要重新启动以重新向 RPC 注册。

Exportfs命令:
exportfs: 即编辑了配置文件:/etc/exports ->不需要重启服务,只需要使用exportfs重新更新资源就可以
Showmount命令:
showmount: show mount information for an NFS server: 显示NFS服务器提供共享的目录
使用方式: showmount -e IP
配置文件:/etc/exports
配置的语法:共享目录的路径 主机(权限);共享哪个目录,允许哪些主机来访问(权限是什么)
二,NFS的使用
1,安装软件:
[root@kelong ~]# yum install nfs-utils.x86_64 -y 
[root@kelong ~]# yum install rpcbind.x86_64 -y 
2,查看主配置文件是否存在
[root@kelong ~]# ls -l /etc/exports 
3,在服务器端配置/etc/exports文件,将目录/nfsdata共享,且允许192.168.206.0/24网段的ip访问
[root@kelong ~]# vim /etc/exports 
/nfsdata 192.168.206.0/24(rw)

4,创建nfsdata目录
[root@kelong ~]# mkdir /nfsdata 
5,在/nfsdata目录下面创建文件test.txt
[root@kelong nfsdata]# vim test.txt 
this file is created on nfs-server

6,启动服务
[root@kelong nfsdata]# systemctl restart rpcbind[root@kelong nfsdata]# systemctl restart nfs-server 
7,在服务器上查看目录/nfsdata是否已经共享
[root@kelong nfsdata]# showmount -e 192.168.206.132 
8,在客户端上安装nfs-utils.x86_64 -y
[root@wangjingjing ~]# yum install nfs-utils.x86_64 -y 此时在客户端上查看目录/nfsdata是否已经共享

9,在客户端创建挂载的目录/mountdata
[root@wangjingjing ~]# mkdir /mountdata 
10,在客户端挂载之前的挂载信息
[root@wangjingjing ~]# mount 
11,把服务器的/nfsdata目录挂载到客户端/mountdata目录上
[root@wangjingjing ~]# mount 192.168.206.132:/nfsdata /mountdata 
12,再次查看客户端的挂载信息,发现服务器的/nfsdata目录已经成功挂载到/mountdata目录
[root@wangjingjing ~]# mount 
13,此时在客户端就可以看见服务器共享的目录/nfsdata以及目录下的文件
[root@wangjingjing ~]# cd /mountdata[root@wangjingjing mountdata]# ls -l 
14,权限需要写在括号内,且括号是紧接着主机名的。权限相关参数可以写多个,多
个参数之间用逗号隔开,具体相关参数说明如下:

在服务器上给目录/nfsdata权限777,客户端才可以编辑文件内容
[root@kelong nfsdata]# chmod 777 /nfsdata

(1)root_squash: 表示将root用户以及root用户组,映射成匿名用户(nobody)
默认配置为root_squash,在客户端以root用户和用户组创建文件test3.txt,
查看到的所属者所属组为nobody
[root@wangjingjing mountdata]# cp test2.txt test3.txt[root@wangjingjing mountdata]# ls -l 
(2)no_root_squash: 表示就显示root用户和root用户组
在服务器修改目录的权限为no_root_squash
[root@kelong nfsdata]# vim /etc/exports 
/nfsdata 192.168.206.0/24(rw,no_root_squash)

重新加载配置文件/etc/exports
[root@kelong nfsdata]# exportfs -r 
在客户端以root用户和用户组创建文件test4.txt,可以看到,
此时的用户者和用户组为root
[root@wangjingjing mountdata]# cp test2.txt test4.txt[root@wangjingjing mountdata]# ls -l 
(3)no_all_squash:就显示普通用户以及用户组(默认配置): 当系统上没有这个uid和gid对应的用户的时候,就直接显示uid和gid
在客户端用普通用户redhat创建文件test5.txt
[redhat@wangjingjing mountdata]$ cp test3.txt test5.txt[redhat@wangjingjing mountdata]$ ls -l 
(4)all_squash:将我们的普通用户以及用户组映射成匿名用户(nobody)
在客户端用普通用户redhat创建文件test.txt
在服务器的主配置文件/etc/exports中增加all_squash权限
/nfsdata 192.168.206.0/24(rw,no_root_squash,all_squash)

重启服务
[root@kelong nfsdata]# exportfs -r 
在客户端用普通用户redhat创建文件test6.txt,此时的所属者与所属组为nobody
[redhat@wangjingjing mountdata]$ cp test3.txt test6.txt[redhat@wangjingjing mountdata]$ ls -l 
(5)anonuid=anongid= 将文件的用户和组映射为指定的 UID 和 GID,若不
指定默认为 65534(nfsnobody)
指定匿名用户uid gid为2778 匿名用户为nfsuser3
[root@kelong ~]# useradd nfsuser3 -u 2778 
[root@wangjingjing mountdata]# useradd nfsuser3 -u 2778 
分别在用户端和客户端增加用户nfsuser3并制定uid gid,修改配置文件/etc/
/nfsdata 192.168.206.0/24(rw,no_root_squash,all_squash,anonuid=2778,anongid=2778)

重新加载配置文件
[root@kelong ~]# exportfs -r 
此时创建文件test8.txt发现所属者与所属组为刚创建的nfsuser3
[redhat@wangjingjing mountdata]$ ls -l 
三,客户端使用 autofs 自动挂载
1,autofs产生的原因
在一般 NFS 文件系统的使用过程中,如果客户端要使用服务端所提供的文件系统,可以在/etc/rc.d/rc.local 中设置开机时自动挂载(/etc/rc.d/rc.local 文件中写入的命令,在每次启动系统用户登录之前都会执行一次);也可以在登录系 统后手动利用 mount 来挂载。由于网络的问题,NFS 服务器与客户端的连接不会一直存在,当我们挂载了 NFS 服务器之后,任何一方脱机都可能造成另外一方等待超时。为了解决这样的问题,就出现了下面的想法:
1、当客户端在有使用 NFS 文件系统的需求时才让系统自动挂载。
2、当 NFS 文件系统使用完毕后,让 NFS 自动卸载。
于是就产生了 autofs 这个服务。
autofs 这个服务是在客户端的上面,它会持续的检测某个指定的目录,并预先设
置当使用到该目录的某个子目录时,将会取得来自服务器端的 NFS 文件系统资
源,并进行自动挂载的操作。
四,autofs的安装与配置文件
1,在客户端安装autofs软件
[root@wangjingjing ~]# yum install autofs -y 
2,查看有关auto的所有文件
[root@wangjingjing ~]# ls -l /etc | grep auto* -rw-r--r--. 1 root root 15718 Feb 8 23:41 autofs.conf
-rw-r--r--. 1 root root 1040 Feb 8 23:41 auto.master
-rw-r--r--. 1 root root 519 Feb 8 23:41 auto.misc
autofs.conf-> 针对服务autofs的配置
auto.master -> 是针对目录对应的挂载配置文件
auto.xxx -> 对应的是:具体挂载信息

3,打开/etc/autofs.conf配置文件,主要针对nfs服务的配置
[root@wangjingjing mountdata]# vim /etc/autofs.conf 
如果不使用挂载目录,300秒后自动断开挂载连接
dismount_interval = 300

4,打开/etc/auto.master配置文件,主要配置nfs挂载的配置
[root@wangjingjing mountdata]# vim /etc/auto.master[root@wangjingjing mountdata]# vim /etc/auto.master 样例配置:/misc这个目录自动挂载的信息autofs在 /etc/auto.misc中
配置语法: 目录 自动挂载配置文件的目录
/misc /etc/auto.misc

5,打开/etc/auto.mic配置文件,主要是挂载的信息
[root@wangjingjing mountdata]# vim /etc/auto.misc 
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
挂载的目录 挂载的选项 :要挂载的设备

五,autofs的使用
1,在客户端的auto.master中顶部加入一行:
注意:/nfsclient这个目录本身不存在,autofs会帮我们创建
/nfsclient /etc/auto.nfs

2,打开文件/etc/auto.nfs
[root@wangjingjing mountdata]# vim /etc/auto.nfs 
编辑内容:将192.168.206.132:/nfsdata目录挂载到nfsdir目录下
nfsdir 192.168.206.132:/nfsdata

3,把客户端之前挂载的目录解挂载
[root@wangjingjing ~]# umount /mountdata 
4,启动autofs服务
[root@wangjingjing ~]# systemctl restart autofs 
5,此时,/nfsclient目录已经存在
[root@wangjingjing ~]# ls -ld /nfsclient 
6,但是此目录为空
[root@wangjingjing ~]# ls -l /nfsclient 

7,触发自动挂载
进入到nfsdir目录中会发现自动挂载,/nfslient为父目录,nfsdir为子目录
[root@wangjingjing nfsclient]# cd nfsdir
[root@wangjingjing nfsdir]# mount 

8,退出nfsdir目录,五分钟后在查看挂载,挂载自动断开

www服务器---cgi程序


CGI程序的输入:
环境变量
环境变量中存储的叫做`Request Meta-Variables`,也就是诸如`QUERY_STRING`、`PATH_INFO`之类的,这些都是由Web服务器通过环境变量传递给CGI程序的,CGI程序也是从环境变量中读取的。
标准输出
存放的往往是用户通过`PUTS`或`POST`提交的数据,这些数据也是由Web服务器传递过来的。
CGI程序的输出:
CGI执行完成之后:标准输出
CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。
http response报文的格式:
状态行
响应头
空行
响应体
CGI程序的应用
响应给浏览器一个hello world: 如何去构建这个hello world
方法一:
1,先查看一下原有的配置中是否支持CGI程序
vim /etc/httpd/conf/httpd.conf 
从主配置文件可以看出,访问/cgi-bin 等于访问/var/www/cgi-bin
它会把/var/www/cgi-bin目录中的文件当做程序执行

2,切换到/var/www/cgi-bin/目录下,创建可执行脚本文件test.sh
[root@kelong ~]# cd /var/www/cgi-bin/[root@kelong cgi-bin]# touch test.sh 
3,打开脚本文件test.sh
[root@kelong cgi-bin]# vim test.sh 
编辑test.sh脚本文件内容
#!/bin/bash
#状态行 /响应行:不需要管,web服务器会帮我们自动生成
# Content-Type: text/html;charset=utf-8
#空行: printf "\n"
#响应体:hello world
printf "Content-Type: text/html;charset=utf-8\n"
printf "\n"
printf "hello world\n"

4,给脚本test.sh增加执行权限
[root@kelong cgi-bin]# chmod +x test.sh 5,看脚本是否能执行
[root@kelong cgi-bin]# bash test.sh 
6,此时访问192.168.206.132/cgi-bin/test.sh将会返回响应体的内容

方法二:
手动为目录增加执行的权限:options +ExecCGI , 然后设置目录下哪些文件为可执行的程序(设置后缀名)
1,给目录/www/ip/138增加可执行的权限,并设置以.cgi结尾的文件为可执行文件
<Directory "www/ip/138">
AllowOverride None
AddHandler cgi-script .cgi
Options +ExecCGI
Require all granted
</Directory>

2,重启配置文件:
[root@kelong cgi-bin]# systemctl restart httpd 3,在/www/ip/138目录下创建以.cgi结尾的可执行文件
[root@kelong 138]# vim test.cgi #!/bin/bash
#状态行 /响应行:不需要管,web服务器会帮我们自动生成
# Content-Type: text/html;charset=utf-8
#空行: printf "\n"
#响应体:hello world
printf "Content-Type: text/html;charset=utf-8\n"
printf "\n"
printf "welcome to page 138\n"

4,去给这个文件增加可执行的权限
[root@kelong 138]# chmod +x test.cgi 5,此时来访问test.cgi

相关文章:
NFS服务器与CGI程序详解
目录 NFS 服务器 一,NFS 服务器简介 二,NFS的使用 三,客户端使用 autofs 自动挂载 1,autofs产生的原因 四,autofs的安装与配置文件 五,autofs的使用 www服务器---cgi程序 CGI程序的应用 NFS 服务器 一&a…...
可视化项目管理,控制项目进度,项目经理需要做好以下工作
对于项目的管理者来说,项目信息透明,能够更容易让管理者发现项目中的问题,及时找到问题的原因和相关任务的责任人。 当项目信息能相对精准地呈现给管理者时,也能促进项目成员也能更加认真负责的完成任务,不会找借口推…...
海康工业相机使用教程
工业相机使用一、硬件连接1、准备材料2、相机供电(1)区分电源适配器正负极(2)连接相机电源线缆(3)连接完成后,相机蓝色灯常亮则成功3、软件连接(1)MVS客户端下载地址&…...
java开发手册之安全规约
安全规约隶属于用户个人的页面或者功能必须进行权限控制校验。 说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容、修改他人的订单。 用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 说明&#x…...
python模块引入问题和解决方案_真方案不骗人
1.pycharm运行python脚本的过程 使用pycharm等编辑器run/debug运行python脚本时,编辑器会通过本地python命令全路径执行脚本,例如 D:\DevelopTools\Python\python.exe D:/Codes/一长串路径/bbss_nature_python/demo/test_no_param_in.py 并且会在pyth…...
Read book Netty in action(Chapter X)--Unit Testing
序言 ChannelHandler 是Netty 应用程序的关键元素,所以彻底地测试它们应该是你的开发过程的一个标准部分。最佳实践要求你的测试不仅要能够证明你的实现是正确的,而且还要能够很容易地隔离那些因修改代码而突然出现的问题。这种类型的测试叫作单元测试。…...
Appium+Python连接真机、跳过登录页、Unexpected error while obtaining UI hierarchy问题
Appium连接真机 使用数据线连接电脑,然后选择文件传输方式 打开手机设置拉至底部,点击关于手机,连续点击7次版本号打开开发者模式 点击设置中的系统与更新,找到开发者选项----> 打开USB调试即可 在终端中输入adb devices确定…...
ES6模块化
目录 一、什么是 ES6 模块化规范 二、ES6 模块化的基本语法 2.1默认导出 2.1默认导入 2.1 注意事项 2.2按需导出 2.2按需导入 2.2按需导出与按需导入的注意事项 2.3直接导入并执行模块中的代码 一、什么是 ES6 模块化规范 ES6 模块化规范是浏览器端与服务器端通用的…...
201809-3 CCF 元素选择器 满分题解(超详细注释代码) + 解题思路(超详细)
问题描述 解题思路 根据题意可以知道在查询中可以分为两种情况 第一种是查询一个标签选择器或者id选择器(可以称为一级查询) 第二种就是存在大于两级的查询(可以称为多级查询) 显然第一种查询需要存储每一种元素在内容中所有出现…...
证书拓展域(1)
证书拓展定义了数字证书的标准拓展,每个拓展域GB/T 16264.8-200X中定义的一个OID相关。 这些OID都是id-ce的成员,其定义如下: id-ce OBJECT IDENTIFIER :: { joint-iso-ccitt(2) ds(5) 29 }1.证书策略 certificatePolicies 1.1 定义 本…...
浅谈ChatGPT 和 对AI 的思考
新世纪以来,人工智能作为一个非常热门话题,一直收到大众的广泛的关注。从一开始的图像的分类,检测,到人脸的识别,到视频分析分类,到事件的监测,到基于图片的文本生成,到AI自动写小说…...
NCRE计算机等级考试Python真题(十二)
第十二套试题1、以下关于程序设计语言的描述,错误的选项是:A.Python语言是一种脚本编程语言B.汇编语言是直接操作计算机硬件的编程语言C.程序设计语言经历了机器语言、汇编语言、脚本语言三个阶段D.编译和解释的区别是一次性翻译程序还是每次执行时都要翻…...
Java并发类库提供的线程池有哪几种? 分别有什么特点?
第21讲 | Java并发类库提供的线程池有哪几种? 分别有什么特点? 我在专栏第 17 讲中介绍过线程是不能够重复启动的,创建或销毁线程存在一定的开销,所以利用线程池技术来提高系统资源利用效率,并简化线程管理,…...
企业微信如何群发消息到客户群?
为提升工作效率,工作中,企业常常会借助企业微信的群发功能一键发送多个客户。那么企业微信如何群发消息呢? 其中成员个人支持群发消息到客户群,企业也可以创建内容提醒成员进行执行群发。 管理员支持在管理端或在手机端创建企业…...
【信号与系统笔记】第一章 绪论
1.1信号传输系统 信息传输的任务 将带有信息的信号,通过某种系统由发送者传送给接收者。 通信系统的组成 转换器:把消息转换为电信号或者把电信号还原成消息信道:信号传输的通道,广义上来说。发射机和接收机也可以是信道的一部分…...
[神经网络]DETR目标检测网络
一、概述 相较于传统目标检测,DETR是一种纯端到端的网络。它不再需要NMS(非极大值抑制,用于去除多余的预测框)和生成anchor。 DETR提出了一个新的目标函数(二分图匹配),这个函数可以强制网络输出一个独一无二的预测值&…...
【服务器管理】connection refused问题解决
简述 在配置服务器的时候,遇到了这个问题。我当时明明已经搭建好了服务,但是我在客户端比如手机上,却怎么都连不上服务器。看日志的话显示的是connection refuesed timeout 这种情况,大概率是服务器的端口没有被打开。 我们只需…...
2023_华为OD机试真题_Python_047_整理扑克牌
整理扑克牌 题目描述 给定一组数字,表示扑克牌的牌面数字,忽略扑克牌的花色,请按如下规则对这一组扑克牌进行整理: 步骤1. 对扑克牌进行分组,形成组合牌,规则如下: 当牌面数字相同张数大于等于4时,组合牌为“炸弹”;3张相同牌面数字 + 2张相同牌面数字,且3张牌与2…...
吐血整理,自动化测试pytest测试框架,资深测试带你少走弯路......
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 Pytest框架详解 py…...
SAP BASE64加密及解密
简介:BASE64是一种编码方法,它是一种基于用64个可打印字符来表示二进制数据的表示方法,主要应用于数据存储,传输,打印它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
