第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

是否有查找完整文件權(quán)限的功能?

是否有查找完整文件權(quán)限的功能?

Go
慕哥6287543 2022-05-18 14:42:00
我需要使用 Go 來(lái)獲取給定文件的文件權(quán)限(特別是 SUID 位)。以下是示例文件的權(quán)限。$ touch example_file.test$ chmod 7777 example_file.test$ ls -ltra example_file.test    -rwsrwsrwt 1 luke users 0 Feb 25 21:53 example_file.test$ stat -c "%a %n" example_file.test     7777 example_file.test這是一個(gè)說(shuō)明問(wèn)題的小程序。func main() {    info, _ := os.Stat("example_file.test")        fmt.Println(info.Mode().String())                        // ugtrwxrwxrwx        fmt.Println(info.Mode().Perm().String())                 // -rwxrwxrwx        fmt.Printf("permissions: %#o\n", info.Mode().Perm())     // permissions: 0777}Go 結(jié)果不一致,因?yàn)閡gtrwxrwxrwx != 0777.文檔中的以下引用表明這可能是一個(gè)跨平臺(tái)兼容性問(wèn)題。FileMode 表示文件的模式和權(quán)限位。這些位在所有系統(tǒng)上都具有相同的定義,因此可以將有關(guān)文件的信息從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng)。并非所有位都適用于所有系統(tǒng)。唯一需要的位是目錄的 ModeDir。type FileMode uint32 定義的文件模式位是 FileMode 的最高有效位。九個(gè)最低有效位是標(biāo)準(zhǔn)的 Unix rwxrwxrwx 權(quán)限。這些位的值應(yīng)該被認(rèn)為是公共 API 的一部分,并且可以用于有線協(xié)議或磁盤(pán)表示:它們不能更改,盡管可能會(huì)添加新的位。這是 Go 的限制嗎?
查看完整描述

2 回答

?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

值得注意的是,除了八進(jìn)制表示不匹配之外,字符串表示也不匹配:


"-rwsrwsrwt" != "ugtrwxrwxrwx"`

這不是由于 Go 實(shí)現(xiàn)的限制,而是它以與系統(tǒng)無(wú)關(guān)的方式實(shí)現(xiàn)的結(jié)果。


從文檔(強(qiáng)調(diào)我的):FileMode


FileMode 表示文件的模式和權(quán)限位。這些位在所有系統(tǒng)上都具有相同的定義,因此可以將有關(guān)文件的信息從一個(gè)系統(tǒng)移動(dòng)到另一個(gè)系統(tǒng)。并非所有位都適用于所有系統(tǒng)。


因?yàn)閷?shí)現(xiàn)并不是為了模仿特定系統(tǒng)的行為,所以不能保證輸出與給定環(huán)境中的本機(jī)工具相匹配。但是,所有相關(guān)數(shù)據(jù)都可以使用。


如果你想模仿你的輸出,stat你可以編寫(xiě)一些邏輯來(lái)做到這一點(diǎn)。


這是一個(gè)處理八進(jìn)制表示的快速示例:


package main


import (

    "fmt"

    "os"

)


func UnixPerm(m os.FileMode) (p uint32) {

    p = uint32(m.Perm())

    if m & os.ModeSetuid != 0 {

        p |= 04000

    }

    if m & os.ModeSetgid != 0 {

        p |= 02000

    }

    if m & os.ModeSticky != 0 {

        p |= 01000

    }

    return p

}


func main() {

    info, _ := os.Stat("example_file")

    fmt.Printf("FileMode.Perm(): %04o\n", info.Mode().Perm())

    fmt.Printf("UnixPerm(): %04o\n", UnixPerm(info.Mode()))

}

輸出:


$ go run fileperm.go

FileMode.Perm(): 0777

UnixPerm(): 7777


$ stat --printf "Permissions: %a\n" example_file

Permissions: 7777



查看完整回答
反對(duì) 回復(fù) 2022-05-18
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

我需要使用 golang 來(lái)獲取給定文件的文件權(quán)限(特別是 SUID 位)

好的,添加這個(gè):fmt.Printf("File has SUID bit set: %t\n", info.Mode()&os.ModeSetuid != 0)

golang 結(jié)果不一致,因?yàn)?ugtrwxrwxrwx != 0777

info.Mode()info.Mode().Perm()是不同的東西,雖然相關(guān)。

info.Mode().Perm()包含 的子集info.Mode()。info.Mode().Perm()只是一個(gè)簡(jiǎn)單的便利功能,可以使用常量 mask 進(jìn)行按位與0777。

這是go的限制嗎?


查看完整回答
反對(duì) 回復(fù) 2022-05-18
  • 2 回答
  • 0 關(guān)注
  • 129 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)