読者です 読者をやめる 読者になる 読者になる

僕はスピンサーブが打てない

 僕がスピンサーブを打てるまでの記録,あとその他のメモとか.

あるディレクトリー配下にあるすべてのシンボリックリンクとそのリンク先の所有者を比較する

Linux Shell Script Tip

以下のシェルスクリプトでサクっと調べることができます。

使い方

$ 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