今天有一个需求是使用程序在Linux新建用户账户和家目录。找了好久,只找到和golang如何使用cmd相关的,那么就可以试试了。
最终在centos7上成功了。
func AddLinuxUser(username, password string) {
//这里新建用户,并新建家目录
useradd := exec.Command("useradd", "-m", username)
err := useradd.Start()
if err != nil {
fmt.Println(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拷贝到系统标准输出
}