crontab에 의해 열리는이 편집기는 무엇입니까?


41

crontab을 편집하고 싶습니다. 그것은 Vi 여야하지만, 알 수 있듯이 그렇지 않습니다.

root@euve252628:~# crontab -e

0

0 * * * * /var/www/vhosts/nevemind-what-webs/httpdocs/megacronstunde.php

?

:wq

?

그렇습니다 ?. 왜 제로를 제공합니까?

a를 입력 q하고 누르면 Enter-종료됩니다. 고전적인 Vi가 아니기 때문에 저장 방법을 알아야합니다.


5
대부분의 경우 ed, 기본적으로 문자 수를 제공합니다 (데비안 기반 시스템에서는 일반적으로 888"빈"crontab 템플릿의 문자 수인 데비안 기반 시스템 에서는 처음 임). 카운트가 0이면이를 수정해야합니다. Crontab -e 명령이 제대로 작동하지 않음을
steeldriver

31
에드! ! man ed : gnu.org/fun/jokes/ed-msg.html
juhist

6
@juhist 오히려 의견보다이 있어야한다 대답.
디저트

1
당신은 대개 무시하려는 동안 EDITOR뭔가 다른 실제로 에드 사용에 관심이 있다면, 이것은 위대한 소개 : sanctum.geek.nz/arabesque/actually-using-ed
시옹 Chiamiov

그런데 @justme, StackExchange에 오신 것을 환영합니다! 질문에 가장 잘 맞는 답변을 찾으면 옆에있는 확인 표시를 클릭하여 수락 할 수 있습니다.
JoL

답변:


65

그게 ed

기본적으로 프롬프트는 빈 문자열입니다. 종료하려면을 입력하십시오 q. 접두사를 사용하지 마십시오 :. 저장하지 않은 변경 사항이 있으면로 응답합니다 ?. "확실합니까?"로 해석하고 q다시 명령하여 확인할 수 있습니다. 그런데 이해하지 못하는 명령도 응답하게 ?됩니다. 그것이 아는 유일한 오류 메시지입니다.

그 명령은 무엇 정력 / VI / 전 / SED에 기반 명령 같은 g/re/p, %s/vi/&m/g, 1,3d, /pattern/,$d, w, q, wq단지 정력처럼 작동합니다.

명령 좋아 i, ac삽입 모드로 이동합니다. 삽입 모드를 종료하고 명령 모드로 돌아가려면으로 만 이루어진 행을 입력하십시오 .. 다른 행으로 "이동"하려면 행 번호, 또는와 같은 현재 행의 오프셋 +2또는 -1해당 행으로 이동하는 명령으로 정규식을 입력하십시오. .명령 모드에서 현재 줄을 의미합니다. 당신은 당신이 어디에 있는지 알 수 있습니다. $마지막 줄을 의미합니다.

그건 그렇고, 그것에 대해 더 배우고 싶다면, 이것은 리눅스에서 GNU 프로그램이며, 대부분의 문서는 info ed대신에 man ed있습니다.

다음은 주석이 추가 된 세션의 예입니다 (ed에서는 허용되지 않음).

$ ed
i                    # insert (on current line)
vi
.                    # end insert
%s/vi/&m/g           # substitute vi for vim globally in all lines
i                    # insert (on current line)
first line
.                    # end insert
$a                   # append on last line
last line
.                    # end insert
%p                   # print all lines
first line
vim
last line
2                    # move to line 2 and print it
vim
/line                # move forward to line matching /line/ and print it
last line
-1                   # move 1 line backwards and print it
vim
?line                # move backward to line matching /line/ and print it
first line
+1                   # move 1 line forward and print it
vim
g/line/p             # print lines matching /line/ (grep)
first line
last line
p                    # print (current line)
last line
.                    # move to current line and print it
last line
c                    # change (current line)
final line
.                    # end insert
%p                   # print all lines
first line
vim
final line
/vim/,$c             # change from line matching /vim/ to last line
that's all
.                    # end insert
%p                   # print all lines
first line
that's all
wq                   # write and quit
?                    # write what?
h                    # help with last error message
No current filename
wq                   # write and quit to check error message
?
H                    # help with all error messages
No current filename
wq                   # write and quit to check error message
?
No current filename
wq file.txt          # write file.txt and quit
22                   # wrote 22 bytes

편집 : grawity 언급처럼, 더 도움이 오류 메시지와 함께 활성화 될 수 h또는 H. 또한 명령의 범위 부분이 ,아닌의 %"모든 행"을 참조하는 공식적인 방법입니다 ed. GNU ed에서는이를 사용할 가능성 %이 지원되지만 info매뉴얼 에서는 언급되지 않았습니다 . 를 사용하는 %모든 라인은 분명히에 의해 발명되었다 ex, 겉으로보기 때문에, 거기 ,수단 .,.보다는 1,$처럼 ed.

EDIT2 : 다른 편집기 설정

언급 한 다른 답변과 마찬가지로 다른 편집기를 지정하려면 EDITOR또는 VISUAL환경 변수를 설정하여 그렇게 할 수 있습니다 . 이 둘의 차이점은 이 답변에 설명되어 있습니다.

단일 명령에 대해 설정하려는 경우 다음과 같이 수행 할 수 있습니다.

EDITOR=vi crontab -e

또는 쉘 세션에서 시작된 모든 프로그램이이를 사용하도록하려면 다음과 같이하십시오.

export EDITOR=vi
crontab -e

exportin ~/.profile또는을 /etc/profile각각 bash의 사용자 또는 시스템 설정으로 원하는지 여부에 따라 저장할 수 있습니다 . 이것이 편집기를 설정하는 유닉스 휴대용 방법입니다. 모든 배포에서이 작업을 수행 할 수 있습니다.

우분투에는 update-alternatives명령도 있습니다. 현재 기본 편집기는로 볼 수 있으며 이를 update-alternatives --display editor사용 update-alternatives --config editor하여 설정할 수 있습니다.

$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode.

2
최신 버전은 영어 오류 메시지를 알고 h있으므로 요청하거나 H영구적으로 활성화하기 위해 사용해야합니다.
grawity

2
(또한, 발명품 인 %것으로 보인다 . 공식적으로 ed 는 일부 버전도 허용되지만 모든 라인을 의미하는 데 사용 한다 .),%
grawity

이것은 정확 하지만 EDITORVISUAL환경 변수 도 언급해야 합니다.
chrylis

그래픽 편집 모드에서 나가기 위해 ":"을 먼저 누르지 않아도된다는 점을 제외하고는의 대부분의 명령 ed은에서와 동일 vi합니다. 의 80x25 "녹색 화면"터미널 작품 - 나는 "진짜 프로그래머는"GUI를 사용하여 시간을 낭비하지 않았을 때 유닉스를 배운 거의 뿐만 아니라 편집하기위한 IBM 029 카드 펀치,하지만 매우를)
alephzero

@chrylis EDITORVISUAL정말 관련이 없습니다. 문제는 기본적 으로이 편집기는 무엇이며 어떻게 사용합니까? (무엇이있다 0이를 ?, 그리고 어떻게 저장합니까?).
JoL

39

이 편집기가 무엇인지 찾는 방법

Ctrl+를 누릅니다 Z. 편집기가 일시 중지되고 쉘 프롬프트가 표시됩니다. 프롬프트 ps에서이 터미널에서 실행중인 프로세스를 확인하십시오.

bash-4.3$ crontab -e
1077
^Z
[1]+  Stopped                 crontab -e
bash-4.3$ ps
  PID TTY          TIME CMD
26295 pts/10   00:00:00 bash
26297 pts/10   00:00:00 crontab
26298 pts/10   00:00:00 sh
26299 pts/10   00:00:00 ed
26302 pts/10   00:00:00 ps

bash는 원래 쉘이며, crontab예상 sh되고 crontab,에 의해 호출 된 다른 쉘 ps이며, 실행중인 ps명령입니다. 그것은 같은 이름ed패키지로 제공됩니다 .

에디터를 종료하는 방법을 알아낼 수없는 경우,이 시점에서 그것을 죽일와 수 kill 26302또는 kill %1.

에드는 무엇입니까?

에드 (Ed)는 고대 편집자로서 모니터가 평범한 시절 이전으로 거슬러 올라갑니다. 대화 형 출력 주변 장치가 텔레 프린터 인 컴퓨터 용으로 설계되었습니다 .

0시작 부분에 표시 파일의 행의 수입니다. 아마도 그것은 중요한 정보입니다.

?에드가 입력 한 내용을 이해하지 못했음을 의미합니다. 라인 프린터는 속도가 느리므로 ed는 오류 메시지와 같은 무의미한 정보를 표시하는 데 시간과 잉크를 낭비하지 않습니다. 오래된 농담 (나는 출처를 모른다) :

켄 톰슨은 자동차 디자인을 도와주었습니다. 대부분의 자동차와 달리 속도계, 가스 게이지 또는 현대 운전자를 괴롭히는 다른 수많은 바보 등이 없습니다. 오히려 운전자가 실수를하면 대쉬 보드 중앙에 거대한“?”가 켜집니다. 톰슨은“경험있는 운전자는 대개 무엇이 잘못되었는지 알게 될 것입니다.”라고 말합니다.

경험이 H없다고 생각되면 명령을 발행 할 수 있습니다 (모든 명령을 제외한 모든 명령은 입력을 좋아하지 않기 때문에 데이터 인수를 계산하지 않는 단일 문자 임). 오류 메시지가 나타납니다. 예를 들어 Enter

?
H
Invalid address

분명하지 않습니까? (빈 줄은 빈 명령입니다-한 글자가 아닌 명령입니다. 빈 명령은 다음 줄로 이동하여 인쇄합니다. 파일의 끝 부분에있는 경우 항상 빈 상태입니다 파일에 다음 줄이 없으므로 이동 요청한 주소가 잘못되었습니다.)

다른 에디터를 얻는 방법

crontab텍스트 편집기를 실행하는 대부분 의 명령과 마찬가지로 명령은 환경 변수를 확인 VISUAL하고 EDITOR(순서대로) 실행할 프로그램을 결정하여 시스템 기본값으로 돌아갑니다. 이 변수 중 하나가로 설정되어 있으면 ed변경하거나 제거하십시오.

우분투 (및 데비안 및 기타)에서 시스템 기본 편집기는 대체 메커니즘을/etc/alternatives/editor 통해 관리됩니다 . 기본적으로 설치된 "최상의"편집기를 선택합니다. 여기서 "최상의"는 패키지 관리자가 설정 한 우선 순위로 정의됩니다. 대안을 구성하는 데 사용 합니다. 사용 가능한 편집기와 우선 순위를 표시 할 수 있습니다.update-alternatives

update-alternatives --display editor

ed-100의 우선 순위를 갖는 반면, 다른 모든 "유용한"편집기의 우선 순위는 양수이므로 기본적으로 편집기가 설치되어 있지 않은 경우에만 기본적으로 사용됩니다. Ubuntu의 기본 설치는 우선 순위가 400 인 기본 편집기로 nano를 사용합니다. 대안이로 설정된 경우 다음 ed과 같이 변경할 수 있습니다.

sudo update-alternatives --config editor

질,해야하지 우분투 (데비안 등)에서 시스템 기본 편집기의 / etc / 에디터 / 대체됩니다 에 고쳐 수 에 우분투 (데비안 등), 시스템 기본 편집기는 / usr / 빈 / 편집기는 ?
heemayl

상당히 포괄적입니다 (EDITOR env 변수를 언급하지 않습니까?하지만 의도적으로 의도 한 것이므로 사람들이 업데이트 대안을 통해 시스템에 설정하는 올바른 방법을 사용합니다). 아마 그러나 변경 : pspstree -sap $$ ? (가 트리 형식으로 지금처럼 쉽게 실행 된 편집기를 알아낼)
올리비에 Dulac에게

@heemayl /usr/bin/editor은에 대한 심볼릭 링크 /etc/alternatives/editor입니다. 응용 프로그램 호출이라는 사실은 /usr/bin/editor건너 뛴 세부 사항입니다.
Gilles 'SO- 악마 그만'

3
@OlivierDulac 나는 언급 EDITOR하고 VISUAL있습니다. 실제로 시스템 전체 환경 설정이 아니라 사용자 환경 설정이기 때문에 편집기를 선택하는 올바른 방법입니다. 나는 ps일을 단순하게 유지하기 위해 여기 에 집착하는 것을 선호합니다 .
Gilles 'SO- 악의를 멈춰라'

1
"... 대화식 출력 주변 장치가 라인 프린터 인 컴퓨터." 라인 프린터는 대화식 장치 가 아니 었습니다. 대량의 인쇄 출력물을 만드는 비교적 빠른 속도의 장치였습니다. 텔레타이프 (펀치 페이퍼 테이프 I / O 장치로도 사용 가능) 또는 IBM "골프 볼"타자기와 같은 "키보드가있는 인쇄 터미널"을 의미합니다.
alephzero

12

귀하의 질문에서 기본 EDITOR가 아닌 것처럼 보이고 vim현재 기본 편집기에 문제가 있습니다.

아래 명령은 기본 EDITOR를 vim

export EDITOR=vim

기본 편집기를로 설정하면 vimrunning crontab -evim편집기로 사용 됩니다.

노트:

  1. 원하는 경우 다른 편집기를 기본 편집기로 선택할 수 있습니다
  2. 당신의 기본 편집기 설정하려는 경우 vim영구적를, 당신은 당신에 위의 명령을 추가해야 ~/.bashrc하거나 ~/.profile또는 유사한 파일.

4

VI 편집기를 사용하여 crontab을 편집하려면 아래 명령을 사용하십시오.

EDITOR="vi" crontab -e

또는 gedit, nano 등과 같은 다른 편집기로 편집하려면 vi를 편집기 이름으로 바꾸십시오.


백만 감사합니다! EDITOR = "vi"crontab -e를 사용하면 작동합니다.
justme

3
@gronostaj 이것은 여기에 게시 된 다른 답변과 동일하지 않습니다. 단일 명령의 단일 실행에 대한 환경 변수를 설정하는 것은 현재 쉘 인스턴스에서 실행되는 모든 후속 명령에 대한 환경 변수를 내보내는 것과 다릅니다. 이 답변 은 설정을 영구적으로 변경하는 데 유용하지만 실행 당 편집기를 제어하는 ​​경우에는 정답입니다.
Eliah Kagan

3
실제로 변수를 영구적으로 변경하는 것은 바람직하지 않을 수 있으므로 명령 행에 환경 변수를 추가하는 방법을 아는 것이 매우 중요합니다. * nix 쉘의 미묘한 장점 중 하나는이를 쉽게 수행 할 수 있다는 것입니다.
Monty Harder
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.