我有修改的文件中像這樣如何在linux中爲sed命令設置臨時文件目錄?
sed -i "/hello world/d" /etc/postfix/virtual
,我跑了從Web應用程序這個腳本bash腳本。 sed命令在該目錄中創建臨時文件,但在Web應用程序工作的用戶沒有權限在該目錄中創建文件。我不想給用戶更多的權限給該文件夾。有沒有可能爲sed命令指定臨時文件位置?
我是Linux新手,所以對不起,如果我的問題太容易了,但我沒有找到任何解決方案。
謝謝!
我有修改的文件中像這樣如何在linux中爲sed命令設置臨時文件目錄?
sed -i "/hello world/d" /etc/postfix/virtual
,我跑了從Web應用程序這個腳本bash腳本。 sed命令在該目錄中創建臨時文件,但在Web應用程序工作的用戶沒有權限在該目錄中創建文件。我不想給用戶更多的權限給該文件夾。有沒有可能爲sed命令指定臨時文件位置?
我是Linux新手,所以對不起,如果我的問題太容易了,但我沒有找到任何解決方案。
謝謝!
該文件必須通過臨時文件修改,這實際上是sed在做什麼,但它缺少權限。
在處理這種情況時,我們只是手動執行此過程。
## TEMP File
TFILE=`mktemp --tmpdir tfile.XXXXX`
trap "rm -f $TFILE" 0 1 2 3 15
##
sed 's_XXX_YYY_' /etc/example > "$TFILE"
cat "$TFILE" > /etc/example
## trap Deletes TFILE on Exit
上述工作原因是因爲您可以將配置文件設置爲允許編輯,同時仍然擁有受保護的包含目錄。就我而言,我設置了組和組的權限,以允許我的個人帳戶編輯文件,但保留所有其他權限不變。臨時文件不在目錄中,因此它不受影響,配置文件將允許貓工作。 – EdwinW
AFAIK,你不能配置sed。 因此,您必須以所需的權限運行您的命令。
創建一個腳本命名,例如更新後綴(它可以有參數),並把在/ usr/local/bin目錄
#!/bin/bash
sed -i "/$1/d" /etc/postfix/virtual
在/ etc/sudoers的文件.D /(不管它的名字,它可以更新後綴或更多的東西通用),與一個替換_user_調用腳本:
_user_ ALL = (root) NOPASSWD: /usr/local/bin/update-postfix
它允許_user_運行更新後綴(和ONY這個命令),如根
在你的腳本,調用sudo update-postfix helloworld
而不是sed命令。 update-postfix腳本被稱爲root用戶。
NB:古稱這樣,你的腳本(更新後綴)有權做任何事情,所以一定要小心你放什麼,和消毒的論點(我沒有做這裏爲簡便起見) 。
簡單定製的臨時文件的解決方案,類似於@techzilla解決方案爲那些不想使用陷阱 -
sed "/hello world/d" /etc/postfix/virtual > /tmp/temp_postfix_update && cat /tmp/temp_postfix_update > /etc/postfix/virtual && rm -f /tmp/temp_postfix_update
每什麼@EdwinW說,用貓不會刪除管道輸入該文件對文件的寫入權限仍然存在。
如何重定向文件? 'sed「...」/etc/.../virtual> new_file'除非你確實需要修改。 – fedorqui
我得到了同樣的問題:我把自己放在根組中,並且chmoded + x/etc/hosts文件,以便能夠在其中編寫更改(使用sed -i)。 您是否找到解決方案? –