Bir dosyanın sahip izinlerini grup izinlerine kopyala


25

Bir dosyanın kullanıcı / sahip izinlerini grup izinlerine nasıl kopyalayabilirim?

Örneğin, izinler 755 ise, 775 olmalarını istiyorum.

Açıklama: 755 -> 775 123 -> 113 abc -> aac

Bonus, bir dizindeki tüm dosyalar için yinelemeli olarak yapabilirsem.

(Yani, her dosya için sahibinin izinleri grup izinlerine kopyalanır. Her dosyanın farklı izinleri olabilir.)


Anladığımdan emin değilim. Grup izninin sahibi gibi olması için dizin / dosyalar üzerindeki iznini değiştirmek ister misiniz? Eğer öyleyse, o zaman sadece chmod ile oynayın. İsterseniz cevabımda size daha açık bir örnek gösterebilirim.
Anarko_Bizounours

Cevabınıza göre tüm dosyaları 775 olarak değiştirir. Ya dosyalardan biri başlangıçta 123 iznine sahipse? Öyleyse 113'e değil 775'e değiştirilmelidir. Soruda kullandığım izin (755) sadece bir örnek, gerçek izin herhangi bir şey olabilir. Bunu programlı olarak yapmak istiyorum.
Annan

chmod'dan sonraki sayı sadece sayısal izindir. Bir ls -l yaparsanız ve izin olarak 452 alırsanız, o zaman sadece 442 / you_directory / chmod. Her şey (oldukça iyi) wikipedia sayfasında açıklamak için cevabımı açıkladı.
Anarko_Bizounours

Yanıtlar:


54

g=ugrup izinlerini kullanıcı izinleri ile aynı yapmak için kullanabilirsiniz

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

ve özyinelemeli

chmod -R g=u *

veya bazı filespec için

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

chmod manpage senin arkadaşın.


Bunu yapmak için iyi bir yol! Her seferinde bu numarayı unuttum xD
Anarko_Bizounours

Bu numarayı hiç duymadım! Faydalı olanı.
skinp, hazi

Bu g=unumara bana saatler süren sıkıcı yönetim kazandırdı. Bir +1 ;-) var
Edurne Pascual

Kullanıcımın sahip olduğu ve tüm kullanıcılarla paylaşmak istediğim bir sürü dosya vardı. Ben de yaptımchmod -R ag=u ${path_to_directory}
Trevor Boyd Smith,

2

İnsanların söylediği gibi, dosya izinlerini değiştirmek tehlikeli olabilir. Büyük bir güçle büyük bir sorumluluk gelir ve tüm bu hizas Bu benim cevabım:

/ usr / bin / otog dosyası:

#!/bin/sh

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

Örnek kullanım:

find . -exec otog {} \;

Sayısal izinler almak için stat kullanır , izinleri değiştirmek için chmod kullanır .

Not: Lütfen bunu yapmanın daha iyi bir yolu için Iain'in cevabına bakın!


1
$ {P: 0: 1} $ {p: 0: 1} $ {p: 2: 1} olmamalı mıydı?
minaev

Evet, haklısın. Benim de tuhaf bir şekilde çalıştı.
Annan

Birisi lütfen aşağı oylamayı açıklar mı?
Annan

Ben değilim, ama telafi etmek isterim. Bu işe yarayan iyi bir çözümdür.
minaev

1
Tehlikeli komutları komut dosyalarında el ile kullanmaktan daha güvenli olduğunu söyleyebilirim. İyi test edilmiş betiklerde, bu :). Öte yandan, chmodgerçekten, gerçekten tehlikeli bir komut olmaktan uzak. Karşılaştırıldığında rm, yani, ya rsync --deleteya da bazı diğerleri.
minaev

1

Her şeyden önce hakkınızı listelemeniz gerekir.

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

sonucu sayısal izinle çevirmek için şunu kullanın: R = 4, W = 2, X = 1.

Yani bu 2 dosyada izin 755.

Hakkınızı aldıktan sonra, istediğiniz şekilde değiştirmek için chmod komutunu kullanmanız gerekir:

chmod 775 /your_directory/

Bu komut yalnızca dizindeki hakkı değiştirir, ancak içindeki dosyayı değiştirmez.

İçerideki hakkı da değiştirmek istiyorsanız, şu komutu uygulayın:

chmod 775 /your_directory/ -fR

-FR özyineliliği zorlayacaktır. (yalnızca uygulamak istediğiniz haktan ve dizinin içindeki dosyadan eminseniz kullanın.)

Yalnızca dosya1'deki hakkı değiştirmek istiyorsanız:

chmod 775 /your_directory/file1

Ve bu çerezlerin parçalanacağı şekilde!

/! \ Dikkatli olun, bu komutun kötüye kullanılması tüm işletim sistemi izinlerinizi imha edebilir ve hatalı çalışmasına neden olabilir. /! \

ps: chmod hakkında daha fazla bilgi edinmek için oraya bakın .

Umarım bu size yardımcı olur.


Soruya bazı açıklamalar ekledim. Dosyalar aynı sahip izinlerine sahip olmayabilir, bu nedenle chmod kullanılacaksa, sahip izinlerini chmod'a aktarmadan önce çıkarmanın bir yolu olmalı?
Annan

zor, ancak ls -l komutu size izin vermeli, ancak bu şekilde olacaktır -rw-rw-r--. Sorun şu ki, chmod ile çalışmak için bir komut dosyası kullanmamalısınız! ilk önce dosyadan tüm izinleri almalısınız. O zaman grup için iyi haklara sahip olacaksın. Bir örnek göstermek için cevabımı düzenleyeceğim.
Anarko_Bizounours
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.