私のクライアントは、顧客のWebサイトのホームディレクトリの束にいくつかのフォルダを展開するように指示しました。これをBashスクリプトで実行しましたが、rootアカウントのアクセス許可を使用することになりました。
/ home/ser(隠しファイルやフォルダーではない)の下の各フォルダーを取得し、そのフォルダーのユーザーとグループの所有権を取得してから、chown -R {userを実行するBashスクリプトを作成するにはどうすればよいですか。 }。{group}/home/ser?
サーバーはCentOSLinuxを実行しています。
私はカイルブラントに上記の完全な信用を与えなければなりません。したがって、以下のこの回答が気に入った場合は、投稿の上の三角形をクリックして、ステータスを上げてください。
しかし、私は彼のルーティンを改善し、それをここに投稿して最終的な答えとしてマークすることが私の義務だと感じました。
カイルのルーチンに追加したのは、ホームディレクトリにのみ触れていること、つまりアスタリスクが含まれている行に触れていることだけです。次に、このホームディレクトリが実際にまだ存在していることを確認します。その後、chownステートメントを実行します。そして、カイルが言ったように、「echo」キーワードを削除すると、実際にタスクが実行されます。次に、問題が自宅のディレクトリの奥深くにある可能性がある場合に備えて、chownに「-R」を追加して再帰的に機能するようにしました。
#!/bin/bash
while IFS=':' read -r login pass uid gid uname homedir comment; do
if [[ "$homedir" = **/home/** ]]; then
if [ -d "$homedir" ]; then
echo chown -R $uid:$gid "$homedir";
fi
fi
done < /etc/passwd
私はあなたが求めている方法は一種の逆行だと思います。各フォルダーを取得してからユーザーを見つけるのではなく、ユーザーを取得してホームフォルダーを検索する必要があります。
#!/bin/bash
while IFS=':' read -r login pass uid gid uname homedir comment; do
echo chown $uid:$gid "$homedir";
done < /etc/passwd
もちろん、エコーを削除する必要があり、root権限でこれを実行する必要があります。また、自分でls
のforループではなく、whileループを常にお勧めします。 /etc/passwd
を使用して何かを行うために、このループを保存できます。
#!/bin/bash
for f in $( ls /home/ );
do chown -R $f:yourgroup /home/$f
done
これにはサニティチェックがなく、テストなしで書いたので注意してください。
(ところで、「隠しファイルやフォルダーがない」という要件は、Unixの隠しファイルが、前に。が付いた通常のファイルであり、.usernameはchownの有効なユーザーではないという事実によって満たされます)。
これは役立つかもしれません
#!/bin/bash
for file in `ls -a | grep -v '^\.'`
do
if [[ -d $file ]]
then
fowner=`ls -ld $file | nawk '{print $3}'`
fgroup=`ls -ld $file | nawk '{print $4}'`
chown -R $fowner:$fgroup $file
fi
done
getent
を使用して、ユーザーIDが500以上の各ユーザーのユーザー名、グループ名、およびホームディレクトリを取得し、chown -R
を介して適用します。また、最近はuser:group
です。
for i in ls -l /home/ | awk '{print $3}'
; do chown -R $ i/home/$ i; done
for i in ls -l /home/ | awk '{print $4}'
; do chgrp -R $ i/home/$ i; done