Textbook Mastering Modern Linux Second Edition Paul S Wang Ebook All Chapter PDF

Download as pdf or txt
Download as pdf or txt
You are on page 1of 53

Mastering Modern Linux, Second

Edition Paul S Wang


Visit to download the full and correct content document:
https://textbookfull.com/product/mastering-modern-linux-second-edition-paul-s-wang/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Mastering Modern Linux 2nd Edition Paul S. Wang

https://textbookfull.com/product/mastering-modern-linux-2nd-
edition-paul-s-wang/

Biota Grow 2C gather 2C cook Loucas

https://textbookfull.com/product/biota-grow-2c-gather-2c-cook-
loucas/

Mastering Embedded Linux Programming - Second Edition:


Unleash the full potential of Embedded Linux with Linux
4.9 and Yocto Project 2.2 Chris Simmonds

https://textbookfull.com/product/mastering-embedded-linux-
programming-second-edition-unleash-the-full-potential-of-
embedded-linux-with-linux-4-9-and-yocto-project-2-2-chris-
simmonds/

Mastering Kali Linux for advanced penetration testing


secure your network with Kali Linux the ultimate
hackers arsenal Second Edition Velu

https://textbookfull.com/product/mastering-kali-linux-for-
advanced-penetration-testing-secure-your-network-with-kali-linux-
the-ultimate-hackers-arsenal-second-edition-velu/
Mastering Linux shell scripting a practical guide to
Linux command line Bash scripting and Shell programming
Second Edition. Edition Mokhtar Ebrahim

https://textbookfull.com/product/mastering-linux-shell-scripting-
a-practical-guide-to-linux-command-line-bash-scripting-and-shell-
programming-second-edition-edition-mokhtar-ebrahim/

Mastering Embedded Linux Programming Second Edition


Unleash the full potential of Embedded Linux with Linux
4 9 and Yocto Project 2 2 Morty Updates Chris Simmonds

https://textbookfull.com/product/mastering-embedded-linux-
programming-second-edition-unleash-the-full-potential-of-
embedded-linux-with-linux-4-9-and-yocto-project-2-2-morty-
updates-chris-simmonds/

Mastering Linux Security 1st Edition Musaab Hasan &


Zayed Balbahaith

https://textbookfull.com/product/mastering-linux-security-1st-
edition-musaab-hasan-zayed-balbahaith/

Mastering Linux Shell Scripting a practical guide to


Linux command line Bash scripting and Shell programming
Ebrahim

https://textbookfull.com/product/mastering-linux-shell-scripting-
a-practical-guide-to-linux-command-line-bash-scripting-and-shell-
programming-ebrahim/

Mastering the UKCAT Second Edition Nordstrom

https://textbookfull.com/product/mastering-the-ukcat-second-
edition-nordstrom/
Mastering Modern Linux
Second Edition
Mastering Modern Linux
Second Edition

Paul S. Wang
Kent State University, Kent, Ohio
CRC Press
Taylor & Francis Group
6000 Broken Sound Parkway NW, Suite 300
Boca Raton, FL 33487-2742

© 2018 by Taylor & Francis Group, LLC


CRC Press is an imprint of Taylor & Francis Group, an Informa business

No claim to original U.S. Government works

Printed on acid-free paper


Version Date: 20180420

International Standard Book Number-13: 978-0-8153-8098-6 (Paperback)


International Standard Book Number-13: 978-0-8153-8111-2 (Hardback)

This book contains information obtained from authentic and highly regarded sources. Reasonable efforts have been
made to publish reliable data and information, but the author and publisher cannot assume responsibility for the validity
of all materials or the consequences of their use. The authors and publishers have attempted to trace the copyright
holders of all material reproduced in this publication and apologize to copyright holders if permission to publish in this
form has not been obtained. If any copyright material has not been acknowledged please write and let us know so we may
rectify in any future reprint.

Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced, transmitted, or utilized
in any form by any electronic, mechanical, or other means, now known or hereafter invented, including photocopying,
microfilming, and recording, or in any information storage or retrieval system, without written permission from the
publishers.

For permission to photocopy or use material electronically from this work, please access www.copyright.com
(http://www.copyright.com/) or contact the Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers,
MA 01923, 978-750-8400. CCC is a not-for-profit organization that provides licenses and registration for a variety of
users. For organizations that have been granted a photocopy license by the CCC, a separate system of payment has been
arranged.

Trademark Notice: Product or corporate names may be trademarks or registered trademarks, and are used only for
identification and explanation without intent to infringe.

Library of Congress Cataloging-in-Publication Data

Names: Wang, Paul S., author.


Title: Mastering modern Linux / Paul S. Wang.
Other titles: Mastering Linux
Description: Second edition. | Boca Raton : Taylor & Francis, CRC Press,
2018. | Revised edition of: Mastering Linux / Paul S. Wang. 2011. |
Includes bibliographical references and index.
Identifiers: LCCN 2018008944| ISBN 9780815380986 (pbk. : alk. paper) | ISBN
9780815381112 (hardback)
Subjects: LCSH: Linux. | Operating systems (Computers)
Classification: LCC QA76.774.L46 W36 2018 | DDC 005.4/46--dc23
LC record available at https://lccn.loc.gov/2018008944

Visit the Taylor & Francis Web site at


http://www.taylorandfrancis.com
and the CRC Press Web site at
http://www.crcpress.com
Preface

Linux, a great success story of open-source, community-developed software, is increasingly


used in Web and application servers, software development platforms, personal workstations,
and research machines. In the past few years, Linux has improved its user interface, added
many useful and powerful apps, and greatly expanded its home and business user base.
In computer science and engineering departments, you’ll find Linux systems in class-
rooms, programming labs, and computer centers—not just because Linux is free but also
because it offers a rich computing environment for teaching and learning.
From its beginning in 1991, and with help from the GNU Project, Linux has evolved
quickly and has brought new powers and conveniences to users. Competency on Linux will
be important for any serious computer professional.
This book is a revised edition of Mastering Linux (late 2010), which was very well
received and had the most wonderful review from ACM Computing Reviews:
“This authoritative and exceptionally well-constructed book has my highest rec-
ommendation. It will repay careful and recursive study.—Computing Reviews,
August 2011”
The new edition has a new title, Mastering Modern Linux, yet retained much of the
good materials while updating them, adding new topics and removing old ones.
This book provides a comprehensive and up-to-date guide to Linux concepts, usage, and
programming. This text will help you master Linux with a well-selected set of topics. Hands-
on practice is encouraged; it is the only way to gain familiarity with an operating system. A
primer gets you started quickly. The chapters lead you from user interfaces, commands and
filters, Shell scripting, the file system, networking, basic system administration, and Web
hosting, to C-level programming and kernel system calls.
There are many examples and complete programs ready to download and run. A sum-
mary and exercises of varying degrees of difficulty can be found at the end of each chapter.
A companion website provides appendices, information updates, an example code package,
and other resources for instructors as well as students. See page 353 for details.

User Friendly and Comprehensive


There is both breadth and depth in this book’s presentation. Chapter 1 contains a Linux
primer to get the new user started as quickly as possible, without awkwardness or confusion.
Being able to play and experiment with the system adds to the user’s interest and motivation
to learn more. Once introduced and comfortable, the user is guided through a well-selected
set of topics covering the type of detailed material appropriate for a one-semester course at
the advanced undergraduate or beginning graduate level.
The first part of the textbook covers interactive use of Linux via the Graphical User
Interface (GUI) and the Command-Line Interface (CLI), including comprehensive treatment
of the Gnome desktop and the Bash Shell. Using different apps, commands and filters,
building pipelines, and matching patterns with regular expressions are major focuses.

v
Next come Bash scripting, file system structure, organization, and usage, which bring
us to about the middle of the book.
The next chapters present networking, the Internet and the Web, data encryption, and
basic system admin, as well as Web hosting. The Linux Apache MySQL/MariaDB PHP
(LAMP) Web hosting combination is presented in depth. Such practical knowledge can be
valuable for many Linux programmers.
In Chapters 10–12, attention is then turned to C-level programming. Because the Linux
kernel and most of its applications are implemented in C, it is considered the native language
of Linux. In-depth knowledge of Linux requires understanding the Standard C Libraries and
the system calls which form the interface to the Linux kernel. Topics covered include the
C compiler, preprocessor, debugger, I/O, file manipulation, process control, inter-process
communication, and networking. Many complete example programs, written in the standard
ISO C99, are provided.
Appendices are kept on the book’s website (mml.sofpower.com). They supply useful
supplemental information for students, including text editing and how to set up Linux
learning environments on their own Windows® or Mac® computers.

Flexible Usage
This book is for people who wish to learn Linux and to become good at using it and writing
programs in it. The book does not assume prior knowledge of Linux or UNIX, but has the
depth to satisfy even those with Linux experience.
Compared to other Linux books, this text is not a thick volume. However, it presents
many topics comprehensively and in depth. Many examples are given to illustrate concepts
and usage. It is well-suited for a one-semester course. An instructor can cover all the chapters
in sequence or choose among them, depending on the class being taught.
For an Introduction to Linux course, the chapters on C-level programming and perhaps
on Web hosting can be skipped.
For a system programming-oriented course, the Linux primer, interactive use of Bash,
and the GNU desktop material can be omitted or assigned for reading at the beginning of
the class. This will provide more time for the hardcore topics on programming.
For an Introduction to Operating System Principles course, this book is a good sup-
plement. Discussion of Linux subjects—the Shell, file system structure, concurrent process
management, I/O structure, signals/interrupts, and inter-process communication—provides
concrete examples and adds to the students’ understanding of the abstract operating system
principles being studied.
For a server-side Web programming course, the coverage of Bash, file system, Internet
and the Web, and Web hosting can make this book a great supplemental text.
For courses on network programming, graphics, C programming, distributed computing,
etc., the book can be a valuable supplement as well.
For those who use Linux in school or at work, this book enables you to apply the
system’s capabilities more effectively, resulting in much increased productivity. Ready-to-
use examples provide many immediate practical applications.
Going beyond, you can learn how to write programs at the Shell and the C levels. This
ability enables you to build new capabilities and custom tools for applications or R&D.

Example Code Package


Throughout the book, concepts and usages are thoroughly explained with examples. Instead
of using contrived examples, however, every effort has been made to give examples with
practical value and to present them as complete programs ready to run on your Linux
system.
These programs are collected in an example code package ready to download from the
companion website (mml.sofpower.com). See page 353 for instructions on downloading and
unpacking the example code package. The description for each example program is cross-
referenced to its file location with a notation such as (Ex: ex05/argCheck.sh).

Easy Reference
You’ll find a smooth, readable style uncharacteristic of a book of this type. Nevertheless,
it is understood that such books are used as much for reference as for concentrated study,
especially once the reader gets going on the system. Therefore, information is organized and
presented in a way that also facilitates quick and easy reference. There are ample resource
listings and appendices (on the website) and a thorough and comprehensive index. The
in-text examples are also cross-referenced with files in the example code package. This book
will be a valuable aid for anyone who uses tools, accesses the Internet, or writes programs
under Linux, even occasionally.

Acknowledgments
I would like to thank the editors Randi Cohen, Paul Boyd, and others at CRC press for
their help and guidance throughout the writing and production of this second edition. Their
dedication is indeed much appreciated.
During the planning and writing of this book, several reviews have been conducted.
Special thanks go to Professor Charles Border, Rochester Institute of Technology, NY, who
made excellent suggestions for improving the manuscript and making the book easier to use
for students and teachers, including the idea to provide students with information to easily
set up Linux learning environments on their own computers.
Finally, I want to express my sincere gratitude to my wife, Jennifer, whose support and
encouragement have been so important to me through the years.

Paul S. Wang
王 士 弘
www.cs.kent.edu/~pwang
Contents

Preface v

Introduction 1

Chapter 1 ■ A Linux Primer 7


1.1 What Is an Operating System? . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Getting Started: Login and Logout . . . . . . . . . . . . . . . . . . . . . . 8
Desktop Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Starting a Terminal Window . . . . . . . . . . . . . . . . . . . . . . . . 9
Remote Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Understanding the Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Entering Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Trying a Few Commands . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Correcting Typing Mistakes . . . . . . . . . . . . . . . . . . . . . . . . . 15
Aborting a Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Exercise A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5 Using Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Current Working Directory and Filenames . . . . . . . . . . . . . . . . . 17
Handling Files and Directories . . . . . . . . . . . . . . . . . . . . . . . 19
Standard Personal Directories . . . . . . . . . . . . . . . . . . . . . . . . 19
1.6 Protecting Files: Access Control . . . . . . . . . . . . . . . . . . . . . . . . 20
The Super User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Examining the Permission Settings . . . . . . . . . . . . . . . . . . . . . 20
Setting Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.7 Exercise B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.8 Text Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.9 Getting Hard/Saved Copies . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.10 Communicating with Others . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Who’s Who on the System: finger . . . . . . . . . . . . . . . . . . . . 24
Email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.11 Browsing the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.12 Exercise C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.13 Creating and Running Your Own Program . . . . . . . . . . . . . . . . . . 27
Compiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.14 Exercise D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.15 Consulting Linux Documentation . . . . . . . . . . . . . . . . . . . . . . . 29
1.16 Exercise E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
1.17 Rounding Up Useful Commands . . . . . . . . . . . . . . . . . . . . . . . . 30
1.18 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

viii
Chapter 2 ■ The Desktop Environment 35
2.1 Desktop Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.2 Desktop Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.3 The GNOME 3 Desktop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4 Understanding GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.5 Working with the Desktop . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Session Control and System Settings . . . . . . . . . . . . . . . . . . . . 39
Launching Application Programs . . . . . . . . . . . . . . . . . . . . . . 39
Managing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Multiple Workspaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Desktop Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.6 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
The X Window System . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Window Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Window Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.7 The File Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Navigating the File Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Opening a File or Folder . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Finding Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Managing Files and Folders . . . . . . . . . . . . . . . . . . . . . . . . . 46
Access Control for Files and Folders . . . . . . . . . . . . . . . . . . . . 47
Writing CDs or DVDs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Changing Your Default File Browser . . . . . . . . . . . . . . . . . . . . 48
2.8 Terminal Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Starting a GNOME Terminal . . . . . . . . . . . . . . . . . . . . . . . . 49
Terminal Window and the Shell . . . . . . . . . . . . . . . . . . . . . . 50
Select, Copy, and Paste . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Web and Email Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.9 Accessing Help and Documentation . . . . . . . . . . . . . . . . . . . . . . 51
2.10 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Chapter 3 ■ Interacting with the BASH Shell 53


3.1 Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.2 Interacting with Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3 Command-Line Editing and Command Completion . . . . . . . . . . . . . 55
3.4 Bash Command Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.5 Bash Input/Output Redirection . . . . . . . . . . . . . . . . . . . . . . . . 58
Standard Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . 58
I/O Redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.6 Bash Job Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.7 Bash Shell Expansions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
History Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Alias Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Brace and Tilde Expansions . . . . . . . . . . . . . . . . . . . . . . . . . 67
Variable Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Command Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Process Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Filename Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
3.8 Bash Built-in Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.9 Shell Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.10 Environment of a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Command Execution Environment . . . . . . . . . . . . . . . . . . . . . 72
3.11 Examples of Bash Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Customized Prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Removing Files Safely . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Copy, Paste, and I/O Redirection . . . . . . . . . . . . . . . . . . . . . 74
Displaying Manual Pages . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Setting Up Your Personal Web Folder . . . . . . . . . . . . . . . . . . . 76
3.12 Default File Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
3.13 Shell Startup and Initialization . . . . . . . . . . . . . . . . . . . . . . . . 77
3.14 Shell Special Characters and Quoting . . . . . . . . . . . . . . . . . . . . . 79
Quoting in Bash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.15 Simple Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.16 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.17 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.18 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

Chapter 4 ■ Putting Commands and Applications to Use 87


4.1 Useful GUI Apps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Word Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Document Formatting and Typesetting . . . . . . . . . . . . . . . . . . 89
Drawing and Diagramming . . . . . . . . . . . . . . . . . . . . . . . . . 90
Raster Graphics and Image Processing . . . . . . . . . . . . . . . . . . . 91
File Upload and Download . . . . . . . . . . . . . . . . . . . . . . . . . 92
Password Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Cloud Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3D Modeling and 3D Printing . . . . . . . . . . . . . . . . . . . . . . . . 94
Mathematical Calculations . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.2 Commands and Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Leading and Trailing Lines: head and tail . . . . . . . . . . . . . . . . 96
Character Translation: tr . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Tab Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Folding Text Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Calendar Reminders by Email . . . . . . . . . . . . . . . . . . . . . . . 98
Sorting Text Lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.3 The grep Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
4.4 Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Quoting in Search Patterns . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.5 Patterns for grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.6 A Stream Editor: sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.7 Building Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Address Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.8 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Chapter 5 ■ Writing BASH Scripts 111


5.1 Invoking Shell Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.2 A First Shell Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.3 Shell Script Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.4 Positional Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.5 The for Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.6 The if Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.7 Test Expressions and Exit Status . . . . . . . . . . . . . . . . . . . . . . . 118
Exit Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Test Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
5.8 The shift Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.9 The case Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.10 The while and until Commands . . . . . . . . . . . . . . . . . . . . . . . 120
5.11 Numerical Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
5.12 The break and continue Commands . . . . . . . . . . . . . . . . . . . . . 122
5.13 File Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
5.14 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
5.15 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.16 Variable Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.17 The Here Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
5.18 More on Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Function Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Return Value of a Function . . . . . . . . . . . . . . . . . . . . . . . . . 130
5.19 Redefining Bash Built-in Functions . . . . . . . . . . . . . . . . . . . . . . 131
5.20 Example Bash Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Example: Removing Unwanted Files . . . . . . . . . . . . . . . . . . . . 131
Example: Conditional Copy . . . . . . . . . . . . . . . . . . . . . . . . . 133
Example: Total File Sizes . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Example: Secure File Transfer . . . . . . . . . . . . . . . . . . . . . . . 136
Example: Resizing Pictures . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.21 Debugging Shell Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.22 Error and Interrupt Handling . . . . . . . . . . . . . . . . . . . . . . . . . 138
Interrupt Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
5.23 The Perl and PHP Alternatives . . . . . . . . . . . . . . . . . . . . . . . . 139
5.24 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.25 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
5.26 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Chapter 6 ■ The File System 145


6.1 A File Location Road Map . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
6.2 File Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Ordinary Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Special Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Symbolic Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
6.3 More on File Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Meaning of Permissions for a Directory . . . . . . . . . . . . . . . . . . 150
6.4 File Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
File Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
File Userid and Groupid . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Access Control Enforcement . . . . . . . . . . . . . . . . . . . . . . . . . 152
Setuid and Setgid Modes . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Establishing a Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
DAC and MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
6.5 File System Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Filesystem Organization . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Mounted Filesystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Filesystem Super Block and Block Groups . . . . . . . . . . . . . . . . . 157
6.6 The Filesystem Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.7 Creating Special Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
6.8 Network Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
6.9 Searching the File Tree: find . . . . . . . . . . . . . . . . . . . . . . . . . 158
6.10 The locate Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
6.11 Saving, Compressing, and Distributing Files . . . . . . . . . . . . . . . . . 160
Packing Files with shar . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
6.12 File Sharing with Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
6.13 More File-Related Commands . . . . . . . . . . . . . . . . . . . . . . . . . 162
6.14 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
6.15 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
6.16 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Chapter 7 ■ Networking, Internet, and the Web 165


7.1 Networking Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
7.2 The Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Network Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Packet Switching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Client and Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
7.3 The Domain Name System . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
7.4 Networking in Nautilus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Accessing Samba Shared Files . . . . . . . . . . . . . . . . . . . . . . . . 171
7.5 Networking Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
7.6 SSH with X11 Forwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
No Password ssh, sftp, and scp . . . . . . . . . . . . . . . . . . . . . . 174
Remote File Synchronization . . . . . . . . . . . . . . . . . . . . . . . . 174
7.7 Cryptography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
7.8 Symmetric Cryptosystems . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
7.9 Public-Key Cryptography and Digital Signature . . . . . . . . . . . . . . . 177
7.10 GNU Privacy Guard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Setting Up GnuPG Keys . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Encryption/Decryption with GnuPG . . . . . . . . . . . . . . . . . . . . 180
7.11 Secure Email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Secure Email with Thunderbird . . . . . . . . . . . . . . . . . . . . . . . 181
7.12 Message Digests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Software and Message Signing . . . . . . . . . . . . . . . . . . . . . . . 183
7.13 The Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
Hypertext Markup Language . . . . . . . . . . . . . . . . . . . . . . . . 184
URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Accessing Information on the Web . . . . . . . . . . . . . . . . . . . . . 185
7.14 Handling Different Content Types . . . . . . . . . . . . . . . . . . . . . . . 186
7.15 Putting Information on the Web . . . . . . . . . . . . . . . . . . . . . . . 186
7.16 What Is HTML? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
7.17 Web Hosting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
7.18 Domain Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Accessing Domain Registration Data . . . . . . . . . . . . . . . . . . . . 189
7.19 The DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
DNS Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
DNS Resolvers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
7.20 Dynamic Generation of Web Pages . . . . . . . . . . . . . . . . . . . . . . 191
Dynamic Server Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
7.21 HTTP Briefly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
7.22 A Real HTTP Experience . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
7.23 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
7.24 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
7.25 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

Chapter 8 ■ Basic System Administration 199


8.1 Managing Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Sudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
8.2 Package Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Software Management Tasks . . . . . . . . . . . . . . . . . . . . . . . . 202
8.3 Managing Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.4 Network Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
8.5 Firewall Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
8.6 Managing Filesystems and Disks . . . . . . . . . . . . . . . . . . . . . . . 209
Disk Partitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Managing Filesystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Adding a New Disk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
LVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
File Storage Quotas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
8.7 File and System Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Backup with Déjà Dup . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
8.8 System Booting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
8.9 SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
SELinux Status and Enforcing Modes . . . . . . . . . . . . . . . . . . . 218
Security Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Maintaining and Managing File Contexts . . . . . . . . . . . . . . . . . 221
8.10 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
8.11 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
8.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

Chapter 9 ■ Web Hosting: Apache, MySQL, and PHP 225


9.1 What Is a Web Server? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
9.2 URL and URI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
9.3 Request Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
9.4 Response and Content Types . . . . . . . . . . . . . . . . . . . . . . . . . 227
9.5 The Apache Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
9.6 Apache on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
Installing Apache with Package Management . . . . . . . . . . . . . . . 228
Running the Apache Web Server . . . . . . . . . . . . . . . . . . . . . . 228
Controlling the Apache Server . . . . . . . . . . . . . . . . . . . . . . . 229
9.7 Apache Run-Time Configuration . . . . . . . . . . . . . . . . . . . . . . . 229
Apache Configuration File Basics . . . . . . . . . . . . . . . . . . . . . . 230
About Configuration Directives . . . . . . . . . . . . . . . . . . . . . . . 230
Loading Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Global Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Container Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
9.8 Access Control under Apache . . . . . . . . . . . . . . . . . . . . . . . . . 233
What Is Access Control? . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Access Control by Host . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
9.9 Requiring Passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Setting Up User Login under Apache . . . . . . . . . . . . . . . . . . . . 234
9.10 How HTTP Basic Authentication Works . . . . . . . . . . . . . . . . . . . 236
9.11 How HTTP Digest Authentication Works . . . . . . . . . . . . . . . . . . 236
Basic vs. Digest Authentication . . . . . . . . . . . . . . . . . . . . . . . 237
9.12 Password Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
9.13 Automatic File Deflation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
9.14 HTTPS and SSL/TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
9.15 HTTPS Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
9.16 Manual Installation of Apache . . . . . . . . . . . . . . . . . . . . . . . . . 240
Configure and Compile . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
9.17 What Is PHP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
9.18 The PHP Module for Apache . . . . . . . . . . . . . . . . . . . . . . . . . 243
Installing the PHP Module . . . . . . . . . . . . . . . . . . . . . . . . . 243
9.19 Testing PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
9.20 PHP Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
9.21 PHP Command Line Scripting . . . . . . . . . . . . . . . . . . . . . . . . 246
9.22 Database Support for the Web . . . . . . . . . . . . . . . . . . . . . . . . 247
9.23 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Initializing, Starting, and Stopping MySQL . . . . . . . . . . . . . . . . 248
MySQL Run-Time Configuration . . . . . . . . . . . . . . . . . . . . . . 248
Administering MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Resetting the MySQL Root Password . . . . . . . . . . . . . . . . . . . 250
9.24 Installing phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
9.25 Installing MySQL/MariaDB . . . . . . . . . . . . . . . . . . . . . . . . . . 251
9.26 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
9.27 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
9.28 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

Chapter 10 ■ C Programming in Linux 255


10.1 Command-Line Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Exit Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Compile and Execute . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
10.2 Linux Command Argument Conventions . . . . . . . . . . . . . . . . . . . 258
10.3 The GCC Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
The gcc Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Options for gcc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
The C Preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Preventing Multiple Loading of Header Files . . . . . . . . . . . . . . . 262
Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Assembly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Linking and Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
10.4 The C Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
I/O to Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
File Updating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
I/O Redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
10.5 Creating Libraries and Archives . . . . . . . . . . . . . . . . . . . . . . . . 268
10.6 Error Handling in C Programs . . . . . . . . . . . . . . . . . . . . . . . . 269
Errors from System and Library Calls . . . . . . . . . . . . . . . . . . . 270
Error Indications from Mathematical Functions . . . . . . . . . . . . . . 271
10.7 Error Recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
10.8 Debugging with GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Interactive Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Basic gdb Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
A Sample Debugging Session with gdb . . . . . . . . . . . . . . . . . . 277
10.9 Examining Core Dumps . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
10.10 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
10.11 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
10.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Chapter 11 ■ I/O and Process Control System Calls 285


11.1 System-Level I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.2 I/O Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.3 Reading and Writing I/O Descriptors . . . . . . . . . . . . . . . . . . . . . 288
Moving the Current Position . . . . . . . . . . . . . . . . . . . . . . . . 289
11.4 Operations on Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Creating and Deleting a File . . . . . . . . . . . . . . . . . . . . . . . . 290
Linking and Renaming Files . . . . . . . . . . . . . . . . . . . . . . . . . 291
Accessing File Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Determining Allowable File Access . . . . . . . . . . . . . . . . . . . . . 294
11.5 Operations on Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Creating and Removing a Directory . . . . . . . . . . . . . . . . . . . . 295
11.6 Directory Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Current Working Directory . . . . . . . . . . . . . . . . . . . . . . . . . 296
11.7 An Example: ccp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
11.8 Shell-Level Commands from C Programs . . . . . . . . . . . . . . . . . . . 299
11.9 Process Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Virtual Address Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Process Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
11.10 The Process Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
The ps Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
11.11 Process Creation: fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.12 Program Execution: exec Routines . . . . . . . . . . . . . . . . . . . . . . 305
Example: A Simple Shell . . . . . . . . . . . . . . . . . . . . . . . . . . 307
11.13 Synchronization of Parent and Child Processes . . . . . . . . . . . . . . . 308
11.14 Process Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
11.15 The User Environment of a Process . . . . . . . . . . . . . . . . . . . . . . 310
Example: Command Search . . . . . . . . . . . . . . . . . . . . . . . . . 311
11.16 Interrupts and Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Sending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Signal Delivery and Processing . . . . . . . . . . . . . . . . . . . . . . . 314
Signal Trapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
11.17 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
11.18 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
11.19 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Chapter 12 ■ Inter-process and Network Communication 321


12.1 Opening a Process for I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
12.2 IPC with pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Pipe between Two Commands . . . . . . . . . . . . . . . . . . . . . . . 325
12.3 Connecting a File Descriptor to a File Stream . . . . . . . . . . . . . . . . 326
12.4 Two-Way Pipe Connections . . . . . . . . . . . . . . . . . . . . . . . . . . 327
12.5 Network Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Client and Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
12.6 Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Creating Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Socket Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Local and Internet Socket Addresses . . . . . . . . . . . . . . . . . . . . 331
12.7 A TCP Echo Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
12.8 Using Datagram Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
12.9 Socket I/O System Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Shutting Down Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
12.10 TCP-Based Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Accepting a Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
An Example TCP/IP Server . . . . . . . . . . . . . . . . . . . . . . . . 340
12.11 Network Library Routines . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
12.12 Daemon Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Programming a Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
12.13 Input/Output Multiplexing . . . . . . . . . . . . . . . . . . . . . . . . . . 345
12.14 TCP Out-of-Band Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
12.15 For More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
12.16 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
12.17 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

Appendices Online 351

Website and Example Code Package 353

Bibliography 355

Index 357
Introduction

Ever since its introduction in the early 1990s, Linux has evolved, improved, and significantly
expanded its user base. It has become an important factor in modern computing.
Linux is a free and open-source operating system that works, in many respects, just like
UNIX. Linux became popular as a widely preferred server platform for Web hosting, cloud
computing, and other purposes. However, with the introduction of the GNOME and KDE
desktop user interface environments (and other more recent ones), plus many improvements
and new applications, Linux has been gaining ground as a home/office system, as well as a
more dominant force in the server market.
Because it is free and open source,1 Linux is a very attractive teaching tool for computer
science and engineering departments. Also, because it is fast and reliable, businesses, such as
Amazon, Google and Facebook, often choose Linux to run their Web and application servers.
Companies and developer communities, in the United States and worldwide, contribute to
kernel development, new products, personnel training, and technical support for Linux,
while the operating system itself remains free.
Let’s take a brief look at the history of Linux, its versions and features, and the topics
involved in learning how to use Linux.

A Brief History of Linux


The beginning of Linux can be traced back to 1991 when Linus Torvalds, a young student
at the University of Helsinki, Finland, began to create a new POSIX2 compliant kernel and
an operating system more powerful than MINIX (MIni-uNIX).3 Three years later, version
1.0 of the Linux kernel, the central part of the new UNIX-like system, was released.
The GNU open-source software movement would also later make many contributions to
Linux, as remarked upon by Richard Stallman:

“When you are talking about Linux as a OS, you should refer to it as GNU/Linux.
Linux is just the kernel. All the tools that make Linux an OS have been contributed
by GNU movement and hence the name GNU/Linux.”

Linux has come a long way since its early days. Today, it is a prime example of the
success of open-source, community-developed software. Linux is used on servers, desktop
computers, laptops, and netbooks. The highly successful mobile system Android (version
1.0 2008) derived its kernel directly from Linux.
The article Fedora project leader Matthew Miller talks world domination on Linux’s 25th
birthday (PCWorld 08/25/2016) says:

“In many ways, we’ve actually reached the fabled ‘world domination’ everyone
joked about 20 years ago,” says Miller. “Linux is the default operating system for
1 Linuxis distributed under the GNU General Public License.
2 EEE Computer Society standards for Portable Operating System Interface.
3 MINIX is the first open-source clone of UNIX for the IBM PC written by Professor Andrew S. Tanen-

baum in 1987.

1
2 ■ Introduction

most things ... Android puts Linux at the heart of the most common consumer
operating system in the world. Open source, to some degree or another, is now
the default licensing model.”

Linux Versions
Unlike proprietary operating systems, Linux is a combination of open-source programs,
including the Linux kernel, GNU tools, desktop managers, and installation and package
management systems, plus many other system-, server-, and user-level applications. Anyone
can create different combinations of these components, perhaps also change or improve them,
and create a Linux distribution with unique characteristics. Thus, it is not surprising that
many companies and groups all over the world have been distributing somewhat different
versions of Linux ready to install on your computer.
Linux systems are widely used by individuals, academic institutions, corporations, and
service providers such as Web hosts, data centers, and cloud servers.
Widely used Linux versions include
• Ubuntu—“Ubuntu” means “humanity” in Zulu. Ubuntu Linux started as a version of
the popular Debian GNU/Linux. All versions of Ubuntu Linux are free, and there is no
charge for mailing a CD to you. Ubuntu supports the GNOME Desktop environment,
while another version, Kubuntu, uses the KDE Desktop. Ubuntu is easy to install
and very user friendly, which has quickly made it the most popular version of Linux.
Ubuntu is sponsored by the U.K.-based Canonical Ltd., owned by South African
entrepreneur Mark Shuttleworth.
• Red Hat Enterprise Linux—The original Red Hat Linux started in 1994 and was
discontinued by Red Hat Inc. in 2004. The company now focuses on Red Hat Enterprise
Linux (RHEL) for business environments and on Fedora as a community-supported
software project for home, personal, and educational use.
• CentOS—RHEL largely consists of free and open-source software, but the executa-
bles are made available only to paying subscribers. CentOS (Community ENTerprise
Operating System) is a completely free version of RHEL (minus the Red Hat logos)
made available to users as new versions of RHEL are released.
• Fedora—Fedora is a leading-edge Linux distribution where new features and improve-
ments are tested before being included in RHEL/CentOS. Fedora makes frequent
software updates and is tightly integrated with the GNOME user environment.
• openSUSE—This is a major retail Linux distribution supported worldwide by Novell
(now part of Micro Focus). Novell acquired the SuSE Linux (a German translation of
the original Slackware Linux) in 2004. In the following year, Novell decided to make the
SUSE Professional series more open as a community-developed, open-source software
and to rename it openSUSE.
• Debian—Debian Linux consists entirely of free and open-source software. Its primary
form, Debian GNU/Linux, is a popular and influential Linux distribution. Debian
is known for an abundance of options. Recent releases include over 26,000 software
packages for all major computer architectures. Ubuntu is a derivative of Debian.
• Mint—Linux Mint, a newcomer, is a reliable and popular desktop distribution. It
adopts a conservative approach to software updates and is based on Debian and
Ubuntu.
Introduction ■ 3

• Raspbian—Based on Debian, Raspbian is Linux optimized for the Raspberry Pi, a


credit-card-sized computer for education as well as practical uses.
There are many kinds of Linux distributions for desktop computers, servers, and mo-
bile devices, as well as embedded systems. The Linux Standard Base (LSB) is an effort,
through the Linux Foundation, to standardize many aspects of Linux distributions, and is a
superset of the POSIX standards. Major Linux distributions follow LSB. This textbook ad-
dresses features common to most Linux systems and indicates important differences where
appropriate.

The UNIX/Linux Philosophy: Small Is Beautiful


The UNIX philosophy influenced not just the original operating system developed by Ken
Thompson at Bell Labs (1969), but also the many UNIX clones and UNIX-like systems cre-
ated afterward. Taken together, these UNIX-like systems are some of the very best operating
systems developed to date.
The generally agreed-upon central tenants of the UNIX Philosophy can be listed as
• Keep programs small—Write a program to do one well-defined task; do it efficiently,
and do it well.

• Avoid verbosity—Perform no unessential output from any programs; use short names
for commands and command options.
• Make programs modular—Build small, independent, and self-sufficient program parts,
with each serving a specific function. These program parts can be flexibly combined
to form larger programs. This principle is reflected in the small kernel (core of the
operating system) cooperating with a large set of small commands which work well
together.
• Compose programs through interfaces—Write programs that are easy to interface with
other programs. The famous UNIX pipe, which interfaces the output of a program to
the input of another, is a primary example of this philosophy.

Keeping program input/output, configuration, and documentation in plain text (character


strings) as much as possible makes elements of the operating system easy to interface, read,
understand, and improve.
Linux systems have generally adhered to these principles of UNIX, but have also intro-
duced refinements and improvements.

Linux Features
Linux incorporates all the outstanding UNIX core features and adds graphical user interface
(GUI), software update and package management, security improvements, and many useful
applications. Important features of Linux include
• Multi-user and multi-processing—The ability to allow multiple users to login at the
same time and the ability to run many programs concurrently.
• Graphical user interface—Offering a desktop environment with windows, icons, panels,
and menus, making it easy to use point-and-click for operations. Most Linux systems
use the X Window system and allow the user to choose between two popular desktop
environments, GNOME and KDE.
4 ■ Introduction

• Package management—A systematic way to find, install, upgrade, configure, and re-
move the many software packages available. A package contains the executable pro-
gram and metadata specifying its title, version, purpose, author/vendor, dependencies
(on other packages), etc. Packages are made available in repositories for download-
ing. The Fedora and the Red Hat family Linux systems use the dnf (dandified yum)
tool and the rpm package format, while the Debian varieties use the apt (Advanced
Packaging Tool) and the deb format.
• Shells—A Shell is a command-line interface (CLI) to the operating system. It provides
interactive processing and execution of user commands. The standard (default) Shell
for Linux is Bash (born-again Sh), but you may easily choose to use a different Shell.
• Hierarchical file system—The entire file system is tree structured and is anchored at a
single directory called the root. The root directory contains files and other directories
that, in turn, contain more files and directories. Each user has a home directory for
his/her own files. The file system tree is divided into volumes, which can be mounted
or dismounted by attaching them to a node in the file tree. A physical storage device
can contain one or several file system volumes.
• File access control—Each file in the file system is protected by a sequence of bits
whose value is specified by the owner of the file. Access to files is controlled by the
operating system. System-wide access is granted to so-called super users, usually the
system administrators. To improve file and system security, the Security-Enhanced
Linux (SELinux) (kernel module available on most modern Linux distributions) can
also be enabled.
• Compatible file, device, and inter-process I/O—I/O to physical devices and I/O to
a file look the same to a user program. A user can redirect a program’s I/O so that
without changing the program itself, input or output can be directed to a terminal
window, file, or even to another program’s I/O. The ability to combine and connect
existing programs in this pipeline fashion provides great power and flexibility.
• Concurrent processes—Following UNIX, Linux provides a set of Shell commands and
C-language APIs to initiate and manipulate asynchronous, concurrent processes. This
allows a user to maintain several jobs at once and to switch between them. It is also
critical for pipelining several commands (processes) together.
• Serving the Internet—As UNIX, Linux systems provide local and wide area networking
through sockets that support the Internet Protocol (IPv4 and IPv6) and provides
efficient network services. System admin can easily manage, configure and start or
stop different network services. Linux also works well with the Apache Web Server to
provide Web hosting. As a result, Linux is very popular as a network server platform.
• Utilities—The Linux architecture encourages building self-contained programs to add
new facilities. Linux systems come with many utility programs including text editors,
document processors, email servers and clients, Web browsers, raster and vector image
editors, scripting languages, language compilers, file manipulation tools, databases,
multimedia tools, GUI design and programming tools, software engineering tools, and
networking and other system facilities. These utilities usually come in the form of a
Linux package which can be downloaded, installed, and managed easily with a package
manager.
The Linux kernel, the central part of the operating system which provides a programming
interface to the hardware, is robust and highly efficient. Figure 1 shows an overview of
Introduction ■ 5

FIGURE 1 Linux Organization

GUI

Windowing
Kernel

Hardware
Network
Files

Commands

CLI

the Linux system organization. When studying the various topics in this textbook, this
organizational diagram helps to tie them together.

The Linux Environment


Linux is a multi-user, time-sharing system that offers both a GUI (desktop and application
windows) as well as a CLI (the Shells). The desktop is the first thing you see after login.
The desktop displays one or more panels at the top and/or bottom of your screen. A panel
provides menus, launchers, and workspace switchers which perform various tasks. Icons on
the screen provide access to Computer, Services, File System, and so on.
Application programs fall into two broad categories: GUI applications and CLI appli-
cations. A GUI application displays its own graphical window with which the user may
interact via the mouse and the keyboard. In contrast, a CLI application must run inside a
terminal window and interacts with the user only through the keyboard.
Launchers in panels, in menus, or on the desktop make starting programs easy. However,
any program can be invoked by typing a command inside a terminal window. You can control
and switch among multiple windows on the screen. A command Shell helps you control and
manage multiple jobs inside any single terminal window.
The file system contains public files and programs for all users. Each user also has a
personal file directory known as the user’s home directory. Access to files and directories is
controlled by the file owner and group designations.
Linux allows a high degree of customization on a per-user basis. The Shell, as well as
important utilities such as the X Window System and text editors, refers to initialization
and configuration files. You can tailor these files to make the utilities run according to
your needs and preferences. You can even choose among different Shells to serve as your
CLI. Documentation for Linux and its utilities can be conveniently accessed locally on your
computer, as well as on the Web.
6 ■ Introduction

Learning Linux
Linux systems are used widely in colleges, universities, and companies, both as servers and
as workstations in computer labs. Many users have Linux/Windows dual boot on their
personal machines. Knowledge of Linux is important for both learning and employment.
To make experimentation easier, a student can set up a private Linux learning environ-
ment on his/her own Windows® or Mac® computer. Specific instructions can be found in
the Appendix.
This book covers a set of carefully selected topics that enable you to understand oper-
ating system concepts, to use Linux effectively, and to take full advantage of your Linux
computer.
The chapters are sequenced in a drill-down progression starting with a primer to get
you started quickly on Linux with hands-on learning and meaningful tasks.
Next, we present the Linux GUI and the standard Linux CLI (the Bash Shell). Then we
discuss useful apps, commands, filters to build pipelines, and regular expressions for pattern
matching. All this paves the way for writing Bash programs called Shell scripts.
Digging deeper, we discuss how to control files and folders, and how Linux organizes
and manipulates files in a set of filesystems that is an important part of the Linux kernel.
Computers are rarely used in isolation, and, like other modern operating systems, Linux
relies heavily on networking for many operations. With a good foundation from the earlier
chapters, we discuss networking, Web, Internet, public-key encryption and digital signature.
Linux system administration becomes important after a user gets familiar with the
operating system. For people serious about a Linux-related career, system admin knowledge
is critical. We cover the basics of Linux system management in Chapter 8.
Attention then turns to C-level programming, kernel system calls, processes, and inter-
process communication. These topics shed light on the internals of Linux and provide a
deeper understanding of concepts and topics covered in earlier chapters. The material should
prove especially important for CS/CE majors.
Thus, you will find traditional as well as contemporary topics important for the modern
Linux environment. The material in this book applies to most popular Linux systems. The
knowledge gained will enable you to use any version of Linux with ease. Major differences
among Linux versions are noted where appropriate.
Because Linux is best learned through frequent experimentation and practice, we begin
with a primer that gets the new user started quickly. We offer examples and practical
ways to use Linux throughout the book. Many examples are provided to illustrate concepts
and to demonstrate programming techniques. This textbook also contains an example code
package4 which provides complete programs ready to download and run on your computer.
The material is presented for smooth reading as a textbook, but also for convenient reference
later on.

4 See page 353 for downloading instructions.


CHAPTER 1

A Linux Primer

If you are serious about computing, safeguarding security, and understanding how an oper-
ating system works, Linux is the system of choice. To learn Linux you must use it, and, of
course, to use it you must learn it. Such a paradox is rather common—you probably learned
to drive a car this way. You just need some basic help and pointers to get started. Here
we present an overview of basics. Once you understand the material in this chapter, you
will be able to use the operating system to learn more in each successive chapter. At first,
you need a learner’s permit to drive a car. Consider this chapter your learner’s permit for
Linux; with a little practice you will be using Linux almost right away.
Learning Linux involves understanding how to use it from the user level, how to apply
its powers and apps effectively, features making it such a good server, and how to program
it from the system level. With this textbook, you’ll begin to master Linux.
This primer provides basic information and a selection of topics designed to get you
started using Linux quickly. As you read this chapter, try the different commands and
features as you come to them. In each case, we will provide enough information to get you
on the system and learning.

1.1 WHAT IS AN OPERATING SYSTEM?


The operating system controls a computer and makes it usable. It brings life to the innate
electronic hardware components and orchestrates all activities on a computer. The same
hardware under a different operating system is literally a different computer.
The operating system provides service and control functions to users, programs, files, op-
erators, display monitors, printers, network connections, and everything else on a computer
system. A computer operating is one of the most complicated and sophisticated objects
humans ever built.
A modern operating system like Linux consists of three main parts: a kernel, interfaces
for users, programs, devices and networks, and a set of commands and apps. The kernel
deals with central functions, including concurrent program execution, memory management,
input/output (I/O), file services, networking and security. Commands and apps supply other
operations such as file managers, text editors, email processors, Web browsers, software
package managers, audio/video and image processing tools, language compilers, and so on.
Interfaces define and support communications among all the components.
For users, Linux provides easy-to-use Graphical User Interfaces (GUIs) in the form of
desktop environments. Linux also provides efficient and effective Command-Line Interfaces
(CLIs) in the form of Shells.

7
8 ■ A Linux Primer

1.2 GETTING STARTED: LOGIN AND LOGOUT


To access your Linux system, you must have a user account, identified by a userid and a
password, that have been created by a system administrator. At most installations, your
userid will be your last name or your first initials and last name (often all lowercase).
Your password is a safeguard against unauthorized use of your computer account. You
need to choose a password of at least eight or twelve characters (your local system may
enforce other conventions as well, such as a minimum length or that there be at least one
numeral or symbol). Passwords must be hard to guess. Correctly spelled words or names
of relatives are bad choices. A sequence containing upper and lower case characters, digits,
and symbols is usually better. Longer passwords can be a phrase. Since you are the only one
who knows your password, you must be careful with it. Forgetting your password means the
system administrator must create a new one for you. Giving your password to the wrong
person could have even more dire consequences; you could be blamed for whatever damage
is caused, intentionally or otherwise, by the other person. Do not tell or show anybody your
password. Keep it written down somewhere safe.
Once you have a userid and password, you can begin your Linux session. The first step is
the login procedure. Login protects the system against unauthorized use and authenticates
the identity of the user. You can use Linux from the console or across a network.

FIGURE 1.1 Linux Login Screen

Desktop Login
Find a computer displaying the Linux desktop login screen (Figure 1.1). This can be the
console where the keyboard, mouse, and display are directly connected to the computer
hardware running the Linux system. Or it can be a different computer on the LAN (Local
Area Network). Colleges, universities, and companies often run computer labs with Windows
or Mac stations that can access Linux servers and display their desktop screens.
In any case, enter your correct password carefully and privately. If you are a new user and,
after several careful tries, you are unable to log in, it may be that the system administrator
has not yet established your userid on the computer. Wait a reasonable length of time and
try again. If you still have a problem, contact your system administrator.
After login, you’ll see your desktop displayed. The desktop enables the use of full-
GUI (Graphical User Interface) applications that allow point-and-click operations with the
mouse, touchpad or touch screen.
From the desktop, you can press the windows or super key or click on the start
icon to show/hide a start menu or applications menu displaying many tasks you can do.
Getting Started: Login and Logout ■ 9

The start icon is usually a Linux distribution logo located on the left end of your desktop
Panel (normally a horizontal bar across the top or bottom of your screen). In GNOME
3 for example, simply moving the mouse quickly to the upper left corner shows/hides the
Activity Screen (Figure 1.2).

FIGURE 1.2 A GNOME 3 Activity Screen

To log out from Linux look for a logout icon on the desktop Panel. More will be said
about desktops in Chapter 2.

Starting a Terminal Window


From the desktop, you can conveniently initiate many operations including starting a ter-
minal window (Figure 1.3) that runs a Shell (Section 1.3). The Shell provides you with a
command-line interface (CLI) where you can enter commands to perform almost any task
on Linux quickly and efficiently.

FIGURE 1.3 A Terminal Emulation Window

To start a terminal window, go to the start menu and click on the System tools->Terminal
10 ■ A Linux Primer

option or the Accessories->terminal option, depending on your Linux and desktop. The
terminal may be gnome-terminal, konsole, or another depending on your Desktop envi-
ronment. The GNOME 3 Applications menu (Figure 1.4) includes a gnome terminal icon
to conveniently launch a terminal window. A terminal window emulates a character-based
computer terminal and allows you to use Linux through a command interpreter called the
Shell (Section 1.3). The terminal window allows you to change its appearance and font to
your own liking.
As it starts, the Shell also positions you at your home directory (Section 1.5), the file
folder reserved for you as a user on Linux. The Shell indicates its readiness to take your
commands by displaying a prompt at the beginning of a line.

FIGURE 1.4 GNOME 3 Applications Menu

When you are finished with a terminal window, you may close it by
exit (exits from Shell and closes the terminal window)
logout (same as exit)
The character ctrl+d (the character d typed while holding down the ctrl key) typed alone
on a command line often can be used in place of the exit command. Exit with ctrl+d
is convenient but dangerous, because one typing error can close your terminal window. See
Chapter 3 for how to disable exit via ctrl+d.
By the way, we shall use the notation
ctrl+X
to denote a control character, where X is some character. Note also that although the
convention is to show an uppercase character, you do not need to hold down shift when
typing a control character.

Remote Login
Universities and other institutions often run large Linux servers for users to access through
a LAN or even the Internet. You can use TELNET, or more likely SSH (Secure Shell), to
access a Linux system from another computer, which can be a PC, another Linux system, or
Getting Started: Login and Logout ■ 11

any other platform. Figure 1.5 shows SSH access, via the Putty tool (free and recommended),
to a Linux host tiger.cs.kent.edu from MS Windows® .
On Linux, the Shell-level command ssh provides SSH and is used to access a remote
Linux server from a Linux system. For example,
ssh [email protected]
or
ssh -X [email protected]
networks to the computer tiger.cs.kent.edu (the domain name of the computer) and
attempts to log in with the userid pwang. Remote login normally supports only CLI access.
The -X (capital X) option allows the remote computer to open the graphical display on the
local Linux and therefore enables you to also launch remote applications that require a GUI.
Running GUI programs remotely involves much heavier network traffic and can be slow.
Without the -X option you’ll be able to run only command-line applications on the
remote computer which is usually the efficient and sensible thing to do. We will return to
SSH in Chapter 7 (Section 7.6) where networking is discussed. Download, installation, and
usage information for SSH/SFTP can be found in the appendices on the companion website
(mml.sofpower.com).
Successful remote login via SSH results in your SSH window being connected to a login
Shell running on the remote Linux. After login, Linux will record your login in a system

FIGURE 1.5 SSH Login via Putty

log, display a message showing the time and place for your last login, and initiate a Shell
to take your commands.
When you see the prompt, you are ready to begin computing. After you are done, you
will need to log out from the remote Linux. To log out, first close any programs that you have
been running and then issue the Shell-level command exit or logout. It is a good practice
to first close all running programs manually instead of relying on the logout process to close
them for you.
12 ■ A Linux Primer

1.3 UNDERSTANDING THE SHELL


The Shell displays a prompt to signal that it is ready for your next command, which it then
interprets and executes. On completion, the Shell re-signals readiness by displaying another
prompt.
There are several available Shells: the original Shell written by S. R. Bourne known
as the Bourne Shell or Sh, the C-Shell or Csh developed at UCB by William Joy, and an
enhanced Csh named Tcsh which has replaced Csh for the most part. The Dash shell is a
bare-bones and POSIX-compliant implementation of Sh usually used only at system boot
time. The standard Shell for Linux is the Bash (Bourne-Again Sh), which is a powerful and
much improved version of Sh. The default Shell on most Linux distributions is Bash.
At the Shell prompt, enter the command
echo $0
to display the name of the Shell you are using. Here echo displays the value of the Shell
variable $0. Don’t worry, Chapter 3 explains how this works.
You can change the default Shell with the chsh (change Shell) command. For security
reasons, usually only approved Shells can be used. In this text we will assume the Bash
Shell, although basic features of all Shells are very similar.

Entering Commands
In Linux, you can give commands to the Shell to start application programs, manage files
and folders, control multiple jobs (tasks that are running), redirect I/O of programs from/to
files, connect one program to another, and perform many other tasks. Virtually anything
you want done in Linux can be accomplished by issuing a command to the Shell.
Many different commands are available, but some general rules apply to all of them. One
set of rules relates to command syntax—the way the Shell expects to see your commands.
A command consists of one or more words separated by blanks. A blank consists of one or
more spaces and/or tabs. The first word is the command name (in this book the name of a
command will appear in boldface); the remaining words of a command line are arguments
to the command. A command line is terminated by pressing the return (or enter) key.
This key generates a newline character, the actual character that terminates a command
line. Multiple commands can be typed on the same line if they are separated by a semicolon
(;). For example, the command
ls folder
lists the names of files in a folder (directory) specified by the argument folder. If a directory
is not given, ls lists the current working directory (Section 1.5).
Sometimes one or more options is given between the command name and the arguments.
For example,
ls -F folder
adds the -F (file type) option to ls telling ls to display the name of each file, or each filename,
with an extra character at the end to indicate its file type: / for a folder, * for an executable,
and so on.
At the Shell level, the general form for a command looks like
command-name [ options ] … [ arg ] …
Another random document with
no related content on Scribd:
ochtend en, nog slaapdronken, waggelend op hun beenen; alles was
gekleurd met een grauwe tint, die met elke minuut lichter werd, tot ze
zich oploste in de eerste zonnestralen, die de dauwdroppels op de
klapperbladeren deden fonkelen.

De stralen daalden lager; ze vielen over de boomen heen op ’t


afdakje van ’t paviljoentje der Van Brakels; toen er onder. In de
luierdstoelen sliepen de twee mannen; de oude, [254]stil en rustig;
wel duizendmaal had hij op ’t land in zoo’n stoel geslapen; de
jongere luid snorkend. Beider gezichten waren opgezwollen en rood
van het drinken en glommen in het zonlicht alsof ze met vet waren
besmeerd. En in het centrum van de karaf met brendy schiep een
straaltje van den lichtbundel een prachtige helder gouden ster,
tintelend en schitterend met vroolijke levendige kleurwisseling bij de
geringste beweging.

Een inlandsche bediende sloop zacht naderbij op zijn bloote voeten;


hij ging ’t galerijtje op, nam de flesch weg en de glazen, bracht die
even achter ’t muurtje, dat het voorerf van het achtererf scheidde, en
zette daar de karaf aan zijn ongewasschen mond.

’t Was Van Brakel of hij blind werd, toen hij, de oogen openend, in de
zon keek.

Hij schopte tegen den stoel van den ouden heer.

„Zeg, zeg pa; ga naar uw t a m p a t .”

Beiden stonden op en sukkelden naar hun kamer, waar ze de


gendie’s voor den mond zetten, veel water dronken en toen nog half
slapend in hun bedden neervielen.

Het was de eerste dag van een nieuw jaar.


De poging gelukte.

Toen Van Brakel eenige dagen later zijn plannen en ontwerpen den
resident aanbood, was deze daar wonderwel tevreden over; hij
beschouwde ze met groote belangstelling; hij zag in hoe nuttig zoo’n
verbindingsweg zou wezen in het fraaiste deel der gemeente en hoe
sierlijk de aanleg zou kunnen zijn; de resident werd er enthousiast
voor en beloofde [255]in alles zijn medewerking, behalve natuurlijk in
’t finantiëele, maar daarom vroeg Van Brakel niet.

Hij ging van ’t residentiehuis naar ’t koopmanskantoor en ook daar


hoorde men hem aan met de grootste welwillendheid, die nog
sterker werd toen men vernam dat de resident de plannen
goedkeurde en diens steun had toegezegd.

’t Was alles fraai en wel; men twijfelde volstrekt niet aan het goed
inzicht en de architectonische bekwaamheden van Van Brakel; men
was ook wel geneigd kapitaal te verstrekken,—maar de soliditeit van
den ingenieur op finantiëel gebied werd betwijfeld en daarom stelde
men hem moeilijke en zeer bindende voorwaarden, waardoor hij en
zijn werk altijd vast lagen in handen van de firma.

Hij nam die voorwaarden aan zonder zich te bedenken; hij was zóó
zeker van zijn zaak!

En er begon voor hem een tijd van groote drukte en werkzaamheid,


welke hem vroeger dan ooit op het pad deed zijn en later dan ooit te
huis deed komen.

Bij de algemeene medewerking ging alles wondervlug; de noodige


terreinen, behoorend bijna uitsluitend aan Chineezen en Arabieren,
werden met de hulp van ’t bestuur gemakkelijk verkregen; de aanleg
van den weg was voor weinig geld, door de gratis-hulp van
dwangarbeiders-personeel, spoedig gereed en weldra had Van
Brakel zijn perceelen afgebakend en voor zooveel noodig schoon
gemaakt en rezen ontzaglijke steenhoopen en bergen kalk en
stapels balken op het terrein. Hij had zijn begrooting goed ingericht,
naar zijn idee; zóó goed, dat hij zichzelven feitelijk bestal; als loon
voor zich had hij er weinig opgebracht in directe cijfers; het meeste
was onder [256]andere posten verscholen.—Bovendien, dat m o e s t
zoo uitkomen voor later, als hij een werk deed voor anderer
rekening; men moest hem dan immers niet kunnen verwijten, dat hij
mat met twee maten. En zoo kreeg hij telkens betrekkelijk aardige
sommetjes in handen, die „vrij” waren gekomen bij de uitbetaling van
werkloonen en leveringen; Lucie, die dat heerlijk vond, maar hem
bitter beklaagde, omdat hij zoo „voort” moest, wendde die in
hoofdzaak aan om hem in zijn weinigen vrijen tijd het leven lekker te
maken. Hij mocht niet meer eten aan de tafel in het
commensalenhuis. Daar moest hij gekleed komen, en k a s i a n ! hij
kwam pas ’s middags te zes uren thuis, doodmoe, en niets was dan
lekkerder, dan na het baden in nachtbroek en kabaai te blijven; er
werd elken avond een extra-dinertje voor hem klaar gemaakt, alles
uit blikjes en altijd iets met truffels, daar hield hij zooveel van,
k a s i a n ! Voor de gezelligheid aten Lucie en haar vader dan met
hem mee, k a s i a n !

Zondags, als er niet werd gewerkt, was het een dag van het meest
volkomen epicurisme, slechts afgewisseld door wandelingen ’s
morgens en rijtoertjes ’s middags en ’s avonds. Met dat al verdiepten
zich Van Brakel en zijn schoonvader zoo dapper in de spiritualiën,
dat de laatste er sufferig onder werd; de ijzeren natuur van den
ingenieur bood als altijd weerstand en hoeveel hij ook dronk des
avonds,—klokke vijf den anderen morgen was hij weer op het werk,
net als in ’s lands dienst.

Dan zette hij er gang in. Er moest, zoo was de afspraak met de
geldschietende firma, een huis worden afgemaakt en verkocht; dat
was niet alleen goed voor ’t geld, maar het stond [257]flink voor de
commanditairen in Europa; die zagen dan, dat er wat binnenkwam.

Toen daar het eerste huis stond, niet te groot, keurig net, met
marmer bevloerd, doelmatig ingedeeld en van alle gemakken
voorzien, kwamen belanghebbenden kijken, want het was te koop
geannonceerd.

Ofschoon hij rondliep, even groetend, maar zonder schijnbaar notitie


van de menschen te nemen, spitste hij de ooren en zag scherp toe.
Nu en dan glimlachte hij. Welzeker, ze zagen het wel! Ze zagen wel
dat hier geen beunhaas aan het werk was geweest, maar een man
van het vak. Alles was solide, alles was haaks. ’t Was niet een dier
talrijke Indische huizen, waarvan men de hoeksteenen met den haak
van een Engelschen wandelstok los kan peuteren en er uit halen,
zoodat het heele huis ten slotte ineenstort,—neen, ’t was, wat een
Hollandsche notaris zou noemen: hecht, sterk en weldoortimmerd.

Deskundigen kwamen het zien en bekeken het met welgevallen;


Chineezen snuffelden rond om na te gaan hoe dit en dat ineenzat,—
maar dáárover was men het eens: er stonden weinig huizen op de
plaats, die zoo goed gebouwd waren. Het bracht een prijs op ver
boven de taxatie, tot groote vreugde van Van Brakel en niet minder
van diens geldschieter. ’t Was voor den ontslagen
waterstaatsingenieur een m o m e n t d e g l o i r e , zooals hij er nog
geen had gekend; en het succes wischte voor het oogenblik alles
schoon; de koopman, die het werkkapitaal had verstrekt, gaf een
partij en de Van Brakels werden geïnviteerd.

Daar zouden zij dan weer komen, midden in de wereld, die hen had
uitgestooten; terug in de kringen, die zich voor hen [258]hadden
gesloten, in het gezelschap van hen, die hun gezelschap hadden
vermeden.
Van Brakel glom van trots en genoegen. Met een glimlach vol
zelfvoldoening om den mond en schitterende oogen liep hij met
groote stappen in ’t voorgalerijtje op en neer.

„Daar komen ze nu al,” zei hij op hoonenden toon. „Daar komen ze


nu al! Met hangende pootjes! Je zult nog wel meer grappen beleven.
Wacht maar! Er zal een tijd komen, dat ik hen trappen kan en dan
z a l ik hen trappen, de ploerten. Ze hebben me genoeg laten slikken
in den laatsten tijd. M i j n dag komt ook: wacht maar! Ik zal het hun
wel inpeperen, dàt beloof ik je.….. De ploerten”… herhaalde hij nog
eens, vol minachting naar buiten spuwend, als deed hij het der
geheele stad in het gezicht.

Lucie lette er niet op; zij was geheel in gepeins verzonken, en


opziende, als iemand, die met haar gedachten ver van tijd en plaats
is, zei ze:

„Ik weet waarachtig niet, wat ik zal aandoen op die partij.”

Toch was zij zenuwachtig.

Zij moesten alles nieuw hebben en hij was niet meer gewoon aan
min of meer voornaam gezelschap in „pakean deftig.”

Het liep echter uitmuntend af. Menschen, die hem in geen maanden
hadden gegroet, spraken hem aan alsof ze voortdurend met hem in
de beste verstandhouding hadden verkeerd; dames, die Lucie van
vroeger kende, behandelden haar als zusters en verzekerden hoe
gelukkig ze waren, dat nu alles zóó geschikt was.

Wat ze meenden, wist Lucie niet goed, maar ze vond het heerlijk. En
ze danste ook weer, al was het niet zooveel als [259]vroeger toen
Herman nog in dienst was en inferieuren had.

’t Was een triomf, waarvoor zij in hun hart dankbaar waren.


Van Brakel zat weer eens aan een hombertafeltje, waar om een
hoog tarief werd gespeeld met oploopenden pot. Hij was niets
vergeten, al had hij ook niets geleerd.

De volgende maand was hij weer lid van de sociëteit. Er waren


nieuwe bestuursleden in dat jaar gekomen en de andere keken zoo
nauw niet; nu het eenmaal was uitgemaakt dat men voortaan Van
Brakel toch overal zou ontmoeten, moest over dat uit ’s lands dienst
geraken de mantel der liefde maar geworpen worden. S c h w a m m
d ’ r ü b e r ! dacht men unaniem en hij deed weer zijn intrede alsof er
niets was gebeurd; en hij ging er weer heen elken avond; hij werd
weer een „steunpilaar”; hij huurde ook een eigen woning, richtte zich
netjes in en leefde weldra juist zooals hij geleefd had als ingenieur
bij den Waterstaat; alleen verteerde hij meer geld en had hij meer
drukte over zich.

Kalm en gelukkig kwamen Jules en Ceciel terug van hun


huwelijksreisje.—Ze namen hun intrek in een logement en maakten
rustig en op hun gemak alles gereed, wat ze noodig hadden om mee
te nemen. Passage naar Europa was besproken en Jules had van
het vermogen, dat hem, toen hij meerderjarig werd, moest worden
uitgekeerd, afrekening ontvangen. Zijn verzoek om het geld in de
zaak zijns vaders te laten, was afgewezen, zoodat hij een andere
belegging moest aanwijzen. Met een zucht had hij het gedaan.

Ceciel had een halven nacht besteed aan het nagaan der
verantwoording. [260]

„Je moet het geld vooral solied beleggen,” zei ze, toen het niet in de
zaak mocht blijven.

„Zeker. Ik wil alleen met een klein beetje speculeeren.”


„Doe het niet,” waarschuwde zij, „wij hebben meer dan genoeg voor
ons tweeën ook bij lage rente.”

„Het maakt een drommelsch verschil. In de zaak rendeerde het 15 a


20 percent.”

„Wat zou het, Jules? Maar als de zaak eens fout ging!”

„A l l o n s ! ” spotte hij. Welk een gek idee had ze daar! „Als de heele
zaak, zooals die nu staat, de zwaarste klappen kreeg, heeft papa
nog persoonlijk fortuin genoeg om à p a r i te liquideeren.”

„Het is mogelijk, maar i k heb het niet op zaken. Ik heb liever solide
staatspapieren, waarvoor men n o o i t bang heeft te zijn. Kom Jules,
doe het maar.….”

En ofschoon hij er maar weinig zin in had, deed hij het ten slotte toch
op haar aandringen.

Zij zat nu nog slechts met één moeilijkheid.

„Waar embarqueeren we?” vroeg zij op een ochtend.

„Wel … aan den kleinen Boom. Waar zouden we anders


embarqueeren, c h é r i e ?”

„Ik ga hier niet aan boord.”

„Maar.….…”

„Om het gejammer van pa en ma nog eens in het publiek te


genieten, geaccompagneerd door tante Du Roy.…..! Ik dank je wel.”

„Maar beste Ciel, hoe drommel moeten we het dan aanleggen? We


kunnen toch niet op de vlucht gaan!”
„Laat dat maar stil aan mij over. Ik ga strakjes naar de [261]oudelui en
zal er met hen over spreken. Pa is een man, die voor zulke dingen
wel raad weet.”

Haar bezwaar tegen tante Du Roy werd erkend.

„Maar ze zal dol wezen,” meende haar moeder, „als je weggaat


zonder afscheid van haar te nemen.”

„Dat zal ik ook niet. We gaan, net als pa zegt, een dag vroeger naar
de naaste havenplaats, waar Jules een vriend heeft, wien hij nog
zoo graag de hand zou drukken. ’s Avonds te voren komen wij
afscheid nemen, met een reiswagen voor de deur, en ’s nachts gaan
we met een tambangan naar boord.”

’t Beviel Jules Geerling maar half. H i j zag er nu zoo’n kwaad niet in,
dat mevrouw Du Roy met veel tranen afscheid nam. Welke haan zou
in Amsterdam, dacht hij, daarnaar kraaien? En dan, hij was nu toch
gebrouilleerd met zijn familie!

’t Was nog stikdonker toen ze gingen. Geerling slaperig en


mopperend. Ceciel druk en opgewonden. Eindelijk was het
oogenblik daar, en zou ze Java verlaten. Haar kisten waren reeds
den vorigen avond naar boord gegaan. Zij reden naar de kali, waar
een tambangan hen wachtte. Er lag een dikke, geelachtige damp
over de plaats; het rook onaangenaam en in het flauwe schemerlicht
zag alles langs den weg er vies en onooglijk uit. Och, ze was zoo
blij, dat ze heenging!

Ook het tweede huis, dat Van Brakel had gebouwd, bracht een
fraaien prijs op, maar daarvan werd zooveel notitie niet genomen.

Het nieuwtje was er af en een „meevaller” was het niet meer.


Alles ging nu overigens zijn gewonen gang. Lucie was weer
teruggekeerd tot haar oude bedrijvigheid van vroeger, al ging het in
den aanvang niet meer zoo van harte. En ’t huishouden [262]kostte
een schat van geld en Van Brakel had voor zijn m e n u s p l a i s i r s
meer noodig dan ooit.

Zij hadden er al eens ruzie over gehad; hij verweet haar dat ze
spilziek was; dat ze vroeger niet het vierde gedeelte gebruikte van
de dranken, die thans werden geschonken. Maar zij was sterk; zij
had een sociëteitsrekening van over de honderd gulden in zijn zak
gevonden en daarmee gewapend, bestreed zij hem.

„Nu maar; er moet toch een eind aan komen,” zei hij later. „Ik zal van
mijn kant ook wat inkrimpen.”

„Je mocht waarlijk wel het voorbeeld geven. Jij verteert met je
homberen, je sociëteit, je havana’s, je paarden en aan je verdere
verteringen, meer alléén dan wij met het geheele huishouden.”

„Je lijkt wel gek.”

„Maar ik zeg de waarheid.”

„Nu goed. Ik z a l mij bekrimpen; ik z a l minder uitgaan en minder


verteren; maar jij zult het ook doen.”

„Heel goed; als jij maar begint.”

Dien avond aan tafel stond hij als gewoonlijk na het dessert dadelijk
op en nam zijn hoed.

„Ik dacht, dat je thuis zoudt blijven?”

„Van avond kan ik niet; ik heb afgesproken; de anderen komen ook.


Morgen.”
Zij keek hem glimlachend aan; zij kende dat morgen!

Toen hij weg was, stak de oude Drütlich een groote pijp op en begon
bier te drinken, waarbij Lucie hem met een glas likeur gezelschap
hield. De eene flesch bier volgde de andere tot Drütlich vond, dat het
tijd werd om over te gaan tot [263]een brendy-soda en Lucie meende,
dat het uur van slapen was aangebroken.

Alleen met een rijtje ajer-blanda-fleschjes en een karaf cognac,


verzette de oude man zijn leed. Het appeltje, dat hij nog had
overgehouden voor den dorst, was reeds lang op; hij teerde nu
geheel op zijn schoonzoon. Van Brakel vroeg daar niet naar.

Wat kon ’t hem schelen! Bovendien, hij wist dat Drütlich in zijn
goeden tijd voor hem ook steeds royaal was geweest en daarmede
nam hij dus genoegen. Maar dien nacht kwam hij erg laat thuis; hij
had heel veel gedronken en was ook voor zichzelven zwaar op de
hand. Onderweg mopperde hij in zijn eentje over de quaestie, die hij
met Lucie had, en voor de eerste maal rekende hij het haar aan als
een soort van verwijt, dat haar vader bij hen aan huis woonde. Toen
hij uit zijn wagen stapte, achter op het erf, voelde Van Brakel, dat zijn
gang eenigszins waggelend was en niet zonder eenige moeite klom
hij de trappen op naar de achtergalerij, waar één lampje brandde.

Hij scharrelde naar het buffet. Er stonden vier leege bierflesschen en


vier dito ajer-blanda-fleschjes. Van Brakel kon zich niet goed houden
bij de gedachte, dat die „ouwe” zooveel bier en brendy-grog in zijn
eentje had verschalkt.

Op zijn eigen suf gezicht verscheen een dom dronkenmanslachje.

„Zoo’n oude nathals!” mompelde hij en zocht grinnikend zijn kamer.


Hij had tegenwoordig een slaapkamer apart. Wel sukkelend en
langzaam, maar toch volhardend, kwam hij er toe zich vrij behoorlijk
te ontkleeden. In zijn bed lachte hij nog en [264]telde op zijn vingers
hardop, om na te gaan hoeveel grogjes zijn schoonvader zich wel
van vier fleschjes ajer-blanda had kunnen maken, maar hij telde
telkens de bierflesschen mee en probeerde dan er die uit ’t hoofd
weer af te trekken, al grinnikend van pret om dien ouden „nathals.”
Maar ’t gelukte hem niet het rekenkunstig vraagstuk op te lossen; de
invloed van het zelf genoten geestrijk vocht was te groot en hij viel in
zijn gewonen korten, maar loodzwaren slaap.

De huizen vonden niet langer dien aftrek. Men had niet gerekend op
het gering aantal menschen in staat en genegen om te koopen. De
Chineezen hadden k o n g s i gemaakt. Waarom zouden zij zich
haasten nu te koopen voor veel geld? Zij zouden hun beurt
afwachten.

Drie, vier huizen gingen goed van de hand, maar toen was het uit.
Op het vijfde werd te weinig geboden; het werd niet gegund en stond
nu daar met een bordje er aan, vermeldend, dat het te huur was of te
koop.

Doch het toeval trof, dat iedereen goed was voorzien en daar de
huurprijs van het nieuwe huis vrij hoog was, schrikte dit ook de
huurders af.

Intusschen werkte Van Brakel voort, als ging hem dat alles niet aan,
schoon hij inwendig zeer ongerust was; als hij op ’t kantoor kwam
om geld te halen, dan kreeg hij het, maar ’t ging niet van harte en hij
moest allerlei klaagliederen aanhooren en zinspelingen op een
speculatie, die dreigde te mislukken; op goed geld, dat naar kwaad
geld werd geworpen; op mooie, maar niet geheel te verwezenlijken
plannen enzoovoort.

Het werd elken keer erger. Telkens kreeg hij, wat hij [265]noodig had
om te kunnen werken, maar telkens onwilliger.

Op een Zaterdag-ochtend, toen hij geld kwam halen om uit te


betalen, iets dat hij altijd zelf deed, stonden de gezichten van de
heeren chefs der firma ernstiger dan ooit.

Van Brakel werd verzocht in een aparte kamer te komen; men ging
zitten en een van de firmanten, zijn bedenkelijk gezicht bewarend,
begon met hem te zeggen, dat het hun verschrikkelijk speet; dat zij
niets liever hadden gedaan dan dóórwerken, maar dat zij er reeds
veel geld hadden ingestoken en dat zij voorzagen er, bleven zij
voortwerken, nog veel meer te moeten insteken.

„Het kan toch waarlijk zooveel niet wezen.”

„Dat is naar men het neemt; het is al dertig mille.”

„’t Is niet mogelijk. En de opbrengst dan van de huizen!”

„Die is er af getrokken.”

„Onmogelijk! Hoe kan dat dertig mille zijn?”

„Het is toch zoo. Maar we dachten wel, dat je het niet zoudt
begrijpen; hier is de rekening.”

Van Brakel kreeg een papier met „Aan’s” en „Per’s” waarvan hij
weinig of niets begreep. Hij zag er getallen op staan van zes cijfers,
waarmede, zoo zei men ter toelichting, hij zich niet behoefde te
bemoeien; dat betrof alleen de boekhouding.
Met een domme uitdrukking op het gelaat, bekeek hij het met zwarte
en roode inktstreepjes bewerkte blauw gelijnde papier.

Hij begreep er niets van dan het eindcijfer, ja, dat zag hij: ’t was over
de dertig mille. Overigens deed de net geschreven rekening-courant
hem denken aan de nota’s, die hijzelf bij gelegenheid indiende
wegens reparaties, met een specificatie van groote en kleine soorten
van spijkers en draadnagels, [266]afmetingen van verwerkt hout
enzoovoort, waaruit evenmin iemand wijs kon worden.

Tegen die gespecificeerde rekeningen viel ook niets in te brengen en


hij begreep, dat er evenmin iets te doen zou zijn tegen die rekening-
courant, waarop millioenen paraisseerden, die niets met zijn
bouwerij te maken hadden en alleen voorkwamen in verband met de
boekhouding.

„Ja, het eindcijfer is zoo. Ik kon het me niet voorstellen. Maar dit is,
dunkt me, toch geen reden om er mee uit te scheiden.”

„Voor u niet,” zei een der chefs met een slim lachje, „maar voor onze
firma wel.”

„Toch niet. De huizen zullen hun geld opbrengen. Men moet een
beetje geduld hebben.”

„Zulke zaken moeten q u i c k gaan,” meende de compagnon, „en dat


gaan ze niet.”

„Dus moet de boel maar zóó blijven liggen?”

„Voorloopig, ja. Wij zullen zien of we iemand kunnen vinden, die den
boel wil overnemen, zooals hij reilt en zeilt.”

„Dat is een zeer pleizierige tijding voor me!”


„Ja, ’t spijt ons erg, maar er is niets aan te doen. Wij mogen niet
verder gaan. We zouden onaangenaamheden krijgen met onze
commanditairen.… Ziet u, we hebben ons er alleen mee ingelaten
om u te helpen, want wij doen anders aan zulke dingen niet. Wij
dachten, dat het flink zou marcheeren als het eenmaal op gang was,
maar dat doet het niet.”

„En nu kunnen wij,” voegde de andere er bij, „niet langer er mee


voortgaan. We moeten nu maar zien er met zoo weinig
kleerscheuren als mogelijk is, af te komen.”

Toen hij ’t kantoor verliet, kon Van Brakel zich het geval [267]eigenlijk
niet best voorstellen. Hij had ’t altijd beschouwd als z i j n bouwerij
en ten slotte bleek, dat hij in ’t geheel geen baas was geweest
hoegenaamd; de winst op de verkochte huizen had de firma
opgestoken en hij had gewerkt voor niet eens het traktement, dat hij
zou bedongen hebben als hij het werk eenvoudig voor iemand had
aangenomen.

„Ik heb het wel gedacht,” zei Drütlich, „ik heb het wel gedacht! Zoo
gaat het altijd in de wereld en overal. Laat je dat een troost zijn.”

Lucie nam het zoo kalm niet op. Zij was woedend en schold op
dezelfde menschen, die ze eerst zoo dankbaar was; ze waren
„dieven” en Van Brakel was een domme vent. Ze schold zoo lang tot
hij ook boos werd, en beiden, opgewonden, elkaar allerlei verwijten
deden en uitmaakten voor al wat leelijk was.

Eerst ’s avonds dronken zij het af, waaraan ook Drütlich meedeed,
schoon hij eigenlijk niets af te drinken had.

En nu begon de teruggang met groote snelheid.


De firma had de heel en half afgewerkte huizen verkocht aan een
schoenmaker, die meer werkte met gesmokkelde opium dan met
pekdraad en als zeer rijk en zeer gemeen bekend stond.

Reeds Zondag kwam hij familiaar bij Van Brakel de voorgalerij


inloopen.

„Zeg, ik heb dien rommel gekocht. Als je wilt kan je blijven


doorwerken; maar je moet niet zoo duur wezen, hoor!”

Van Brakel behandelde hem uit de hoogte. „Dank u. Ik zal er geen


gebruik van maken.”

„Zoo. Ik dacht nogal dat ik je een dienst bewees, en dat meenden de


heeren op ’t kantoor ook. A f i j n , voor jou een ander. Ik wensch het
je.” [268]

De schoenmaker-opiumsmokkelaar ging heen met een nijdigen trek


op zijn onaangenaam gezicht.

„Eer ik nu toch voor zoo’n intensen ploert werkte,” zei Van Brakel,
„schoot ik me liever dood.”

„Je moet ’t zelf weten,” meende Drütlich. „De vent z’n geld is net zoo
goed als dat van een ander.”

„Ik kan mij toch niet feitelijk onder zoo’n schurk stellen?”

„Dat is ook niet noodig. Het is geen zaak van onder of boven. Je
krijgt geld voor je werk. Daarmee is het uit.”

Doch Van Brakel was te lang in ’s lands dienst geweest om in dien


gedachtenloop van zijn schoonvader te kunnen treden. Hij was het
niet met hem eens en hoe de oude Drütlich ook redeneerde, geheel
tegen zijn gewoonte in,—het hielp niet: Van Brakel was er niet toe te
bewegen het werk voor dien „vent” te doen.

„Ze hebben je bij ’t lijf gehad,” zei Drütlich verder. „Ik heb ’t je
gezegd: ze doen het altijd. Spreek er een advocaat over.”

„Waarover?”

„Wel over je contract. Een schriftelijke overeenkomst is nooit zóó of


de partij in wier voordeel zij is gemaakt, is wel eens afgeweken.”

„Wat zou ik er aan hebben!”

„Allicht klop je er een duizend gulden of wat uit.”

Van Brakel volgde dien raad, en inderdaad liet de firma, om van alle
soesah af te wezen, naar zij verklaarde, en uit medelijden met Van
Brakels toestand, zich door diens advocaat tot een uitkeering in geld
overhalen. Maar nu ook, werkte zij hem geregeld tegen. Wat hij ook
beproefde—nergens vond hij meer eenig werk te doen. En terwijl het
beetje [269]beschikbare geld hun door de vingers gleed, twistten zij
elken dag, en werd het huiselijk leven voortdurend ondraaglijker.

Er was, er k o n geen sprake meer zijn van uitgaan of ontvangen, en


er zou ook niemand meer zijn gekomen. Het was maar een vleugje
geweest!

Toch hielden zij het nog maanden vol, tot ook het krediet geheel was
uitgeput.

Van Brakel liep overal, informeerend naar werk of naar een


betrekking, maar men kon hem niet helpen en men wilde ook niet. Of
het de m i s è r e van den laatsten tijd deed, of wel ’t gevolg was van
een langdurig en herhaald misbruik—hij begon te marqueeren; zijn
uiterlijk verried den man, die te veel van zijn gestel had gevergd; zijn
oogen, zijn neus, zijn geheele gezicht begonnen te spreken van
bitter, bier en brendy.

Iedereen behandelde hem nog als een „heer”,—hij was immers een
gediplomeerd man; men had innig medelijden met zijn
omstandigheden; daarbij bleef het. Stuk voor stuk, dat waarde had,
verdween intusschen uit zijn huis, en binnen enkele maanden lag de
boel, zooals hijzelf zei, voor den grond. Moedeloos en verslagen,
huilde Lucie elken dag, tot zij haar leed verzette en meedronk met
haar vader. Als Van Brakel, die langzamerhand tot de jenever bij
Chineezen was afgedaald, dan terugkwam van een vruchteloozen
tocht om werk, was hij drie-kwart dronken, en Lucie en haar vader
waren ook niet normaal. Dan dronken zij voort, eerst elkaar
troostend, tot de demon der tweedracht over hen kwam en een
heftig krakeel losbrak.

Eindelijk vond hij iets. [270]

Het was t o c h bij den schoenmaker, die opium smokkelde.

Tien palen buiten de stad liet die een huis zetten voor den
administrateur zijner rijstlanden. Van Brakel zou slechts het toezicht
houden voor honderd en vijftig gulden in de maand.

Stil verkochten zij ondershands wat ze nog hadden, laadden de


hoogst noodige meubelen op eenige karren, en vertrokken in den
nacht, een lange lijst van schulden achterlatend.

Nabij een desa in de buurt, waar het huis moest worden gebouwd,
had Van Brakel een kleine houten woning gehuurd. Die meubelden
zij met hun bedden, tafels en stoelen, een paar kasten en eenige
lampen; zoo eenvoudig mogelijk.
Ook zoo onverschillig mogelijk,—want het kon Lucie niets meer
schelen. Als zij maar in een luierdstoel kon liggen, met wat te
drinken naast zich, de oude heer om gezelschap te houden, en de
kinderen, smerig en half gekleed, om nu en dan tegen te
schreeuwen, als ze leven maakten, dan kon de rest haar niets
hoegenaamd meer schelen.

Zoo ging hun leven voort, zonder rechtstreeksche ellende, en toch


zoo diep ellendig.

Met een t o e d o n g op, die zijn rood gezicht beschaduwde, een


dikken stok in de hand, een halfvuile kabaja aan, en op bloote
voeten, de pijpen van zijn slaapbroek hoog omgeslagen, ging Van
Brakel ’s morgens naar het werk.

Niemand zou in den Europeeschen koeli-mandoor den netten


ingenieur herkend hebben, die eenige jaren vroeger rondreed in zijn
bendy, met de pet op met zilveren band.

Zoo trok hij uit, al heel vroeg in den morgen, de dampen van den
sterken drank des vorigen avonds nog in het hoofd en een pas
werkenden ochtenddronk in de maag. [271]

Dan ging hij toezicht voeren op het heiwerk in den moerassigen


grond, en terwijl de zon hooger kwam en de fel brandende stralen de
padi rijpten, welke gelend op het veld stond, zoover men zien kon
naar alle kanten, leunde Van Brakel op zijn stok onder het atappen
afdakje, dat hij voor zich had laten maken. Zijn oogen vielen dicht;
het was zoo warm, en hij zoo sufferig! Eentonig klonk het heilied.…
B o e m ! Daar viel weer ’t blok op den paal. Half droomend
glimlachte hij. Het heien! Daar stond hij als kind in Holland zoo graag
bij te kijken, en hij genoot als de vroolijke heibaas met den rood
baaien borstrok aan, zijn stem verhief:
Haal op de hei!
Gewassen.… Boem!
Al in de Mei.

Ja, dat was toch heel anders dan hier de dreun volgens die andere
gamelan toonladder, dreinend en sleepend.

Hidong, hidong.
Kapal api loeda amboong
Oleh, oleh.… oleh.… Boem!

Maar ’t was toch eigenlijk ’t zelfde. Hij had altijd zooveel gehouden
van al wat tot bouwen, timmeren en metselen in betrekking stond. ’t
Was thuis aangemoedigd: hij was bestemd voor het
ingenieursvak.… Toen hij „er door” was, huilde mama van vreugde.
Ze moest ’t nu eens kunnen zien! Gelukkig was ze dood.… Dat
heien toch.… heel anders hier! Wat trekken de poldergasten in
Holland flink, en hoe vroolijk zingt de baas, als het n i v e a u haast is
bereikt, zijn:

Hei op! Haal op!


Heit dat paaltje maar op z’n kop!.…

[272]

Boem! sloeg het op ’t blok vóór hem. Hè, dat viel nu al heel komiek!
En zachtjes neuriede hij, al voortdommelend mee met den
inlandschen heibaas:

Api abang.
Api-nja abang.
Olah, olah,—olah!

„M a n d o e r ,” riep een schorre stem. „Zeg, als jij staat te slapen op


’t werk, dan heb ik je hier niet noodig, hoor!”
Verschrikt had Van Brakel de oogen geopend; zijn hand omklemde
den zwaren stok; zijn gezicht was doodsbleek en zijn door ’t vele
drinken waterige oogen, staarden dreigend den schoenmaker aan,
die voor hem stond.

„Nu,” zei deze, even schor lachend als hij sprak. „Je hoeft me zoo
vervaarlijk niet aan te kijken, omdat ik je „mandoer” noemde; ’t was
maar uit gekheid, ofschoon je toch anders mandoers-werk doet.
Houd asjeblieft je oogen open, dat is alles!”

De schoenmaker ging verder. Van Brakel stond nog een minuut


kaarsrecht; toen zakte hij weer ineen; zijn gezicht zag er weer even
dof en verloopen uit; met de schouders maakte hij een beweging, die
voor hem zelf zijn onverschilligheid moest te kennen geven; hij
lachte schamper: „Mandoer! Ook goed!”

Uit een fleschje, dat hij in een zak van zijn kabaja droeg, nam hij een
flinke teug, kurkte het weer en smakte met de lippen. „Mandoer! Ook
goed!” herhaalde hij, en keek naar ’t werk.

You might also like