Comment changer l'autorisation et le propriétaire du groupe d'un fichier en même temps


9

Pour changer l'autorisation de fichier, je sais que je pourrais utiliser chmod. Pour changer de propriétaire de groupe, je pourrais utiliser chgrp. Cependant, si je veux changer à la fois l'autorisation et le propriétaire, n'importe quelle commande que je pourrais utiliser sur Linux?

Par exemple, il existe un fichier avec cette autorisation et ce propriétaire:

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

Et maintenant, je veux le changer en:

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

Je sais que je pourrais utiliser cette commande:, chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFilemais je veux savoir s'il y a une bonne façon de le faire.

Réponses:


9

Il existe un concept connu sous le nom de "voie UNIX". Chaque outil doit exécuter une fonction simple. Si l'on a besoin d'une fonction plus complexe, il peut combiner des outils plus petits.

Le contraire est la conception monolitique lorsque toutes les fonctionnalités sont regroupées dans un seul outil énorme.

Si vous voulez faire quelque chose de complexe, écrivez simplement un script en invoquant des outils simples.


Voici un script que j'ai écrit qui combine ces outils dans une fonction shell, ch.
Keith

2
il n'y a aucun moyen que ce soit une réponse, ce qu'il a demandé pourrait être réalisé avec plusieurs outils déjà existants tels que rsync et bien que linux ait tendance à préférer un outil / une fonction, cela signifie que les outils faisant plusieurs choses n'existent pas
Kiwy

@Kiwy Certains outils Linux ne sont pas conformes aux principes Unix-Way et combinent différentes fonctions de nature différente. Comme systemd par exemple.
Kondybas

1
@Kondybas "a tendance à" est la partie importante de la phrase. il existe une exception à la règle. Pourtant, votre réponse est vraiment mauvaise.
Kiwy

9

Si vous souhaitez également copier le fichier quelque part (comme sa destination finale), vous pouvez consulter la installcommande:

install -m 0777 -o root $sourcefile $destinationfile


1

Il est important d'utiliser le bon outil pour le travail dans * nix, mais en effet, répéter le même chemin dans chaque commande chaînée semble idiot. Au lieu de cela, vous devriez vraiment utiliser des variables Bash, et dans des scripts plus petits, surtout utiliser $_.

Votre commande deviendrait:

chmod 123 WantToChangeThisFile && chgrp admin $_

ALT +. fait la même chose en tirant le dernier argument utilisé dans votre shell actuel.


0

Rsync est utile dans ce cas:

Extrait du Fine Manual (TM)

--chown = USER: Mappage de nom d'utilisateur / nom de groupe simple GROUP

--chmod = CHMOD affecte les permissions des fichiers et / ou des répertoires

Ainsi, par exemple, vous voulez chmod / mnt / lala / lala4000 / "ugo = rX" et chown "foo.bar"

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

Ce serait récursivement chown et chmod le dir.


0

Vous pourriez atteindre un tel objectif avec une longue rsynccommande

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

je ne comprends pas
Pierre.Vriens

Ce n'est pas sûr: cela affectera tous les fichiers correspondants dans le répertoire et les sous-répertoires spécifiés, pas seulement le fichier vers lequel il pointe.
telcoM

-1

Vous pouvez faire chown username:groupname file ...pour changer les deux simultanément. Il change deux champs dans la même structure (inode), donc sa combinaison économise deux appels système (un pour lire les valeurs actuelles et un pour définir les vaules modifiés).


chownne change que les propriétaires. Comment cela modifie-t-il les autorisations en même temps que l'OP demandé? Remarque L'exemple d'OP comprend également un chmod.
jscott

Ah, je pensais qu'il voulait changer 3 choses, comme il l'a écrit Pour changer de propriétaire de groupe, je pensais qu'il voulait dire groupe et propriétaire.
wurtel

-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
vous pourriez au moins expliquer comment cela fonctionne et comment il est censé être utilisé (paramètres combien ils sont ...)
Kiwy

2
Veuillez ne pas simplement coller du code comme réponse.
Konrad Gajewski

Il est peu probable que les commentaires soient productifs; c'est la seule chose que cet utilisateur ait posté, et il ne s'est même plus connecté depuis.
G-Man dit `` Réintègre Monica '' le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.