Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

locked by voretaq7 Feb 27 '12 at 22:37

This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

54 Answers 54

ESC + .

'Pastes' the last parameter from the previous line into the current prompt


ls -l /home/someuser/somedir/somefile

followed by

rm ESC + .

translates to

rm /home/someuser/somedir/somefile

My top 5 "hidden" features (hopefully these aren't already up here)

  1. cd - try it out :)
  2. named pipes are not used enough and you can do some really cool stuff with them
  3. system tap, although I'm not great at it and you really need to know your kernel it wields incredible power to the right user.
  4. The combination of piping a list to sort, then to uniq -c and then to sort -n can really work wonders. You can use that to get your top talkers out of an Apache log file or the memory hogs from ps -o.
  5. The proc/sys interface/filesystem. There is so much there that you can adjust/view in real time. Wrapping a cat or grep of statement in watch -d -n 0.1 is awesome and very handy.

Notables are dd, netcat, screen, tcpdump and find but most have been mentioned already.


history - shows last used commands
!<number> - executes the command with that number in history


Here are a few I've used on a regular basis:

  • sar - shows system activity
  • vmstat - virtual memory stats
  • iostat - io stats
  • pkill - like pgrep but allows you to kill the returned process ID
  • xargs -I<string> - allows for replacing strings with piped data
  • at - schedule a task
  • tkdiff - graphical diff utility

These are probably not "hidden", but I find them extremely useful:

  • df -hk - show disk usage in human readable format
  • ls -ltr - list files sorted by date
  • while :; do...done - (Bash) replacement for watch if unavailable
  • perl -e - run a Perl snippet on the command-line
  • free -kt - show memory information (kilobytes w/total)

For me, the greatest feature is that nothing is really "hidden" - it's all there right under your eyes if you bother to read the documentation or code.


Not really a Linux thing, more of a Bash thing: process substitution,

diff some_local_file <(ssh somehost "cat some_remote_file")

This diffs a local and a remote file retrieved via SSH in one line.


The concept is that everything in Linux is a file.

All configurations are in text files, and everything in Linux is treated as a file. This is a much simpler approach which makes it very easy to change things in Linux. In Linux even your filesystem itself can be viewed as a file.


Usually people run their desktop system with X. But you can usually access true text-mode terminal, several of them actually. These are called virtual consoles. You can then normally login and use command-line, etc.

Just hit Ctrl + Alt + F1, Ctrl + Alt + F2, etc. Your X-server is generally running at Ctrl + Alt + F7.

This of course is distribution and configuration dependent.

Also this command to kill the X-server is sometimes useful: Ctrl + Alt + Backspace.

These key combinations work at least on i86 PC's.

ctrl-alt-backspace is disabled on Ubuntu 9.04 (Code name jaunty). Follow this guide if you want to enable it wiki.ubuntu.com/X/Config/DontZap –  LiraNuna Jun 22 '09 at 9:34

Just found this one today:

Reports information about your system's hardware as described in your system BIOS according to the SMBIOS/DMI standard. This information typically includes system manufacturer, model name, serial number, BIOS version, asset tag as well as a lot of other details of varying level of interest and reliability depending on the manufacturer. This will often include usage status for the CPU sockets, expansion slots (e.g. AGP, PCI, ISA) and memory module slots, and the list of I/O ports (e.g. serial, parallel, USB).

It definitely makes answering questions about somerandomserver27 at the colo facility a lot easier!


Never used script(1) to save a terminal session?
apg(1) to make random passwords
do you want to know how many processors/cores you have? nproc(1)
sfdisk(8) great partition tool
multitail(1) multiple tail at once...great tool


find is my greatest tool. I use it to locate things, and execute commands on files or directories found.

No system is complete without ssh too.


A post that I have made on Stack Overflow: How to list only subdirectories in the current one?

ls -d */

It's a simple trick, but you wouldn't know how much time I needed to find that one!


Let's see ...

  • I use bash color codes in my /root/.bash_profile to make my root bash prompt a different color than my non-root standard user prompt. Just one more reminder that I'm a single command away from destroying an entire system. ;)

  • I use nc (netcat) a lot to test things. Nice utility with a lot of versatility.

  • For the longest time I never knew that chown could accept both username and groupname together as an argument, i.e.: chown user:group -R /some/directory. That fact has saved me a lot of typing (no more chown/chgrp pairs).

  • The df command's a quick shortcut to see all your mounted filesystems.

  • I use pgrep a lot in scripts to see if a process is running.

  • kexec is pretty neat, lets you reboot without going through BIOS, which shortens reboot times significantly. Don't really reboot a lot, though...


ctrl + r : searches history for the last command with the letters you specify


For "hidden" feature as in most often overlooked or missed by users new to Linux (/Unix).

  • man man
  • man -k <blah> or apropos <blah>

"Hidden" features


POSIX Capabilities & File POSIX Capabilities



dd - convert and copy files

I use this very frequently to make copys of DVD's or HDD Patitions that I need to backup.

dd if=/dev/sda2 of=/tmp/copy_of_sda2

it's very handy and configurable, just have a look at it's man page


logger lets you write messages to syslog from the shell prompt or a script.

logger "See? There! It happened again!"

I simply can't do without these commands

  • ps -fA (list all running programs
  • lsof (list of open files per process)
  • pushd . (push current directory onto the directory stack)
  • popd . (pop current directory from the directory stack)
  • local account home directory ~/ you can also access a user directory like ~username.
  • replace current bash profile after you've made changes without logging back in. ". ~/.bashrc
  • grep -inR (recursive grep, i = case insensitive, n = show like number, R = recursive)

Perhaps one of the great features of Linux, as opposed to Windows, is that there are next to no hidden features by design. Hopefully if any undocumented features are important enough to know about the community does its job.



e.g. fgrep -r * --include=*.rb

walks the dir structure from the current directory looking for in ruby source files

and is much easier to use than find


I see the yes command very nice:

yes | do_you_agree

From man page:

       yes - output a string repeatedly until killed

       yes [STRING]...
       yes OPTION

NX combines some of the benefits of screen and ssh -X with clever compression. Now I can run gnumeric remotely over a modem connection and resume it when the connection dies.

lsof -i - list all opened socket
htop - like top, but with more eye candy
rdiff-backup - for incremental backup
mc - midnight commander 
ethstatus - ethernet statistics
netstat, nmap
iftop - display bandwidth usage on an interface by host

The power and flexibility of SSH never cease to amaze me. Also the ability to make a raid array out of anything (floppies, anyone?), all the filesystems available, cool stuff like LVM, the crypto tools, the possibility of crafting your own tools with the myriad of compilers, interpreters, languages... Oh, and not forgetting getting new stuff installed with apt-get or similar.

It is just so much brilliant than windows.


bash history - I normally have 10 or so xterms running. Here is the relavent part of my profile:

# Make history ignore dups, ls, and exit
export HISTIGNORE="&:ls:[bf]g:exit"

# Save 100000 history comamnds
export HISTSIZE=10000

# Make each terminal use a separate history file
SHELLID=$(tty | sed 's!/!.!g')

touch ${HISTFILE}

# load last histfile as current history
history -r $(/bin/ls ${HISTDIR}/history${SHELLID} | /usr/bin/tail -n 1)

If I need to search for a command, I can just grep through my history directory.

aespipe - reads from standard input and writes to standard output. It can be used to create and restore encrypted tar or cpio archives.


To change to the last directory you were in:

cd -

Network stack can be left running after a system halt. I don't know if this is current with the 2.6.x series of kernels, but on older versions, you could configure the firewall/routing, then halt the system without a shutdown, leaving just the network stack running. This would allow you to make a cheap (although static) firewall that "can't be hacked" - because there's nothing to hack, as there are no programs or services, just the network stack portion of the kernel passing packets back and forth...

"Kernel"? What is this "Kernel" you speak of? When it goes into this mode, the only code running is the /network stack/. No task scheduling, no APIs, code, services, user space, nothing, zip, nada...just the faint sound of packets echoing through ethernet... Think of it as more of an embedded device with two functions in life - accept, and send, packets. I suppose you could "hack" this in the sense that you can try and sneak packets through, but there's nothing you can /directly/ attack in the stack itself. –  Avery Payne May 29 '09 at 19:51

find <blah> -exec <blah> {} \;


find . -iname *20080[123456].log -a ! -iname *.bz2 -exec bzip2 \{\} \;


ssh-copy-id for transferring ssh keys. The old way was to cat the key over ssh and even older was to scp the key and then cat the key. If you are using a non-standard ssh port then this will do the trick for you ..

ssh-copy-id -i /path/to/key '-p nonstandardport hostname'

Other wise..

ssh-copy-id -i /path/to/key hostname


Not the answer you're looking for? Browse other questions tagged or ask your own question.