Câu trả lời:
Cả hai tệp đều trỏ đến cùng một vị trí:
$ ls -l /usr/bin/gksudo
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu
... gksudo
được liên kết đến gksu
. Nhưng điều này không có nghĩa là họ làm những điều tương tự, cách xa nó.
Các ứng dụng có thể phát hiện lệnh được sử dụng để chạy nó. Điều này thường là argv[0]
trong các ngôn ngữ kiểu C hoặc $0
trong các kịch bản shell kiểu Bourne. Ứng dụng có thể xem xét điều đó và trong trường hợp này, thực sự nó thay đổi cách thức hoạt động. Dấu hiệu đầu tiên của điều này là trong man gksu
trang:
gksu is a frontend to su and gksudo is a frontend to sudo.
Nếu bạn tìm trong nguồn ( apt-get source gksu
) cho run_mode
, bạn sẽ thấy cách nó phát hiện ra điều này:
{ /* support gksu_sudo_run */
gchar *myname = g_path_get_basename (argv[0]);
if (!strcmp(myname, "gksudo"))
run_mode = SUDO_MODE;
g_free (myname);
}
Bạn có thể ghi đè lên điều này bằng --su-mode
/ -w
và --sudo-mode
/ -S
đối số (để bạn có thể chạy các lệnh tương đương mà không cần gksudo
liên kết tượng trưng ... Nhưng điều đó tùy thuộc vào bạn.
Nếu bạn muốn biết các "chế độ" này thực sự khác nhau như thế nào, chỉ có một chút thoát ra gksu
. Bạn cần phải theo nó vào libgksu
. Đây là thư viện thực sự kiểm tra các quyền trước khi bàn giao cho hệ thống.
Nếu không có chế độ nào được chỉ định (ví dụ: bạn gọi gksu
mà không có đối số) vào thời điểm nó đến libgksu
, nó sẽ kiểm tra Gconf (như Stefano chỉ ra) và nếu nó vẫn không thể quyết định, nó sẽ mặc định ở su
chế độ.
bash
bật chế độ nghiêm ngặt POSIX khi được gọi là sh
. Và gksu
là cũng biết tên gọi.
Trong Ubuntu (!), Không có sự khác biệt.
gksu
thông thường sẽ đăng nhập người dùng root và chạy một ứng dụng trong phiên này. Tuy nhiên, trên Ubuntu, nó mặc định sử dụng "chế độ sudo", tương đương với việc chạy gksudo
. Điều này là do trên Ubuntu, bạn không thể đăng nhập bằng root theo mặc định.
gksudo
là đồ họa tương đương với sudo
(và như Oli chỉ ra, chỉ là một liên kết tượng trưng cho gksu)
Từ mục gcsu của gksu:
Hơn nữa, về sự khác biệt giữa sudo và gksudo:
Bạn không bao giờ nên sử dụng sudo bình thường để bắt đầu các ứng dụng đồ họa như root. Bạn nên sử dụng gksudo (kdesudo trên Kubfox) để chạy các chương trình như vậy. gksudo đặt HOME = ~ root và sao chép .Xmasterity vào thư mục tmp. Điều này ngăn chặn các tập tin trong thư mục nhà của bạn trở thành sở hữu của root. (AFAICT, đây là tất cả những gì đặc biệt về môi trường của quá trình bắt đầu với gksudo so với sudo).
- (từ tài liệu cộng đồng thông qua Chris Wilson )
Tôi biết rằng đây là một chủ đề cũ, nhưng tôi đã được yêu cầu nói với bạn về một sự khác biệt tinh tế nhưng thiết yếu giữa gksu
và gksudo
.
Mặc dù tôi đã nhìn lâu và chăm chỉ, tôi không thể tìm thấy một sự khác biệt được ghi nhận ở bất cứ đâu, và nó vẫn tồn tại. Tôi cũng chưa tìm ra lý do tại sao có sự khác biệt. Tôi thấy điều này là một cách khó khăn khi tôi vô tình xóa một số tệp hệ thống chính xác vì sự khác biệt này (được thảo luận trong một chủ đề trong Diễn đàn Ubuntu ) - Tôi đã sử dụng gksu
, nhưng kể từ đó tôi đã chắc chắn luôn sử dụng gksudo
.
Để tóm tắt, hãy thử điều này.
touch abc
touch abc.tmp
touch abctmp
Chạy sáu lệnh sau. Năm đầu tiên cho kết quả tương tự (dự kiến) (tức là chỉ abc.tmp
) trong khi thứ sáu bao gồm một tệp bổ sung ( abctmp
) mà nó không nên.
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
Hãy tưởng tượng những vấn đề khi bạn thay thế -print
với -delete
trong find
lệnh (đó là chính xác những gì đã xảy ra với tôi, gây ra một số tập tin hệ thống bị xóa).
Vì vậy, xin vui lòng sử dụng gksudo
thay vì gksu
.
gksudo
tương đương với việc gõgksu --sudo-mode