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

7

Para alterar a permissão do arquivo, sei que posso usar o chmod. Para alterar 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 essa permissão e proprietário:

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

E agora quero alterá-lo para:

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

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

    
por Raymond Tau 08.05.2015 / 10:43

7 respostas

9

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

install -m 0777 -o root $sourcefile $destinationfile

    
por 08.05.2015 / 11:18
8

Existe um conceito conhecido como "UNIX-way". 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 dentro de uma ferramenta enorme.

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

    
por 08.05.2015 / 10:57
1

Você pode alcançar um objetivo com um longo comando rsync

rsync -a --chown=root:root --chmod=F755 filename filename
    
por 17.01.2018 / 09:46
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ê deve usar variáveis Bash e, em scripts menores, usar especialmente $_ .

Seu comando se tornaria:

chmod 123 WantToChangeThisFile && chgrp admin $_

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

    
por 19.06.2018 / 00:24
0

O rsync é útil neste caso:

Do Fine Manual (TM)

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

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

Então, por exemplo, você quer 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 iria chover recursivamente e chmod a dir.

    
por 10.11.2017 / 17:59
-2

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

    
por 08.05.2015 / 14:38
-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 
    
por 05.10.2016 / 05:18