10 удивительных вариаций использования символа (!) в командах Linux

10 удивительных вариаций использования символа (!) в командах Linux

Рубрики:

Linux, Новости

Метки:

, ,

Символ «!» в Linux можно использовать в качестве оператора логического отрицания, а также для извлечения команд из истории с помощью настроек или для запуска ранее выполняемой команды с модификацией. Все приведенные ниже команды были проверены в оболочке bash. Давайте рассмотрим использование «!» символа в командах Linux.

 

1. Запуск команды из истории по номеру команды.

Возможно, вы не знаете, что вы можете выполнить команду из своей истории уже выполненных команд. Чтобы начать работу, сначала найдите номер команды, запустив команду «history».

 

10 удивительных вариаций использования символа (!) в командах Linux

 

history-running

 

 

Теперь запустите команду из истории по номеру в выводе истории, которому она была выполнена ранее. Скажем, запустите команду, которая была выполнена под номером 1551 в выводе команды «history».

 

10 удивительных вариаций использования символа (!) в командах Linux

 

history-top

 

Команда приведённая выше выполнит команду top, которая была указана под номером 1551. Способ который мы показали для получения уже выполненной команды из истории очень полезен в случае выполнении длинных команд. Вам просто нужно вызывать их с помощью “![Номер, в котором она появляется в выводе команды history]”. Это первый вариант использования символа (!).

2. Запуск ранее выполненной команды (предпоследней команды, седьмой с конца команды и т.д.)

Вы можете запускать те команды, которые вы выполняли ранее в обратной последовательности выполнения, последняя команда запуска будет представлена ​​как -1, вторая – как -2, седьмая – как -7, ….

Сначала запустите команду history, чтобы получить список последних выполненных команд. Необходимо запустить команду history, чтобы вы могли убедится, что в списке недавно выполненных команд нет “опасных” команд, таких как rm command > file, чтобы убедиться, что вы случайно не удалите важные системные файлы.

 

10 удивительных вариаций использования символа (!) в командах Linux

 

history-running

 

10 удивительных вариаций использования символа (!) в командах Linux

3. Перенос аргументов последней выполненной команды, в новую команду без повторного набора

Допустим необходимо просмотреть содержимое каталога ‘/home/$USER/Binary/firefox’, для этого выполним:

 

A что делать чтобы посмотреть, какой файл там был исполняемый? Необходимо было запустить ‘ls -l‘.  Теперь необходимо снова вводить всю команду?! Нет, нам это не нужно. Мы просто перенесём значения аргумента последней команды в новую:

 

Здесь !$ переносит аргументы, выполненные последней командой в новую.

Pass-Arguments-of-Last-Executed-Command-to-New

 

10 удивительных вариаций использования символа (!) в командах Linux

 

4. Как обрабатывать два или более аргумента с помощью “!”

А вот еще один вариант использования символа (!). Предположим, мы создал текстовый файл 1.txt на рабочем столе.

 

А затем скопировали его в ‘/home/avi/Downloads‘, используя полный путь с помощью команды cp.

 

Мы передали два аргумента с помощью команды cp. Сначала «/home/avi/Desktop/1.txt», а второй – «/home/avi/Downloads». Давайте попробуем передать их по отдельности, просто выполните echo [arguments], чтобы набрать оба аргумента отдельно.

 

Примечание. 1-й аргумент можно напечатать как «!^», а остальные аргументы можно напечатать, выполнив «![Name_of_Command]:[Number_of_argument]».

В приведенном выше примере первая команда была «cp», и для её корректного выполнения был необходим второй аргумент. Следовательно чтобы его получить вы можете использовать, «!cp:2». Если какая-либо команда, к примеру, “xyz” запускается с 5-ю аргументами, и вам нужно получить 4-й аргумент, вы можете использовать «!xyz:4» и использовать его по своему усмотрению. Доступ к всем аргументам можно получить с помощью «!*».

Handle-Two-or-More-Arguments

 

 

5. Как выполнить одну из последних выполненных команд используя ключевые слова

Мы можем выполнить одну из последних выполненных команд используя ключевые слова. Чтобы понять что это значит давайте обратимся к следующему примеру:

 

Здесь мы использовали ту же команду (ls), но с разными ключевыми словами и для разных папок. Более того, мы отправили вывод каждой команды в «/dev/null», так как мы не собираемся обрабатывать вывод команды, и оставляем вывод консоли чистым.

Теперь выполните одну из последних выполненных команд используя ключевые слова:

 

Проверьте вывод, и вы будете удивлены… Вы выполните ранее приведенные команды используя только ключевые слова около команды ls.

Run-Commands-Based-on-Keywords

 

 

6. Сила оператора “!!”

Вы можете запустить/изменить свою последнюю выполненную команду, используя “!!”. Оператор “!!” будет вызывать последнюю выполненную команду используя корректировки из текущей команды. Давайте разберёмся по подробнее.

Вчера я запускал однострочный скрипт, чтобы получить свой IP-адрес:

 

Затем я понял, что мне нужно перенаправить вывод вышеупомянутого скрипта в файл ip.txt, так что же мне делать? Не уж то мне необходимо снова ввести всю команду и перенаправить вывод в файл? Хорошим решением является использование клавиши навигации UP (иными словами стрелочки вверх на клавиатуре) и добавление “> ip.txt” для перенаправления вывода в файл:

 

 

Действительно всё сработало хорошо благодаря клавише UP. Теперь рассмотрим следующее условие:

 

 

Как только мы запустим скрипт, подсказка bash вернёт ошибку с сообщением «bash: ifconfig: command not found». Не сложно догадаться, что мы запускаем команду как обычный пользователь, а необходимо выполнять её как root.

Так в чём же проблема? Трудно войти в систему как root, а затем снова ввести всю команду?! Кроме того, уже не получиться как в последнем примере использовать клавишу UP. Так что же делать? Нам нужно использовать «!!» (без кавычек), чтобы вызвать последнюю выполненную команду:

 

 

Здесь su сделает нас пользователем root, -c – запустит определенную команду как пользователь, и самая важная часть “!!” будет заменена командой которая запускалась последней. И да, Вам необходимо указать пароль root.

The-Power-of-!!-Key

 

 

Рекомендуем использовать “!!” главным образом в следующих сценариях:

1. Когда запускаете команду apt-get как обычный пользователь, и получаете сообщение об ошибке, когда у вас нет разрешения на выполнение.

 

 

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

 

Точно так же, как и при выполнении следующих команд:

 

или

 

или

 

Текущий пользователь не имеет права выполнять такие ​​задачи, поэтому запускаем…

 

или

 

или

 

7. Запуск команды, которая повлияет на весь файл, кроме ![FILE_NAME]

«!» (логическое НЕТ) можно использовать для запуска команды для всех файлов/расширений, за исключением «![ИМЯ_ФАЙЛА]».

1. Удалим все файлы из каталога, кроме файла с именем 2.txt.

 

 

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

 

 

8. Проверка, существования каталога (например, /home/avi/sedicomm)?

Здесь мы будем использовать ‘! -d ‘, чтобы проверить, существует ли каталог и так же будем использовать “Логическое И” (Оператор “&&”), чтобы вывести что этот каталог не существует, и “Логическое ИЛИ” (Оператор “||”) для вывода каталога.

Всё просто, когда вывод [! -d /home/avi/sedicomm] равен 0, команда выполнит то, что лежит за пределами логического И, то есть перейдет к логическому ИЛИ.

 

9. Проверка существования каталога? Не выходя из команды.

Все подобно приведенному выше примеру, но здесь, если нужный каталог не существует, команда завершит своё выполнение.

 

10. Создание каталога (например, test) в своем домашнем каталоге, если он не существует.

И последний вариант использования символа (!). Ниже приведена общая реализация на языке сценариев. Где, если нужная директория будет создана только если она не существовала до этого.

 

Теперь вы узнали 10 удивительных вариаций использования символа (!) в командах Linux.

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University.

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Linux, Новости

Метки:

, ,

Больше похожих постов

1 комментарий. Оставить новый

  • Странная ситуация с приведённым вами седьмым способом использования ! “…Запуск команды, которая повлияет на весь файл, кроме !…”. Приведённый вами способ работает только для команды rm. С командой ls ( ls !(*.jpg) ) получается совершенно другой результат – в результате ls выдает результат, как будто его вызывали с ключом -R, и при этом неважно, что находится в скобках, может быть и (*.zip), (*.html), (*.doc). Почему так ? Операционка – ubuntu 12.04

    Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Поиск по сайту
Лучшее
Популярное
Рубрики
Меню