The lsof program is a great tool to find open files. One case you might need this is to find a process that has an open file on a device you are trying to unmount. Another is if you want to determine what files a certain process is opening.
List your own open files (includes sockets and pipes):
List all open files on the system (includes sockets and pipes), must be root:
List open files for certain processes, must be root:
lsof -c pattern
where pattern is the first few letters of the process name or a regular expression between forward slashes /regexp/.
List all open network sockets, must be root:
Useful to make sure something unexpected isn't listening to the network.