android basic
android basic
android basic
grafana docker pull grafana/grafana:12.0.2 docker run -d --name=grafana -e "GF_SECURITY_ADMIN_PASSWORD=password0" -p 3000:3000 -v grafana-storage:/var/lib/grafana -v /etc/localtime:/etc/localtime:ro grafana/grafana:12.0.2 # podman podman run \ -d \ --name=grafana \ -e "GF_SERVER_ROOT_URL=http://grafana.wiloon.com" \ -e "GF_SECURITY_ADMIN_PASSWORD=password0" \ -p 3100:3000 \ -v grafana-storage:/var/lib/grafana \ -v /etc/localtime:/etc/localtime:ro \ grafana/grafana:8.5.6 # in pod podman run \ -d \ --name=grafana \ -e "GF_SERVER_ROOT_URL=http://grafana.wiloon.com" \ -e "GF_SECURITY_ADMIN_PASSWORD=password0" \ --pod monitor \ -v grafana-storage:/var/lib/grafana \ -v /etc/localtime:/etc/localtime:ro \ grafana/grafana variable for host SHOW TAG VALUES ON "telegraf" FROM "system" WITH KEY = "host" Q. How do I use the second y axis, secondYAxis function does not work ...
RSSX A RSS Reader redis key 某一个feed的 所有 news id,按时间排序的 key: feed_news:feedId0 type: sort set, zset value: newsId 文章内容 key: news:newsId0 type: hash value: 文章内容, 数据量最大 记录用户阅读位置 用已读索引和已读集合记录用户阅读位置 已读索引 用于记录用户feed已读和未读的边界, 记录连续的已读未读位置 已读集合 用于记录已读边界外,用户分散阅读的文章,记录不连续的已读集合 已读索引 key: read_index:userId0:feedId0 type: string value: feed_news(zset)的score值 已读集合, 已读文章标记为灰色 key: read_mark:userId0:feedId0 type: set value: newsId 显示feed 列表时,显示未读文章数,feed总数-索引=未读数量 按feed id 加载一页未读文章时,按索引range取 标记某一页为已读时,取上一次的已读索引位置, 加每页显示数,记录新的已读索引 加载某个feed的一页未读文章时,查询大于等于某一个 score 的第一条数据的索引 ZSCORE, 成员member的score值 ZRANGE, 返回指定区间内的成员 ZRANGEBYSCORE, 返回有序集合中指定分数区间的成员列表 - 正序 ZRANK, 返回指定成员的排名(位置值,0表示第一个成员) - 正序 移除有序集中,指定排名(rank)区间内的所有成员 移除有序集中,指定分数(score)区间内的所有成员 部署 redis sql db: sqlite3 ...
telegraf # archlinux, telegraf yay -S telegraf-bin ubuntu && debian # influxdata-archive_compat.key GPG fingerprint: # 9D53 9D90 D332 8DC7 D6C8 D3B9 D8FF 8E1F 7DF8 B07E wget -q https://repos.influxdata.com/influxdata-archive_compat.key echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list sudo apt-get update && sudo apt-get install telegraf binary https://portal.influxdata.com/downloads/ vim /etc/telegraf/telegraf.conf [global_tags] [agent] interval = "10s" round_interval = true metric_batch_size = 1000 metric_buffer_limit = 10000 collection_jitter = "0s" flush_interval = "10s" flush_jitter = "0s" precision = "" # 修改主机名 hostname = "foo" omit_hostname = false [[outputs.influxdb]] urls = ["http://influxdb.wiloon.com:32086"] # 注意修改 database database = "monitor" [[inputs.cpu]] percpu = true totalcpu = true collect_cpu_time = false report_active = false [[inputs.disk]] ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] [[inputs.diskio]] [[inputs.kernel]] [[inputs.mem]] [[inputs.processes]] [[inputs.swap]] [[inputs.system]] [[inputs.net]] [[inputs.netstat]] [[inputs.linux_sysctl_fs]] inputs.linux_sysctl_fs https://www.kernel.org/doc/Documentation/sysctl/fs.txt ...
Ceph Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。 Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。 1.2 Ceph特点 高性能 a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。 b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。 c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。 高可用性 a. 副本数可以灵活控制。 b. 支持故障域分隔,数据强一致性。 c. 多种故障场景自动进行修复自愈。 d. 没有单点故障,自动管理。 高可扩展性 a. 去中心化。 b. 扩展灵活。 c. 随着节点增加而线性增长。 特性丰富 a. 支持三种存储接口:块存储、文件存储、对象存储。 b. 支持自定义接口,支持多种语言驱动。 作者:lihanglucien 链接:https://www.jianshu.com/p/cc3ece850433 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 GlusterFS GlusterFS系统是一个可扩展的网络文件系统,相比其他分布式文件系统,GlusterFS具有高扩展性、高可用性、高性能、可横向扩展等特点,并且其没有元数据服务器的设计,让整个服务没有单点故障的隐患。 当客户端访问GlusterFS存储时,首先程序通过访问挂载点的形式读写数据,对于用户和程序而言,集群文件系统是透明的,用户和程序根本感觉不到文件系统是本地还是在远程服务器上。读写操作将会被交给VFS(Virtual File System)来处理,VFS会将请求交给FUSE内核模块,而FUSE又会通过设备/dev/fuse将数据交给GlusterFS Client。最后经过GlusterFS Client的计算,并最终经过网络将请求或数据发送到GlusterFS Server上。
Java 压缩字符串 https://www.cnblogs.com/EasonJim/p/8256906.html 说明: 一般来说要实现压缩,那么返回方式一般是用byte[]数组。 研究发现byte[]数组在转成可读的String时,大小会还原回原来的。 如果采用压缩之后不可读的String时,互相转换大小会变小,唯一缺点就是转出的String不可读,需要再次解码之后才可读。 对于压缩一般最近常听的应该就是gzip这些。 实现一: 复制代码 /*** 压缩GZip @param data @return */ public static byte[] gZip(byte[] data) { byte[] b = null; try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(bos); gzip.write(data); gzip.finish(); gzip.close(); b = bos.toByteArray(); bos.close(); } catch (Exception ex) { ex.printStackTrace(); } return b; } /*** 解压GZip @param data @return */ public static byte[] unGZip(byte[] data) { byte[] b = null; try { ByteArrayInputStream bis = new ByteArrayInputStream(data); ...
usb win10 https://www.microsoft.com/zh-cn/software-download/windows10ISO Rufus https://rufus.ie/ 简单几步制作 Windows 10 正式版U盘可启动安装盘图文教程 (全新安装Win10) https://www.iplaysoft.com/windows-10-udisk-install.html/embed#?secret=a084u1M2LZ
let’s encrypt, nginx, debian sudo apt-get install certbot python-certbot-nginx -t stretch-backports sudo certbot –nginx https://certbot.eff.org/lets-encrypt/debianstretch-nginx https://www.jianshu.com/p/c5c9d071e395
网络唤醒, Wake On LAN, WAL 华硕 BIOS 设置 Advanced> APM Configuration> Power on by PCI-E/PCI # archlinux, wol pacman -S wol wol -i 192.168.50.255 -p 9 1c:b7:2c:af:9a:6a # -i 192.168.50.255, 广播地址 # -p 9, 端口 9,大多数以太网卡都支持 9, 也可以尝试 7 或 0 # 1c:b7:2c:af:9a:6a, 被唤醒的主机的 MAC 地址 ubuntu sudo apt-get install wakeonlan wakeonlan 1c:b7:2c:af:9a:6a android client TX ToolBox Name: 填写一个别名就可以,例如: foo Mac Address: 填写电脑网卡MAC地址 (注意是主板上有线网卡) ,这个要填写正确,如何获得? 进入命令行运行: ipconfig /all,然后查看对应的物理地址即可,共6组2字节十六进制字符; Broadcast IP/Hostname/FQDN Broadcast IP/Hostname 是电脑所在的局域网的广播地址: 如果你的电脑分配到 192.168.1.100 则填写 192.168.1.255,将唤醒包广播到1网段下面所有电脑, Hostname: 则是你电脑的主机名. FQDN:是广域网唤醒, 例如你的手机在公网 (4g上网), 不在局域网,则需要填写路由器的DDNS域名, 如: http://homepc.router.net Port 端口默认是9, 这里默认就可以 ...
aliyun oss, 对象存储, ossutil aliyun oss, ossutil install ossutil sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash # 生成配置文件, stsToken 可以置空 ossutil config ./ossutil cp a -f oss://my-bucket/path ./ossutil64 cp /root/tmp/wordpress.sql -f oss://wiloon-backup/ https://help.aliyun.com/document_detail/50561.html?spm=a2c4g.11186623.6.1283.2e0655b7qtA1Md https://help.aliyun.com/document_detail/120075.html
procd https://openwrt.org/docs/guide-developer/procd-init-scripts https://blog.csdn.net/liangdsing/article/details/53906445 #!/bin/sh /etc/rc.common # Copyright (C) 2008 OpenWrt.org #执行的顺序,按照字符串顺序排序并不是数字排序 START=98 #使用procd启动 USE_PROCD=1 #start_service 函数必须要重新定义 start_service() { #创建一个实例, 在procd看来一个应用程序可以多个实例 procd_open_instance #定义respawn参数,告知procd当binloader程序退出后尝试进行重启 procd_set_param respawn # binloader执行的命令是"/usr/bin/binloader", 若后面有参数可以直接在后面加上 procd_set_param command "$BINLOADER_BIN" #关闭实例 procd_close_instance } #stop_service重新定义,退出服务器后需要做的操作 stop_service() { rm -f /var/run/binloader.pid } restart() { stop start } start_service() 为注册服务到procd中,如果自己的应用程序没有配置文件,只要实现start_service()就好, procd_set_param设置设置好多参数,command为自己的应用路径, respawn可以检测自己的应用,如果挂掉可以重启,也可以设置重启间隔,其它参数可以自己查阅。 stop_service() 这个时procd kill自己的应用程序后调用的,若果你的应用程序关掉后,需要一些清理工作,需要实现这个。 service_triggers() 如果自己的应用需要关联一个配置文件test, (需要放在/etc/config/目录下) ,可以跟踪文件的修改情况,如果这个文件有改变,就调用reload_service().在service_triggers也可以添加跟踪网络的修改,也可以同时跟踪多个配置文件。 reload_service() 配置文件改变后,需要调用这个函数,可以根据自己需要实现功能。 注: start和reload区别是,start一般是指应用程序启动, reload一般是指只是重新加载与配置文件改变相关的部分,不把整个应用程序重新启动。这种方式应该是推荐的,如果你再reload里重新启动应用也是可以的。 ...
介词, Preposition, prep 介词(Preposition 简写prep.) 介词又被称作前置词,是表示名词、代词等与句中其他单词之间的关系的词汇,在句中不能单独作句子成分。 介词后面一般有名词、代词或相当于名词的其他词类、短语或从句作它的宾语,表示与其他成分的关系。介词和它的宾语构成介词词组,在句中作状语,表语,补语,定语或介词宾语。介词可以分为时间介词、地点介词、方式介词、原因介词、数量介词和其他介词。 介词一般用于名词或者代词前面,表示该词与句中其他成分的关系。介词后面的名词或代词称为介词宾语(如果是人称代词,则要用宾格)。介词和介词宾语合在一起构成介词短语。 PS:介词是一种虚词,不能单独作句子成分,只能用在一个名词、代词或相当于名词的结构之前,可以与后面的词一起构成介词短语。 简单介词 简单的介词包括:in,on,with,by,for,at,about,under,of 等。 合成介词 包括into,within,throughout,inside,outside,without等 重叠介词 from among 从…当中 from behind 从…后面, until after 直至…之后, at about 在大约…, after about 在大约…之后 等 短语介词 一个或两个简单介词和一个或几个其他词类构成一个短语,作用相当于一个介词,这就叫做短语介词。这类介词的末尾总是一个简单介词 如 according to,because of,by means of,in addition to,in front of, in spite of,into等。 分词介词 有极少数介词的词尾是“-ing”,形似现在分词(其中也有些可做分词)。 常用的有:considering,regarding,respecting,including。 按词义分 表示“地点(包括动向)”的有:about around(在…附近、周围),above(高于、在…斜上方),across(在…对面、横过)…… 主要用途 表示时间 1、表示在某时间.常用介词at,on,in等。 用 at 来表示在某一段时刻: at dawn/daybreak: 在黎明 at six :在6点钟 at midnight :在午夜 at 4:30 :在4点30分 用 at 来表示在……岁时 ...
Let’s Encrypt 证书 https://www.jianshu.com/p/c5c9d071e395 Let’s Encrypt
aliyun ddns https://github.com/honwen/aliyun-ddns-cli aliyun-ddns-cli --access-key-id=ak0 --access-key-secret=sk0 auto-update --domain=domain0.wiloon.com --redo=600 docker run -d \ -e "AKID=[ALIYUN's AccessKey-ID]" \ -e "AKSCT=[ALIYUN's AccessKey-Secret]" \ -e "DOMAIN=ddns.aliyun.win" \ -e "REDO=600" \ -e "TTL=600" \ chenhw2/aliyun-ddns-cli jeessy2/ddns-go https://github.com/jeessy2/ddns-go
owncloud,cozy, nextcloud, Cloudreve Cloudreve ☁️ 支持本机、从机、七牛、阿里云 OSS、腾讯云 COS、又拍云、OneDrive (包括世纪互联版) 作为存储端 📤 上传/下载 支持客户端直传,支持下载限速 💾 可对接 Aria2 离线下载,可使用多个从机节点分担下载任务 📚 在线 压缩/解压缩、多文件打包下载 💻 覆盖全部存储策略的 WebDAV 协议支持 ⚡ 拖拽上传、目录上传、流式上传处理 🗃️ 文件拖拽管理 👩👧👦 多用户、用户组 🔗 创建文件、目录的分享链接,可设定自动过期 👁️🗨️ 视频、图像、音频、文本、Office 文档在线预览 🎨 自定义配色、黑暗模式、PWA 应用、全站单页应用 🚀 All-In-One 打包,开箱即用 Gofi https://gofi.calmlyfish.com/zh/ nohup ./gofi-linux-amd64 & podman run -d --name=gofi -p 80:8080 -v gofi-app:/app sloaix/gofi:latest owncloud podman pull owncloud/ocis podman run –rm -ti -p 9200:9200 -e OCIS_INSECURE=true owncloud/ocis Cozy Cloud Cozy Cloud是一个开源的个人私有云,可以用于阅读电子邮件,或者管理和同步联系人、文件或日历,同时会有相关的应用商店和社区作为素材库,它可以将所有Web服务都放在同一个私有的个人平台,通过此平台,用户的网页应用和设备可以轻松地进行数据分享。 ...
Linux密码策略 authconfig --passminlen=8 --passmaxrepeat=3 --enablereqlower --enablerequpper --enablereqdigit --enablereqother --update 基于RHEL的系统 (RHEL CentOS Scientific) RHEL7,CentOS7,Scientific7 设置密码中至少包含一个小写字符,执行命令: authconfig -enablereqlower -update 查看设置: grep “^lcredit” /etc/security/pwquality.conf 设置密码中至少包含一个大写字符,执行命令: authconfig -enablerequpper -update 查看设置: grep “^ucredit” /etc/security/pwquality.conf 设置密码中至少包含一个数字字符,执行命令: authconfig -enablereqdigit -update 查看设置: grep “^dcredit” /etc/security/pwquality.conf 设置密码中至少包含一个特殊字符,执行命令: authconfig -enablereqother -update 查看设置: grep “^ocredit” /etc/security/pwquality.conf RHEL6,CentOS6,Scientific6 编辑 /etc/pam.d/system-auth 文件: vim /etc/pam.d/system-auth 找到如下一行,修改: password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 上面配置了密码至少8个字符长,并且分别包含大小写字母、数字和特殊字符。 设置密码过期时间 我们设置如下策略: 一个密码使用的最长天数 更改密码最少天数间隔,为了不让用户频繁更改密码 在密码过期前多少天提醒用户
ansible inventory ansible_user=root
golang file,文件操作 文件大小 func main() { fi,err:=os.Stat("water") if err ==nil { fmt.Println("file size is ",fi.Size(),err) } } package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) func main() { dir := "/tmp/foo/bar" fileName := "file0.txt" writeTxtFile(dir, fileName, "foo") out := readTxtFile(dir, fileName) fmt.Println("read result: " + out) } func writeTxtFile0(dir, fileName, content string) { if !isExist(dir) { err := os.MkdirAll(dir, 0777) if err != nil { fmt.Printf("%s\n", err) } else { fmt.Println("Create Directory OK!") } } fullFileName := dir + string(os.PathSeparator) + fileName file, e := os.OpenFile(fullFileName, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0777) if e != nil { fmt.Println("open file: " + e.Error()) } defer file.Close() n, err := file.WriteString(content) if err != nil { fmt.Println("write string: " + err.Error()) return } fmt.Printf("write length: %v\n", n) } func writeTxtFile(dir, fileName, content string) { if !isExist(dir) { err := os.MkdirAll(dir, 0777) if err != nil { fmt.Printf("%s\n", err) } else { fmt.Println("Create Directory OK!") } } err := ioutil.WriteFile(dir+string(os.PathSeparator)+fileName, []byte(content), 0777) if err != nil { fmt.Printf("failed to write file, file name: %v, err: %v", fileName, err) return } } // read txt file func readTxtFile(dir, fileName string) string { path := dir + string(os.PathSeparator) + fileName dat, err := ioutil.ReadFile(path) if err != nil { fmt.Println("failed to read file: " + fileName) } return string(dat) } func check(e error) { if e != nil { panic(e) } } func isExist(fileName string) bool { _, err := os.Stat(fileName) if err == nil { fmt.Println("file exist: " + fileName) return true } else if os.IsNotExist(err) { fmt.Println("file not exist") return false } else { fmt.Println("file error") } return false } 判断是文件还是目录 f, _ := os.Stat("a.txt") f.IsDir() move file func main() { oldLocation := "/var/www/html/test.txt" newLocation := "/var/www/html/src/test.txt" err := os.Rename(oldLocation, newLocation) if err != nil { log.Fatal(err) } } 判断文件是否存在 os.Stat(parentDir) // 创建目录 os.Mkdir(parentDir, os.ModePerm) 删除文件 file := "test.txt" err := os.Remove(file) package main import ( "fmt" "os" ) // 判断文件夹是否存在 func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } func main() { _dir := "./gzFiles2" exist, err := PathExists(_dir) if err != nil { fmt.Printf("get dir error![%v]\n", err) return } if exist { fmt.Printf("has dir![%v]\n", _dir) } else { fmt.Printf("no dir![%v]\n", _dir) // 创建文件夹 err := os.Mkdir(_dir, os.ModePerm) if err != nil { fmt.Printf("mkdir failed![%v]\n", err) } else { fmt.Printf("mkdir success!\n") } } } 写文件 /***************************** 第一种方式: 使用 io.WriteString 写入文件***/ if checkFileIsExist(filename) { //如果文件存在 f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件 fmt.Println("文件存在") } else { f, err1 = os.Create(filename) //创建文件 fmt.Println("文件不存在") } check(err1) n, err1 := io.WriteString(f, wireteString) //写入文件(字符串) check(err1) fmt.Printf("写入 %d 个字节n", n) /***************************** 第二种方式: 使用 ioutil.WriteFile 写入文件****/ var d1 = []byte(wireteString) err2 := ioutil.WriteFile("./output2.txt", d1, 0666) //写入文件(字节数组) check(err2) /***************************** 第三种方式: 使用 File(Write,WriteString) 写入文件***/ f, err3 := os.Create("./output3.txt") //创建文件 check(err3) defer f.Close() n2, err3 := f.Write(d1) //写入文件(字节数组) check(err3) fmt.Printf("写入 %d 个字节n", n2) n3, err3 := f.WriteString("writesn") //写入文件(字节数组) fmt.Printf("写入 %d 个字节n", n3) f.Sync() /***************************** 第四种方式: 使用 bufio.NewWriter 写入文件****/ w := bufio.NewWriter(f) //创建新的 Writer 对象 n4, err3 := w.WriteString("bufferedn") fmt.Printf("写入 %d 个字节n", n4) w.Flush() f.Close() 一般文件比较小的话可以将文件全部读入内存中,然后转换成string再按行分割一下 func GetFileContentAsStringLines(filePath string) ([]string, error) { logger.Infof("get file content as lines: %v", filePath) result := []string{} b, err := ioutil.ReadFile(filePath) if err != nil { logger.Errorf("read file: %v error: %v", filePath, err) return result, err } s := string(b) for _, lineStr := range strings.Split(s, "\\n") { lineStr = strings.TrimSpace(lineStr) if lineStr == "" { continue } result = append(result, lineStr) } logger.Infof("get file content as lines: %v, size: %v", filePath, len(result)) return result, nil } Golang 超大文件读取的两个方案 第一个是使用流处理方式代码如下 func ReadFile(filePath string, handle func(string)) error { f, err := os.Open(filePath) defer f.Close() if err != nil { return err } buf := bufio.NewReader(f) for { line, err := buf.ReadLine("\n") line = strings.TrimSpace(line) handle(line) if err != nil { if err == io.EOF{ return nil } return err } return nil } } 第二个方案就是分片处理, 当读取的是二进制文件,没有换行符的时候,使用下面的方案处理大文件 func ReadBigFile(fileName string, handle func([]byte)) error { f, err := os.Open(fileName) if err != nil { fmt.Println("can't opened this file") return err } defer f.Close() s := make([]byte, 4096) for { switch nr, err := f.Read(s[:]); true { case nr < 0: fmt.Fprintf(os.Stderr, "cat: error reading: %s\n", err.Error()) os.Exit(1) case nr == 0: // EOF return nil case nr > 0: handle(s[0:nr]) } } return nil } https://learnku.com/articles/23559/two-schemes-for-reading-golang-super-large-files https://blog.csdn.net/xielingyun/article/details/50324423 https://blog.csdn.net/robertkun/article/details/78776585
WebDAV Web 分布式创作和版本管理 (WebDAV) 是 HTTP 协议的扩展,支持将 Web 服务器显示为标准的网络驱动器。WebDAV 客户端默认安装在大部分常见的操作系统上,可用于直接装载和访问 QNAP NAS 上的共享文件夹。WebDAV 访问具有以下好处: 256 位 AES SSL 加密 绕过防火墙和代理 速度比使用 VPN 的 Microsoft 网络连接 (SMB/CIFS) 更快 https://www.qnap.com/zh-cn/how-to/tutorial/article/%E5%A6%82%E4%BD%95%E9%80%8F%E8%BF%87-webdav-%E8%BF%9C%E7%A8%8B%E8%AE%BF%E9%97%AE%E6%82%A8%E7%9A%84-nas/ windows挂栽webdav # run in cmd net use * https://xxx.wiloon.com/remote.php/webdav/ Error 0x800700DF: The file size exceeds the limit allowed and cannot be saved. Regedit HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters image FileSizeLimitInBytes Set to the following Decimal: 4294967295 Click OK Restart the WebClient service Refresh the Windows Explorer WebDAV window ...
raspberry pi nfs server #安装 NFS 服务器 sudo apt install nfs-kernel-server vim /etc/exports # 添加如下内容以允许所有可以访问 NAS 云盘的设备挂载存储: /nas/data *(rw,sync,no_subtree_check) # restart nfs server systemctl restart nfs-kernel-server # 在另一台linux 上挂载 sudo mkdir /nas/data sudo mount -t nfs <raspberry-pi-hostname-or-ip>:/nas/data /nas/data autofs pacman -S autofs pacman -S nfs-utils sudo systemctl start rpcbind sudo systemctl enable rpcbind sudo vim /etc/autofs/auto.master /nas /etc/autofs/auto.pi3bp --timeout 61 sudo vim /etc/autofs/auto.pi3bp data -rw,soft,intr,rsize=8192,wsize=8192 pi3bp:/nas/data sudo systemctl start autofs sudo systemctl enable autofs # 共享目录权限问题, 在服务端安装 acl sudo apt-get install acl setfacl -R -m u:1000:rwx /nas/data 共享目录权限问题 ...