Каковы возможные значения "Режим", возвращаемые командлетом PowerShell Get-ChildItem?
Когда я запускаю PowerShell Get-ChildItem в каталоге (или любом командлете, который возвращает элементы файловой системы), он показывает столбец с именем Mode
, например:
Directory: C:\MyDirectory
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2/8/2011 10:55 AM Directory1
d---- 2/8/2011 10:54 AM Directory2
d---- 2/8/2011 10:54 AM Directory3
-ar-- 2/8/2011 10:54 AM 454 File1.txt
-ar-- 2/8/2011 10:54 AM 4342 File2.txt
Я искал и искал Google и мою локальную книгу PowerShell, но я не мог найти документацию о значении столбца Mode
.
Каковы возможные значения столбца Mode и что означает каждый из них?
Ответы
Ответ 1
Обратите внимание, что режим, который вы видите, представляет собой просто строковое представление битового поля enum
, которое скрывается в свойстве Attributes
. Вы можете понять, что означают отдельные буквы, просто показывая обе бок о бок:
PS> gci|select mode,attributes -u
Mode Attributes
---- ----------
d----- Directory
d-r--- ReadOnly, Directory
d----l Directory, ReparsePoint
-a---- Archive
В любом случае, полный список:
d - Directory
a - Archive
r - Read-only
h - Hidden
s - System
l - Reparse point, symlink, etc.
Ответ 2
IMHO, наиболее показательным является сам код:
if (instance == null)
{
return string.Empty;
}
FileSystemInfo baseObject = (FileSystemInfo) instance.BaseObject;
if (baseObject == null)
{
return string.Empty;
}
string str = "";
if ((baseObject.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
{
str = str + "d";
}
else
{
str = str + "-";
}
if ((baseObject.Attributes & FileAttributes.Archive) == FileAttributes.Archive)
{
str = str + "a";
}
else
{
str = str + "-";
}
if ((baseObject.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
str = str + "r";
}
else
{
str = str + "-";
}
if ((baseObject.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
{
str = str + "h";
}
else
{
str = str + "-";
}
if ((baseObject.Attributes & FileAttributes.System) == FileAttributes.System)
{
return (str + "s");
}
return (str + "-");
Ответ 3
Это все имена атрибутов файла, и здесь можно найти здесь:
PS C:\> [enum]::GetNames("system.io.fileattributes")
ReadOnly
Hidden
System
Directory
Archive
Device
Normal
Temporary
SparseFile
ReparsePoint
Compressed
Offline
NotContentIndexed
Encrypted
Ответ 4
Вызов этих "атрибутов" - это имя, зависящее от Windows, и прерывает традицию nix вызова этого "режима". То есть man chmod
для "режима изменения".
Похоже, что дизайн Windows API сгибается (или соглашается) на более популярный термин в более широкой отрасли: "Режим" .
+1 от меня.