Salin izin pemilik file ke izin grup

25

Bagaimana saya bisa menyalin izin pengguna / pemilik file ke izin grup itu?

Sebagai contoh jika izin 755 saya ingin mereka menjadi 775.

Klarifikasi: 755 -> 775 123 -> 113 abc -> aac

Bonus jika saya bisa melakukan ini secara rekursif untuk semua file dalam direktori.

(Yaitu, untuk setiap file izin pemilik disalin ke izin grup. Setiap file mungkin memiliki izin yang berbeda.)

Annan
sumber
Saya tidak yakin untuk mengerti. Anda ingin mengubah izin pada direktori / file agar izin grup menjadi seperti pemilik? Jika demikian, maka hanya bermain-main dengan chmod. Saya dapat menunjukkan kepada Anda contoh yang lebih eksplisit dalam jawaban saya jika Anda mau.
Anarko_Bizounours
Dalam jawaban Anda itu mengubah semua file menjadi 775. Bagaimana jika salah satu file awalnya memiliki izin 123? Maka harus diubah menjadi 113 dan bukan 775. Izin yang saya gunakan dalam pertanyaan (755) hanyalah sebuah contoh, izin yang sebenarnya mungkin apa saja. Saya ingin melakukan ini secara terprogram.
Annan
nomor setelah chmod hanyalah izin komersial. Jika Anda melakukan ls -l dan Anda mendapatkan 452 sebagai izin, maka cukup ke chmod 442 / you_directory /. Semuanya dijelaskan (cukup baik) di halaman wikipedia yang saya tautkan ke jawaban saya.
Anarko_Bizounours
ini tampaknya merupakan pertanyaan duplikat dari serverfault.com/questions/241082/…
ShoeLace

Jawaban:

54

Anda dapat menggunakan g=uuntuk membuat perms grup sama dengan perms pengguna

ls -l file
-rw------- 1 user users 0 Jun 27 13:47 file

chmod g=u file

ls -l file
-rw-rw---- 1 user users 0 Jun 27 13:47 file

dan secara rekursif

chmod -R g=u *

atau untuk beberapa filespec

find /patch/to/change/perms -name '*.txt' -exec chmod g=u {} +

yang manualnya chmod adalah teman Anda.

user9517 mendukung GoFundMonica
sumber
cara yang baik untuk melakukannya! Saya lupa trik ini setiap kali xD
Anarko_Bizounours
Belum pernah mendengar trik ini! Berguna satu.
skinp
Itu g=utrik hanya menyelamatkan saya jam manajemen membosankan. Ada +1 ;-)
Edurne Pascual
Saya memiliki banyak file yang dimiliki oleh pengguna saya yang ingin saya bagikan dengan semua pengguna. jadi saya lakukanchmod -R ag=u ${path_to_directory}
Trevor Boyd Smith
2

Seperti yang dikatakan orang, mengubah izin file bisa berbahaya. Dengan kekuatan besar datang tanggung jawab besar, dan semua shizas itu. Ini jawaban saya:

file / usr / bin / otog:

#!/bin/sh

f=$1
p=`stat -c "%a" $f`
chmod ${p:0:1}${p:0:1}${p:2:1} $f

Contoh penggunaan:

find . -exec otog {} \;

Menggunakan stat untuk mendapatkan izin numerik, gunakan chmod untuk mengubah izin.

PS: Silakan lihat jawaban Iain untuk cara yang lebih baik dalam melakukan ini!

Annan
sumber
1
Bukankah seharusnya $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1}?
minaev
Ya benar. Anehnya, cara saya juga.
Annan
Seseorang tolong jelaskan downvote?
Annan
Bukan saya, tetapi saya ingin memberikan kompensasi. Ini adalah solusi bagus yang berfungsi.
minaev
1
Menurut saya lebih aman menggunakan perintah berbahaya dalam skrip daripada secara manual. Dalam skrip yang diuji dengan baik, yaitu :). Di sisi lain, chmodjauh dari menjadi perintah yang benar-benar berbahaya. Dibandingkan dengan rm, maksud saya, atau rsync --deleteorang lain.
minaev
1

Pertama-tama, Anda perlu mendaftarkan hak Anda.

ls -l /your_directory/
-rwxr-xr-x  1   57 Jul  3 10:13  file1
-rwxr-xr-x  1   57 Jul  3 10:13  file2

untuk menerjemahkan hasil dalam izin numerik, gunakan ini: R = 4, W = 2, X = 1.

Jadi pada 2 file ini izinnya adalah 755.

Setelah mendapatkan hak Anda, Anda harus menggunakan perintah chmod untuk mengubah cara yang Anda inginkan:

chmod 775 /your_directory/

Perintah ini hanya akan mengubah hak pada direktori, tetapi tidak pada file di dalamnya.

Jika Anda ingin mengubah bagian dalam juga, lakukan perintah ini:

chmod 775 /your_directory/ -fR

-FR akan memaksa recursivity. (gunakan hanya jika Anda yakin akan hak yang ingin Anda terapkan, dan file di dalam direktori.)

Jika Anda hanya ingin mengubah hak pada file1 maka:

chmod 775 /your_directory/file1

Dan itu cara kue hancur!

/! \ Hati-hati, penyalahgunaan perintah ini dapat menghancurkan semua izin OS Anda dan menyebabkan kegagalan fungsi. /! \

ps: lihat di sana untuk mengetahui informasi lebih lanjut tentang chmod.

Semoga ini bisa membantu Anda.

Anarko_Bizounours
sumber
Saya telah menambahkan beberapa klarifikasi untuk pertanyaan itu. File-file mungkin tidak memiliki izin pemilik yang sama, jadi jika chmod akan digunakan, harus ada cara mengekstraksi izin pemilik sebelum meneruskannya ke chmod?
Annan
itu rumit, tetapi perintah ls-l harus memberi Anda izin, tetapi akan berada dalam bentuk ini -rw-rw-r--. Masalahnya adalah Anda TIDAK HARUS menggunakan skrip untuk bekerja dengan chmod! Anda harus terlebih dahulu mendapatkan semua izin dari file. Kemudian chmod untuk memiliki hak yang baik untuk grup. Saya akan mengedit jawaban saya untuk menunjukkan contoh.
Anarko_Bizounours