Что это тильда linux

Что это тильда linux

Когда оболочка получает какую-то командную строку на выполнение, она до начала выполнения команды осуществляет «грамматический разбор» полученной командной строки. Одним из этапов такого «разбора» является раскрытие или подстановка выражений (expansion). В bash имеется семь типов подстановки выражений:

  • раскрытие скобок (brace expansion) ;
  • замена знака тильды (tilde expansion) ;
  • подстановка параметров и переменных ;
  • подстановка команд ;
  • арифметические подстановки (выполняемые слева направо) ;
  • разделение слов (word splitting) ;
  • раскрытие шаблонов имен файлов и каталогов (pathname expansion).

Все эти операции выполняются именно в том порядке, как они здесь перечислены. Рассмотрим их последовательно.

5.7.1 Раскрытие скобок

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

[user]$ mkdir /usr/local/src/bash/

В первом случае в каталоге /usr/local/src/bash/ будут созданы подкаталоги old , new , dist и bugs . Во втором случае владелец будет изменен у файлов

То есть для каждой пары скобок генерируются несколько отдельных строк (их число равно числу слов, стоящих внутри скобок) путем приписывания к каждому слову из скобок (спереди) того, что стоит перед скобкой, и приписывания в конец каждого полученного слова того, что стоит после скобки. Еще один пример: строка ae при раскрытии скобок превращается в три слова «ade ace abe».

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

5.7.2 Замена тильды (Tilde Expansion)

Если слово начинается с символа тильды (‘

‘), все символы до первого слэша (или все символы, если слэша нет) трактуются как имя пользователя (login name).

Если это имя есть пустая строка (т. е. вслед за тильдой идет сразу слэш), то тильда заменяется на значение переменной HOME. Если значение переменной HOME не задано, тильда заменяется на полный путь к домашнему каталогу пользователя, запустившего оболочку.

Если вслед за знаком тильды (до слэша) стоит слово, совпадающее с именем одного из легальных пользователей, тильда и имя пользователя заменяются полным именем домашнего каталога этого пользователя. Если слово, следующее за тильдой, не является именем пользователя (и не пусто), то оно остается неизменным.

Если вслед за знаком тильды стоит ‘ + ’ , эти два знака заменяются на полное имя текущего каталога (т. е. значение переменной PWD). Если за знаком тильды следует ‘ — ‘ , подставляется значение переменой OLDPWD.

5.7.3 Подстановка параметров и переменных

Символ $ используется для обозначения операций подстановки параметров, подстановки команд и подстановок арифметических выражений. Выражение или имя, следующее за $ , может быть заключено в скобки; что не обязательно, но удобно, так как позволяет отделить заменяемое выражение от следующих за ним слов или символов. Таким образом, чтобы в командной строке вызвать значение параметра (в частности, любой переменной), нужно вставить выражение вида $ .

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

Все значения переменных подвергаются подстановке знака тильды, раскрытию параметров и переменных, подстановке команд, подстановкам арифметических выражений, а также удалению специальных символов цитирования (см. ниже). Разделение слов не производится, за исключением случая «$@» (объяснение см. выше в табл. 5.3). Раскрытие шаблонов имен файлов и каталогов не производится.

5.7.4 Подстановка команд

Подстановка команд является очень мощным инструментов bash . Она заключается в замене имени команды на результат ее выполнения. Существует две формы подстановки команд:

Читайте также:  Windows не находит драйверы canon

$(command) и `command`

Если применяется вторая из этих форм, то обратный слэш внутри кавычек трактуется как литерал, кроме тех случаев, когда за ним следует $, `, или \. Если же используется форма $(command), все символы внутри скобок составляют команду и ни один из них не считается специальным символом.

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

5.7.5 Арифметичекие подстановки (Arithmetic Expansion)

Арифметические подстановки позволяют вычислить значение арифметического выражения и подставить вместо него результат. Существует две формы задания арифметических подстановок:

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

Синтаксис выражения expression подобен синтаксису арифметических выражений в языке C, подробнее об этом можно прочитать в разделе ARITHMETIC EVALUATION man-страницы по каманде bash . Например, команда

[user]$ echo $(( 2 + 3 * 5 ))

в качестве результата выдает «17».

Если выражение некорректно, bash выдает сообщение об ошибке.

5.7.6 Разделение слов (word splitting)

После завершения подстановок параметров, команд и арифметических выражений оболочка снова анализирует командную строку (в том виде, который она приобрела к этому моменту) и осуществляет разделение слов (word splitting).

Эта операция заключается в том, что в командной строке ищутся все вхождения символов-разделителей, определенных в переменой IFS, и в соответствующих местах строки разделяются на отдельные слова. Если значение IFS равно пустой строке, разделение слов не производится.

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

5.7.7 Раскрытие шаблонов имен файлов и каталогов (Pathname Expansion)

Подстановки имен путей и файлов (Pathname expansion) используются для того, чтобы с помощью краткого образца или шаблона указать несколько имен файлов (или каталогов), соответствующих данному шаблону. После разделения слов, если не была задана опция -f, bash производит поиск в каждом слове командной строки символов *, ?, and [. Если будет найдено слово с одним или несколькими вхождениями таких символов, то это слово рассматривается как шаблон, который должен быть заменен словами из лексикографически упорядоченного списка имен путей, соответствующих данному шаблону. Если имен, соответствующих шаблону, не найдено, и переменная nullglob не задана, слово не изменяется. Если эта переменная установлена, а путей, соответствующих шаблону не найдено, слово удаляется из командной строки.

Специальные символы шаблонов имеют следующее значение.

Таблица 5.4. Символы шаблонов

Соответствует произвольной строке символов, включая пустую строку. Например, my*.txt будет заменено на myday.txt, myweek.txt и mymonth.txt (если такие файлы существуют), а *.jpg соответствует всем файлам с расширением jpg в указанном каталоге

Соответствует любому одиночному символу. Например, вместо шаблона file?.txt будут подставлены имена file1.txt и filex.txt, но не file10.txt

Соответствует любому символу из числа символов, указанных в скобках. Пары символов, разделенные знаком минуса, обозначают интервал; любой символ стоящий лексически между этими двумя символами, включая и символы, задающие интервал, соответствует шаблону. Если первым символом внутри скобок является ! или ^, то считается, что шаблону (в данной позиции) соответствуют все символы, не указанные в скобках

Шаблоны имен файлов очень часто применяются в командных строках, содержащих команду ls . Представьте себе, что вы хотите просмотреть информацию о содержимом каталога, в котором находится огромное количество разных файлов различных форматов, например, файлов с изображениями форматов gif, jpeg, avi и т. д.. Чтобы получить только список файлов формата jpeg, вы можете использовать команду

Если в каталоге имеется множество файлов, имена которых представлены четырехзначными номерами, то следующей командой можно вывести только список файлов с номерами от 0200 до 0499:

5.7.8 Удаление специальных символов

После того, как все подстановки в командной строке сделаны, из нее еще удаляются все вхождения символов \ , ` и » , которые служили для отмены специального значения других символов.

Источник

Значение тильды в Linux bash (не домашний каталог)

Во-первых, я знаю, что

/ это домашний каталог. Компакт-диск

/ переносит меня в домашний каталог.

X переносит меня в особое место, где X вроде бы что угодно.

В bash, если я нажимаю » cd

» и нажимаю вкладку, появляется множество возможных

X вариантов, таких как

ssh . Переход к этим папкам и выполнение операций pwd показывает мне, что этих папок нет в домашнем каталоге; они повсюду.

Читайте также:  Встроенный антивирус windows 10 или аваст что лучше

Это не псевдонимы. Я проверил. Они не являются env. переменными, иначе они потребовали бы $ .

Что устанавливает эти ссылки и где я могу найти, где они устанавливаются?

X просто возвращает литерал «

возвращает $ HOME, а

+ возвращает $ PWD — они не являются специальными, за исключением того, что они выбирают переменные оболочки. т.е. они не хранят значения и не выполняют команду для их поиска. Они уже определены. Вы пробовали

-? Я не могу придумать, как ему использовать, но опять же, он возвращает переменную оболочки $ OLDPWD

Это функция Bash, которая называется « тильда». ». Это функция оболочки, а не ОС. Например, вы получите другое поведение с csh.

Чтобы ответить на ваш вопрос о том, откуда берется информация: ваш домашний каталог берется из переменной $HOME (независимо от того, что вы там храните), в то время как дома других пользователей извлекаются в реальном времени с использованием getpwent() . Эта функция обычно контролируется NSS ; поэтому по умолчанию значения извлекаются /etc/passwd , хотя его можно настроить для получения информации из любого желаемого источника, такого как NIS, LDAP или база данных SQL.

Расширение тильды — это больше, чем поиск в домашнем каталоге. Вот краткое изложение:

-1 и т.д., используются вместе с pushd и popd .

+ примерно то же самое, что. Однако, чтобы использовать что-то вроде ./file, он должен перейти в файловую систему и выяснить, где. находится — проходит несколько циклов. Использование

+ сохраняет его работу, просто возвращая содержимое переменной оболочки $ PWD, которая уже определена при просмотре файловой системы.

Это домашние каталоги пользователей. Попробуйте cd

(your username) , например.

Это домашние каталоги пользователей /etc/passwd ? Такие службы, как postgres, sendmail, apache и т. Д., Создают пользователей системы, у которых есть домашние каталоги, как и у обычных пользователей.

имя пользователя — это домашний каталог указанного пользователя

Это пользователи. Проверьте свой /etc/passwd .

username перенесет вас в домашний каталог этого пользователя.

На моей машине, из-за того, как я все настроил, делаю:

Первый обращает внимание на значение переменной окружения $HOME ; Я намеренно установил $HOME локальную файловую систему, а не файловую систему, смонтированную по NFS. Второй читает из файла паролей (примерно; NIS немного усложняет ситуацию) и обнаруживает, что в файле паролей указано, что мой домашний каталог находится, /u/jleffler и переходит в этот каталог.

Раздражает то, что большая часть программного обеспечения ведет себя так, как указано выше (и спецификация POSIX для оболочки требует такого поведения). Я использую некоторое программное обеспечение (и у меня нет особого выбора), которое обрабатывает информацию из файла паролей как текущее значение $ HOME, что неверно.

Применяя это к вопросу — как указывали другие, ‘ cd

x ‘ переходит в домашний каталог пользователя ‘x’ и, в более общем смысле, всякий раз, когда выполняется расширение тильды,

x означает домашний каталог пользователя ‘x’ (и это ошибка если пользователь ‘x’ не существует).

Возможно, стоит упомянуть следующее:

Я не могу сразу найти применение для ‘

+ ‘, если только вы не сделаете какие-то странные вещи с перемещением символических ссылок по пути, ведущему к текущему каталогу.

Источник

Основы работы в командной строке Linux

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

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

Запуск эмулятора терминала в Ubuntu

Сделаю небольшое отступление и скажу как запустить эмулятор терминала gnome-terminal в Ubuntu. Для этого нужно выбрать в меню Приложения->Стандартные->Терминал . Тем самым, вы запустите эмулятор терминала для рабочего стола Gnome ( gnome-terminal ), попросту говоря, «командную строку», если вам так угодно 🙂 В нем вы можете вводить команды Linux, о которых и пойдет речь ниже.

Читайте также:  Графические драйвера для windows 10 pro

Приглашение к вводу команды

Приглашение к вводу команды в эмуляторе терминала имеет следующий формат:

Здесь — это имя, которое вы использовали для входа в систему и под которым вы сейчас работаете. Затем идет значок @, за ним имя локальной системы, далее двоеточие и имя текущего каталога, в котором вы в данный момент находитесь.

В эмуляторе gnome-terminal при запуске терминала в качестве каталога используется значок тильда

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

В конце приглашения выводится знак доллара $ .

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

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

ls — вывод имен файлов

Утилита ls предназначена, для вывода списка файлов и каталогов в текущем каталоге. Рассмотрим некоторые полезные свойства команды ls .

-A — включить в список «скрытые» файлы («скрытые» файлы в Linux имеют в своем названии точку в начале имени файла, например, .gtkrc-2.0). -S — отсортировать файлы по размеру. -t — отсортировать по дате изменения. -1 — выводить имена в столбик, по одному на каждой строке. -l — вывести подробную информацию о каждом файле, размер файла, владелец файла, права доступа, дата изменения.

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

Теперь выполним команду с опциями -A , -S , -1 . В результате получим список всех файлов, включая «скрытые», расположенных по одному на каждой строке и отсортированных по размеру.

Выполним команду ls с опцией -l . Получим подробную информацию о каждом файле.

mkdir — создание каталога

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

cp — копирование файла

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

При использовании cp есть один нюанс, который нужно обязательно помнить. Если файл назначения уже существует, то cp перезапишет его. Поэтому, чтобы избежать случайного уничтожения существующего файла, нужно использовать команду cp с опцией -i . Перед перезаписью файла будет выдан запрос на ваше согласие. Например, если мы копируем файл linux.jpg в файл windows.jpg и windows.jpg уже существует, то будет выдан запрос на перезапись файла:

Опция -r (или -R ) используется для копирования одной директории в другую.

mv — перемещение, переименование файла

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

rm — удаление файла

Команда rm предназначена для удаления файлов. Основные опции команды:

-i — выводить запрос перед удалением каждого файла. -r (или -R) — удалить директории и их содержимое.

cd — смена текущего каталога

Команда cd предназначена для смены каталога, в котором вы сейчас находитесь. Например, вы сейчас находитесь в своем домашнем каталоге

и хотите перейти в каталог

/information , тогда нужно просто выполнить команду cd information .

Если выполнить команду cd без параметров, то вы перейдете в свой домашний каталог

Чтобы перейти в каталог на уровень выше (в родительский каталог) можно использовать синоним «две точки» — .. , которые в Linux служат синонимом пути родительского каталога. Например, находясь в каталоге

/information мы можем перейти в каталог

cat — вывод содержимого файла

Утилита cat выводит содержимое текстового файла. Простейший синтаксис команды cat . Утилита cat может использоваться для соединения конкатенации двух текстовых файлов, собственно от этого и происходит название утилиты (catenation, concatenation). Например, у нас есть два файла download и ubuntu и в каждом по две строки. Сначала мы выведем содержимое файлов по отдельности, а затем сделаем конкатенацию двух файлов.

pwd — вывод полного пути текущего каталога

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

man — получение руководства

Системная утилита man выводит страницы системной документации. С ее помощью можно получить информацию по любым командам Linux. Для этого используется синтаксис man . Например, чтобы вывести руководство по утилите ls , используйте команду man ls .

Источник

Оцените статью