回答:
両方のファイルは同じ場所を指します:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
はにシンボリックリンクされていgksu
ます。しかし、だからといって、彼らが同じことをするわけではありません。
アプリケーションは、実行に使用されるコマンドを検出できます。これは通常argv[0]
、Cスタイル言語または$0
Bourneスタイルのシェルスクリプトです。アプリケーションはそれを見ることができ、この場合、実際には動作方法が変わります。これの最初の兆候は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
モードになります。
bash
呼び出されsh
たときにPOSIX strictモードをオンにします。そして、gksu
あるにも呼び出し名を認識。
Ubuntu(!)では、違いはありません。
gksu
通常、rootユーザーでログインし、このセッションでアプリを実行します。ただし、Ubuntuでは、デフォルトで「sudoモード」が使用されますgksudo
。これは、の実行と同等です。これは、ubuntuでは、デフォルトでrootとしてログインできないためです。
gksudo
はグラフィカルなものですsudo
(Oliが指摘しているように、gksuへの単なるシンボリックリンク)
gksuのgconfエントリから:
さらに、sudoとgksudoの違いについて:
通常のsudoを使用してグラフィカルアプリケーションをルートとして起動しないでください。このようなプログラムを実行するには、gksudo(Kubuntuのkdesudo)を使用する必要があります。gksudoはHOME =〜rootを設定し、.Xauthorityをtmpディレクトリにコピーします。これにより、ホームディレクトリ内のファイルがルートによって所有されるのを防ぎます。(AFAICT、これはgksudoとsudoで開始されたプロセスの環境について特別なことです)。
— (Chris Wilsonを介したコミュニティドキュメントから)
私は、これは古いスレッドであることを知っているが、私はしてきたあなたに話すように頼ま間の微妙だが本質的な違いについてgksu
とgksudo
。
私は長くて一生懸命に見てきましたが、文書化された違いはどこにも見当たりませんが、それでも存在しています。また、なぜ違いがあるのかはわかりません。私は誤って(で議論こそ、この違いのいくつかのシステムファイルを削除したとき、私はこれに苦労して見つけUbuntuのフォーラム内のスレッド) -私が使っていた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
あなたが交換するときに問題を想像し-print
て-delete
してfind
コマンド(一部のシステムファイルが削除される原因と、私に起こった、まさにです)。
そのため、のgksudo
代わりに使用してくださいgksu
。
gksudo
は、タイピングと同等であることを示していますgksu --sudo-mode