Bagaimana saya bisa mendapatkan izin file dalam format oktal?

0

... dan bagaimana saya bisa mengaturnya? Apakah ini berfungsi untuk direktori dengan cara yang sama? Apa yang terjadi dengan sedikit lengket dan hal-hal yang lebih "eksotis"?

Gustave
sumber

Jawaban:

2

Seperti yang disarankan oleh @Gustave , statprogram (yang merupakan bagian dari GNU coreutils dan pada dasarnya program "Linux" untuk alasan itu, meskipun Anda mungkin memiliki port atau paket dalam sistem BSD) dapat melakukan ini. Perintah

stat -c "%a %n"mengajukan

menghasilkan daftar diformat hanya dengan mode oktal (termasuk bit setuid, setgid dan sticky dikodekan) dan nama file. Menurut dokumentasi

  • %a adalah "Hak akses dalam oktal"
  • %n adalah "Nama file"

Misalnya, diberikan skrip ini:

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

Anda mungkin melihat output seperti ini dari 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

Anda akan melihat 3 atau 4 digit oktal dikembalikan untuk hak akses , tergantung pada apakah setuid, dll. Diatur. Digit terdepan (keempat) bergabung

  • 4 (setuid)
  • 2 (setgid)
  • 1 (lengket)

The hak akses kembali mengecualikan bit ekstra dikembalikan oleh system call statyang mengatakan apakah nama adalah direktori ( S_IFDIR) atau berkas ( S_IFREG). Omong-omong, semua bit tersebut masuk ke dalam nilai 16-bit karena implementasi Unix yang lama di tahun 1970-an dan awal 1980-an — dan memiliki nilai standar . Karena hak akses mengecualikan jenis file, Anda dapat menggunakan nilai apa adanya pada chmodperintah (dan juga chmodfungsi), karena itu oktal, dan chmodperintah mengharapkan itu. Bahkan setuid, dll, bekerja dengan oktal meskipun hal-hal seperti

chmod u+s /usr/bin/whatever

lebih mudah dibaca.

Untuk bacaan lebih lanjut

Thomas Dickey
sumber
0
stat -c "%a %n" <file>

tampaknya bekerja - tetapi saya tidak tahu lebih banyak.

Gustave
sumber
0

Mendapatkan: seperti yang dijawab Gustave.

Pengaturan:

chmod 0755 myfile

Sama untuk direktori. Untuk bit sticky, digit pertama harus 1. Tentang bit sticky: https://askubuntu.com/a/432703

Josh Vazquez
sumber