請教一個Permission denied的問題

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

請教一個Permission denied的問題

文章訪客 » 週三 12月 29, 2004 8:15 pm

代碼: 選擇全部
make[2]: Entering directory `/home/doc/srilm/misc/src'
/home/doc/srilm/bin/decipher-install 0444 cfuncproto.h /home/doc/srilm/include
make[2]: execvp: /home/doc/srilm/bin/decipher-install: Permission denied

這個段落是makefile時出現的錯誤
可不可以請問他的意思是什麼呢?

感覺上它是告訴我/home/doc/srilm/bin/decipher-install是不可以執行的...
但是
代碼: 選擇全部
#!/bin/csh -f
#
#    File:   decipher-install
#    Author: Tom Kuhn (original by Victor Abrash)
#    Date:   Fri Aug 26 12:41:03 1994
#
#    Description:
#       This script installs files for submodules of the DECIPHER (TM) system,
#       when using the make release-* targets.
#
#       It takes a variable number of arguments with this convention:
#
#               decipher-install <mode> <file1> ... <fileN> <directory>
#
#    Copyright (c) 1994, SRI International.  All Rights Reserved.
#
#    RCS ID: $Id: decipher-install,v 1.3 2000/06/08 18:30:31 stolcke Exp $
#
#    $Log: decipher-install,v $
#    Revision 1.3  2000/06/08 18:30:31  stolcke
#    backup recently used executables before installing new version
#
#    Revision 1.2  2000/06/08 17:51:18  stolcke
#    avoid ginstall and decipher-specific stuff
#
#    Revision 1.4  1995/02/22 01:46:58  tmk
#    Updates from Andreas' Solaris port
#
# Revision 1.3  1994/12/03  23:54:44  decipher
# Reorganized the error checking so usage message wasn't always printed.
#
# Revision 1.2  1994/11/24  01:47:35  decipher
#  Revised to take variable number of arguments.  Now uses ginstall instead
# of each platforms' local install.  More error checking added.
#
# Revision 1.1  1994/08/26  22:24:38  victor
# Initial revision
#
#

# By using this flag, the script runs through all error checking and
# reports all errors before exiting
unset error

# Set these variables now so diagnostic printing on errors works nicely
set FILES DIR MODE

# this script can only be run by decipher:
#if (`whoami` != decipher) then
#       echo "ERROR:  installation must be done by user 'decipher'."
#       exit -1
#endif

# Get the arguments, check usage.  Have to bail completely if there
# aren't enough arguments.
if ($#argv < 3) then
        echo "WARNING:  There are arguments missing"
        exit -1
endif

set MODE = $1
shift

set DIR  = $argv[$#argv]

while ($#argv > 1)
        set FILES = ($FILES $1)
        shift
end

# we should check that these are valid:
# First, check the mode
if ($MODE !~ 0[1-7][1-7][1-7]) then
        echo "ERROR: Mode ($MODE) is not a valid permission setting"
        set error
endif

# Now check each file
foreach FILE ($FILES)
   if (! -e ${FILE}) then
      echo "ERROR:  File to be installed (${FILE}) does not exist."
      set error
   endif
   if (-z ${FILE}) then
      echo "ERROR:  File to be installed (${FILE}) is zero length."
      set error
   endif
   if (! -f ${FILE}) then
      echo "ERROR:  File to be installed (${FILE}) is not a plain file."
      set error
   endif
end

if (! -d ${DIR}) then
   echo "WARNING: creating directory ${DIR}"
   mkdir ${DIR}
endif

# Now check the directory
if (! -e ${DIR}) then
   echo "ERROR:  Installation directory (${DIR}) does not exist."
   set error
endif
if (! -d ${DIR}) then
   echo "ERROR:  Installation target (${DIR}) is not a directory."
   set error
endif
if (! -w ${DIR}) then
   echo "ERROR:  Don't have write permission in installation directory (${DIR})."
   set error
endif

# check that $DIR is a valid destination:
# currently, this means we should be able to install files under
# /include, /bin/, and /lib/ directories under /home/decipher:

#@@ Get rid of '^' in egrep so /tmp_mnt prefix from NFS ok.
#if (`echo ${DIR} | egrep '\/home\/decipher'` == "") then
#   echo "ERROR:  You can install files only under /home/decipher"
#   set error
#endif
if (`echo ${DIR} | egrep '\/bin|\/include|\/lib\/'` == "") then
   echo "ERROR:  You can install files only in .../include, .../bin/, or .../lib/ directories."
   set error
endif

# Bail out if there have been errors:
if ($?error) goto USAGE

# Install the files:

#echo "ginstall -p -m ${MODE} ${FILES} ${DIR}"
#ginstall -p -m ${MODE} ${FILES} ${DIR}
foreach file (${FILES})
        set base = `basename $file`

        # remove executable backups not accessed in one day
        foreach file2 ( `find ${DIR} -name "$base.~[0-9]*" -perm -0500 -atime +1 -print` )
                echo "removing old backup $file2"
                rm -f $file2
        end

        # backup executables accessed within the last day
        foreach file2 ( `find ${DIR} -name $base -perm -0500 -atime -1 -print` )
                echo "$file2 is in use; backing up to $file2.~$$"
                mv $file2 $file2.~$$
        end

        rm -f ${DIR}/$base
        cp -p $file ${DIR}
        chmod ${MODE} ${DIR}/$base
end

# exit:
exit 0

USAGE:

echo "Usage:  "`basename ${0}`" <mode> <file1> ... <fileN> <directory>"
echo "  mode:                 file permission mode, in octal"
echo "  file1 ... fileN:      files to be installed"
echo "  directory:            where the files should be installed"
echo ""
echo "files = " $FILES
echo "directory = " $DIR
echo "mode = " $MODE
echo ""
exit 1

是這個sh的內容,雖然他用到了csh但是我有apt-get install csh阿
代碼: 選擇全部
doc:/home/doc/srilm/bin# apt-get install csh
Reading Package Lists... Done
Building Dependency Tree... Done
csh is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


可以請幫我解釋最上面的make error一下嗎??
訪客
 

re:請教一個Permission denied的問題

文章redjoe » 週三 12月 29, 2004 8:29 pm

先看一下權限
代碼: 選擇全部
ls -l /home/doc/srilm/bin/decipher-install

是否有執行權限
redjoe
快樂的大學生
快樂的大學生
 
文章: 518
註冊時間: 週一 4月 07, 2003 10:15 pm
來自: Taiwan

Re: re:請教一個Permission denied的問題

文章Niise » 週四 12月 30, 2004 10:27 am

redjoe 寫:先看一下權限
代碼: 選擇全部
ls -l /home/doc/srilm/bin/decipher-install

是否有執行權限


XD
果然是如此,不過我印象中,如果file中有宣告/bin/csh
它不是會用csh去執行shell嗎為什麼要用執行權限呢??
Niise
可愛的小學生
可愛的小學生
 
文章: 54
註冊時間: 週日 11月 10, 2002 10:41 am
來自: 台灣

Re: re:請教一個Permission denied的問題

文章d2207197 » 週四 12月 30, 2004 11:21 am

Niise 寫:
redjoe 寫:先看一下權限
代碼: 選擇全部
ls -l /home/doc/srilm/bin/decipher-install

是否有執行權限


XD
果然是如此,不過我印象中,如果file中有宣告/bin/csh
它不是會用csh去執行shell嗎為什麼要用執行權限呢??

就算第一行有 #!/bin/csh 他就會自動以 csh 執行。
但是你沒權限執行這個檔案有何用?

就像一個純文字的檔案,你可以用 cat 來看裡面的東西。
但是你沒有讀取權限又有何用?
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

Re: re:請教一個Permission denied的問題

文章Niise » 週四 12月 30, 2004 5:22 pm

d2207197 寫:
Niise 寫:
redjoe 寫:先看一下權限
代碼: 選擇全部
ls -l /home/doc/srilm/bin/decipher-install

是否有執行權限


XD
果然是如此,不過我印象中,如果file中有宣告/bin/csh
它不是會用csh去執行shell嗎為什麼要用執行權限呢??

就算第一行有 #!/bin/csh 他就會自動以 csh 執行。
但是你沒權限執行這個檔案有何用?

就像一個純文字的檔案,你可以用 cat 來看裡面的東西。
但是你沒有讀取權限又有何用?


hmm
那代表"make"該程式時"登入者"沒有夠高的權限?
因為我是以root的權限去執行makefile的

也就是說,再makefile時不能執行該檔,
因為該檔其實是在makefile前期產生出來的shell script
那權限應該是屬於誰呢??我認為它應該屬於root吧??
請教各位了
Niise
可愛的小學生
可愛的小學生
 
文章: 54
註冊時間: 週日 11月 10, 2002 10:41 am
來自: 台灣

Re: re:請教一個Permission denied的問題

文章d2207197 » 週四 12月 30, 2004 10:41 pm

Niise 寫:hmm
那代表"make"該程式時"登入者"沒有夠高的權限?
因為我是以root的權限去執行makefile的

也就是說,再makefile時不能執行該檔,
因為該檔其實是在makefile前期產生出來的shell script
那權限應該是屬於誰呢??我認為它應該屬於root吧??
請教各位了

就算root 是該檔案的 owner 也不代表 root 絕對可以執行他
您應該了解 rwxrwxrwx ,或是 777 這種權限表示法吧。
當然 root 有權利去更改此檔案的權限,更改後就可以執行了。

所以你要改善 Makefile,讓他產生 decipher-install 時,也給予他正常的權限標示。
頭像
d2207197
鑽研的研究生
鑽研的研究生
 
文章: 1763
註冊時間: 週二 5月 27, 2003 9:57 pm
來自: 火星

Re: re:請教一個Permission denied的問題

文章訪客 » 週四 12月 30, 2004 11:10 pm

d2207197 寫:
Niise 寫:hmm
那代表"make"該程式時"登入者"沒有夠高的權限?
因為我是以root的權限去執行makefile的

也就是說,再makefile時不能執行該檔,
因為該檔其實是在makefile前期產生出來的shell script
那權限應該是屬於誰呢??我認為它應該屬於root吧??
請教各位了

就算root 是該檔案的 owner 也不代表 root 絕對可以執行他
您應該了解 rwxrwxrwx ,或是 777 這種權限表示法吧。
當然 root 有權利去更改此檔案的權限,更改後就可以執行了。

所以你要改善 Makefile,讓他產生 decipher-install 時,也給予他正常的權限標示。


這個makefile是某學術團體release的..
ok...原來我另外一個同學用另外一個帳號先makefile了
結果該script是屬於那個帳號的....xD

另外是否可以執行的問題,不知道為什麼我一直有一個印象,
即使不是x的權限,只要該檔案內函!#/bin/sh的標示
也會自動呼叫sh來執行,來達到sh ./somescript 的效果
也許是以前用過某個修改過的shell的關係吧...
訪客
 


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客