답변:
두 파일 모두 같은 위치를 가리 킵니다.
$ 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를 확인 하고 여전히 결정할 수없는 경우 기본 su
모드로 설정됩니다.
bash
로 호출 될 때 POSIX 엄격 모드 를 켭니다 sh
. 그리고 gksu
이다 또한 호출 이름을 알고 있습니다.
우분투 (!)에는 차이가 없습니다.
gksu
일반적으로 루트 사용자로 로그인 하고이 세션에서 앱을 실행합니다. 그러나 우분투에서는 기본적으로 "스도 모드"를 사용합니다 gksudo
. 이는 running과 같습니다 . 우분투에서는 기본적 으로 루트 로 로그인 할 수 없기 때문입니다 .
gksudo
의 그래픽 것과 동일합니다 sudo
(그리고 OLI가 지적한대로, 단지 기호 링크 gksu하는)
gksu의 gconf 항목에서 :
또한 sudo와 gksudo의 차이점에 대해 :
그래픽 응용 프로그램을 루트로 시작하기 위해 일반 sudo를 사용해서는 안됩니다. 그러한 프로그램을 실행하려면 gksudo (Kubuntu의 kdesudo)를 사용해야합니다. gksudo는 HOME = ~ root를 설정하고 .Xauthority를 tmp 디렉토리에 복사합니다. 이렇게하면 홈 디렉토리의 파일이 루트에 의해 소유되지 않습니다. (AFAICT, 이것은 gksudo와 sudo로 시작된 프로세스의 환경에 특별한 모든 것입니다).
— ( Chris Wilson을 통한 커뮤니티 문서 에서 )
나는이 오래된 스레드 것을 알고,하지만 난 봤는데 당신에게 요구 사이에 미묘하지만 중요한 차이에 대해 gksu
하고 gksudo
.
길고 열심히 보았지만 어디에나 문서화 된 차이점을 찾을 수 없지만 여전히 존재합니다. 또한 왜 차이가 있는지 알지 못했습니다. 실수로 정확하게 때문에 (A에서 논의 된 이러한 차이의 일부 시스템 파일을 삭제했을 때이 어려운 방법을 발견 우분투 포럼에 스레드를 내가 사용했던 -) 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