猫盘onespace x3p系统使用

2023-12-27 13:58

本文主要是介绍猫盘onespace x3p系统使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

猫盘用了大概快一年了,主要的使用的功能以及最长用的功能就是samba服务,当做家庭的影音存储中心,其他的nas相关下载,同步等等功能用的极少。

故最终的需求就是,将猫盘做成一个纯净版的samba服务器,其他不常用的功能全部关闭掉。同时要能够使硬盘进行休眠,一个是减少不必要的噪音,机械硬盘的声音还是挺大的;二个是减少硬盘的消耗,没有数据读取的时候硬盘进入休眠状态。

使用猫盘原版系统发现是系统是无法休眠的,强制将硬盘进入休眠状态后,一段时间硬盘又会自己启动,推测应该是在跟猫盘的服务器同步信息,造成硬盘无法休眠。各种百度之后,都没找到好的解决方案。剩下就一条路,刷机。刷成x3p系统,刷机过程在此不表。

最终效果展示

在这里插入图片描述
在这里插入图片描述
默认只开启samba服务。
为了偶尔非局域网操作,故添加了易有云服务组件,默认也是设置为关闭状态。

设置硬盘休眠

1、使用ssh登录到猫盘,采用root权限登录,默认为root,密码:Etech12。登录之后如果发现修改某些文件没有权限。可在要操作的目录下执行如下命令。该问题也是百度了好久才找到的解决办法。因为后面要调整哪些应用要默认开机启动,故需要修改系统的文件。

mount -o remount,rw /

2、通过浏览器登录到猫盘,在系统管理里将设置硬盘休眠时间。为了测试硬盘休眠效果,可以先将其设置为10分钟。

在这里插入图片描述
3、硬盘休眠相关操作命令
hdparm软件可以实现硬盘状态设置,状态查询
查看是否安装了hdparm,x3p系统是默认安装了

[root@onespace ~]# hdparm -V
hdparm v9.50

查看硬盘当前状态,如果是standby,则硬盘处于休眠状态

[root@onespace ~]# hdparm -C /dev/sda1/dev/sda1:drive state is:  active/idle

让硬盘立刻进入休眠状态命令,此时如果查询硬盘状态,返回的应该是standby。休眠的时候硬盘只是停转,并不会断电,不会造成硬盘磁头频繁抬起放下,损伤硬盘。

[root@onespace ~]# hdparm -Y /dev/sda1/dev/sda1:issuing sleep command

设置硬盘无操作进入休眠的时间

[root@onespace ~]# hdparm -S 60 /dev/sda1/dev/sda1:setting standby to 60 (5 minutes)

这个数值设置为0则关闭这个功能,设置为1至240时,时间将为5秒的倍数,即5秒至20分钟,设置为241至251时,时间将为30分钟的1-11倍,即30分钟到5.5小时,设置为252象征着21分钟,253为?(不懂),255即为21分15秒。

如果不想用x3p自带的设置工具,只需要写一个bash启动脚本,放到/etc/init.d/文件家中,文件名要以大写S开头,然后chmod +x 可执行权限,每次开机运行一次即可。

4、测试休眠
注意事项:关闭掉所有上传下载的任务,关闭掉ssh登录,断开电脑映射的samba文件夹。一定要关闭所有与猫盘有通信的任务。

10分钟后,可以听到硬盘噪音没了,手接触硬盘也没有了微小的震动感,则硬盘休眠成功。

添加易有云服务

1、app启动流程说明

经过分析系统文件夹,发现,系统所有的启动脚本都是放在/etc/init.d/目录下面
在这里插入图片描述系统首先会执行rcS文件,rcS文件会索引当前目录下以大写S开头的文件,然后一个一个执行。
以S88Shell为例

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbincase "$1" instart)pidof shellinaboxdif [ $? -eq 0 ] ; thenecho "Start Shell Abort, already running"exitfiif [ -f /sata/.storage/appblock/shellinabox ] ; thenecho "Start ShellinAbox Abort, User Disabled"exitfishellinaboxd -b -t -s /:SSH:127.0.0.1echo "done.";;stop)killall shellinaboxdi=0while [ 1 ] ; dopidof shellinaboxdif [ $? -ne 0 -o $i -gt 10 ] ; thenbreakfiecho "sleep 1, wait"sleep 1((i++))doneecho "done.";;restart)$0 stop$0 start;;*)echo "Usage: /etc/init.d/S88shell {start|stop|restart}";;
esac

脚本里面定义了3个函数,sart,stop,restart。rcS脚本里面就是通过执行各个脚本的start函数来启动程序。

在start文件中会判断/sata/.storage/appblock/shellinabox 是否存在,如果存在,则脚本退出,不启动程序,如果不存在就启动。

说明启动脚本会根据shellinabox文件来启动shell程序。

通过分析文件夹名称也可以知道个大概,所有不需要开启自启的程序都会在appblock文件夹下面生成一个对应文件。那么问题来了,是什么程序来负责生成这些文件呢。

2、设置开机禁止运行服务

通过继续分析系统文件,发现了S23init脚本,init说明是在进行一些系统初始化操作。打开该文件

#!/bin/shif [ X$1 = "Xstop" ]; thenkillall hd_fan.shexit
fi#mount -o remount,rw //opt/bin/hd_fan.sh &mountpoint -q /sata
if [ $? -ne 0 ] ; thentouch /tmp/nosata.flagexit 0
fiecho "------- remunt to rw for S23 --------"
mount -o remount,rw /mkdir -p /sata/.storage
mkdir -p /sata/.storage/etc
if [ ! -d /sata/.storage/appblock ] ; thenmkdir -p /sata/.storage/appblocktouch /sata/.storage/appblock/aria2touch /sata/.storage/appblock/thundertouch /sata/.storage/appblock/transmissiontouch /sata/.storage/appblock/nfstouch /sata/.storage/appblock/rsynctouch /sata/.storage/appblock/minidlnatouch /sata/.storage/appblock/proftptouch /sata/.storage/appblock/phptouch /sata/.storage/appblock/shellinaboxtouch /sata/.storage/appblock/cupstouch /sata/.storage/appblock/linkeasetouch /sata/.storage/appblock/afpd
fimkdir -p /sata/home
chmod 755 /sata/homemkdir -p /sata/public
chmod 777 /sata/publicmkdir -p /sata/public/.recycle
chmod 777 /sata/public/.recycle
chown admin /sata/public/.recyclemkdir -p /sata/public/WWW
chmod 777 /sata/public/WWW
chown admin /sata/public/WWWmkdir -p /sata/.storage/mysql
chmod 777 /sata/.storage/mysqlmkdir -p /sata/.storage/tmp
chmod 777 /sata/.storage/tmp
rm -rf /sata/.storage/tmp/*mkdir -p /sata/public/USBDISK
chmod 755 /sata/public/USBDISK
chown admin /sata/public/USBDISK
rm -rf /sata/public/USBDISK/*if [ ! -e /sata/.storage/etc/passwd ] ; thencp -f /etc/passwd               /sata/.storage/etc/cp -f /etc/group                /sata/.storage/etc/cp -f /etc/shadow               /sata/.storage/etc/cp -f /etc/samba/smbpasswd      /sata/.storage/etc/cp -f /opt/rsync/rsyncd.secrets /sata/.storage/etc/
ficheck_file()
{file=$1grep -q admin ${file}if [ $? -ne 0 ]; then grep -q default ${file}if [ $? -ne 0 ]; thenecho 1  # not passelseecho 0  # passfielseecho 0  # passfi
}if [ -e /sata/one2017.flag ] ; thenresult=`check_file '/sata/.storage/etc/passwd'`diff -q /etc/passwd /sata/.storage/etc/passwdif [[ $? -ne 0 && $result -ne 1 ]] ; thencp -f /sata/.storage/etc/passwd /etc/passwdchmod 644 /etc/passwdfiresult=`check_file '/sata/.storage/etc/group'`diff -q /etc/group /sata/.storage/etc/groupif [[ $? -ne 0 && $result -ne 1 ]] ; thencp -f /sata/.storage/etc/group /etc/groupchmod 644 /etc/groupfiresult=`check_file '/sata/.storage/etc/shadow'`diff -q /sata/.storage/etc/shadow /etc/shadowif [[ $? -ne 0 && $result -ne 1 ]] ; thencp -f /sata/.storage/etc/shadow /etc/shadowchmod 600 /etc/shadowfi
else

确实是会创建appblock文件夹及下面的文件。所以不需要不需要启动只需要在里面添加要创建的文件。

if [ ! -d /sata/.storage/appblock ] ; thenmkdir -p /sata/.storage/appblocktouch /sata/.storage/appblock/aria2touch /sata/.storage/appblock/thundertouch /sata/.storage/appblock/transmissiontouch /sata/.storage/appblock/nfstouch /sata/.storage/appblock/rsynctouch /sata/.storage/appblock/minidlnatouch /sata/.storage/appblock/proftptouch /sata/.storage/appblock/phptouch /sata/.storage/appblock/shellinaboxtouch /sata/.storage/appblock/cupstouch /sata/.storage/appblock/linkeasetouch /sata/.storage/appblock/afpd
fi

笔者已经将其他不需要启动的文件都添加进来了,修改重启系统后,发现没有生效。原因是,脚本会先判断appblock文件夹是否存在,如果文件夹不存在,则创建;如果存在就不会往文件夹里面写文件。

故添加不需要启动的服务后,要将硬盘中的appblock文件夹删除掉。

删除后,重启系统,正常了,在应用管理里面可以看到只有samba服务在运行。
在这里插入图片描述

3、添加易有云服务

3.1下载安装
下载易友云https://www.ddnsto.com/linkease/download/#/disk。下载对应的版本,由于没有对应的onespace版本,故下载linux通用版,linkease.arm文件。

为了方便查找,笔者将其放置到home目录下
在这里插入图片描述
记得chomod +x 添加可执行权限。./linkease.arm

[root@onespace home]# ./linkease.arm 
15:37:34 WARNING: device binding
15:37:34 WARNING: save preconfig failed, err= open /home/preconfig.data: read-only file system
15:37:34 WARNING: branch= other log= /tmp/logs178097771/LinkEase.log serial= ST-other-6DBC0973 rootDir= /sata/share
15:37:34 WARNING: Device 6DBC0973 Port 8897 Version 0.3.60 BuildVersion 660eb113f93f3bacf0a96fe9a88b7c5983a7a888 BuildDate .20210520.022302

访问ip:8897进行访问易有云,具体绑定操作见易有云官网。

3.2创建启动脚本

在/etc/init.d/文件夹中,创建S96linkease文件,名称要以大写S开头。
参照shell脚本写入如下内容,通过判断appblock/linkease文件来启动服务。脚本要加可执行权限。

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbincase "$1" instart)pidof linkease.armif [ $? -eq 0 ] ; thenecho "Start linkease Abort, already running"exitfiif [ -f /sata/.storage/appblock/linkease ] ; thenecho "Start linkease Abort, User Disabled"exitfi/home/linkease.arm & echo "done.";;stop)killall linkease.armecho "done.";;restart)$0 stop$0 start;;*)echo "Usage: /etc/init.d/S93linkease {start|stop|restart}";;
esac

3.3添加易有云到应用管理。
再次分析系统文件,发现在/opt/www有一个www的文件夹。在www文件夹下面有一个app文件夹。发现其中有如下文件,看到了熟悉samba shell 文件夹
在这里插入图片描述

打开shell文件夹发现里面有如下四个文件
在这里插入图片描述
将该目录下载到本地,发现app.png 就是应用管理里面的shell图标

在这里插入图片描述
依次开打开下其他文件

conf.js

{"pack": "shell","ver": "2.19","verno": 21900,"name": "SHELL","logo": "app.png","url": "/shell/","canstat": true,"canoff": true,"candel": false
}

可以看到里面配置的版本号就是应用管理里面的shell的版本号。

off.sh

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/bin/etc/init.d/S88shell stopif [ $# -eq 0 ] ; thentouch /sata/.storage/appblock/shellinabox
fi

on.sh

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binrm -f /sata/.storage/appblock/shellinabox
/etc/init.d/S88shell start

stat.sh

#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binpidof shellinaboxd > /dev/nullif [ $? -ne 0 ] ; thenecho -n "off"
elseecho -n "on"
fi

通过分析这个内容,发下这三个脚本就是,启动shell 关闭shell 查询shell运行状态的脚本。再结合app文件夹下的文件目录,与应用管理里面的任务是对应的。

由此可以说明,只需要按照app里面文件夹的格式,新建一个文件夹,该内容将会呈现在应用管理里面。笔者已经通过测试,发现确实如此。

接下来就好说了,只要将shell文件夹下面的文件的内容替换为linkease的,就可以实现在应用管理里面显示。
在app目录下面新建一个linkease文件,放入linkease logopng文件,再在对应的文件写入如下内容。


#conf.js
{"pack": "linkease","ver": "0.3.6","verno": 36000,"name": "linkease","logo": "app.png","url": "","canstat": true,"canoff": true,"candel": false
}#on.sh
#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binrm -rf /sata/.storage/appblock/linkease
/etc/init.d/S96linkease start#off.sh
#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/bin/etc/init.d/S96linkease stopif [ $# -eq 0 ] ; thentouch /sata/.storage/appblock/linkeasefi#stat.sh
#!/bin/shexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/binpidof linkease.arm > /dev/nullif [ $? -ne 0 ] ; thenecho -n "off"
elseecho -n "on"
fi

完成后,所有文件要加权限,chmod 755 。完成后,重启系统,即可在应用管理里面发现了linkease服务

在这里插入图片描述
至此,添加linkease服务完成,后续要添加其他的功能也可依据此方法操作。

备注:
1、推荐用FinalShell程序进行ssh操作,非常方便进行文件上传下载
在这里插入图片描述


2021-7-29硬盘休眠设置更新
经过测试发现如下命令是不起作用的,硬盘到了设定的时间后完全没反应,不会进入standby状态。经过多次测试均是如此

hdparm -S 60 /dev/sda1

硬盘休眠之路只能另求他法。于是开始寻找系统自带的休眠脚本,经过一番努力,发现休眠脚本位于

/opt/standby/

目录下,里面有start stop spindown等三个脚本
在这里插入图片描述
其中最主要的是spindown脚本,发现该脚本存在问题。那就是。
当设置的硬盘休眠时间到了,脚本会不管当前硬盘是否在读写,都会强制将硬盘设置为休眠状态。原因是,脚本用于判断判断硬盘状态的命令是错的。

其采用了 如下命令,该命令返回的只有两种状态
1、standby
2、active/idle

[root@onespace standby]# hdparm -C /dev/sda1/dev/sda1:drive state is:  standby无法判断硬盘当前是否在读写。原版的spindown脚本如下```bash
#Logging enable set to true  (/var/log/diskstate.log)
echo 1 > /proc/sys/vm/block_dump
# Where is your Ramdrive? 
# Check it out with  df -h or mount command.
# Possible Values Examples: /dev/shm , /run/shm 
mkdir -p /tmp/shm
ramdrive=/tmp/shm# Cyle time between checks, normally between 60 up to 300 Seconds. Protect the CPU/BUS Load.
time_cyle=60
time_spindown=$1# The Spindwon Time in Seconds for the harddisk drives, less then the time_cyle will only act on time_cyle.
# 300=5min, 600=10min, 900=15min, 1200=20min etc ..
time_disk_a=$time_spindown
time_disk_b=$time_spindown
time_disk_c=$time_spindown
time_disk_d=$time_spindown
time_disk_e=$time_spindown
time_disk_f=$time_spindown
time_disk_g=$time_spindown
time_disk_h=$time_spindown
time_disk_i=$time_spindown
time_disk_j=$time_spindown
time_disk_k=$time_spindown# Wich harddisk drives are handled to spindown
# No changes required, but if you need/like you can change.
#diskvolumes_spindown="a b c d e f g h i j k"
diskvolumes_spindown="a b c d e f g h i j k"# Wich harddisk drives are handled to send the apm = 255 command. (Disble AutoPowerManager in Firmware of the given Drives) 
# No changes required, but if you need/like you can change.
#diskvolumes_apm_off="a b c d e f g h i j k"
diskvolumes_apm_off="a b c d e f g h i j k"# Drives exist?
for disk in $diskvolumes_spindown; do hdparm -B /dev/sd$disk >/dev/null 2>&1; test $? = 0 && drives_spindown=$(printf "$drives_spindown"; printf $disk" "); done#apm off
for disk in $diskvolumes_apm_off; do hdparm -B /dev/sd$disk >/dev/null 2>&1; test $? = 0 && hdparm -B 255 /dev/sd$disk; done # Set ones on start time variable time_noise_$(disk), like noise from harddrive
for disk in $diskvolumes_spindown; do eval time_noise_${disk}=$(date +"%s"); donefor disk in $diskvolumes_spindown; do eval spindown_flag_${disk}=false; done# Build onece the tempfiles 
if [ ! -f $ramdrive/diskstate1 ]; then touch $ramdrive/diskstate1;fi 
if [ ! -f $ramdrive/diskstate2 ]; then touch $ramdrive/diskstate2;fi# Here we go... 
while [ true ] ; do# cycle it to test for activity mv $ramdrive/diskstate1 $ramdrive/diskstate2 cat /proc/diskstats > $ramdrive/diskstate1# Loop through all array disks and spin down idle disks. for disk in $drives_spindown; dodiskstat1=`grep sd$disk $ramdrive/diskstate1`diskstat2=`grep sd$disk $ramdrive/diskstate2`#if [ "$(diff $ramdrive/diskstate1 $ramdrive/diskstate2 | grep sd$disk )" = "" ]; thenif [ X"$diskstat1" = X"$diskstat2" ]; thentime_silent=$(date +"%s")time_noise=$(eval echo \${time_noise_${disk}})time_disk=$(eval echo \${time_disk_${disk}})time_idle=$(($time_silent - $time_noise))if [ $time_idle -ge $time_disk ]; then STATUS0=`hdparm -C /dev/sd$disk | sed -n '3p' | awk '{print $4}'`if [ X"$STATUS0" != "Xstandby" ];thenspindown_flag=$(eval echo \${spindown_flag_${disk}})if [ $spindown_flag = true ];thenecho `date` "/dev/sd$disk was activated" >> /tmp/nginx/error.log/opt/bin/udp_send 127.0.0.1 81 '{"level":"info", "type":"system", "user":"system", "action":"wakeup", "content":{} }'eval spindown_flag_${disk}=falseeval time_noise_${disk}=$(date +"%s")elseecho `date` "set /dev/sd$disk standby" >> /tmp/nginx/error.log
#                        /opt/bin/udp_send 127.0.0.1 81 '{"level":"info", "type":"system", "user":"system", "action":"sleep", "content":{} }'
#                        sleep 2synchdparm -Y /dev/sd$disk >/dev/null 2>&1;eval spindown_flag_${disk}=true	fififielseeval time_noise_${disk}=$(date +"%s")spindown_flag=$(eval echo \${spindown_flag_${disk}})if [ $spindown_flag = true ];thenecho `date` "/dev/sd$disk was activated 1" >> /tmp/nginx/error.log/opt/bin/udp_send 127.0.0.1 81 '{"level":"info", "type":"system", "user":"system", "action":"wakeup", "content":{} }'eval spindown_flag_${disk}=falsefifidone # Cycle Waitsleep $time_cyle
done

而且该脚本写的太复杂了,而且逻辑不清楚,于是修改如下:

#!/bin/shrm -rf /tmp/spindown.log
oldstate=''
n=`expr $1 '*' 6`
n1=$n
echo "n is " $n
while :; do
#!/bin/sh #!/bin/sh rm -rf /tmp/spindown.log
oldstate=''
n=`expr $1 '*' 6`
n1=$n
echo "n is " $n
while :; donewstate=$(grep "sda1" /proc/diskstats) echo date $newstate >> /tmp/spindown.logif [ "$newstate" = "$oldstate" ]; thenn1=$(($n1 - 1))
#       [ "$n" != 0 ] || hdparm -y /dev/"$1"if [ "$n1" == 0 ]; thenhdparm -Y /dev/sda1echo "set hd standby ! sleep param is " $1 "minutes; n:" $n1 >> /tmp/spindown.logfielsen1="$n"oldstate=$newstatefistate=`hdparm -C /dev/sda1 | sed -n '3p' | awk '{print $4}'`if [ "$state" != "standby" ]; thenecho `date` "hd is actived ! sleep param is " $1 "minutes; n:" $n1 >> /tmp/spindown.logelsen1="$n"echo `date` "hd is sleep ! sleep param is " $1 "minutes; n:" $n1 >> /tmp/spindown.logfilogsize=`ls -l /tmp/spindown.log | awk '{print $5}'`if [ $logsize -ge 100000 ]; thenrm -rf /tmp/spindown.logfisleep 10
done 

运行逻辑说明:
1、通过判断硬盘的读取状态来确定硬盘是否处于空闲状态
2、只有硬盘持续空闲时间到了设定睡眠时间,才会将硬盘置为休眠状态、

这篇关于猫盘onespace x3p系统使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543354

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min