Bir kullanıcıya ait tüm dosyaları başka bir kullanıcıya nasıl değiştirebilirim?


39

Belirli bir kullanıcıya ait, tercihen hedeflenmiş bir dizindeki tüm dosyaların sahipliğini, belirtilen bir kullanıcıya değiştirebilecek bir Linux komutu arıyorum.

Benim rüyamdaki emir bunun gibi bir şey olurdu

chuser -R --olduser tom --newuser jerry

veya

chuser -R --olduser 1066 --newuser 1492

Bu benim senaryomu ... İçinde kullanıcı ve grup bilgileri bulunan bir yedek dosyam (.tgz) var. Apache ve MySQL çalıştıran bir web sunucusundan alındı. Yedeklemedeki dosyalar sistem genelindedir ve birkaç farklı kullanıcıdan ve birkaç sistem türü hesabından dosya içerir ve yeni sunucuya geri yüklendiğinde ayarların kaybolmaması önemlidir. Sorun, makinedeki kullanıcıların geri yüklenen kullanıcıların yedekleme dosyasındakilerle eşleşmemeleridir. Örneğin, her iki makinenin de bir MySQL kullanıcısı vardı, ancak farklı kullanıcı kimlikleri var ve her iki makinede de farklı kullanıcılara ait birkaç kullanıcı kimliği var. Bu, yeni makinedeki kullanıcıları eski makinedekilerle senkronize etmenin bir yolu olmadığı anlamına gelir.

Tüm kullanıcı dosyalarını bu şekilde find komutu ile bulabilirim ...

find /decompressed-backup-dir -uid 1050

veya

find /decompressed-backup-dir -user tom

Eğer şüphelendiğim gibi, tek bir komutla istediğimi yapmanın bir yolu yoksa, belki de sahip olma değişikliğini ele almak için find komutunun sonuçlarını başka bir komuta aktarmanın bir yolu olabilir mi?

Bunu bir PHP betiği ile yapabilirim ama 4GB'lık ve on binlerce dosya var, bu yüzden PHP veya Perl kullanmak istemiyorum ama işleyebilecek bir kabuk betiği ile mutlu olurdum.

Yanıtlar:


30

Gibi bir şey

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

1
yerine -uidkullandım-user
alexandre1985

65

Sanırım - chown komutundaki bayraktan muhtemelen en kolay yol.

chown --from=oldguy newguy * -R

3
En iyi çözüm, aşkı bulmaya gerek yok
Tobias Hagenbeek

2
Optimal çözüm
Karl Forner

1
OS X'te brew install coreutilsve ile yapabilirsiniz gchown.
jomo,

Bu doğru ve en iyi cevap.
George M,

Onaylıyorum, en iyi cevap olarak işaretlenmeli.
Soullivaneuh

7

Ekleyerek SiteKickr tarafından cevap , chgrpyok --fromargüman, ancak aynı elde edebilirsiniz chownkullanıcıyı atlanması ile.

Örnek:

chown -R --from=:currentgroup :newgroup /some/directory

6

Bunu findyapmak için, yayınlanan bir başkası olarak kullanabilirsiniz chown.

Ancak, sizin için işleri halledecek kadar olması gerekmeyebilir tar.

Örneğin, eğer bir hale tarüzerinde machine Akullanıcı nerede tomolduğunu uid 500ve daha sonra untardosya machine Bkullanıcı nerede tomolduğunu uid 505, tardoğru olanı yapacak ve sahip olduğu dosyaların yapmak uid 505.


İlginç bir haberleşme, bunun farkında değildim. Yani katran sadece kullanıcı kimliğini değil aynı zamanda kullanıcı kimliğiyle ilişkili adı da depolar.
Nicholi

3
Orijinal tar formatı sadece sayısal bilgileri saklar. 80'lerin sonlarında POSIX tarafından tanıtılan UStar formatı isimleri ekliyor. Bu günlerde karşılaştığınız herhangi bir katran doğru şeyi yapıyor.
Ciclamino

1

Cevap kullanıcı ve grup hem ayarlar:

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

ancak SADECE bazı kullanıcılara ait dosya grubunu değiştirmek istiyorsanız kullanamazsınız chown(bildiğim kadarıyla), ancak şunu kullanın chgrp:

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

ve SADECE bazı gruplara ait olan dosya grubunu değiştirmek için, örneğin:

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

Sadece bilgi eklemek için.


1
Aslında, sadece newuserparçayı bırakabilirsin . Man sayfasında: "Eğer iki nokta üst üste ve gruba verilirse, ancak sahip atlanırsa, sadece dosya grubu değiştirilir; bu durumda, chownaynı işlevi görür chgrp."
Ben Voigt

0

Eğer gerekiyorsa yinelemeli kararlılığının aynı eski / yeni sahiplik kimlikleri map /etc/passwdkullanıcıya ,

(LDAP'yi sunucuya girdikten sonra gerçekleşebilir ve /etc/passwdher kullanıcı ve grup için yinelenen girişler yaptıktan sonra ),

Yazdığım bu betiği kullanabilirsiniz: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544

Haritalamayı kendi başına yaratır. Programın arayüzü ne yazık ki kodda. Ne yaptığını araştırmanız gerekirse, bazı hata ayıklama ifadeleri ekleyin. Ancak bu , kopyalardan oluşturulmuş bir eşleme ile yüceltilmiş bir çizimdir/etc/passwd . Eğer bu hiç kimse için faydalıysa, bu gerçekten iyi olurdu. :)


-2

Kullanabilirsiniz chown - R /directory/file

Bu komut dizinin tüm örnekleri için izinleri değiştirecek chown - R /directory

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.