4

/a/bユーザーが読み取り可能なファイルがありますA。しかし、/aによる実行許可を提供しないためA、パス/a/bは を通過できません/a。任意の長いパスの場合、ユーザーが中間パスにアクセスできないために特定のパスにアクセスできない原因をどのように判断しますか?

4

4 に答える 4

5

ツリーを手動で解析し、エラーを単一の行に特定する別の答えは、 namei ツールを使用することです。

namei -mo a/b/c/d
f: a/b/c/d
 drwxrw-rw- rasjani rasjani a
 drw-rwxr-x rasjani rasjani b
                        c - No such file or directory

これは、権限が拒否されたエントリまでのツリー構造全体と権限を示しています。

于 2016-05-19T07:52:30.400 に答える
1

このようなもの:

#!/bin/bash
PAR=${1}
PAR=${PAR:="."}
if ! [[ "${PAR:0:1}" == / || "${PAR:0:2}" == ~[/a-z] ]]
then
  TMP=`pwd`
  PAR=$(dirname ${TMP}/${PAR})
fi

cd $PAR 2> /dev/null
if [ $? -eq 1 ]; then
  while [ ! -z "$PAR" ]; do
    PREV=$(readlink -f ${PAR})
    TMP=$(echo ${PAR}|awk -F\/ '{$NF=""}'1|tr ' ' \/)
    PAR=${TMP%/}
    cd ${PAR} 2>/dev/null
    if [ $? -eq 0 ]; then
      if [ -e ${PREV} ]; then
        ls -ld ${PREV}
      fi
      exit
    fi
  done
fi

醜いですが、それは仕事を成し遂げるでしょう..

したがって、基本的には、パラメーター $1 を取得し、絶対ディレクトリでない場合は、それをそのようなディレクトリに展開し、パスの最後の要素をドロップして、そこに cd を試行します。失敗した場合は、リンスして繰り返します. PREV は、ユーザーが cd できなかった最後のディレクトリを保持するため、それを出力します..

于 2016-05-18T13:52:54.853 に答える