Como modificar a permissão do arquivo jar exatamente igual ao outro arquivo jar da máquina? [duplicado]

1

Eu tenho duas máquinas, no meu machineA eu tenho um arquivo jar com essas permissões -

-rwxr-xr-x 1 cronus app 16758150 2013-03-19 13:35 exhibitor-1.5.1-jar-with-dependencies.jar

No meu outro machineB , tenho um mesmo arquivo jar mas com permissões diferentes -

-rw-r--r-- 1 root messagebus 19340260 Nov 25 14:28 exhibitor-1.5.1-jar-with-dependencies.jar

Como tornar a permissão do arquivo jar do machineB igual ao arquivo jar do machineA? Em resumo, como obtenho essa permissão -rwxr-xr-x que posso aplicar no arquivo jar do machineB?

E, além disso, alguém pode me explicar como funciona essa permissão e o que isso significa?

UPDATE: -

Obrigado Jordan pelo link, eu posso entender seu significado agora ..

    
por SSH 19.12.2013 / 01:42

2 respostas

0

As colunas de permissão na saída ls formam três grupos: u ser, g e o . Cada grupo corresponde a uma classe de usuários: o proprietário do arquivo, outros usuários além do proprietário que estão no grupo do arquivo¹ e todos os outros. Você pode defini-los com chmod , especificando as três colunas na ordem:

chmod u=rwx,g=r-x,o=r-x somefile

Você pode escrever as partes em uma ordem diferente, por exemplo %código%. É comum usar a mesma ordem que na saída chmod o=r-x,u=rwx,g=r-x somefile apenas para ser consistente.

Você também pode passar modos numéricos. Eles são mais fáceis de digitar, mas você precisa saber como eles funcionam. Cada dígito corresponde a um dos grupos; adicione 1 para ls -l , 2 para x e 4 para w . Por exemplo, 7 é tudo; 5 é lido e executado, mas não é escrito.

chmod 755 somefile

Wikipedia e muitos outros documentos sobre permissões de arquivos unix têm todos os detalhes.

Você pode salvar e restaurar permissons com o getfacl e setfacl utilitários. Eles são exagerados em casos simples como esse, mas eles podem processar um diretório inteiro de uma só vez e eles lidam com listas de controle de acesso além de permissões básicas de arquivo.

getfacl file1 file2 >permissions.txt
…
setfacl --restore=permissions.txt

¹ Tecnicamente, processa cujo GID efetivo ou um de cujos GIDs suplementares é o grupo que possui o arquivo. Sim, não se preocupe com isso por agora.

    
por 19.12.2013 / 02:17
0

Se você estiver disposto a usar python (em ambas as máquinas), este pequeno fragmento de python mostra como puxar as permissões em um arquivo e aplicá-las a outro. Ele usa o módulo paramiko em python para lidar com a comunicação entre máquinas e aplicar as permissões de um arquivo no primeira caixa para o outro arquivo no segundo. Você pode derrubar paramiko com fácil instalação ou pip ou o que for.

import os
from stat import *
import paramiko

if __name__ == '__main__':

    # make a first test file and open up the permissions on it to
    # everything and anything:
    os.system('touch /tmp/file_1')
    os.system('chmod 777 /tmp/file_1')

    # make a second test file with more restrictive permissions:
    os.system('touch /tmp/file_2')
    os.system('chmod 644 /tmp/file_2')

    # let's talk to the first box:
    ssh_1 = paramiko.SSHClient()

    # make sure paramiko won't complain about unknown hosts:
    ssh_1.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # connect:
    ssh_1.connect('localhost', username='yourUserName', password='yourPassword')

    # now use os.stat in python to get the permissions:
    stdin, stdout, stderr = ssh_1.exec_command('''python -c "from stat import *; import os; print os.stat('/tmp/file_1')[0]" ''')    

    # and parse the result taken from box one:
    stdoutFirstBox = stdout.readlines()

    permissions_1 = int(stdoutFirstBox[0].strip('\n'))


    # now apply the permissions from the first test file to the
    # second:
    ssh_2 = paramiko.SSHClient()

    # make sure paramiko won't complain about unknown hosts:
    ssh_2.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # connect:
    ssh_2.connect('localhost', username='yourUserName', password='yourPassword')

    # now use os.chmod to apply the permissions from the first to the second
    stdin, stdout, stderr = ssh_2.exec_command('''python -c "import os; os.chmod('/tmp/file_2', {0})" '''.format(permissions_1))    

Eu trapaceei um pouco aqui por sshing duas vezes para a minha própria máquina, mas com pequenas modificações eu acho que funcionaria para você. Se você tivesse que escalar até diretórios inteiros de arquivos, você teria que ficar mais chique, mas a base para essa abordagem funcionaria, eu acho.

    
por 19.12.2013 / 02:04