Комментарии 108
"\e[A": history-search-backward
"\e[B": history-search-forward
И можно будет искать по истории, просто введя часть команды и нажав стрелку вверх. (вниз тоже работает для поиска по истории)
Не все, кстати, знают, что начав что-то набирать ("префикс" типа sudo ) повторным нажатием можно "путешествовать" по истории вверх
$ cat /etc/passwd | column -t
Можно еще так для списка файлов:
$ ls -1
cat /etc/passwd | column -t
а
column -t /etc/passwd
Любая приличная консольная утилита, которая может принимать данные из stdin, может также читать их из файла, указанного аргументом командной строки. А с неприличными можно воспользоваться перенаправлением потоков ввода/вывода:
column -t < /etc/passwd
Stop piping cats! Не труби кота! Запуск процесса — относительно дорогая операция. Так что не надо дёргать утилиту cat когда это не надо.
Например:
1) смотрю файл — cat /etc/passwd
2) Ох, длинный какой — cat /etc/passwd | head
3) все равно нужных записей нет — cat /etc/passwd | grep 'XYZ'
4) ага, а теперь выделим только нужное — cat /etc/passwd | awk…
те чтобы заменить комманду достаточно нажать стрелку вверх и ctrl+w
Но с другой стороны в описанном вами сценарии от использования cat удобнее не становится! Натравливать cat на файл неизвестного размера чревато, лучше сразу начинать с head $FILE. А чтобы потом отфильтровать по шаблону:
grep pattern Alt-.
Альт-точка подставит последний аргумент предыдущей команды (head)
Потом так же можно будет подставить в awk путь к файлу одним хоткеем.
Или ещё по-другому: начинать с less $FILE. Много лишнего и нужно отфильтровать? при запушенном less набрать
&PATTERN<enter>
И less спрячет строки не соответствующие шаблону. Сделать выборку? Опять же из запущенного less
!awk '{print $1+$2}' %<enter>
less подставляет путь к отображаемому файлу вместо %
А если здесь перепутать направление угловой скобки?column -t < /etc/passwd
… то ничего не случится, потому что нечего работать от пользователя root.
Или придётся восстанавливать из бэкапа, который ведь у вас есть, правда? Ну в крайнем случае из /etc/passwd-
А кроме того это ещё нужно поискать утилиту, для которой понадобилось бы использовать перенаправление ввода. Все GNU утилиты умеют читать ввода из файла.
Это загрузит только одно ядро.
Можно добавить " | pigz" между ними, тогда будет много ядер :).
pv</dev/urandom>/dev/null
pv</dev/zero>/dev/null
Для соответствия пример должен быть таким:
while ! cat ./run.sh; do sleep 1; done
cd
без параметров.Одна из самых полезных функций для меня — можно ввести первые буквы и нажать TAB. Автоматически добавляет окончание либо предлагает варианты.
Для вариантов нужно второй раз таб нажимать. По крайней мере в баше по умолчанию.
А вот то, что кроме bash есть другие оболочки, возможно, таки является для них сюрпризом.
Плохо подходит для многоядерных систем, если не запускать по количеству ядер.
Что-то близкое к требуемому одной командой можно получить, скажем, так:
cat /dev/urandom | pbzip2 -c > /dev/null
Таким образом получается утилизировать весь либо почти весь процессор
— Автодополнение можно настроить для чего угодно (man bash-completion), например сделать автодополнение имён веток в Git: «git checkout mas» дополнится до «git checkout master»;
— Добавление строк в реальном времени в конец файла можно наблюдать через tail -f;
— Можно обернуть вызов любой команды, где идёт передача данных через pipe, в утилиту pv, и будет отображаться прогресс переноса данных;
— Можно обернуть вызов любой команды, ожидающей текстовый ввод от юзера, в утилиту rlwrap и ей подобные, и будет строка ввода, поддерживающая все фичи GNU readline (поиск по истории, дополнение ит.д.);
— Если поставить пробел перед командой, она не осядет в .bash_history;
— ssh remote_host_name run_command запускает неинтерактивный шелл через SSH, который выполнит run_command и закроется;
— ssh remote_host_name bash открывает интерактивный шелл, команды в который вы вводите локально (нет лагов при нажатии клавиш);
— ssh -R открывает на удалённом хосте порт, который будет пробрасываться через SSH до локальной машины;
— ssh -L открывает на локальной машине порт, который будет пробрасываться через SSH до удалённой машины;
— ssh -D даёт вам SOCKS прокси;
… и т.д., имя им легион
Ctrl+b/Ctrl+f для перемещения на одну букву
Ctrl+a/Ctrl+e для перемещения в начало/конец строки
Ctrl+w — удаление одного слова
Ctrl+u — удаление всех символов слева от курсора
Ctrl+k — удаление символов справа от курсора
bg / fg
Люблю такие статьи тем, что в комментариях будет намного больше полезного, чем в самой статье.
Комбинация клавиш Ctrl + U убирает из строки всё то, что уже в неё введено.
Ага, а Ctrl + Y снова вставляет строку, аналог Ctrl + X / Ctrl +V в винде. Удобно если вспомнил что перед одной командой надо ввести другую, а заново набирать лень и к мышке тянутся тоже :)
Можно мои 5 копеек?
- В команде "more file.txt" можно перемещаться вперед и НАЗАД кнопками f (forward) и b (backward). Ровно так же это делается и в man. Кнопка "v" приводит к тому, что файл передается редактору vi на редактирование. Если в режиме vi дать "<ESC> set nu", то уже vi пронумерует строки. Выход из vi — "<ESC> q".
- Кнопка / позволяет иcкать в more и в vi
- Команда "gunzip -c file.tar.gz | tar xvf -" позволяет распаковать одной строкой tar.gz архив (есть и другой метод, но мне этот более понятен). По сути gunzip -c вываливает результат в stdout, а символ "-" после пайпа вбирает в себя вывод из stdout в свой stdin.
- Что такое "su user" (если без user, то в root-а) знают все, но уверен, что не все знают, что "su — user" переводит в user-а со всеми переменными окружения этого пользователя.
- Все знают, что "cd" без параметров приводит к тому, что директория меняется на "home" (cd $home). А если сделать "cd ~/dir1", то получается "cd $home/dir1".
- Команда "ls -1 | wc -l" выдаст количество файлов и папок в директории. Если дать "ls -1d | wc -l", то количество папок. Если дать "ls -1f | wc -l", то количество только файлов.
- Команда "ll" — это аналог "ls -l" (во многих unix-ах). Если это не так, то всегда можно сделать alias.
- Комбинация "<CTRL> u" — убирает все символы левее курсора
- Комбинация "<CTRL> a" переводят курсор в начало строки
- Комбинация "<CTRL> e" переводят курсор в конец строки
Пункты 8-10 работают и в vi.
- это только с GNU-сным таром;
- tar xzf filename.tar.gz
без "z" tar выдаст ошибку. - tar xjf filename.tar.bz2
- Это не аналог, это именно предопределённый алиас в некоторых дистрибутивах/системах. Проверяется элементарно — вызовом команды alias
Если забыли при вводе команды добавить pv, то для большинства базовых команд (cp, mv, dd, tar, gzip и пр.) поможет progress
https://github.com/Xfennec/progress
Я для себя выбрал вариант, который всегда везде (емли есть gunzip, конечно).
Надеемся, некоторых из тех десяти приёмов работы в командной строке Linux, которыми мы хотим с вами поделиться, попадут в ваш личный список полезных команд.
№9. Стресс-тест батареи ноутбукаНу как так-то…
$ cat /dev/urandom > /dev/null
$ JAVA_HOME=/java/home ./run.sh
1.
$ pushd <some_dir> #добавляет директорию в стэк
$ popd #переносит вас в ту директорию удаляя ее из стэка
2.
$ history
999 pwd
1000 exit
1001 history
$ !999 #Выполняет команду из истории
/home/daniyar94
Для 8 пункта в свое время придумали tar
У вас в последнем примере rename
файл удалил :(
Alt + Backspace
— удаление слова в консоли.Я бы вот с бОльшим удовольствием почитал о графических утилитах/командах/вывозах функций ОС и оболочек, заметно повышающих дружелюбность скриптов к пользователю — намного удобнее ткнуть мышкой в файлик скрипта, выбрать что нужно, и получить в нормальном окне результат, и ещё прогресс видеть. Это я не про админов, а про обычных пользователей домашних ПК под линуксом, которые на 90% используют КДЕ, Гном или что-то ещё (реже). Вот например, прогресс-бар в КДЕ:
kdialog --progressbar "Reading files" $files_count
Вот диалог открытия папки в КДЕ:
folder="`kdialog --getexistingdirectory ~`"
Диалог с кнопками:
kdialog files:start --yesnocancel "check files" --yes-label "save md5" --no-label "check md5"
Нормальных обзорных статей по такого рода возможностям особо-то нет, а хотелось бы.
mc
Помнится, мы ещё под DOS-ом писали резидентные менюшки, которые по F2 всплывали везде, где надо, и содержали в себе нужные шорткаты, чтобы их не запоминать, и не выстрелить себе в ногу случайно (особенно на вторые сутки без сна в 5 утра)). F2 — потому что в VC тоже было неплохое пользовательское меню по этой кнопке.
То есть 20 лет назад под DOS это было, а сейчас под *nix надо держать в голове параметры какого-то pbzip2, а чтобы показать список последних команд надо что-то шаманить… Что стоило за это время улучшить bash или просто сделать что-то получше? У того же абсолютно инопланетного vi все же появились человеческие альтернативы типа nano…
Держать в голове параметры не надо у всех утилит есть справка
pbzip2 --help
man pbzip2
info pbzip2
…
bash-completion
«vi имеет два режима в одном он пищит в другом всё портит»
на основе vi сделан vim — один из самых эффективных редакторов
htop удобнее чем просто top, а top удобное, чем вывод по строкам (как в ping, например). Текстовые интерфейсы давно эволюционировали, но наследие сильнО ))
-
Это работает по дефолту? У меня вместо влево вставляется 5D, а вместо вправо 5C.
Изначальный хоткей в баше: alt+b и alt+f
Да, по умолчанию ALT+b/f. Натолкнуло на мысль, кстати, поменять эти шорт-каты. Пользуюсь постоянно, но всегда неудобно.
Нашёл здесь вариант как сменить на CTRL+arrow keys. https://superuser.com/a/488158/683161
и работают не только в Bash, но и, естественно, во всех «консолях», которые её используют (irb, например)
красивые таблички/cheat sheets — в гугле по запросу, хотя то же самое описано по приведённой выше ссылке
№9. Стресс-тест батареи ноутбука
Про многоядерные CPU уже написали, но у ноутбука есть ещё GPU и радиомодули. Как нагрузить их из терминала для стресс-теста батареи?
№2 изящно расширяет утилита thefuck.
№7 я бы дополнил ^X^E — открывает текстовый редактор ($EDITOR) с содержимым командной строки; при выходе с сохранением показывает его в командной строке. В bash работает сразу, в zsh надо в .zshrc написать
autoload -z edit-command-line
zle -N edit-command-line
bindkey "^X^E" edit-command-line
bindkey -M vicmd v edit-command-line
10 приёмов работы в терминале Linux, о которых мало кто знает