Исправление.zshrc в ~/.zshrc

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

Если ваша установка Windows 10 изначально была «обновлением Fall Creators» или более поздней версией, в ней по умолчанию отключена сторона клиента SMBv1 -. Это было мотивировано эпидемией программы-вымогателя WannaCry, которая использовала критическую уязвимость в протоколе SMBv1.

Если ваш файловый сервер Linux (неуказанного дистрибутива и версии? )не обновлялся с помощью исправлений или имеет конфигурацию по умолчанию, отличную от -, которая не пересматривалась в течение длительного времени, возможно, он все еще имеет настройку server max protocolв своем файле smb.confdefaulting/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 не заблокированы как на стороне клиента, так и на стороне сервера.

4
12.06.2021, 04:05
3 ответа

Предположительно, вы используете zsh в качестве оболочки, которая имеет функцию «глобального псевдонима», которая позволяет вам это делать:

% alias -g.zshrc='~/.zshrc'
% echo.zshrc
/home/mwh/.zshrc

То есть в любом месте , где слово .zshrcвстречается в командной строке, оно заменяется на ~/.zshrc, которое затем, как обычно, подвергается расширению с помощью тильды. Это должно быть собственное «слово» оболочки, поэтому оно не будет расширено, если это всего лишь подстрока более длинного имени. Это работает с любой командой.

Глобальные псевдонимы печально известны своей проблемой, потому что они действительно раскрываются где угодно, молча, и поэтому вы можете, например, запустить rm.zshrcв другом каталоге, и он нацелится на ваши собственные файлы точек. Они также применяются внутри функций оболочки, даже если они уже определены. В этом случае кажется относительно маловероятным, что это вызовет проблему, но имейте в виду, что это может произойти. Вы можете специально назвать файл в текущем каталоге с помощью ./.zshrcили получить буквальную строку с помощью \.zshrcили заключив ее в кавычки.

5
28.07.2021, 11:25

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

Если на самом деле вы имеете в виду «как я могу создать псевдоним, который позволит мне редактировать мой ~/.zshrcнезависимо от моего текущего рабочего каталога?» тогда ответ просто:

alias zshconfig="vim ~/.zshrc" 

Этот пример взят из моего собственного ~/.zshrcи я часто его использую.

Еще лучший вариант, предложенный @mateen -ulhaq в комментариях ниже, будет:

alias zshrc="vim ~/.zshrc" 

Другими словами, не пытайтесь использовать псевдоним имени файла или пути к имени файла. Обе эти вещи возможны,но может создать непредсказуемые побочные -эффекты, которые вызовут у вас проблемы позже, как указал @michael -homer .

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

Однако в более общем плане мой совет заключается в том, что вам не следует беспокоиться об оптимизации последовательности из двух -символов ~/, вместо этого вы должны привыкнуть к ее вводу. Давай... вытяни левый мизинец, как будто ты Эдди Ван Хален, играющий гаммы. (Это поможет вам освоить vim, пока вы этим занимаетесь, так как вам, вероятно, следует привыкнуть нажимать клавишу Escэтим мизинцем!)

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

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

12
28.07.2021, 11:25

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

function vim {
  if [[ $# -eq 1 && $1 ==.zshrc && ! -e.zshrc ]]; then
    set -- ~/.zshrc
  fi
  command vim "$@"
}

Объяснение :при запуске vimбудет вызвана функция. В последней строке command vim …вызывает внешнюю команду, а "$@"передает ей аргументы, переданные функции. Между ними, если имеется ровно один аргумент, и этот аргумент является точной строкой .zshrcи в текущем каталоге нет файла с именем .zshrc, командная строка заменяется на ~/.zshrc. Настройте эти условия, если они не совсем то, что вам нужно.

6
28.07.2021, 11:25

Теги

Похожие вопросы