Существует несколько возможных причин, в зависимости от особенностей вашей среды.
Если ваша установка Windows 10 изначально была «обновлением Fall Creators» или более поздней версией, в ней по умолчанию отключена сторона клиента SMBv1 -. Это было мотивировано эпидемией программы-вымогателя WannaCry, которая использовала критическую уязвимость в протоколе SMBv1.
Если ваш файловый сервер Linux (неуказанного дистрибутива и версии? )не обновлялся с помощью исправлений или имеет конфигурацию по умолчанию, отличную от -, которая не пересматривалась в течение длительного времени, возможно, он все еще имеет настройку server max protocol
в своем файле smb.conf
defaulting/set на NT1
, что означает SMBv1. Из-за упомянутой выше уязвимости -вы должны избавиться от SMBv1 где-то в прошлом году или около того.
Все дистрибутивы Linux уровня предприятия -уже давно опубликовали обновления, позволяющие использовать SMBv2 и/или SMBv3 в любых поддерживаемых версиях дистрибутивов. Поэтому, если сервер в остальном обновлен, нужно просто убедиться, что в вашем файле smb.conf
нет глупой настройки server max protocol
, и изменить настройку на server max protocol = SMB3_02
или лучше, если она есть.
SMBv1 давно планировалось в конечном итоге удалить, и обнаружение этой уязвимости, во всяком случае, ускорило график удаления.
Если в сетевой среде вашего офиса используется Active Directory, то для обнаружения сетевых расположений, скорее всего, используется AD, и проблема может заключаться в том, что файловому серверу Linux не удается зарегистрировать соответствующие записи DNS в домене AD.
Если Active Directory отсутствует, обнаружение сетевых расположений возвращается к старому стилю NetBIOS, который может использовать WINS-сервер (это просто дополнительная роль на одном или нескольких хостах вашего сервера )или может полагаться только на широковещательные передачи с каждого сервера. В этом случае вам необходимо убедиться, что порты 137/UDP и 138/UDP не заблокированы как на стороне клиента, так и на стороне сервера.
Предположительно, вы используете zsh в качестве оболочки, которая имеет функцию «глобального псевдонима», которая позволяет вам это делать:
% alias -g.zshrc='~/.zshrc'
% echo.zshrc
/home/mwh/.zshrc
То есть в любом месте , где слово .zshrc
встречается в командной строке, оно заменяется на ~/.zshrc
, которое затем, как обычно, подвергается расширению с помощью тильды. Это должно быть собственное «слово» оболочки, поэтому оно не будет расширено, если это всего лишь подстрока более длинного имени. Это работает с любой командой.
Глобальные псевдонимы печально известны своей проблемой, потому что они действительно раскрываются где угодно, молча, и поэтому вы можете, например, запустить rm.zshrc
в другом каталоге, и он нацелится на ваши собственные файлы точек. Они также применяются внутри функций оболочки, даже если они уже определены. В этом случае кажется относительно маловероятным, что это вызовет проблему, но имейте в виду, что это может произойти. Вы можете специально назвать файл в текущем каталоге с помощью ./.zshrc
или получить буквальную строку с помощью \.zshrc
или заключив ее в кавычки.
Ответ намного проще, чем вы думаете, потому что вы задаете неправильный вопрос.
Если на самом деле вы имеете в виду «как я могу создать псевдоним, который позволит мне редактировать мой ~/.zshrc
независимо от моего текущего рабочего каталога?» тогда ответ просто:
alias zshconfig="vim ~/.zshrc"
Этот пример взят из моего собственного ~/.zshrc
и я часто его использую.
Еще лучший вариант, предложенный @mateen -ulhaq в комментариях ниже, будет:
alias zshrc="vim ~/.zshrc"
Другими словами, не пытайтесь использовать псевдоним имени файла или пути к имени файла. Обе эти вещи возможны,но может создать непредсказуемые побочные -эффекты, которые вызовут у вас проблемы позже, как указал @michael -homer .
Но так как вы знаете, что предпочтительным $EDITOR
является vim
, просто псевдоним vim
вызова этого конкретного файла, и вы должны быть в деле. (Гораздо безопаснее связать конкретную комбинацию команд и аргументов с необычной строкой, которая с меньшей вероятностью будет использоваться вне контекста.)
Однако в более общем плане мой совет заключается в том, что вам не следует беспокоиться об оптимизации последовательности из двух -символов ~/
, вместо этого вы должны привыкнуть к ее вводу. Давай... вытяни левый мизинец, как будто ты Эдди Ван Хален, играющий гаммы. (Это поможет вам освоить vim
, пока вы этим занимаетесь, так как вам, вероятно, следует привыкнуть нажимать клавишу Esc
этим мизинцем!)
По мере того, как ваши навыки набора текста будут улучшаться, вы приобретете мышечную память для последовательности ~/
, что поможет вам надежно набирать эту последовательность символов при обращении к файлам в вашем домашнем каталоге. Вы намеренно наберете его быстро, и вы не наберете его случайно.
Недостатком использования псевдонимов является то, что независимо от того, насколько они могут ускорить вашу работу на домашнем компьютере, они замедлят работу, когда вам нужно ssh
зайти в какой-нибудь удаленный контейнер Docker в частной подсети клиента и найти все ваши псевдонимы исчезли.
Не вижу в этом смысла, но да. То, что вы делаете, сложнее, чем просто дать команде другое имя или некоторые аргументы по умолчанию, поэтому вам нужна функция, а не псевдоним.
function vim {
if [[ $# -eq 1 && $1 ==.zshrc && ! -e.zshrc ]]; then
set -- ~/.zshrc
fi
command vim "$@"
}
Объяснение :при запуске vim
будет вызвана функция. В последней строке command vim …
вызывает внешнюю команду, а "$@"
передает ей аргументы, переданные функции. Между ними, если имеется ровно один аргумент, и этот аргумент является точной строкой .zshrc
и в текущем каталоге нет файла с именем .zshrc
, командная строка заменяется на ~/.zshrc
. Настройте эти условия, если они не совсем то, что вам нужно.