15 малоизвестных команд Linux

http://www.sitepoint.com/15-little-known-unix-commands/
  • Перевод
Каждому разработчику в определенной степени следует овладеть навыками работы в терминале. Физически находиться у компьютера не всегда возможно, поэтому приходится подключаться удаленно. И действительно, GUI-программы вполне могут с этим с правиться, но зачастую они работают медленнее, чем получение доступа через тот же терминал (в конце концов, это лишь обмен текстом).

Независимо от того, новичок вы или гуру, уверен, вы найдете для себя полезное среди нижеприведенных советов и рекомендаций.

1. man

Начнем с простого, команда man, что означает manual. Если хотите прочитать о какой-либо команде, просто наберите:

man [command]


Вот так можно прочитать мануал по man'у:

man man


man — не малоизвестная команда, ее вы найдете в любом учебнике Unix'а, однако я бы хотел обратить ваше внимание на некоторые ее особенности.

Так, например, чтобы прочитать про ASCII-таблицу, наберите следующее:

man ascii


image

Путались когда-нибудь, что меньше пико- или фемто-? Пробуйте следующее:

man units


image

Подобных веселых команд еще много. Есть с чем поразвлечься. (попробуйте xkill). А пока, идем дальше.

2. cd -


Если вы случайно сменили директорию, можно просто вернуться в последнюю набрав:

cd -


image

3. sudo !!


image

Этот комикс подчеркивает важность команды sudo в Unix. sudo выполняет команду с правами администратора. Если вы набрали команду без sudo, а потом оказалось, что она необходима, наберите просто:

sudo !!


и она запустится уже с правами администратора.

image

4. mtr


mtr — мощный инструмент для диагностики сети. Он совмещает в себе функциональность traceroute и ping.

mtr [hostname]


image

5. [space] command


Опытные пользователи, возможно, знают, что история запущенных команд сохраняется в файле ~/.bash_history.
Так, чтобы команда не записывалась в историю, просто наберите перед командой пробел.

[space] [command]

6. jot


jot генерирует текст. Числа, текст, все вместе. Чтобы сгенерировать числа, попробуйте следующее:

jot [количество чисел] [начиная с]


Если пропишете один аргумент, сгенерируются числа от 1 до значения аргумента.

Чтобы получить случайные:
jot -r [количество чисел] [нижний предел] [верхний предел]


image

Подробнее читайте здесь или наберите man jot

7. df


Довольно простая команда. Показывает свободное пространство на диске (disk free)

image

8. pkill


pkill (или process kill) завершает запущенный процесс. Эта команда особенно полезна, когда приложение не отвечает:

pkill [application_name]


Веселой/жестокой команда может оказаться, если вы запускаете ее на удаленной машине. Будьте осторожны, можно потерять важные данные.

9. ddate


Дискордианский календарик

image

10. cal


Старый-добрый Григорианский календарь.

image

11. tac


Вы, возможно, слышали про команду cat. Она имеет ряд утилит для создания, копирования, слияния и отображения текстовых файлов. tac делает то же самое, но в обратном порядке.

image

12. w

Команда w показывает, кто на данный момент вошел в систему, наряду с другой полезной информацией такой, как время работы или нагрузкой процессора.

13. factor


factor раскладывает число на множители:

factor [number]


image

14. yes


Возвращаемся к веселым командам, yes выводит текст несколько раз:

yes [string]


Используйте ее, чтобы запутать подкравшихся сзади друзей. Внимание, единственный способ остановить ее — CTRL + C (ну, или закрыть терминал)

15. nl


nl нумерует строки. Больше всего полезна при использовании ее в качестве аргумента. Давайте взглянем на пару примеров:

image

Ну вот мы и подошли к концу команд нашего списка. Сколько уже знали? Сколько из них используете регулярно? Пишите, у кого — сколько? У кого 15/15 — тот выиграл.

Предлагаю делиться интересными командами, кто что знает. Спасибо за внимание, всего хорошего.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 224
  • –58
    man, cd, sudo — малоизвестные команды?! Либо у автора дурацкий юмор такой — либо он сам плохо Линукс знает…
    • +75
      Ну, я с линуксом работаю с начала двухтысячных, а о варианте «cd -» и «sudo !!» не знал. Так что вполне себе интересные команды.
      • +82
        Еще трюк с cd: если вы в директории ~/dev/project/production/app/controllers и вам нужно в ~/dev/project/development/app/controllers, можно написать cd production development. Другими словами, с двумя параметрами cd работает как replace.
        • +1
          хм. А какой шелл? В debian не работает.
          GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)
          • +1
            zsh 5.0.5 (x86_64-apple-darwin14.0), но у меня работало всегда и везде.
            • 0
              Похоже, что не совсем везде.
              Парсер ломает вывод, поэтому тут.
              • +10
                "!!" вообще полезная штука. Если вдруг забыл набрать cd перед путем до директории, можно сделать такой же трюк, как и с sudo, т.е. «cd !!» :)
                Например:

                [user@comp /]$ /home/user/projects
                bash: /home/user/projects: Is a directory
                [user@comp /]$ cd !!
                cd /home/user/projects
                [user@comp projects]$ 
                

                • –2
                  В качестве альтернативы можно использовать zsh и вообще не писать cd =)
                  • 0
                    ещё можно использовать Esc, Dot (.), для подстановки последнего аргумента последней команды, иногда удобней чем !!:
                    $ ls -al /path/to/directory
                    $ cd <ESC> <.> # преобразуется в cd /path/to/directory
                    • –2
                      Какие-то злостные молчаливые минусаторы хабр скроллят, дельный комментарий же.
                      Хотя в топике и упоминалось уже, действительно удобно пользоваться <.> или <.>. На мой взгляд, это быстрее, чем жать <1><1>.
                    • 0
                      Ну так!!! это фишка bash, а не sudo… так что ее можно с любой командой использовать… или вообще без команды (просто вызов второй раз запущенной до этого команды)
                      • 0
                        А ещё можно этот поиск сделать более полезным/избирательным
                        !ssh — вызовет последнюю команду, которая начиналась на ssh
                  • 0
                    Это фишка zsh. Ещё Вы можете написать cd ~/d/p/p/a/c и точно так же попадёте в ~/dev/project/production/app/controllers
                    Но sh и bash так не умеют ;)
                    • 0
                      А еще fish есть ) пара работников пользуется, говорят удобно… но мне как-то не очень понравился, плюс не совместим с POSIX sh.
                • +10
                  Это только для zsh.
                  • 0
                    Спасибо, не знал.
                    Очень часто необходима данная команда при работе с сайтом =)
                    • +4
                      Еще есть pushd/popd для работы со стеком директорий:
                      humbug@pc ~ $ pushd /usr/
                      /usr ~
                      humbug@pc /usr $ popd
                      ~
                      humbug@pc ~ $
                      
                      • +4
                        Чтобы не привыкать использовать pushd вместо cd, можно ключить опцию setopt autopushd.
                    • +32
                      Ну хорошо. cd - знают не все.

                      Но sudo !! — это же не отдельная команда! Это комбинация общеизвестного sudo — и символа повтора предыдущей команды !!. Малоизвестным является именно второй — но он не является командой.

                      А man-то, man? Как вообще он мог попасть в статью под заголовком «15 малоизвестных команд unix»?
                      • +15
                        man — не малоизвестная команда, ее вы найдете в любом учебнике Unix'а, однако я бы хотел обратить ваше внимание на некоторые ее особенности.

                        В общем, дело не в самом man-е, а в паре необычных man-страниц.
                        • +33
                          Кроме !! есть и другие, не менее полезные, команды для работы с историей
                          !^ — первый аргумент предыдущей команды;
                          !$ — последний аргумент предыдущей команды;
                          !* — все аргументы предыдущей команды;
                          !-2 — вторая с конца команда.
                          • +3
                            ещё можно открыть history а потом !номер_комманды_в_истории. Удобно искать иногда через history | grep
                            • +4
                              Или !git выполнит последнюю команду содержащую слово git.
                              • +3
                                не содержащую, а начинающуюся с него.
                              • +4
                                Искать ещё можно через Ctrl+R
                                • 0
                                  Шикарно, спасибо!!!
                                  • +1
                                    На тот случай если вы не знали — повторные нажатия Ctrl+R показывают другие (ранние) команды, подпадающие под введённую маску.
                                    • 0
                                      Что в zsh настраивается через раскладку isearch. У меня в поиске работают <C-n> и <C-p> для предыдущего/следующего результата. <C-r>, впрочем, тоже работает.
                              • 0
                                вроде бы последний аргумент предыдущей команды $_ или это только в bash?
                                • –1
                                  В zsh тоже. А <A-.> у меня почему‐то подставляет всю предыдущую команду целиком, хотя я это сочетание не переопределял и в zsh -f … bindkey -e значение то же — подставить последний аргумент.

                                  Учтите, что при использовании $_ в истории сохранится $_, а не сам аргумент.
                                • +1
                                  !:A-B – аргументы с A по B в предидущей команде
                                • 0
                                  Вы придираетесь. Считайте «man man» за команду, а «man» за утилиту.
                                  • +1
                                    Немногие знают, что man-страницы можно читать и без команды man:
                                    zcat /usr/share/man/man1/man.1.gz | nroff -man | less

                                    Соответственно, в man, как и в less, можно пользоваться w и z для пролистывания страниц, / для поиска текста и т.д.
                                    • +4
                                      Вспомнил — можно в процессе набора команды нажать Alt+h (stands for help) и попасть и man этой команды. А потом, когда выйдете из man'а, ваша набранная строка останется нетронутой. Удобно, когда забыли какие-то ключи, например. Рекомендую попробовать git log Alt+h
                                      • 0
                                        Вы в каком терминале так делаете? У меня в стандартном терминале MATE не работает Alt+H
                                        • +1
                                          Оказалось, это только в ZSH. Переходите, не пожалеете. Рекомендую вот этот «фреймворк», как они себя называют. github.com/sorin-ionescu/prezto
                                      • +1
                                        Ещё меньше людей знают, что все три команды настраиваются в /etc/man.conf, и в качестве второй у меня вместо nroff скрипт для обхода какого‐то бага с русскими руководствами при установке пакета в paludis.

                                        Если быть более точным, то вместо первой может быть несколько распаковщиков (выбираются по расширениям, не по mime‐типу от file).

                                        И, кстати, less вполне может сделать всё за вас: less /usr/share/man/ru.UTF-8/man1/rview.1.xz показывает читаемую страницу. Зависит от каких‐то настроек (которые в Gentoo по‐умолчанию, а где‐то ещё нет) и является одной из причин, по которой я практически никогда не использую less filename (вторая — suffix alias cat file L удобнее, если вы хотите заменить L на что‐то ещё).
                                        • 0
                                          Ну это именно и есть less, именно он отрабатывает w,z,/ и прочее. Достаточно в баше написать export PAGER=less а можно даже cat
                                          • 0
                                            ximaera@endeavour:50:~#515$ LC_ALL=C PAGER=less man man | col | grep -A2 -- --pager=
                                                   -P pager, --pager=pager
                                            	      Specify which output pager to use.  By default, man uses pager -s.  This option overrides the $MANPAGER environment variable, which in turn overrides the $PAGER environment variable.  It is not used in conjunction  with
                                            	      -f or -k.
                                            ximaera@endeavour:50:~#516$ 

                                            Вот вам сразу три способа читать man без стандартного пейджера :-)

                                            В качестве бонуса: вот так можно использовать vim со всеми его плюшками в качестве MANPAGER:

                                            export MANPAGER="/bin/sh -c \"unset MANPAGER;col -b -x | \
                                                             view -R \
                                                                  -c 'set ft=man nomod nolist' \
                                                                  -c 'set nonumber' \
                                                                  -c 'map q :q<CR>' \
                                                                  -c 'map <SPACE> <C-F>' -c 'map b <C-U>' \
                                                                  -c 'nmap K :Man <C-R>=expand(\\\"<cword>\\\")<CR><CR>' -\""
                                        • +1
                                          > sudo!!!

                                          Имхо, так лучше вообще не делать. Причин две — логирование в хистори конкретно того, что было выполнено (а это может иногда пригодиться), и вторая — имхо, важно видеть, что именно собираешься выполнить под рутом _перед выполнением этого_.
                                          • +1
                                            sudo часто забываешь написать, но при этом понимаешь, что будет выполняться из-под администратора. А в логах будет и предыдущая строка.
                                            • +1
                                              У меня лично был один раз случай, когда из-за недосыпа подобным образом выполнил совсем не то, что было нужно. Благо были бэкапы, но все это стоило мне много нервов.
                                              С тех пор я четко придерживаюсь правила — на боевых серверах (либо у клиентов) под рутом — всегда перед нажатием enter визуально проверять то, что сейчас будет сделано.
                                              • 0
                                                Ну я тоже как бы обычно отматываю вверх и дописываю в начало sudo, если забываю. Но это ведь применимо не только для sudo, что и хорошо.
                                                • +1
                                                  Проще написать sudo и нажать Alt-. (или Esc-.).
                                              • +5
                                                По моему тут безопасней из хистори отмотать нужную команду и начало sudo прописат) А то вдруг, вы случайно перед прошлой командой пробел поставили;)
                                              • –1
                                                mva  ~  whoami # Enter
                                                mva
                                                mva  ~  sudo!!! # Enter
                                                mva  ~  sudo whoami # (т.е. сначала подставилось для проверки)
                                                root
                                                mva  ~  echo $0 # :)
                                                zsh
                                                • +1
                                                  В history запишется именно полная команда.
                                                  • +2
                                                    В zsh есть опция HIST_VERIFY, которая решает обе проблемы. Если она включена, по enter команда на исполнится, а появится в развернутом виде.
                                                    $ rm -rf /
                                                    $ sudo !! <RETURN>
                                                    $ sudo rm -rf /
                                                    • +1
                                                      zsh — это совсем другой разговор, достойный отдельной статьи. Ибо он умеет очень многое.
                                                      • +1
                                                        В bash такое тоже есть. shopt -s histverify
                                                    • +86
                                                      В комиксе про sudo!!! картинка не та.
                                                      image
                                                    • +4
                                                      Еще в секцию про man очень бы стоило добавить, просто как good practice, читать маны на «опасные» команды. именно man, а не -h/--help

                                                      Сейчас вроде этот «баг» исправили, но вот в начале 2000 кажется, я очень повеселился, когда хотел сделать отложенный ребут, посмотреть ключики для него и моментально отправил сервак в ребут командой reboot --help. куищще тогда был написан так, что вне зависимости от ключей тупо моментально ребутал машину :-)

                                                      вы уверены, что ключик -h у команды rm не означает «удалить все хардлинки с диска»? а у fdisk — «прописать какую-нибудь дефолтную таблицу разделов на всех хард-диски»?
                                                      • 0
                                                        я понимаю что для каждого это должны быть его личные грабли, по которым он прошелся, но было бы интересно почитать про ваши грабли с развернутыми историями
                                                    • +20
                                                      Alt+. это последний аргумент предыдущей комманды. Например:
                                                      vim /usr/local/etc/nginx/nging.conf # Decided to make a backup
                                                      cp Alt+. Alt+..backup
                                                      • 0
                                                        вот это полезная штука, да и вообще, выучить хоткеи, и работа с терминалом в разы просто ускоряется
                                                        • +5
                                                          Спасибо, не знал.
                                                        • +3
                                                          Или «Ecs .».
                                                          • +1
                                                            Блин, круто, спасибо.
                                                            Кстати в макос не работает хоткей, но работает «Esc .», как выше преложили.
                                                            • +1
                                                              Если у вас iTerm2, нужно включить Settings — Profiles — Keys — Left option acts as +Esc.
                                                              • 0
                                                                У меня ZOC в основном, там наверняка тоже есть подобная настройка.
                                                                Но т.к. работать приходится из совершенно разных мест, имхо проще запомнить через Esc. :)
                                                              • 0
                                                                В стандартном Terminal тоже можно: Preferences -> Settings, выбрать Keyboard tab. Поставить галочку «Use Option Key as Meta».
                                                              • +1
                                                                А еще есть ^R для поиска в истории.
                                                                • 0
                                                                  Затупил и жал Alt+ (по сути получается Alt + =) — оказывается, аналог двойного нажатия tab (показывает варианты продолжения).
                                                                  • 0
                                                                    То же самое можно сделать по Ctrl+d.
                                                                  • 0
                                                                    Есть же $_?
                                                                    s1:~$ echo a
                                                                    a
                                                                    s1:~$ echo $_
                                                                    a
                                                                    • +1
                                                                      $_ я уже упомянул. А ещё раньше — ivanko (http://habrahabr.ru/post/228999/#comment_7756763). Повторю здесь: с !$ и <A-.> в истории сохранится тот аргумент, с которым вы запустили команду. С $_ в истории сохранится $_. Иногда это именно то, что вы хотите, иногда нет.
                                                                      • 0
                                                                        Увы мне, невнимательному. А разницу понял, спасибо!
                                                                  • +5
                                                                    Назовите "...Linux", будет правильнее. Скажем, в BSD/OSX нет tac, mtr, ddate, factor…
                                                                    • 0
                                                                      поправил, но в оригинале именно Unix был
                                                                      • +2
                                                                        справедливости ради, mtr есть в портах: www.freshports.org/net/mtr
                                                                        • +1
                                                                          И в homebrew тоже есть.
                                                                          • +1
                                                                            Мы оба знаем, что в портах есть все… но это не повод называть такой софт «командами Юникс».
                                                                          • 0
                                                                            У меня и Gentoo Linux их нету. :)
                                                                          • +6
                                                                            С pkill надо бы поаккуратнее, потому что она принимает не имя приложения, а паттерн, и пытается замочить все процессы которые под этот паттерн подходят.
                                                                            • +4
                                                                              Специально для админов-новичков есть команда killall5, которая так соблазнительно выглядит, когда нет установленного killall… Впрочем, оставим эту детскую граблю для личного удовольствия каждого.
                                                                              • +2
                                                                                когда нет установленного killall
                                                                                И так тоже бывает?.. Черт, это же хуже, чем когда в «семерке» телнета не стало!
                                                                                • +1
                                                                                  На бездисковых системах часто экономят на всём (даже man'ов нет) — каждый установленный пакет — отожранная память у сервера.
                                                                                  • 0
                                                                                    В busybox же команда killall есть… Или для бездисковых систем еще и busybox компилируют, выкидывая лишние аплеты?
                                                                                    • 0
                                                                                      Особенно когда пытаешься уместить openwrt в 4мб флеш-памяти) А если всего 2мб)

                                                                                      Правда выкидывать куски бизибокса — все равно экономия на спичках
                                                                                      • +1
                                                                                        Ну как сказать… Выпиленные ненужные мне части бизибокса позволили сэкономить около 100кб. Именно их мне и не хватало :)
                                                                                      • 0
                                                                                        Нет, в нормальных бездисковых серверах (я про крупных товарищей, до 128Гб памяти на борту) таким не занимаются. Но и лишнего в загружаемый image тоже не ставят — надо — можно добавить.
                                                                                      • –2
                                                                                        память
                                                                                        • +1
                                                                                          Что вы хотели этим сказать?
                                                                                    • +1
                                                                                      думаю, что немного найдется линуксоидов, которые не наступили на эту граблю в первый раз усевшись поадминить солярку.
                                                                                      Мне повезло, у меня это оказался workstation. Но впечатления незабываемые.
                                                                                      • +2
                                                                                        Только не пользуйте killall в Solaris — там он полностью соответствует своему переводу.
                                                                                    • +9
                                                                                      yes обычно нужна, чтобы подтверждать выполнение каких-то операций, если мне память не изменяет? т.е. что-то вроде
                                                                                      yes | <команда, запрашивающая ввод yes>
                                                                                      • +4
                                                                                        yes походит для генерации паттерна. В моих бенчмарках yes обгонял urandom.

                                                                                        А вообще, yes no отвечает на вопросы однозначно.
                                                                                      • +35
                                                                                        Половина команд — мусор. Кого волнует ddate? Да и, честно, кого в шелле волнует факторизация чисел?

                                                                                        nl не нужен, cat -n отлично его заменяет. Более того, -n умеет и grep, что покрывает само по себе 90% случаев, когда нужна нумерация.
                                                                                        • +6
                                                                                          Потому-то команды и являются малоизвестными, очевидно же…
                                                                                          • –2
                                                                                            Согласен с вами, за исключением команды factor. Она бывает очень полезна, например, при программировании, потому что другой возможности быстро разложить число на множители или проверить его на простоту, не пользуясь внешними программами, я не знаю.
                                                                                            • +7
                                                                                              Задачи безумно далёкие от шелла. Шелл — ДСЛ под задачи юникса. Понятно, что конкретная программа может делать что угодно — хоть Коран цитировать, но это будет явно за областью нормального применения шелла и точно за пределами coreutls/fileutils.
                                                                                              • +1
                                                                                                Ну вот я Python shell часто использую как калькулятор =) Предназначение? Думаю, нет. Удобно? Да, очень!
                                                                                          • +13
                                                                                            Ctrl+u удаляет текущий текст в командной строке в специальный буффер. Ctrl+y вставляет из него. Удобно когда вы что-нибудь забыли. Например:
                                                                                            git commit -m 'Initial commit' # Here we remembered that we didn't add files to staging
                                                                                            Ctrl+u
                                                                                            git add .
                                                                                            Ctrl+y # Now we have our git commit message again.
                                                                                            • 0
                                                                                              Всегда пользовался ^U, но про буфер — не знал. Спасибо!
                                                                                              • +1
                                                                                                # git commit -m 'Initial commit' # Here we remembered that we didn't add files to staging.
                                                                                                # git commit -am 'Initial commit' # Just added key -a to add files.
                                                                                                • +1
                                                                                                  Да, я думал, что это не очень подходящий пример, но суть из него можно понять. Кстати, -a не добавляет новые файлы.
                                                                                                • +3
                                                                                                  Будет справедливо напомнить, что это фича не командной строки, а библиотеки readline, которую и использует командная строка. Вот еще немного возможностей её использования.
                                                                                                  Кстати, сама библиотека проста для встраивания, есть возможность повесить свой обработчик для автодополнения по табу и еще 100500 фич.
                                                                                                  • 0
                                                                                                    Readline по возможностям не сравнима с zle — я, например, могу написать эмуляцию <C-o> из Vim (<C-o> запускает одну команду нормального режима из режима вставки, и потом возвращается в режим вставки) (собственно, и написал). Причём бо́льшая часть работы переложена на уже имеющуюся раскладку vicmd. Здесь есть подсветка синтаксиса (жаль только что не встроенная — встроен только API для подсветки регионов), возможность переопределить всё и вся (один человек ради интереса написал аналог ipython как надстройку над zsh: github.com/Valodim/zsh-python-mode (перед тем как жаловаться, прочтите README)), множество раскладок (по‐умолчанию обычные три и как минимум одна специальная: viins и vicmd для поддержки vi режима, emacs для соответствующего режима и специальная isearch, используемая для <C-r>).

                                                                                                    Жалко только, что zle нельзя никуда встроить.

                                                                                                    К чему это я: утверждение, что командная строка использует readline в общем случае не верно. Бо́льшая часть того, что я ввожу, вводится в zle. Все возможности readline там есть, а раскладка по‐умолчанию содержит практически всё (некоторые клавиатурные сочетания определены несколько по‐другому), что есть в раскладке emacs из readline.
                                                                                                • +5
                                                                                                  часто пользуюсь фиксом "^src^dst" при опечатках:
                                                                                                  arth@arth:~$ lq /
                                                                                                  lq: команда не найдена
                                                                                                  arth@arth:~$ ^lq^ls
                                                                                                  ls /
                                                                                                  bin   dev  home ...
                                                                                                  


                                                                                                  ещё, когда всё пропало(какая-нибудь утилита загадила консоль бинарными символами): reset

                                                                                                  Два в одном, посмотреть смонтированные файловые системы, и улучшить вывод табами:
                                                                                                  arth@arth:~$ mount | column -t
                                                                                                  /dev/sda1    on  /                         type  ext4             (rw,errors=remount-ro)
                                                                                                  proc         on  /proc                     type  proc             (rw,noexec,nosuid,nodev)
                                                                                                  sysfs        on  /sys                      type  sysfs            (rw,noexec,nosuid,nodev)
                                                                                                  none         on  /sys/fs/cgroup            type  tmpfs            (rw)
                                                                                                  ...
                                                                                                  
                                                                                                  • +2
                                                                                                    ещё, раз есть df, нужно также сказать про du — считает размеры папок:

                                                                                                    du -h --max-depth=1
                                                                                                    • +4
                                                                                                      Обычно использовал:
                                                                                                      du -sh * | sort -h

                                                                                                      попутно выводит и файлы, и сортирует по размеру (к сожалению, "-h" у sort поддерживается не везде), потом узнал о ncdu
                                                                                                      • 0
                                                                                                        Регулярно пользуюсь ncdu, чтобы почистить сервер. Но здесь эта утилитка — оффтоп, т.к. не включена в дистрибутив.
                                                                                                    • +2
                                                                                                      Секундомер: time read -sn1
                                                                                                    • 0
                                                                                                      Чтобы вернуться к предыдущей или следующей команде, используйте Ctrl+p и Ctrl+n вместо стрелочек. Так вы сможете не отрывать руки от клавиатуры. И не забывайте о поиске по Ctrl+r.
                                                                                                      • 0
                                                                                                        Чуть не поставила автору минус :)) Но потом прочитала про factor, yes, и man units. Спасибо :)
                                                                                                        • +19
                                                                                                          1) Не все почему то знают что можно сказать просто «cd» и попасть в свой хомяк, а можно сказать «cd ~username» и попасть в хомяк username'а.
                                                                                                          2) rev — переворачивает строчку задом на перед.
                                                                                                          $ echo abc | rev cba $
                                                                                                          3) Команду exit\logout можно заменить на Ctrl+D (в большинстве современных шелов).
                                                                                                          4) Ctrl+Shift+3 — ставит в начало строки знак комментария и нажимает Enter. Удобно когда пишем какую то длинную команду и тут возникает вопрос — вам нужно обработать условно "/home/username/www" или "/home/username/public_html". Обычное решение: открыть вторую вкладку в терминале, снова зайти на сервер, посмотреть, вернуться в первую, дописать. Неудобно потому что снова коннектится надо, а ключа нет, потому что вы вошли по паролю, который у вас в почте, которая на другом экране, и все стирать (жать Ctrl+C) не хочется потому что уже почти всю команду вписали, осталось совсем чуть чуть. А тут жмем Ctrl+Shift+3, смотрим путь, нажимаем вверх, дописываем команду, Enter, удивляемся почему не сработало, наживаем вверх, Home, Del (удаляем символ комментария в начале строки) Enter, радуемся.
                                                                                                          • 0
                                                                                                            спасибо за Ctrl + Shift +3 :)
                                                                                                            • 0
                                                                                                              Ctrl + Shift +3 не работает почему-то. ubuntu+bash+putty
                                                                                                              • +8
                                                                                                                Попробуйте Alt+Shift+3
                                                                                                                • 0
                                                                                                                  Таки да. Отработало даже в guake.
                                                                                                                • 0
                                                                                                                  mint + bash + putty — работает нормально, это под XP в виртуалке. Может ваша ОС это перехватывает? (переключение языка например по Ctr+Shift или еще какое-либо ПО).
                                                                                                                • +1
                                                                                                                  Более лучшее решение вашего четвертого случая. habrahabr.ru/post/228999/#comment_7754985
                                                                                                                  • 0
                                                                                                                    возможно, но мой вариант останется в history, а ваш нет.

                                                                                                                    Как говорится привычка — вторая натура.
                                                                                                                    • 0
                                                                                                                      Привычка это да, но мой вариант тоже останется в истории после того, как вы его исполните. Или вам нужен в истории тот, что закомментирован?
                                                                                                                      • 0
                                                                                                                        естественно тот что закомментирован. Понятно что выполненная команда и так останется в истории (кроме некоторых случаев, частично оговоренных в посте.

                                                                                                                        Кстати про "[space]command". В этих Ваших интернетах говорят про HISTCONTROL, описанный в мане, который отвечает за сохранять али нет команды, введенные с пробелом в начале :)
                                                                                                                  • 0
                                                                                                                    Вау. Вот это реально полезно. Уже 20 лет юниксами занимаюсь, а такой полезной комбинации не знал. Премного благодарен.
                                                                                                                  • +3
                                                                                                                    В Убунтах всяких есть такая вот бесполезная штука, как apt-get moo

                                                                                                                    картинка
                                                                                                                    image
                                                                                                                    • 0
                                                                                                                      Веселая штука, действительно, надо будет еще по разделам написать подборку, отделив веселые от серьезных
                                                                                                                      • +6
                                                                                                                        Подборки весёлостей уже много раз были. А вот полезности не стыдно и повторить.
                                                                                                                      • –1
                                                                                                                        А в Debian уже довольно давно есть sl. Пускаю его когда совсем скучно.
                                                                                                                      • 0
                                                                                                                        Пишите «Часть 2» с конспектом комментов)
                                                                                                                        • 0
                                                                                                                          Напишу, может, подборку единым списком
                                                                                                                          • 0
                                                                                                                            в виде постера бы) чтоб на стену повесить и пользовать, а то в виде статьи оно прочитывается и забывается через пару недель)
                                                                                                                            • +3
                                                                                                                              Перед тем, как делать подборку, посмотрите вот на этот ресурс. Там много чего можно почерпнуть.
                                                                                                                          • +15
                                                                                                                            Тот случай, когда узнаешь, сколько бесполезных вещей у тебя установлено дистрибутивом из коробки в посте, а в комментариях узнаешь сколько полезностей умеют постоянно используемые инструменты.
                                                                                                                            • +7
                                                                                                                              На Хабре в большинстве постов узнаешь больше полезной информации, чем в посте )
                                                                                                                          • +2
                                                                                                                            Кому как, а мне понравилось.
                                                                                                                            • +6
                                                                                                                              >>> «Начнем с простого, команда man, что означает manual. Если хотите прочитать о какой-либо команде, просто наберите: „

                                                                                                                              Не смешно. Лучше бы про info написали. Про неё почему-то почти никто не знает.
                                                                                                                              • +3
                                                                                                                                Да. Нигде о ней ещё не слышал.
                                                                                                                                P.S. Прошу прощения за случайный минус (тачпад) и возвращаю в карму.
                                                                                                                                • +2
                                                                                                                                  За плюсы в карму — благодарю, а то злые люди минусов накидали, и без тегов стало как-то грустно жить. :)
                                                                                                                                  • +4
                                                                                                                                    man info
                                                                                                                                  • +6
                                                                                                                                    info — отвратительное порождение GNU, которое решило, что оно not unix. Никто им в нормальном состоянии не пользуется, оно неудобно, с ужасной навигацией и форматированием. Если бы не уверенность gnu, что мануалы к coreutils/fileutils должны идти в первую очередь в info, а в man — только короткие выжимки, то про неё бы давно забыли как про страшный сон.
                                                                                                                                    • 0
                                                                                                                                      Не соглашусь. После освоения навигации хелпа vim вполне комфортно пользуюсь info. И когда настраиваешь систему на linux, не имея выхода в интернет (военные объекты на пространствах РФ) — info спасает.
                                                                                                                                      • 0
                                                                                                                                        Ну, info в emacs-е довольно удобно пользоваться :-)
                                                                                                                                    • +3
                                                                                                                                      jot

                                                                                                                                      Прямо неуловимый Джо

                                                                                                                                      Так можно подборку из 100500 малоизвестных команд сделать. Нужно писать про те, которые есть в LSB (и следовательно в каждом дистрибутиве) хотя бы.
                                                                                                                                      • +2
                                                                                                                                        Спасибо. Даже если я и знал часть, то всё равно было познавательно и забавно. Особенно таблица аски. Всегда ради неё гуглил, а тут оказывается она всегда под рукой.

                                                                                                                                        А брюзги есть в любом линукс посте. У нас если автор рассказывает по линуксу то что ты знаешь, то значит автор не прав и его надо сжечь на священном костре холивара. Так что всё это ерунда.
                                                                                                                                        • +1
                                                                                                                                          seq x [y] печатает последовательность чисел. Удобно в виде
                                                                                                                                          for i in `seq 10`; do echo $i; done
                                                                                                                                          • 0
                                                                                                                                            Еще можно:

                                                                                                                                            $ seq start [[step] finish]

                                                                                                                                            step не обязательно целое
                                                                                                                                            • +1
                                                                                                                                              Мне недавно показали такой башизм, я удивился, но использую:

                                                                                                                                              for a in {1..10}; do echo $a; done
                                                                                                                                              • 0
                                                                                                                                                интересно
                                                                                                                                                но у seq свои удобства: ему можно сказать, чтоб заполнял нуликами слева (удобно, если вставлять в имена файлов, лучше сортировка):
                                                                                                                                                $ seq -w 1 10
                                                                                                                                                01
                                                                                                                                                02
                                                                                                                                                03
                                                                                                                                                04
                                                                                                                                                05
                                                                                                                                                06
                                                                                                                                                07
                                                                                                                                                08
                                                                                                                                                09
                                                                                                                                                10
                                                                                                                                                

                                                                                                                                                • +2
                                                                                                                                                  for a in {01..10}; do echo $a; done
                                                                                                                                                  • +1
                                                                                                                                                    У меня работает даже так:
                                                                                                                                                    $ for a in {01..100}; do echo $a; done
                                                                                                                                                    

                                                                                                                                                    Т.е. указать один нулик, если не знаешь точно второй аргумент. Добавит нужное количество нуликов сам.
                                                                                                                                                    • 0
                                                                                                                                                      В zsh этот вариант генерирует 01 02 …, а не 001 002 …. Не думаю, что такое поведение некорректно: в вашем случае вы лишаетесь возможности генерировать именно то, что генерирует zsh (я несколько раз видел номера серий в стиле 01 02 … 99 100 101 …).
                                                                                                                                                      • 0
                                                                                                                                                        Полезно. А то я всегда через a=`printf %02d $a` нули добавлял :)
                                                                                                                                                        • +2
                                                                                                                                                          Конкретно для переменных в zsh есть ${(l:2::0:)a} и typeset -i -Z2 a.

                                                                                                                                                          Первое добьёт строку нулями до данной ширины. В качестве ширины можно использовать $#max и вообще любое выражение, не содержащее разделители (в примере у меня и в документации — двоеточие, но разделители могут и не быть двоеточиями). Второе объявит, что, во‐первых, данная переменная является целочисленной, а, во‐вторых, что при подстановке её следует дополнять нулями до данной ширины.

                                                                                                                                                          С typeset дополнять можно только нулями или пробелами, с ${(l)} вы можете дополнять чем угодно, включая нулевые байты (используйте формат ${(pl:2::\0:)VAR} — обратить внимание на p).
                                                                                                                                                          • +1
                                                                                                                                                            Ну ставить другой шел на кучу машин ради паддинга я точно не буду) Но разнообразие вариантов решения впечатляет.
                                                                                                                                              • +2
                                                                                                                                                А еще есть программа по имени vrms, — виртуальный Столлман.
                                                                                                                                                Есть программа sl — вызывает паровозик.
                                                                                                                                                • 0
                                                                                                                                                  Причём, есть уже не везде из коробки (субъективно раньше чаще встречалась). Это же так прекрасно — ставить из репозитория паровозик! :)
                                                                                                                                                  А vrms никогда не видел из коробки.
                                                                                                                                                • +1
                                                                                                                                                  Я часто использую такие вещи:
                                                                                                                                                  [ESC] +. (точка) — аргумент из предыдущей команды. Допустим смотрим содержимое какого-либо файла:
                                                                                                                                                  cat /etc/samba/smb.conf
                                                                                                                                                  потом понимаем, что нужно отредактировать. Чтобы еще раз не вводить полный путь делаем просто:
                                                                                                                                                  vim [ESC] + . — bash сам подставит аргумент.
                                                                                                                                                  Переход по директориям не учитываю регистр символов:
                                                                                                                                                  в файле /etc/inputrc дописываем следующее:
                                                                                                                                                  set completion-ignore-case On
                                                                                                                                                  Еще пример, получаем вывод ошибок, что в каком-то файле, в такой-то строке (допустим 78) — ошибка, делаю так:
                                                                                                                                                  vim +78 file
                                                                                                                                                  и редактор открывает файл сразу на указанной строке.
                                                                                                                                                  • 0
                                                                                                                                                    в файле /etc/inputrc дописываем следующее

                                                                                                                                                    Но зачем? Ведь есть ~/.inputrc. Как уже упоминалось в комментах, многие фичи реализует библиотека readline, она же читает файл inputrc. В REPL, которые используют readline, будут работать всё те же горячие клавиши. К примеру, интерпретатор Python подхватывает настройки и работает аналогично shell.
                                                                                                                                                  • +3
                                                                                                                                                    Мой результат — 8/5. А персональный хит-парад любимых команд выглядит так:
                                                                                                                                                    1. tar -cf — dir1 dir2 dir3 | tar -C /dest/directory -xvf — — скопировать каталоги вместе с именами пользователей и правами доступа
                                                                                                                                                    2. df -h — ключ -h означает показывать результат в человеко-читаемом виде
                                                                                                                                                    3. `` — подстановка результата команды в командную строку. Например, grep -li CONST `find. -name *.h` найдет строки, содержащие   CONST во всех файлах *.h от текущего каталога и ниже по иерархии.
                                                                                                                                                    4. () — группировка. Например, команду из первого примера можно переписать так: tar -cf dir1 dir2 dir3 | (cd /dest/directory; tar -xvf -)
                                                                                                                                                    5. Нежно люблю пакет ImageMagick, и особенно команду mogrify для работы с изображениями. Например, mogrify -resize 1920x1080 *.jpg сделает именно то, что ожидается — подгонит размер всех картинок под заданный размер, не меняя aspect ratio.
                                                                                                                                                    • +2
                                                                                                                                                      3. Здесь надо помнить, что в случае с find ваше утверждение верно только до тех пор, пока в именах файлов нет пробелов, табуляции и новых строк (в именах файлов может быть всё, кроме нулевого байта). По этой причине я буду использовать **/*.h, find|xargs (новую строку в имени файла в «диком виде» я видел ровно один раз и то только потому, что konqueror позволил мне её туда закопипастить — во всех остальных случаях она помещалась туда намеренно с целью тестирования) или что‐нибудь ещё, но никак не $(find). $(что‐то ещё) я использую, но только когда точно знаю, что это «что‐то ещё» выведет.
                                                                                                                                                      4. Для группировки лучше использовать {}. () ценна тем, что создаёт новый shell, соответственно окружение (текущий каталог, переменные окружения, ограничения на потребления ресурсов (ulimit)) не изменится, что бы вы там не делали. {} новый shell не создаёт. Конкретно в вашем примере из‐за cd нужен новый shell, а не группировка.
                                                                                                                                                      5. Я использую ImageMagick, чтобы создавать скриншоты (import): во‐первых, в моём fluxbox для его использования созданы клавиатурные сочетания, во‐вторых, ImageMagick присутствует на многих системах, что значит, что если он там, то мне не придётся думать, как сделать скриншот здесь. import умеет брать скриншоты всего экрана (указанного в командной строке или тыкнутого мышкой), конкретного окна или даже области, которую вы выделяете мышкой и сохранять сразу в запрошенном формате.
                                                                                                                                                    • +14
                                                                                                                                                      1. timeout — выполняет команду, по истечению времени убивает;
                                                                                                                                                      2. numfmt --from=si 1M — форматирует число. Например из 1M сделает 1000000, из 1K — 1000. Умеет и в обратную сторону
                                                                                                                                                      3. shred — перезаписывает файл случайными данными заданное число раз
                                                                                                                                                      4. nproc — печатает число процессоров
                                                                                                                                                      5. tailf — синоним tail -f, печатает только новые строки, появившиеся в файле с момента запуска команды
                                                                                                                                                      6. users — печатает имена всех залогиненный пользователей
                                                                                                                                                      7. fsfreeze — блокирует запись на файловую систему до момента unfreeze(системные вызовы записи не завершаются до анфриза). Удобно для надёжного чекпойтинга подмонтированной ФС. (лучше не делать на /, а то потом не сможем разморозить)
                                                                                                                                                      8. findfs --LABEL=«windows» — находит файловую систему по метке или по UUID, blkid — выводит список меток и UUID'ов всех ФС, lsblk — выводит блочные устройства в виде дерева
                                                                                                                                                      9. look — ищет строки начинающиеся с подстроки в отсортированном файле(бинарным поиском)
                                                                                                                                                      10. lslocks — показывает файловые локи
                                                                                                                                                      11. ipcs — показывает объекты ipc(shared memory, message queues и семафоры), они иногда утекают, т.к не привязаны к процессам. ipcrm — удалить объекты ipc
                                                                                                                                                      12. script — записывает сессию в файл, умеет записывать информацию о задержках в нажатии клавиш, scriptreplay — воспроизводит записанный файл, например, script --timing=file.tm script.out; scriptreplay --timing file.tm --typescript script.out
                                                                                                                                                      13. dmidecode — информация о системе, lscpu — информация о cpu, lshw — ещё одна информация о системе, lspci, lsusb
                                                                                                                                                      14. getent passwd — список пользователей, работает и в системах где пользователи не хранятся в /etc/passwd, а, например, в ldap
                                                                                                                                                      15. losetup -f — найти все разделы в образе диска из файла и сделать их доступными, как /dev/loop*
                                                                                                                                                        • +1
                                                                                                                                                          Проверил что кто-то уже запостил ссылку на commandlinefu — можно и спать пойти.

                                                                                                                                                          З.Ы. для полного счастья не хватает только линка на explainshell.com/
                                                                                                                                                          • 0
                                                                                                                                                            tailf — это чуть лучше чем просто синоним «tail -f», особенно для ноутбуков:

                                                                                                                                                            It is similar to tail -f but does not access the file when it is not growing. This has the side effect of not updating the access time for the file, so a filesystem flush does not occur periodically when no log activity is happening.

                                                                                                                                                            tailf is extremely useful for monitoring log files on a laptop when logging is infrequent and the user desires that the hard disk spin down to conserve battery life.
                                                                                                                                                          • +4
                                                                                                                                                            Ctrl+R — поиск по истории команд, наверное самая удобнейшая штука.
                                                                                                                                                            time — время, потраченное на выполнение команды
                                                                                                                                                            аргумент -h для многих стандартных утилит(coreutils) выводит числа с приставками. например для df или ls выведет размер в кило/мега/гигабайтах
                                                                                                                                                            • +1
                                                                                                                                                              Мнемоника для аргумента -h: --human-readable