You need more information about a file, such as what it is, who owns it, if it’s executable, how many hard links it has, or when it was last accessed or changed.
Use the ls, stat, file, or find commands.
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 |
$ touch /tmp/sample_file $ ls /tmp/sample_file /tmp/sample_file $ ls -l /tmp/sample_file -rw-r--r-- 1 jp jp 0 Dec 18 15:03 /tmp/sample_file $ stat /tmp/sample_file File: "/tmp/sample_file" Size: 0 Blocks: 0 IO Block: 4096 Regular File Device: 303h/771d Inode: 2310201 Links: 1 Access: (0644/-rw-r--r--) Uid> :( 501/ jp) Gid: ( 501/ jp) Access: Sun Dec 18 15:03:35 2005 Modify: Sun Dec 18 15:03:35 2005 Change: Sun Dec 18 15:03:42 2005 $ file /tmp/sample_file /tmp/sample_file: empty $ file -b /tmp/sample_file empty $ echo '#!/bin/bash -' > /tmp/sample_file $ file /tmp/sample_file /tmp/sample_file: Bourne-Again shell script text executable $ file -b /tmp/sample_file Bourne-Again shell script text executable |
For much more on the find command, see all of Chapter 9.
The command ls shows only filenames, while ls -l provides more details about each file. ls has many options; consult the manpage on your system for the ones it supports. Useful options include:
-a
Do not hide files starting with . (dot)
-F
Show the type of file with one of these trailing type designators: /*@%=|
-l
Long listing
-L
Show information about the linked file, rather than the symbolic link itself
-Q
Quote names (GNU extension, not supported on all systems)
-r
Reverse sort order
-R
Recurse though subdirectories
-S
Sort by file size
-1
Short format but only one file per line
When using -F a slash (/) indicates a directory, an asterisk (*) means the file is executable, an at sign (@) indicates a symbolic link, a percent sign (%) shows a whiteout, an equal sign (=) is a socket, and a pipe or vertical bar (|) is a FIFO.
stat, file, and find all have many options that control the output format; see the manpages on your system for supported options.
For example, these options produce output that is similar to ls -l:
1 2 3 4 5 6 7 8 |
$ ls -l /tmp/sample_file -rw-r--r-- 1 jp jp 14 Dec 18 15:04 /tmp/sample_file $ stat -c'%A %h %U %G %s %y %n' /tmp/sample_file -rw-r--r-- 1 jp jp 14 Sun Dec 18 15:04:12 2005 /tmp/sample_file $ find /tmp/ -name sample_file -printf '%m %n %u %g %t %p' 644 1 jp jp Sun Dec 18 15:04:12 2005 /tmp/sample_file |
Not all operating systems and versions have all of these tools. For example, Solaris does not include stat by default.
It is also worth pointing out that directories are nothing more than files that the operating system knows to treat specially.
So the commands above work just fine on directories, though sometimes you may need to modify a command to get the behavior you expect.
For example, using ls -d to list information about the directory, rather than just ls (listing the contents of the directory).