gksu foo
とgksudo foo
の動作に違いはありますか?
それらは同じ意味で使用できますか?
両方のファイルは同じ場所を指します:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
はgksu
にシンボリックリンクされています。しかし、これは彼らがdo同じことを意味するのではなく、それから遠い。
アプリケーションは、実行に使用されるコマンドを検出できます。これは通常、Cスタイル言語ではargv[0]
、Bourneスタイルのシェルスクリプトでは$0
です。アプリケーションはそれを見ることができ、この場合、実際には動作方法が変わります。これの最初の兆候はman gksu
ページにあります:
gksu is a frontend to su and gksudo is a frontend to Sudo.
apt-get source gksu
のソース(run_mode
)を見ると、これを検出する方法がわかります。
{ /* support gksu_Sudo_run */
gchar *myname = g_path_get_basename (argv[0]);
if (!strcmp(myname, "gksudo"))
run_mode = Sudo_MODE;
g_free (myname);
}
--su-mode
/-w
および--Sudo-mode
/-S
引数でこれをオーバーライドできます(したがって、gksudo
シンボリックリンクを必要とせずに同等のコマンドを実行できます...それはあなた次第です。
これらの「モード」が実際にどのように異なるかを知りたい場合は、gksu
に少しだけエスケープします。 libgksu
に続く必要があります。これは、システムに渡す前に実際に権限をチェックするライブラリです。
モードが指定されていない場合(引数なしでgksu
を呼び出すなど)、libgksu
に達するまでに、 Gconf(Stefanoが指摘するように)をチェックします 決定せず、デフォルトでsu
モードになります。
Ubuntu(!)では、違いはありません。
gksu
は通常rootユーザーのログインで、このセッションでアプリを実行します。ただし、Ubuntuでは、gksudo
の実行と同等の「Sudoモード」がデフォルトで使用されます。これは、ubuntuでは、デフォルトで rootとしてログインできない であるためです。
gksudo
は、グラフィカルなSudo
と同等です(Oliが指摘しているように、gksuへの単なるシンボリックリンク)
Gksuのgconfエントリから:
さらに、Sudoとgksudoの違いについて:
通常のSudoを使用してグラフィカルアプリケーションをルートとして起動しないでください。このようなプログラムを実行するには、gksudo(Kubuntuのkdesudo)を使用する必要があります。 gksudoはHOME =〜rootを設定し、.Xauthorityをtmpディレクトリにコピーします。これにより、ホームディレクトリ内のファイルがルートによって所有されるのを防ぎます。 (AFAICT、これはgksudoとSudoで開始されたプロセスの環境について特別なことです)。
—( コミュニティのドキュメントから via Chris Wilson )
私はこれが古いスレッドであることを知っていますが、私は あなたに言うように頼まれましたgksu
とgksudo
の微妙ではあるが本質的な違いについて知っています。
私は長くて一生懸命に見えましたが、文書化された違いはどこにも見当たりませんが、それでも存在します。また、なぜ違いがあるのかはわかりません。この違いのためにいくつかのシステムファイルを誤って削除したときに、これは難しい方法でした( buntu Forumsのスレッド で説明)—私はgksu
を使用していましたが、それ以来、常にgksudo
を使用するようにしてください。
要約するには、これを試してください。
touch abc
touch abc.tmp
touch abctmp
次の6つのコマンドを実行します。最初の5つは同じ(予想される)結果(つまりabc.tmp
)を返しますが、6つ目は追加すべきでないファイル(abctmp
)を含みます。
find . -regextype posix-egrep -regex '.*\.tmp' -print
Sudo find . -regextype posix-egrep -regex '.*\.tmp' -print
gksudo -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksudo --su-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksu --Sudo-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
gksu -- find . -regextype posix-egrep -regex '.*\.tmp' -print
find
コマンドで-print
を-delete
に置き換えたときの問題を想像してください(これはまさに私に起こったことで、一部のシステムファイルが削除されます)。
したがって、gksudo
の代わりにgksu
を使用してください。