如何取得八進位格式檔案的權限?

如何取得八進位格式檔案的權限?

....我該如何設定它們?這對目錄也同樣有效嗎?黏性位和那些更「異國情調」的東西會發生什麼?

答案1

正如建議的@古斯塔夫,該stat程式(它是GNU 核心工具因此本質上是一個“Linux”程序,儘管您可能有一個港口或者包裹在 BSD 系統中)可以做到這一點。命令

stat -c "%a %n"文件

產生僅包含八進位模式(包括 setuid、setgid 和黏性位元編碼)和檔案名稱的格式化清單。根據文件

  • %a是“八進制訪問權限”
  • %n是“文件名”

例如,給定這個腳本:

#!/bin/sh
for name in $*
do       
    ls -ld "$name"
    stat -c '%a %n' "$name"
done

您可能會看到以下輸出myscript /usr/bin /usr/bin/X /usr/bin/bsd-write

drwxr-xr-x 5 root root 118784 Jul 11 19:55 /usr/bin
755 /usr/bin
-rwsr-sr-x 1 root root 9232 Dec 16  2011 /usr/bin/X
6755 /usr/bin/X
-rwxr-sr-x 1 root tty 11000 Jun 17  2010 /usr/bin/bsd-write
2755 /usr/bin/bsd-write

您將看到返回 3 或 4 個八進制數字訪問權,取決於是否設定了setuid等。前導(第四個)數字組合

  • 4(設定ID)
  • 2(設定gid)
  • 1(黏性)

訪問權傳回排除系統呼叫傳回的額外位stat它告訴我們該名稱是目錄 ( S_IFDIR) 還是檔案 ( S_IFREG)。順便說一句,由於 20 世紀 70 年代和 20 世紀 80 年代早期的 Unix 實現,所有這些位元都適合 16 位值,並且標準值。因為訪問權排除文件類型,您可以在命令中按原樣使用該值chmod(也可以使用chmod函數),因為它是八進制的,並且chmod命令期望如此。即使是 setuid 等,也可以使用八進制,儘管像

chmod u+s /usr/bin/whatever

更具可讀性。

供進一步閱讀

答案2

stat -c "%a %n" <file>

似乎有效 - 但我不知道更多。

答案3

得到:正如古斯塔夫所回答的。

環境:

chmod 0755 myfile

對於目錄也是如此。對於黏滯位,第一位數字應為 1。https://askubuntu.com/a/432703

相關內容