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
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.
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
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.
Você pode alcançar um objetivo com um longo comando rsync
rsync -a --chown=root:root --chmod=F755 filename filename
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.
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.
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).
#!/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