Как использовать историю Bash в терминале Linux или MacOS

Всем доброго времени суток и других разностей.

Эволюция Unix

В 1969 году команда разработчиков в лице Кена Томпсона, Денниса Ритчи и Дугласа Макилроя из исследовательского центра Bell Labs компании AT&T начала проект по созданию единой операционной системы для всех компьютеров, назвав её — «Unix». Первая версия системы была написана на ассемблере. В 1972 году для того, чтобы переписать систему на более простой язык, Деннис Ритчи создает язык программирования Си, благодаря чему, 15 октября 1973 года выходит новая версия Unix (четвертая), ядро которой было переписано на Си. А через 2 года (в 1975 году) появляется уже полностью написанная на языке Си редакция Unix (пятая).

Долгое время операционная система являлась лишь исследовательским проектом, но в 1973 году проходит конференция Ассоциации по вычислительной технике (сокр. «ACM» от «Association for Computing Machinery»), на которой создатели Unix рассказывают о своей системе, и к ним сразу же начинают обращаться люди с просьбой поделиться её копией. И тут стоит отметить одну очень важную историческую деталь, которая сыграла свою роль в дальнейшем развитии событий. Дело в том, что в 1956 году компания AT&T (являющаяся на тот момент монополистом на американском рынке местной и междугородней связи) завершает очередное разбирательство с федеральными властями и антимонопольным комитетом по поводу своего монопольного положения, результатом которого становится подписание соглашения, накладывающее на AT&T ограничения по продажи продуктов и услуг, не связанных напрямую с телефонами и телекоммуникациями. А это значит, что Unix не могла продаваться всем желающим её заполучить. В связи с этим фактом, распространение исходных кодов системы Unix происходило абсолютно бесплатно.

Эволюция Unix

Первоначально Unix использовалась в основном в университетах и крупных финансовых корпорациях. К 1978 году насчитывалось около 600 машин с установленной на них системой Unix.

Опции командной строки

В истории развития операционной системы UNIX программы использовали разные способы задания своих опций: ♦ односимвольные, например ls -а -l (что эквивалентно ls -l -а или ls -al или ls -la); ♦ многосимвольные, например find /var  -xdev; ♦ длинные, например ps  —help; ♦ с аргументами, например kill  -n  15 1, или kill  -n15  1, или du  -В  M, или  du -BM,

или find /etc -type d, или даже ls —sort=slze;

Читайте также:  Изменить язык мазилы. Как изменить язык в internet explorer

♦ «нестандартные», например set +x,  tar  czf ~ или dd  if=/dev/dvd  of=.

Знак «минус», предваряющий опции, естественно используется для того, чтобы отличать их от аргументов. Среди прочих, он был выбран потому, что редко встречается как первый символ в аргументах команд (в качестве которых зачастую выступают имена файлов).

И еще потому, что на терминале классической UNIX набор более логичного знака «плюс» (что могло бы означать «включить»,«активировать») требовал достаточных усилий по нажатию клавиши SHIFT. В результате получилось, что, например, в команде set опция х (execution trace) в форме -х включает, а +х выключает трассировку выполнения команд.

В тех редких случаях, когда аргумент команды все же начинается с символа «минус» и тем самым похож на опцию (представим, что нужно выполнить действие над файлом с именем -=filenames=-), специальная опция — сигнализирует о конце списка опций, за которым следуют лексемы, обязанные расцениваться как аргументы, вне зависимости от их написания.

Конец списка опций

[email protected]: ~$ stat -=filename=-

stat: неверный ключ —  «=» Попробуйте «stat —help» для получения более подробного описания.

[email protected]: ~$ stat  — —  -=filename=-

Файл: «-=filename=-» Размер:  0                         Блоков: 0                     Блок B/B: 4096         пустой обычный файл Устройство: fc00h/64512d                  Inode: 26870044            Ссылки: 1 Доступ: (0600/-rw -)                      Uid: (  1000/    john)                Gid: ( 1000/     john) Доступ: 2018-08-24    01:37: +0300

Модифицирован: 2018-08-24 01:37: +0300

Изменён: 2018-08-24 01:37: +0300

Создан: —

Короткие, односимвольные опции (например -l -а) без своих аргументов издревле можно было объединять в группы (-lа или -al), однако их в этом случае сложно отличать от многосимвольных (-xdev) или односимвольных, склеенных со своими аргументами (-ВМ).

Поэтому позже появились длинные (в так называемом GNU-стиле) опции, обозначаемые двумя знаками «минус», позволяющие навести некоторый порядок в виде —block-size=M вместо -ВМ или, предположим,

—dont-descent вместо -xdev.

Командный интерфейс Linux

Командный интерфейс Linux, каким бы «страшным» не казался, в реальности удивительно функционален для решения массы разнообразных задач, хотя он и не решает абсолютно все задачи одинаково эффективно. Например, его невероятно сложно и неудобно использовать для обработки графической информации, когда при взаимодействии с пользователем требуется ввести колоссальное количество «графических» данных, например, указать обтравочный контур. В этом случае графический интерфейс с «непосредственным» манипулированием подойдет гораздо лучше.

Читайте также:  Создание и управление пользователями в Linux

Для начинающего пользователя интерфейс командной строки действительно является непривычным, что зачастую путают с неудобством, так толком и не разобравшись со всеми его возможностями.

Естественные языки, которые используют люди для взаимодействия между собой, на порядок сложнее формального командного языка операционной системы. Однако использование глаголов (команд), существительных (аргументов) и наречий (опций) родного языка мало у кого вызывает чувство неудобства. Наоборот, странным покажется тот человеческий индивидуум, который попытается в обществе использовать непосредственное манипулирование, например, указывая (щелкая) пальцем в магазине на товары (значки) и мыча что-то нечленораздельное. Скорее всего, мы примем его за иностранца (или это будет ребенок), еще не в полной мере владеющего языком.

Именно командный интерфейс в современном виде — аудиоформе — больше не является уделом художественных фантастических произведений, где капитаны межгалактических кораблей командуют кораблям «включить защитное поле». Теперь мы все можем при помощи командного аудиоинтерфейса смартфона найти ближайшую пиццерию или маршрут к нужному месту. Надеюсь, что и алфавитно-цифровая форма командного интерфейса, доставшаяся «в наследство» от UNIX из 70-х годов прошлого века, вас тоже не особо испугает. Ok, Google?

Повторное использование аргументов из вашей истории

Bash также позволяет вам запускать новую команду, но использовать аргументы из предыдущих команд в вашей истории. Это может помочь вам быстро повторно использовать длинные или сложные аргументы без необходимости их повторного ввода.

команда! $

Например, допустим, вы запустили команду touch /home/chris/some_long_file_name_you_dont_want_to_type_again . Теперь вы хотите запустить команду nano /home/chris/some_long_file_name_you_dont_want_to_type_again . Вместо того, чтобы печатать все это с нуля, вы можете запустить:

нано! $

!$ Заставит bash автоматически заполнить последний аргумент из вашей предыдущей команды.

Это только заполняет последний аргумент. Итак, если вы запустите ping -c 4 а затем запустите ping !$ , Это просто расширится до « ping 4 ».

Чтобы исправить эту ситуацию, вы можете использовать следующий трюк для расширения первого аргумента в строке, а не последнего:

команда! ^

Итак, если вы запустили ping -c 4 а затем запустили ping !^ , Bash расширит это до « ping » .

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

команда! *

Итак, если вы запустите ping !* , Bash автоматически заполнит все аргументы, которые вы использовали в предыдущей команде.

Вы можете использовать тот же трюк, который вы используете для запуска команд из вашей истории, чтобы получить аргументы из них. Просто используйте следующую форму.

команда! abc: #

Например, мы запускали команду sudo hostname ubuntu ранее. Если мы запустим следующую команду, bash будет искать в истории в обратном направлении, чтобы найти последнюю команду, начинающуюся с букв, которые мы вводим, и заполнить указанный аргумент. Поэтому, если мы запустим echo !su:2 , bash выполнит поиск, чтобы найти последнюю команду, начинающуюся с « su », и заполнит ее второй аргумент, который называется « ubuntu ».

Другие трюки работают, как вы могли ожидать. Например, замена числа звездочкой, известной как подстановочный знак, заставляет bash заполнить все аргументы команды:

команда! abc: *

Читайте также:  Загрузка Windows 7/10 с GPT диска на BIOS системе (без UEFI)

Разделы страниц руководства

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

1. исполняемые программы или команды оболочки 2. системные вызовы 3. библиотечные процедуры 4. специальные файлы (т.е. Устройства в каталоге / dev) 5. форматы файлов 6. игры 7. макросы 8. команды системного администрирования 9. подпрограммы ядра n. Tcl / Tk (язык программирования)

* — как «подстановочный» знак последовательности символов

Вы можете использовать «подстановочный» знак звездочка (*) для обозначения любой последовательности символов, включая отсутствие символов. Рассмотрим следующий шаблон имени файла:

ls badge*

* - как

Это соответствует всем следующим:

Он соответствует «», потому что «подстановочный» знак представляет собой любую последовательность символов или не содержит символов.

Эта команда сопоставляет все файлы, называемые «исходными», независимо от расширения файла.

* - как

ls source.*

Справочная информация

  • man command – показать ман-страницу для command
  • info command — показать info-страницу для command
  • whatis command – поиск man-страницы для command и отображение информации об имени из соответствующей man-странице
  • apropos command — поиск по ключевым словам в man-страниц и выводит те, которые содержат command(по существу, это аналог команды man -k, где ключ k — указывает на поиск в руководстве по ключевому слову)
    • editor — отобразит имеющиеся в системе текстовые редакторы