2016-05-31 6 views
0

私はこのスクリプトを作成しました。基本的にはRAMキャッシュを削除することです。 私はそれが厄介であることを知っている - の周りのすべての「エコー 『』あなたが見ることされているだけで仕事がきれいにそれを作るために、私は、コマンドの間にいくつかの空白行を好きファイル許可フラグ 'setuid'が無視されています

#!/bin/bash 
free -m && wait 
echo ''; echo '' 
while true; do 
    read -p "Vuoi liberare la RAM? [y,n]" domanda 
    case $domanda in 
     y|Y) echo ''; sync; sudo echo 3 > /proc/sys/vm/drop_caches; echo ''; free -m; echo ''; break ;; 
     n|N) echo ''; echo 'Sei tu il saggio Jack ;)'; echo ''; break ;; 
     *) echo ''; echo 'Come prego?'; echo '' ;; 
    esac 
done 

とにかく、スクリプトは動作しますが、順番に。それは、私はそれが続くよう権限を設定しなければならなかった作品にするために:。

sudo chown root.root <my script> 

sudo chmod 4755 <my script> 

私はそれが動作言ったように 私は、サブディレクトリのコールを作成しました:ビンは、自分の家で、内部のスクリプトをコピーして、私が追加この行は私のものです.profile

export PATH="/home/jacklapinza/.bin:$PATH" 

したがって、新しいパスは正常に機能しますが、スクリプトはもう機能しません。私は「いいえ」を選択した場合、それは動作しますが、私は「Y」を押した場合は、エラーが飛び出す、意味:

permission denied. 

私は、ファイルに同じ権限を設定しました。

私は間違っていますか?

+0

ファイル内からsudo呼び出しを削除して、sudoを使ってスクリプトを呼び出すだけで十分です。スクリプトが '$(id -nu)'でルートとして実行されているかどうかを確認することができます。 –

+0

いつも通常のパスの前にあなたのユーザディレクトリを追加すべきではありません。代わりにこれを使ってください: '$ PATH:" $ PATH:/home/jacklapinza/.bin "'または 'export PATH =" $ PATH:$ HOME /。ビン " – andlrc

答えて

1

ここでの問題は、ファイルシステムがsetuidフラグをサポートしていないことです。

ext4を使用している場合は、nosuidオプションが設定されている可能性があります。

とにかく、私はsetuidフラグがあまりにも危険で、少しの利点があります:sudoを使うのを忘れてしまいましたか?

これを無視して、sudoを使ってスクリプトを呼び出すことをおすすめします。それがオプションでない場合は、マウントフラグをチェックする必要があります。

+0

あなたは絶対に正しいです。なぜ私はそれについて考えなかったのかわかりません、ありがとう。 –

関連する問題