Search code examples
gofile-permissions

File perm bits in octal on Linux in Go


I am trying to get file permission bits in Octal representation. The below code prints it as string. Is there an API to print in Octal or int?

import "os"
import "fmt"

func main() {
    m, _ := os.Stat("test.go")
    perm := m.Mode().Perm()
    fmt.Println(perm)
}   
$:~/gocode/ws/gocode$ go run perm.go 
-rw-rw-r--
@:~/gocode/ws/gocode$ 

Solution

  • For example,

    package main
    
    import (
        "fmt"
        "os"
        "strconv"
    )
    
    func main() {
        fi, err := os.Stat("test.go")
        if err != nil {
            fmt.Fprintln(os.Stderr, err)
            return
        }
        perm := fi.Mode().Perm()
        fmt.Println(perm)
        fmt.Printf("%o\n", perm)
        fmt.Printf("%#o\n", perm)
        fmt.Println(strconv.FormatUint(uint64(perm), 8))
        fmt.Println("0" + strconv.FormatUint(uint64(perm), 8))
    }
    

    Output:

    -rw-rw-r--
    664
    0664
    664
    0664