Введение
Windows 2000 и выше поддерживает символьные ссылки на каталоги, где каталог служит символической ссылкой на другой каталог на компьютере. Например, если каталог D: \ SYMLINK указал C: \ WINNT \ SYSTEM32 в качестве своей цели, то приложение, обращающееся к D: \ SYMLINK \ DRIVERS, в действительности получило бы доступ к C: \ WINNT \ SYSTEM32 \ DRIVERS. Символические ссылки на каталоги называются переходами NTFS в Windows. К сожалению, в Windows нет инструментов для создания соединений - вам нужно приобрести Win2K Resource Kit, который поставляется вместе с связанной программой для создания соединений. Поэтому я решил написать свой собственный инструмент для создания соединений: Junction. Junction не только позволяет создавать NTFS-соединения, но и позволяет увидеть, являются ли файлы или каталоги точками повторного анализа. Точки повторной обработки - это механизм, на котором основаны соединения NTFS,
Пожалуйста, прочитайте эту статью Microsoft KB для советов по использованию соединений.
Обратите внимание, что Windows не поддерживает переходы к каталогам на удаленных общих папках.
Если вы хотите просмотреть информацию повторного анализа, используйте Junction следующим образом:
Использование Junction
Используйте Junction, чтобы перечислить соединения:
Использование: [-s]
-s Recurse подкаталоги
Примеры:
Чтобы определить, является ли файл перекрестком, укажите имя файла:
перекресток c: \ test
Чтобы вывести список соединений под каталогом, включите ключ -s:
junction -sc: \
Чтобы создать соединение c: \ Program-Files для «c: \ Program Files»:
C:> MD-Program-Files
C:> соединение c: \ Program-Files "c: \ Program Files"
Чтобы удалить перекресток, используйте ключ -d:
junction -dc: \ Program-Files
Вам не обязательно загружать дополнительные программы, чтобы перечислять соединения, символические и жесткие ссылки, но если у вас есть определенные требования к формату вывода, они могут помочь.
Перечислите все каталоги соединений, символических ссылок и символических ссылок в текущем каталоге и его подкаталогах:
Или, если вы хотите, чтобы они перечислены отдельно ...
Перечислите все соединения в текущем каталоге и его подкаталогах:
Перечислите все символические ссылки в текущем каталоге и его подкаталогах:
Перечислите все каталоги символических ссылок в текущем каталоге и его подкаталогах:
l
Флаг атрибут является ключевым здесь;l
предназначен дляReparse Points
(переходы, символические ссылки и каталоги символических ссылок)Жесткие ссылки
К сожалению,
dir
жесткие ссылки перечислены как обычные файлы, поэтому вы не можете использовать их для идентификации жестких ссылок. Вы используете встроенныйfsutil
вместо этого. Он должен быть запущен из командной строки с повышенными правами.С помощью
fsutil
, перечислите все жесткие ссылки в текущем каталоге и его подкаталогах:Этот однострочник не идеален, и я бы приветствовал любые улучшения.
forfiles
с подкаталогами recurse (/s
) забило мой процессор и заняло некоторое время.fsutil
сути, в конечном итоге работает в два раза; первый раз для идентификации жестких ссылок путем подсчета количества строк вывода, возвращаемых каждым вызовом, и второй раз для только что найденных жестких ссылок для получения правильного вывода.uniq
.Вот командный файл, который используется только
for
для идентификации жестких ссылок. Какforfiles
не участвует, это может быть немного быстрее, однако он все еще страдает от оставшихся предостережений вышеупомянутого однострочника.Есть несколько других (не проверенных) вариантов:
Используйте (старую) утилиту Microsoft HL Scan
Используйте альтернативную команду поиска, которая входит в состав служебного инструментария Microsoft SFUA:
Используйте утилиту findlinks Sysinternals аналогично тому, как
fsutil
указано вышеИспользуйте программу Uwe Sieber's ListLinks - смотрите ссылку для использования
Используйте Nirsoft NTFSLinksView, если вы предпочитаете приложение с графическим интерфейсом
источник
Начиная с Powershell 5+ следующий однострочный рекурсивно перечисляет все жесткие ссылки на файлы, соединения каталогов и символические ссылки и их цели, начиная с
d:\Temp\
:Выход:
Если вы заботитесь о нескольких целях для жестких ссылок, используйте этот вариант, в котором перечислены цели, разделенные табуляцией:
Возможно, вам понадобятся права администратора, чтобы запустить этот скрипт, скажем
C:\
.Чтобы запустить эти сценарии из традиционной командной строки (cmd.exe):
Например:
источник
dir 'd:\Temp' -recurse -force | ?{$_.LinkType -eq "Junction"} | select FullName,LinkType,Target
LinkType
не представляется надежным для точек повторного анализа. Например, на моем компьютере, работающем под управлением W10 с PS 5.1, значениеLinkType
«C: \ ProgramData \ Desktop» и «C: \ Users \ All Users» равно нулю, в то время какdir /aL
(командная строка, а не PowerShell) указывает, что первым является точка соединения а вторая символическая ссылка.Жесткие ссылки лучше описать выше, но для символических ссылок и соединений хорошо работает следующее:
Я не использую какие-либо новые команды здесь, однако они улучшают некоторые из перечисленных, показывая хороший список каждой найденной ссылки, в пути, ее типе (SymLink / Junction), а также пути ссылки и пути назначения.
Выше есть несколько хороших, но они дают только целевой путь, и обычно вы хотите удалить ссылку, а не цель, или сопоставить все ссылки и цели.
Чтобы получить Type, Link и Target, вы можете использовать следующее в CMD:
Пример вывода:
источник
Far Manager 3.0 может как искать, так и отображать символические ссылки и точки соединения, отличные от файлов и каталогов. (Он может делать так много других вещей.) Он также может искать жесткие ссылки.
ALT+ F7=> [x] Использовать фильтр => Filt er =>Ins
Выберите атрибуты, которые вы хотите.
источник
LinkMagic2.exe (магия Junction List) также хорош.
Я по ошибке удалил все свои
c:\user
ссылки Junction, такие как печать, сетевые ресурсы и данные приложений, когда я впервые установил Windows 7 2 года назад, потому что я думал, что они были ошибочно помещены туда при установке. На самом деле они предназначены для обратной совместимости, и при поиске в Интернете я вижу, что некоторые попали в беду, пытаясь сделать определенные вещи без этих точек соединения.источник