あるディレクトリー配下にあるすべてのシンボリックリンクとそのリンク先の所有者を比較する
以下のシェルスクリプトでサクっと調べることができます。
使い方
$ sh check_owner_symlink_and_entity.sh ターゲットディレクトリー
例
$ sh check_owner_symlink_and_entity.sh /var/www/html
check_owner_symlink_and_entity.sh
#!/bin/sh set -u TARGET_DIR=$1 find ${TARGET_DIR} -type l > list while read LINE do TMP_ENTITY=`ls -l ${LINE} | cut -d '>' -f2 | sed 's/ //g'` ls -l ${TMP_ENTITY} > /dev/null 2>&1 if [ ${?} != 0 ]; then ENTITY_PREFIX=${LINE%/*} ENTITY=${ENTITY_PREFIX}/${TMP_ENTITY} else ENTITY=${TMP_ENTITY} fi SYMLINK_OWNER=`ls -l ${LINE} | cut -d ' ' -f3,4` if [ -d ${ENTITY} ]; then ENTITY_OWNER=`ls -ld ${ENTITY} | cut -d ' ' -f3,4` if [ "${SYMLINK_OWNER}" = "${ENTITY_OWNER}" ]; then echo 'OK' else echo "NG シンボリックリンク ${LINE} とリンク先の所有者が異なります" fi else ENTITY_OWNER=`ls -l ${ENTITY} | cut -d ' ' -f3,4` if [ "${SYMLINK_OWNER}" = "${ENTITY_OWNER}" ]; then echo 'OK' else echo "NG シンボリックリンク ${LINE} とリンク先の所有者が異なります" fi fi done < list rm -f list exit 0