If you're new to Linux, it won't take long before you begin seeing files
with extensions that may seem foreign. A file's extension is the last
part of a file's name, after the final dot (in the file
sneakers.txt, "txt" was that
file's extension).
.h -- a C and C++ program language header
file
.c -- a C program language source code file
.cpp -- a C++ program language source code
file
.o -- a program object file
.pl -- a Perl script
.tcl -- a TCL script
.so -- a library file
But file extensions are not always used, or used consistently. So what
happens when a file doesn't have an extension, or the file doesn't
seem to be what the extension says it's supposed to be?
That's when the file command can come in handy.
In Chapter 3, we created a file called
saturday -- without an extension. Using the
file command, we can tell what the file is by
typing:
and we'll see it's a text file. Any file that's designated a text file
should be readable using cat,
more, or less.
Tip: To learn more about file, read the
file man page by typing man
file.
And speaking of reading files…
There are plenty of ways to read files in Linux. In Chapter 3, for example, we covered the pagers
more and less
-- they're called pagers because you can "page" through documents
one screen at a time. We also learned how we can not only view but
manipulate files with cat.
But there are even more options when it comes time to take a look at
README files, man pages or documents you've created.
You have a number of tools to help you read text files, among them,
the text editors pico,
emacs, and vim,
the pagers more and
less, and the viewers
head, tail,
cat, and grep.
Let's take a look at some of the features in these tools.
In Chapter 3, we introduced to the pager
less. Less is the pager that's used to display
man pages.
Let's view the man page for less to see
less in action.
To move forward a screen, press Space; to move back
a screen, press B, and to quit, press
Q.
There are other powerful features to less, as
well, including the ability to scroll horizontally and specify the
number of lines to scroll.
Odd as it may seem, more offers less than
less (actually, less was
inspired by more).
Let's take a look at the man page for more, but
this time, we'll open the page using more -- by
piping man's output to more.
It may not look too different at first, but there are fewer
enhancements to more than to
less. Probably the most striking difference at
first is the lack of a way to go backwards in a document -- although
moving forward by pressing Space and quitting by
pressing Q are the same.
You can use the head command if you just want to
look at the beginning of a file. The command is:
Head can be useful, but because it's limited to
the first several lines, you won't know how long the file actually
is. By default, you can only read the first 10 lines of a file,
although we can specify the number to see more by typing:
Read head's man page (man
head) for more information. You'll probably find that
less or more are more helpful,
because you can page through the file if you find that the
information you're looking for is further into the file than you
originally thought.
The reverse of head (obviously), is
tail. With (tail), you can
review the last 10 lines of a file.
The command cat, short for concatenation, will
dump the contents of the entire file on the screen. Using
cat can be handy if the file is fairly short,
such as when we created sneakers.txt. But if a
file is fairly long, it will easily scroll past you on the screen,
since cat displays the whole file.
The grep command is pretty nifty for finding
specific character strings in a file. Let's say we want to find
every reference we made to "coffee" in the file
sneakers.txt, which we created in our login
directory. We could type:
and we would see every line in which the word "coffee" could be
found.
Tip: Unless otherwise specified, grep searches are
case sensitive. That means that searching
for Coffee is different than searching for
coffee. So among grep's
options is -i, which allows you to make a
case-insensitive search through a file. Read the
grep man page for more about this command.
And don't forget about using pipes and output redirection when you
want to store and/or print information to read at a later time.
You can, for example, use grep to search for
particular contents of a file, then have those results either saved
as a file or sent to a printer.
To print the information about references to "coffee" in
sneakers.txt, for example, just type:
grep coffee sneakers.txt | lpr
|
This command behaves similar to the command ls -al /etc |
more, which you may have used in Chapter 3 to list the contents of the
/etc directory then send the results through
the more command for viewing on the screen.
Tip: Remember the distinction of using > and >>: using >
will overwrite a file, while >> appends the information to a
file. Usually, unless you're certain you want to, it's safer to
use >>, because you won't lose potentially valuable
information (though you may have to edit the file if you didn't
want to append information to it).
What if you forget the name of the file you're looking for? You
can't say to your computer, "Find a file called 'sneak' or
'sneak-something'."
Well, yes you can, in a way. Using wildcards
or regular expressions, you can perform
actions on a file or files without knowing the complete
filename. Just fill out what you know, then substitute the remainder
with a wildcard.
Tip: To read more about wildcards and regular expressions, take a look
at the bash man page (man
bash). Remember that you can save the file to a text
file by typing man bash | col -b >
bash.txt. Then, you can open and read the file with
less or pico (pico
bash.txt). If you want to print the file, be prepared:
It's quite long.
We know the file's called "sneak-something.txt," so just type:
and there's the name of the file:
You'll probably use the asterisk (*) most
frequently when you're searching. The asterisk will search out
everything that matches the pattern you're looking for. So even by
typing:
or:
you'd find sneakers.txt -- except that as time
goes on, there will be more text files, and they'll all show up
because they match the pattern you're searching for.
It helps, then, to narrow your search as much as possible.
One way to narrow that search might be to use the question mark
symbol (?). Like the asterisk, using
? can help locate a file matching a search
pattern.
In this case, though, ? is useful for matching a
single character -- so if you were searching for
sneaker?.txt, you'd get
sneakers.txt as a result -- and/or
sneakerz.txt, if there were such a filename.
When an asterisk, for example, just happens to be part of a
filename, such as might be the case if the file
sneakers.txt was called
sneak*.txt, that's when regular expressions can
come in handy.
Regular expressions are more complex than the straightforward
asterisk or question mark.
Using the backslash (\), you can specify that you
don't want to search out everything by using
the asterisk, but you're instead looking for a file with an asterisk
in the name.
If the file is called sneak*.txt, then, type:
Here is a brief list of wildcards and regular expressions:
* -- Matches all characters
? -- Matches one character in a string
(such as sneaker?.txt)
\* -- Matches the * character
\? -- Matches the ? character
\) -- Matches the ) character
You can also use wildcards for more than searching: they can come in
handy when you want to move and rename files. And regular
expressions can help you rename files with characters like * and ?
in them.
For more on that, read on.