0

AIX でディレクトリの所有権を再帰的に変更したい。私が使う

<osexec commandbase="su" dir="/bin" mode="osexec">
<args>
<arg line="chown -R ${broker_admin_name}:${broker_admin_name} ${broker_installation_directory}/dcx"/>
</osexec>

このコードは正しいですか? dcx を含む dcx の下のすべてのディレクトリとファイルの所有権を変更したいのですが、これを行っても所有権を変更できません。

<chown owner="${broker_admin_name}">
<fileset dir="${broker_installation_directory}/dcx" includes="**/*">
</fileset>
<dirset dir="${broker_installation_directory}/dcx" includes="**/*">
</dirset>
</chown>

ただし、これにより、ファイルではなく dcx の下のディレクトリのみが所有権を変更します。また、build.xml 内の通常のシェル コマンドでこれを実行できますか? つまりchown -R abc:abc xyz、build.xml で直接これを行うにはどうすればよいですか?

4

1 に答える 1

1

「操作は許可されていません」というエラー メッセージが表示されますか?

Ubuntu では、chown タスクは OS によって制限されています。

$ ant

build:
    [chown] chown: changing ownership of `/home/mark/tmp/build/one/test.txt': Operation not permitted
    [chown] chown: changing ownership of `/home/mark/tmp/build/three/test.txt': Operation not permitted
    [chown] chown: changing ownership of `/home/mark/tmp/build/two/test.txt': Operation not permitted
    [chown] chown: changing ownership of `/home/mark/tmp/build': Operation not permitted
    [chown] chown: changing ownership of `/home/mark/tmp/build/one': Operation not permitted
    [chown] chown: changing ownership of `/home/mark/tmp/build/three': Operation not permitted
    [chown] chown: changing ownership of `/home/mark/tmp/build/two': Operation not permitted
    [chown] Result: 1
    [chown] Applied chown to 3 files and 4 directories.

「chown」コマンドを実行すると、同じ制限が示されます

$ chown -R an_other_user build
chown: changing ownership of `build/one/test.txt': Operation not permitted
chown: changing ownership of `build/one': Operation not permitted
chown: changing ownership of `build/two/test.txt': Operation not permitted
chown: changing ownership of `build/two': Operation not permitted
chown: changing ownership of `build': Operation not permitted

最善の解決策は、root ユーザーとして ANT を実行することです。

$ sudo ant

build.xml

<project name="demo" default="build">

    <target name="init">
        <mkdir dir="build/one"/>
        <mkdir dir="build/two"/>

        <echo file="build/one/test.txt" message="helloworld"/>
        <echo file="build/two/test.txt" message="helloworld"/>
    </target>

    <target name="build" depends="init">
        <chown owner="an_other_user" verbose="true">
            <fileset dir="build"/>
            <dirset dir="build"/>
        </chown>
    </target>

    <target name="clean">
        <delete dir="build"/>
    </target>

</project>
于 2012-12-19T19:47:57.180 に答える