Emacs 내에서 su / sudo가있는 파일 열기


174

내가 사용하여 기존 이맥스 세션에서 파일을 열고 자하는 가정 su또는 sudo쉘 아래로 떨어 뜨리고하지 않고, sudoedit또는 sudo emacs. 이를 수행하는 한 가지 방법은

C-x C-f /sudo::/path/to/file

그러나 이것은 SSH를 통한 비싼 왕복 여행 이 필요합니다 . 더 직접적인 방법이 있습니까?

[편집] @JBB가 맞습니다. 저장하고 열 수 있도록 su/ sudo를 호출 할 수 있기를 원합니다 . 저장할 때 다시 인증하는 것이 좋습니다 (이상적이지는 않지만). 내가 무엇을 찾고 있어요 것은 변형입니다 find-filesave-buffer이 될 수를 통해 "파이프" su/ sudo.


5
나는 emacs22 이후 기본적으로 tramp가 설치된다는 점에 주목하고 싶기 때문에 대부분의 사람들은 문제없이 Cc Cf / sudo :: // path-to / file을 할 수있다.
미로

1
sudoedit언급 해 주셔서 감사합니다 . 굉장히 유용하다.
tshepang

6
Cc Cf는 Cx Cf 여야합니까?
James.Xu

답변:


64

Tramp의 좋은 점은 첫 번째 파일을 열 때 SSH에 대한 왕복 요금 만 지불한다는 것입니다. 그런 다음 Sudo는 자격 증명을 캐시하고 Emacs는 핸들을 저장하므로 후속 sudo가 열린 파일의 시간이 훨씬 단축됩니다.

나는 짐을 덜기 위해 시간이 더 걸리지 않았다. 충분히 빠릅니다, IMO.


3
잠깐만 ... 캐시가 얼마나 자주 만료됩니까?
Chris Conway

20
Tramp는 SSH를 통해 왕복 하지 않으며 서브 쉘을 사용합니다 .
Teddy

내 요점은 실제로 첫 번째 열린 파일의 비용을 지불하고 다른 파일은 비용을 지불하지 않는다는 것입니다.
EfForEffort 2016 년


18

당신이 사용하는 경우 helm, helm-find-files지원이와 루트로 파일을 여는 C-c r.


이것은 작동하지만 세션에서 영구적 인 것처럼 보이며 이후에 모든 파일이 열리고 루트로 저장됩니다. 문서 M-x helm-find-files C-c ?에서 사용자로서 일반 열기 모드로 돌아가는 방법을 알려주 는 내용은 없습니다 . 이렇게 C-c r다시하는 것은 중지되지 않습니다.
Liam

@Liam 그 기능을 사용할 때 여전히 일반 사용자로 파일을 열 수 있습니다.
Qudit

매우 이상합니다. 일부 파일은 문제가없고 일부는 루트로 열려고합니다. emacs 명령으로 루트 비밀번호를 죽인 다음 비밀번호를 sudo -k묻는 프롬프트를 표시합니다. Emacs를 다시 시작했는데 문제가 해결되지 않았습니다. 나는 파고 들었고 .emacs.d, 부정 기선에 대한 참조를 찾았으므로 삭제했습니다. 이제 더 나아 보이지만 내가 무료인지 확실하지 않습니다.
Liam

15

실제로 원래 질문에 대한 대답은 아니지만 다음은 트램 / 스도 경로를 조금 더 쉽게하는 도우미 기능입니다.

(defun sudo-find-file (파일 이름)
  "파일 찾기와 유사하지만 파일을 루트로 엽니 다."
  (대화식 "FSudo Find File :")
  (((tramp-file-name (concat "/ sudo ::"(확장 파일 이름 파일 이름)))))
    (파일 트램프 파일 이름 찾기)))

나는 이맥스 스타터 키트 와 비슷한 것이 있다고 생각한다 esk-sudo-edit.
mrmagooey


4

귀하의 예는 적어도 내 버전의 TRAMP ( "2.1.13-pre")가 아닌 ssh를 전혀 시작하지 않습니다. 파일 찾기와 저장 버퍼 모두 훌륭하게 작동합니다.


자격 증명이 캐시되어있을 수 있습니다. TRAMP가 처음 시작되면 10-15 초의 SSH 항목을 거치게됩니다. (나도 2.1.13-pre를 가지고있다.)
Chris Conway

확실합니까? 즉, 서브 쉘을 시작해야하지만 localhost에 대한 SSH 세션은 아닙니다. 모든 TRAMP 자동 감지 기능을 처음 실행하는 데 약 5 초가 걸립니다.
jfm3 2009 년

글쎄요, 잘 모르겠어요 10-15 초의 TRAMP (아마도 SSH)가 있다고 말해야합니다. SSH 자체는 걱정하지 않지만 시작시 지연이 걱정됩니다. 이 스타트 업은 얼마나 오래 지속됩니까?
Chris Conway

처음 할 때 1 초 이상 걸립니다. 즉, / sudo :: file을 저장하고 버퍼를 삭제 한 후 / sudo :: file2를 열면 file2가 빠르게 열립니다. 그리고 쉘을 열어두고 모든 스니핑 결과를 캐시합니다.
jfm3

그러나 (1) 해당 Emacs 프로세스 또는 (2) 모든 Emacs 프로세스에 대해 자격 증명이 캐시됩니까? (a) Emacs가 종료 될 때, (b) 일정 시간이 지난 후 (시간? 일? 주?) 또는 (c) 시스템 재부팅 후 만료됩니까?
Chris Conway

3

조언 명령을 사용하는 것이 좋습니다. 이 기능을 ~ / .emacs에 넣으십시오.

(defadvice ido-find-file (after find-file-sudo activate)
  "Find file as root if necessary."
  (unless (and buffer-file-name
               (file-writable-p buffer-file-name))
    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))

명백한 점을 지적하기 위해서는 ido-find-file파일을 찾는 데 사용해야 합니다.
tripleee 2012 년

1

(로컬에서만 작동합니다. 트램프를 통해 올바르게 작동하려면 업데이트해야합니다)

버튼의 대답이 약간 확장되었습니다.

(defun sudo-find-file (file-name)
"Like find file, but opens the file as root."
(interactive "FSudo Find File: ")
(let ((tramp-file-name (concat "/sudo::" (expand-file-name file-name))))
(find-file tramp-file-name)))


(add-hook 'dired-mode-hook
    (lambda ()
      ;; open current file as sudo 
      (local-set-key (kbd "C-x <M-S-return>") (lambda()
        (interactive)
        (message "!!! SUDO opening %s" (dired-file-name-at-point))
        (sudo-find-file (dired-file-name-at-point))
      ))
    )
)

0

어. 아마도 Emacs와 exec sudo emacs에서 쉘을 열 수있을 것입니다.

문제는 아마도 파일을 열고 싶지 않다는 것입니다. 나중에 저장할 수 있기를 원합니다. 따라서 파일을 열기 위해 존재하는 것이 아니라 루트 권한을 유지해야합니다.

Emacs가 창 관리자가 되길 원하는 것 같습니다. 그것 없이는 부풀어 오른다. :)


11
하하 당신은 부풀어 말했다. 이맥스는 거대해 보였습니다. 이제 Java, Ruby 및 아마도 다른 것들의 런타임 풋 프린트와 비교할 때 상당히 희박 해 보입니다. 어쨌든 Chris의 질문은 Emacs를 완벽하게 합법적으로 사용한다고 생각합니다.
jfm3

1
넌 날 이겼어 이 모델을 일관되게 사용합니다. 로그인 할 때 나는 일반적인 것들을위한 하나의 Emacs 세션을 시작하고, 하나는 SU 액세스 (루트로) 그리고 하나 이상의 소프트웨어 개발 (일반적으로 프로젝트마다 있지만 항상 그런 것은 아님)을 시작합니다. 몇 년 동안 해왔습니다. 그냥 작동합니다.
pajato0

"Emacs에서 쉘을 열고 sudo emacs를 실행하십시오"
johnbakers

1
@OpenLearner 진심으로, 당신은 정말로 그렇게하고 싶지 않습니다.
tripleee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.