Looking in the source code of coreutils, I found out that total will always be displayed when using the -l option on directories.
Using the -d option to list entries instead of directory contents hides total. But if you run that without arguments (or on a directory), it'll just show the directory and not its contents. Therefore, you need wildcards. * matches all files and .* matches hidden files as well (which corresponds with the -a option):
ls -ld * .*
As for the -h option, it works for me. 1118360 bytes show up as 1.1M. Files smaller than 1024 show up in bytes.
ls -l | tail -n+2, for the rest I do not have an answer. – enzotib Sep 13 '11 at 9:25lsl. Just 3 letters ;) oh and ls -lh shows me 1.2K styled sizes. – Rinzwind Sep 13 '11 at 9:30