Я хочу отредактировать crontab. Предполагается, что это Vi, но это не так, как вы можете видеть:
root@euve252628:~# crontab -e
0
0 * * * * /var/www/vhosts/nevemind-what-webs/httpdocs/megacronstunde.php
?
:wq
?
Да, это дало мне ?. И почему это дает мне ноль?
Когда я набираю q и нажимаю Enter - он завершает работу. Мне нужно знать, как сэкономить, потому что это не классический Vi.
С вашего вопроса кажется, что ваш EDITOR по умолчанию не является vim, и у вас проблемы с текущим редактором по умолчанию.
В приведенной ниже команде EDITOR по умолчанию будет vim
export EDITOR=vim
После установки редактора по умолчанию vim, запуск crontab -e будет использовать vim в качестве вашего редактора.
Примечания:
Если вы предпочитаете, вы можете выбрать другой EDITOR в качестве редактора по умолчанию. Если вы хотите окончательно установить редактор по умолчанию на vim, вам придется добавить указанную выше команду к вашим ~/.bashrc или ~/.profile или аналогичным файлам.Нажмите 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 (все команды, кроме одного, являются одной буквой (не считая данных аргументы), потому что кому нравится печатать), и вы получите сообщения об ошибках. Например, если вы просто нажмете Ctrl ...
?
H
Invalid address
Ясно, не так ли? (Пустая строка - это пустая команда - та, которая не является одной буквой. Пустая команда переходит к следующей строке и печатает ее. Если вы находитесь в конце файла, что всегда происходит в пустой file, следующей строки нет, поэтому адрес, на который вы запросили перемещение, недопустим.)
Команда crontab, как и большинство команд, которые запустите текстовый редактор, проверьте переменные среды VISUAL и EDITOR (в этом порядке), чтобы решить, какую программу запускать, возвращаясь к системному умолчанию. Если для любой из этих переменных установлено значение ed, измените его или удалите.
В Ubuntu (и Debian и других) системный редактор по умолчанию - /etc/alternatives/editor, который управляется с помощью механизма альтернатив , По умолчанию он выбирает «лучший» редактор, который установлен, где «лучший» определяется приоритетами, установленными сторонними разработчиками пакетов. Для настройки альтернативы используйте пакет с таким же именем . Вы можете отобразить доступные редакторы и их приоритеты с помощью
update-alternatives --display editor
ed имеет приоритет -100, тогда как все остальные «разумные» редакторы имеют положительный приоритет, поэтому единственный способ, которым он будет использоваться по умолчанию - если редактор не установлен. По умолчанию установка Ubuntu использует nano в качестве редактора по умолчанию с приоритетом 400. Если альтернатива установлена на ed, вы можете изменить ее с помощью
sudo update-alternatives --config editor
Чтобы использовать редактор VI для редактирования crontab, используйте следующую команду:
EDITOR="vi" crontab -e
или, если вы хотите редактировать другой редактор, например gedit, nano и т. д., просто замените vi редактором имя.
По умолчанию его приглашение представляет собой пустую строку. Если вы хотите выйти, просто введите q. Не префикс с :. Если у вас есть несохраненные изменения, он ответит с помощью ?. Вы можете интерпретировать это как «вы уверены?» И подтвердить, снова выполнив команду q. Кстати, любая команда, которую он не понимает, также заставит ее ответить ?. Это [... d1]
. Его команды - это то, на чем основан vim / vi / ex / sed, поэтому команды, такие как g/re/p, %s/vi/&m/g, 1,3d, /pattern/,$d, w, q, wq работают так же, как vim.
Команды, такие как i, a и c, входят в режим вставки. Чтобы выйти из режима вставки и вернуться в командный режим, просто введите строку, которая имеет только .. Чтобы «переместить» в другую строку, просто введите номер строки, смещение от текущей строки, например +2 или -1, или регулярное выражение в качестве команды для перехода к этой строке. . означает текущую строку в командном режиме. Вы можете использовать его, чтобы знать, где вы находитесь. $ означает последнюю строку.
Кстати, если вы хотите узнать больше об этом, это будет GNU-программа в Linux, большая часть ее документации находится в 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
EDIT: Как упоминания о грамотности, более полезные сообщения об ошибках могут быть активированы с помощью h или H. Кроме того, , вместо % в части диапазона команды является официальным способом ссылаться на «все строки» в ed. В GNU ed возможность использования % для этого поддерживается, но не упоминается в руководстве info. Использование % для всех строк было, по-видимому, изобретено ex, по-видимому, потому что там , означает .,., а не 1,$, как в ed.
Как и другие упомянутые ответы, если вы хотите указать другой редактор, вы можете сделать это, установив переменные среды EDITOR или VISUAL. Различие между этими двумя объясняется в этом ответе.
Вы можете сделать это так, если хотите установить его для одной команды:
EDITOR=vi crontab -e
или вот так, если вы хотите, чтобы все программы, запущенные в сеансе оболочки, использовали:
export EDITOR=vi
crontab -e
Вы можете сохранить export в ~/.profile или /etc/profile, в зависимости от того, хотите ли вы, чтобы он был пользователем или системным настройком для bash, соответственно. Это универсальный переносной способ установки редактора; вы можете сделать это в любом дистрибутиве.
В Ubuntu есть также команда 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.
С вашего вопроса кажется, что ваш EDITOR по умолчанию не является vim, и у вас проблемы с текущим редактором по умолчанию.
В приведенной ниже команде EDITOR по умолчанию будет vim
export EDITOR=vim
После установки редактора по умолчанию vim, запуск crontab -e будет использовать vim в качестве вашего редактора.
Примечания:
Если вы предпочитаете, вы можете выбрать другой EDITOR в качестве редактора по умолчанию. Если вы хотите окончательно установить редактор по умолчанию на vim, вам придется добавить указанную выше команду к вашим ~/.bashrc или ~/.profile или аналогичным файлам.Нажмите 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 (все команды, кроме одного, являются одной буквой (не считая данных аргументы), потому что кому нравится печатать), и вы получите сообщения об ошибках. Например, если вы просто нажмете Ctrl ...
?
H
Invalid address
Ясно, не так ли? (Пустая строка - это пустая команда - та, которая не является одной буквой. Пустая команда переходит к следующей строке и печатает ее. Если вы находитесь в конце файла, что всегда происходит в пустой file, следующей строки нет, поэтому адрес, на который вы запросили перемещение, недопустим.)
Команда crontab, как и большинство команд, которые запустите текстовый редактор, проверьте переменные среды VISUAL и EDITOR (в этом порядке), чтобы решить, какую программу запускать, возвращаясь к системному умолчанию. Если для любой из этих переменных установлено значение ed, измените его или удалите.
В Ubuntu (и Debian и других) системный редактор по умолчанию - /etc/alternatives/editor, который управляется с помощью механизма альтернатив , По умолчанию он выбирает «лучший» редактор, который установлен, где «лучший» определяется приоритетами, установленными сторонними разработчиками пакетов. Для настройки альтернативы используйте пакет с таким же именем . Вы можете отобразить доступные редакторы и их приоритеты с помощью
update-alternatives --display editor
ed имеет приоритет -100, тогда как все остальные «разумные» редакторы имеют положительный приоритет, поэтому единственный способ, которым он будет использоваться по умолчанию - если редактор не установлен. По умолчанию установка Ubuntu использует nano в качестве редактора по умолчанию с приоритетом 400. Если альтернатива установлена на ed, вы можете изменить ее с помощью
sudo update-alternatives --config editor
Чтобы использовать редактор VI для редактирования crontab, используйте следующую команду:
EDITOR="vi" crontab -e
или, если вы хотите редактировать другой редактор, например gedit, nano и т. д., просто замените vi редактором имя.
По умолчанию его приглашение представляет собой пустую строку. Если вы хотите выйти, просто введите q. Не префикс с :. Если у вас есть несохраненные изменения, он ответит с помощью ?. Вы можете интерпретировать это как «вы уверены?» И подтвердить, снова выполнив команду q. Кстати, любая команда, которую он не понимает, также заставит ее ответить ?. Это [... d1]
. Его команды - это то, на чем основан vim / vi / ex / sed, поэтому команды, такие как g/re/p, %s/vi/&m/g, 1,3d, /pattern/,$d, w, q, wq работают так же, как vim.
Команды, такие как i, a и c, входят в режим вставки. Чтобы выйти из режима вставки и вернуться в командный режим, просто введите строку, которая имеет только .. Чтобы «переместить» в другую строку, просто введите номер строки, смещение от текущей строки, например +2 или -1, или регулярное выражение в качестве команды для перехода к этой строке. . означает текущую строку в командном режиме. Вы можете использовать его, чтобы знать, где вы находитесь. $ означает последнюю строку.
Кстати, если вы хотите узнать больше об этом, это будет GNU-программа в Linux, большая часть ее документации находится в 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
EDIT: Как упоминания о грамотности, более полезные сообщения об ошибках могут быть активированы с помощью h или H. Кроме того, , вместо % в части диапазона команды является официальным способом ссылаться на «все строки» в ed. В GNU ed возможность использования % для этого поддерживается, но не упоминается в руководстве info. Использование % для всех строк было, по-видимому, изобретено ex, по-видимому, потому что там , означает .,., а не 1,$, как в ed.
Как и другие упомянутые ответы, если вы хотите указать другой редактор, вы можете сделать это, установив переменные среды EDITOR или VISUAL. Различие между этими двумя объясняется в этом ответе.
Вы можете сделать это так, если хотите установить его для одной команды:
EDITOR=vi crontab -e
или вот так, если вы хотите, чтобы все программы, запущенные в сеансе оболочки, использовали:
export EDITOR=vi
crontab -e
Вы можете сохранить export в ~/.profile или /etc/profile, в зависимости от того, хотите ли вы, чтобы он был пользователем или системным настройком для bash, соответственно. Это универсальный переносной способ установки редактора; вы можете сделать это в любом дистрибутиве.
В Ubuntu есть также команда 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.