Что означает символ Linux

Обновлено: 21.11.2024

Узнайте, как метасимволы Linux улучшают использование инструментов командной строки

  • Университет Буффало
  • Университет Денвера
  • Пенсильванский университет

Бывший автор Lifewire Юрген Хаас – разработчик программного обеспечения, специалист по данным и поклонник операционной системы Linux.

В этой статье

Перейти к разделу

Метасимвол – это любой символ, имеющий особое значение, например карат (^), знак доллара ($) или звездочка (*). В Linux таких метасимволов довольно много, и их значения различаются в зависимости от того, какую команду или программу Linux вы используете.

Точка как метасимвол (.)

Точка (.) указывает текущую позицию при выполнении таких команд, как cd, find или sh. В таких приложениях, как awk, grep и sed, это подстановочный знак, обозначающий определенное количество любых символов.

Например, следующая команда находит все файлы MP3 в текущей папке и ее подпапках.

Часть команды *.flac возвращает совпадение для любого имени файла, оканчивающегося на .flac. Точно так же вы можете использовать звездочку с командой grep в последнем разделе следующим образом:

Это немного отличается, потому что звездочка означает ноль или больше, поэтому помимо поиска firefox, facefox и fonefox он также находит flutefox, ferretfox и fefox.

Карат как метасимвол (^)

Значок (^) используется для обозначения начала строки или строки. Так как же он используется?

Команда ls выводит список файлов в папке следующим образом:

Если вы хотите перечислить файлы в папке, которые начинаются с определенной строки, например, gnome, для указания этой строки можно использовать карат. Например:

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

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

Символ доллара как метасимвол ($)

Символ доллара ($) как метасимвол в Linux имеет несколько значений. Когда он используется для сопоставления шаблонов, он означает противоположность карата и обозначает любой шаблон, который заканчивается определенной строкой. Например:

Здесь перечислены все файлы, оканчивающиеся на png.

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

Строка export dog=molly создает переменную среды с именем dog и устанавливает для нее значение molly. Чтобы получить доступ к переменной среды, используйте символ $. С символом $ оператор echo $dog отображает molly. Без него оператор echo dog отображает слово dog.

Экранирование метасимволов (\\)

Иногда вы не хотите, чтобы метасимвол имел особое значение. Например, если файл называется f.refox, а другой файл называется firefox.

Теперь посмотрите на следующую команду:

Как вы думаете, что возвращается? Возвращаются как f.refox, так и firefox, поскольку оба соответствуют шаблону.

Чтобы вернуть только f.refox, избегайте точки, чтобы она фактически означала точку, как показано ниже:

Скобки как метасимвол ([])

Вы можете использовать квадратные скобки ([ ]) при поиске шаблонов. Скобки указывают конкретные буквы, которые должны совпадать в любом месте шаблона. Например:

Здесь перечислены все файлы, содержащие буквы a, b или c.

Квадратные скобки можно использовать в начале, в конце или в середине шаблона поиска.

Для поиска диапазона букв используйте символ дефиса (-). Например, ls [a-h]* возвращает файлы, начинающиеся с любой буквы от a до h.

Метасимвол Accent Grave

В приведенных выше примерах метасимвол вертикальной черты отправляет результаты одной команды (например, команды ls) другой команде (например, команде grep).

Альтернативный способ сделать это — использовать обратную кавычку, также известную как знак ударения (`), чтобы вставить результаты одной команды в другую команду. Для этого сохраните результат одной команды в переменной. Например:

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

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

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

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

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

И он запускает команду (верхняя команда в приведенном выше случае), которая была указана под номером 1551. Этот способ получения уже выполненной команды очень полезен, особенно в случае длинных команд. Вам просто нужно вызвать его, используя ![Номер, под которым он появляется в выводе команды history].

2. Выполнить ранее выполненную команду как 2-ю последнюю команду, 7-ю последнюю команду и т. д.

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

Сначала запустите команду истории, чтобы получить список последних выполненных команд. Необходимо запустить команду history, чтобы вы могли быть уверены, что нет такой команды, как rm command > file и других, просто чтобы убедиться, что вы случайно не запустили какую-либо опасную команду. Затем отметьте Шестая последняя команда, Восьмая последняя команда и Десятая последняя команда.

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

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

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

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

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» и использовать его по своему усмотрению. Доступ ко всем аргументам можно получить с помощью «!*».

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

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

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

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

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

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

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

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

Тогда я вдруг понял, что мне нужно перенаправить вывод вышеуказанного скрипта в файл ip.txt, так что же мне делать? Должен ли я снова ввести всю команду и перенаправить вывод в файл? Что ж, простое решение — использовать навигационную клавишу ВВЕРХ и добавить «> ip.txt», чтобы перенаправить вывод в файл как.

Благодаря навигационной клавише Life Savior ВВЕРХ. Теперь рассмотрите приведенное ниже условие, когда я в следующий раз запущу ниже однострочный скрипт.

Как только я запустил скрипт, командная строка bash вернула ошибку с сообщением «bash: ifconfig: команда не найдена». Мне нетрудно было догадаться, что я запускаю эту команду от имени пользователя, а она должна запускаться от имени пользователя root. .

Итак, каково решение? Трудно войти в систему под root, а затем снова ввести всю команду! Также (клавиша навигации ВВЕРХ) в последнем примере здесь не спасла. Так? Нам нужно вызвать «!!» без кавычек, что вызовет последнюю команду для этого пользователя.

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

Я использую !! в основном в следующих сценариях,

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

Ошибка Opps… не волнуйтесь, выполните приведенную ниже команду, чтобы добиться успеха..

Так же, как и для

OOPS Пользователь не авторизован для выполнения такой задачи, поэтому я бегу..

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

! (Логическое НЕ) можно использовать для запуска команды для всех файлов/расширений, за исключением того, что находится за '!' .

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

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

8. Проверить, существует ли каталог (например, /home/avi/Tecmint) или нет? Printf, если указанный каталог существует или нет.

Здесь мы будем использовать '! -d', чтобы проверить, существует ли каталог или нет, за которым следует логический оператор И (&&), чтобы напечатать, что каталог не существует, и логический оператор ИЛИ (||), чтобы напечатать каталог присутствует.

Логика такова, когда вывод [ ! -d /home/avi/Tecmint ] равно 0, он будет выполнять то, что находится за пределами логического ИЛИ, иначе он перейдет к логическому ИЛИ (||) и выполнит то, что находится за пределами логического ИЛИ.

9. Проверить, существует ли каталог или нет? Если нет, выйдите из команды.

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

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

Общая реализация на языке сценариев, в которой, если нужный каталог не существует, он будет создан.

На этом пока все. Если вы знаете или сталкиваетесь с любым другим использованием '!' что стоит знать, вы можете предоставить нам свое предложение в обратной связи. Оставайтесь на связи!

Если вам понравилась эта статья, подпишитесь на уведомления по электронной почте о руководствах по Linux. Если у вас есть вопросы или сомнения? обратитесь за помощью в разделе комментариев.

Если вы цените то, что мы делаем здесь, в TecMint, вам следует подумать о следующем:

TecMint – это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей, доступных всем БЕСПЛАТНО.

Если вам нравится то, что вы читаете, купите нам кофе (или 2) в знак признательности.

Мы благодарны за вашу бесконечную поддержку.

Похожие сообщения

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

Если вы используете BASH, чтобы показать использование ! , то вы должны, по крайней мере, уточнить, что BASH является частью проекта GNU, а не ядра Linux, пожалуйста, не распространяйте заблуждения.

Вы также можете упомянуть !?

Он находит последнюю команду со строковым аргументом. Например, если…
1013 grep tornado /usr/share/dict/words
1014 grep ураган /usr/share/dict/words
1015 wc -l /usr/share/dict/ слова

все в истории, то !?torn снова выполнит поиск торнадо, где !torn будет напрасно искать команду, начинающуюся с torn.

И `wc !?torn?:2` работает, чтобы выбрать второй аргумент из команды, содержащей торнадо, и запустить на нем `wc`.

Уважаемый Эдгар,
Ваше предложение учтено.
Спасибо за отзыв.

Я не увидел в статье упоминания об историческом контексте, поэтому приведу его здесь, в комментариях. Эта форма подстановки команд истории появилась в C Shell (csh), созданной Биллом Джоем для разновидности UNIX в BSD в конце 70-х. Позже он был перенесен в tcsh и bash (Bourne-Again SHell).

Лично я всегда предпочитал механизм подстановки истории оболочки C и никогда не использовал команду fc (с которой я впервые столкнулся в оболочке Korne).

Уважаемый Стивен,
Спасибо за прекрасную информацию. Оставайтесь на связи и держите нас в курсе такого контекста.

4-я команда. Вы можете получить к нему доступ намного проще. На самом деле существуют регулярные выражения:
^ стоит в начале выражения
$ стоит в конце выражения
:number любой числовой параметр

Пример:
touch a.txt b.txt c.txt
echo !^ –> отобразить первый параметр
echo !:1 –> также отобразить первый параметр
echo !:2 --> отобразить второй параметр
echo !:3 --> отобразить третий параметр
echo !$ --> отобразить последний (в нашем случае 3-й) параметр
echo !* --> отобразить все параметры

И мы сделали то же самое

echo «1-й аргумент: !^»
$ echo «2-й аргумент: !cp:2»

echo, за которым следует 1-й аргумент и 2-й аргумент, просто для того, чтобы сделать руководство и команду понятной. Я использовал ‘!^’. ‘!command:number’, как вы предлагаете.

Я хотел бы знать, имеете ли вы в виду что-то другое?

Я думаю, что (5) работает не так, как вы указали, и перенаправление на devnull скрывает это, но ZSh все равно печатает команду.
Когда вы вызываете «! ls…», он всегда выбирает последнюю выполненную вами команду ls, просто добавляет ваши переключатели в конец (после /dev/null).

И нажмите вкладку. Он заменит последний аргумент полным путем и именем файла.

Что касается вашей первой части отзыва: он не выбирает последнюю выполненную команду, и просто чтобы доказать это, мы использовали 4 разных переключателя для одной и той же команды. ($ ! ls $ ! ls -l $ ! ls -la $ ! ls -lA ). Теперь вы можете проверить это, введя ключевые слова в любом порядке, и в каждом случае будет выдан один и тот же результат.

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

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

Что такое $? В Linux?

$? -Статус выхода последней выполненной команды. … Для сценариев оболочки это идентификатор процесса, под которым они выполняются.

Как называется символ в Unix?

Итак, в Unix особого смысла нет. Звездочка — это «подстановочный» символ в оболочках Unix и подстановочный знак для любого количества символов (включая ноль). ? — еще один распространенный подстановочный символ, соответствующий ровно одному любому символу. *.

Что означает %% в bash?

$ Эта форма предназначена для удаления описанного шаблона, пытающегося сопоставить его с конца строки. Оператор «%» попытается удалить самый короткий текст, соответствующий шаблону, а «%%» попытается сделать это с самым длинным текстом, соответствующим шаблону.

Что такое $1 в Linux?

$1 — это первый аргумент командной строки, передаваемый сценарию оболочки.… $0 — имя самого скрипта (script.sh) $1 — первый аргумент (filename1) $2 — второй аргумент (dir1)

Какой смысл в Linux?

Символ или оператор '!' в Linux можно использовать как оператор логического отрицания, а также для извлечения команд из истории с подстройками или для запуска ранее запущенной команды с модификацией.

Вызывается в Linux?

Основы команд Linux

Символ Пояснение
| Это называется «трубопроводом», который представляет собой процесс перенаправления вывода одной команды на ввод другой команды. Очень полезно и распространено в Linux/Unix-подобных системах.
> Возьмите вывод команды и перенаправить его в файл (перезапишет весь файл).

Как мне использовать Linux?

  1. pwd — при первом открытии терминала вы находитесь в домашнем каталоге вашего пользователя. …
  2. ls — используйте команду «ls», чтобы узнать, какие файлы находятся в каталоге, в котором вы находитесь. …
  3. cd — используйте команду «cd», чтобы перейти в каталог. …
  4. mkdir & rmdir — используйте команду mkdir, когда вам нужно создать папку или каталог.

Как написать символ в Linux?

Самый простой и прямой способ написать специальные символы в Linux — запустить средство записи LibreOffice, а затем в меню выбрать «Вставка->Специальный символ…» В появившемся диалоговом окне вы можете выбрать любой возможный символ. Выберите нужный символ (символы) и нажмите кнопку Вставить.

Что такое символ bash?

Специальные символы bash и их значение

Что означает & в bash?

В Bash в командной строке Linux & является управляющим оператором. Это встроенная оболочка, что означает, что она буквально является основной частью набора инструментов Bash. Он встречается в двух основных формах: одиночный амперсанд & и двойной амперсанд &&.

Что такое оболочка $0?

$0 Заменяется на имя оболочки или сценария оболочки. Это устанавливается при инициализации оболочки. Если Bash вызывается с файлом команд (см. Раздел 3.8 [Сценарии оболочки], стр. 39), $0 устанавливается в качестве имени этого файла.

Как узнать свою текущую оболочку?

Как проверить, какую оболочку я использую: используйте следующие команды Linux или Unix: ps -p $$ — надежно отобразить имя текущей оболочки. echo «$SHELL» — вывести оболочку для текущего пользователя, но не обязательно оболочку, запущенную при движении.

Что означает [электронная почта защищена]?

[email protected] почти такой же, как $* , оба означают «все аргументы командной строки». Они часто используются для простой передачи всех аргументов в другую программу (таким образом образуя оболочку вокруг этой другой программы).

Я ищу своего рода "синтаксический ключ" для инструментов командной строки в GNU/Linux, что-то вроде этого документа, который есть у Microsoft:

Например, текст в квадратных скобках используется в документации по синтаксису командной строки Microsoft для обозначения необязательных элементов. Текст в квадратных скобках — это набор обязательных элементов, и вы должны выбрать один из них. И так далее.

Какие символы используются для обозначения синтаксиса командной строки в GNU/Linux и что означает каждый символ?

Этот синтаксический ключ является ключом/условным обозначением для другой документации. Если вам нужен синтаксис оболочки, вы должны прочитать справочную страницу используемой вами оболочки (bash, dash, zsh и т. д.). Для конкретных утилит, опять же, справочные страницы.

@XTian, ​​взгляните на man man и просто прочитайте раздел «краткий обзор» и притворитесь, что вы еще не поняли, что должны означать квадратные скобки и вертикальные черты. Это было бы (и для новичков) совершенно непонятно. Это большой вопрос; Я отредактировал, чтобы сделать суть более понятной.

3 ответа 3

Вот выдержка из справочных страниц man 7 , в которой описываются общепринятые значения разделов на справочных страницах:

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

  • Необязательные элементы заключены в квадратные скобки.
  • Вертикальные полосы разделяют варианты выбора.
  • Многоточие означает, что элемент или элемент может повторяться.

В целом, условные обозначения очень похожи на цитируемый вами документ от Microsoft.

Вот пример синопсиса из справочной страницы для git diff :

Возможных опций так много, что авторы справочной страницы решили не перечислять их все в синопсисе, вместо этого просто указав [опции] .

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

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

(Примечание: коммиты и большие двоичные объекты — это типы объектов, которые можно хранить в Git; большой двоичный объект представляет собой содержимое файла, а фиксация представляет собой состояние всего набора файлов, отслеживаемых Git. Не имеет отношения к вашему вопросу, но я Упоминаю об этом, чтобы избежать загадок по терминологии.)

Другой пример, синопсис команды grep, иллюстрирует другое соглашение: слова, написанные ВСЕМИ ЗАГЛАВНЫМИ БУКВАМИ, иногда используются для обозначения заполнителя (например, угловые скобки на странице руководства git выше).

Здесь снова есть три разных способа вызова команды grep. Из вышеизложенного видно, что:

<р>. означает, что яблоко является шаблоном, а оранжевый и груша — именами файлов.

То же самое можно увидеть в:

<р>. яблоко и апельсин — это узоры, а груша и грейпфрут — это файлы.

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

Однако не существует абсолютных правил для символов синопсиса. Вот синопсис для sed :

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

Читайте также: