Everyone develops their favorite tips and tricks for using Linux based on their own experience and the kind of work they are doing. Here are some of mine. These tips may seem simple, but I've found it's often the simple tricks that are the most useful in day-to-day work.
- Switch to another console. Linux lets you use "virtual consoles" to log on to multiple sessions simultaneously, so you can do more than one operation or log on as another user. Logging on to another virtual console is like sitting down and logging in at a different physical terminal, except you are actually at one terminal, switching between login sessions.
Virtual consoles are especially useful if you aren't running X, but you can use them even if you are.
In early versions of the kernel (pre-1.1.54), the number of available virtual consoles was compiled into the kernel. With more recent kernels, 63 virtual consoles are available, with 6 set up by default in the file /etc/inittab.
Use the key combination Alt+Fn to switch between virtual consoles, where Fn is one of the function keys F1-F6. (If you are in X, you'll probably need to use Ctrl-Alt-Fn instead.) Alt+F7 gets you back to your X session, if one is running. You can rotate between consoles with the Alt-right arrow and Alt-left arrow key combinations.
- Temporarily use a different shell. Every user account has a shell associated with it. The default Linux shell is bash; a popular alternative is tcsh. The last field of the password table (/etc/passwd) entry for an account contains the login shell information. You can get the information by checking the password table, or you can use the finger command. For example, the command "finger ellen" shows, among other things, that I use /bin/tcsh.
The command chsh changes the login shell for all future logins; that is, it changes the account entry in the password table to reflect the new shell. However, you can also temporarily use another shell at any time by simply running the new shell. For example, if I want to try something out in bash, I can type "bash" at the prompt and be put into a bash shell. Typing either Ctrl-d or exit gets rid of that shell and returns me to my tcsh session.
Print a man page. Here are a few useful tips for viewing or printing manpages:
To print a manpage, run the command:
man <manpage> | col -b | lpr
The col -b command removes any backspace or other characters that would make the printed manpage difficult to read.
Also, if you want to print a manpage that isn't in a standard man directory (i.e., it's in a directory that isn't specified in the MANPATH environment variable), you can specify the full pathname of the manpage, including the full filename:
If you use the Emacs editor, you can view a manpage with the command Meta-x man; Emacs then prompts you for the name of the manpage. You can view the page or print it as you would any other Emacs buffer.
As a last resort, you can format the manpage directly with the groff command. However, the default output is a PostScript file, so you'll want to either send it to a PostScript printer or to a viewer such as ghostview:
groff -man /work/myapp/mymanpage.1 | ghostview -i
You can get ASCII output with the -a option, but the result is unformatted text. Not pretty to read, but it might suffice if nothing else works.
- Use command substitution to simplify complex operations. Command substitution lets you use the output of one command as an input argument to another command. To use command substitution, determine what command will generate the output you want, put that command in backquotes, and use it as an argument to another command. For example, I often use command substitution to recursively grep the files in a directory tree:
grep 'Title' `find /work -type f -name 'chap*' -print` > chaptitles
The portion of this command in backquotes is a find command that builds a list of chapter files in the /work directory. That list is then used to provide the set of input files for grep to search for titles. The output is saved in a file called chaptitles.
- Look inside a non-text file. Sometimes you really want to see inside a binary file. Maybe there isn't a manpage and you're looking for usage information, or perhaps you're looking for information about who wrote a program or what application a file is associated with.
The strings command is perfect for that purpose--it searches through a file looking for sequences of printable character strings and writes them to standard output. You can pipe the output through a pager like more, or if you are looking for particular text, you can pipe the output to the grep command.
- Use the locate command. Looking for an easier way to find files than the find command? Try using locate. In contrast to find's complexity, locate is the ultimate in simplicity. The command:
searches an internal database and prints the pathnames of all files and directories that contain the given string in their names. You can narrow down the search by piping the output to grep. For example, the following finds all files containing the string "kde" that are in bin directories:
locate kde | grep bin
The strings don't have to be complete names; they can be partial strings, such as "gno" instead of spelling out "gnome". The -r option lets you use a regular expression (in quotes):
locate -r 'gno*'
One thing to be aware of is that locate is case-sensitive: Searching for HOWTO and for howto will give you different results.
Rather than searching the disk each time, as find does, locate depends on the creation and maintenance of a database. Because it only has to search the database, not the disk, locate is faster than find. On the other hand, the results are only as current as the database.
The locate database is generally updated daily by a cron job, but you can update it manually by running the command updatedb (usually as root). If you are adding new applications or deleting old files and you don't want to wait for the next day to have an up-to-date database, you might want to run it manually.
- Use dmesg to view startup messages. The dmesg command provides an easier way to see the boot messages than trying to read them before they scroll off the screen. When Linux boots, the kernel startup messages are captured in a buffer known as the kernel ring buffer; dmesg prints the contents of that buffer. By default, dmesg prints its output to the screen; you can of course redirect the output to a file:
% dmesg > bootmsg
- Find out what kernel version you are using. Do you ever need to know what version of the Linux kernel is running on your system? You can find out with the uname command, which prints information about the system. Issued with the -r option, uname prints the kernel version:
% uname -r
Other uname options provide information such as the machine type, the name of the operating system, and the processor. The --all option prints all the available information.
- Use df and du to maintain your disk. Use the df (display filesystem) command to keep an eye on how much space each of your filesystems occupies and how much room is left. It's almost inevitable that if you like to download new software and try it out, you'll eventually fill up your disk. df has some options, but running it without options provides the basic information--the column labeled Use% tells you how full each filesystem is:
% df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hda3 1967156 1797786 67688 96% /
Oops, time to clean house... and that's where du (disk usage) comes in handy. The du command provides the information you need to find the big space users, by printing the amount of disk space used for each file, subdirectory, and directory. You can specify the directory du is to start in, or let it default to the current directory.
If you don't want to run du recursively through subdirectories, use the -s option to summarize. In that case, you need to specify all the directories you are interested in on the command line. For example:
% du -s /usr/X11R6
% du -s /usr/X11R6/*
With the information provided by du, you can start in the directories that occupy the most disk space and delete or archive files you no longer actively use.
- Permit non-root users to mount or unmount drives. While hard drives are normally mounted automatically when the system is booted, other drives such as the floppy drive and the CD-ROM are generally not mounted until they are going to be used, so that disks can be inserted and removed. By default, root privileges are required for doing the mount (or unmount). However, you can modify the entries in the filesystem table, /etc/fstab, to let other users run the mount command. Do this by adding the option "user" to the appropriate entry:
/dev/fd0 /mnt/floppy auto noauto,user 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,ro,user,unhide 0 0
You can see what filesystems are currently mounted, and what options they were mounted with, by looking at the file /etc/mtab or by running the mount command with no options or arguments.