package main
import (
"bytes"
"encoding/json"
"fmt"
"log"
"os"
"os/exec"
"strings"
)
func init() {
file := "./" + "log" + ".txt"
logFile, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
if err != nil {
panic(err)
}
log.SetOutput(logFile) // 将文件设置为log输出的文件
log.SetPrefix("[logTool]")
log.SetFlags(log.LstdFlags | log.Lshortfile | log.LUTC)
return
}
func Server(str string, ars ...int) {
//运行shell 脚本
cmd := exec.Command("/bin/bash", "-c", str)
var out bytes.Buffer
cmd.Stdout = &out
//cmd 开始yunx
err := cmd.Run()
if err != nil {
panic(err)
}
}
func Index() {
Server("cat /var/log/openvpn/openvpn.log | awk '{print $6}' | grep ^p | awk -F '/' '{print $1}' | sort | uniq | awk -F ',' '{print $1}' > /go/user1.txt")
Server("ls -l /root | awk '{print $9}' | grep ^p | awk -F . '{print $1}' > /go/user2.txt")
// Server("cat /var/log/mysqld.log | awk '{print $1}' >> /go/test.txt")
}
func ReadFile(keyFile string) ([]byte, error) {
f, err := os.ReadFile(keyFile)
if err != nil {
return nil, err
}
return f, err
}
// func ReadFile(keyFile string) ([]byte, error) {
// f, err := os.OpenFile(keyFile, os.O_CREATE|os.O_CREATE, 0644)
// if err != nil {
// return nil, err
// }
// defer f.Close()
// content := make([]byte, 4096)
// writer := bufio.NewWriter(f)
// n, err := writer.WriteString(string(content))
// if err != nil {
// return nil, err
// }
// defer writer.Flush()
// return content[:n], nil
// }
func Bytearr_strarr(file string) []string {
var err error
// arr1, err := ReadFile("test.log")
arr1, err := ReadFile(file)
if err != nil {
panic(err)
}
//把一个byte 切片转换成一个string 切片
arr3 := strings.Fields(string(arr1))
return arr3
}
func DuiBi_user() []string {
arr1 := Bytearr_strarr("user1.txt") //使用的用户文件
arr2 := Bytearr_strarr("user2.txt") //总的用户文件
arr4 := arr2
num := 0
for _, v := range arr1 {
for k, j := range arr2 {
if v == j {
num++
arr2 = append(arr4[:k], arr4[k+1:]...)
}
}
}
//因为切片的元素arr4 指向arr2的地址
result := arr4[0 : len(arr4)-num]
return result
}
//切片json序列化
func testSlice(user []string) string {
var m map[int]interface{}
m = make(map[int]interface{}, 100)
fmt.Println(len(user))
for i := 0; i < len(user); i++ {
m[i+1] = user[i]
}
fmt.Println(m)
byte, err := json.Marshal(m)
if err != nil {
fmt.Println(err)
}
jsonstr := string(byte)
// fmt.Printf("json类型=%T,json str:%v", jsonstr, jsonstr)
return jsonstr
}
func main() {
//写入文件
// Index()
result := DuiBi_user()
str1 := testSlice(result)
log.Printf("未使用的用户%v", str1)
}
|