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.

Raymond Tau
fonte

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.

Kondybas
fonte
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

Konrad Gajewski
fonte
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.

Zebouski
fonte
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.

purpaboo
fonte
0

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

rsync -a --chown=root:root --chmod=F755 filename filename
vern
fonte
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).

Wurtel
fonte
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 
shredish umredkar
fonte
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'