Updated: 8 October 2026 · Applies to: Debian 13 (GNU coreutils ls 9.7), AlmaLinux 10 (GNU ls 9.5) and Ubuntu 26.04 (uutils ls 0.10.0)
Each line of ls -l has the same fields, left to right: file type and permissions, hard link count, owner, group, size in bytes, last modification time and name. This line is a regular file that its owner can read and write, its group can read and others cannot open, with an extra access list (+), one link, owner and group root, 7 bytes, changed on 7 October at 21:14:
-rw-r-----+ 1 root root 7 Oct 7 21:14 config.php
For the options of ls itself (hidden files, sorting, sizes), see how to list files in Linux with the ls command.
An annotated example
A test directory with one of each kind of entry, listed on Debian 13:
$ ls -l total 40 srwxr-xr-x 1 root root 0 Oct 7 21:14 app.sock -rw-r--r-- 1 root root 5242880 Oct 7 02:30 backup.tar.gz -rw-r-----+ 1 root root 7 Oct 7 21:14 config.php lrwxrwxrwx 1 root root 12 Oct 5 10:00 current -> releases/2.1 drwxrwxrwt 2 root root 4096 Oct 5 10:00 dropbox -rw-r--r-- 1 root root 7 Jan 15 2027 future.txt -rw-r--r-- 1 root root 2 Oct 7 21:14 'my file.txt' -rw-r--r-- 1 root root 10 Dec 1 2025 notes.txt -rw-r--r-- 1 1050 1050 2 Oct 7 21:14 orphan.txt prw-r--r-- 1 root root 0 Oct 7 21:14 queue.pipe drwxr-xr-x 4 root root 4096 Oct 5 10:00 releases -rw-r--r-- 2 root root 12 Oct 1 12:00 report.csv drwxrwsr-x 2 root root 4096 Oct 5 10:00 shared -rwsr-xr-x 1 root root 10 Oct 7 21:14 tool
total 40 is the disk space the listed files use, in 1024-byte blocks.
1. File type (first character)
- regular file, d directory, l symbolic link, p named pipe, s socket, as used by PHP-FPM and MySQL, c and b character and block devices in /dev (ls -l /dev/null printed crw-rw-rw- 1 root root 1, 3).
2. Permissions (next nine characters)
Three groups of three: owner, group, everyone else. r read, w write, x execute (for a directory: enter it), - not allowed. rw-r--r-- is 644 in numbers; see translate rwx permissions into octal. The third place of a group can show a special bit:
sin the owner part (tool): setuid, the program runs with its owner's rights, as/usr/bin/passwddoes. A capitalS(-rwSr--r--) means setuid without execute, usually a mistake.sin the group part (shared): setgid. New files in the directory take its group: afterchgrp web shared, a file root created inside belonged to groupweb.tat the end (dropbox, also/tmp): sticky bit. Anyone may create files, but only the file's owner, the directory's owner or root can delete them; our user bob gotOperation not permittedon alice's file. CapitalT(drwxrwx--T) means sticky without execute for others.
To find files with these bits, see find files with SUID and SGID permissions.
3. The character after the permissions: + or .
+ means an access control list (ACL) adds rights beyond the normal permissions. We set one with setfacl -m u:nobody:r config.php, and getfacl config.php listed user:nobody:r--; see how to configure ACLs. According to the GNU coreutils manual, . marks a file with an SELinux security context and nothing else, which you see on AlmaLinux, Rocky Linux and RHEL with SELinux on (our test host had SELinux off, so it did not appear). When no file in the list has either, GNU ls drops this column.
4. Link count
For a file, the number of names (hard links) for the same data: report.csv shows 2 because we ran ln report.csv /srv/old/report-2025.csv. For a directory, 2 plus the number of subdirectories: releases holds 2.0 and 2.1, so 4. See hard and symbolic links.
5. Owner and group
A number instead of a name (1050 1050 on orphan.txt) means no account has that ID, usually because the user was deleted: after userdel carol, her file showed 1002 1003. ls -n shows numeric IDs for every file.
6. Size
- Files: bytes;
ls -lhshows5242880as5.0M. - Directories: 4096 is the directory's own list of names, not its contents. Use
du -shfor that. - Symbolic links: the length of the target path (
releases/2.1is 12 characters). - Devices: major and minor numbers (
1, 3) instead of a size. Pipes and sockets: 0.
7. Date and time
The last time the content changed, in the server's timezone. The GNU manual calls a time recent if it is less than six months old and not in the future; recent files show the time, others the year. So notes.txt shows Dec 1 2025 and future.txt shows Jan 15 2027 (a future date usually means a wrong clock). For the full date on every line:
$ ls -l --time-style=long-iso future.txt notes.txt -rw-r--r-- 1 root root 7 2027-01-15 09:00 future.txt -rw-r--r-- 1 root root 10 2025-12-01 09:00 notes.txt
--full-time adds seconds and the UTC offset. ls -lu shows the last access time, ls -lc the last status change (permissions, owner or content); stat shows all of them.
8. Name
A symbolic link shows -> and its target; ls -lLd current describes the target instead. In a terminal, GNU ls quotes names with spaces ('my file.txt') so you can paste them into a command, and indents the other names by one space to keep the column straight. In a pipe or file there are no quotes.
Ubuntu 26.04 (uutils ls)
Ubuntu 26.04 uses the Rust coreutils (ls (uutils coreutils) 0.10.0). In the same test it printed exactly the same output as GNU ls for every kind of entry above. One difference: ls -n aligned the numeric IDs to the left (1 0 0 7), where GNU aligns them to the right (1 0 0 7). GNU ls is still installed as gnuls.
To change these fields, use chmod, chown and chgrp; see making sense of 755 and rwxr-xr-x.
Ucartz services for this topic
- KVM VPS hosting: NVMe SSD and full root access, with Free Basic Managed Support.
- Unmanaged dedicated servers: full root access and free IPMI KVM, with Free Basic Managed Support.
- Linux server management: hardening, patching, monitoring and automation for Ubuntu, Debian, RHEL and AlmaLinux.
