Comments 76
Автору спасибо — почерпнул новые знания, статью в мемы, а заплюсую завтра — сегодня мана кончилась =)
cd -
переход в предыщую директорую
например
тут мы из директории /usr/local/include/boost перешли в домашнуюю, а потом с помощью 'cd -' вернулись в предыщую
переход в предыщую директорую
например
$ pwd
/usr/local/include/boost
$ cd
bogolt@view:~$ cd -
/usr/local/include/boost
тут мы из директории /usr/local/include/boost перешли в домашнуюю, а потом с помощью 'cd -' вернулись в предыщую
Самая полезная фича для меня Ctrl-R — реверсивный поиск. Позволяет найти команду в истории по ее части, и не только запустить заново, но и отредактировать перед этим.
Спасибо, пару удобных комбинаций не знал.
Операции с курсором, кстати — это не Bash, это readline. И ещё он умеет работать в vi-режиме (почти всё поддерживается)
$ set -o vi
что намного удобнее может быть для редактирования.
$ set -o vi
что намного удобнее может быть для редактирования.
«Удобнее для тех, кто знаком с vi»
Эмс… Почему это? Можно и через этот режим познакомиться с тем, как работается в Vi. Один фиг — надо всякие нажималки магические запоминать. По-умолчанию стоит emacs режим, но вы же не считаете, что он удобнее только для тех, кто знаком с emacs.
Вот. Так что, попробовать стоит. IMHO, всё же Vi устроен логичнее, да и искать всякими regexp'ами позволяет по истории, что может быть полезнее.
Вот. Так что, попробовать стоит. IMHO, всё же Vi устроен логичнее, да и искать всякими regexp'ами позволяет по истории, что может быть полезнее.
Я то знаю, я его и использую уже давно. Не забывайте что большинство считает что у vi есть всего два режима. И всё же «порог вхождения» у emacs ниже чем у vi\vim =)
О. Вот про порог вхождения не соглашусь. Я в Emacs так и не вошёл, например. Хотя пытался раза три. Уж слишком там много магических последовательностей нужно запоминать. vim как-то в этом плане более интуитивно понятный.
Ну это для Вас. Для большинства новичков которых я видел\знаю vi сложнее. Нажать Ctrl-a же проще и понятнее, чем Esc затем, Shift-a
Ну… Я ж — не уникальная в этом личность. Для многих vim оказывается проще, поэтому я и упомянул про vi-режим readline. Да и потом, я же тоже пытался в Emacs войти с уровня новичка. Но вот почему-то проще оказалось войти в Vim. Хотя, вроде как, формально, действительно проще нажимать ctrl-a, а не esc, shift-a… Но вот почему-то Emacs не пошёл у меня.
Мы с Вами просто относимся к тем, кому удобнее vi, но, как показывает статистика, нас меньшинство :)
Да почему? Вот статистика использования пакетов в Arch Linux
www.archlinux.de/?page=FunStatistics
Нужно учитывать, что nano и vi там ставятся по умолчанию при инсталляции системы, а вот Vim, Gedit, Emacs уже надо устанавливать руками. Ну… Как бы… Arch, конечно, не mainstream дистрибутив, но всё же.
www.archlinux.de/?page=FunStatistics
Нужно учитывать, что nano и vi там ставятся по умолчанию при инсталляции системы, а вот Vim, Gedit, Emacs уже надо устанавливать руками. Ну… Как бы… Arch, конечно, не mainstream дистрибутив, но всё же.
хм. А как пользоваться? Вот я башу сказал set -o vi, а дальше? ниче не поменялось вроде в поведении readline.
Esc для выхода из режима вставки попробуйте
Ну. Надо же ещё документацию почитать. Возможностей, по идее, не больше, просто пользоваться может быть удобнее. На любителя всё конечно.
Но, например, вот бывает такое удобство… Допустим, хотим поискать нечто (find) с некими экзотическими ключиками, которые вспоминать лень. Для этого…
1. Жмём Esc — вошли в командный режим
2. Пишем /find — это поиск в истории. Жмём enter. Жмём n или N пока не находим нужное вхождение:
find 'a b c d' -type f -a --newer…
3. Жмём 0 — попадаем в начало строки. Жмём f' — переходим на первую кавычку, жмём c; — замена всего до следующей кавычки (; — повтор предыдушей команды перемещения, и заменяем путь для поиска:
find 'some path' -type f -a --newer…
Самое удобное в vi режиме — это как раз навигация по символам в командной строке. Можно ещё куски копировать. Например, можно было бы жмахнуть y; — и получить путь в 'буфере обмена'. По моим личным ощущениям — это удобнее, чем emacs.
Но, например, вот бывает такое удобство… Допустим, хотим поискать нечто (find) с некими экзотическими ключиками, которые вспоминать лень. Для этого…
1. Жмём Esc — вошли в командный режим
2. Пишем /find — это поиск в истории. Жмём enter. Жмём n или N пока не находим нужное вхождение:
find 'a b c d' -type f -a --newer…
3. Жмём 0 — попадаем в начало строки. Жмём f' — переходим на первую кавычку, жмём c; — замена всего до следующей кавычки (; — повтор предыдушей команды перемещения, и заменяем путь для поиска:
find 'some path' -type f -a --newer…
Самое удобное в vi режиме — это как раз навигация по символам в командной строке. Можно ещё куски копировать. Например, можно было бы жмахнуть y; — и получить путь в 'буфере обмена'. По моим личным ощущениям — это удобнее, чем emacs.
Это просто невообразимо круто! Спасибо тебе добрый человек)
Кстати странно, что всё это отсутствует почти во всех руководствах по баш и учебников по линукс, так же как и большинство горячих клавиш. Я когда только начинал познавать линукс, то далеко не из первой книжки по этой системе узнал о существовании ctrl+alt+f(1-12), что весьма странно, вроде и основы, а в книжках для чайника про это нет.
Ctrl+R — поиск по истории. начинаешь печатать, а консолька сама подставляет подходящие команды.
Спасибо, забрал в избранное
> Майка Лукидиса
Уставшими глазами прочел «Майка Линуксоида» :)
А за статью большое спасибо, в избранное!
Уставшими глазами прочел «Майка Линуксоида» :)
А за статью большое спасибо, в избранное!
alias-ы тоже полезны
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias psx="ps -auxw | grep $1"
...
А у меня вот такое лежит в алиасах.
function kkill()
{
kill $(pgrep $1)
}
Если нужно прибить процесс, просто жму k+k+[Tab] и вписываю имя неугодного процесса.
ps -A тоже на алиасе, для удобства.
function kkill()
{
kill $(pgrep $1)
}
Если нужно прибить процесс, просто жму k+k+[Tab] и вписываю имя неугодного процесса.
ps -A тоже на алиасе, для удобства.
killall
man pkill
shopt -s autocd
:-)
ещё вспомнил в копилку: Ctrl+L очищает экран.
Предпочитаю использовать команду 'reset' (это не перезагрузка, просто сброс консоли). Помогает, когда шеллу сносит крышу от кривых esc-последовательностей. Заодно сбрасывает весь буфер, в то время как после Ctrl+L можно тупо проскроллить вверх и увидеть всё выше. (И зачем тогда чистить экран?)
А вот фича, которую я люблю даже больше CTRL-R:
А теперь наберите в консоли:
И курсором вверх-вниз для показа последних комманд, начинающихся на cat(или что угодно другое).
$ cat .inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward
А теперь наберите в консоли:
$ cat
И курсором вверх-вниз для показа последних комманд, начинающихся на cat(или что угодно другое).
'man bash' вам в помощь!
в главе Readline Command Names приведен полный список команд.
мой хит-парад — C-u, C-w, C-y, M-#
в главе Readline Command Names приведен полный список команд.
мой хит-парад — C-u, C-w, C-y, M-#
zsh попробуйте — оч. много интерактивных приятностей
И отсутствие привычного readline. Поначалу напрягает.
Я удаленно администрирую больше 10 юниксовых серверов, мне в принципе будет неудобно метаться между разными шеллами, запоминать кучу комбинаций клавиш и т.д. На всех моих серверах по умолчанию идет bash, поэтому все описанное мной здесь работает куда бы я не залогинился (ну кроме одной машиной с AIX, там Korn shell).
А zsh это, конечно, очень хорошо, но дальше домашней машины и ноута он не выходит.
А zsh это, конечно, очень хорошо, но дальше домашней машины и ноута он не выходит.
Согласен полностью. Но ещё более согласен если не только вы их администрите. На серверах и вообще шаредных компах в руте используем bash почти в голом виде, с минимумом алиасов. И вим гол как сокол. В таких вещах чем стандартнее тем лучше (про судо знаю, но у нас всё равно рут для админов — причины есть). А в скриптах, конечно, первой строкой — банг-баш.
man bash
Еще к удобствам можно отнести работу с хистори и настройку окружения:
1. Ведение лога истории с datestamp'ом:
export HISTTIMEFORMAT='%F %T '
2. Занесение команды в .bash_history сразу же, после нажатия enter (а не после завершения сеанса), что весьма удобно при одновременной работе в нескольких сессиях:
PROMPT_COMMAND='history -a;history -n'
3. Удобная настройка PS1 (чтобы было видно и юзера/хост и желательно дату и время [у меня некоторые сессии висят неделями])
export PS1='\033[00;32m\][`date +%d" "%h" "%Y" "%T`] \u@\h \w\n \$\[\033[00m\] '
4. Увеличение размера хистори (при активной работе 500 — это очень мало)
export HISTSIZE=100500
5. Говорим башу не заносить в хистори повторяющиеся друг за другом команды:
export HISTCONTROL=ignoredups
6. Отключаем занесение «бесполезных» с точки зрения истории команд:
export HISTIGNORE="&:ls:[bf]g:exit:[ ]*:ssh:history"
7. Не забываем про bash_completition (который предварительно надо не забыть подключить):
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
— 8. $ ls some-file
$ cp !$ !$.back
( !$ — заменяется на последний аргумент [в данном случае some-file] )
9. фича только для bash 4 и выше (в 3, емнип, не работает)
shopt -s globstar
и echo ** будет практически равносилен find.
Вроде все, что вспомнил (:
1. Ведение лога истории с datestamp'ом:
export HISTTIMEFORMAT='%F %T '
2. Занесение команды в .bash_history сразу же, после нажатия enter (а не после завершения сеанса), что весьма удобно при одновременной работе в нескольких сессиях:
PROMPT_COMMAND='history -a;history -n'
3. Удобная настройка PS1 (чтобы было видно и юзера/хост и желательно дату и время [у меня некоторые сессии висят неделями])
export PS1='\033[00;32m\][`date +%d" "%h" "%Y" "%T`] \u@\h \w\n \$\[\033[00m\] '
4. Увеличение размера хистори (при активной работе 500 — это очень мало)
export HISTSIZE=100500
5. Говорим башу не заносить в хистори повторяющиеся друг за другом команды:
export HISTCONTROL=ignoredups
6. Отключаем занесение «бесполезных» с точки зрения истории команд:
export HISTIGNORE="&:ls:[bf]g:exit:[ ]*:ssh:history"
7. Не забываем про bash_completition (который предварительно надо не забыть подключить):
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
— 8. $ ls some-file
$ cp !$ !$.back
( !$ — заменяется на последний аргумент [в данном случае some-file] )
9. фича только для bash 4 и выше (в 3, емнип, не работает)
shopt -s globstar
и echo ** будет практически равносилен find.
Вроде все, что вспомнил (:
Еще нравится:
cp /etc/very/long/path/{filename.txt,newname.txt}
cp /etc/very/long/path/{filename.txt,newname.txt}
Хоть по сути к bash'у это относится лишь косвенно, но я бы ещё упомянул о каких-нибудь сторонних утилитах, упрощающих работу в консоли. К примеру screen. Очень удобно держать в консоли несколько подписанных вкладок и перемещаться по ним по хоткеям (Ctrl + RightArrow/LeftArrow, например). У меня всегда открыто 5 вкладок, которыми активно пользуюсь.
такие элементарные вещи.
очень часто забываешь про них, и половину из всего этого не знал. спасибо что научили и освежили память.
выполнение предыдущец команды из под рута: sudo!!!
поиск файла в система: locate file.name (предварительно совершив updatedb)
очень часто забываешь про них, и половину из всего этого не знал. спасибо что научили и освежили память.
выполнение предыдущец команды из под рута: sudo!!!
поиск файла в система: locate file.name (предварительно совершив updatedb)
А как же божественные Ctrl-p\n? Это куда удобнее чем тянуться к стрелочкам.
Как Ctrl-A мнемонически соотносится со словом Home?
alias pingy=ping ya.ru
alias tracy=traceroute ya.ru
Если провайдеру не доверяете.
alias tracy=traceroute ya.ru
Если провайдеру не доверяете.
UFO just landed and posted this here
То, что работает во всех шеллах, а не только в bash, для временного захода в какой-то каталог и возврата обратно: запустить ещё один экземпляр оболочки и там сделать всё необходимое.
Ниженаписанное делалось в FreeBSD в csh.
Кстати, в данном случае я не набирал «exit», а просто нажал Ctrl-D: конец потока стандартного ввода, что завершает шелл.
Мой пример можно было бы сделать ещё и вот так:
… но это уже другая история :-) Собсна, скобки — это шорткат для запуска дочернего шелла и команды в нём.
Ниженаписанное делалось в FreeBSD в csh.
[/usr/local/etc/rc.d] 23:53 kibab@kibab-nb%csh
[/usr/local/etc/rc.d] 23:53 kibab@kibab-nb%cd /etc/
[/etc] 23:54 kibab@kibab-nb%grep -r someCrappyJob rc.conf
[/etc] 23:54 kibab@kibab-nb%exit
[/usr/local/etc/rc.d] 23:54 kibab@kibab-nb%
Кстати, в данном случае я не набирал «exit», а просто нажал Ctrl-D: конец потока стандартного ввода, что завершает шелл.
Мой пример можно было бы сделать ещё и вот так:
[/usr/local/etc/rc.d] 23:57 kibab@kibab-nb%(cd /etc/ && grep someCrappyJob rc.conf)
[/usr/local/etc/rc.d] 23:57 kibab@kibab-nb%
… но это уже другая история :-) Собсна, скобки — это шорткат для запуска дочернего шелла и команды в нём.
Вот с переменными только проблемы у незнающих возникнут при использовании подшеллов. Что-то типа
может вызвать как минимум удивление (:
Да далеко не всегда нужны подшеллы. Команды можно группировать фигурными скобками {}:
$ (A=1); echo $A
может вызвать как минимум удивление (:
Да далеко не всегда нужны подшеллы. Команды можно группировать фигурными скобками {}:
$ [ $(($RANDOM%2)) -eq 0 ] && { echo 'Even'; echo 'It works!'; } || { echo 'Odd'; echo 'It doesnt work!'; }
ничего нового, всё уже есть на хабре, и даже не особо не разбросано по отдельным постам.
Оформил в виде памятки:
Работу с хистори и настройка окружения (для постоянного использования добавить в .bashrc)
1. Ведение лога истории с datestamp'ом:
export HISTTIMEFORMAT='%F %T '
2. Занесение команды в .bash_history сразу же, после нажатия enter (а не после завершения сеанса), что весьма удобно при одновременной работе в нескольких сессиях:
PROMPT_COMMAND='history -a;history -n'
3. Удобная настройка PS1 (чтобы было видно и юзера/хост и желательно дату и время [у меня некоторые сессии висят неделями])
export PS1='\033[00;32m\][`date +%d" "%h" "%Y" "%T`] \u@\h \w\n \$\[\033[00m\] '
4. Увеличение размера хистори (при активной работе 500 — это очень мало)
export HISTSIZE=100500
5. Говорим башу не заносить в хистори повторяющиеся друг за другом команды:
export HISTCONTROL=ignoredups
6. Отключаем занесение «бесполезных» с точки зрения истории команд:
export HISTIGNORE="&:ls:[bf]g:exit:[ ]*:ssh:history"
7. Используем «сокращения» для популярных комманд:
alias u='sudo pacman -Syu'
alias extmonitor='xrandr --output VGA1 --auto --primary && xrandr --rate 72 && xrandr --output LVDS1 --off'
alias intmonitor='xrandr --output LVDS1 --auto --primary && xrandr --output VGA1 --off'
- CTRL+R — вводишь слово, с которым надо найти команду в истории. Повторные CTRL+R перебирают все команды в истории с этим словом.
- CTRL+L — очистка экрана. Я обычно писал набирал clear [enter]> для этого.
- CTRL+A — замена HOME, CTRL+E — end
- CTRL+U — удаление текста от курсора до начала строки, CTRL+K — удаление от курсора до конца строки, CTRL+Y — вставить удаленный предыдущими примерами кусок текста, CTRL+C — удаление всей строки (обычно работает как отмена команды).
- CTRL+T — меняет местами символ под курсором и предыдущий набранный (при опечатке вида /dev/dsa вместо /dev/sda)
- ^^ — нет это не смайлик. После попытки выполнить команду, набранную с ошибкой, строка вида ^ошибка^правильно запустит на выполнение исправленную команду.
- # — если вместо набранной команды надо сначала выполнить другую, можно закомментировать строку и нажать [enter], впоследствии вернуться к команде в истории, раскомментировать и выполнить.
- ALT+. — подставляет к текущей команде аргумент предыдущей. Например, чтобы после команды ls [длинный путь] не набирать этот путь для перехода в директорию, можно набрать cd + «Alt+.» + «ENTER»
- Добавляем в ~/.inputrc строчки:
"\e[A": history-search-backward
"\e[B": history-search-forward
Теперь для поиска команды в истории достаточно ввести первые буквы и перебирать варианты стрелками вверх/вниз. - sudo !! — выполнить предыдущую команду через sudo.
Работу с хистори и настройка окружения (для постоянного использования добавить в .bashrc)
1. Ведение лога истории с datestamp'ом:
export HISTTIMEFORMAT='%F %T '
2. Занесение команды в .bash_history сразу же, после нажатия enter (а не после завершения сеанса), что весьма удобно при одновременной работе в нескольких сессиях:
PROMPT_COMMAND='history -a;history -n'
3. Удобная настройка PS1 (чтобы было видно и юзера/хост и желательно дату и время [у меня некоторые сессии висят неделями])
export PS1='\033[00;32m\][`date +%d" "%h" "%Y" "%T`] \u@\h \w\n \$\[\033[00m\] '
4. Увеличение размера хистори (при активной работе 500 — это очень мало)
export HISTSIZE=100500
5. Говорим башу не заносить в хистори повторяющиеся друг за другом команды:
export HISTCONTROL=ignoredups
6. Отключаем занесение «бесполезных» с точки зрения истории команд:
export HISTIGNORE="&:ls:[bf]g:exit:[ ]*:ssh:history"
7. Используем «сокращения» для популярных комманд:
alias u='sudo pacman -Syu'
alias extmonitor='xrandr --output VGA1 --auto --primary && xrandr --rate 72 && xrandr --output LVDS1 --off'
alias intmonitor='xrandr --output LVDS1 --auto --primary && xrandr --output VGA1 --off'
А подскажите, для виндовых «мигрантов», как из консоли открыть файл в ассоциированной программе. В винде было удобно, набираешь file.pdf и все. А тут как?
Ubuntu 10.04 + Gnome, если это важно.
Ubuntu 10.04 + Gnome, если это важно.
UFO just landed and posted this here
Делал pdf-шпаргалку с клавиатурными сочетаниями bash. Страница на github'e.
Вот если бы еще все трюки из комментариев (допустим, из заплюсованных) скопировать в тело статьи…
многие сочетания клавиш, например Ctrl+A и Ctrl+E не работают в screen по умолчанию, т.к. перекрываются дефолтные сочетаниями вроде Ctrl+A+A.
Возможно ли включить стандартные сочетания в screen?
Возможно ли включить стандартные сочетания в screen?
Странно что не указали Alt-f и Alt-b — движение курсора вправо/влево по словам.
Sign up to leave a comment.
Оптимизируем процесс работы в консоли