Saya mencari perintah Linux yang dapat mengubah kepemilikan semua file milik pengguna tertentu, lebih disukai di direktori yang ditargetkan, ke pengguna tertentu lainnya.
Perintah mimpi saya akan terlihat seperti ini ...
chuser -R --olduser tom --newuser jerry
atau
chuser -R --olduser 1066 --newuser 1492
Ini adalah skenario saya ... Saya punya file cadangan (.tgz) dengan informasi pengguna dan grup tersimpan di dalamnya. Itu diambil dari server web yang menjalankan Apache dan MySQL. File dalam cadangan berasal dari seluruh sistem dan berisi file dari beberapa pengguna yang berbeda dan beberapa akun jenis sistem dan itu adalah kunci bahwa ketika dikembalikan ke server baru pengaturan tidak hilang. Masalahnya adalah bahwa pengguna pada mesin file sedang dipulihkan untuk tidak cocok dengan yang ada di file cadangan. Misalnya kedua mesin memiliki pengguna MySQL tetapi mereka memiliki id pengguna yang berbeda dan ada beberapa id pengguna yang ada di kedua mesin milik pengguna yang berbeda. Ini berarti tidak ada cara untuk menyinkronkan pengguna di mesin baru dengan yang di mesin lama.
Saya dapat menemukan semua file pengguna dengan perintah find seperti ini ...
find /decompressed-backup-dir -uid 1050
atau
find /decompressed-backup-dir -user tom
Jika, seperti yang saya duga, tidak ada cara untuk melakukan apa yang saya inginkan dengan satu perintah maka mungkin ada cara untuk menyalurkan hasil dari perintah find ke perintah lain untuk menangani perubahan kepemilikan?
Saya bisa melakukan ini dengan skrip PHP tetapi ada 4GB dan puluhan ribu file dalam cadangan jadi saya tidak ingin menggunakan PHP atau Perl tetapi saya akan senang dengan skrip shell yang bisa mengatasinya.
sumber
-uid
saya menggunakan-user
Saya pikir flag --from pada perintah chown mungkin adalah cara termudah.
sumber
brew install coreutils
dangchown
.Menambahkan ke jawaban oleh SiteKickr ,
chgrp
tidak memiliki--from
argumen, tetapi Anda dapat mencapai hal yang sama denganchown
menghilangkan pengguna.Contoh:
sumber
Anda dapat menggunakan
find
, seperti yang diposting orang lain, untuk melakukannyachown
.Namun, Anda mungkin tidak perlu karena
tar
akan mengurus hal-hal untuk Anda.Misalnya, jika Anda membuat
tar
dimachine A
mana penggunatom
beradauid 500
dan kemudianuntar
file dimachine B
mana penggunatom
beradauid 505
,tar
akan melakukan hal yang benar dan membuat file miliknyauid 505
.sumber
The jawaban set kedua pengguna dan kelompok:
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
tetapi jika Anda ingin mengubah HANYA sekelompok file milik beberapa pengguna Anda tidak dapat menggunakan
chown
(sejauh yang saya tahu), tetapi sebaliknya gunakanchgrp
:find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +
dan untuk mengubah HANYA sekelompok file milik beberapa kelompok yang harus Anda gunakan misalnya .:
find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +
Sekadar menambah ilmu.
sumber
newuser
bagian itu. Halaman manual mengatakan: "Jika titik dua dan grup diberikan, tetapi pemiliknya dihilangkan, hanya grup file yang diubah; dalam hal ini,chown
lakukan fungsi yang sama denganchgrp
."Jika Anda perlu memetakan ID kepemilikan lama / baru secara rekursif yang diselesaikan untuk
/etc/passwd
pengguna yang sama ,(yang bisa terjadi setelah Anda memperkenalkan LDAP ke server dan
/etc/passwd
memiliki entri duplikat untuk setiap pengguna dan grup),Anda dapat menggunakan skrip ini yang saya tulis: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
Ini menciptakan pemetaan sendiri. Sayangnya, antarmuka program ada dalam kode. Tambahkan beberapa pernyataan debug jika Anda perlu menyelidiki bagaimana ia melakukan apa. Tapi itu cukup banyak chown dimuliakan dengan pemetaan yang dibuat dari duplikat di
/etc/passwd
. Jika ini berguna bagi siapa pun, itu akan sangat keren. :)sumber
Anda dapat gunakan
chown - R /directory/file
Perintah ini akan mengubah izin untuk semua instance direktori
chown - R /directory
sumber