파일 권한을 변경하기 위해 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