2024年4月21日发(作者:)

2019年第11期

信息与电脑

China Computer & Communication

软件开发与应用

打开目录浏览功能实现HFS简单文件共享的

一种替代方法

刘以争

(中国石油大学(华东),山东 东营 257061)

摘 要:

采用HFS(Http File Server)的简单文件共享,因使用B/S架构、部署简便获得了广泛应用,缺点是使用

HFS内置的自动索引功能时需手动编辑配置文件,开启默认为关闭状态的文件索引功能,造成了安全隐患。基于此,介

绍了一种开启HFS自动索引功能实现HFS简单文件共享的替代方法,无需修改HFS配置文件,利用Ruby程序在指定目录

及其所有下属子目录生成文件。页面中加入CSS式样,在火狐类浏览器中能明显区分链接是目录还是文件。

此外,讨论了当检测到指定目录内容发生变化时,重新生成文件的一种自动化方法。

关键词:

HFS共享;Ruby;自动生成索引文件

中图分类

号:TP319  文献标识码:A  文章编号:1003-9767(2019)11-075-02

An Alternative Method to Realize HFS Simple File Sharing by Opening

Directory Browsing Function

Liu Yizheng

Abstract:

The simple file sharing using HFS (Http File Server) has been widely used because of its B/S architecture and

(China Petroleum University (East China), Dongying Shandong 257061, China)

simple deployment. The disadvantage is that when using the built-in automatic indexing function of HFS, it is necessary to edit the

configuration file manually and turn on the file indexing function in the closed state by default, which results in potential security

hazards. Based on this, this paper introduces an alternative method to realize HFS simple file sharing by opening HFS automatic

subdirectories by Ruby program. Adding CSS style to the page can clearly distinguish whether the link is a directory or a file in Firefox

detected is discussed.

Key words:

HFS sharing; Ruby; auto-generate index files

合理设置安全性,会带来安全隐患。

indexing function. Without modifying HFS configuration file, the index. HTML file is generated in the specified directory and all its

browser. In addition, an automated method of rebuilding index. HTML files when changes in the contents of specified directories are

0 引言

采用HFS(Http File Server,http文件服务器)的简单

文件共享,因B/S架构和部署简单,在个人、工作组的文

件共享及小型企事业得到了广泛应用。本文的简单文件共

享指仅需开启http文件服务器默认为关闭状态的目录浏览

(autoindex)功能,就能通过任意一款浏览器,浏览指定

Web目录下的所有文件列表,并可通过点击下载链接文件。

但是,开启HFS,如Apache、Nginx的自动索引功能时,手

动编辑HFS的配置文件不可避免,若开启目录浏览功能后未

1 传统手工更改配置文件的方法

以Nginx服务为例,需手动更改Nginx配置文件,即在

配置文件的目录设置中添加autoindex on语句。

location / {

autoindex on;

}

手动更改Nginx配置文件,极易出现句法错误(Syntax

作者简介:

刘以争(1968—),男,河北保定人,本科,高级实验师。研究方向:计算机及网络应用。

— 75 —

软件开发与应用

信息与电脑

China Computer & Communication

2019年第11期

error),通常导致Nginx服务无法启动。对不熟悉Nginx配

置的操作者来说,排查错误十分困难。

单元格内容为目录名称及URL链接。本文采用Firefox浏览

器支持的moz-icon图标作为目录图标,从视觉上易区分目录

和文件。由234~235行对该目录下的子目录进行函数嵌套

调用,若元素为文件,则由237行直接写入文件名称和对应

URL链接。240~246行写入网页文件的尾部,

关闭该索引文件。248~252行分别给出了在Apache服务器、

Nginx服务器以及Mac OS系统下的调用方法。

2.2 监视目录及文件的变化,自动更新索引文件

生成的Ruby代码完成后,剩下的问题就是

检测到目录内容变化后,如何及时更新该目录下的index.

html文件。要解决这个问题,可通过操作系统自带的crontab

服务,定期检查指定目录的更新情况。

第一,检查目录及文件更新。在用户根目录建立名为

check_any_的shell script文件,内容如下:

cd /usr/share/nginx/html/test #转到web目录绝对路径,

根据实际更改;

result=`find * -maxdepth 6 –mmin -4` #此命令可查找当

前目录及子目录下在过去4分钟内是否有文件更改;

[[ ! –z ${result// } ]] && ~/ #测试result,

非空就运行Ruby代码,重新生成索引文件。

第二,设定系统定期巡检,检测目录内容的变化。通

过Linux类系统的任务调度crontab,每5 min运行一次bash

shell文本。方法是在Terminal中运行crontab–e,并加入下

一行,其中user需修改成系统当前登录的用户名。

*/5 * * * * /home/user/check_any_

2 一种不用修改HFS配置文件,实现文件目录索引

的方法

Nginx默认以Web目录下的作为首页面或自

动跳转页面

[1]

。本文提供了一种无需改动配置文件,而是通

过程序生成含有目录文件列表和下载链接的文件,

从而获取与目录自动索引相似的替代方法。

2.1 根据指定目录生成文件的Ruby代码

第一,Ruby的优势。Ruby编程语言是一种面向对象、

跨平台的脚本语言,以较少的代码量就可实现较复杂的功

能。其在Linux类操作系统环境下易安装部署,仅需简单赋

予可执行权限,即可在命令行执行,或被其他Script语言调

用。笔者已将Ruby程序上传到代码共享平台github.

com/guducai/indexmaker。该段代码的优点是:(1)无需修

改Apache或Nginx的配置文件;(2)样式美观,明显区分

目录和文件;(3)可以排除特定文件,如以“.”开始的系

统隐含文件和文件;(4)无需启用Web服务自

带的目录浏览功能,减少因目录暴露带来的安全风险。

第二,代码分析。Github上的代码页/

guducai/indexmaker/blob/master/自带行号,方

便本文引用分析。为节省篇幅,文中不再重复列出上述Ruby

代码。网站页面标注的行号中,1~19行的注释简单介绍了

软件运行的环境要求。20行定义了一个单参数自定义Ruby

函数listdir(dirname)。其中,dirname为Web目录的绝对

路径,计划对该路径及下级目录下的文件打开列表功能。21

行指定新建的索引文件名,默认,设成可写。22

行输出当前的工作路径,便于观察程序运行结果。23行改变

当前工作目录。24行遍历当前路径下的文件列表。

25~215行写入文件头,采用内嵌的CSS

样式表和JavaScript。227行遍历得到目录下的文件名数组,

转换成小写文件名并升序排序。228行对该数组下的每一个

元素进行如下操作:230行跳过待排除文件,指以“.”开头

的隐含文件和;232行补足文件绝对路径。233行

判断当前元素是否为目录,若是则由234行生成表格单元,

3 结 语

文中介绍的方法,无需改动http文件服务器的配置文

件,具有自动监测指定目录文件的变化并自动更新目录索引

文件的特点。此方式已分别在默认安装Nginx和Apache的

Ubuntu Server 14.05、16.04、18.04上测试运行,在校园网部

署使用了一年,经过了验证。

参考文献

[1]何文斯.Ruby基础教程第四版[M].北京:人民邮电

出版社,2014:76.

— 76 —