====== BASH - Commands - ls - ls output fields definitions ====== The output of the **ls** command depends on the version of "ls", the options used, the platform used, etc. ls -al returns: -rwxrw-r-- 10 root root 2048 Jan 13 07:11 afile.exe ---- -rwxrw-r-- 10 root root 2048 Jan 13 07:11 afile.exe ?UUUGGGOOOS 00 UUUUUU GGGGGG #### ^ ^-- File name. ^ ^ ^ ^ ^ ^ ^ ^ ^ \-- Date Time stamp. | | | | | | | | \--- File Size. | | | | | | | \-------- Group Name (for example, Users, Administrators, etc). | | | | | | \--------------- Owner Name. | | | | | \---------------------- Link count (Usually refers to number of hard links; but can vary.) | | | | \--------------------------- Alternative Access (blank means none defined, anything else varies) | \--\--\----------------------------- File Mode Permissions. Read, Write and Special access modes for [U]ser, [G]roup, and [O]thers (everyone else). \------------------------------------- File Type flag. * **File Type flag**: The very first character. Typically one of: **d** for directory, **l** for a symbolic link (hard links show normally without a special character of their own), or **-** for a normal file. * There are many others, but less commonly seen, file types for various filesystems. These first ten characters (file type and permissions) are discussed on [[https://en.wikipedia.org/wiki/File_system_permissions#Notation_of_traditional_Unix_permissions|Wikipedia]]. Again, your documentation will tell you exactly what kind of file types your command supports and displays. * **File Mode Permissions**: Three sets of three chars, where: * First set is permissions for the "User" (i.e., Owner) * Second set is permissions for the "Group" * Third set is permissions for "Others" (i.e., everyone else; anyone who is neither Owner nor Group). * **Link count**: For files it means number of hard links. For directories, its the number of directories inside the directory + this directory itself. * **Alternative Access flag**: Usually a blank space, but on some platforms, it may be used to indicate there are special/alternative access modes (such as ACLs and security descriptors on WIN32, etc), and varies widely – consult your manual, man pages, info tool, or what-not. * **File Size**: Some versions and/or command line flags will list the number of blocks used instead of the number of bytes; a filesystem with a block size of 1024 bytes will list all sizes up to 1024 bytes as "1", meaning 1 block is used, from 1025 to 2048 as "2", using 2 blocks, and so on. But listing block sizes by default (without explicitly using a command line option) is rare on most modern un*x machines. * **Date Time stamp**: Usually the date/time the file was last modified, not the time the file was created. **NOTE:** If you cannot find a man/info page for **ls** itself (**man ls** / **info ls**), try looking in the **coreutils** package (**info coreutils**). Also note that among the more common platforms, Microsoft platforms tend not to translate very well to **ls** output, so you may see odd behavior, flags, or other unusual info in the output, depending on how your version of "ls" was compiled, what it was linked against, etc. ---- ===== File Types flag ===== On most systems, the first field is also used to indicate the presence of extra attributes like ACLs, security attributes or other extended attributes. |-|Regular file| |b|Block special file| |c|Character special file| |C|High performance ("contiguous data") file| |d|Directory| |D|Door (Solaris 2.5 and up)| |l|Symbolic link| |M|Off-line ("migrated") file (Cray DMF)| |n|Network special file (HP-UX)| |p|FIFO (named pipe)| |P|Port (Solaris 10 and up)| |s|Socket| |?|Some other file type| ---- ===== File Mode Permissions ===== Each of the three characters represent the read, write, and execute permissions: Usually in the form: rwx rwx rwx * First set of rwx are permissions for the owner of the file. * Second set of rwx are permissions for the group that the owner belongs to. Everyone in the same group will get these permissions to the file. * Third set of rwx are permissions for others. That are not the owner; nor part of the group the owner is part of. |r|Reading is permitted.| |w|Writing is permitted.| |x|Execution is permitted. For directories it means you can attempt to access the directory contents.| |-|The specific permission is not allowed.| but **ls** can combine multiple bits into the third character of each set of permissions as follows: |s|If the set-user-ID or set-group-ID bit and the corresponding executable bit are both set.| |S|If the set-user-ID or set-group-ID bit is set but the corresponding executable bit is not set.| |t|If the restricted deletion flag or sticky bit, and the other-executable bit, are both set. The restricted deletion flag is another name for the sticky bit.| |T|If the restricted deletion flag or sticky bit is set but the other-executable bit is not set.| |x|If the executable bit is set and none of the above apply.| **NOTE:** Sometimes you may encounter an **s** or **S** for setuid and/or setgid programs, or other less common characters. See your **ls** documentation for the mode characters it will show. ---- ===== Alternative Access Types ===== ---- ===== Links ===== Some platforms have an odd notion of what constitutes a **link**. These usually include hard links and symbolic links, as well as directory entries (which is why directories often have high link counts – its parent has one link, the directory has a link to itself in the . entry, and each of its sub-directories has a link back via .. ---- ===== File Size ===== Some versions and/or command line flags will list the number of blocks used instead of the number of bytes. A filesystem with a block size of 1024 bytes will list all sizes up to 1024 bytes as "1", meaning 1 block is used, from 1025 to 2048 as "2", using 2 blocks, and so on. But listing block sizes by default (without explicitly using a command line option) is rare on most modern un*x machines. **NOTE:** The file size for a directory is only the size of the metadata of the directory, not the total size of the files under the directory. ---- ===== Date Time stamp ===== The **Date Time stamp** is usually the date/time the file was last modified, not the time the file was created. **NOTE:** On un*x-ish filesystems there is no record of the file creation time The **ctime** field does NOT mean "creation time" as it does on FAT/NTFS filesystems, but rather, it means the "inode [C]hange time" – the time the inode itself was last modified. The **mtime** (last [M]odified) and atime (last [A]ccesed/read) timestamps are the same on both systems – although the precision (FAT has a granularity of two seconds, for example) and time zone may vary. ---- ===== References ===== https://en.wikipedia.org/wiki/Unix_file_types https://en.wikipedia.org/wiki/File_system_permissions#Notation_of_traditional_Unix_permissions