2012-04-16 82 views
-2

我在mailq上運行一個shell腳本來創建一個要刪除的文件列表,但由於權限的限制,我無法用shell腳本刪除它們(當我使用root權限時,腳本可以工作,但是我不能總是爲根權限提供root密碼給用戶)。我想將輸出的文件列表發送給perl以刪除它們,並且Perl程序具有root權限。如何使用shell腳本輸出作爲perl腳本的輸入(刪除具有權限的文件)?

shell腳本是:

#!/usr/bin/ksh 
    WORKFILE="/tmp/check.mq" 
    MAILLIST="[email protected]" 

    mailq|grep -B1 -i temporarily |grep -iv deferred |egrep -i     'jan|feb|mar|apr|may|june|jul|aug|sept|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}'|tee $WORKFILE |awk '{print "*" $1}'|tee mail.mq 

    mailq|grep -B1 -i unknown |egrep -i 'jan|feb|mar|apr|may|june|jul|aug|sept|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}'|tee $WORKFILE |awk '{print "*" $1}'|tee mail.mq 

    mailq|grep -B1 -i lookup |grep -iv deferred |egrep -i 'jan|feb|mar|apr|may|june|jul|aug|sept|oct|nov|dec' |awk -F" " '{print $1}' |awk '{print substr($0,10,14)}'|tee $WORKFILE |awk '{print "*" $1}'|tee mail.mq 

    cat mail.mq | while read file; do rm /var/spool/mqueue/$file;done 
    find . -type f -name "mail.mq" |rm -rf mail.mq 

它創建類似的輸出:

*##### where ##### is a unique 5 numbers to identify files in the mailq. 

我想知道我可以刪除與任何用戶root priveleges這些文件。

+0

這就像你有一些嚴重的問題,架構在這裏,如果你不能刪除文件,但有機會獲得一個Perl程序,可以對我聽起來。在添加更多口香糖和吐出孔之前,我會努力解決這個問題。 – 2012-04-17 14:51:53

回答

-1

將STDERR重定向到STDOUT並一起閱讀。

例子:

@ls_output = `ls -l 2>&1`; 
+1

我沒有明白你的意思。你能詳細解釋一下嗎? – 2012-04-16 16:36:32

+0

@YagyavalkBhatt - 您的問題的第一部分或您的問題的實際主題說「*我如何使用shell腳本輸出作爲Perl腳本的輸入*」,因此我回答了該部分。如果你想從Perl執行一些shell命令或腳本(比如命令'ls -l'),那麼你需要在Perl中使用上面的代碼來獲得它的輸出。由於輸出的某些部分是STDOUT,而其他部分是STDERR,因此需要通過'2>&1'將其重定向到一個。所以當你運行上面的代碼時,'@ ls_output'將包含'ls -l' shell命令的輸出,你可以在你的Perl腳本中使用它來進一步處理。那是你要的嗎? – 2012-04-16 16:52:16

+0

感謝您的快速解答。 PERL是否有權限從mailq中刪除文件,或者是否必須將我的代碼更改爲PERL,因爲我想讓root用戶可以執行此腳本,但是我不想使用sudo或setuid。有沒有解決這些問題? – 2012-04-16 17:12:42

1

處理此問題的一個好方法是允許用戶創建像這樣的列表並將輸出保存到指定目錄中的文件。然後,您可以定期(頻繁或不頻繁地)通過用戶提交的列表,檢查內容以確保它是合法的(您只希望允許列出某些目錄中的某些文件以供刪除),並刪除文件,然後刪除該列表。

向用戶授予root權限不是一個好主意。通常有更好的方法來完成工作。

+0

我可以將此腳本轉換爲PERL並使用setuid。這能解決我的問題嗎? 還有一件事用戶仍然無法創建這些文件的列表,因爲他們沒有訪問mailq – 2012-04-16 16:37:31

+1

如果用戶無法訪問mailq,因此不知道要刪除哪些文件,爲什麼你想讓用戶可以刪除這些文件嗎?誰將啓動這個過程,根或用戶?誰知道哪些文件需要刪除? – 2012-04-16 17:42:00