Comments 76
Автору спасибо — почерпнул новые знания, статью в мемы, а заплюсую завтра — сегодня мана кончилась =)
+5
cd -
переход в предыщую директорую
например
тут мы из директории /usr/local/include/boost перешли в домашнуюю, а потом с помощью 'cd -' вернулись в предыщую
переход в предыщую директорую
например
$ pwd
/usr/local/include/boost
$ cd
bogolt@view:~$ cd -
/usr/local/include/boost
тут мы из директории /usr/local/include/boost перешли в домашнуюю, а потом с помощью 'cd -' вернулись в предыщую
+30
Самая полезная фича для меня Ctrl-R — реверсивный поиск. Позволяет найти команду в истории по ее части, и не только запустить заново, но и отредактировать перед этим.
+28
Спасибо, пару удобных комбинаций не знал.
0
Операции с курсором, кстати — это не Bash, это readline. И ещё он умеет работать в vi-режиме (почти всё поддерживается)
$ set -o vi
что намного удобнее может быть для редактирования.
$ set -o vi
что намного удобнее может быть для редактирования.
+4
«Удобнее для тех, кто знаком с vi»
+10
Эмс… Почему это? Можно и через этот режим познакомиться с тем, как работается в Vi. Один фиг — надо всякие нажималки магические запоминать. По-умолчанию стоит emacs режим, но вы же не считаете, что он удобнее только для тех, кто знаком с emacs.
Вот. Так что, попробовать стоит. IMHO, всё же Vi устроен логичнее, да и искать всякими regexp'ами позволяет по истории, что может быть полезнее.
Вот. Так что, попробовать стоит. IMHO, всё же Vi устроен логичнее, да и искать всякими regexp'ами позволяет по истории, что может быть полезнее.
0
Я то знаю, я его и использую уже давно. Не забывайте что большинство считает что у vi есть всего два режима. И всё же «порог вхождения» у emacs ниже чем у vi\vim =)
0
О. Вот про порог вхождения не соглашусь. Я в Emacs так и не вошёл, например. Хотя пытался раза три. Уж слишком там много магических последовательностей нужно запоминать. vim как-то в этом плане более интуитивно понятный.
+3
Ну это для Вас. Для большинства новичков которых я видел\знаю vi сложнее. Нажать Ctrl-a же проще и понятнее, чем Esc затем, Shift-a
0
Ну… Я ж — не уникальная в этом личность. Для многих vim оказывается проще, поэтому я и упомянул про vi-режим readline. Да и потом, я же тоже пытался в Emacs войти с уровня новичка. Но вот почему-то проще оказалось войти в Vim. Хотя, вроде как, формально, действительно проще нажимать ctrl-a, а не esc, shift-a… Но вот почему-то Emacs не пошёл у меня.
0
Мы с Вами просто относимся к тем, кому удобнее vi, но, как показывает статистика, нас меньшинство :)
0
Да почему? Вот статистика использования пакетов в 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 дистрибутив, но всё же.
0
хм. А как пользоваться? Вот я башу сказал set -o vi, а дальше? ниче не поменялось вроде в поведении readline.
0
Esc для выхода из режима вставки попробуйте
0
Ну. Надо же ещё документацию почитать. Возможностей, по идее, не больше, просто пользоваться может быть удобнее. На любителя всё конечно.
Но, например, вот бывает такое удобство… Допустим, хотим поискать нечто (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.
+1
Это просто невообразимо круто! Спасибо тебе добрый человек)
0
Кстати странно, что всё это отсутствует почти во всех руководствах по баш и учебников по линукс, так же как и большинство горячих клавиш. Я когда только начинал познавать линукс, то далеко не из первой книжки по этой системе узнал о существовании ctrl+alt+f(1-12), что весьма странно, вроде и основы, а в книжках для чайника про это нет.
+2
Ctrl+R — поиск по истории. начинаешь печатать, а консолька сама подставляет подходящие команды.
+3
Спасибо, забрал в избранное
0
> Майка Лукидиса
Уставшими глазами прочел «Майка Линуксоида» :)
А за статью большое спасибо, в избранное!
Уставшими глазами прочел «Майка Линуксоида» :)
А за статью большое спасибо, в избранное!
+5
alias-ы тоже полезны
alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias psx="ps -auxw | grep $1"
...
+5
А у меня вот такое лежит в алиасах.
function kkill()
{
kill $(pgrep $1)
}
Если нужно прибить процесс, просто жму k+k+[Tab] и вписываю имя неугодного процесса.
ps -A тоже на алиасе, для удобства.
function kkill()
{
kill $(pgrep $1)
}
Если нужно прибить процесс, просто жму k+k+[Tab] и вписываю имя неугодного процесса.
ps -A тоже на алиасе, для удобства.
0
killall
0
man pkill
+3
shopt -s autocd
:-)
+1
ещё вспомнил в копилку: Ctrl+L очищает экран.
+2
Предпочитаю использовать команду 'reset' (это не перезагрузка, просто сброс консоли). Помогает, когда шеллу сносит крышу от кривых esc-последовательностей. Заодно сбрасывает весь буфер, в то время как после Ctrl+L можно тупо проскроллить вверх и увидеть всё выше. (И зачем тогда чистить экран?)
+1
А вот фича, которую я люблю даже больше CTRL-R:
А теперь наберите в консоли:
И курсором вверх-вниз для показа последних комманд, начинающихся на cat(или что угодно другое).
$ cat .inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward
А теперь наберите в консоли:
$ cat
И курсором вверх-вниз для показа последних комманд, начинающихся на cat(или что угодно другое).
+13
'man bash' вам в помощь!
в главе Readline Command Names приведен полный список команд.
мой хит-парад — C-u, C-w, C-y, M-#
в главе Readline Command Names приведен полный список команд.
мой хит-парад — C-u, C-w, C-y, M-#
+2
zsh попробуйте — оч. много интерактивных приятностей
+8
И отсутствие привычного readline. Поначалу напрягает.
+1
Я удаленно администрирую больше 10 юниксовых серверов, мне в принципе будет неудобно метаться между разными шеллами, запоминать кучу комбинаций клавиш и т.д. На всех моих серверах по умолчанию идет bash, поэтому все описанное мной здесь работает куда бы я не залогинился (ну кроме одной машиной с AIX, там Korn shell).
А zsh это, конечно, очень хорошо, но дальше домашней машины и ноута он не выходит.
А zsh это, конечно, очень хорошо, но дальше домашней машины и ноута он не выходит.
+2
Согласен полностью. Но ещё более согласен если не только вы их администрите. На серверах и вообще шаредных компах в руте используем bash почти в голом виде, с минимумом алиасов. И вим гол как сокол. В таких вещах чем стандартнее тем лучше (про судо знаю, но у нас всё равно рут для админов — причины есть). А в скриптах, конечно, первой строкой — банг-баш.
+1
man bash
-3
Еще к удобствам можно отнести работу с хистори и настройку окружения:
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.
Вроде все, что вспомнил (:
+15
Еще нравится:
cp /etc/very/long/path/{filename.txt,newname.txt}
cp /etc/very/long/path/{filename.txt,newname.txt}
0
Хоть по сути к bash'у это относится лишь косвенно, но я бы ещё упомянул о каких-нибудь сторонних утилитах, упрощающих работу в консоли. К примеру screen. Очень удобно держать в консоли несколько подписанных вкладок и перемещаться по ним по хоткеям (Ctrl + RightArrow/LeftArrow, например). У меня всегда открыто 5 вкладок, которыми активно пользуюсь.
0
такие элементарные вещи.
очень часто забываешь про них, и половину из всего этого не знал. спасибо что научили и освежили память.
выполнение предыдущец команды из под рута: sudo!!!
поиск файла в система: locate file.name (предварительно совершив updatedb)
очень часто забываешь про них, и половину из всего этого не знал. спасибо что научили и освежили память.
выполнение предыдущец команды из под рута: sudo!!!
поиск файла в система: locate file.name (предварительно совершив updatedb)
+4
А как же божественные Ctrl-p\n? Это куда удобнее чем тянуться к стрелочкам.
+1
Как Ctrl-A мнемонически соотносится со словом Home?
+1
alias pingy=ping ya.ru
alias tracy=traceroute ya.ru
Если провайдеру не доверяете.
alias tracy=traceroute ya.ru
Если провайдеру не доверяете.
-2
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%
… но это уже другая история :-) Собсна, скобки — это шорткат для запуска дочернего шелла и команды в нём.
0
Вот с переменными только проблемы у незнающих возникнут при использовании подшеллов. Что-то типа
может вызвать как минимум удивление (:
Да далеко не всегда нужны подшеллы. Команды можно группировать фигурными скобками {}:
$ (A=1); echo $A
может вызвать как минимум удивление (:
Да далеко не всегда нужны подшеллы. Команды можно группировать фигурными скобками {}:
$ [ $(($RANDOM%2)) -eq 0 ] && { echo 'Even'; echo 'It works!'; } || { echo 'Odd'; echo 'It doesnt work!'; }
+1
ничего нового, всё уже есть на хабре, и даже не особо не разбросано по отдельным постам.
+1
Оформил в виде памятки:
Работу с хистори и настройка окружения (для постоянного использования добавить в .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'
+12
А подскажите, для виндовых «мигрантов», как из консоли открыть файл в ассоциированной программе. В винде было удобно, набираешь file.pdf и все. А тут как?
Ubuntu 10.04 + Gnome, если это важно.
Ubuntu 10.04 + Gnome, если это важно.
+2
UFO just landed and posted this here
Делал pdf-шпаргалку с клавиатурными сочетаниями bash. Страница на github'e.
+1
Вот если бы еще все трюки из комментариев (допустим, из заплюсованных) скопировать в тело статьи…
+1
многие сочетания клавиш, например Ctrl+A и Ctrl+E не работают в screen по умолчанию, т.к. перекрываются дефолтные сочетаниями вроде Ctrl+A+A.
Возможно ли включить стандартные сочетания в screen?
Возможно ли включить стандартные сочетания в screen?
0
Странно что не указали Alt-f и Alt-b — движение курсора вправо/влево по словам.
0
Sign up to leave a comment.
Оптимизируем процесс работы в консоли