当前位置: 首页 > news >正文

重新建网站需要转域名吗免费域名注册官网

重新建网站需要转域名吗,免费域名注册官网,商贸有限公司经营范围,跨境电商培训哪家最好文章目录 overlayfsexec.Command("tar", "-xvf", busyboxTarURL, "-C", busyboxURL).CombinedOutput()exec.Command格式差异 挂载mount卸载unmount代码地址结果演示 overlayfs 就是联合文件系统,将多个文件联合在一起成为一个统一的…

文章目录

  • overlayfs
  • `exec.Command("tar", "-xvf", busyboxTarURL, "-C", busyboxURL).CombinedOutput()`
  • `exec.Command`
      • 格式差异
  • 挂载mount
  • 卸载unmount
  • 代码地址
  • 结果演示

overlayfs

就是联合文件系统,将多个文件联合在一起成为一个统一的视图。

overlayfs 一般分为 lower、upper、merged 和 work 4个目录。

  • lower 只读层,该层数据不会被修改
  • upper 可读写层,所有修改都发生在这一层,即使是修改的 - lower 中的数据。
  • merged 视图层,可以看到 lower、upper 中的所有内容
  • work 则是 overlayfs 内部使用

当在容器中新建文件
在这里插入图片描述
修改当前upper层,但lower层没有改变
在这里插入图片描述

exec.Command("tar", "-xvf", busyboxTarURL, "-C", busyboxURL).CombinedOutput()

exec.Command("tar", "-xvf", busyboxTarURL, "-C", busyboxURL).CombinedOutput() 这行代码会启动一个新的进程来执行tar命令,并且它会自动执行。
CombinedOutput调用这个方法包括执行命令并收集标准输出(stdout)和标准错误(stderr)的组合输出。如果命令执行成功,它会返回一个字节数组包含输出内容;如果执行过程中有错误,这个错误(一般命令执行失败)会被返回。

exec.Command

exec.Command函数在Go语言中用于执行外部命令,其基本格式为:

cmd := exec.Command(command, arg1, arg2, ..., argN)

这里,command是您想要执行的外部命令的名称(例如lscurl等),而arg1argN是传递给该命令的参数。参数之间以逗号分隔,并且每个参数都是一个单独的字符串,即使是那些在命令行中看起来像是一个整体的参数(例如带有空格的文件路径),也需要作为一个整体字符串传递。

格式差异

  • 命令与参数: 执行不同命令时,主要的格式差异在于命令本身的名称以及它需要的参数。每个命令根据其功能会有不同的参数需求和格式。例如,ping命令可能需要一个主机名作为参数,而cp命令则需要源文件路径和目标文件路径。

  • 传递选项与参数: 一些命令支持长选项(如--help)和短选项(如-h),这些选项的使用和它们后面的参数(如果有的话)也是exec.Command参数的一部分。例如,exec.Command("grep", "-r", "pattern", "directory")

  • 环境变量与工作目录: 除了命令和参数,exec.Command还允许通过Cmd.EnvCmd.Dir字段设置环境变量和工作目录。这不改变基本的命令格式,但会影响命令执行的环境。

  • 输入输出重定向: 如你之前代码所示,可以使用Cmd.StdinCmd.StdoutCmd.Stderr来重定向命令的标准输入、输出和错误流。这不影响命令的格式,但影响其交互方式。

挂载mount

  • 准备 busybox 目录作为只读层lower
  • 准备可读写层upper
  • 准备merged层,将可读写层和只读层挂载到merged层(以上操作都是在容器没启动之前运行的)
  • 容器(子进程)运行时pivotRoot 切换目录(在子进程切换到命令行之前)
package contain
import(log "github.com/sirupsen/logrus""os/exec""os"
)func prepare_overlays(rooturl string){create_lower(rooturl)create_upper(rooturl)create_merged(rooturl)create_work(rooturl)mount_overlays(rooturl)log.Infof("prepare_overlays suceess")
}
func create_lower(rooturl string){busyboxurl:=rooturl+"/busybox"busytarurl:=rooturl+"/busybox.tar"_, err := os.Stat(busyboxurl)if err != nil {if os.IsNotExist(err) {log.Infof("文件不存在")if err:=os.Mkdir(busyboxurl,0777);err!=nil{log.Infof("mkdir error")}if _,err=exec.Command("tar", "-xvf", busytarurl, "-C", busyboxurl).CombinedOutput(); err!=nil{log.Infof("tar busybox.tar error")}	} else {log.Infof("无法获取文件信息: %v\n", err)}}}
func create_upper(rooturl string){upperurl:=rooturl+"/upper"if err:=os.Mkdir(upperurl,0777);err!=nil{log.Infof("mkedir upper error")}
}func create_merged(rooturl string){mergedurl:=rooturl+"/merged"if err:=os.Mkdir(mergedurl,0777);err!=nil{log.Infof("mkedir merged error")}
}
func create_work(rooturl string){workurl:=rooturl+"/work"if err:=os.Mkdir(workurl,0777);err!=nil{log.Infof("mkedir merged error")}
}func mount_overlays(rooturl string){mnturl:=rooturl+"/merged"dirs:="lowerdir="+rooturl+"/busybox"+",upperdir="+rooturl+"/upper"+",workdir="+rooturl+"/work"cmd:=exec.Command("mount","-t","overlay","overlay","-o",dirs,mnturl)if err:=cmd.Run();err!=nil{log.Infof("mount overlay error")log.Error(err)}
}

卸载unmount

  • 在容器运行退出后(子进程退出后程序环境改变,此时根目录也改变,所以此时可以卸载并删除之前的根目录)卸载unmount挂载点
  • 删除upper merged work层,lower不变
package contain
import(log "github.com/sirupsen/logrus""os/exec""os"
)
func end_overlays(rooturl string){unmount_overlays(rooturl)delete_upper_work_merged(rooturl)
}
func unmount_overlays(rooturl string){mntrul:=rooturl+"/merged"cmd:=exec.Command("umount",mntrul)if err:=cmd.Run();err!=nil{log.Infof("unmount merged error")}
}
func delete_upper_work_merged(rooturl string){upperurl:=rooturl+"/upper"mergedurl:=rooturl+"/merged"workurl:=rooturl+"/work"if err:=os.RemoveAll(upperurl);err!=nil{log.Infof("delete upper error")}if err:=os.RemoveAll(mergedurl);err!=nil{log.Infof("delete merged error")}if err:=os.RemoveAll(workurl);err!=nil{log.Infof("delete work error")}
}

代码地址

https://github.com/FULLK/llkdocker

结果演示

  • sudo运行后upper层是没有任何东西的,但只要运行命令就会产生一个root文件夹,因为是以root用户执行。可能名字对文件夹有修改影响,因为merged的root文件夹里没有任何东西
  • 新建文件,修改在upper中出现,merged中也出现,但lower没有出现
    在这里插入图片描述在这里插入图片描述
  • 查看文件内容
    在这里插入图片描述
  • exit后
    在这里插入图片描述
http://www.hkea.cn/news/143591/

相关文章:

  • wordpress网站样式网站排名查询
  • 郑州网站建设推销外贸网站推广与优化
  • 当当网站开发系统说明搜索引擎排名google
  • 国外男女直接做的视频网站企业邮箱登录入口
  • 成都可以做网站的公司百度手机助手最新版下载
  • 赤峰网站建设招聘市场营销互联网营销
  • 网站开发后端需要哪些技术友情链接检索数据分析
  • 金华竞价排名 金华企业网站建设常见的网络营销平台有哪些
  • p2p网站开发关键词seo是什么意思
  • 自己免费怎么制作网站合肥今天的最新消息
  • 今日头条新闻10条简短seo网络优化招聘信息
  • 赣州人才网官方网站关键词seo优化软件
  • cad做兼职区哪个网站郑州网络营销公司排名
  • 宁夏银川做网站的公司有哪些网络营销分类
  • 换物网站为什么做不起来中国免费广告网
  • 可以显示一张图片的网站怎么搭建搜索引擎优化策略
  • 精品课程网站建设论文今天的新闻最新消息
  • 检查网站收录问题蚌埠seo外包
  • 建站展示网站优化网
  • 秦皇岛网站建设价格深圳seo公司
  • 广告型网站建设广州营销网站建设靠谱
  • 包头学做网站平台开发
  • 个人如何做微商城网站指数分布的分布函数
  • 北京网站设计哪家公司好建站工具
  • 深圳外贸网络推广seo诊断书案例
  • Java做网站的基本框架优化关键词规则
  • 网上手机商城网站建设直通车推广计划方案
  • 网站框架是谁做做个电商平台要多少钱
  • 网站开发建设书籍推荐b2b外贸平台
  • 网站首页的布局设计进行优化