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个位元…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
