NFS服务器与CGI程序详解

news2025/7/22 18:27:39

目录

 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

3no_all_squash就显示普通用户以及用户组(默认配置): 当系统上没有这个uidgid对应的用户的时候,就直接显示uidgid

在客户端用普通用户redhat创建文件test5.txt

[redhat@wangjingjing mountdata]$ cp test3.txt test5.txt

[redhat@wangjingjing mountdata]$ ls -l

4all_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React(六):Redux的使用、react-redux简化代码、redux模块化、RTK的使用

React&#xff08;六&#xff09;一、Redux测试项目搭建1.创建store仓库2.创建reducer函数&#xff08;纯函数&#xff09;3.constants.js保存action名字4.修改store中的数据5.动态生成action二、React中如何使用redux1.安装redux2.创建store3.组件中订阅store4.派发action修改…

运行Hive

Hive的定义&#xff1a;基于Hadoop的数据仓库解决方案将结构化的数据文件映射为数据库表提供类sql的查询语言HQL (Hive Query Language)Hive让更多的人使用hadoopHive的运行机制Hive 通过给用户提供的一系列交互接口&#xff0c;接收到用户的指令(SQL)&#xff0c;使用自己的 D…

LinkedIn最好的辅助工具

领英精灵都有什么功能领英精灵是我国技术人员花巨资针对领英平台研发的辅助工具。具有好友分组、备注&#xff0c;一键批量加好友&#xff0c;批量撤回邀请&#xff0c;批量群发消息&#xff0c;批量导出好友资料&#xff0c;批量点赞六大功能。通过领英精灵可大大提高领英开发…

自建服务器系列- DDNS配置

1、环境说明 光猫桥接路由器拔号的模式 2、DDNS是什么 对于DHCP方式获得的IP&#xff0c;无论对于局域网内来说&#xff0c;还是外网来说&#xff0c;都会有使得IP地址每隔一段时间变化一次&#xff0c;如果想要通过恒定不变的地址访问主机&#xff0c;就需要动态域名解析。…

凝聚共识,锚定未来 | 第四届OpenI/O 启智开发者大会NLP大模型论坛成功举办!

2023年2月24日下午&#xff0c;第四届OpenI/O启智开发者大会NLP大模型分论坛在深圳人才研修院隆重举办。该论坛以“开源集智创新探索中文NLP大模型生态发展”为主题&#xff0c;众多业内人士和研发者在此共享NLP领域的前沿动态和研发经验&#xff0c;畅想中国NLP领域的发展前景…

RocketMQ 5.0 学习笔记

1. 需求 背景&#xff1a;业务需要&#xff0c;平台将使用rocketMQ来实现消息的发送与消费&#xff0c;替代redis的消息功能。 需要在搭建好rocketMQ平台后&#xff0c;进行研究和验证。 技术&#xff1a;Springboot RocketMQ5.0 使用场景&#xff1a;签到活动&#xff0c…

DBCO intermidate 3,二苯并环辛炔-四乙酰甘露糖胺一种生化小分子糖标记

DBCO-四乙酰甘露糖胺 &#xff0c;二苯并环辛炔-四乙酰甘露糖胺 | 纯度&#xff1a;95% | DBCO intermidate 31.试剂信息&#xff1a;CAS&#xff1a;N/A外观&#xff1a;固体/粉末分子量&#xff1a;C33H34N2O11分子式&#xff1a;634.64溶解性&#xff1a;溶于有机溶剂&#…

Unity项目优化方案2023

每年整个新活&#xff0c;每年出个手游项目。又到了项目收尾的季节&#xff0c;也是最掉头发的时候。这两周开启漫漫的优化之路。老方法&#xff0c;先按住Ctrl7&#xff0c;打开profiler性能分析工具&#xff0c;找到性能占用的大头。不用看也能猜到&#xff0c;Batches是优化…

JavaEE简单示例——MyBatis的二级缓存机制

简单介绍&#xff1a; 在之前&#xff0c;我们介绍了关于MyBatis的一级缓存机制&#xff0c;之前我们说过&#xff0c;一级缓存是基于SqlSession的对同一条SQL语句多次查询的时候&#xff0c;会将第一次查询的结果缓存到内存中&#xff0c;之后的所有的相同的查询会直接从内存…

修改redis改key值不改过期时间

今天在做图片验证码的时候遇到一个问题。用redis的生命周期来存放&#xff0c;用户输入错误次数。 三十秒内输错三次就&#xff0c;等待三十分钟。 那么问题来了&#xff0c;如果说第一次输入错误&#xff0c;应该是 key为用户用&#xff0c;value 为 次数2 ex就为30秒 &…

[数据结构]:13-插入排序(顺序表指针实现形式)(C语言实现)

目录 前言 已完成内容 插入排序实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-PSeqListFunction.cpp 04-SortCommon.cpp 05-SortFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容&#xff0c;除其中使用到C引用外&#xff0c;全为C语言代…

M2E2: Cross-media Structured Common Space for Multimedia Event Extraction 论文解读

Cross-media Structured Common Space for Multimedia Event Extraction 论文&#xff1a;multimediaspace2020.pdf (illinois.edu) 代码&#xff1a;limanling/m2e2: Cross-media Structured Common Space for Multimedia Event Extraction (ACL2020) (github.com) 期刊/会议…

【3D点云】目标检测总结(持续汇总)

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

Java Spring 中 Resources 路径若干问题

ant-style资源路径通配符 ANT通配符有三种&#xff1a; 最长匹配规则&#xff08;has more characters&#xff09;&#xff0c;即越精确的模式越会被优先匹配到。例如&#xff0c;URL请求/app/dir/file.jsp&#xff0c;现在存在两个路径匹配模式/**/*.jsp 和 /app/dir/*.js…

C++回顾(九)——多继承

9.1 多继承 9.1.1 概念 一个类有多个直接基类的继承关系称为多继承&#xff08;多个父类&#xff09;多继承声明语法 class 派生类名 : 访问控制 基类名1 , 访问控制 基类名2 , … , 访问控制 基类名n {数据成员和成员函数声明 }&#xff1b;类 C 可以根据访问控制同时…

Git在某个节点切出新分支

操作前&#xff0c;必须先备份分支&#xff0c;避免丢失代码&#xff01;&#xff01;&#xff01;&#xff01; 操作前&#xff0c;必须先备份分支&#xff0c;避免丢失代码&#xff01;&#xff01;&#xff01;&#xff01; 操作前&#xff0c;必须先备份分支&#xff0c;避…

Mr. Cappuccino的第46杯咖啡——Maven多模块项目可插拔式打包部署方案

Maven多模块项目可插拔式打包部署方案需求调研前准备项目结构模块之间的依赖关系项目pom文件项目代码代码运行效果方案调研需要实现的效果解决方案代码实现打包运行效果完整打包测试插拔式打包测试最佳实践项目结构测试运行效果完整打包测试插拔式打包测试需求 早期的【train-h…

吐血整理,自动化测试pytest测试框架,资深测试带你少走弯路......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 Pytest框架详解 py…

ledcode----丢失的数字

目录 题目截图&#xff1a; 题目接口&#xff1a; 第一种解法&#xff1a; 思路&#xff1a; 第二种解法&#xff1a;差值法 思路&#xff1a; 第三种解法&#xff1a;位运算异或法 关于异或操作符的预备知识&#xff1a; 思路&#xff1a; 例子&#xff1a;输入数组[0…

海思3531a pjsip交叉编译

学习文档&#xff1a; PJSUA2 Documentation — PJSUA2 Documentation 1.0-alpha documentationhttps://www.pjsip.org/docs/book-latest/html/index.html ./configure --prefix/opensource/pjproject-2.12/build3531a \ --host/opt/hisi-linux/x86-arm/arm-hisi…