Символьные ссылки в Windows

Символьные ссылки в Windows

Под ссылками в Windows я понимаются ссылки в NTFS. В FAT механизмов ссылок предусмотрено не было.

Ядро Windows поддерживает следующие виды ссылок:

  • Hard Links — жёсткие ссылки, как в *nix. Доступны начиная с Windows NT4;
  • Junction Points — аналог символических ссылок. Доступен начиная с Windows 2000 (NTFS 5);
  • Symbolic Links — символьные ссылки. Доступны начиная с Windows Vista.

Если вы никогда не имели дела с символическими и жёсткими ссылками, но хотели бы узнать о них, советую прочитать отрывок из документации файлового менеджера FAR:

Жесткие и символические связи

На разделах NTFS также можно создавать жесткие (HardLink) связи для файлов и символические (SymLink) для папок с помощью команды Alt-F6.

Жесткие связи применяются для файлов. Символические связи — для папок и дисков.

Жесткие связи

Жесткая связь (HardLink) — это просто еще одна запись в папке для данного файла.

Когда создается жесткая связь, сам файл не копируется физически, а только появляется под еще одним именем или в еще одном месте, а его старые имя и местонахождение остаются нетронутыми. С этого момента жесткая связь неотличима от первоначальной записи в папке. Единственное отличие — то, что для жесткой связи не создается короткое имя файла, поэтому из программ ДОС она не видна.

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

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

Жесткие связи поддерживаются в NTFS, начиная с NT 4.0. Создавать жесткие связи можно только на том же диске, на котором расположен исходный файл.

Символические связи

NTFS начиная с версии 5.0 (Windows 2000/XP) поддерживает символические связи (SymLink). Символические связи папок в Windows 2000/XP известны как «directory junctions» — технология, позволяющая отображать любые локальные папки на любые другие локальные папки. Например, если папка D:\SYMLINK указывает на C:\WINNT\SYSTEM32 в качестве своей цели, то программа, обращающаяся к D:\SYMLINK\DRIVERS, будет на самом деле обращаться к C:\WINNT\SYSTEM32\DRIVERS.

FAR умеет создавать символические связи только на локальных дисках, файловая система которых поддерживает эту возможность (Windows 2000/XP/NTFS 5.0). В отличие от жестких связей, символические связи не обязательно должны указывать на тот же диск.

Напрямую делать символические связи на папки CD-ROM нельзя, но можно это ограничение обойти, смонтировав CD-ROM диск на папку NTFS-раздела.

Там говорится только о Hard Links и Junction Points, но этого вполне достаточно. Symbolic Links действуют так же, как и Junction Points, с той разницей, что могут указывать на файлы (и реализованы в Windows по-другому).

Hard Links можно создавать только на файлы, Junction Points — только на директории, Symbolic Links — на файлы и директории. В дальнейшем под «жёсткими ссылками» подразумеваются Hard Links, под «символьными» — Junction Points и Symbolic Links.

Жёсткие ссылки действительны в пределах одного раздела, символьные — могут пересекать границы разделов. В связи с этим символьные ссылки могут поломаться, если структуру разделов поменять.

Не со всем, что поддерживается ядром, умеет нормально работать эксплорер. Будьте осторожны при использовании Junction Points в версиях Windows до Vista. При удалении Junction Point эксплорер может залезть внутрь директории, на которую ссылается Junction Point и поудалять там всё, а затем удалить Junction Point, хотя должен лишь удалить ссылку. Наверняка могут возникнуть проблемы и при перемещении или копировании Junction Point’ов.

Мне неизвестно, нормально ли в версиях Windows до Vista относятся к Junction Points стандартные утилиты типа rmdir.

Дополнительные материалы по теме

Отмечу англоязычную статью, в которой описаны нюансы использования ссылок и некоторые программы, позволяющие с ними работать. Статья устаревшая, так что в ней говорится только о Hard Links и Junction Points (причём на последние в статье нередко ссылаются, как на symbolic links…).

Хорошее описание всех видов ссылок есть ещё в справке по NTFS Links (дополнение для Total Commander).

Софт

Теперь можно перейти к рассмотрению программ для работы со ссылками. Да-да, если вы не пользуетесь FAR, вам понадобятся отдельные программы. Все программы, перечисленные ниже, бесплатны.

Утилиты от Microsoft

Windows >= Vista

В Windows Vista добавили команду

mklink

для создания символьных и жёстких ссылок.

Windows >= 2000
fsutil hardlink create ссылка файл

Создаёт Hard Link на файл (источник).

linkd ссылка директория

Создаёт Junction Point на директорию (источник). Утилита входит в Microsoft Windows Resources Kit.

Расширения для Explorer

NTFS Link интегрируется в Explorer и добавляет во всплывающее меню, появляюшееся после перетаскивания правой кнопкой мыши, пункты «Create junction point» и «Create hard link». Кроме того, она перехватывает вызовы Explorer’а, обеспечивая нормальное перемещение/копирование/удаление созданных ссылок.

NTFS Links (не путать с дополнением для Total Commander) — абсолютно аналогичная программа.

Я рекомендую: Link Shell Extension — аналогичная программа, обладающая расширенным функционалом и очень подробным описанием.

NTFS Links — дополнение для Total Commander

Страница программы. Плагин может запускаться как отдельная программа, вне Total Commander’а.

FAR

Консольный файловый менеджер FAR уже давно поддерживает Hard Links и Junction Points «из коробки». Для создания ссылки используйте сочетание клавиш Alt-F6.

Junction Link Magic

Junction Link Magic — программа с графическим интерфейсом для создания, изменения и модификации Junction Points.

Junction — консольная программа для создания Junction Points

Junction лучше, чем

linkd

, тем, что не нужно тащить весь Resource Kit.

Источник

By sysadmin on 16.04.2010 | Windows
Метки: , , , , ,

Windows CMD: Поиск хостов в локальной сети

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

FOR /L %i IN (1,1,254) DO ping -n 1 \\192.168.0.%i | FIND /i "Reply">>c:\find_local_ip.txt

здесь каждый айпишник для адресов 192.168.0.1-254 пингуется один раз, после чего результат передается команде find, которая при отклике записывает результат в файл find_local_ip.txt

и еще один скрипт (шутка — уходя, гасите всех!) — выключает все компы в заданной подсети:

FOR /L %i in (1,1,254) DO shutdown \\192.168.0.%i

также с выходом всех пользователей (XP):

FOR /L %i in (1,1,254) DO shutdown \\192.168.0.%i /l

тоже самое для 2003 сервера:

FOR /L %i in (1,1,254) DO shutdown /r /m \\192.168.0.%i /d p:2:18

примечание: данная фича может быть запрещена локальной политикой безопасности в разделе прав пользователей, в XP shutdown встроенная команда, если ее нет, то нужно будет скачать.

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

посмотреть использующиеся порты —

netstat -an |find /i "listening"

посмотреть порты с установленными соединениями:

netstat -an |find /i "established"

с идентификаторами процессов:

netstat -ao |find /i "listening"

помнится в бесплатном пакете W2K Resource Kit была хорошая утилитка, PULIST, позволяющая посмотреть процесс, использующий порт и использующую его программу, например есть установленное соединение по 80 порту и ни один броузер не запущен, как найти программу, которая использует данный порт —

netstat -no

выдаст, что есть процесс номер 1234, использующий 80 порт,

pulist |find /i "1234"

и покажет, что это идет обновление антивируса.

By sysadmin on 28.07.2009 | Windows
Метки: , , , ,

Найти по MAC адресу IP компьютера

Как-то случайно натыкался на полезные скрипты для определения по мак адресу айпи компьютера:

такой вот коротенький батничек, пингующий группу адресов и записывающий в файлик arp_table.txt

@echo off
if exist arp_table.txt (
if exist arp_table.bak del arp_table.bak
ren arp_table.txt arp_table.bak
)
for /L %%i in (1,1,254) do (
echo 192.168.0.%%i
ping -n 1 192.168.0.%%i>nul
arp -a 192.168.0.%%i>arp_string.tmp
for /F "skip=3 tokens=*" %%j in (arp_string.tmp) do (
echo %%j|find /V "invalid">>arp_table.txt
)
)
del arp_string.tmp

и более тотальный скрипт:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
'******************************************************************************
'* File: mac2ip.vbs
'* Purpose: Finds IP of the host with given MAC address.
'* Syntax: cscript mac2ip.vbs /mac:MAC_ADDRESS /ip:IP_BLOCK [/p:pause]
'* Version: 1.0.2
'*
'* Technology: VBSCRIPT,WSH,WMI
'* Requirements: Windows XP or newer (uses Win32_PingStatus WMI class)
'*
'* Authors: 4u3u (asuhovey mtu-net ru)
'*
'******************************************************************************
Option Explicit
'On Error Resume Next
Dim objShell,strOutput,i,strMAC,objOutput,objAdapter,intPause
Dim strSTime,strIP,strNameSpace,strQuery,colAdapters,PausePattern
Dim colResult,IPPattern,MACPattern,strArpCommand,strOMAC
 
'* Matches valid MAC address
MACPattern = "^([0-9a-f][0-9a-f]-){5}([0-9a-f][0-9a-f])$"
'*Matches valid IP block
IPPattern = "^b((25[0-5]|2[0-4]d|[01]dd|d?d).){3}$"
'*Matches positive integer
PausePattern = "^d+$"
 
'****************************************
'Parse arguments
'****************************************
strOMAC = WScript.Arguments.Named("mac")
strMAC = Replace(LCase(strOMAC),":","-")
strIP = Wscript.Arguments.Named("ip")
intPause = Wscript.Arguments.Named("p")
If intPause="" Then intPause=1000
If Wscript.Arguments.Count<2 Then
Syntax()
End If
If not ArgVrf(strMAC,MACPattern) Then
WScript.Echo "ERROR: Invalid MAC: '" & strOMAC & "' Check syntax..." & VbCrLf
Syntax()
End If
If not ArgVrf(strIP,IPPattern) Then
WScript.Echo "ERROR: Invalid IP: '" & strIP & "' Check syntax..." & VbCrLf
Syntax()
End If
If not ArgVrf(intPause,PausePattern) Then
WScript.Echo "ERROR: Invalid Pause: '" & intPause & "' Must be positive integer." & VbCrLf
Syntax()
End If
 
''****************************************
'Check if script is running by cscript.
'If not, restart script using cscript.
'****************************************
Set objShell = WScript.CreateObject("WScript.Shell")
If Instr(1, WScript.FullName, "CScript", vbTextCompare) = 0 Then
objShell.Run "cmd /k cscript.exe /nologo """ & WScript.ScriptFullName & """ /mac:" &_
strOMAC & " /ip:" & strIP & " /p:" & intPause, 1, False
WScript.Quit
End If
 
'****************************************
'Check if given MAC is owned by local host
'****************************************
strNameSpace = "winmgmts:{impersonationLevel=impersonate}//./root/cimv2"
strQuery = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True"
Set colAdapters = GetObject(strNameSpace). ExecQuery(strQuery)
For Each objAdapter in colAdapters
If LCase(Replace(objAdapter.MACAddress,":","-")) = strMAC Then
WScript.Echo strOMAC & " is YOUR MAC address!"
WScript.Quit
End If
Next
 
'****************************************
'Ping all IPs in range.
'****************************************
strSTime = Now()
strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & strIP
For i = 1 To 254 Step 1
Set colResult = GetObject(strNameSpace). ExecQuery(strQuery & i & "'")
WScript.StdOut.Write "."
If i/51-Int(i/51)=0 Then
WScript.StdOut.WriteLine " " & Int(100*i/254) & "%"
End If
Next
WScript.Echo ". 100%" & VbCrLf & "Ping completed in " & DateDiff("s",strSTime,Now()) & " seconds." & VbCrLf
 
'****************************************
'Get IP-MAC pair from ARP cache.
'****************************************
WScript.Sleep(intPause)
strArpCommand = "%comspec% /c arp.exe -a | find /i """ & strMAC & """"
Set objOutput=objShell.Exec(strArpCommand).StdOut
WScript.Echo String(56,"=")
i=0
Do While Not objOutput.AtEndOfStream
i=i+1
strOutput = objOutput.ReadLine
WScript.Echo StrOMAC & " is " & RTrim(Left(LTrim(strOutput),15))
Loop
If i=0 Then
WScript.Echo strOMAC & " was NOT FOUND" &_
" on the local network" & VbCrLf &_
"Either host is unreachable or " & strIP &_
"xxx is not" & VbCrLf & "your local network."
End If
WScript.Echo String(56,"=")
 
'****************************************
'Subroutines
'****************************************
'*Syntax
Sub Syntax()
Dim s
s = "Finds IP of the host with given MAC address." & VbCrLf & VbCrLf
s = s & "SYNTAX: cscript /nologo " & UCase(WScript.ScriptName) &_
" /mac:MAC_ADDRESS /ip:IP_BLOCK [/p:pause]" & VbCrLf & VbCrLf
s = s & " MAC_ADDRESS MAC address to search for. MAC_ADDRESS" & VbCrLf
s = s & " is in XX-XX-XX-XX-XX-XX format. Both" & VbCrLf
s = s & " ':' and '-' delimiters allowed." & VbCrLf
s = s & " IP_BLOCK First three octets of local ip range to" & VbCrLf
s = s & " scan. E.g. '192.168.0.' Only /24 subnets" & VbCrLf
s = s & " are supported in current version." & VbCrLf
s = s & " pause Pause after ping in milliseconds." & _
VbCrLf & " Default is 1000 (1 second)" & VbCrLf & VbCrLf
s = s & "Example:" & VbCrLf
s = s & " cscript /nologo " & UCase(WScript.ScriptName) &_
" /mac:01-23-45-67-89-AB /ip:192.168.0." & VbCrLf
WScript.Echo s
WScript.Quit 1
End Sub
 
'*Arguments validation
Function ArgVrf(arg,pattern)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.IgnoreCase = true
objRegExp.Pattern = pattern
ArgVrf = objRegExp.Test(arg)
Set objRegExp = Nothing
End Function
 
'****************************************
'End of script
'****************************************
By sysadmin on 18.06.2009 | Windows
Метки: , , , , , , , ,

Ищем кто занимет дисковое пространство

Часто возникает вопрос куда делось свободное дисковое пространство. Такие ситуации возникают не только на системах в которых работает несколько пользователей, но и на домашних компьютерах.

Особенно остро эта проблема стоит на сетевых файл-серверах.

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

Однако это процесс трудоемкий, требующий много времени и знаний ОС.

Когда необходимо быстро выяснить какая папка (и ее подпапки) заняла большое пространство диска можно применить графический инструмент WinDirStat.

Очень удобный графический инструмент, позволяющий легко найти «проблемные» папки и файлы.
windirstat

By sysadmin on 11.04.2009 | Windows
Метки: , , , ,

windows автоматический вход в систему

При запуске windows отменить запрос логина/пароля, для этого выбираем пуск->выполнить-> набираем в окошке
control userpasswords2 и ставим галочку не спрашивать логин/пароль при входе в систему.

By sysadmin on 15.03.2009 | Windows
Метки: , , ,

Изменения способа разблокировки Windows

По умолчанию только текущий залогиненный пользователь и администратор могут снимать блокировку с компьютера. Компьютер может быть заблокирован различными способами: выбором опции «Заблокировать» из меню Ctrl-Alt-Del, или сработавшим скринсейвером, защищенным паролем. Когда пользователь самостоятельно разблокирует рабочую станцию, его сессия восстанавливается. Если администратор использует свои полномочия для разблокировки компьютера, другой пользователь при залогинивание разлогинивает текущего пользователя.

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

Сторонняя программа под названием «Unlock Administrator» решает эту проблему, позволяя вам указывать какие именно пользователи могут разблокировать компьютер. В ситуациях когда много пользователей используют совместный вход на рабочую станцию, программа позволяет пользователям снимать блокировку с компьютера без разлогинивания текущего залогиненного юзера. Журналы хранят сведения о том, кто разлогинивал систему и когда. Программа работает под управлением Windows 2000, XP, 2003, но не Vista.

By sysadmin on 02.03.2009 | Windows
Метки: , ,

Получение нового IP от DHCP сервера в Windows

В этой статье описан лучший способ сбросить IP адрес и получить его заново, если ваш компьютер настроен на использование DHCP сервера.

1. Перейдите в меню Start и нажмите Run

2. Появится окно вызова. Введите cmd и нажмите OK

3. Откроется командная строка. Введите ipconfig. Вы увидите IP адрес и другую информацию о сетевых интерфейсах вашего компьютера.

4. Введите ipconfig /release для освобождения IP адреса.

5. Наконец введите ipconfig /renew для получения нового адреса.

By sysadmin on | Windows
Метки: , , , ,

Очистка сохраненных паролей на сетевые ресурсы в Windows

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

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

Однако вы можете изменить, или удалить сохраненные данные, и в этой заметке я покажу вам как это сделать:

    Нажмите Start>Control Panel.
    В панеле управления перейдите в категорию User Accounts (в XP) или User Accounts and Family Safety (в Vista), и потом нажмите User Accounts.
    В XP, нажмите на ваш аккаунт пользователя Windows и на следующем окне в левой панели настроек логина нажмите на ссылку Manage my network passwords. В Vista, нажмите ссылку Manage your network passwords. Вы увидите окно Сохранение имен пользователей и паролей.
    Если вы уже имеете сохраненные записи, вы увидите список компьютеров. Вы можете выбрать нужную запись и нажать кнопку Remove.
    Нажмите кнопку Add. В XP появится диалоговое окно Logon Information Properties, в Vista — Stored Credentials Properties (in Vista).
    В поле Server (в XP) или Log on to (Vista), введите имя компьютера в сети, к которому необходимо подключаться.
    В поле User name введите аккаунт пользователя, имеющий доступ к указанному компьютеру. Используйте запись в правильном формате, к примеру computernam\accoutname.
    В поле Password введите пароль для выбранного пользователя.
    В Vista нажмите A Windows logon credential.
    Нажмите OK.

Вам необходимо разлогиниться из текущего сеанса и зайти заново для вступления изменений в силу.

By sysadmin on | Windows
Метки: , , ,

Замена Explorer.exe или изменение дефолтной оболочки Windows

По умолчанию, при загрузке Windows активируется дефолтная оболочка (Explorer.exe), показывающая пользовательский рабочий стол. Вы можете изменить это поведение заменив explorer.exe на ваше собственное приложение, поправив один параметр в реестре.

Ключ: HKEY_Local_Machine\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

Имя: Shell

Значение: Explorer.exe

Замените Explorer.exe на имя вашего приложения. Убедитесь, что вы ввели правильный путь для приложения. Теперь вам достаточно только перелогинить пользователей для вступления изменений в силу.

By sysadmin on | Windows
Метки: ,

Отключить autorun для разных флешек и других дисков

Кстати, если кто еще не отключил автозапуск для дисков в своей windows, тот очень рискует быть зараженным нехорошим вирусом. Дело в том, что они используют файл autorun.inf копируя его в корень вашей usb-flash (как вариант) и затем, когда вы ее вставите в свой компьютер файл запустится автоматически и заразит вас. Как отключить сие дейсвтие мы расскажем вам в нескольких словах.

Вот ниже приводится текст

REGEDIT4
 
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesCdrom]
“AutoRun”=dword:00000000

Скорпируйте его в Блокнот. Затем сохраните обязательно с расширением .reg. Затем кликните два раза по этому файлу и согласитесь с внесением данных в реестр windows. И помните — не отключив autorun вы подвергаете себя, свой компьютер и своих близких большой опасности.

By sysadmin on 15.02.2009 | Windows
Метки: , , , ,