TGViewer
Записки IT специалиста Записки IT специалиста @interface31 · 9.03K subscribers
Post #4361 2.86K
​​Используем спецсимвол ! в командной строке Linux

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

Поэтому попробуем заполнить этот пробел. Восклицательный знак используется для повторения команд и аргументов команд. В самом простейшем виде наберите:

!!

И оболочка повторит последнюю набранную команду. Это удобно, если команда требует повышения прав, тогда вместо перепечатывания команды заново достаточно написать:

sudo !!

Немного сложнее, если команду надо было выполнить от другого пользователя, например, postgres:

su -c “!!” postgres

Также с помощью восклицательного знака легко повторить команду из истории, выполните

 history


Посмотрите номер нужной команды и введите:

 !38


Что заново выполнит команду из истории под номером 38.

Также мы можем повторить выполнение команды со всеми аргументами, допустим мы выполнили:

cat /home/andrey/123.txt /home/ivan/321.txt

Для ее повторения достаточно выполнить:

 !cat


или вообще

 !с


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

Мы можем не только повторить, но и добавить аргументы, например:

!cat /home/andrey/456.txt

Что будет эквивалентно

cat /home/andrey/123.txt /home/ivan/321.txt /home/andrey/456.txt

Также можно использовать восклицательный знак для передачи аргументов предыдущей команды.

Для первого и последнего используйте !^ и !$

Так после выполнения последней команды мы можем указать:

 cat !^ !$


Что приведет к выполнению:

 cat /home/andrey/123.txt /home/andrey/456.txt


Либо можем указать аргументы явно, для последней команды можем использовать !:2 – второй аргумент, или указать команду явно, тогда будет использован указанный аргумент последнего запуска команды:

cat !cat:2

Будет аналогичен:

cat /home/andrey/456.txt

Обратите внимание, что к аргументам также относятся и ключи, поэтому если после запуска

cat -n /home/andrey/456.txt

Вы введете:

cat -n !^

То будет выполнен:

cat -n -n

без аргументов.
  • 👍 53
  • 🔥 11
  • 🤯 7
  • ❤ 5
More from @interface31
  1. Oct 16, 2026Selectel обновил пользовательское соглашение. А что там? Правильно: 6.4. Исполнитель не не…
  2. Oct 16, 2026Post #6889
  3. Oct 15, 2026И еще немного про алиасы в PowerShell PowerShell предлагает большой набор встроенных алиас…
  4. Oct 15, 2026Post #6883
  5. Oct 15, 2026Настраиваем политику паролей в Linux Во многих дистрибутивах Linux (а более подробно мы бу…
  6. Oct 15, 2026Post #6881
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →