[unix] 파일의 권한과 그룹 소유자를 동시에 변경하는 방법

파일 권한을 변경하기 위해 chmod를 사용할 수 있음을 알고 있습니다. 그룹 소유자를 변경하기 위해 chgrp를 사용할 수 있습니다. 그러나 권한과 소유자를 동시에 변경하려면 Linux에서 사용할 수있는 명령이 있습니까?

예를 들어,이 권한과 소유자가있는 파일이 있습니다.

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

이제는 다음과 같이 변경하고 싶습니다.

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

이 명령을 사용할 수 있다는 것을 알고 chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFile있지만 깔끔한 방법이 있는지 알고 싶습니다.



답변

“UNIX-way”라는 개념이 있습니다. 각 도구는 하나의 간단한 기능을 수행해야합니다. 더 복잡한 기능이 필요한 경우 작은 도구를 결합 할 수 있습니다.

그 반대는 모든 기능이 하나의 거대한 도구 내에서 집계 될 때 독점 디자인입니다.

복잡한 것을 원한다면 간단한 도구를 사용하여 스크립트를 작성하십시오.


답변

최종 대상과 같이 파일을 어딘가에 복사하는 것이라면 다음 install명령을 살펴볼 수 있습니다 .

install -m 0777 -o root $sourcefile $destinationfile


답변

* nix에서 작업에 적합한 도구를 사용하는 것이 중요하지만 실제로 각 연결 명령에서 동일한 경로를 반복하는 것은 어리석은 것처럼 보입니다. 대신 실제로 Bash 변수를 사용하고 작은 스크립트에서는 특히를 사용해야 $_합니다.

당신의 명령은 다음과 같습니다.

chmod 123 WantToChangeThisFile && chgrp admin $_

Alt +. 현재 쉘에서 마지막으로 사용 된 인수를 가져 오는 것과 비슷한 일을합니다.


답변

이 경우 Rsync가 유용합니다.

Fine Manual (TM)에서

–chown = USER : GROUP 간단한 사용자 이름 / 그룹 이름 매핑

–chmod = CHMOD는 파일 및 / 또는 디렉토리 권한에 영향을줍니다

예를 들어, chmod / mnt / lala / lala4000 / “ugo = rX”및 “foo.bar”를 숨기려고합니다.

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

이것은 재귀 적으로 dir을 질식시키고 chmod합니다.


답변

rsync명령 으로 그런 목표를 달성 할 수 있습니다

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


답변

chown username:groupname file ...동시에 두 가지를 모두 변경할 수 있습니다 . 동일한 (inode) 구조에서 두 개의 필드를 변경하므로 결합하면 두 개의 시스템 호출이 저장됩니다 (하나는 현재 값을 읽기위한 것이고 다른 하나는 수정 된 vaule을 설정하기위한 것).


답변

#!/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