Có thể có bất kỳ vấn đề nào khi sử dụng gedit để chỉnh sửa các tệp hệ thống với 'sudo -H gedit' không?


10

Tôi còn khá mới với Ubuntu, tôi nhận thấy rằng trong các câu trả lời trên trang web này, khi mọi người đề xuất chỉnh sửa các tệp hệ thống, lệnh họ đưa ra luôn luôn là sudo nanohoặc sudo vi. Bởi vì tôi không thích sử dụng trình soạn thảo văn bản dựa trên thiết bị đầu cuối, tôi thường sử dụng

sudo -H gedit

thay vào đó, và cho đến nay nó hoạt động hoàn toàn tốt.

Có thể có bất kỳ vấn đề nào với việc sử dụng geditđể chỉnh sửa các tệp hệ thống hoặc sự lựa chọn của trình soạn thảo văn bản hoàn toàn tùy thuộc vào sở thích của người đó không? Có bất cứ điều gì mà tôi nên ghi nhớ (như mã hóa) khi chỉnh sửa các tệp này không?


3
Phần -Hnày rất quan trọng , không sử dụng sudođể khởi chạy các ứng dụng GUI mà không có nó.
pomsky

Câu trả lời:


10

Miễn là bạn chạy nó một cách chính xác, đó là vấn đề sở thích của bạn.

Ngoài sự khác biệt về tính năng , trình soạn thảo văn bản nào bạn sử dụng thực sự là khá nhiều sở thích của bạn. Điều này đúng ngay cả khi trình soạn thảo văn bản của bạn là một chương trình đồ họa như Gedit . Điều này không có nghĩa là không có lý do chính đáng nanovimthường được đề nghị. Các trình soạn thảo văn bản dựa trên thiết bị đầu cuối như vim(hoặc ít nhất là một vilệnh) và nanocó sẵn ngay cả khi không có GUI và thậm chí trên hầu hết các hệ thống rất nhỏ và bị hỏng ; họ có một số truyền thống đằng sau chúng (nếu bạn là một phần của loại điều đó); chúng có thể được chạy trong cùng một thiết bị đầu cuối trong đó các tác vụ khác được thực hiện; họ tự động tích hợp vào quy trình làm việc của người dùng bộ ghép kênh ; và chúng có nhiều khả năng có sẵn hơn bất kỳtrình soạn thảo văn bản đồ họa cụ thể , thậm chí Gedit, thậm chí trên Ubuntu (có một số hương vị ).

Đó không phải là tất cả. Nếu bạn định chỉnh sửa các tệp hệ thống, một cách tiếp cận là chạy trình soạn thảo của bạn với quyền root. Đây không phải là cách tiếp cận duy nhất và có một số đối số chống lại nó (xem bên dưới), nhưng nó là một cách phổ biến. Nếu bạn thực hiện phương pháp đó sử dụng một chương trình đồ họa làm trình soạn thảo của mình, thì bạn cần cẩn thận để chạy nó theo cách đó $HOMElà thư mục gốc của root chứ không phải của riêng bạn , và điều này thêm một lớp rắc rối và phức tạp khác. Nhưng bạn đã làm điều đó; bạn đang chạy sudo -H gedit, đó là một trong những cách hợp lý . Tuy nhiên, sự phức tạp đó là một lý do khác mà mọi người có xu hướng đề xuất các trình soạn thảo phi đồ họa.

Các chương trình đồ họa thường phức tạp hơn các chương trình phi đồ họa. Có nhiều công cụ chạy như root nói chung là xấu, trong đó có nhiều cách mọi thứ có thể đi sai, bao gồm cả do lỗi có thể, bao gồm cả do tai nạn. (Tuy nhiên, các trình soạn thảo văn bản phi đồ họa vimcũng khá phức tạp và thường được cấu hình để chạy nhiều chương trình bên ngoài để thực hiện các tác vụ khác nhau.)

Bên cạnh việc chạy trình soạn thảo với quyền root, một cách tiếp cận chung khác là chỉnh sửa tệp mà trình chỉnh sửa có thể sửa đổi ngay cả khi chạy với tư cách là người dùng (không phải root) của bạn, để thay đổi tệp được truyền sang tệp sở hữu gốc mà bạn muốn thay đổi. Điều đó nghe có vẻ trừu tượng bởi vì các chi tiết cụ thể khác nhau đáng kể. Hai cách tiếp cận cụ thể chính theo sau.

sudoedit

Một cách khá lâu dài để làm điều nàysudoedit(tài liệu trong cùng một trang hướng dẫn nhưsudo ). Theo mặc định, sudoeditsử dụng trình soạn thảo văn bản mặc định , thường không - và không nên - là một chương trình đồ họa. Nhưng bạn có thể nói cho nó để sử dụng bất kỳ trình soạn thông qua SUDO_EDITOR, VISUALhoặc EDITOR các biến môi trường , mà nó tư vấn theo thứ tự đó. Do đó bạn có thể chạy:

VISUAL=gedit sudoedit filename

Thay thế filenamebằng một đường dẫn tương đối hoặc tuyệt đối đến tập tin của bạn.

Điều này tạo một bản sao tạm thời của tệp bạn muốn chỉnh sửa. Bản sao thuộc sở hữu của bạn, không phải bởi root (hoặc bất cứ ai là chủ sở hữu ban đầu). Nó mở trình soạn thảo văn bản và bạn có thể chỉnh sửa bản sao tạm thời. Khi bạn đóng trình soạn thảo văn bản, hãy sudoeditkiểm tra xem bạn có thực sự thay đổi không. Nếu bạn đã làm, nó sao chép bản sao tạm thời sửa đổi trở lại bản gốc.

Mặc dù sudoedithoạt động với các trình soạn thảo đồ họa, nó cũng hữu ích cho các trình soạn thảo dựa trên thiết bị đầu cuối. Trong cả hai trường hợp, soạn thảo văn bản chạy như bạn, vì vậy nó có cấu hình của bạn, và các hành động khác mà bạn thực hiện trong nó khác so với những sửa đổi thực hiện để tập tin đó được thực hiện bởi bạn, mà dành một chút bảo vệ chống lại một số loại sai lầm.

Bạn có thể đặt một trong các biến môi trường đó liên tục nếu bạn muốn. SUDO_EDITORcó lẽ là tốt nhất vì nó được sử dụng cho ít thứ khác. Tuy nhiên, nếu bạn đặt nó gedit, hãy nhớ rằng các lệnh như sẽ không hoạt động khi không có GUI, như thường lệ (mặc dù không phải lúc nào ) trường hợp trong bảng điều khiển ảo hoặc thông qua SSH .sudoedit filename

Phần cuối quản trị viên GVFS

Một cách khác mới hơn để làm điều này là mở tệp thông qua admin://đường dẫn GVFS của nó chứ không phải là đường dẫn kiểu Unix truyền thống. Cảm ơn đi đến pomsky đã dạy tôi về điều này. Cũng giống như có các đường dẫn GVFS để chỉnh sửa các tệp, ở các khía cạnh khác, không phải là nơi thuận tiện để chỉnh sửa - ví dụ: vì chúng ở trên một máy từ xa mà bạn kết nối thông qua SSH - GVFS hỗ trợ admin://các đường dẫn để chỉnh sửa tệp bạn không sở hữu.

Điều này về mặt khái niệm tương tự như sudoeditở chỗ bạn chạy trình soạn thảo của mình như chính bạn và tệp mà trình soạn thảo nhìn thấy là thứ được phép chỉnh sửa. Cố gắng mở tệp yêu cầu bạn xác thực; đây không phải là một cách kỳ diệu để phá vỡ các hạn chế bảo mật thông thường.

gedit admin:///path/to/filename

Ở đó, /path/to/filenamephải là một đường dẫn tuyệt đối đến tập tin, bắt đầu bằng /. Vì vậy, có ba /nhân vật sau admin:.

Mã hóa và những thứ khác bị ảnh hưởng về mặt lý thuyết bởi cấu hình trình chỉnh sửa

Mã hóa của một tập tin không thực sự bị ảnh hưởng bởi việc trình soạn thảo bạn sử dụng có phải là đồ họa hay không. Một số trình soạn thảo, như vim, thậm chí có thể hoạt động bằng đồ họa ( gvimlệnh) hoặc phi đồ họa ( vimlệnh). Câu trả lời đơn giản cho câu hỏi của bạn về mã hóa là bạn không phải lo lắng về điều đó. Điều đó đủ gần với sự thật rằng bạn thực sự không cần phải đọc phần còn lại của câu trả lời này.

Trong các bản phát hành Ubuntu hiện tại (và quá khứ), các lệnh thích sudo nanosudo vimchạy các trình soạn thảo đó là root nhưng $HOMEvẫn được đặt vào thư mục chính của bạn . Điều này có nghĩa là các biên tập viên theo mặc định sẽ sử dụng cấu hình của bạn thay vì cấu hình của root. Nếu có một cái gì đó trong cấu hình của bạn về các trình soạn thảo đó (hoặc trong một chương trình họ chạy để thực hiện một số công việc của họ, như git) về mã hóa hoặc kết thúc dòng , nó sẽ được theo dõi. Với , điều đó sẽ không xảy ra.sudo -H editor

Một số người sử dụng trần sudo(tức là không có -ihoặc -H) cho các biên tập viên vì họ muốn điều đó. Nhưng thực sự, bạn nên suy nghĩ kỹ về điều này. Bạn không chỉ có thể đạt được mục tiêu đó rõ ràng hơn với một phương thức như thế sudoedit, còn có những nhược điểm khác của các lệnh như sudo nanosudo vim:

  • Nếu cấu hình trình soạn thảo của bạn khiến một cái gì đó được chạy, thì nó sẽ được chạy dưới quyền root. Đối với các biên tập viên tinh vi như thế vim, điều này có thể gây ra khá nhiều mã không cần thiết để chạy bằng root. Như đã đề cập ở trên, có ít mã chạy dưới dạng root nói chung là tốt và đây là một trong những đối số chống lại việc chạy trình soạn thảo đồ họa với quyền root.

    Nếu vimcấu hình của bạn có nhiều plugin - ví dụ: để thực hiện phân tích tĩnh trên mã nguồn khi bạn nhập nó - và root thì không, ít thứ chạy với quyền root hơn . (Thậm chí ít chạy dưới quyền root , nhưng các plugin của bạn vẫn hoạt động!) Điều này tách biệt với việc trình soạn thảo của bạn có phải là đồ họa hay không.sudo -H vim filenamesudo vim filenameVISUAL=vim sudoedit filename

  • Nếu cấu hình trình chỉnh sửa của bạn bị hỏng và khiến bạn không thể chỉnh sửa các tệp dễ dàng, thì việc khắc phục có thể còn rắc rối hơn nữa, vì nó cũng áp dụng cho root. Đây chỉ là một rắc rối, không phải là một vấn đề khó giải quyết.

  • Các lệnh như sudo vimmột chút vấn đề tương tự như lệnh (không khuyến khích!) sudo gedit. Nếu bạn chạy một trình soạn thảo như vimlà gốc nhưng không đặt lại $HOME(như sudo -Hsudo -isẽ làm gì), và nó tạo ra file cấu hình cho chính nó , các tập tin cấu hình sẽ nằm trong thư mục chính của bạn nhưng họ sẽ được sở hữu bởi root, và cấu hình của bạn có thể hơi bị phá vỡ khi bạn chạy trình soạn thảo như chính mình.

    Chà, điều này chắc chắn nghe rất giống vấn đề đó! Lý do nó ít quan trọng hơn so với các ứng dụng đồ họa là vì trình chỉnh sửa thường vẫn khởi động, các thông báo lỗi thường dễ hiểu hơn, bạn thường có thể tìm ra các tệp cụ thể nào bị ảnh hưởng dễ dàng hơn và thường bị phá vỡ Đó là một chương trình. (Các chương trình đồ họa sử dụng các tệp cấu hình ở nhiều nơi hơn.) Ngoài ra, không giống như các trình soạn thảo đồ họa, người dùng chỉ tình cờ sử dụng trình soạn thảo văn bản và không cố tình thay đổi cấu hình của nó, rất khó gặp phải sự cố này.

Một lần nữa, bạn có thể sử dụng cấu hình trình chỉnh sửa tài khoản người dùng của riêng mình trong khi tránh các vấn đề về quyền bằng cách sử dụng sudoedithoặc, từ máy tính để bàn, khởi động trình chỉnh sửa bình thường nhưng truy cập tệp qua một admin://đường dẫn.

Cuối cùng, lưu ý rằng hành vi được đề cập ở trên sudokhi nào -Hhoặc -iđược thông qua thực sự được lên kế hoạch để thay đổi trong bản phát hành Ubuntu trong tương lai (như cách đây đã có từ nhiều năm trước, trong hầu hết các hệ điều hành giống Unix sử dụng sudo). Hành vi đã thay đổi trong Ubuntu 19.10 , đó là bản phát hành phát triển kể từ khi viết bài này.


2
Vấn đề khác sudo -Hlà 1 trong số 100 hoặc 1000 bạn sẽ quên -Hvà quyền sở hữu tệp có thể chuyển từ người dùng sang root bên trong $HOMEmột nơi nào đó.
WinEunuuchs2Unix

3

Để trả lời câu hỏi của bạn: Nói chung, việc sử dụng trình soạn thảo GUI sẽ không phải là vấn đề xuất phát từ geditviệc rất chậm đối với các tệp lớn.

Nhưng đối với các chương trình GUI bạn sẽ sử dụng pkexechoặc gksuthay vì sudo. Bạn có thể cần phải cấu hìnhpkexec trước khi nó hoạt động.

pkexec gedit

hoặc cho các phiên bản Ubuntu cũ hơn (ví dụ 16.04), bạn có thể sử dụng:

gksu gedit

(Mặc dù bạn có thể thử các trình soạn thảo GUI tốt hơn, ví dụ geany:-))


gksubị loại bỏ khá nhiều.
pomsky

pkexec......
Rinzwind

đúng đúng sự thật ....
pLumo

3
Điều này sẽ giúp (@eliah)
pomsky

1
Để giải thích về nhận xét của pomsky. Nếu bạn nhận được kết nối bị từ chối, lỗi hiển thị, bạn sẽ cần đặt bí danh cho điều này thay vào đó:pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
mchid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.