'!'
символ или оператор в Linux могут использоваться как Логическое отрицание оператор, а также получить команды из истории с доработками или запускать ранее выполненные команды с модификацией.
Большинство из следующих Команды Linux использование с '!'
символ может различаться в разных оболочках. Хотя приведенные мной примеры обычно используются в оболочке bash, некоторые другие оболочки Linux могут иметь разные реализации или могут не поддерживать определенные варианты использования ‘!’ вообще символ.
Давайте погрузимся в удивительные и загадочные способы использования '!'
символ или оператор в командах Linux.
Оглавление
1. Запустите команду из истории, используя номера команд
Вы можете не знать о том, что можете запустить команду из своего команда истории (уже/ранее выполненные команды). Чтобы начать сначала, найдите номер команды, запустив ‘историякоманда.
$ history

Чтобы запустить команду из истории по ее номеру команды, вы можете использовать '!'
символ, за которым следует номер команды, как показано на рисунке.
$ !1551

Когда вы выполните приведенную выше команду, она запустит высшая команда по номеру строки 1551 из вашей истории.
Обратите внимание, что фактический номер команды может отличаться в зависимости от вашей истории команд. Вы можете использовать команду history для просмотра списка команд вместе с их номерами строк.
2. Запуск ранее выполненных команд в Linux
Вы можете запустить те команды, которые вы запускали ранее, по их последовательности выполнения, последняя команда запуска будет представлена как -1предпоследний как -2седьмой последний как -7и так далее.
Например, если вы хотите повторно запустить команду, которая была выполнена шесть, восемь или десятую команду назад, вы можете использовать !-n
где n
это количество команд назад, на которые вы хотите сослаться.
$ history $ !-6 $ !-8 $ !-10

3. Передать аргументы предыдущей команды новой команде
Мне нужно перечислить содержимое каталога ‘/home/$USER/Двоичный файл/firefox‘, поэтому я выстрелил.
$ ls /home/$USER/Binary/firefox
Тогда я понял, что я должен был уволить ‘лс -л‘, чтобы увидеть, какой файл там исполняемый. Так что я должен ввести всю команду снова? Нет, мне это не нужно. Мне просто нужно передать последний аргумент этой новой команде как:
$ ls -l !$
Здесь !$
перенесет аргументы, переданные в последней команде, в эту новую команду.

4. Как обрабатывать два или более аргумента в командах
Допустим, я создал текстовый файл 1.txt на рабочем столе.
$ touch /home/avi/Desktop/1.txt
а затем скопируйте его в ‘/home/avi/Загрузки‘ используя полный путь с обеих сторон с ср команда.
$ cp /home/avi/Desktop/1.txt /home/avi/downloads
Теперь мы передали два аргумента с ср команда. Во-первых, это ‘/home/avi/Рабочий стол/1.txt‘ а второй это ‘/home/avi/Загрузки‘, давайте обработаем их по-другому, просто выполните echo [arguments]
чтобы напечатать оба аргумента по-разному.
$ echo “1st Argument is : !^” $ echo “2nd Argument is : !cp:2”
Примечание 1-й аргумент может быть напечатан как “!^”
а остальные аргументы можно вывести, выполнив “![Name_of_Command]:[Number_of_argument]”
.
В приведенном выше примере первой командой была ‘ср‘ и 2-й аргумент был необходим для печати. Следовательно “!cp:2”
если какая-либо команда говорит xyz запускается с 5 аргументами, и вам нужно получить 4-й аргумент, вы можете использовать “!xyz:4”
, и используйте его по своему усмотрению. Все аргументы доступны через “!*”
.
5. Выполняйте последние команды на основе определенных ключевых слов
Мы можем выполнить последние выполненные команды на основе ключевых слов. Мы можем понять это следующим образом:
$ ls /home > /dev/null [Command 1] $ ls -l /home/avi/Desktop > /dev/null [Command 2] $ ls -la /home/avi/Downloads > /dev/null [Command 3] $ ls -lA /usr/bin > /dev/null [Command 4]
Здесь мы воспользовались лс команда но с разными переключателями и для разных папок. Кроме того, мы отправили в вывод каждой команды к ‘/dev/ноль‘, чтобы содержать консоль в чистоте.
Теперь выполните последние команды запуска на основе ключевых слов.
$ ! ls [Command 1] $ ! ls -l [Command 2] $ ! ls -la [Command 3] $ ! ls -lA [Command 4]
Проверьте вывод, и вы будете удивлены тем, что запускаете уже выполненные команды, просто ls
ключевые слова.
6. Повторить последнюю выполненную команду в Linux
Вы можете запустить/изменить последнюю выполненную команду, используя (!!)
оператор, который представляет собой сокращенную нотацию, позволяющую ссылаться на предыдущую команду, выполненную в командной строке.
Например, в прошлый день я запускал однострочный скрипт для узнать IP-адрес Linux машина.
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/
Потом вдруг сообразил, что нужно перенаправить вывод вышеуказанного скрипта в файл ip.txt, И что же мне делать? Должен ли я снова набрать всю команду и перенаправить вывод в файл? Ну, простое решение – использовать UP
навигационная клавиша и добавить '> ip.txt'
чтобы перенаправить вывод в файл.
$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt
Спасибо Спасителю жизни UP
навигационная клавиша здесь. Теперь рассмотрим приведенное ниже условие, когда в следующий раз я запущу приведенный ниже однострочный скрипт.
$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:
Как только я запускаю скрипт, приглашение bash вернуло ошибку с сообщением «удар: ifconfig: команда не найдена», мне нетрудно было догадаться, что я запускаю эту команду от имени пользователя, где она должна запускаться от имени пользователя root.
Итак, каково решение? трудно войти в систему под root, а затем снова ввести всю команду! Также (ВВЕРХ Клавиша навигации) в последнем примере тут не выручил. Так? нам нужно позвонить “!!”
без кавычек, что вызовет последнюю команду для этого пользователя.
$ su -c “!!” root
Здесь су это пользователь-переключатель, который является корнем, -c
это запустить указанную команду от имени пользователя и самая важная часть !!
будет заменен командой, и здесь будет заменена последняя команда запуска. Ага! Вам необходимо указать пароль root.

7. Удалите файлы, кроме одного, используя ‘!’ Оператор
В Linux !
оператор (известный как «хлопнуть”) используется для расширения истории, что позволяет вам обращаться к предыдущим командам в вашей истории команд и выполнять с ними различные операции.
Чтобы удалить все файлы из каталога, кроме определенного файла (важный_файл.txt), вы можете использовать команда rm с !
оператор, как показано.
$ rm !(important_file.txt)
Чтобы удалить все типы файлов из папки, кроме файла с расширением ‘.pdf
‘.
$ $ rm !(*.pdf)
8. Проверьте, существует ли каталог в Linux
Здесь мы будем использовать '! -d'
чтобы проверить, существует ли каталог или за ним не следует логический оператор И (&&)
для печати этот каталог не существует и логический оператор ИЛИ (||)
для печати каталог присутствует.
Логика такова, когда вывод [ ! -d /home/avi/Tecmint ]
является 0он выполнит то, что лежит за пределами Логического И иначе он перейдет к логическому ИЛИ (||)
и выполнить то, что лежит за пределами Логического ИЛИ.
$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'
Подобно приведенному выше условию, но здесь, если нужный каталог не существует, команда выйдет из команды.
$ [ ! -d /home/avi/Tecmint ] && exit
Общая реализация на языке сценариев, где, если нужный каталог не существует, он будет создан.
[ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint
Это все на данный момент. Если вы знаете или сталкиваетесь с любым другим использованием '!'
что стоит знать, вы можете предоставить нам свое предложение в обратной связи. Оставайтесь на связи!