0

コマンドをスーパーユーザーとして実行する場合は、次を追加する必要があることがわかりました: echo <password> | sudo -s <command>.

まず、Linux サーバーを でサスペンドしたかったのですが echo <password> | sudo -s pm-suspend、うまくいきました。今、私はコマンドを実行したいecho -e "\xff\x01\x00" > /dev/ttyUSB0

echo <password> | sudo -s echo -e "\xff\x01\x00" > /dev/ttyUSB0動作しません。おそらく ">" が含まれているためです。コマンドを機能させるには、どのような変更が必要ですか?

4

1 に答える 1

0

まず、絶対に使用しないでecho password | ...ください。コマンドラインで。これは、パスワードが履歴ファイルに残り、他のユーザーがpsコマンドを使用してパスワードを見ることができるため、安全ではありません。sudoパスワードを入力せずにコマンドを実行したい場合は、 のNOPASSWDオプションを使用できます/etc/sudoers。これを確認してください: https://unix.stackexchange.com/questions/18830/how-to-run-a-specific-program-as-root-without-a-password-prompt


パーミッションの問題について。そうです、問題は出力リダイレクト>です。で実行されているコマンドではなく、シェルが出力ファイルを開くことを知っておく必要がありますsudo

この例では:

sudo command > output.file

シェルは を開こうとしoutput.file、起動sudo commandして標準出力を開いているファイルに設定します。ただし、シェルにはルート権限がありません。

tee回避策は、次のようなコマンドを使用することです。

command | sudo tee output.file

ただし、そのファイルを編集するための適切なアクセス許可を付与するだけです。例として、グループを作成し、そのファイルのグループ所有権を変更し、あなたをそのグループに変更することができます。例えば:

# Add group
sudo groupadd developers

# Change group ownership of the file
sudo chown root:developers output.file

# make the file writable by the group
sudo chmod g+w output.file

# Finally put you into that group
sudo usermod -a -G developers YOU

しかし、管理ユーザーである場合、つまり ですべてのコマンドを実行できる場合はsudo、上記のteeソリューションで十分です。

于 2015-04-12T16:34:22.910 に答える