Хитрые команды в терминале

Насколько я представляю среднего маковода, к возможностям Terminal прибегают не многие. Мне приходится иногда, так что я с интересом прочитал статейку, в которой собраны 10 полезных однострочных команд shell. Некоторые команды специфичны для bash (разновидность шелла), некоторые не работают на Mac OS, но есть и удивительные открытия.

1. Запустить последнюю команду от имени root

$ sudo !!

Это стыдно не знать, но я периодически матерюсь и набираю команду заново, об этом способе не вспоминаю, увы. Команда полезна если вы попытались выполнить операцию, для которой требуются «рутовые» права, но забыли написать sudo. Что здесь есть: sudo без параметра выполняет команду от имени «суперюзера», а !! — это предыдущая команда из истории shell, которую можно также записать !-1.

Еще немного об истории: history показывает пронумерованный список команд, !nn вызывает команду за номером nn в списке, !-n вызывает n-ную команду из истории, начиная с конца. Если добавить в команду модификатор print (!-nnn:p) вытаскивает из истории команду, но не выполняет ее. Команда !smthng вызывает из истории последнюю команду, начинающуюся со строки smthng.

  499  mtr google.com
  500  exit
  501  history
  502  ping 8.8.8.8
  503  cd ~
  504  pwd
  505  history
$ sudo !499
sudo mtr google.com
Password:
$ sudo !502:p
sudo ping 8.8.8.8
$ !pi:p
ping 8.8.8.8
$ 

2. Быстро «расшарить» текущую папку по HTTP

$ python -m SimpleHTTPServer 8080

Этой команды я не знал. Иногда бывает полезно, когда надо поделиться с кем-то файлами ненадолго. Сервер будет «слушать» все доступные IP адреса, порт по-умолчанию 8000, но можно указать свой — 8080 в команде выше это порт и есть.

Зайти на ваш сервер можно по адресу http://ваш-ip-адрес:8080/ либо http://имя-компьютера:8080/. Если в папке есть файл index.html, то он будет стартовым документом, если нет — будет отображаться список документов в папке.

$ cd ~/Library
Library$ python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...

python http server

Сервер не прячет «скрытые» файлы, название которых начинается с точки.

3. Перейти в предыдущий каталог

$ cd -

Каждый раз после смены текущего каталога при помощи команды cd, в системе сохраняется переменная $OLDPWD, в которой хранится прежняя папка. Символ – (минус) в команде cd заменяется значением этой переменной.

$ cd ~/Library
Library$ pwd
/Users/Username/Library
Library$ cd ~/Downloads
Downloads$ pwd
/Users/Username/Downloads
Downloads$ cd -
/Users/Username/Library
Library$ 

Бывает удобно, если вы куда-то ненадолго «отлучаетесь» из рабочего каталога, а потом хотите быстро вернуться назад.

Остальные хитрые команды мне не особо интересны: редактором vim я не пользуюсь, mtr в стандартной поставке Mac OS нет, трюк с заменой части строки в команде мне не пригодится.

От себя добавлю — большинство неудобств работы в командной строке устраняются заменой стандартного Терминала на iTerm. Он тоже не красавец, но там хотя бы нормально работают стрелки, клавиши home/end, спокойно можно пользоваться mc (midnight commander) и вообще как-то уютнее.

Комментария 3

  1. iTerm тоже раньше пользовался, но теперь в стандартном терминале.
    1. Он везде есть в MAC OS по умолчанию, и если где-то садишься на чужой тазик, то iTerm там может и не быть.
    2. Не нашел уж больших отличий iTerm от стандартного. В SL так точно.

    1. 1. Мне пока ни разу не потребовалось запускать на чужих компьютерах терминал. Так обычно есть вещи поинтереснее :)
      2. Стандартный терминал ужасно настроен: home/end pgup/pgdn не работают; в mc вверх-вниз перемещаться можно только кнопками на цифровой клавиатуре и т.п., я всего уже не помню.

      Вполне вероятно, что все это можно настроить. Я честно смотрел настройки клавиатуры и пытался что-то улучшить. Но там надо поштучно назначать кнопки, а это муторно и разбираться надо. Мне нисколько не стыдно, что я не знаю что такое “33[31~” и что надо назначить на PgUP чтобы в mc листался список файлов, а не буфер прокручивался.

      В чем-то Терминал лучше, я соглашусь. Но оценить мне это сложно, входной порог не могу преодолеть.

Добавить комментарий для abr307 Отменить ответ