Como alterar a permissão e o proprietário do grupo de um arquivo ao mesmo tempo


9

Para alterar a permissão do arquivo, eu sei que poderia usar o chmod. Para mudar o proprietário do grupo, eu poderia usar o chgrp. No entanto, se eu quiser alterar a permissão e o proprietário ao mesmo tempo, qualquer comando que eu possa usar no Linux?

Por exemplo, há um arquivo com esta permissão e proprietário:

-rw-r--r--+  1 raymondtau  staff    0 May  8 16:38 WantToChangeThisFile

E agora eu quero mudar para:

---x-w--wx+  1 raymondtau  admin    0 May  8 16:38 WantToChangeThisFile

Eu sei que poderia usar este comando:, chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFilemas quero saber se existe alguma maneira legal de fazer isso.

Respostas:


9

Existe um conceito conhecido como "caminho UNIX". Cada ferramenta deve executar uma função simples. Se alguém precisar de uma função mais complexa, ele pode combinar ferramentas menores.

O oposto é o design monolítico quando toda a funcionalidade é agregada em uma ferramenta enorme.

Se você quiser fazer algo complexo - basta escrever um script, invocando ferramentas simples.


Aqui está um script que escrevi que combina essas ferramentas em uma função de shell ch,.
Keith

2
não há nenhuma maneira é uma resposta, o que ele pediu poderia ser alcançar com várias ferramentas já existentes, como rsync e apesar de Linux tendem a prefere uma ferramenta de uma função / que faz ferramentas significa fazer coisas múltipla são não existente
kiwy

@Kiwy Algumas ferramentas Linux não estão de acordo com os princípios unix-way e combinam diferentes funções de natureza diferente. Como systemd por exemplo.
precisa saber é o seguinte

1
@Kondybas "tendem a" é a parte importante da frase. existe uma exceção à regra. Ainda sua resposta para mim é realmente ruim.
Kiwy

9

Se você também deseja copiar o arquivo em algum lugar (como seu destino final), pode dar uma olhada no installcomando:

install -m 0777 -o root $sourcefile $destinationfile


1

Usar a ferramenta certa para o trabalho no * nix é importante, mas repetir o mesmo caminho em cada comando encadeado parece bobo. Em vez disso, você realmente deve usar variáveis ​​Bash e, em scripts menores, especialmente usar $_.

Seu comando se tornaria:

chmod 123 WantToChangeThisFile && chgrp admin $_

ALT +. faz o mesmo procedimento de puxar o último argumento usado em seu shell atual.


0

Rsync é útil neste caso:

Do Manual Fino (TM)

--chown = USER: mapeamento simples de nome de usuário / nome de grupo do GRUPO

--chmod = CHMOD afeta permissões de arquivo e / ou diretório

Então, por exemplo, você deseja chmod / mnt / lala / lala4000 / "ugo = rX" e chown "foo.bar"

rsync --chmod = ugo = rX --chown = foo: bar -rvtpolgh / mnt / lala / lala4000 / / mnt / lala / lala4000 /

Isso mostraria recursivamente e chmod o dir.


0

Você poderia alcançar uma meta com um longo rsynccomando

rsync -a --chown=root:root --chmod=F755 filename filename

Eu não entendi
Pierre.Vriens

Isso não é seguro: afetará todos os arquivos correspondentes no diretório e subdiretórios especificados, não apenas no arquivo apontado.
TelcoM 17/0118

-1

Você pode fazer chown username:groupname file ...para alterar os dois simultaneamente. Ele está alterando dois campos na mesma estrutura (inode), portanto, a combinação salva duas chamadas do sistema (uma para ler os valores atuais e outra para definir os vaules modificados).


chownapenas muda os proprietários. Como isso altera as permissões ao mesmo tempo que o OP solicitou? Nota O exemplo do OP também inclui a chmod.
jscott

Ah, pensei que ele queria mudar três coisas, como ele escreveu. Para mudar o dono do grupo, pensei que ele quis dizer grupo e dono.
Wurtel 8/15

-3
#!/bin/bash

# Setting the Variables for execution
LOGDIR=$HOME
CURRENTTIME=$(date +"%Y%m%d%s%H%M%S")
LOGFILE=${LOGDIR}/chgpermission_${CURRENTTIME}.log
MASTERFILE=$1
INDEX=0

# Checking the number of Parameters passed
if [ "$#" -ne 1 ]; then
    echo "Master file name is mandatory parameter" > ${LOGFILE}
    exit 1
fi

# Loading the Master file into an Array 
echo "Loading the Master file ${MASTERFILE} into an array" >> ${LOGFILE}
while read line
do
#echo $line  
MASTERARRAY[$INDEX]=$HOME/$line 
INDEX=$(expr $INDEX + 1) 
done < ${MASTERFILE}

echo "Number of parameters in an master array ${MASTERARRAY[@]}" >> ${LOGFILE}

# Changing the permission of the file 
echo "Changing the permission of the file in master file ${MASTERFILE}" >> ${LOGFILE} 
index=0
for index in "${MASTERARRAY[@]}"
do
    if [ -f "$index" ] 
    then
       echo "$index file exist"
       echo  "$index file exist" >> ${LOGFILE}
       chmod 755 "$index" 
       chown workstation "$index"
       chgrp workstation "$index" 
    else
      echo "$index file does not extst"
      echo "$index file does not exist" >> ${LOGFILE}  
    fi 
done 

2
você poderia pelo menos dar uma explicação de como ele funciona e como ele é suposto ser de uso (parâmetros quanto o que eles são ...)
kiwy

2
Não basta colar algum código como resposta.
precisa saber é o seguinte

É pouco provável que comentar seja produtivo; essa é a única coisa que esse usuário já postou e nem sequer se conectou desde então.
G-Man diz 'Reinstate Monica'
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.