Что значит знак доллара в пути к файлу

Обновлено: 02.07.2024

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

вот такая ситуация. Несколько десятков сотрудников факультета в разделе Университет общие каталоги на сервере (Windows Server 2003, SP 2), такие как servernameJones$ , servernameSmith$ и servernameWatson$ . Мой вопрос таков:Почему имена акций добавляются со знаками доллара? это, по-видимому, не является техническим требованием и не отличает эти папки от других папок с аналогичным именем. это стандартный стиль, требование какого-то рода, которое я не смог понять, или что-то, что я должен списать как продукт последнего администратора эксцентричность?

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

$ in SMB/CIFS URI означает, что общий ресурс скрыт и не будет отображаться при просмотре общих папок. Это обычно, но не обязательно, означает, что для доступа к нему требуются права администратора.

Это соглашение также применяется к общим принтерам.

добавление знака доллара ( $ ) в конец имени общего ресурса скроет ресурс из каталога сетевого окружения. Это называется скрытой долей.

добавление знака доллара делает общий ресурс скрытым, поэтому он не будет отображаться, если вы перейдете к компьютеру в Проводнике Windows или используете net view в командной строке.

Если вы хотите поделиться, чтобы показать в этих случаях, не положить на нее$.

в США в конце имени общего ресурса скрытым от людей в интернете.

например, если у вас есть общий ресурс "\computer1\share1$", любой, кто просматривает "\computer1", не увидит этот общий ресурс в списке.

однако, если у вас есть" \computer1\share2 " создан, они смогут увидеть эту долю.

Это единственная разница, которую я знаю.

Они являются "общими ресурсами администратора" и обычно скрыты, если вы просматриваете \компьютер с помощью Проводника windows или большинства других инструментов просмотра.

это скрытая акция. Он не только не отображается, но и не доступен для поиска.

Я знаю, что для доступа к не общим каталогам целевой машины вам нужно сделать что-то вроде \machinename\c$, где c$ представляет диск C:\. Я не уверен, что это так в данном случае.

Члены большинства типов в пространстве имен System.IO имеют параметр path , который позволяет указать абсолютный или относительный путь к ресурсу в файловой системе. Этот путь передается в API файловой системы Windows. В этом разделе рассматриваются форматы путей к файлам, которые можно использовать в операционных системах Windows.

Традиционные пути DOS

Стандартный путь DOS может состоять из трех компонентов:

  • Буква тома или диска, после которой следует разделитель томов ( : ).
  • Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
  • Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.

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

Путь Описание:
C:\Documents\Newsletters\Summer2018.pdf Абсолютный путь к файлу из корня диска C: .
\Program Files\Custom Utilities\StringFinder.exe Абсолютный путь из корня текущего диска.
2018\January.xlsx Относительный путь к файлу в подкаталоге текущего каталога.
..\Publications\TravelBrochure.pdf Относительный путь к файлу в каталоге, который является одноранговым для текущего каталога.
C:\Projects\apilibrary\apilibrary.sln Абсолютный путь к файлу из корня диска C: .
C:Projects\apilibrary\apilibrary.sln Относительный путь из текущего каталога диска C: .

Обратите внимание на различия между двумя последними путями. В обоих случаях задается необязательный описатель тома ( C: ), однако первый путь, в отличие от второго, начинается с корня указанного тома. В результате первый путь является абсолютным из корневого каталога диска C: , тогда как второй — относительным из текущего каталога C: . Использование второй формы пути в тех случаях, когда предполагается наличие первой, является распространенным источником ошибок, связанных с путями к файлам в Windows.

Чтобы определить, является ли путь к файлу полным (такой путь не зависит от текущего каталога и не изменяется при смене текущего каталога), можно вызвать метод Path.IsPathFullyQualified. Обратите внимание, что такой путь может включать сегменты с относительным путем к каталогу ( . и .. ), но при этом по-прежнему будет полным, если разрешенный путь всегда указывает на одно и то же место.

В приведенном ниже примере показано различие между абсолютными и относительными путями. Предполагается, что каталог D:\FY2018\ существует и вы не установили какой-либо текущий каталог для диска D:\ из командной строки перед запуском этого примера.

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

UNC-пути

UNC-пути (универсальное соглашение об именовании) используются для доступа к сетевым ресурсам и имеют следующий формат:

  • Имя сервера или узла, которому предшествуют символы \\ . В качестве имени сервера может выступать имя компьютера NetBIOS, а также IP-адрес или полное доменное имя (поддерживаются адреса IPv4 и IPv6).
  • Имя общего ресурса, которое отделяется от имени узла символами \ . Имя сервера и имя общего ресурса в совокупности образуют том.
  • Имя каталога. Символ разделителя каталогов служит для разделения подкаталогов во внутренней иерархии каталога.
  • Необязательное имя файла. Символ разделителя каталогов служит для разделения пути к файлу и его имени.

Ниже приводятся некоторые примеры UNC-путей:

Path Описание
\\system07\C$\ Корневой каталог диска C: на компьютере system07 .
\\Server2\Share\Test\Foo.txt Файл Foo.txt в тестовом каталоге тома \\Server2\Share .

UNC-пути всегда должны быть полными. Они могут включать сегменты с относительным путем к каталогу ( . и .. ), однако они должны быть частью полного пути. Использовать относительные пути можно только посредством сопоставления UNC-пути с буквой диска.

Пути к устройствам DOS

В операционной системе Windows используется унифицированная объектная модель, которая указывает на все ресурсы, включая файлы. Эти пути к объектам доступны из окна консоли и предоставляются на уровень Win32 с использованием специальной папки с символьными ссылками, с которыми сопоставляются устаревшие пути DOS и UNC. Доступ к этой специальной папке осуществляется с использованием синтаксиса пути к устройству DOS, который может иметь одну из приведенных ниже форм:

Помимо использования буквы диска, вы можете указать том с помощью его GUID. Синтаксис будет иметь вид:

Путь к устройству DOS состоит из следующих компонентов:

Описатель пути к устройству ( \\.\ или \\?\ ), который идентифицирует путь как путь к устройству DOS.

Символьная ссылка на "реальный" объект устройства (C: в случае имени диска или Volume в случае GUID тома).

Первый сегмент пути к устройству DOS после описателя пути к устройству идентифицирует том или диск. (Например, \\?\C:\ и \\.\BootPartition\ .)

Для UNC-путей существует специальная ссылка, которая называется UNC . Пример:

Для UNC-путей к устройствам часть сервера или общего сетевого ресурса образует том. Например, в пути \\?\server1\e:\utilities\\filecomparer\ часть server1\utilities представляет сервер или общий сетевой ресурс. Это важно при вызове такого метода, как Path.GetFullPath(String, String) с сегментами с относительным путем к каталогу, поскольку переход дальше тома невозможен.

Пути к устройствами DOS по определению являются полными. Сегменты с относительным путем к каталогу ( . и .. ) в них не допускаются. Они никогда не задаются относительно текущего каталога.

Пример. Способы задать ссылку на один и тот же файл

В следующем примере демонстрируются некоторые способы задать ссылку на файл с использованием API в пространстве имен System.IO. В этом примере создается экземпляр объекта FileInfo и используются его свойства Name и Length, чтобы отобразить имя и длину файла.

Нормализация путей

Практически все передаваемые в API Windows пути нормализуются. При нормализации в Windows выполняются следующие действия:

  • Идентифицируется путь.
  • Текущий каталог применяется к неполным (относительным) путям.
  • Выполняется канонизация разделителей каталогов.
  • Вычисляются относительные компоненты каталога ( . для текущего и .. для родительского каталога).
  • Удаляются некоторые символы.

Нормализация осуществляется неявно, но при необходимости вы можете выполнить ее явно, вызвав метод Path.GetFullPath, который создает оболочку для вызова функции GetFullPathName(). Также можно вызвать функцию GetFullPathName() Windows напрямую с помощью P/Invoke.

Идентификация пути

На первом шаге процесса нормализации осуществляется идентификация типа пути. Пути могут относиться к одной из нескольких категорий:

  • Пути к устройствам: начинаются с двух разделителей и знака вопроса или точки ( \\? или \\. ).
  • UNC-пути: начинаются с двух разделителей без знака вопроса или точки.
  • Полные пути DOS: начинаются с буквы диска, разделителя томов и компонентов ( C:\ ).
  • Пути к устаревшим устройствам ( CON , LPT1 ).
  • Пути относительно корня текущего диска: начинаются с одного разделителя компонентов ( \ ).
  • Пути относительно текущего каталога указанного диска: начинаются с буквы диска и разделителя томов, но не содержат разделителя компонентов ( C: ).
  • Пути относительно текущего каталога: начинаются с любых других символов ( temp\testfile.txt ).

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

Работа с устаревшими устройствами

Если путь указывает на устаревшее устройство DOS, например CON , COM1 или LPT1 , он преобразуется в путь к устройству путем добавления перед ним последовательности \\.\ и возвращается в таком виде.

Путь, который начинается с имени устаревшего устройства, всегда интерпретируется как путь к устаревшему устройству с помощью метода Path.GetFullPath(String). Например, путь к устройству DOS CON.TXT будет выглядеть как \\.\CON , а путь к устройству DOS COM1.TXT\file1.txt будет выглядеть как \\.\COM1 .

Применение текущего каталога

Если путь не является полным, система Windows применяет к нему текущий каталог. К UNC-путям и путям к устройствам текущий каталог не применяется. Также текущий каталог не применяется к полным путям к диску с разделителем C:\ .

Если путь начинается с одного разделителя компонентов, применяется диск текущего каталога. Например, для пути к файлу \utilities и текущего каталога C:\temp\ в результате нормализации будет получен путь C:\utilities .

Если путь начинается с буквы диска, разделителя томов и не содержит разделителя компонентов, применяется последний текущий каталог, установленный из командной оболочки. Если последний текущий каталог не был установлен, применяется диск сам по себе. Например, для пути D:sources , текущего каталога C:\Documents\ и последнего текущего каталога D:\sources\ на диске D: в результате будет получен путь D:\sources\sources . Пути, задаваемые относительно диска, являются распространенными источниками ошибок программ и логики скрипта. Предположение, что путь, начинающийся с буквы и двоеточия, не является относительным, очевидно неверно.

Если путь не начинается с разделителя, применяются текущий диск и текущий каталог. Например, для пути к файлу filecompare и текущего каталога C:\utilities\ в результате будет получен путь C:\utilities\filecompare\ .

Канонизация разделителей

Все символы косой черты ( / ) преобразуются в стандартные разделители Windows, то есть символы обратной косой черты ( \ ). Если они присутствуют, последовательность символов косой черты после первых двух таких символов свертывается в один символ косой черты.

Вычисление относительных компонентов

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

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

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

Родительские каталоги удаляются только в том случае, если они не находятся после корня пути. Корень пути зависит от его типа. Это будет диск ( C:\ ) для путей DOS, сервер или общий сетевой ресурс для UNC-путей ( \\Server\Share ) и префикс пути к устройству для путей к устройствам ( \\?\ или \\.\ ).

Удаление знаков

Помимо удаленных ранее разделителей и относительных сегментов во время нормализации также удаляются некоторые дополнительные знаки:

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

Если путь не заканчивается разделителем, удаляются все конечные точки и пробелы (U+0020). Если последний сегмент содержит только одну или две точки, к нему применяется приведенное выше правило для относительных компонентов.

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

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

Пропуск нормализации

Как правило, любой путь, передаваемый в API Windows передается в функцию GetFullPathName и нормализуется. Существует одно важное исключение: путь к устройству, который начинается со знака вопроса, а не с точки. Если путь не начинается с последовательности \\?\ (обратите внимание на использование канонической формы с обратной косой чертой), он нормализуется.

Зачем нужно пропускать нормализацию? Существует три основных причины:

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

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

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

Пути, начинающиеся с последовательности \\?\ , по-прежнему нормализуются, если явно передать их в функцию GetFullPathName.

Вы можете передавать пути длиной более MAX_PATH символов в функцию GetFullPathName без \\?\ . Она поддерживает пути произвольной длины, которая ограничивается лишь максимальным размером строки, поддерживаемым в Windows.

Регистр символов и файловая система Windows

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

Xuxicheta

1. в Linux нет команд. Linux это ядро.
2. команд начинающихся с $ тоже нет.
3. какое оформите приглашение ко вводу в bash/sh/zsh/%whatever_shell% такое и будет. По умолчанию $ - обычноюзер.
4. в скриптах $ перед словом так же обозначает чтение переменной а так же
$<> Parameter expansion
$() Command substitution

" в Linux нет команд. Linux это ядро."
"Что означает на Linux скрипте перед командой символ $?"

А Linux скрипт это обычно относится к башу. Не стоит настолько придираться к вопросам, а то можно придраться и к ответам =)

Saboteur, Вопрос так сформулирован, что нельзя быть на 100% уверенным в том, о чём спрашивает ТС. Поэтому тут столь разные ответы на вопрос.

hint000

Добавлю две копейки.
В Windows перед командой видели символ > ? Вот это то же самое. Означает, что командный интерпретатор ждёт ввода команды. Называется "приглашение".
Когда на разных сайтах приводят примеры команд, то некоторые авторы оставляют в примерах это приглашение, просто для наглядности (чтобы отличать команду от того, что она выводит на экран). Это не значит, что приглашение является частью команды, нет. Подчёркиваю: в примерах - только для наглядности. Когда вы реально работаете в командной строке, то приглашение тоже выводится для наглядности, для удобства, чтобы вам было легче ориентироваться в куче строк.

FanatPHP

а ты не думал о том чтобы привести пример этого "скрипта", чтобы все поняли наконец, о чем ты тут лопочешь? FanatPHP, например при использовании значении переменной например good=bad далее выполнив команду echo $good

Zoominger

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

Xuxicheta

Переменная PS1 собственно и содержит строку приглашения, которая содержит обычно имя юзера, имя хоста, текущая директория и этот символ.

FanatPHP

В общем я добился от автора объяснения, что ему нужно

например при использовании значении переменной например good=bad далее выполнив команду echo $good

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

Объяснение очень простое.
Поскольку в баше ОЧЕНЬ нестрогий синтаксис, и любой текст воспринимается как строка без всяких кавычек, то нужен способ отличить переменную от просто строки. Если ты напишешь

то как система поймет, ЧТО ты хочешь вывести - строку good или переменную good?
поэтому тут без вариантов - переменную надо как-то отличать от остального текста. Это и делает знак доллара

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

Linux точка

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

Полная Остановка как Метасимвол (.)

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

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

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

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

Команда ps выводит список всех запущенных процессов на вашем компьютере. Команда grep принимает строки ввода и ищет шаблон.

Linux точка

Команда ps -ef возвращает список запущенных процессов. Метасимвол pipe ( | ) отправляет этот список в команду grep, которая ищет любую строку в списке, содержащую f..efox , где точки относятся к двум любым символам.

Если Firefox запущен, вы получите совпадение. Аналогично, если запущена программа с именем fonefox или freefox, они также возвращаются.

Если вам нужно искать только один символ, вместо метасимвола с точкой (.), Используйте? метасимволом. Используя ? Метасимвол относится к любому отдельному символу либо в начале, либо в конце шаблона.

Звездочка как метасимвол (*)

Звездочка ( * ) является общеизвестным метасимволом. Это означает ноль или более любого символа при поиске шаблона. Например:

Список звездочек в Linux

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

Это немного отличается, потому что звездочка означает ноль или более, поэтому, помимо поиска Firefox, Facefox и Fonefox, она также находит Flutefox, Ferretfox и Fefox.

Символ звездочки в Linux

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

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

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

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

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

Персонаж в каратах

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

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

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

В этом списке перечислены все файлы, заканчивающиеся на png.

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

Linux знак доллара

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

Спасающиеся метасимволы (\\)

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

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

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

Linux escape-персонаж

Чтобы вернуть только f.refox, экранируйте точку полной остановки, чтобы фактически означать точку полной остановки следующим образом:

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

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

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

Символ скобки Linux

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

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

Метасимвол Акцента Могила

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

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

Символ обратной черты в Linux

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

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