Girish Mahajan (Editor)

File attribute

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

File attributes are metadata associated with computer files that define file system behavior. Each attribute can have one of two states: set and cleared. Attributes are considered distinct from other metadata, such as dates and times, filename extensions or file system permissions. In addition to files, folders, volumes and other file system objects may have attributes.

Contents

Traditionally, in MS-DOS and Microsoft Windows, there were four attributes: archive, hidden, read-only and system. Windows has added new ones. Systems derived from 4.4BSD-Lite, such as FreeBSD, NetBSD, OpenBSD, DragonFly BSD, and macOS, have sets of "system" and "user" attributes; newer versions of the Linux kernel also support a set of file attributes.

DOS and Windows

Traditionally, in DOS and Microsoft Windows, files and folders accepted four attributes:

  • Archive: When set, it indicates that the hosting file has changed since the last backup operation. Windows' file system sets this attribute on any file that has changed. Backup software then has the duty of clearing it upon a successful backup.
  • Hidden: When set, indicates that the hosting file is hidden. MS-DOS commands like dir and Windows apps like File Explorer do not show hidden files by default, unless asked to do so.
  • System: When set, indicates that the hosting file is a critical system file that is necessary for the computer to operate properly. MS-DOS and Microsoft Windows use it to mark important system files. MS-DOS commands like dir and Windows apps like File Explorer do not show system files by default even when hidden files are shown, unless asked to do so.
  • Read-only: When set, indicates that a file should not be altered. Upon opening the file, file system API usually does not grant write permission to the requesting application, unless the application explicitly requests it. Read-only attributes on folders are usually ignored, being used for another purpose.
  • As new versions of Windows came out, Microsoft has added to the inventory of available attributes on the NTFS file system, including but not limited to:

  • Compressed: When set, Windows compresses the hosting file upon storage. For more information, see NTFS § File compression.
  • Encrypted: When set, Windows encrypts the hosting file upon storage to prevent unauthorized access. For more information, see NTFS § Encryption.
  • not content-Indexed: When set, Indexing Service or Windows Search do not include the hosting file in their indexing operation.
  • 4.4BSD-Lite and derivatives

    In 4.4BSD and 4.4BSD-Lite, files and directories (folders) accepted four attributes that could be set by the owner of the file or the superuser (the "User" attributes) and two attributes that could only be set by the superuser (the "System" attributes):

  • (User) No-dump: When set, it indicates that the file or directory should not be saved during a backup operation.
  • (User and System) Immutable: When set, indicates that the file or directory should not be altered. Attempts to open the file for writing, create a file within the directory, remove a file from the directory, rename a file within the directory, rename the file or directory, or remove the file or directory will fail with a permissions error.
  • (User and System) Append-only: When set, indicates that the file should only be appended to.
  • (User) Opaque: When set on a directory, indicates that the directory is opaque when viewed through a union stack.
  • FreeBSD added some additional attributes, also supported by DragonFly BSD:

  • (User and System) No-unlink: When set, indicates that the file or directory should not be renamed or removed. Attempts to rename or remove the file or directory will fail with a permissions error.
  • FreeBSD also supports:

  • (System) No-archive: When set, indicates that the file or directory should not be archived.
  • (System) Snapshot: When set, indicates that the file or directory is a snapshot file. This attribute is maintained by the system, and cannot be set, even by the super-user.
  • whereas DragonFly BSD supports:

  • (User and System) No-history: When set, indicates that history should not be retained for the file or directory.
  • (User) Swapcache: When set, indicates that clean filesystem data for the file, or for the directory and everything underneath the directory, should be cached in swap space on a solid-state disk.
  • (System) Swapcache: When set, indicates that clean filesystem data for the file, or for the directory and everything underneath the directory, should not be cached in swap space on a solid-state disk.
  • (System) Archived: When set, indicates that the file or directory may be archived.
  • NetBSD added another attribute, also supported by OpenBSD:

  • (System) Archived: When set, indicates that the file or directory is archived.
  • macOS added another attribute:

  • (User) Hidden: When set, indicates that the file or directory should not, by default, be displayed in the GUI; ls will display it, however.
  • Editing

    In DOS, OS/2 and Windows, the attrib command in cmd.exe and command.com can be used to change and display the four traditional file attributes. File Explorer in Windows can show the seven mentioned attributes but cannot set or clear the System attribute. Windows PowerShell, which has become a component of Windows 7 and later, features two commands that can read and write attributes: Get-ItemProperty and Set-ItemProperty. To change an attribute on a file on Windows NT, the user must have appropriate file system permissions known as Write Attributes and Write Extended Attributes.

    In 4.4BSD and 4.4BSD-Lite and derivatives, the chflags and ls commands can be used to change and display file attributes. To change a "user" attribute on a file in 4.4BSD-derived operating systems, the user must be the owner of the file or the superuser; to change a "system" attribute, the user must be the superuser.

    In Linux, the chattr and lsattr commands can be used to change and display file attributes.

    References

    File attribute Wikipedia