diff --git a/pkg/utils/os/cpu.go b/pkg/utils/os/cpu.go index 87eedec5f72b83af28b8001b29978f6b284dc818..bdf8d971bd7cea010d824f1bbd51ec479b4aa4b9 100644 --- a/pkg/utils/os/cpu.go +++ b/pkg/utils/os/cpu.go @@ -45,7 +45,7 @@ func GetPhysicalCPU() int { num = strings.Replace(num, "\n", "", -1) cpunum, err := strconv.Atoi(num) if err != nil { - logger.Error("获取cpu个数失败!") + logger.Error("获取cpu个数失败!") } return cpunum } diff --git a/pkg/utils/os/disk.go b/pkg/utils/os/disk.go index b2ae6acb0bac8e2e8febe889af8644fb949d3917..0cb6dab336f17aa6b074fda9f2171af5dae73ca5 100644 --- a/pkg/utils/os/disk.go +++ b/pkg/utils/os/disk.go @@ -1,8 +1,11 @@ package os import ( + "fmt" + "github.com/shirou/gopsutil/disk" "openeluer.org/PilotGo/PilotGo/pkg/logger" + "openeluer.org/PilotGo/PilotGo/pkg/utils" ) type DiskIOInfo struct { @@ -30,7 +33,7 @@ func GetDiskUsageInfo() []DiskUsageINfo { diskusage := make([]DiskUsageINfo, 0) parts, err := disk.Partitions(true) if err != nil { - logger.Error("get Partitions failed, err:%v\n", err) + logger.Error("get Partitions failed, err:%v\n", err.Error()) return nil } for _, part := range parts { @@ -82,3 +85,39 @@ func GetDiskInfo() []DiskIOInfo { } return diskinfo } + +/*挂载磁盘 +1.创建挂载磁盘的目录 +2.挂载磁盘*/ +func CreateDiskPath(mountpath string) { + tmp, err := utils.RunCommand(fmt.Sprintf("mkdir %s", mountpath)) + if err != nil { + logger.Error("创建挂载目录失败!%s", err.Error()) + } + logger.Info("创建挂载目录成功!%s", tmp) +} +func DiskMount(sourceDisk, destPath string) { + tmp, err := utils.RunCommand(fmt.Sprintf("mount %s %s", sourceDisk, destPath)) + if err != nil { + logger.Error("挂载磁盘失败!%s", err.Error()) + } + logger.Info("挂载磁盘成功!%s", tmp) +} + +// 卸载磁盘 +func DiskUMount(diskPath string) { + tmp, err := utils.RunCommand(fmt.Sprintf("umount %s", diskPath)) + if err != nil { + logger.Error("挂载磁盘失败!%s", err.Error()) + } + logger.Info("卸载磁盘成功!%s", tmp) +} + +// 磁盘格式化 +func DiskFormat(fileType, diskPath string) { + tmp, err := utils.RunCommand(fmt.Sprintf("mkfs.%s %s", fileType, diskPath)) + if err != nil { + logger.Error("格式化磁盘失败!%s", err.Error()) + } + logger.Info("格式化磁盘成功!%s", tmp) +} diff --git a/pkg/utils/os/sysctl.go b/pkg/utils/os/sysctl.go index cf1f67e0496206924f10e01798fbbf3562bf1a74..2b0931239ebc485f342b000e4a6a10e7babd35f4 100644 --- a/pkg/utils/os/sysctl.go +++ b/pkg/utils/os/sysctl.go @@ -1 +1,54 @@ package os + +import ( + "bufio" + "fmt" + "strings" + + "openeluer.org/PilotGo/PilotGo/pkg/logger" + "openeluer.org/PilotGo/PilotGo/pkg/utils" +) + +// sysctl -p /etc/sysctl.conf 载入配置文件 +func GetSysConfig() []map[string]string { + tmp, err := utils.RunCommand("sysctl -p /etc/sysctl.conf") + if err != nil { + logger.Error("获取内核配置文件失败!%s", err.Error()) + } + reader := strings.NewReader(tmp) + scanner := bufio.NewScanner(reader) + + var sysConfig []map[string]string + for { + if !scanner.Scan() { + break + } + line := scanner.Text() + line = strings.TrimSpace(line) + strSlice := strings.Split(line, " = ") + + sysPars := map[string]string{ + strSlice[0]: strSlice[1], + } + sysConfig = append(sysConfig, sysPars) + } + return sysConfig +} + +// sysctl -w net.ipv4.ip_forward=1 临时修改系统参数 +func TempModifyPar(arg string) { + tmp, err := utils.RunCommand(fmt.Sprintf("sudo sysctl -w %s", arg)) + if err != nil { + logger.Error("修改内核运行时参数失败!%s", err.Error()) + } + logger.Info("修改内核运行时参数成功!%s", tmp) +} + +// sysctl -n net.ipv4.ip_forward 查看某个内核参数的值 +func GetVarNameValue(arg string) { + tmp, err := utils.RunCommand(fmt.Sprintf("sysctl -n %s", arg)) + if err != nil { + logger.Error("获取该参数的值失败!%s", err.Error()) + } + logger.Info("已将该参数修改!%s", tmp) +} diff --git a/pkg/utils/os/system.go b/pkg/utils/os/system.go index 3c1e53a5b8e6c7e2055d74debf7d6f2aefd659ad..bd719d1a931afb5292bb902e217ea41188704a61 100644 --- a/pkg/utils/os/system.go +++ b/pkg/utils/os/system.go @@ -10,12 +10,12 @@ import ( ) type SystemInfo struct { - Platform string - PlatformVersion string - KernelVersion string - KernelArch string - HostId string - Uptime string + Platform string //系统平台 + PlatformVersion string //系统版本 + KernelVersion string //内核版本 + KernelArch string //内核支持架构 + HostId string //系统id + Uptime string //系统最新启动时间 } func GetHostInfo() string { diff --git a/pkg/utils/os/user.go b/pkg/utils/os/user.go index 926bb1357c1f8e4cdc61b460fcb0577b3a1c5c1c..7b4bd691488360d11b868ef30e342651e720988f 100644 --- a/pkg/utils/os/user.go +++ b/pkg/utils/os/user.go @@ -2,7 +2,11 @@ package os import ( "bufio" + "bytes" "fmt" + "io" + "os" + "os/exec" "os/user" "strings" @@ -51,7 +55,7 @@ func GetCurrentUserInfo() CurrentUser { func GetAllUserInfo() []AllUserInfo { tmp, err := utils.RunCommand("cat /etc/passwd") if err != nil { - logger.Error("获取失败!%s", err) + logger.Error("获取失败!%s", err.Error()) } reader := strings.NewReader(tmp) scanner := bufio.NewScanner(reader) @@ -77,3 +81,65 @@ func GetAllUserInfo() []AllUserInfo { return allUsers } + +// 创建新的用户,并新建家目录 +func AddLinuxUser(username, password string) { + useradd := exec.Command("useradd", "-m", username) + err := useradd.Start() + if err != nil { + logger.Error(err.Error()) + } + + useradd.Wait() + //下面两个是管道的两端 + //linux可以使用 echo "password" | passwd --stdin username + //直接更改密码 + ps := exec.Command("echo", password) + grep := exec.Command("passwd", "--stdin", username) + + r, w := io.Pipe() // 创建一个管道 + defer r.Close() + defer w.Close() + ps.Stdout = w // ps向管道的一端写 + grep.Stdin = r // grep从管道的一端读 + + var buffer bytes.Buffer + grep.Stdout = &buffer // grep的输出为buffer + + _ = ps.Start() + _ = grep.Start() + ps.Wait() + w.Close() + grep.Wait() + io.Copy(os.Stdout, &buffer) // buffer拷贝到系统标准输出 +} + +// 删除用户 +func DelUser(username string) { + tmp, err := utils.RunCommand(fmt.Sprintf("userdel -r %s", username)) + if err != nil { + logger.Error("删除用户失败!%s", err.Error()) + return + } + logger.Info("删除用户成功!%s", tmp) +} + +// chmod [-R] 权限值 文件名 +func ChangePermission(permission, file string) { + tmp, err := utils.RunCommand(fmt.Sprintf("chmod %s %s", permission, file)) + if err != nil { + logger.Error("改变文件权限失败!%s", err.Error()) + return + } + logger.Info("改变文件权限成功!%s", tmp) +} + +// chown [-R] 所有者 文件或目录 / chown [-R] 所有者 文件或目录 +func ChangeFileOwner(user, file string) { + tmp, err := utils.RunCommand(fmt.Sprintf("chown -R %s %s", user, file)) + if err != nil { + logger.Error("改变文件所有者失败!%s", err.Error()) + return + } + logger.Info("改变文件所有者成功!%s", tmp) +}