6 Remove the files house6, house7, and house8 without being prompted.
7 Move house3 and house4 to the $HOME/projects/houses/doors directory.
8 Remove the $HOME/projects/houses/doors directory and its contents.
9 Change the permissions on the $HOME/projects/house2 file so that it can be read by and written to by the user who owns the file, only read by the group, and have no permission for others.
10 Recursively change permissions of the $HOME/projects/ directory so that nobody has write permission to any files or directory beneath that point in the filesystem.
CHAPTER 5 Working with Text Files
IN THIS CHAPTER
Using vim and vi to edit text files
Searching for files
Searching in files
When the UNIX system, on which Linux was based, was created, most information was managed on the system in plain-text files. Thus, it was critical for users to know how to use tools for searching for and within plain-text files and to be able to change and configure those files.
Today, configuration of Linux systems can still be done by editing plain-text files. Whether you are modifying files in the /etc
directory to configure a local service or editing Ansible inventory files to configure sets of host computers, plain-text files are still in common use for those tasks.
Before you can become a full-fledged system administrator, you need to be able to use a plain-text editor. The fact that most professional Linux servers don't even have a graphical interface available makes the need for editing of plain-text configuration files with a non-graphical text editor necessary.
After you know how to edit text files, you still might find it tough to figure out where the files are located that you need to edit. With commands such as find
, you can search for files based on various attributes (filename, size, modification date, and ownership to name a few). With the grep
command, you can search inside of text files to find specific search terms.
Editing Files with vim and vi
It's almost impossible to use Linux for any period of time and not need a text editor because, as noted earlier, most Linux configuration files are plain-text files that you will almost certainly need to change manually at some point.
If you are using a GNOME desktop, you can run gedit
(type gedit into the Search box and press Enter, or select Applications ➪ Accessories ➪ gedit), which is fairly intuitive for editing text. You can also run a simple text editor called nano
from the shell. However, most Linux shell users use either the vi
or emacs
command to edit text files.
The advantage of vi
or emacs
over a graphical editor is that you can use the command from any shell, character terminal, or character-based connection over a network (using telnet
or ssh,
for example)—no graphical interface is required. They each also contain tons of features, so you can continue to grow with them.
The following sections provide a brief tutorial on the vi
text editor, which you can use to manually edit a text file from any shell. It also describes the improved versions of vi
called vim
. (If vi
doesn't suit you, see the sidebar “Exploring Other Text Editors” for further options.)
The vi
editor is difficult to learn at first, but after you know it, you never have to use a mouse or a function key—you can edit and move around quickly and efficiently within files just by using the keyboard.
Exploring Other Text Editors
Dozens of text editors are available for use with Linux. Some alternatives might be in your Linux distribution. You can try them out if you find vi
to be too taxing. Here are some of the options:
nano: This popular, streamlined text editor is used with many bootable Linux systems and other limited-space Linux environments. For example, nano is available to edit text files during a Gentoo Linux install process.
gedit: The GNOME text editor runs on the desktop.
jed: This screen-oriented editor was made for programmers. Using colors, jed can highlight code that you create so that you can easily read the code and spot syntax errors. Use the Alt key to select menus to manipulate your text.
joe: The joe editor is similar to many PC text editors. Use control and arrow keys to move around. Press Ctrl+C to exit with no save or Ctrl+X to save and exit.
kate: This nice-looking editor comes in the kdebase package. It has lots of bells and whistles, such as highlighting for different types of programming languages and controls for managing word wrap.
kedit: This GUI-based text editor comes with the KDE desktop.
mcedit: In this editor, function keys help you get around, save, copy, move, and delete text. Like jed and joe, mcedit is screen oriented. It comes in the mc package in RHEL and Fedora.
nedit : This is an excellent programmer's editor. You need to install the optional nedit package to get this editor.
If you use ssh
to log in to other Linux computers on your network, you can use any available text editor to edit files. If you use ssh -X
to connect to the remote system, a GUI-based editor pops up on your local screen. When no GUI is available, you need a text editor that runs in the shell, such as vi
, jed
, or joe
.
Starting with vi
Most often, you start vi
to open a particular file. For example, to open a file called /tmp/test
, enter the following command:
$ vi /tmp/test
If this is a new file, you should see something similar to the following:
□ ~ ~ ~ ~ ~ "/tmp/test" [New File]
A blinking box at the top represents where your cursor is located. The bottom line keeps you informed about what is going on with your editing (here, you just opened a new file). In between, there are tildes (~
) as filler because there is no text in the file yet. Now here's the intimidating part: There are no hints, menus, or icons to tell you what to do. To make it worse, you can't just start typing. If you do, the computer is likely to beep at you. (And some people complain that Linux isn't friendly.)
First, you need to know the two main operating modes: command and input. The vi
editor always starts in command mode. Before you can add or change text in the file, you have to type a command (one or two letters, sometimes preceded by an optional number) to tell vi
what you want to do. Case is important, so use uppercase and lowercase exactly as shown in the examples!
NOTE
On Red Hat Enterprise Linux, Fedora, and other Linux distributions, for regular users the vi
command is aliased to run vim
. If you type alias vi
, you should see alias vi='vim'
. The first obvious difference between vi
and vim
is that any known text file type, such as HTML, C code, or a common configuration file, appears in color. The colors indicate the structure of the file. Other features of vim
that are not in vi
include features such as visual highlighting and split-screen mode. By default, the root user doesn't have vi
aliased to