Estou procurando um comando Linux que possa alterar a propriedade de todos os arquivos pertencentes a um determinado usuário, de preferência em um diretório de destino, para outro usuário especificado.
Meu comando dos sonhos seria algo como isto ...
chuser -R --olduser tom --newuser jerry
ou
chuser -R --olduser 1066 --newuser 1492
Este é o meu cenário ... Eu tenho um arquivo de backup (.tgz) com informações de usuário e grupo preservadas. Foi retirado de um servidor da Web executando Apache e MySQL. Os arquivos no backup são de todo o sistema e contêm arquivos de vários usuários diferentes e várias contas do tipo sistema, e é importante que, quando restaurados no novo servidor, as configurações não sejam perdidas. O problema é que os usuários na máquina em que os arquivos estão sendo restaurados para não corresponder aos do arquivo de backup. Por exemplo, ambas as máquinas tinham um usuário MySQL, mas eles têm diferentes IDs de usuário e existem vários IDs de usuário existentes nas duas máquinas que pertencem a usuários diferentes. Isso significa que não há como sincronizar os usuários na nova máquina com os da máquina antiga.
Eu posso encontrar todos os arquivos de usuários com o comando find assim ...
find /decompressed-backup-dir -uid 1050
ou
find /decompressed-backup-dir -user tom
Se, como suspeito, não há como fazer o que quero com um único comando, talvez haja uma maneira de canalizar os resultados do comando find para outro comando para lidar com a mudança de propriedade?
Eu poderia fazer isso com um script PHP, mas existem 4 GB e dezenas de milhares de arquivos no backup, por isso não quero usar PHP ou Perl, mas ficaria feliz com um script de shell capaz de lidar com isso.
fonte
-uid
usar-user
Eu acho que o comando --from flag on chown é provavelmente a maneira mais fácil.
fonte
brew install coreutils
egchown
.Adicionando à resposta do SiteKickr ,
chgrp
não há--from
argumento, mas você pode conseguir o mesmochown
omitindo o usuário.Exemplo:
fonte
Você pode usar
find
, como alguém postou, para fazer ochown
.No entanto, você pode não ter que
tar
cuidar das coisas para você.Por exemplo, se você fizer um
tar
emmachine A
onde o usuáriotom
estáuid 500
e, em seguida,untar
o arquivo nomachine B
qual o usuáriotom
éuid 505
,tar
vai fazer a coisa certa e fazer os arquivos de propriedade deuid 505
.fonte
A resposta define usuário e grupo:
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
mas se você quiser alterar SOMENTE o grupo de arquivos que pertence a algum usuário, não poderá usar
chown
(até onde eu saiba), mas usechgrp
:find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +
e para alterar SOMENTE o grupo de arquivos que pertence a algum grupo, você deve usar, por exemplo:
find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +
Apenas para adicionar conhecimento.
fonte
newuser
parte. A página de manual diz: "Se os dois pontos e o grupo forem fornecidos, mas o proprietário for omitido, apenas o grupo dos arquivos será alterado; nesse caso,chown
desempenha a mesma função quechgrp
."Se você precisar mapear recursivamente os IDs de propriedade antigos / novos que são resolvidos para o mesmo
/etc/passwd
usuário ,(o que pode acontecer depois que você introduz o LDAP no servidor e
/etc/passwd
tem entradas duplicadas para cada usuário e grupo),você poderia usar este script que escrevi: https://gist.github.com/siers/ded0a4158c900495f04c3ad965f4a544
Ele cria o mapeamento por conta própria. A interface do programa está, infelizmente, no código. Adicione algumas instruções de depuração se precisar investigar como ele faz o quê. Mas é praticamente um chown glorificado com um mapeamento criado a partir de duplicatas
/etc/passwd
. Se isso for útil para alguém, seria muito legal. :)fonte
Você pode usar
chown - R /directory/file
Este comando alterará a permissão para todas as instâncias do diretório
chown - R /directory
fonte