CHAPTER 7
In a preceding chapter, you learned that the cat command displays the entire contents of a file. If you would like to navigate the contents of a file, you can use a pager utility such as more or less. To display the top portion of a file, use the head command. The tail command allows you to display the end of a file.
cat file Concatenate (display) the entire contents of a file.
more file Browse through a text file. Press the Spacebar to advance to the next page. Press Enter to advance to the next line. Type q to quit viewing the file.
less file Like more, but allows backward movement and pattern searches.
head file Display the beginning portion of file.
tail file Display the ending portion of file.
$ cat goals.txt 1) Write a book. 2) Travel the world. 3) Learn a foreign language. 4) Learn to play an instrument. 5) Run a marathon. 6) Skydive. 7) Start a business. 8) Swim with dolphins. 9) Own a home. 10) Be an extra in a movie. 11) Win an Olympic medal. 12) Be a millionaire. $ head goals.txt 1) Write a book. 2) Travel the world. 3) Learn a foreign language. 4) Learn to play an instrument. 5) Run a marathon. 6) Skydive. 7) Start a business. 8) Swim with dolphins. 9) Own a home. 10) Be an extra in a movie. $ tail goals.txt 3) Learn a foreign language. 4) Learn to play an instrument. 5) Run a marathon. 6) Skydive. 7) Start a business. 8) Swim with dolphins. 9) Own a home. 10) Be an extra in a movie. 11) Win an Olympic medal. 12) Be a millionaire. $ more goals.txt 1) Write a book. 2) Travel the world. 3) Learn a foreign language. 4) Learn to play an instrument. 5) Run a marathon. ... |
The head and tail commands display 10 lines by default. To specify a specific number of lines to display, append -N to the command where N is the number of lines you want to display. For example, to display the first line in a file, run head -1 file.
$ head -2 goals.txt 1) Write a book. 2) Travel the world. $ tail -1 goals.txt 12) Be a millionaire. $ |
If you want to view files as they are being updated, use tail -f file. The -f flag makes the tail command follow the file as it grows. This is great for viewing log files. You can also use the less command. After running less file, type F to start following the file as it grows.
$ tail -f /opt/nginx/logs/access.log 10.10.10.10 - - [28/Jun/2014:18:38:48 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36" 11.11.11.11 - - [28/Jun/2014:18:39:16 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36" ... |
An extremely simple, but ample text editor is nano. It doesn't have advanced editing features, but if you are looking to make simple changes to a file, this will surely work. To edit an existing file or create a new one, run nano file-name. When it loads, you will see the contents of the file and a list of available commands at the bottom of the screen. The caret symbol represents the Ctrl key. For example, to exit the editor type Ctrl-x, and to save the file type Ctrl-o. For help, type Ctrl-g.
In addition to using the navigation commands listed at the bottom of the screen, you can simply use the arrow keys, the Page Up and Page Down keys, and the Home and End keys. To add text, simply type it. Deleting text is as simple as using the Delete and Backspace keys. To delete an entire line, use Ctrl-k.
GNU nano 2.2.6 File: to-do.txt This file contains my to-do list. * Mow the lawn. * Take over the world. [ Read 3 lines ] ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell |
If you are looking for an editor that has advanced editing capabilities, and one that you can use at the command line, use vi or Emacs. On a Linux system, when you attempt to use vi, you will actually be using Vim, short for vi improved. The vi command is typically symlinked to Vim. The Vim editor is compatible with the commands found in the vi editor, which was originally created for the Unix operating system. Vim includes additional features not found in vi, including syntax highlighting, the ability to edit files over the network, multi-level undo and redo, and screen splitting. One advantage of learning Vim or vi is that you can apply the key mappings to other commands, such as man, more, less, and view.
One unique characteristic of the vi and Vim editors is the concept of modes. The three modes in Vim are command, insert, and line. Vim starts in command mode. To get back to command mode at any time, simply press the Escape key. When in command mode, the keys sent to the editor do not end up in the file, but are rather interpreted as commands. Command mode allows you to navigate about the file, perform searches, delete text, copy text, paste text, and more.
Action | Key |
|---|---|
Move up one line. | k |
Move down one line. | j |
Move left one character. | h |
Move right one character. | l |
Move right one word. | w |
Move left one word. | b |
Move to the beginning of the line. | ^ |
Move to the end of the line. | $ |
The commands are case sensitive. For example, lowercase L moves the cursor right one character, but uppercase L moves the cursor to the bottom of the window. Even though the original vi editor did not allow you to use arrow keys, Vim does. Even though you can use the arrow keys, some argue that using the original vi key bindings can be faster since your hand does not have to leave the home row.
Insert mode allows you to actually type text in a file. To enter insert mode, press i, I, a, or A. After you have entered the desired text, you can press the Escape key to return to command mode.
Action | Key |
|---|---|
Insert at the current position. | i |
Insert at the beginning of the line. | I |
Append after the cursor position. | a |
Append at the end of the line. | A |
Line mode, sometimes called command line mode, is accessed from command mode by typing a colon. Line mode allows you to save a file, exit the editor, replace text, and perform some forms of navigation. The following are some of the most common line mode commands you will want to familiarize yourself with.
Action | Key |
|---|---|
Writes, or saves, the file. | :w |
Forces the file to be saved even if the write permission is not set. | :w! |
Quits the editor. This fails if there are unsaved changes to the file. | :q |
Quit without saving the file. | :q! |
Write and quit. | :wq! |
Same as :wq! | :x |
Position the cursor at line n. | :n |
Position the cursor on the last line of the file. | :$ |
Turn on line numbering. | :set nu |
Turn off line numbering. | :set nonu |
Access the built-in help documentation. | :help [subcommand] |
Most commands can be repeated by preceding them with a number. For example, to move the cursor down three lines, type 3j. To insert the same piece of text 20 times, type 20i followed by the desired text, and press Escape when you are finished. The insert operation will repeat 20 times. To insert a line of underscores, type 80i_ and press Escape.
The following tables list some additional key combinations to use while in the command mode.
Action | Key |
|---|---|
Delete a character. | x |
Delete a word. | dw |
Delete a line. | dd |
Delete from the current position to the end of the line. | D |
Action | Key |
|---|---|
Replace the current character. | r |
Change the current word. | cw |
Change the current line. | cc |
Change the text from the current position to the end of the line. | c$ |
Same as c$. | C |
Reverse the case of the character at the current position. | ~ |
Action | Key |
|---|---|
Yank, or copy, the current line. | yy |
Yank the <position>. To yank a word, type yw. | y<position> |
Paste the most recent yanked or deleted text. | p |
Delete from the current position to the end of the line. | D |
Action | Key |
|---|---|
Undo | u |
Redo | Ctrl-r |
Action | Key |
|---|---|
Start a forward search for <pattern>. | /<pattern> |
Start a reverse search for <pattern>. | ?<pattern> |
Another powerful text editor that you can use at the command line is Emacs. Emacs relies heavily on compound keyboard shortcuts. In the Emacs documentation, you will see C-<character>, which means press and hold Ctrl and then press <character>. For example, if you see C-x, that means hold down Ctrl and press x. You will also see sequences, like C-x u. That means hold down Ctrl and press x, release the Ctrl key, and then press u. C-x C-c means press and hold Ctrl, press x, and then press c while still holding Ctrl.
You will also encounter M-<character>, which means hold down the meta key, which is the Alt key, and press <character>. A substitute to holding down Alt as the meta key is to press and release the Esc key instead. For example, you can press and hold Alt and press b to represent M-b, or you can press Esc followed by the b key. Some terminal emulators intercept the Alt key, so you may be forced to use Esc as the meta key in some situations.
Action | Key |
|---|---|
Help. | C-h |
Exit. | C-x C-c |
Save the file. | C-x C-s |
Access the built-in tutorial. | C-h t |
Describe <key>. | C-h k <key> |
Repeat <command> N times. | C-u N <command> |
Action | Key |
|---|---|
Move to the previous line. | C-p |
Move to the next line. | C-n |
Move backward one character. | C-b |
Move forward one character. | C-f |
Move forward one word. | M-f |
Move backward one word. | M-b |
Move to the beginning of the line. | C-a |
Move to the end of the line. | C-e |
Move to the beginning of the file. | M-< |
Move to the end of the file. | M-> |
Action | Key |
|---|---|
Delete a character. | C-d |
Delete a word. | M-d |
Action | Key |
|---|---|
Kill, or cut, the rest of the current line. | C-k |
Yank, or paste, from the previously killed text. | C-y |
Undo. Repeat for multiple-level undo. | C-x u |
Action | Key |
|---|---|
Start a forward search. Type the text you are looking for and press C-s to move to the next occurrence. Press Enter to stop searching. | C-s |
Start a reverse search. | C-r |
Nano, Vim, and Emacs are great for editing files at the command line. However, if you are using a GUI, you have many more options, but don't think that the effort you put into learning Vim or Emacs is worthless in a graphical environment. The graphical version of Vim is gVim. If you are using a GUI, Emacs detects this and starts in graphical mode.
If you are looking for a word processor, consider LibreOffice or AbiWord. LibreOffice is an office suite which not only includes a word processor, but ships with a spreadsheet program, a database application, and presentation software.
There are also specialty editors available for the Linux operating system. If you are looking for an IDE or a source code editor, consider jEdit, Geany, Kate, or Sublime Text. The editors listed in the following table are just a sampling of what is available.
Description | Editor |
Graphical version of Vim. | gVim |
Graphical version of Emacs. | Emacs |
A Notepad-like editor for the GNOME desktop environment. | gedit |
The default text editor for the KDE desktop environment. | KEdit |
Word processor. | AbiWord |
Office suite. | LibreOffice |
Programmer’s text editor. | jEdit |
A small and fast IDE. | Geany |
A multi-document editor. | Kate |
An editor for source code. | Sublime Text |