Preface |
|
v | |
Acknowledgements |
|
vii | |
Part I: Using LINUX and UNIX Effectively |
|
|
|
1 | (28) |
|
|
2 | (1) |
|
|
2 | (2) |
|
Logon and Logoff Procedures |
|
|
4 | (2) |
|
|
6 | (6) |
|
|
6 | (1) |
|
Locations of Various Shells |
|
|
7 | (1) |
|
Which Shell Suits Your Needs? |
|
|
8 | (1) |
|
Various Ways to Change Your Shell |
|
|
9 | (1) |
|
Shell Startup Files and Environment Variables |
|
|
10 | (2) |
|
Some Important System Setups |
|
|
12 | (2) |
|
Useful General-Purpose Commands for Beginners |
|
|
14 | (9) |
|
Displaying the Current Time and Date |
|
|
14 | (1) |
|
|
14 | (1) |
|
|
15 | (1) |
|
|
15 | (1) |
|
Displaying the Name of Your Current Directory or a Home Directory |
|
|
16 | (1) |
|
|
16 | (1) |
|
|
17 | (1) |
|
|
18 | (1) |
|
|
18 | (2) |
|
|
20 | (1) |
|
|
21 | (1) |
|
|
22 | (1) |
|
Displaying System Up Time |
|
|
22 | (1) |
|
|
23 | (1) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
25 | (4) |
|
Files and File Processing |
|
|
29 | (46) |
|
|
30 | (1) |
|
|
30 | (1) |
|
|
31 | (3) |
|
|
31 | (1) |
|
Pathnames: Absolute and Relative |
|
|
31 | (2) |
|
Home and Present Working Directories |
|
|
33 | (1) |
|
|
33 | (1) |
|
Some Standard Directories and Files |
|
|
34 | (4) |
|
Directory Operations and Browsing the File System Structure |
|
|
38 | (4) |
|
Creating and Removing Directories |
|
|
38 | (1) |
|
Moving and Copying Directories |
|
|
39 | (1) |
|
Browsing the File System Structure and Listing Directories |
|
|
40 | (2) |
|
|
42 | (28) |
|
|
42 | (1) |
|
Displaying File Type and Type of Data in a File |
|
|
42 | (2) |
|
|
44 | (1) |
|
Viewing Files One Page at a Time |
|
|
45 | (2) |
|
Viewing the Head or Tail of a File |
|
|
47 | (2) |
|
Displaying the NIS Database |
|
|
49 | (1) |
|
|
49 | (2) |
|
Moving and Renaming Files |
|
|
51 | (1) |
|
|
52 | (1) |
|
|
53 | (2) |
|
|
55 | (1) |
|
|
56 | (1) |
|
|
56 | (3) |
|
|
59 | (1) |
|
|
59 | (1) |
|
|
59 | (2) |
|
|
61 | (1) |
|
|
62 | (1) |
|
Searching for Files and Commands |
|
|
63 | (1) |
|
|
63 | (2) |
|
|
65 | (1) |
|
|
66 | (1) |
|
|
67 | (3) |
|
|
70 | (1) |
|
|
71 | (4) |
|
|
75 | (14) |
|
|
76 | (1) |
|
Standard Files, File Descriptors, and Redirection of Standard Files |
|
|
76 | (1) |
|
Input, Output, and Error Redirection |
|
|
77 | (6) |
|
|
77 | (1) |
|
|
78 | (1) |
|
|
79 | (1) |
|
Redirecting stdin, stdout, and stderr in One Command |
|
|
80 | (2) |
|
|
82 | (1) |
|
LINUX/UNIX Filters and Pipes |
|
|
83 | (2) |
|
Redirection and Piping Combined |
|
|
85 | (1) |
|
|
86 | (1) |
|
|
87 | (2) |
|
|
89 | (12) |
|
|
90 | (1) |
|
LINUX/UNIX Mechanism for Printing Files |
|
|
90 | (1) |
|
|
90 | (1) |
|
|
91 | (1) |
|
Finding the Status of a Print Request |
|
|
92 | (2) |
|
Displaying the Names of Printers on Your System |
|
|
94 | (1) |
|
|
95 | (2) |
|
|
97 | (1) |
|
|
98 | (1) |
|
|
98 | (3) |
|
|
101 | (18) |
|
|
102 | (1) |
|
File Protection Based on Access Permission |
|
|
102 | (9) |
|
|
102 | (1) |
|
Types of File Operations/Access Permissions |
|
|
103 | (1) |
|
Default File Access Privileges |
|
|
104 | (2) |
|
Determining File Access Privileges |
|
|
106 | (1) |
|
Changing File Access Privileges |
|
|
107 | (4) |
|
|
111 | (5) |
|
The Set-User-ID (SUID) Bit |
|
|
111 | (2) |
|
The Set-Group-ID (SGID) Bit |
|
|
113 | (1) |
|
|
114 | (2) |
|
File Permissions and Types |
|
|
116 | (1) |
|
|
116 | (1) |
|
|
117 | (2) |
|
|
119 | (20) |
|
|
120 | (1) |
|
Processes, Jobs, and Daemons |
|
|
120 | (1) |
|
|
121 | (12) |
|
Displaying Process Attributes |
|
|
121 | (5) |
|
Foreground, Background, and Suspended Processes |
|
|
126 | (2) |
|
|
128 | (1) |
|
Suspending and Resuming a Shell Process |
|
|
129 | (1) |
|
Running Commands Sequentially and Simultaneously |
|
|
130 | (1) |
|
Abnormal Termination of Commands and Processes |
|
|
131 | (2) |
|
Process Hierarchy in LINUX/UNIX |
|
|
133 | (1) |
|
Displaying Process Attributes in LINUX/UNIX |
|
|
134 | (1) |
|
|
135 | (1) |
|
|
136 | (3) |
|
File System Backup and Restoration |
|
|
139 | (10) |
|
|
140 | (1) |
|
Archiving and Restoring Files Using tar |
|
|
140 | (6) |
|
|
141 | (2) |
|
|
143 | (1) |
|
|
143 | (1) |
|
|
144 | (1) |
|
Copying Directory Hierarchies |
|
|
145 | (1) |
|
Software Distributions in the tar Format |
|
|
146 | (1) |
|
|
147 | (1) |
|
|
147 | (2) |
Part II: Program Development on a LINUX or UNIX Platform |
|
|
Program Development Process |
|
|
149 | (10) |
|
|
150 | (1) |
|
An Overview of Computer Programming Languages |
|
|
150 | (2) |
|
Programming Languages and Programming Paradigms |
|
|
152 | (2) |
|
|
152 | (1) |
|
|
153 | (1) |
|
|
154 | (1) |
|
The Interpretation Process |
|
|
154 | (1) |
|
Compiling C, C++, and Java Programs |
|
|
155 | (1) |
|
The Software Engineering Life Cycle |
|
|
156 | (1) |
|
|
157 | (1) |
|
|
157 | (1) |
|
|
158 | (1) |
|
|
159 | (22) |
|
|
160 | (1) |
|
Generating Program Source Files |
|
|
160 | (1) |
|
|
160 | (4) |
|
|
164 | (10) |
|
Compiling Multiple Source Files |
|
|
168 | (1) |
|
|
169 | (2) |
|
Optimizing Executable Code |
|
|
171 | (1) |
|
Defining Macros at Command Line |
|
|
172 | (1) |
|
Turning Off Compilation, Assembly, or Linking Phase |
|
|
173 | (1) |
|
|
174 | (2) |
|
|
176 | (1601) |
|
Disastrous Compiler Commands and Typical Compile Time Errors |
|
|
177 | (1) |
|
Compiling and Interpreting Programs in Other Programming Languages |
|
|
177 | (1) |
|
|
178 | (1) |
|
|
178 | (1) |
|
|
178 | (3) |
|
Compiling and Linking Multimodule Software |
|
|
181 | (26) |
|
|
182 | (1) |
|
|
182 | (21) |
|
|
183 | (2) |
|
Multimodule Software, Dependency Trees, and make |
|
|
185 | (6) |
|
|
191 | (1) |
|
Macro Support of the make Utility |
|
|
192 | (2) |
|
|
194 | (2) |
|
|
196 | (4) |
|
|
200 | (1) |
|
Common Syntax Errors and Their Cures |
|
|
201 | (2) |
|
Command-line Usage and Debugging |
|
|
203 | (1) |
|
|
203 | (1) |
|
|
204 | (1) |
|
|
204 | (3) |
|
Developing, Using, and Debugging Libraries |
|
|
207 | (20) |
|
|
208 | (1) |
|
|
208 | (2) |
|
|
210 | (7) |
|
Creating or Appending to an Archive |
|
|
212 | (1) |
|
Displaying the Table of Contents |
|
|
213 | (1) |
|
Deleting Object Modules from an Archive |
|
|
214 | (1) |
|
Extracting Object Modules from an Archive |
|
|
214 | (2) |
|
|
216 | (1) |
|
|
217 | (1) |
|
|
217 | (6) |
|
Displaying Library Information |
|
|
219 | (4) |
|
|
223 | (1) |
|
|
223 | (1) |
|
|
224 | (3) |
|
|
227 | (26) |
|
|
228 | (1) |
|
|
228 | (1) |
|
|
228 | (1) |
|
|
229 | (1) |
|
|
229 | (1) |
|
|
230 | (14) |
|
Using gdb with C/C++ Programs |
|
|
231 | (2) |
|
Entering the gdb Environment |
|
|
233 | (4) |
|
|
237 | (1) |
|
Tracing Program Execution |
|
|
237 | (1) |
|
|
238 | (1) |
|
Single-Stepping Through Your Program |
|
|
239 | (1) |
|
Displaying the Value of a Variable or Expression |
|
|
240 | (1) |
|
|
241 | (1) |
|
|
242 | (1) |
|
Leaving gdb and Wrapping Up |
|
|
243 | (1) |
|
|
244 | (2) |
|
Running a Crashed Program with a Core File |
|
|
246 | (1) |
|
Debugging Java Programs with gdb |
|
|
246 | (2) |
|
|
248 | (1) |
|
|
248 | (1) |
|
|
249 | (1) |
|
|
249 | (1) |
|
|
250 | (3) |
|
Software Profiling and Metrics |
|
|
253 | (18) |
|
|
254 | (1) |
|
Software Metrics and Their Purpose |
|
|
254 | (1) |
|
|
255 | (8) |
|
|
257 | (2) |
|
Analyzing the Output of gprof |
|
|
259 | (4) |
|
|
263 | (1) |
|
Software Metrics: Size and Running Time |
|
|
263 | (5) |
|
The Size of Source and Executable Programs |
|
|
264 | (2) |
|
The Running Time of a Program |
|
|
266 | (2) |
|
|
268 | (1) |
|
|
268 | (1) |
|
|
269 | (2) |
|
Version Control with RCS and CVS |
|
|
271 | (44) |
|
|
272 | (1) |
|
The Revision Control System (RCS) |
|
|
272 | (20) |
|
|
273 | (1) |
|
Creating an RCS History File |
|
|
273 | (1) |
|
|
274 | (2) |
|
Creating a New Version of a File |
|
|
276 | (1) |
|
Checking Out Copies of Specific Versions |
|
|
276 | (2) |
|
|
278 | (1) |
|
Locking a File Without Overwriting (Taking Care of a Mistake) |
|
|
279 | (1) |
|
|
280 | (1) |
|
|
281 | (1) |
|
Displaying the History of RCS Files |
|
|
282 | (2) |
|
|
284 | (1) |
|
Displaying Differences Between Versions |
|
|
285 | (1) |
|
|
286 | (2) |
|
Limiting Access Rights to RCS |
|
|
288 | (1) |
|
RCS Special Character Sequences |
|
|
289 | (2) |
|
Miscellaneous RCS Utilities |
|
|
291 | (1) |
|
Using RCS from within emacs |
|
|
291 | (1) |
|
|
291 | (1) |
|
Concurrent Versions System (CVS) |
|
|
292 | (21) |
|
|
292 | (1) |
|
|
293 | (2) |
|
Creating a Source Repository |
|
|
295 | (2) |
|
Importing Sources into the Repository |
|
|
297 | (1) |
|
Checking Out Source Files |
|
|
298 | (3) |
|
Making and Committing Changes to Source Files |
|
|
301 | (3) |
|
Adding New Files and Directories to the Repository |
|
|
304 | (1) |
|
Removing Files and Directories from the Source Repository |
|
|
305 | (1) |
|
Freezing and Extracting a Version |
|
|
306 | (1) |
|
|
307 | (1) |
|
Displaying the Log History |
|
|
307 | (1) |
|
CVS Special Character Sequences |
|
|
307 | (2) |
|
|
309 | (1) |
|
Remote Repositories and Accessing Them through a Client |
|
|
310 | (1) |
|
|
311 | (1) |
|
|
311 | (1) |
|
Obtaining and Installing CVS |
|
|
311 | (2) |
|
|
313 | (1) |
|
|
313 | (1) |
|
|
314 | (1) |
Appendix A Editing Text Files with vi and pico |
|
315 | (6) |
|
|
315 | (4) |
|
|
319 | (2) |
Appendix B Electronic Mail |
|
321 | (6) |
|
|
321 | (1) |
|
|
322 | (5) |
Glossary |
|
327 | (10) |
Index |
|
337 | |