Как найти жесткие ссылки в Windows?

Вопрос или проблема

Я создал несколько жестких ссылок в файловой системе Windows 7 с использованием mklink. Это было некоторое время назад, и я точно не помню, где или на какие файлы. Когда я использую Проводник, все файлы выглядят одинаково. Когда я использую командную строку и ввожу “dir”, они все выглядят одинаково.

Как найти жесткие ссылки? Или как определить, является ли конкретный файл жесткой ссылкой?

Все файлы – это жесткие ссылки с числом ссылок не менее 1.

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

И это очень легко проверить с командой find, которая есть в Подсистеме Windows для Linux: find . -links +1.

кстати, Подсистема Windows для Linux ранее называлась “Подсистема для приложений на основе UNIX” в 2008 году для Windows-Server-2008 (более подробная информация https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc772343(v=ws.11)?redirectedfrom=MSDN ).

В Windows 7 (также работает в Windows 10), используйте команду:

fsutil hardlink list MyFileName.txt

Она перечисляет все жесткие ссылки на файл с именем MyFileName.txt.

К сожалению, операционная система не может найти все ваши жесткие ссылки без проверки каждого файла.

Для Проводника вы можете скачать очень удобное Расширение оболочки для ссылок, которое отмечает файлы с жесткими ссылками красной стрелкой, похожей на ярлык.

Оно также делает создание жестких ссылок, символических ссылок и соединений через контекстное меню Проводника довольно простым.

Бонус:

Технически, все файлы – это жесткие ссылки. Таким образом, вы действительно ищете файлы с более чем одной жесткой ссылкой.

используйте finddupe:

finddupe -listlink c:\photos

 Простой способ для разовых проверок: Изменяются ли атрибуты файла вместе?

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

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

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

Я написал программу, которая ищет в каталоге, возможна рекурсия, любые виды ссылок. Она может выводить на stdout или как таблицу с разделителем табуляции (tsv) для чтения в Excel/Libreoffice.

Исходный код можно найти в моем репозитории на Github JavaScriptDude/find_links

find_links - Находит любые виды ссылок в Windows 
Usage: find_links -p <path> [-r] [-x] [-t] [-f <filter>]
-path | -p: Путь для поиска (обязательный)
-recurse | -r: Рекурсивный поиск
-exec | -x: Открыть tsv, используя проводник
-tsv | -t: Вывод в формате tsv (с разделителем табуляции)
-filter | -f: Фильтровать цель с использованием необязательных шаблонов напр. *foo*

Нет необходимости что-либо скачивать.
Вы можете перейти в нужную папку и выполнить рекурсивный поиск:

echo off & for /F "delims=" %A in ('dir /s /b') do echo. & fsutil hardlink list "%A"

Один одиночный строка означает, что это обычный файл
Две соседние строки означают, что это Жесткая Ссылка.

Это работает в Windows 10, а также в 11, загрузки не требуются.
Основная идея – использовать командную строку (рекомендуется от администратора)
Перейдите в папку, которую вы хотите проверить.
Выполните эту команду, чтобы перечислить ВСЕ ФАЙЛЫ в папке и подпапках, поэтому не делайте все сразу на большом диске. Как отмечено ниже, файлы с жесткими ссылками появятся дважды.

echo off & for /F “delims=” %A in (‘dir /s /b’) do echo. & fsutil hardlink list “%A” > “%UserProfile%\Desktop\HardLinks.txt”

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

Первая часть статьи обсуждает перечисление символических ссылок и точек соединения.

Ссылка:
https://www.elevenforum.com/t/find-all-symbolic-links-and-junction-points-in-windows.4225/

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

В Windows 11 я просто открываю папку, содержащую эту жесткую ссылку, и запускаю команду dir. Это все. Смотрите на результат. В моем случае это папка PostgreSQL pg_tblspc. PostgreSQL хранит здесь жесткие ссылки на таблицы:

C:\PostgreSQL\9.5\data\pg_tblspc>dir  
Volume in drive C has no label. 
Volume Serial Number is 10B4-2DC6

Directory of C:\PostgreSQL\9.5\data\pg_tblspc

23/04/2019  07:34 AM    <DIR>          . 
11/02/2025  06:54 PM    <DIR>          .. 
23/04/2019  07:09 AM    <JUNCTION>     134931 [\??\C:\PostgreSQL\9.5\shadb] 
23/04/2019  07:34 AM    <JUNCTION>     134990 [\??\C:\PostgreSQL\9.5\nlp] 
23/04/2019  05:28 AM    <JUNCTION>     16395 [\??\C:\PostgreSQL\9.5\data\balancedb] 
23/04/2019  06:37 AM    <JUNCTION>     16615 [\??\C:\PostgreSQL\9.5\data\idrakdb]

.

Ответ или решение

Обнаружение жестких ссылок в операционной системе Windows может оказаться непростой задачей для пользователя, особенно если речь идет о старых версиях, таких как Windows 7. Жесткие ссылки фактически являются частью файловой системы NTFS и позволяют нескольким файловым именам ссылаться на один и тот же набор данных на диске. Это особенно удобно для экономии дискового пространства, но усложняет их идентификацию: в проводнике Windows все файлы выглядят одинаково, и команда "dir" также не показывает никаких отличий.

Теория

Жесткая ссылка – это по сути дополнительное имя для файла. В отличие от символических ссылок, которые указывают на другой файл с другого пути, жесткие ссылки создаются на уровне файловой системы и делят один и тот же идентификатор файловых данных (inode) в системе NTFS. Это означает, что изменения, сделанные в одном файле, автоматически применяются ко всем жестким ссылкам этого файла.

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

Примеры

  1. Использование команды fsutil: В Windows 7 и более поздних версиях вы можете использовать команду fsutil hardlink list <имя_файла> для отображения всех жестких ссылок, связанных с конкретным файлом. Эта команда покажет все пути, которые ссылаются на тот же набор данных на диске.

    fsutil hardlink list MyFileName.txt
  2. Эксплуатация Windows Subsystem for Linux (WSL): Для тех, кто установил WSL, команда из UNIX, такая как find, может использоваться для поиска файлов с более чем одной ссылкой. Запустите терминал Linux, переходите к нужному каталогу и используйте команду:

    find . -links +1

    Эта команда выведет все файлы в текущем каталоге и подкаталогах с количеством ссылок более одной.

  3. Link Shell Extension: Существует удобное расширение для проводника Windows под названием Link Shell Extension, которое визуально выделяет файлы, имеющие жесткие ссылки, с помощью особых значков. Это расширение также позволяет создавать жесткие ссылки, символические ссылки и соединения через контекстное меню проводника.

  4. Скрипты и утилиты: Некоторые пользователи разрабатывают собственные скрипты для поиска жестких ссылок. Один из таких примеров – скрипт find_links, который доступен на платформе GitHub и позволяет искать все виды ссылок в заданной директории.

    find_links -p <path> [-r] [-x] [-t] [-f <filter>]

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

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

Применение

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

Специалисты ИТ, отвечающие за управление системами и резервное копирование, могут воспользоваться этими инструментами для аудита и управления ссылками, что способствует более эффективному использованию ресурсов диска и упрощает управление большими объемами данных.

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

Оцените материал
Добавить комментарий

Капча загружается...