ファイルの権限とグループ所有者を同時に変更する方法


9

ファイルのアクセス許可を変更するには、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、それを行うためのきちんとした方法があるかどうかを知りたいです。

回答:


9

「UNIX-way」という概念があります。各ツールは、1つの単純な機能を実行する必要があります。より複雑な機能が必要な場合は、小さなツールを組み合わせることができます。

反対のことは、すべての機能が1つの巨大なツール内に集約される場合の独占的なデザインです。

複雑なことをしたい場合-単純なツールを呼び出してスクリプトを書くだけです。


以下はこれらのツールを1つのシェル関数にまとめたスクリプトchです。
キース

2
彼が尋ねたのは、rsyncなどの既存のいくつかのツールで達成できる可能性があり、Linuxは1つのツール/ 1つの機能を好む傾向がありますが、複数の処理を行うツールが存在しないことを意味します
Kiwy

@Kiwy一部のLinuxツールは、UNIX方式の原則に準拠せず、異なる性質の異なる機能を組み合わせています。たとえばsystemdのように。
Kondybas

1
@Kondybas "tend to"は文の重要な部分です。ルールの例外は存在します。それでも私に対するあなたの答えは本当に悪いものです。
キウイ

9

ファイルをどこかに(最終的な宛先など)コピーすることも必要な場合は、install次のコマンドを確認することをお勧めします。

install -m 0777 -o root $sourcefile $destinationfile


1

* nixのジョブに適切なツールを使用することは重要ですが、実際には、チェーンされた各コマンドで同じパスを繰り返すのはばかげているように見えます。代わりに、実際にはBash変数を使用し、小さなスクリプトでは特にを使用する必要があり$_ます。

あなたのコマンドは次のようになります:

chmod 123 WantToChangeThisFile && chgrp admin $_

Alt +。現在のシェルで最後に使用された引数をプルするのと同様のことを行います。


0

この場合、Rsyncは便利です。

Fine Manual(TM)から

--chown = USER:GROUP単純なユーザー名/グループ名のマッピング

--chmod = CHMODはファイルやディレクトリの権限に影響します

したがって、たとえば、chmod / mnt / lala / lala4000 / "ugo = rX"およびchown "foo.bar"

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

これはディレクトリを再帰的にchownしてchmodするでしょう。


0

あなたは長いrsyncコマンドで そのような目標を達成することができます

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


これは安全ではありません。指定された1つのファイルだけでなく、指定されたディレクトリおよびサブディレクトリ内の一致するすべてのファイルに影響します。
telcoM 2018年

-1

chown username:groupname file ...両方を同時に変更することができます。同じ(iノード)構造内の2つのフィールドを変更するため、2つのフィールドを組み合わせると、2つのシステムコール(1つは現在の値を読み取るため、もう1つは変更された値を設定するため)を節約できます。


chown所有者のみを変更します。これは、OPが要求すると同時に、どのように権限を変更しますか?OPの例にはも含まれていることに注意してくださいchmod
jscott

彼が書いたようにああ、私は彼が3つの事を変更したいthougth、グループ所有者を変更するために、私は彼がグループのものと思ったし、所有者を。
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
少なくとも、それがどのように機能し、どのように使用されると想定されているかについての説明を提供することができます(パラメーターはどの程度か...)
Kiwy

2
回答としてコードを貼り付けないでください。
Konrad Gajewski、2018年

コメントは生産的ではありません。これは、このユーザーがこれまでに投稿した唯一のものであり、彼らはそれ以来ログインさえしていません。
G-Manは 'Reinstate Monica'を
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.