Exploring Linux Command-Line Tools PDF

Document Details

Uploaded by Deleted User

CompTIA

Tags

Linux programming command-line tools CompTIA Linux+ programming

Summary

This document is a chapter on exploring Linux command-line tools, covering topics like CompTIA Linux+ objectives and understanding command-line basics.

Full Transcript

Chapter Exploring Linux 1 Command-Line Tools The following CompTIA Linux+ objectives are covered in this chapter: 1.103.1 Work on the command line ÛÛ 1.103.2 Process text streams using filters ÛÛ 1.103....

Chapter Exploring Linux 1 Command-Line Tools The following CompTIA Linux+ objectives are covered in this chapter: 1.103.1 Work on the command line ÛÛ 1.103.2 Process text streams using filters ÛÛ 1.103.4 Use streams, pipes, and redirects ÛÛ 1.103.7 Search text files using regular expressions ÛÛ Linux borrows heavily from Unix, and Unix began as a text- based operating system (OS). Unix and Linux retain much of this heritage, which means that to understand how to use and, especially, administer Linux, you must understand at least the basics of its command- line tools. Thus, this book begins with an introduction to Linux shells (the programs that accept and interpret text-mode commands) and many of the basic commands and procedures you can use from a shell. This chapter begins with basic shell information, including shell options and procedures for using them. From there, this chapter covers streams, pipes, and redirects, which you can use to shunt input and output between programs or between files and programs. These techniques are frequently combined with text processing using filters—commands you can use to manipulate text without the help of a conventional text editor. Sometimes you must manipulate text in an abstract way, using codes to represent several different types of text. This chapter therefore covers this topic. Understanding Command-Line Basics Before you do anything else with Linux, you should understand how to use a Linux shell. Several shells are available, but most provide similar capabilities. Understanding a few basics will take you a long way in your use of Linux, so I describe some of these techniques and commands. You should also understand shell environment variables, which are place- holders for data that may be useful to many programs. Finally, on the topic of command- line basics, you should know how to get help with commands you’re trying to use. Exploring Your Linux Shell Options As with many key software components, Linux provides a range of options for shells. A complete list would be quite long, but the more common choices include the following: bash ​ T he GNU Bourne Again Shell (bash) is based on the earlier Bourne shell for Unix  ​ but extends it in several ways. In Linux, bash is the most common default shell for user accounts, and it’s the one emphasized in this book and on the Linux+ exam. Understanding Command-Line Basics 5 bsh The Bourne shell upon which bash is based also goes by the name bsh. It’s not often used in Linux, although the bsh command is sometimes a symbolic link to bash. tcsh This shell is based on the earlier C shell (csh). It’s a fairly popular shell in some circles, but no major Linux distributions make it the default shell. Although it’s similar to bash in many respects, some operational details differ. For instance, you don’t assign environment variables in the same way in tcsh as in bash. csh The original C shell isn’t much used on Linux, but if a user is familiar with csh, tcsh makes a good substitute. ksh The Korn shell (ksh) was designed to take the best features of the Bourne shell and the C shell and extend them further. It has a small but dedicated following among Linux users. zsh The Z shell (zsh) takes shell evolution further than the Korn Shell, incorporating features from earlier shells and adding still more. In addition to these shells, dozens more obscure ones are available. In Linux, most users run bash because it’s the default. Some other OSs use csh or tcsh as the default, so if your users have backgrounds on non-Linux Unix-like OSs, they may be more familiar with these other shells. You can change a user’s default shell by editing the account, as described in Chapter 7, “Administering the System.” The fi le /bin/sh is a symbolic link to the system’s default shell—normally /bin/bash for Linux. This practice enables you to point to a shell (say, at the start of a simple shell script, as described in Chapter 9, “Writing Scripts, Configuring E-Mail, and Using Databases”) and be assured that a shell will be called, even if the system’s available shells change. This feature is particularly important when developing shell scripts that might be run on other computers, as described in Chapter 9. Using a Shell Linux shell use is fairly straightforward for anybody who’s used a text-mode OS before: You type a command, possibly including options to it, and the computer executes the command. For the most part, Linux commands are external—that is, they’re separate programs from the shell. A few commands are internal to the shell, though, and knowing the distinction can be important. You should also know some of the tricks that can make using the command shell easier—how to have the computer complete a long command or filename, retrieve a command you’ve recently run, or edit a command you’ve recently used (or haven’t yet fully entered). One class of commands—those for handling basic file management—is very important but isn’t described here in great detail. For more informa- tion on these commands, consult Chapter 4, “Managing Files.” 6 Chapter 1 n Exploring Linux Command-Line Tools Starting a Shell If you log into Linux using a text-mode login screen, chances are you’ll be dropped directly into your default shell—the shell is what presents the prompt and accepts subsequent commands. If you log into Linux using a graphical user interface (GUI) login screen, though, you’ll have to start a shell manually. Some GUIs provide a menu option to start a program called a terminal, xterm, Konsole, or something similar. These programs enable you to run text- mode programs within Linux, and by default they come up running your shell. If you can’t find such a menu option, look for one that enables you to run an arbitrary command. Select it, and type xterm or konsole as the command name; this will launch an xterm-type pro- gram that will run a shell. Using Internal and External Commands Internal commands are, as you might expect, built into the shell. Most shells offer a similar set of internal commands, but shell-to-shell differences do exist; consult your shell’s man page (as described later, in “Getting Help”) for details, particularly if you’re using an exotic shell. Internal commands you’re likely to use enable you to perform some common tasks: Change the working directory ​ ​Whenever you’re running a shell, you’re working in a specific directory. When you refer to a file without providing a complete path to the file, the shell works on the file in the current working directory. (Similar rules apply to many programs.) The cd command changes the current working directory. For instance, typing cd /home/sally changes to the /home/sally directory. The tilde (~) character is a useful shortcut; it stands for your home directory, so cd ~ will have the same effect as cd /home/sally if your home direc- tory is /home/sally. Display the working directory ​ ​The pwd command displays (“prints” to the screen) the cur- rent working directory. Display a line of text ​ ​The echo command displays the text you enter; for instance, typing echo Hello causes the system to display the string Hello. This may seem pointless, but it’s useful in scripts (described in Chapter 9), and it can also be a good way to review the contents of environment variables (described later in this chapter, in “Using Environment Variables”). Execute a program ​ ​The exec command runs an external program that you specify, as in exec myprog to run myprog. In most cases, this is better accomplished by typing the name of the program you want to run. The exec command has one special feature, though: Rather than create a new process that runs alongside the shell, the new process replaces the shell. When the new process terminates, it’s as if you terminated the shell. Time an operation ​ ​The time command times how long subsequent commands take to execute. For instance, typing time pwd tells you how long the system took to execute the pwd command. The time is displayed after the full command terminates. Three times are displayed: total execution time (a.k.a. real time), user CPU time, and system CPU time. The final two values tell you about CPU time consumed, which is likely to be much less than the total execution time. Understanding Command-Line Basics 7 Set options In its most basic form, set displays a wide variety of options relating to bash oper- ation. These options are formatted much like environment variables, but they aren’t the same things. You can pass various options to set to have it affect a wide range of shell operations. Terminate the shell The exit and logout commands both terminate the shell. The exit command terminates any shell, but the logout command terminates only login shells—that is, those that are launched automatically when you initiate a text-mode login as opposed to those that run in xterm windows or the like. This list isn’t complete. Later sections of this chapter and later chapters describe some additional internal commands. Consult your shell’s docu- mentation for a complete list of its internal commands. Some of these internal commands are duplicated by external commands that do the same thing, but these external commands aren’t always installed on all systems. Even when these external commands are installed, the internal command takes precedence unless you provide the complete path to the external command on the command line, as in typing /bin/pwd rather than pwd. Confusion over Internal and External Commands When duplicate internal and external commands exist, they sometimes produce subtly different results or accept different options. These differences can occasionally cause problems. For instance, consider the pwd command and symbolic links to directories. (Symbolic links are described in more detail in Chapter 4. For now, know that they’re files that point to other files or directories and for most intents and purposes can be accessed just like the files or directories to which they point.) Suppose you create a symbolic link to /bin within your home directory and then cd into that directory. You then want to know where you are. The pwd command that’s internal to bash will produce a different result from the external pwd command: $ pwd /home/sally/binlink $ /bin/pwd /usr/bin As you can see, bash’s internal pwd shows the path via the symbolic link, whereas the external command shows the path to which the link points. Sometimes these differ- ences can cause confusion, such as if you read the man page or other documentation that describes one version but you use the other and a difference is important. You may won- der why the command isn’t operating as you expect. If in doubt, look up the documenta- tion for, and type the complete path to, the external command to be sure you use it. 8 Chapter 1 N Exploring Linux Command-Line Tools When you type a command that’s not recognized by the shell as one of its internal com- mands, the shell checks its path to fi nd a program by that name to execute it. The path is a list of directories in which commands can be found. It’s defi ned by the PATH environment variable, as described shortly in “Using Environment Variables.” A typical user account has about half a dozen or a dozen directories in its path. You can adjust the path by changing the PATH environment variable in a shell configuration fi le, as described in “Exploring Shell Configuration.” You can run programs that aren’t on the path by providing a complete path on the com- mand line. For instance, typing./myprog runs the myprog program in the current directory, and /home/arthur/thisprog runs the thisprog program in the /home/arthur directory. The root account should normally have a shorter path than ordinary user accounts. Typically, you’ll omit directories that store GUI and other user- oriented programs from root’s path in order to discourage use of the root account for routine operations, thus minimizing the risk of security breaches related to buggy or compromised binaries being run by root. Most important, root’s path should never include the current directory (./). Placing this directory in root’s path makes it possible for a local miscreant to trick root into running replacements for common programs, such as ls, by having root change into a directory with such a program. Indeed, omitting the current directory from ordinary user paths is also generally a good idea. If this directory must be part of the ordinary user path, it should appear at the end of the path so that the standard programs take precedence over any replacement programs in the current directory. In the case of both programs on the path and those whose complete paths you type as part of the command, the program file must be marked as executable. This is done via the execute bit that’s stored with the file. Standard programs are marked executable when they’re installed, but if you need to adjust a program’s executable status, you can do so with the chmod command, as described in Chapter 4. Performing Some Shell Command Tricks Many users fi nd typing commands to be tedious and error prone. This is particularly true of slow or sloppy typists. For this reason, Linux shells include various tools that can help speed up operations. The fi rst of these is command completion: Type part of a command or (as an option to a command) a fi lename, and then press the Tab key. The shell tries to fi ll in the rest of the command or the fi lename. If just one command or fi lename matches the characters you’ve typed so far, the shell fi lls it in and places a space after it. If the characters you’ve typed don’t uniquely identify a command or fi lename, the shell fi lls in what it can and then stops. Depending on the shell and its configuration, it may beep. If you press the Tab key again, the system responds by displaying the possible completions. You can then type another character or two and, if you haven’t completed the command or fi lename, press the Tab key again to have the process repeat. Understanding Command-Line Basics 9 The most fundamental Linux commands have fairly short names— mv, ls, set, and so on. Some other commands are much longer, though, such as traceroute or sane-find- scanner. Filenames can also be quite lengthy—up to 255 characters on many fi lesystems. Thus, command completion can save a lot of time when you’re typing. It can also help you avoid typos. The most popular Linux shells, including bash and tcsh, support command and filename completion. Some older shells, though, don’t support this helpful feature. Another helpful shell shortcut is the history. The history keeps a record of every com- mand you type (stored in ~/.bash_history in the case of bash). If you’ve typed a long command recently and want to use it again, or use a minor variant of it, you can pull the command out of the history. The simplest way to do this is to press the Up arrow key on your keyboard; this brings up the previous command. Pressing the Up arrow key repeatedly moves through multiple commands so you can fi nd the one you want. If you overshoot, press the Down arrow key to move down the history. The Ctrl+P and Ctrl+N keystrokes double for the Up and Down arrow keys, respectively. Another way to use the command history is to search through it. Press Ctrl+R to begin a backward (reverse) search, which is what you probably want, and begin typing characters that should be unique to the command you want to fi nd. The characters you type need not be the ones that begin the command; they can exist anywhere in the command. You can either keep typing until you fi nd the correct command or, after you’ve typed a few charac- ters, press Ctrl+R repeatedly until you fi nd the one you want. The Ctrl+S keystroke works similarly but searches forward in the command history, which might be handy if you’ve used a backward search or the Up arrow key to look back and have overshot. In either event, if you can’t find the command you want or change your mind and want to terminate the search, press Ctrl+G to do so. Frequently, after fi nding a command in the history, you want to edit it. The bash shell, like many shells, provides editing features modeled after those of the Emacs editor: Move within the line Press Ctrl+A or Ctrl+E to move the cursor to the start or end of the line, respectively. The Left and Right arrow keys move within the line a character at a time. Ctrl+B and Ctrl+F do the same, moving backward and forward within a line. Pressing Ctrl plus the Left or Right arrow key moves backward or forward a word at a time, as does press- ing Esc and then B or F. Delete text Pressing Ctrl+D or the Delete key deletes the character under the cursor, whereas pressing the Backspace key deletes the character to the left of the cursor. Pressing Ctrl+K deletes all text from the cursor to the end of the line. Pressing Ctrl+X and then Backspace deletes all the text from the cursor to the beginning of the line. Transpose text Pressing Ctrl+T transposes the character before the cursor with the charac- ter under the cursor. Pressing Esc and then T transposes the two words immediately before (or under) the cursor. 10 Chapter 1 N Exploring Linux Command-Line Tools Change case Pressing Esc and then U converts text from the cursor to the end of the word to uppercase. Pressing Esc and then L converts text from the cursor to the end of the word to lowercase. Pressing Esc and then C converts the letter under the cursor (or the fi rst letter of the next word) to uppercase, leaving the rest of the word unaffected. Invoke an editor You can launch a full-fledged editor to edit a command by pressing Ctrl+X followed by Ctrl+E. The bash shell attempts to launch the editor defined by the $FCEDIT or $EDITOR environment variable or Emacs as a last resort. These editing commands are just the most useful ones supported by bash; consult its man page to learn about many more obscure editing features. In practice, you’re likely to make heavy use of command and fi lename completion, the command history, and perhaps a few editing features. If you prefer the Vi editor to Emacs, you can use a Vi-like mode in bash by typing set -o vi. (Vi is described in Chapter 5, “Booting Linux and Editing Files.”) The history command provides an interface to view and manage the history. Typing history alone displays all the commands in the history (typically the latest 500 com- mands); adding a number causes only that number of the latest commands to appear. You can execute a command by number by typing an exclamation mark followed by its number, as in !210 to execute command 210. Typing history -c clears the history, which can be handy if you’ve recently typed commands you’d rather not have discovered by others, such as commands that include passwords. In Exercise 1.1, you’ll experiment with your shell’s completion and command-editing tools. E X E R C I S E 1.1 Editing Commands To experiment with your shell’s completion and command-editing tools, follow these steps: 1. Log in as an ordinary user. 2. Create a temporary directory by typing mkdir test. (Directory and file manipulation commands are described in more detail in Chapter 4.) 3. Change into the test directory by typing cd test. 4. Create a few temporary files by typing touch one two three. This command creates three empty files named one, two, and three. Understanding Command-Line Basics 11 E xercise  1. 1    ( c o n t i n u e d ) 5. Type ls -l t, and without pressing the Enter key, press the Tab key. The system may beep at you or display two three. If it doesn’t display two three, press the Tab key again, and it should do so. This reveals that either two or three is a valid completion to your command, because these are the two files in the test directory whose file- names begin with the letter t. 6. Type h, and again without pressing the Enter key, press the Tab key. The system should complete the command (ls -l three), at which point you can press the Enter key to execute it. (You’ll see information on the file.) 7. Press the Up arrow key. You should see the ls -l three command appear on the command line. 8. Press Ctrl+A to move the cursor to the beginning of the line. 9. Press the Right arrow key once, and type es (without pressing the Enter key). The command line should now read less -l three. 10. Press the Right arrow key once, and press the Delete key three times. The command should now read less three. Press the Enter key to execute the command. (Note that you can do so even though the cursor isn’t at the end of the line.) This invokes the less pager on the three file. (The less pager is described more fully later, in “Getting Help.”) Because this file is empty, you’ll see a mostly empty screen. 11. Press the Q key to exit from the less pager. Exploring Shell Configuration Shells, like many Linux programs, are configured through files that hold configuration options in a plain-text format. The bash configuration files are actually bash shell scripts, which are described more fully in Chapter 9. For now, you should know that the ~/.bashrc and ~/.profile files are the main user configuration files for bash, and /etc/bash.bashrc and /etc/profile are the main global configuration files. Even without knowing much about shell scripting, you can make simple changes to these files. Edit them in your favorite text editor, and change whatever needs changing. For instance, you can add directories to the $PATH environment variable, which takes a colon-delimited list of directories. 12 Chapter 1 N Exploring Linux Command-Line Tools Be careful when changing your bash configuration, and particularly the global bash configuration files. Save a backup of the original file before making changes, and test your changes immediately by logging in using another virtual terminal. If you spot a problem, revert to your saved copy until you can learn the cause and create a working file. Using Environment Variables Environment variables are like variables in programming languages—they hold data to be referred to by the variable name. Environment variables differ in that they’re part of the environment of a program, and other programs, such as the shell, can modify this environ- ment. Programs can rely on environment variables to set information that can apply to many different programs. For instance, suppose a computer hosts several different Usenet news readers. These programs all need to know what Usenet news server to use; if they all agree to use an environment variable, such as $NNTPSERVER, to hold this information, you can set this environment variable once as part of your shell startup script and then forget it. You needn’t set this feature individually for all the news readers installed on the system. Chapter 9 describes environment variables and their manipulation in more detail. For the moment, you should know that you can set them in bash by using an assignment (=) operator followed by the export command: $ NNTPSERVER=news.abigisp.com $ export NNTPSERVER You can combine these two commands into a single form: $ export NNTPSERVER=news.abigisp.com Either method sets the $NNTPSERVER environment variable to news.abigisp.com. (When setting an environment variable, you omit the dollar sign, but subsequent references include a dollar sign to identify the environment variable as such.) Thereafter, programs that need this information can refer to the environment variable. In fact, you can do so from the shell yourself, using the echo command: $ echo $NNTPSERVER news.abigisp.com You can also view the entire environment by typing env. The result is likely to be several dozen lines of environment variables and their values. Chapter 9 describes what many of these variables are in more detail. To delete an environment variable, use the unset command, which takes the name of an environment variable (without the leading $ symbol) as an option. For instance, unset NNTPSERVER removes the $NNTPSERVER environment variable. Understanding Command-Line Basics 13 Getting Help Linux provides a text-based help system known as man. This command’s name is short for manual, and its entries (its man pages) provide succinct summaries of what a command, file, or other feature does. For instance, to learn about man itself, you can type man man. The result is a description of the man command. The man utility uses the less pager to display information. This program displays text a page at a time. Press the spacebar to move forward a page, Esc followed by V to move back a page, the arrow keys to move up or down a line at a time, the slash (/) key to search for text, and so on. (Type man less to learn all the details, or consult the upcoming section “Paging Through Files with less.”) When you’re done, press Q to exit less and the man page it’s displaying. Linux man pages are categorized into several sections, which are summarized in Table 1.1. Sometimes a single keyword has entries in multiple sections; for instance, passwd has entries under both section 1 and section 5. In most cases, man returns the entry in the lowest-numbered section; but you can force the issue by preceding the keyword by the section number. For instance, typing man 5 passwd returns information on the passwd file format rather than the passwd command. Table  1.1  ​ ​Manual Sections Section Number Description 1 Executable programs and shell commands 2 System calls provided by the kernel 3 Library calls provided by program libraries 4 Device files (usually stored in /dev) 5 File formats 6 Games 7 Miscellaneous (macro packages, conventions, and so on) 8 System administration commands (programs run mostly or exclusively by root) 9 Kernel routines Some programs have moved away from man pages to info pages. The basic purpose of info pages is the same as that for man pages, but info pages use a hypertext format so that 14 Chapter 1 N Exploring Linux Command-Line Tools you can move from section to section of the documentation for a program. Type info info to learn more about this system. Both man pages and info pages are usually written in a terse style. They’re intended as reference tools, not tutorials; they frequently assume basic familiarity with the command, or at least with Linux generally. For more tutorial information, you must look elsewhere, such as this book or the Web. The Linux Documentation Project (http://tldp.org) is a particularly relevant Web-based resource for learning about various Linux topics. Using Streams, Redirection, and Pipes Streams, redirection, and pipes are some of the more powerful command-line tools in Linux. Linux treats the input to and output from programs as a stream, which is a data entity that can be manipulated. Ordinarily, input comes from the keyboard and output goes to the screen (which in this context can mean a full-screen text-mode login session, an xterm or a similar window, or the screen of a remote computer via a remote login session). You can redirect these input and output streams to come from or go to other sources, though, such as fi les. Similarly, you can pipe the output of one program into another program. These facili- ties can be great tools to tie together multiple programs. Part of the Unix philosophy to which Linux adheres is, whenever possible, to do complex things by combining multiple simple tools. Redirection and pipes help in this task by enabling simple programs to be combined together in chains, each link feeding off the output of the preceding link. Exploring Types of Streams To begin understanding redirection and pipes, you must fi rst understand the different types of input and output streams. Three are most important for this topic: Standard input Programs accept keyboard input via standard input, or stdin. In most cases, this is the data that comes into the computer from a keyboard. Standard output Text-mode programs send most data to their users via standard output (a.k.a. stdout), which is normally displayed on the screen, either in a full-screen text-mode session or in a GUI window such as an xterm. (Fully GUI programs such as GUI word pro- cessors don’t use standard output for their regular interactions, although they might use standard output to display messages in the xterm from which they were launched. GUI out- put isn’t handled via an output stream in the sense I’m describing here.) Standard error Linux provides a second type of output stream, known as standard error, or stderr. This output stream is intended to carry high-priority information such as error messages. Ordinarily, standard error is sent to the same output device as standard output, Using Streams, Redirection, and Pipes 15 so you can’t easily tell them apart. You can redirect one independently of the other, though, which can be handy. For instance, you can redirect standard error to a file while leaving standard output going to the screen so that you can interact with the program and then study the error messages later. Internally, programs treat these streams just like data files—they open them, read from or write to the files, and close them when they’re done. Put another way, ordinary files are streams from a program’s point of view. The standard input, output, and error streams just happen to be the ones used to interact with users. Redirecting Input and Output To redirect input or output, you use symbols following the command, including any options it takes. For instance, to redirect the output of the echo command, you would type something like this: $ echo $NNTPSERVER > nntpserver.txt The result is that the file nntpserver.txt contains the output of the command (in this case, the value of the $NNTPSERVER environment variable). Redirection operators exist to achieve several effects, as summarized in Table 1.2. Table  1. 2  ​ ​Common Redirection Operators Redirection Operator Effect > Creates a new file containing standard output. If the specified file exists, it’s overwritten. >> Appends standard output to the existing file. If the specified file doesn’t exist, it’s created. 2> Creates a new file containing standard error. If the specified file exists, it’s overwritten. 2>> Appends standard error to the existing file. If the specified file doesn’t exist, it’s created. &> Creates a new file containing both standard output and standard error. If the specified file exists, it’s overwritten. < Sends the contents of the specified file to be used as standard input. unixfile.txt Variants on both the tr and sed commands exist. For instance, Sometimes the quotes around \r may be omitted from the sed command; whether they’re required depends on your shell and its configuration. Yet another approach is to load the file into a text editor and then save it back using dif- ferent file-type settings. (Not all editors support such changes, but some do.) Many other examples exist of multiple solutions to a problem. Sometimes one solution stands out above others as being superior, but other times the differences may be subtle, or each approach may have merit in particular situations. Thus, it’s best to be at least some- what familiar with all the alternatives. I describe many such options throughout this book. Summary The command line is the key to Linux. Even if you prefer GUI tools to text-mode tools, understanding text-mode commands is necessary to fully manage Linux. This task begins with the shell, which accepts commands you type and displays the results of those commands. In addition, shells support linking programs together via pipes and redirecting programs’ input and output. These features enable you to perform complex tasks using simple tools by having each program perform its own small part of the task. This technique is frequently used with Linux text filters, which manipulate text files in various ways—sorting text by fields, merging multiple files, and so on. Exam Essentials 37 Exam Essentials Summarize features that Linux shells offer to speed up command entry. ​ ​The command history often enables you to retrieve an earlier command that’s similar or identical to the one you want to enter. Tab completion reduces typing effort by letting the shell finish long command names or filenames. Command-line editing lets you edit a retrieved command or change a typo before committing the command. Describe the purpose of the man command. ​ ​The man command displays the manual page for the keyword (command, filename, system call, or other feature) that you type. This documentation provides succinct summary information that’s useful as a reference to learn about exact command options or features. Explain the purpose of environment variables. ​ ​Environment variables store small pieces of data—program options, information about the computer, and so on. This information can be read by programs and used to modify program behavior in a way that’s appropriate for the current environment. Describe the difference between standard output and standard error. ​ ​Standard output carries normal program output, whereas standard error carries high-priority output, such as error messages. The two can be redirected independently of one another. Explain the purpose of pipes. ​ ​Pipes tie programs together by feeding the standard output from the first program into the second program’s standard input. They can be used to link together a series of simple programs to perform more complex tasks than any one of the programs could manage. Summarize the structure of regular expressions. ​ ​Regular expressions are strings that describe other strings. They can contain normal alphanumeric characters, which match the exact same characters, as well as several special symbols and symbol sets that match multiple dif- ferent characters. The combination is a powerful pattern-matching tool used by many Linux programs. 38 Chapter 1 n Exploring Linux Command-Line Tools Review Questions 1. You type a command into bash and pass a long filename to it, but after you enter the com- mand, you receive a File not found error message because of a typo in the filename. How might you proceed? A. Retype the command, and be sure you type the filename correctly, letter by letter. B. Retype the command, but press the Tab key after typing a few letters of the long file- name to ensure that the filename is entered correctly. C. Press the Up arrow key, and use bash’s editing features to correct the typo. D. Any of the above. 2. Which of the following commands is implemented as an internal command in bash? A. cat B. echo C. tee D. sed 3. You type echo $PROC, and the computer replies Go away. What does this mean? A. No currently running processes are associated with your shell, so you may log out without terminating them. B. The remote computer PROC isn’t accepting connections; you should contact its adminis- trator to correct the problem. C. Your computer is handling too many processes; you must kill some of them to regain control of the computer. D. You, one of your configuration files, or a program you’ve run has set the $PROC envi- ronment variable to Go away. 4. What does the pwd command accomplish? A. It prints the name of the working directory. B. It changes the current working directory. C. It prints wide displays on narrow paper. D. It parses Web page URLs for display. 5. In an xterm window launched from your window manager, you type exec gedit. What will happen when you exit from the gedit program? A. Your shell will be a root shell. B. The gedit program will terminate, but nothing else unusual will happen. C. Your X session will terminate. D. The xterm window will close. Review Questions 39 6. What is the surest way to run a program (say, myprog) that’s located in the current working directory? A. Type./ followed by the program name:./myprog. B. Type the program name alone: myprog. C. Type run followed by the program name: run myprog. D. Type /. followed by the program name: /.myprog. 7. How does man display information by default on most Linux systems? A. Using a custom X-based application B. Using the Firefox Web browser C. Using the less pager D. Using the Vi editor 8. You want to store the standard output of the ifconfig command in a text file (file.txt) for future reference, and you want to wipe out any existing data in the file. How can you do so? A. ifconfig < file.txt B. ifconfig >> file.txt C. ifconfig > file.txt D. ifconfig | file.txt 9. What is the effect of the following command? $ myprog &> input.txt A. Standard error to myprog is taken from input.txt. B. Standard input to myprog is taken from input.txt. C. Standard output and standard error from myprog are written to input.txt. D. All of the above. 10. How many commands can you pipe together at once? A. 2 B. 3 C. 4 D. An arbitrary number 11. You want to run an interactive script, gabby, which produces a lot of output in response to the user’s inputs. To facilitate future study of this script, you want to copy its output to a file. How might you do this? A. gabby > gabby-out.txt B. gabby | tee gabby-out.txt C. gabby < gabby-out.txt D. gabby &> gabby-out.txt 40 Chapter 1 n Exploring Linux Command-Line Tools 12. A text-mode program, verbose, prints a lot of spurious “error” messages to standard error. How might you get rid of those messages while still interacting with the program? A. verbose | quiet B. verbose &> /dev/null C. verbose 2> /dev/null D. verbose > junk.txt 13. How do the > and >> redirection operators differ? A. The > operator creates a new file or overwrites an existing one; the >> operator creates a new file or appends to an existing one. B. The > operator creates a new file or overwrites an existing one; the >> operator appends to an existing file or issues an error message if the specified file doesn’t exist. C. The > operator redirects standard output; the >> operator redirects standard error. D. The > operator redirects standard output; the >> operator redirects standard input. 14. What program would you use to display the end of a configuration file? A. uniq B. cut C. tail D. wc 15. What is the effect of the following command? $ pr report.txt | lpr A. The file report.txt is formatted for printing and sent to the lpr program. B. The files report.txt and lpr are combined together into one file and sent to standard output. C. Tabs are converted to spaces in report.txt, and the result is saved in lpr. D. None of the above. 16. Which of the following commands will number the lines in aleph.txt? (Select all that apply.) A. fmt aleph.txt B. nl aleph.txt C. cat -b aleph.txt D. cat -n aleph.txt 17. Which of the following commands will change all occurrences of dog in the file animals.txt to mutt in the screen display? A. sed –s “dog” “mutt” animals.txt B. grep –s “dog||mutt” animals.txt C. sed ‘s/dog/mutt/g’ animals.txt D. cat animals.txt | grep –c “dog” “mutt” Review Questions 41 18. You’ve received an ASCII text file (longlines.txt) that uses no carriage returns within paragraphs but two carriage returns between paragraphs. The result is that your preferred text editor displays each paragraph as a very long line. How can you reformat this file so that you can more easily edit it (or a copy)? A. sed ‘s/Ctrl-M/NL/’ longlines.txt B. fmt longlines.txt > longlines2.txt C. cat longlines.txt > longlines2.txt D. pr longlines.txt > longlines2.txt 19. Which of the following commands will print lines from the file world.txt that contain matches to changes and changed? A. grep change[ds] world.txt B. sed change[d-s] world.txt C. od “change’d|s’” world.txt D. cat world.txt changes changed 20. Which of the following regular expressions will match the strings dig and dug but not dog? A. d.g B. d[iu]g C. d[i-u]g D. di*g 42 Chapter 1 n Exploring Linux Command-Line Tools Answers to Review Questions 1. D. ​Any of these approaches will work, or at least might work. (You might err when per- forming any of them.) Option B or C is likely to be the most efficient approach; with a long filename to type, option A is likely to be tedious. 2. B. ​The echo command is implemented internally to bash, although an external version is also available on most systems. The cat, tee, and sed commands are not implemented internally to bash, although they can be called from bash as external commands. 3. D. ​The echo command echoes what follows to standard output, and $PROC is an environ- ment variable. Thus, echo $PROC displays the value of the $PROC environment variable, meaning that it must have been set to the specified value by you, one of your configuration files, or a program you’ve run. Although many environment variables are set to particular values to convey information, $PROC isn’t a standard environment variable that might be associated with information described in options A, B, or C. 4. A. ​The pwd command prints (to standard output) the name of the current working direc- tory. The remaining options are simply incorrect, although option B describes the cd com- mand and various tools can be used to reformat wide text for display or printing in fewer columns, as in option C. 5. D. ​The exec command causes the rest of the command to replace the current shell. Thus, when you exit from gedit in this scenario, the result will be the same as if you’d terminated the shell, namely, the xterm window will close. The exec command doesn’t raise the execu- tion privilege, so option A is incorrect. (The su and sudo commands can raise execution privilege, though.) Because the xterm window closes, option B is incorrect. X won’t ordi- narily terminate when a single xterm does, and definitely not if that xterm was launched from a window manager, so option C is incorrect. 6. A. ​The dot (.) character refers to the current working directory, and the slash (/) is a direc- tory separator. Thus, preceding a program name by./ unambiguously identifies the intention to run the program that’s stored in the current directory. Option B will run the first instance of the program that’s found on the current path. Because paths often omit the current direc- tory for security reasons, this option is likely to fail. The run command isn’t a standard Linux command, so option C is unlikely to do anything, much less what the question specifies. Option D would be correct except that it reverses the order of the two characters. The effect is to attempt to run the.myprog file in the root (/) directory. This file probably doesn’t exist, and even if it did, it’s not the file the question specifies should be run. 7. C. ​By default, man uses the less pager to display information on most Linux systems. Although an X-based version of man does exist (xman), the basic man doesn’t use a custom X-based application, nor does it use Firefox or the Vi editor. Answers to Review Questions 43 8. C. ​The > redirection operator stores a command’s standard output in a file, overwriting the contents of any existing file by the specified name. Option A specifies the standard input redirection so that ifconfig will take the contents of file.txt as input. Option B is almost correct; the >> redirection operator redirects standard output, as requested, but it appends data to the specified file rather than overwriting it. Option D specifies a pipe; the output of ifconfig is sent through the file.txt program, if it exists. (Chances are it doesn’t, so you’d get a command not found error message.) 9. C. ​The &> redirection operator sends both standard output and standard error to the speci- fied file, as option C states. (The name of the file, input.txt, is intentionally deceptive, but the usage is still valid.) Option A mentions standard error but describes it as if it were an input stream, which it’s not; it’s an output stream. Option B mentions standard input, but the &> operator doesn’t affect standard input. 10. D. ​In principle, you can pipe together as many commands as you like. (In practice, of course, there will be limits based on input buffer size, memory, and so on, but these limits are far higher than the 2, 3, or 4 commands specified in options A, B, and C.) 11. B. ​The tee command sends its output both to standard output and to a named file. Thus, placing the tee command (with an output filename) after another command and a pipe will achieve the desired effect. Options A and D redirect gabby’s output to a file, which means you won’t be able to see the output and interact with it. Option C sends the contents of gabby-out.txt to gabby as input, which isn’t what’s desired, either. 12. C. ​The 2> redirection operator redirects standard error only, leaving standard output unaf- fected. Sending standard error to /dev/null gets rid of it. Option A pipes the standard output of verbose through the quiet program, which isn’t a standard Linux program. Option B sends both standard output and standard error to /dev/null, so you won’t be able to interact with the program, as the question specifies you must be able to do. Option D redirects standard output only to the junk.txt file, so once again, interaction will be impossible—and you’ll see the unwanted error messages on the screen. 13. A. ​Option A correctly describes the difference between these two redirection operators. Option B is almost correct, but the >> operator will create a new file if one doesn’t already exist. The >> operator does not redirect standard error (as stated in option C) or standard input (as stated in option D). 14. C. ​The tail command displays the final 10 lines of a file. (You can change the number of lines displayed with the -n option.) The uniq command removes duplicate lines from a list. The cut command echoes the specified characters or fields from an input text file. The wc command displays counts of the number of characters, words, and lines in a file. 15. A. ​The pr program takes a text file as input and adds formatting features intended for printing, such as a header and blank lines to separate pages. The command also pipes the output through lpr (which is a Linux printing command). 44 Chapter 1 n Exploring Linux Command-Line Tools 16. B,C,D. ​The nl command numbers lines, so it does this task without any special options. (Its options can fine-tune the way it numbers lines, though.) The cat command can also number lines via its -b and -n options; -b numbers non-blank lines, whereas -n numbers all lines (including blank lines). The fmt command is the only one described here that will not number the lines of the input file. 17. C. ​The sed utility can be used to “stream” text and change one value to another. In this case, the s option is used to replace dog with mutt. The syntax in option A is incorrect, and choices B and D are incorrect because grep doesn’t include the functionality needed to make the changes. 18. B. ​The fmt command performs the desired task of shortening long lines by inserting carriage returns. It sends its results to standard output, so option B uses output redirection to save the results in a new file. The sed command of option A won’t accomplish anything useful; it only replaces the string Ctrl-M with the string NL. Although these strings are both sometimes used as abbreviations for carriage returns or new lines, the replacement of these literal strings isn’t what’s required. Option C creates an exact copy of the original file, with the long single-line paragraphs intact. Although option D’s pr command is a formatting tool, it won’t reformat individual paragraphs. It will also add headers that you probably don’t want. 19. A. ​The grep utility is used to find matching text within a file and print those lines. It accepts regular expressions, which means you can place in brackets the two characters that differ in the words for which you’re looking. The syntax for sed, od, and cat wouldn’t perform the specified task. 20. B. ​The bracket expression within the d[iu]g regular expression means that either i or u may be the middle character; hence, this regular expression matches both dig and dug but not dog. Option A’s dot matches any single character, so d.g matches all three words. The range expression [i-u] matches any single character between i and u, inclusive. Because o falls between these two letters, option C matches all three words. Finally, di*g matches dig, diig, diiig, or any other word that begins with d, ends with g, and contains any number of i letters in-between. Thus, option D matches dig but not dug as required.

Use Quizgecko on...
Browser
Browser