92% found this document useful (12 votes)
276 views

[Ebooks PDF] download Scripting Automation with Bash PowerShell and Python 1st Edition Michael Kofler full chapters

Automation

Uploaded by

kurupbriedlw
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
92% found this document useful (12 votes)
276 views

[Ebooks PDF] download Scripting Automation with Bash PowerShell and Python 1st Edition Michael Kofler full chapters

Automation

Uploaded by

kurupbriedlw
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 60

Download the full version of the ebook at ebookname.

com

Scripting Automation with Bash PowerShell and


Python 1st Edition Michael Kofler

https://ebookname.com/product/scripting-automation-with-
bash-powershell-and-python-1st-edition-michael-kofler/

OR CLICK BUTTON

DOWNLOAD EBOOK

Download more ebook instantly today at https://ebookname.com


Instant digital products (PDF, ePub, MOBI) available
Download now and explore formats that suit you...

Black Hat Bash Bash Scripting for Hackers and Pentesters


1st Edition Dolev Farhi

https://ebookname.com/product/black-hat-bash-bash-scripting-for-
hackers-and-pentesters-1st-edition-dolev-farhi/

ebookname.com

Mastering Unix Shell Scripting Bash Bourne and Korn Shell


Scripting for Programmers System Administrators and UNIX
Gurus Second Edition Randal K. Michael
https://ebookname.com/product/mastering-unix-shell-scripting-bash-
bourne-and-korn-shell-scripting-for-programmers-system-administrators-
and-unix-gurus-second-edition-randal-k-michael/
ebookname.com

Pro Bash Programming Scripting the GNU Linux Shell 1st


Edition Chris Johnson

https://ebookname.com/product/pro-bash-programming-scripting-the-gnu-
linux-shell-1st-edition-chris-johnson/

ebookname.com

Economics A Student s Guide 5th Edition John Beardshaw

https://ebookname.com/product/economics-a-student-s-guide-5th-edition-
john-beardshaw-2/

ebookname.com
Globalization The Essentials 1st Edition George Ritzer

https://ebookname.com/product/globalization-the-essentials-1st-
edition-george-ritzer/

ebookname.com

Working with Adolescents A Guide for Practitioners 1st


Edition Julie Anne Laser Msw Lcsw Phd

https://ebookname.com/product/working-with-adolescents-a-guide-for-
practitioners-1st-edition-julie-anne-laser-msw-lcsw-phd/

ebookname.com

Urological Oncology Landes Bioscience Medical Handbook


Vademecum 1st Edition Daniel Nachtsheim

https://ebookname.com/product/urological-oncology-landes-bioscience-
medical-handbook-vademecum-1st-edition-daniel-nachtsheim/

ebookname.com

Late Bronze Age Flintworking from Ritual Zones in Southern


Scandinavia 1st Edition Miros■aw Masoj■

https://ebookname.com/product/late-bronze-age-flintworking-from-
ritual-zones-in-southern-scandinavia-1st-edition-miroslaw-masojc/

ebookname.com

Practice Development Workbook for Nursing Health and


Social Care Teams 1st Edition Edition Jan Dewing

https://ebookname.com/product/practice-development-workbook-for-
nursing-health-and-social-care-teams-1st-edition-edition-jan-dewing/

ebookname.com
Preparing Your Campus for Veterans Success An Integrated
Approach to Facilitating the Transition and Persistence of
Our Military Students 1st Edition Bruce Kelley
https://ebookname.com/product/preparing-your-campus-for-veterans-
success-an-integrated-approach-to-facilitating-the-transition-and-
persistence-of-our-military-students-1st-edition-bruce-kelley/
ebookname.com
Rheinwerk Computing
The Rheinwerk Computing series offers new and established professionals comprehen-
sive guidance to enrich their skillsets and enhance their career prospects. Our publica-
tions are written by the leading experts in their fields. Each book is detailed and hands-on
to help readers develop essential, practical skills that they can apply to their daily work.

Explore more of the Rheinwerk Computing library!


Johannes Ernesti, Peter Kaiser
Python 3: The Comprehensive Guide
2022, 1036 pp, paperback and e-book
www.rheinwerk-computing.com/5566

Philip Ackermann
JavaScript: The Comprehensive Guide
2022, 982 pages, paperback and e-book
www.rheinwerk-computing.com/5554

Bernd Öggl, Michael Kofler


Git: Project Management for Developers and DevOps Teams
2023, 407 pp, paperback and e-book
www.rheinwerk-computing.com/5555

Michael Kofler et al.


Hacking and Security: The Comprehensive Guide to
Penetration Testing and Cybersecurity
2023, 1141 pp, paperback and e-book
www.rheinwerk-computing.com/5696

Philip Ackermann
Full Stack Web Development: The Comprehensive Guide
2023, 740 pp, paperback and e-book
www.rheinwerk-computing.com/5704

www.rheinwerk-computing.com
Michael Kofler

Scripting
Automation with Bash, PowerShell, and Python
Imprint

This e-book is a publication many contributed to, specifically:

Editor Megan Fuerst


Acquisitions Editor Hareem Shafi
German Edition Editor Christoph Meister
Translation Winema Language Services, Inc.
Copyeditor Yvette Chin
Cover Design Graham Geary
Photo Credit Shutterstock: 2197648801/ © Dima Zel, iStockphoto: 165687831/ © enjoynz
Layout Design Vera Brauner
Production E-Book Graham Geary
Typesetting E-Book III-satz, Germany

We hope that you liked this e-book. Please share your feedback with us and read the
Service Pages to find out how to contact us.

Library of Congress Cataloging-in-Publication Control Number: 2023056495

ISBN 978-1-4932-2556-9 (print)


ISBN 978-1-4932-2557-6 (e-book)
ISBN 978-1-4932-2558-3 (print and e-book)

© 2024 by Rheinwerk Publishing, Inc., Boston (MA)


1st edition 2024
1st German edition published 2023 by Rheinwerk Verlag, Bonn, Germany
Notes on Usage

This e-book is protected by copyright. By purchasing this e-book, you have agreed to
accept and adhere to the copyrights. You are entitled to use this e-book for personal pur-
poses. You may print and copy it, too, but also only for personal use. Sharing an electronic
or printed copy with others, however, is not permitted, neither as a whole nor in parts. Of
course, making them available on the Internet or in a company network is illegal as well.

For detailed and legally binding usage conditions, please refer to the section
Legal Notes.

This e-book copy contains a digital watermark, a signature that indicates which person
may use this copy:
Contents

Preface ....................................................................................................................................................... 23

PART I Scripting Languages

1 Scripting: Doing One Thing 29

1.1 What Does Scripting Mean? ............................................................................................. 29


1.1.1 Scripting versus Programming .......................................................................... 30
1.1.2 Glue Languages and Glue Code ......................................................................... 30
1.1.3 Do One Thing and Do It Well .............................................................................. 31
1.2 Scripting Languages ............................................................................................................. 31
1.2.1 Bash and Zsh ............................................................................................................ 32
1.2.2 PowerShell ................................................................................................................ 33
1.2.3 Python ........................................................................................................................ 34
1.2.4 Many Similarities, Even More Differences ..................................................... 35
1.3 The Agony of Choice ............................................................................................................. 35

2 Ten Times Ten Lines 39

2.1 Markdown Spell Checker (Bash) ..................................................................................... 39


2.2 Sorting Images by Date (PowerShell) ........................................................................... 40
2.3 Converting a JSON File to XML Format (Python) ..................................................... 41

2.4 Daily Server Backups (Bash) .............................................................................................. 42

2.5 Web Scraping (Python) ....................................................................................................... 43

2.6 Logging Weather Data (Python) ..................................................................................... 44

2.7 Microsoft Hyper-V Cleanup (PowerShell) ................................................................... 45

2.8 Statistical Analysis of a Logging File (Bash) ............................................................... 46

2.9 Uploading Files to the Cloud (PowerShell) ................................................................. 46

2.10 Cloning Virtual Machines (Bash) .................................................................................... 47

7
Contents

3 Bash and Zsh 49

3.1 Terminal, Shell, and Bash ................................................................................................... 49


3.1.1 Determining the Current Shell .......................................................................... 50
3.2 Installation ............................................................................................................................... 50
3.2.1 Using Bash in a Virtual Machine ....................................................................... 51
3.2.2 Windows Subsystem for Linux .......................................................................... 51
3.2.3 Git Bash ...................................................................................................................... 53
3.2.4 Docker ........................................................................................................................ 53
3.2.5 Bash Configuration (/etc/profile and .bashrc) ............................................. 53
3.3 Running Commands Interactively ................................................................................. 53
3.3.1 Operating the Terminal ........................................................................................ 55
3.3.2 Online Help ............................................................................................................... 56
3.3.3 Command Reference ............................................................................................. 56
3.4 Zsh as an Alternative to Bash ........................................................................................... 56
3.4.1 Installation ................................................................................................................ 57
3.4.2 Zsh Configuration (/etc/zshrc and .zshrc) ..................................................... 57
3.4.3 Oh My Zsh ................................................................................................................. 58
3.5 The First Bash Script ............................................................................................................. 58
3.5.1 Hash Bang (Shebang) ............................................................................................ 58
3.5.2 Shebang Variants ................................................................................................... 59
3.5.3 Making the Script Executable (chmod +x) ..................................................... 60
3.5.4 Hello, World! ............................................................................................................ 60
3.5.5 Elementary Syntax Rules ..................................................................................... 61
3.5.6 A “Real” Example: Backup Script ....................................................................... 61
3.5.7 Running Scripts without ./ .................................................................................. 63
3.6 Running Commands ............................................................................................................. 63
3.6.1 Serial Execution ....................................................................................................... 64
3.6.2 Conditional Command Execution ..................................................................... 64
3.6.3 Running Commands in the Background ......................................................... 65
3.6.4 Running Commands in a Subshell .................................................................... 65
3.7 Standard Input and Standard Output .......................................................................... 66
3.7.1 Redirecting Input and Output ............................................................................ 66
3.7.2 The Pipe Operator .................................................................................................. 68
3.7.3 Redirecting and Displaying Outputs at the Same Time ............................ 68
3.8 Globbing, Brace Extension, and Handling File and Directory Names ............ 68
3.8.1 Recursive Globbing ................................................................................................ 70
3.8.2 Access to Important Directories ........................................................................ 70
3.8.3 Brace Extension ....................................................................................................... 70
3.8.4 Filenames and Directory Names with Spaces ............................................... 71

8
Contents

3.9 Variables .................................................................................................................................... 72


3.9.1 Initializing and Deleting Variables ................................................................... 72
3.9.2 Declaring Variables ................................................................................................ 73
3.9.3 Performing Calculations in Bash ....................................................................... 73
3.9.4 Arrays .......................................................................................................................... 74
3.9.5 Predefined Variables ............................................................................................. 76
3.9.6 Environment Variables ......................................................................................... 76
3.10 Strings ......................................................................................................................................... 77
3.10.1 Single versus Double Quotation Marks .......................................................... 77
3.10.2 Outputting Strings (echo) .................................................................................... 78
3.10.3 Colors .......................................................................................................................... 79
3.10.4 Entering or Reading Character Strings (read) ............................................... 80
3.10.5 Substitution and Expansion Mechanisms ..................................................... 81
3.10.6 Parameter Substitution ........................................................................................ 81
3.10.7 Heredocs and Herestrings ................................................................................... 84
3.10.8 The Backslash ........................................................................................................... 85
3.11 Branches .................................................................................................................................... 85
3.11.1 if Short Notation with && or || .......................................................................... 86
3.11.2 Conditions ................................................................................................................. 87
3.11.3 Branches with case ................................................................................................ 89
3.11.4 Parameter Analysis via case ................................................................................ 90
3.12 Loops ........................................................................................................................................... 91
3.12.1 Processing Filenames with Spaces ................................................................... 93
3.12.2 while and until ........................................................................................................ 93
3.12.3 Loops over Text Files .............................................................................................. 94
3.13 Functions ................................................................................................................................... 95
3.13.1 Local Variables ......................................................................................................... 96
3.14 Error Protection ...................................................................................................................... 96
3.14.1 Detecting Errors ...................................................................................................... 96
3.14.2 Canceling in Case of Errors .................................................................................. 97
3.14.3 exit ............................................................................................................................... 97
3.14.4 Responding to Signals (trap) ............................................................................... 98
3.14.5 Timeout ..................................................................................................................... 98

4 PowerShell 99

4.1 Installation ............................................................................................................................... 99


4.1.1 Installation on Linux .............................................................................................. 101
4.1.2 Installation on macOS .......................................................................................... 102

9
Contents

4.1.3 Limitations of PowerShell on Windows versus Linux/macOS ................ 102


4.1.4 Configuration .......................................................................................................... 103
4.2 Windows Terminal ................................................................................................................ 103
4.2.1 Configuration .......................................................................................................... 104
4.2.2 Operation .................................................................................................................. 105
4.3 Calling cmdlets and Functions ......................................................................................... 106
4.3.1 cmdlets ...................................................................................................................... 108
4.3.2 The Verb-Noun Terminology .............................................................................. 108
4.3.3 Aliases ........................................................................................................................ 108
4.3.4 Parameters and Options ...................................................................................... 109
4.3.5 Splatting .................................................................................................................... 109
4.3.6 Functions ................................................................................................................... 110
4.3.7 Running Conventional Commands .................................................................. 110
4.3.8 Online Help ............................................................................................................... 111
4.4 Combining Commands ........................................................................................................ 112
4.4.1 Chains of Commands ............................................................................................ 113
4.4.2 Multiline Statements ............................................................................................ 114
4.4.3 Dealing with Special Characters ....................................................................... 114
4.5 The First Script ........................................................................................................................ 114
4.5.1 Hello, World! ............................................................................................................ 115
4.5.2 Trouble with the Execution Policy .................................................................... 116
4.5.3 Setting Up a Custom Script Directory .............................................................. 117
4.5.4 Running Scripts on Linux and macOS .............................................................. 118
4.5.5 Example: Cleaning Up the Downloads Directory ........................................ 118
4.5.6 Differentiating Between PowerShell Versions ............................................. 120
4.6 Variables, Strings, and Objects ........................................................................................ 120
4.6.1 Data Types ................................................................................................................ 121
4.6.2 Calculating and Comparing ................................................................................ 123
4.6.3 Strings ........................................................................................................................ 124
4.6.4 Command Substitution ........................................................................................ 126
4.6.5 Objects ....................................................................................................................... 127
4.6.6 Assembling Custom Objects ............................................................................... 128
4.6.7 Predefined Variables ............................................................................................. 129
4.6.8 Environment Variables ......................................................................................... 130
4.7 Arrays and Hash Tables ....................................................................................................... 131
4.7.1 Creating and Processing Custom Arrays ........................................................ 131
4.7.2 Hash Tables .............................................................................................................. 133
4.8 Output Redirection ............................................................................................................... 133
4.8.1 Streams ...................................................................................................................... 133
4.8.2 Output Redirection ................................................................................................ 134
4.8.3 Duplicating Output (Tee-Object) ...................................................................... 136

10
Contents

4.8.4 (Not) Formatting the Output ............................................................................. 136


4.8.5 No Input Redirection ............................................................................................. 136
4.9 Loops ........................................................................................................................................... 137
4.9.1 ForEach-Object ........................................................................................................ 138
4.9.2 for, while, do-while, and do-until ...................................................................... 138
4.10 Branches .................................................................................................................................... 139
4.10.1 Case Distinctions Using switch ......................................................................... 141
4.11 Functions and Parameters ................................................................................................. 141
4.11.1 Function Results ..................................................................................................... 142
4.11.2 return .......................................................................................................................... 143
4.11.3 Parameters ............................................................................................................... 143
4.11.4 Calling Functions .................................................................................................... 144
4.11.5 Processing Standard Input .................................................................................. 145
4.11.6 Syntax Variants ....................................................................................................... 145
4.12 Modules ..................................................................................................................................... 147
4.12.1 Module Directories ................................................................................................ 147
4.12.2 Modules for Experts .............................................................................................. 148
4.13 Error Protection ...................................................................................................................... 149
4.13.1 Set-StrictMode ........................................................................................................ 150
4.13.2 Aborting Scripts on Errors .................................................................................... 150
4.13.3 Separating Error Messages from Other Output ........................................... 150
4.13.4 Error Protection Using try/catch ....................................................................... 151
4.13.5 Terminating the Script Execution Prematurely (Exit) ................................ 152

5 Python 153

5.1 Installing Python .................................................................................................................... 153


5.1.1 Windows ................................................................................................................... 154
5.1.2 macOS ........................................................................................................................ 155
5.2 Getting to Know Python in a Terminal Window ..................................................... 156

5.3 Programming Custom Scripts .......................................................................................... 157


5.3.1 Shebang ..................................................................................................................... 157
5.4 Elementary Syntax Rules ................................................................................................... 158
5.4.1 Block Elements ........................................................................................................ 159
5.4.2 Comments ................................................................................................................ 160
5.5 Numbers .................................................................................................................................... 160
5.5.1 Floats .......................................................................................................................... 161
5.5.2 Random Numbers .................................................................................................. 161

11
Contents

5.6 Strings ......................................................................................................................................... 162


5.6.1 Raw Strings ............................................................................................................... 163
5.6.2 Processing Strings .................................................................................................. 163
5.6.3 Slicing ......................................................................................................................... 165
5.6.4 print and input ........................................................................................................ 166
5.6.5 Formatting Outputs .............................................................................................. 167
5.7 Lists .............................................................................................................................................. 169
5.7.1 List Comprehension ............................................................................................... 170
5.7.2 map and filter .......................................................................................................... 170
5.8 Tuples, Sets, and Dictionaries .......................................................................................... 171
5.8.1 Sets .............................................................................................................................. 172
5.8.2 Dictionaries .............................................................................................................. 173
5.9 Variables .................................................................................................................................... 174
5.9.1 Assignments ............................................................................................................. 175
5.9.2 Data Types ................................................................................................................ 176
5.9.3 Mutable or Immutable? ....................................................................................... 177
5.10 Operators .................................................................................................................................. 178
5.10.1 Combining Assignment and Evaluation ......................................................... 180
5.11 Branches (if) ............................................................................................................................. 180
5.11.1 Conditions ................................................................................................................. 181
5.11.2 Short Notation with if ........................................................................................... 181
5.12 Loops (for and while) ........................................................................................................... 181
5.12.1 break, continue, and else ..................................................................................... 182
5.12.2 Loops over Number Ranges (range) ................................................................. 183
5.12.3 Loops over the Characters of a String .............................................................. 183
5.12.4 Loops over Lists, Tuples, and Sets ..................................................................... 184
5.12.5 Loops over Dictionaries ........................................................................................ 185
5.12.6 Loops over the Parameters of a Script ............................................................. 185
5.12.7 Globbing on Windows .......................................................................................... 186
5.12.8 Loops over the Lines of a Text File .................................................................... 186
5.12.9 Loops over All Files in a Directory ...................................................................... 187
5.13 Functions ................................................................................................................................... 187
5.13.1 Global and Local Variables .................................................................................. 188
5.13.2 Parameters ............................................................................................................... 189
5.13.3 Optional Parameters ............................................................................................. 190
5.13.4 Variable Number of Parameters ....................................................................... 190
5.13.5 Lambda Functions .................................................................................................. 191
5.14 Processing Text Files ............................................................................................................ 192
5.14.1 Example: Analyzing a CSV File ........................................................................... 193
5.14.2 Example: Creating SQL Commands ................................................................. 194

12
Contents

5.15 Error Protection ...................................................................................................................... 195


5.15.1 try/except .................................................................................................................. 195
5.16 System Functions ................................................................................................................... 195
5.16.1 Access to the Program Parameters ................................................................... 196
5.16.2 Access to Standard Input and Standard Output .......................................... 196
5.16.3 Exiting a Program ................................................................................................... 196
5.16.4 Calling Linux Commands ..................................................................................... 196
5.16.5 Processing Results .................................................................................................. 197
5.16.6 Running Commands through the Shell .......................................................... 197
5.16.7 Error during a Command Call ............................................................................. 197
5.16.8 Waiting (sleep) ........................................................................................................ 198
5.17 Modules ..................................................................................................................................... 198
5.17.1 import ......................................................................................................................... 198
5.17.2 Distributing Custom Scripts across Multiple Files ...................................... 199
5.18 Installing Additional Modules Using pip .................................................................... 199
5.18.1 Installing pip ............................................................................................................ 200
5.18.2 Applying pip ............................................................................................................. 200
5.18.3 pip Problems with Windows .............................................................................. 200
5.18.4 pip Problems with Linux ...................................................................................... 201
5.18.5 requirements.txt ..................................................................................................... 203
5.18.6 pipenv ......................................................................................................................... 203

PART II Work Techniques and Tools

6 Linux Toolbox 207

6.1 Directories and Files ............................................................................................................. 207


6.1.1 Listing, Copying, Moving, and Deleting Files ................................................. 208
6.2 Finding Files ............................................................................................................................. 209
6.2.1 Text Search Using grep ......................................................................................... 210
6.3 Compressing and Archiving Files .................................................................................... 210
6.3.1 Archiving Files Using tar ...................................................................................... 211
6.3.2 ZIP Files ...................................................................................................................... 212
6.4 Using Root Privileges ........................................................................................................... 212
6.4.1 sudo Privileges for Selected Accounts Only ................................................... 213
6.4.2 Issues with Output Redirection ......................................................................... 213
6.4.3 Access Rights ............................................................................................................ 214
6.4.4 Managing Processes .............................................................................................. 215

13
Contents

6.4.5 Terminating Processes .......................................................................................... 215


6.4.6 Background Processes and System Services .................................................. 216
6.4.7 Logging Files ............................................................................................................. 216
6.4.8 Determining Free Memory .................................................................................. 217
6.4.9 Determining Other System Information ........................................................ 218
6.5 Software Installation ........................................................................................................... 218
6.5.1 Updating Software ................................................................................................ 219
6.5.2 Installing Additional Packages ........................................................................... 219
6.6 Other Commands .................................................................................................................. 220

7 cmdlets for PowerShell 223

7.1 Directories and Files ............................................................................................................. 223


7.1.1 Listing, Copying, Moving, and Deleting Files ................................................. 224
7.1.2 Reading and Writing Text .................................................................................... 225
7.1.3 Inputting and Outputting Text .......................................................................... 226
7.2 Finding Files ............................................................................................................................. 227
7.2.1 Searching Text Files ............................................................................................... 228
7.2.2 Text versus Objects ................................................................................................ 229
7.3 Compressing and Archiving Files .................................................................................... 230
7.3.1 Compressing Search Results ............................................................................... 231
7.4 Process Management .......................................................................................................... 232
7.4.1 Launching Other PowerShell Scripts ................................................................ 233
7.4.2 Running Commands in the Background ......................................................... 233
7.4.3 Managing Services ................................................................................................. 233
7.4.4 Working on Other Computers ............................................................................ 234
7.5 Registration Database and System Information ..................................................... 235
7.5.1 Determining System Information .................................................................... 237
7.5.2 Evaluating the Logging System ......................................................................... 238
7.6 Processing cmdlet Results ................................................................................................. 238
7.6.1 Select-Object and Sort-Object ............................................................................ 239
7.6.2 Where-Object .......................................................................................................... 239
7.6.3 Group-Object ........................................................................................................... 240
7.6.4 ForEach-Item ............................................................................................................ 240
7.6.5 Measure-Object ...................................................................................................... 240
7.6.6 Formatting and Exporting cmdlet Results ..................................................... 241
7.7 Other cmdlets .......................................................................................................................... 243

14
Contents

7.8 Installing Additional Modules ......................................................................................... 243


7.8.1 Listing Modules, Commands, and Package Sources ................................... 244
7.8.2 NuGet and winget .................................................................................................. 245
7.9 Standard Aliases .................................................................................................................... 246

8 Analyzing Texts with Filters and Pipes 249

8.1 grep, sort, cut, and uniq ...................................................................................................... 249


8.1.1 grep ............................................................................................................................. 250
8.1.2 wc ................................................................................................................................. 251
8.1.3 cut ................................................................................................................................ 252
8.1.4 sort .............................................................................................................................. 252
8.1.5 head and tail ............................................................................................................ 253
8.1.6 uniq ............................................................................................................................. 254
8.1.7 tr ................................................................................................................................... 255
8.1.8 awk and sed .............................................................................................................. 255
8.2 Example: Statistical Data Analysis ................................................................................ 256
8.2.1 Data Extraction via Script .................................................................................... 257
8.3 Example: ping Analysis ....................................................................................................... 258
8.3.1 ping Call via Script .................................................................................................. 259
8.4 Example: Apache Log Analysis ........................................................................................ 260
8.4.1 Extracting IP Addresses ........................................................................................ 261
8.4.2 Identifying Popular Pages .................................................................................... 262
8.5 CSV Files ..................................................................................................................................... 263
8.5.1 Processing CSV Files Using Python ................................................................... 264
8.5.2 Processing CSV Files in PowerShell ................................................................... 265

9 Regular Expressions 267

9.1 Syntax Rules for Regular Expressions .......................................................................... 268


9.1.1 Characters ................................................................................................................. 268
9.2 Groups and Alternatives .................................................................................................... 270
9.2.1 Quantifiers ................................................................................................................ 271
9.2.2 On Greed (Greedy versus Lazy) .......................................................................... 272
9.2.3 Alpha and Omega ................................................................................................... 273
9.2.4 Exercise Pages and Cheat Sheets ...................................................................... 274
9.2.5 Example: Recognizing a Date ............................................................................. 275

15
Contents

9.2.6 Example: Recognizing IPv4 Addresses ............................................................ 275


9.2.7 Example: Recognizing Email Addresses .......................................................... 276
9.3 Regular Expressions in Bash (grep, sed) ...................................................................... 276
9.3.1 Bash Comparison Operator for Regular Expressions ................................. 276
9.3.2 Filtering Text Using grep ...................................................................................... 277
9.3.3 The "sed" Stream Editor ........................................................................................ 278
9.3.4 Searching and Replacing Using sed ................................................................. 279
9.3.5 sed Example: Manipulating Paths of Image Files ....................................... 279
9.4 Regular Expressions in PowerShell ................................................................................ 280
9.4.1 The match and replace Operators .................................................................... 280
9.4.2 Select-String ............................................................................................................. 281
9.4.3 Example: Input Validation ................................................................................... 281
9.4.4 Example: List of Figures ........................................................................................ 282
9.5 Regular Expressions in Python (re Module) ............................................................... 283
9.5.1 Example: Verifying a MAC Address .................................................................. 284
9.5.2 Example: Anonymizing a Logging File ............................................................. 285

10 JSON, XML, and INI 287

10.1 JSON in PowerShell ............................................................................................................... 287


10.1.1 Example: Saving Event Log Entries in JSON Format ................................... 288
10.1.2 Example: Analyzing Domain Queries .............................................................. 288
10.1.3 Example: Converting between CSV and JSON .............................................. 289
10.2 JSON and Python ................................................................................................................... 290
10.2.1 Example: Collecting Birthdays ........................................................................... 291
10.2.2 Example: Determining Holidays ....................................................................... 292
10.3 JSON in Bash ............................................................................................................................ 295
10.3.1 Viewing JSON Files Interactively Using fx ...................................................... 297
10.4 XML in PowerShell ................................................................................................................ 298
10.4.1 XML Data Type ........................................................................................................ 298
10.4.2 Select-Xml ................................................................................................................. 299
10.4.3 ConvertTo-Xml, Export-Clixml, and Import-Clixml ..................................... 301
10.5 XML and Python ..................................................................................................................... 302
10.5.1 Example: Creating a Dictionary for Country Codes .................................... 303
10.5.2 Example: Analyzing an RSS Feed ....................................................................... 304
10.5.3 Example: Extracting MAC Addresses from Virtual Machine Files ......... 305
10.6 XML in Bash .............................................................................................................................. 305
10.6.1 xmllint ........................................................................................................................ 306
10.6.2 XMLStarlet ................................................................................................................ 307

16
Contents

10.7 INI Files ....................................................................................................................................... 307


10.7.1 Python ........................................................................................................................ 308
10.7.2 PowerShell ................................................................................................................ 308
10.7.3 Bash ............................................................................................................................. 308

11 Running Scripts Automatically 309

11.1 cron .............................................................................................................................................. 309


11.1.1 /etc/crontab ............................................................................................................. 310
11.1.2 Personal crontab Files ........................................................................................... 311
11.1.3 Hourly, Daily, Weekly, and Monthly Directories .......................................... 312
11.1.4 Alternatives to cron ............................................................................................... 312
11.1.5 Starting Jobs Automatically on macOS ........................................................... 312
11.2 Example: Web Server Monitoring .................................................................................. 313
11.2.1 Testing and Troubleshooting ............................................................................. 314
11.2.2 Real Monitoring ...................................................................................................... 314
11.3 Microsoft Windows Task Scheduler .............................................................................. 315
11.3.1 Troubleshooting ..................................................................................................... 317
11.3.2 Setting Up Tasks via cmdlets .............................................................................. 318
11.4 Example: Saving Exchange Rates ................................................................................... 319

11.5 Tracking File System Changes .......................................................................................... 320


11.5.1 inotify ......................................................................................................................... 321
11.5.2 Alternatives to inotify ........................................................................................... 322

12 SSH 323

12.1 Installing the SSH Client and Server ............................................................................. 323


12.1.1 Linux ........................................................................................................................... 324
12.1.2 macOS ........................................................................................................................ 324
12.1.3 Windows ................................................................................................................... 324
12.1.4 Using an Editor in an SSH Session .................................................................... 326
12.1.5 Securing an SSH Server ......................................................................................... 327
12.2 Working with SSH ................................................................................................................. 327
12.2.1 Host Verification ..................................................................................................... 328
12.2.2 Potential Issues and Their Cause ...................................................................... 328
12.2.3 Running Linux and macOS Commands .......................................................... 329
12.2.4 Running Windows Commands .......................................................................... 330
12.2.5 SSH Remoting in PowerShell .............................................................................. 330

17
Contents

12.3 scp and rsync ............................................................................................................................ 332


12.3.1 Copy-Item with SSH Remoting .......................................................................... 332
12.3.2 rsync ............................................................................................................................ 333
12.4 SSH Authentication with Keys ......................................................................................... 333
12.4.1 Generating a Key Pair ............................................................................................ 334
12.4.2 Storing the Public Component of the Key on the Server
(macOS and Linux) ................................................................................................. 335
12.4.3 Storing the Public Component of the Key on the Server (Windows) .... 335
12.5 Example: Uploading Images to a Linux Web Server .............................................. 336
12.5.1 Preparatory Measures ........................................................................................... 336
12.5.2 Bash Script ................................................................................................................ 337
12.5.3 PowerShell Script .................................................................................................... 338
12.6 Example: Analyzing Virtual Machines ......................................................................... 339

13 Visual Studio Code 341

13.1 Introduction ............................................................................................................................. 341


13.1.1 Comparing VS Code, VSCodium, and Visual Studio .................................... 342
13.1.2 Think in Terms of Directories, Not Files! ......................................................... 342
13.2 Language-Specific VS Code Extensions ....................................................................... 343
13.2.1 PowerShell Extension ............................................................................................ 343
13.2.2 Python Extension .................................................................................................... 343
13.2.3 Bash/Shell Extensions .......................................................................................... 344
13.3 Remote – SSH Extension .................................................................................................... 345
13.3.1 Applying the Remote – SSH Extension ............................................................ 345
13.3.2 Limitations ................................................................................................................ 346

14 Git 347

14.1 Git Crash Course ..................................................................................................................... 348


14.1.1 Preparation Tasks ................................................................................................... 348
14.1.2 The First Repository ............................................................................................... 349
14.1.3 The First Commit .................................................................................................... 350
14.1.4 Additional Commits .............................................................................................. 351
14.1.5 Setting Up the Repository on a Second Computer ...................................... 351
14.1.6 Git Status .................................................................................................................. 353
14.1.7 Excluding Files from Git (.gitignore) ................................................................ 353
14.1.8 Transferring Existing Code to a New Repository ......................................... 354

18
Contents

14.2 Handling Settings and Passwords Correctly .............................................................. 355


14.2.1 What’s a Better Method? ..................................................................................... 356
14.2.2 Example ..................................................................................................................... 357
14.3 Git Automation ...................................................................................................................... 358
14.3.1 Controlling GitHub Remotely Using gh .......................................................... 360
14.4 Git Hooks ................................................................................................................................... 360
14.4.1 Example: Detecting Unversioned Files Before the Commit ..................... 361

PART III Applications and Examples

15 Backups 365

15.1 Synchronizing Directories to External Storage ........................................................ 365


15.1.1 PowerShell Script with robocopy ...................................................................... 366
15.1.2 Ideas for Improvement ......................................................................................... 368
15.1.3 Bash Script with rsync ........................................................................................... 368
15.2 WordPress Backup ................................................................................................................ 370

15.3 SQL Server Backup ................................................................................................................. 372


15.3.1 Backing Up and Compressing all Databases via Script .............................. 373

16 Image Processing 375

16.1 Manipulating Image Files .................................................................................................. 375


16.1.1 Installing ImageMagick ........................................................................................ 375
16.1.2 Trying Out ImageMagick ..................................................................................... 376
16.1.3 Example: convert2eps (Bash Variant) ............................................................. 378
16.1.4 Example: convert2eps (PowerShell Variant) ................................................. 379
16.2 Sorting Photos by Date Taken ......................................................................................... 379
16.2.1 Installing and Trying Out ExifTool .................................................................... 380
16.2.2 Bash Example .......................................................................................................... 381
16.2.3 PowerShell Example .............................................................................................. 382
16.3 Converting Exif Metadata to SQL Commands .......................................................... 382
16.3.1 PyExifTool .................................................................................................................. 383
16.3.2 EXIF2SQL .................................................................................................................... 384
16.3.3 Options for Enhancement ................................................................................... 387

19
Contents

17 Web Scraping 389

17.1 Limitations ................................................................................................................................ 389

17.2 Web Scraping, Web Crawling, and Data Mining ..................................................... 390

17.3 Downloading Websites Using wget .............................................................................. 390


17.3.1 Example 1: Downloading Directly Linked Images ....................................... 391
17.3.2 Example 2: Downloading all PDF Files Linked on the Website ............... 392
17.3.3 Example 3: Creating a Local Copy of the Website ....................................... 392
17.4 Web Scraping with Regular Expressions ..................................................................... 393

17.5 Web Scraping with Beautiful Soup ............................................................................... 395


17.5.1 Beautiful Soup and Requests ............................................................................. 395
17.5.2 Hello, Beautiful Soup! ........................................................................................... 395
17.5.3 Example: Determining a List of Top Titles from Rheinwerk
Publishing ................................................................................................................. 396
17.6 Web Scraping with Requests-HTML .............................................................................. 399
17.6.1 Example: Analyzing the GitHub Status .......................................................... 399
17.7 Web Scraping with PowerShell ....................................................................................... 401
17.7.1 PowerHTML Module .............................................................................................. 403

18 Using REST APIs 405

18.1 Tools ............................................................................................................................................ 405

18.2 Sample APIs to Try Out ........................................................................................................ 406

18.3 Implementing Custom REST APIs ................................................................................... 406

18.4 curl and wget ........................................................................................................................... 406


18.4.1 curl ............................................................................................................................... 407
18.4.2 wget ............................................................................................................................ 409
18.4.3 Using REST APIs in Bash Scripts ......................................................................... 410
18.5 Using REST APIs in PowerShell ......................................................................................... 411
18.5.1 Options ...................................................................................................................... 412
18.6 Example: Determining the Current Weather ........................................................... 413

18.7 Using REST APIs in Python ................................................................................................. 414

18.8 Example: Determining Electricity Prices and Displaying Them


Graphically ................................................................................................................................ 416
18.8.1 aWATTar API ............................................................................................................. 417
18.8.2 Analysis of the Data ............................................................................................... 417

20
Contents

18.8.3 Matplotlib ................................................................................................................. 419


18.8.4 Controlling the Energy Consumption .............................................................. 419

19 Databases 421

19.1 Updating and Maintaining Databases ......................................................................... 422


19.1.1 PowerShell and sqlcmd ........................................................................................ 422
19.2 Creating a New Customer Account ............................................................................... 423
19.2.1 Account Data ........................................................................................................... 424
19.2.2 Structure of the Script .......................................................................................... 424
19.3 Storing Exif Metadata in a Database ............................................................................ 426
19.3.1 PyMySQL .................................................................................................................... 427
19.3.2 Saving Exif Metadata ............................................................................................ 428
19.4 Importing JSON Data into a Table ................................................................................. 429

20 Scripting in the Cloud 433

20.1 AWS CLI ...................................................................................................................................... 433


20.1.1 Installation on Linux and macOS ...................................................................... 434
20.1.2 Configuration .......................................................................................................... 434
20.1.3 Getting Started ....................................................................................................... 435
20.1.4 Encrypting Files ....................................................................................................... 436
20.2 Example: Uploading Encrypted Backup Files to the Cloud ................................. 438
20.3 AWS PowerShell Module ................................................................................................... 439
20.3.1 Getting Started ....................................................................................................... 439
20.3.2 Copying Files ............................................................................................................ 441
20.4 Example: Offloading Large Files from a Website to the Cloud ......................... 442
20.4.1 Preparations ............................................................................................................. 443
20.4.2 Script ........................................................................................................................... 443
20.4.3 Limitations ................................................................................................................ 445

21 Virtual Machines 447

21.1 Setting Up and Running Virtual Machines (KVMs) ................................................ 447


21.1.1 Cloning Virtual Machines .................................................................................... 448

21
Contents

21.1.2 Starting and Shutting Down Virtual Machines ............................................ 449


21.1.3 Running Scripts on Multiple Virtual Machines ............................................ 449
21.2 Automating the Network Configuration (KVMs) .................................................... 450
21.2.1 Starting Point ........................................................................................................... 451
21.3 Controlling Hyper-V ............................................................................................................. 453
21.3.1 Cloning Virtual Machines .................................................................................... 455

The Author ............................................................................................................................................... 459

Index .......................................................................................................................................................... 461

Service Pages ..................................................................................................................................... I


Legal Notes ......................................................................................................................................... II

22
Preface

A script is a small piece of code to solve a specific problem or automate a tedious task.
You don’t need a development environment or a compiler to develop a script—an edi-
tor is enough. When it comes to scripting, minimalism is the name of the game, and its
goal is achieving maximum impact with minimal resources. To put it casually, script-
ing is the art of solving IT problems in ten lines of code.
In my work environment, scripts are ubiquitous. I use scripts to set the power saving
mode for my laptop, to create a PDF file of this book from Markdown files, to automate
backups to servers, to watermark e-books, to set up new customers in a web applica-
tion, to scan dozens of databases for logical errors, to create virtual machines for teach-
ing, to sort photos, and more.

Bash, PowerShell, or Python?


The “classic” scripting language is Bash. Its full name, Bourne Again Shell, is a pun. The
predecessor was the Bourne shell, which was widely used on Unix. The license for the
Bourne shell was unsuitable for Linux, which is why a new project was created. Today,
Bash is the dominant Linux shell, both in interactive mode for executing commands
and for script programming. macOS relies on the largely compatible Zsh, which is also
gaining more and more followers on Linux.
Bash is popular, but its antiquated syntax doesn’t win any beauty contests. On the con-
trary, Bash scripts sometimes look awful. For this reason, Microsoft did not even try to
adapt Bash for Windows. Instead, with PowerShell, Microsoft has combined the basic
ideas of a classic Unix shell with the concepts behind object-oriented programming
languages and created a completely new language, which turned out surprisingly well!
Not without reason, Windows administrators love PowerShell.
Python is actually not a typical scripting language. Depending on the intended use,
Python is the basis for AI developments, a tool for (natural) scientists, or a first lan-
guage for entry-level programming. Probably no other language is used as universally
as Python! The elegance of Python’s syntax and its almost inexhaustible supply of
extension modules have led to Python also being used for system administration, con-
verting files between different formats, as a database tool or for hardware control (for
the Raspberry Pi). Python plays to its strengths the more complex the task.

23
Preface

About This Book


Because no single perfect scripting language exists, this book starts in Part I with crash
courses for the Bash, PowerShell, and Python languages. If you want, you can focus on
one of these three languages to get started and gradually increase your language vocab-
ulary.
Part II of this book introduces you to tools and working techniques typically used in
scripts: These topics include commands for processing text files, cmdlets for applying
regular expressions, and functions for handling JSON and XML files. I’ll show you how
to run scripts regularly and automatically, how to run code or copy files to other
machines via SSH, and how to combine version management for your code and script-
ing via Git. Many practical examples round off the information I provide throughout
this book.
Finally, Part III deals with concrete applications: Key topics include backups, image pro-
cessing, web scraping, using REST APIs, databases, using the cloud, and virtual machine
administration.
I have tried as much as possible to design this book in a modular way. Thus, you don’t
need to read all the chapters from start to finish, but instead, you can search specifically
for the information important to you at a specific moment. All chapters in Parts II and
III begin with a brief information box that summarizes the prerequisites for that chap-
ter.

Scripting and AI Tools


Recently, ChatGPT has ushered in a sea change in many professions. As often is the
case, your perspective will determine whether you see the glass as half full or as half
empty: AI tools are far from perfect today, but they are definitely (already and likely
even more so in coming years) a tool that will revolutionize software development.
If you ask ChatGPT or GitHub Copilot in VS Code for a PowerShell script to read a JSON
file and store the data it contains in a PostgreSQL database, the solution will output a
plausible-looking script in seconds.
Ideally, the script will work right away. In my experience, however, the code is rarely
ideal—all the less so the more complex the problem is. Often, the generated code con-
tains unique errors, such as options or commands that don’t exist. Sometimes, logical
errors also exist that are more difficult to detect. With some scripting experience, most
problems can usually be fixed quickly. You can even ask the AI tool specifically to
improve a certain aspect of the code.
My personal impression is that the more solid your prior knowledge is, the better you
can use AI tools. An AI tool plus an experienced developer or an experienced program-
mer—in my view, that’s the dream team of the future. This book provides exactly the

24
About This Book

foundation needed, without dwelling on too many encyclopedic details. For the pro-
gramming of the future, you don’t need to know a hundred syntax variants for certain
regular expressions by heart. But you do need to know that regular expressions exist,
the basics of how they work, and where pitfalls exist. This kind of knowledge is pre-
cisely the focus of this book.

Scripting as a Core Competence for Efficient IT Work


No matter in which branch of the IT industry or on what kind of projects you’re cur-
rently working on, even just a little scripting knowledge will go a long way to making
you more efficient in your work. Focus on the essentials; leave tedious side tasks to
scripts. I wish you every success in this endeavor!
–Michael Kofler (https://kofler.info)

Downloadable Files
All the sample files for this book can be downloaded at https://rheinwerk-computing.
com/5851.

25
Random documents with unrelated
content Scribd suggests to you:
kuin pässi ja ahnas kuin susi. Ei iitä eikä ässää kirjasta irti saa, ei
politiikkaa ymmärrä — senkö hiivatin lailla hän lie akankin saanut,
tylppäturpa? Vaan minkälaisen sai? — ei tuhannet miehiset miehet
sitä rääsyä olisi huolineet. Poijankin jo oli valmiiksi pyöräyttänyt
jollekkin alapuolen retkujätkälle — Amanta — ei saanut puhasta
piikaa Kusti ketku. Jaa Amanta! Siinä se sitten on oikea
Rämsänrannan riekko, ilkiä kuin ilves, suustaan rivo kuin itse
sarvipää saatana, valehtelija, tappelija ja varas. Ne on molemmat
varkauden syntiin syvälle vaipuneita sielunraatoja sekä Amanta että
Kusti, vaikka eihän se Kusti paljon kerkeä, kilpikonna, mutta Amanta
varastaa kuin kärppä missä vain silmä välttyy. Köyhältäkin kähveltää
se pääpelin narttu, jos lie mitä kähveltää, sen tiedän vissiin omasta
kokemuksesta. Mutta nytpä ei taas olekkaan vellijauhoa veturissa ja
reppu on rellullaan ja kukkaron saa kääntää vaikka nurin — ei tipu
muuta kuin täitä… Ja juuri siksi käännän kelkkani sitä mökkiä kohti
ja yötä olen niin että kuorsa kuuluu. Ryöstäköön Amanta nämä
viimeiset viluverhot päältä nukkuessani, jos ilkiää!» uhmailee
Ryysyrannan Jooseppi hiihdellessään talvi-illan pimeydessä tulen
kiilua kohti.

Nyt kun rahan nuusa miestä itseään kopristaa ja suolet soittelevat


ryntäillä, tekisi Jooseppi Kenkkusen mieli kuristaa Karihtaniemen
Amantaa kurkusta ja sanoa: »Annatko akka poikkeen minkä silloin
otit!»

———

Kuin eilisen päivän muisti Ryysy-Jooseppi, miten asia oli


tapahtunut. Hän oli palannut kirkonkylästä yksikseen reilulla tuulella,
sillä urkot olivat silloin rotsineet hyvin ja povi ollut vörskottia
pullollaan. Yöpynyt näinikään, vaikka toisaaltapäin, Karihtaniemeen.
Laskenut siinä pirtin pöydän ääressä rahansa kaiken väen nähden —
665 markkaa — pistänyt lompakkonsa povilakkariin ja takin repaleen
ripustanut vaarnaan akkunapieleen. Vielä maatapannessaan lattialle
ilvehtinyt näin sanoen: »Tuohon jää nyt rahani roikkumaan. Jolla lie
tarvis suurempi kuin minulla ja lie minua kurjempi — siitä ottakoon
osansa.» Ketään vierasta ei käynyt sen yön seutuna mökissä.
Aamusella oli hän tehnyt lähtöä ja kopaissut povilakkariaan:
lompakko oli poissa! Tulistunut ja hämmästynyt oli silloin
Ryysyrannan Jooseppi: lempoko lompakon puhalsi? Myllersi kaikki
paikat: mihinkä se muka illalla sai, mihin putosi? Koko talonväkikin
rupesi etsimään — ei ota löytyäkseen lompakkoa. Ryysyrannan
Jooseppi konttaamaan pitkin likaista lattiaa. Konttaa ja katsoo
tarkoin pöydän alukset — ei kopeu kouriin. Nousee ylös punaisena
kuin kukko ja heittää syrjäsilmäyksen Kustin akkaan. Amantan
naama on tuhkanharmaa. Jooseppi syöksähtää ulkoseen ja etsii
pihaltakin. Kuinkapas se sieltä löytyisi? Palaa takaisin pirttiin ja iskee
silmänsä lattiaan: totisesti — siinä on lompakko pöydän alla! Sillä
aikaa, kun ulkona pistäysi, on se siihen ilmestynyt. »Tuossahan tuo
on!» äännähtää oneasti Amanta ja samalla myrkyllisesti. Jooseppi
tempaa lompakkonsa ja laskee rahat. Viiden sadan seteli on tallella,
samoin satanen… 65 markkaa on poissa! Ryysyrannan Jooseppi
julistaa karihtaniemeläisille: »Tästä on, näkyy, vain mitätön summa,
65 markkaa poikessa! Kukahan niin vähän tarvitsi? Kun kerran
varasti, niin oisi ottanut koko höskän!» Nololta oli näyttänyt näiden
sanojen vaikutuksesta koko Karihtaniemen herskapi. Se tuo
Ryysyrannan Jooseppi osasi… Mutta Amanta akan
silmänvälähdyksestä poislähtiessään hän oli nähnyt, kuka ne
kuusikymmentäviisi markkaa haltuunsa korjasi… Sen pituinen se.

Jooseppi ähkäsi kirotulle muistolleen ja suuntasi suksensa


Karihtanientä kohden. »Hyväpä että vielä valvovat.» Hän nosti
suksensa seinää vasten, käänsi veturin kyljelleen ja rymisteli
porstuan läpi ripaa hapuillen. Kun sai oven auki, niin tuli oli jo
sammutettu. »Ilkeyksissään puhalsivat, kussa kuulivat vieraan
kolinan», arvioi tulija, kaiveli housuntaskustaan tulitikkulaatikon ja
raapasi.

Tulitikun valossa ehti Ryysyrannan Jooseppi nähdä ilkeät silmät ja


pörröisen akanpään, jonka ylitse laiha käsivarsi paraikaa veti
ryysypeittoa hupuksi, sekä Amantan paljaat sääret… Siinä makasi
Kustikin vieressä murmatellen seljällään. Seinäpenkillä kuorsasi
nenällään juhlallisesti torvea soittaen Kustin vanha isä, mukava
Jaakko ukko, mutta ukon akka, vanha Reeta, nukkui karsinapenkillä
erikseen. Ukon ja ämmän välillä virui viisi lasta läjässä lattialla,
pienin likinnä äitiään.

— Hyvät ystävät! alotti Jooseppi Kenkkunen muikeasti tulitikun


karren jo polttaessa peukaloa, jonka vuoksi taas tuli pimeys: —
Antakaa anteeksi Petkeleen peikolle, joka ristittyjä yösydännä
säikyttelee. Kenkku-Jooseppi tässä vain on. Saako panna tulen
tuijuun?

— Kirkolta päinkö se ketkale on kulussa? kuului Amantan


tyytymätön ääni lattialta.

— Ryysyrannalta, Ryysyrannalta, armas Amanta, minä reissaan!


naukui
Jooseppi, — ei ole keittoa kelkassa eikä setelitukkoa povitaskussa…

— Eipä sitten kanattaisi lamppuun tulta panna! sutkautti Amanta


salaviittauksen ymmärtäneenä, mutta Kusti murahti:

— Pistähhän käryämään, lie hänessä vielä siksi öljyä.


— Minkä polttanet, sen sijaan hankkinet! sähähti Amanta.

— Sepä nyt tietty, tiuskasi Kenkkunen. — Ryysyrannan Jooseppi


pitää öljyssä kaksi mökkiä. Ja joskus — rahassakin.

— Mitä turkkilaista sinä turiset! kähisee Amanta pimeässä, mutta


samalla Jooseppi raapasi tulen ja sytytti lampun.

— Tässä on vielä lasi ihan lämpymänä, huomautti hän tahallaan ja


sanoi sitten muikeasti: — Joko te kerkesitte ne rakkauven asiat
valkean aikana tolkata?

Mutta tätä viimemainittua viittausta Joosepin ei olisi pitänyt tehdä.


Amanta karkasi ylös lattiavuoteeltaan ja paljastaen häpynsä, sylkien
kuin kissa Jooseppia silmille, huusi:

— Tuossa sulle rakkauven asioita, hylyky! ja pinkasi samassa ulos


pirtin ovesta.

Ryysyrannan Jooseppia hävetti ja hätkäytti, ja hävetti aviomies


Kustiakin, joka kääntyi mahalleen ja omituisesti motkotti. Se oli
miehellä mielenliikutuksen merkki. Amanta törmäsi juoksujalkaa
takaisin pirttiin vilusta väristen ja, enää kehenkään katsomatta,
sukelsi ryysyvuoteeseensa niin Ioitos miehestään kuin tila
latuskaisella olkimökkänällä suinkin salli. Peittäen päänsä huppuun
hän ei enää päästänyt suustaan sanaakaan. Ryysyrannan Jooseppi,
riisuen hyntteitään ja ripustellen likomärkiä jalkineita ja syylinkejään
orrelle kuivamaan, puheli nyt hillitymmin Kustille, joka nenällään
maaten, mulkoillen päänaluspulIin takaa, harvakseen mörähteli ja
tapansa mukaan änkytti vastaillessaan sulavasuiselle Joosepille.
— Vai vörskottia sinä taas… tuotko kokonaisen säkin? Otatko
rapiastikin rahaa kunnasta?

— Ka minkä irti saanen, selitti Jooseppi.

Mahallaan makaava Kusti on kotvan ääneti ja änkyttää:

— Kehtaatko meille ottaa puojista pari kiloa nisujauhoja, kilon ja


vartin amerikanläskiä ja tokan mustaa karhua?

— Ka mikä etten ota, onko raha?

Kusti on tovin aikaa ääneti, kunnes motkottaa:

— Ky-kymppi on ja hi-hilikku, vaan jos tuota niinkuin pis-pistäisit


omistasi lisää, kun tässä niin ollaan ka-ka-kaverit. No-nousuviikolla
saat ma-maksun.

Nyt ei vuorostaan Jooseppi toviin aikaan vastaa mitään…

Mutta Amantapa onkin seurannut miesten keskustelua huppunsa


alta ja panee nyt liikkeelle koko naisellisen viehätysvoimansa osaksi
silittääkseen äskeistä raakuuttaan, osaksi pyydystääkseen hyötyä
itselleen. Hän hypähtää ripsakasti vuoteeltaan ja kapsahtaa
intohimoisesti kiinni kahvipannuun:

— Kahvia, pirsetti, minä kiehautan tälle Jooseppi rievulle, ikävä


sun on olla, kun niin pitkälti olet tuiskukelissä kelkkaillut!

Hämmästyivät yllätyksestä sekä Jooseppi että Kusti. Mutta vaikka


Jooseppi ei ollut niin tyhmä mies, ettei olisi vikonut vilppiä, niin
kahviajatus oli miekkoselle kovin mieluinen, se taannoinen Tyynelän
kahvinkatku avannolla oli kutkuttanut hajuhermoja.
— Ka ki-ki-kiehauta häntä! kakisteli ilahtuneena Kustikin.

— Virvoittaa se väsynyttä ihmisen raatoa, myönteli Jooseppikin


mesikielin. — Ja mukavapa on tarinata vestää mustakylkisen
ääressä…

Täydessä sovussa juoda hörppi siis Ryysyrannan Jooseppi


alushoususillaan ja avojaloin kukkuraisia kupillisia Amantan
pannusta, ja Kustinkin julmalle kotiparkki-naamalle levisi iltaruskon
tapainen sielunilme. Puolille öin siinä juttua riitti, ja Jooseppi totesi
itsekseen että oli tämä Karihtaniemi sentään melko metka
majailupaikka — siinä sai aina kupposen kuumaa: miten pirhanan
lailla niemeläisten lienee kannattanutkin ostaa ihan alvari kallista
kahvia ja sokuria.

— »Kolomasti vuorokauvessa» kehuivat keittävänsä, »vaikka risat


ne täälläi roikkui ja russakat ravasi», kuten Amanta sen toisen
puolen asiaa määritteli.

Siihen yökahvituksen humuun heräsi toki lopulta vanha Jaakko


ukkokin, kavahti istumaan tukka pöllöllään ja silmää sirkeästi iskien
virkahti:

— Ryysyrannan nuorta isäntää juuttaat juottaat — Ryysyrannan


vanhalle isännälle eivät meinaa antaa märkääkään!

Ukko puhui oikein — hän, Jaakko, näet tosiaan oli Ryysyrannan


asumuksen alkuunpannut, hänpä siellä miehuutensa iän oli jyskänyt
— kolmetoista vuotta vasta oli Kenkkunen mökkinsä mörskää
asuksinut.
— Ka heh, tule — ota kuppi! sähähti Amanta, jota appiukkonsa ei
suurestikaan kunnioittanut — halpasena akan ruippanana
puolikuntoiselle pojalleen piti tätä Amantaa ukkokin.

Ukko tuli lökättävin hurstihousuin, huulet ristissä ja alkoi kysellä


kuulumisia Joosepilta, ja kupillisen kulkkuunsa kaadettuaan otti
seuralta kaiken äänen:

— Joo, joo, paapatti hän, niinpä hyvinkin — kah, kah, — soo soo
— älä virka — heh heh — mitä sitä joutavia — eikösss p… tolokusti,
tolokusti ja ankarasti! niinpä hyvinkin! — rouhakka, rouhakka mies
se on tämä Kusti, vaikka vähän pöljän sekanen — vaan viisain se
minun poijistani silti on — ja onhan tuo reistannut — vaan sitä ei saa
akka ukkoansa haukkua — jopa vain, jopa vain — vai kirkolle sinä
hiihtelet — no joo, jopa vain — — sunko se on tuo koira kenkura —
asettelehhan Amanta sikiöitäsi — — ka nukkua, nukkua pitää yön
aikaan nukkumaan tästä lähemmä itekuhi…

— Eikös se ukko Reetansa viereen kömmikkään? naukasee Ryysy-


Jooseppi makuultaan sitten.

— Ka ei ole tarvis, tuhisee ukko Jaakko ja laskee sen tuhannen


lirkkiä: — Ei sitä enää minun iässäni… sai noita ennenvanhaan
vaimosia… kymmenen joka sormelle — sai, sai — heh, heh — niinpä
hyvinkin… ei niitä joka mies saanut, vaan sain minä — minä sain! —
piisaa jo mun kohalleni paratiisin lysti — rokulia, rokulia tässä jo
rakkaus joutaa pitää — jopa vain — niinpä hyvinkin, heh heh…

Vihdoin kaikki vaikenivat ja koko pirtti kohisi ja viuhui monen


ihmisen kuorsauksesta ja lasten kitinästä.
Mutta Ryysyrannan Jooseppi herää parin tunnin jälkeen lutikkain
purentaan, niitä ihan kihisee pitkin selkää ja sääriä, ja ihmisparka on
kuin tulisissa tappuroissa. Syyhyttää yhtäläistä, kynsittää kuin sikaa,
verille asti raavittaa, hiki helmeilee miehen kasvoilla. Tottuu
siihenkin, mutta hautoo unettomana omia ajatuksiaan. »Kyllä tämä
korpimökkyrin elämä on yhtä pyllyn pyyhkintää…!»

Jooseppi makaa seljällään, mutta niin sielullisesti tuskissaan että


mieli tekisi huutaa apua. Varsinkin oman vaimonsa siunattu tila siellä
kotona näin yösydännä kiusaa. Minkätähden järjellinen ihminen ei
saata olla ilman vaimonpuolta? Ranskanmaan talonpojilla ei kuulu
olevan näin paljon sikiöitä. Lemmon laillako hyö siellä…?

Yhtäkkiä makaava matkamies höristää korviaan pimeässä — siellä


tuntuu tapahtuvan jotakin tuolla lattian laidassa, siellä missä Kusti ja
Amanta nukkuvat — on kuin emäntä potkisi sähisten ja kiroillen… ja
mies tekisi väkivaltaa…

»Enkä anna, en en en!» kuuluu Amantan ääni.

»Elä niin isosti puhu — se kuuloo!» murisee Kusti.

»Ka kuulkoon, senkin räkäruntti!» Jooseppi huokaisee ääneen —


ja aviopari vaikenee.

»Semmoista se on», miettii Kenkkunen. »Aviosääty on itsensä


Jumalan asettama…»

»Joko sinä taas kopeloit, piru!» kajahtaa Amantan äitelä ääni


pimeässä.

Surkeata, surkeata tämä on, päättelee Jooseppi, kyhnytellen


kylkeään ja väkinäisesti rykäisten, josta aviopuolisot jälleen asettuvat
hiljaisiksi. Torkahtaa vihdoin kiusaantunut matkamieskin ennen
päivän kajoa ja herää vasta siihen että mökin lapset lankeilevat
hänen jalkoihinsa. Reeta ämmä jo istua töröttää karsinassa kartaten
villoja ja Jaakko ukko, huulet huipparassa, jännittää katajavanteita
tekemäänsä uuteen, kauniiseen saaviin. Kusti vielä makaa
tuprutellen viimeistä kopallista mustaa karhua, julmettuneen
näköisenä ja umpimielisenä. Amanta, myös piipunnysä suussa,
laahustaa rääsyisin alushamein makuuryysyjen keskessä — kalseat
silmänsä, joiden alustat ovat sinikuopalla, välttelevät visusti
Jooseppia…

Jooseppi nousee ylös ja tekee lähtöä.

7.

Oli jo herennyt lumia pöllyyttämästä, kun Kenkku-Jooseppi edellä


juoksevine koirineen laskeutui järvelle ja päivän kajasteessa läksi
sivakoimaan viittojen väliä, jotka ampuivat kohti korkeata
Kullanperän korpea. Työlästä oli yhä retuuttaa perässään veturia,
koska ei kukaan vielä ollut puhkaissut latua. Rotkossa lumentykki oli
painaltanut puut sujuksiin, valkoisten kaariporttien läpi siinä kaahlaili
mies, ja jos sauva sipasi koivuluokkiin, niin suoraan hiihtäjän niskaan
pudota möksähti lumimöhkäle. Pitkällä suolla vain iänikuiset
ruikulamännyn rastit osoittivat tien suuntia, mutta kolea korpiräme ei
vähintäkään antanut osviittaa lähestyvästä kirkonkylästä. Koppelo
kohahtaa kuusen kyljestä ja Vekku heittäytyy perään vinkuen ja
haukkuen… Vihdoin ilmestyy purettu veräjä, jonka takaa näkyy
matala, akkunoitaan myöten kinoksiin uponnut mökki, jolle
suruvoittoisen leiman antaa kaatumavikainen, mielipuoleksi
sairastunut poika rukka, sitten ilmestyy talo, joka ei ole oikein
talonpoikais- eikä herraskaan tyyliä — siinä asuu seurakunnan
lukkari.

Tämä ei ole vielä varsinaista kirkonkylää, sivu painelee siis


Ryysyrannan Jooseppi naapurina seisovasta kolmannestakin
asumuksesta, niinsanotusta »uurmaakarin mökistä» — se maakari
kun näet yhä kuuluu viipyvän Ruija-reissullaan, jonne taitaa
myötyriksi jäädäkkin — akka pahus senkin tolkkumiehen karkuun lie
ajanut, sellainen pahamaineisen retkunaisen tytär, jolla itsellään on
hullu tyttö — pitkäkyntiseksi toki tätäkin Ruskosen muijaa hokevat
ihmiset, vaikka ei suinkaan hään, Jooseppi, varmasti tiedä…

Järven jäälle taas painautuu Petkelkylän mies ja vasta siinäpä nyt


ilmestyy näköpiiriin Rämsänrannan kirkonkylä. Vasemmalla siintää
hautaussaari ja taampana suuri ristikirkko, jonka tornitottero ei jaksa
kiivetä yli metsän näköpiirin, mutta oikealla kuumottaa keskuskylän
talojen rykelmä… Liian huonosti viitoitettua tietä junnaa Ryysy-
Jooseppi poikki selän ja kaartaa niin mainittuun Harakan rantaan —
siinäpä itse »Harakka» Rämsänrannan ainoa matkustajalaiva
kekottaa kellellään valkamaansa jäätyneenä, talvilumiin
peittyneenä…

Kah, jo tulee vastaan ihminenkin — ensimäinen Ryysy-Joosepin


koko matkalla — on vähän ikävä että sattuu akkaihminen —
Jooseppi ei ole taikauskoinen, vaan kuitenkin — akkaihminen
ensimäisenä vastaantulijana tärkeällä matkalla on huono enne.
Ryysy-Jooseppi tunteekin akan, se on Mooseksen Maija,
haudankaivajan leski, sellainen lipeväleukainen muorin kutale,
jumalinen kuin piru…
— Hi-hi, juumalan terve, Kenkku-Jooseppihan se on — sanoo
hiihtävä akka ja pysähtyy, niistää nokkansa ja tuippaa luisevan
kätensä, — vieläkös-nä Maija rääppänää tuntenet?

— Ka tunnen, tunnen! laitattaa Jooseppi, ja, vaikka


harmistuneenakin enteestä, päättää hyötyä Maijasta, joka tavallisesti
tietää kylän kuulumiset. — Tietääkö Maija niitä kunnan miehiä, jotta
ovatko kotosalla?

— Niin niitä kunnan herrojako see Kenkku kyselöö! liplattaa


Mooseksen Maija. — Herroiksi, herroiksi niitä pitää tyhmän
karahteerata. Se olee Kinnu-Kallekin näet herrasmies, kun olee
avaraan virkaan päästetty. Ja Kasperi Lutikainenkin raji kaulassa
postissa pastieraa ja nästyykiin niistää. Ja kolmas herra on John
Juntunen — kahden lakanan välissä sekin tuhkaturpa nukkuu siitä
asti kun virkailijaksi nimittivät — ohho tätä maailmaa turmeluksen
merkeissä — Jeesuksen Ristuksen veri puhtistaa kaikista synneistä —
ei sitä Moose-vainaan aikaan ollut muita ylhäisiä kuin pappa krovasti
ja hauvankaivaja, ja olihan tuo Kanervavaarankin patruuna
melkoisessa viran empeetissä, kun ymppäsi ja räknäsi ja isoja
ristiäisiä, piti. Niin että ovatko kotosalla kunnan herrat. Kettee sinä
sihtaat?

Ryysyrannan Jooseppi selitti.

— Voi mies rukka, marisi Maija, pahaan aikaan taisit sattua. Mnää
olin illalla hiaromassa sitä Lutikaiskaa — rouvaksi taijan sanoa, koska
on miehensä herra — niin se tiesi, jotta kunnan kassa on tyhjä kuin
Hallavaaralaisen kontti ja puotiloista eivät anna enää pussin
pölähtävää niillä kunnan retiittilappusilla.

Jooseppi sylkäsi pitkän syljen ja erosi lipevästä Maija muijasta.


Nousi ylös loivaa mäkirinnettä kirkonkylään ja alkoi tunnustella
maaperää.

Suolet kurisi Joosepilla, kun hän siinä edestakaisin hölkytteli kylän


raittia pitkin etsien kunnan virkailijoita, kerran hän jo vilahdukselta
näki Kinnu-Kallen ja tahtoi pysähdyttää hänet, mutta Kinnu-Kalle
näytti pelkäävän Ryysy-Jooseppia kuin jänis rumpua ja pääsi
livistämään. Joosepilta jorahti ärräpää suusta ja suhaus jostakin
muusta paikasta, ja hän kiipesi kauppiaan tiskille istumaan ja pyysi
pikanellia —. Karihtaniemeläisten rahalla mies ensi hätään osti
purutupakkaa ja alkoi jalkojaan heilutellen tirskutella ympärilleen.

— Kah Ryysy-Jooseppikin on liikkeessä, iskee silmää Maakunnan


kaupanhoitaja häärien ostajain keskessä. — Mitäs miehelle kuuluu?

— Nälkää ja kissankinkkua mulle kuuluu! murisee Jooseppi, — ja


sitten on lempsatti, jos ei tänä päivänä kauppoja synny…

— Ka niin, osta vellijauhoja ja makkaraa ja punaista limonaatia,


niin loppuu nälkä! esittää leikillisesti kaupanhoitaja.

— Vai makkaraa! kimahtaa Jooseppi. — Milläs tämä herra sellaisia


sapuskoita ostaa? Saamisia kyllä oisi kunnasta, mutta otappa
Kinnusta kiinni koivesta! Ja missä maleksinee se Lutikainenkin,
Rämsänrannan rahaministeri?

— Tuolla justiin sinun rahaministerisi näkyy menevän… sanoo


samalla muuan hyvinpuettu isäntä, joka siinä sikaari suussa tekee
mahtavia kauppoja tukkiyhtiön asiamiehenä.

Ryysyrannan Joosepille tuli kiire maantielle, joka näkyi Maakunnan


akkunan läpi. Läähättäen hän tavoitti Lutikaisen, joka salkku
kainalossa käveli postitoimistosta kunnanhuonetta kohti. Jooseppi
teki hyvän päivän ja toimitti:

— Ne siellä mökillä jäivät kolmen leivän varaan. Annatko


vörskottia,
Kasperi?

— Vastahan tuota sait! huomautti Lutikainen muljauttaen


altakulmainsa tervanmustat silmänsä Jooseppiin ja tottuneesti
virnistäen kuten ainakin mies, joka päivittäin saa kuulla samaa
ruikutusta.

— Vanhoja velkasyntejä minä sillä viimeisellä ennakolla korjailin ja


sitten toisakseen olen vähin sairastellutkin, teeskenteli Jooseppi. —
Jos et anna rahapenniä, niin saattaa halkourakka jäähä kesken ja
minä lähen savottaan.

— Ka maksakoot takuumiehesi vahingon, arveli Lutikainen


murhaavasti. —
Mikäpäs siinä!

Ja hän yritti jo mennä, mutta Ryysyrannan Jooseppi tarttuen


toisen hihaan, nosti hirveän elämän:

— Se on tuota sillä tavalla, herra kirjuli ja kunnan varaesimies,


jotta jos en minä nyt saa vörskottia, niin akka tulee hulluksi ja sikiöt
joutaa lumikuoppaan!

Lutikainen katsahti vähän ilkiästi Jooseppiin ja sanoi juhlallisesti:

— Oo te Kenkkuset, te Pelketkylän iankaikkiset ryysykerjäläiset,


teistä on kovasti vastusta yhteiskunnassa!
Ja pistäen siinä Joosepin nokan edessä hienon Saima-savukkeen
palamaan, tarjoamatta toiselle, hän lisäsi: Tulehhan perässä, mies
riepu, niin katahetaan kunnantuvalla, sitä sunkin sottaasi,
Kenkkunen!

Lutikainen käveli edellä eheässä takissaan herrasmaisesti


sauhutellen, Jooseppi vääntelihen jäljessä roikkuvin risoin, pikanellia
imien ja ankarasti tirskutellen. Vekku vökälehti isäntänsä jaloissa,
häntä koipien välissä, sillä jokaisesta kylän portista hyökkäili
sekarotuisia koiria sitä nuuskimaan ja sille, köyhän koiralle,
kirkonkylän kunniaa kuuluttamaan.

Kunnarttuvassa seisoskeli tai istuskeli joukko muitakin asiamiehiä


ja akkoja, ja esimies Kalle Kinnunen, joka ei suinkaan ollut kateissa,
sankalasit nenällään, kuului paraikaa toimittavan Riepuniemen
Matille että:

— Elä sinä Matti vastusta esivaltaa, joka on Jumalasta. Minkä


helevetissä me sille mahetaan että kunnan kassassa ei ole ristuksen
killinkiä — ja teijän perukkalaisethan ne juuri ovat kassan pohjaan
asti rapanneet, ja herrat ei maksa verojaan…

Mutta Riepuniemen Matti ehätti vastaamaan:

— Enhän minä esivaltaa vastustakkaan, vaan tätä teijän kunnan


hoitoa värteeraan, jotta paremmin oli asiat sen Velliläisen aikana…

Ryysyrannan Jooseppi oikein mielihyvikseen kuunteli


ammattiveljensä
Matin vastaväittelyä. Uskalsipas Riepuniemeläinen!
Mutta Lutikainen tilikirjoja selailtuaan kääntyi Joosepin puoleen
sanoen:

— Liian paljon olet jo ennakkoa ottanut, Jooseppi Kenkkunen.


Emme voi antaa rahaa ennen pääsiäistä.

— Ka mitenkäpä sitä antaa, mitä ei ouk! vastasi kimeällä äänellään


Jooseppi, josta kaikki asiamiehet, niin synkkiä kuin olivatkin,
naurahtivat kuorossa. Kunnan virkailijat rapistelivat papereitaan ja
näyttivät nolatuilta. Jooseppi tirskutteli ympäri tupaa ja aikoi jo
lähteä pois, mutta silloin Lutikainen lausui lauhkeasti:

— Jauholapun sulle saatamme antaa, Kenkkunen. Huolitko?

— Ka anna häntä!

Jooseppi kyllä arvasi että Mooseksen Maijan ennustus kävisi


toteen, mutta epätoivoiselle oli pelkkä lupauskin valonsäde
pimeydessä.

Ja mies tuli ulos koiransa luo koprassaan puolilikainen paperilippu,


johon kirjoitettu oli:

Tämä lipu oike vuttaa Josepi Kenkusen saman 50 gilogram ruis


jauhoo Makunasta Rämsän rannan kunnan tilliin. Kale Kinunen.
Kasper Ludikain.

— Hieno paperi, hieno paperi! sanoi Maakunnan kaupanhoitaja


nähtyään Ryysyrannan Joosepin luottolipun, jonka tämä komeasti oli
paiskannut tiskille. — Mutta jos Kenkkunen tahtoo, niin myömme
tätä lajia paperia 50 kilon säkeissä tuhannella markalla Suomen
kansalle. — Et saa jauhoa, mies rukka!
Silloin vasta Ryysyrannan Joosepilta mölä pääsi.

Ensimäiseksi hän kirosi itsensä. Sitten koko ihmisen elämän. Ja


kolmanneksi koko Rämsänrannan kunnallishallituksen.

— No jo pitää olla hallitus pohjoisnavan alla! hän huuteli kimakasti


heiluessaan tiskin edessä liehahtelevin ryysyin. — Tämän
Rämsänrannan kunnan asiat ovat minun muistini aikaan
vuonnavuotuissaan olleet retuperällä, vaan tänä talvena ne näyttävät
vielä siitään pilauneen — sen lemmon pölkkypäitäkö hyö valinneet
ovat valtuuskuntaan. Eikö löyvy tästä moukkain pesästä älyniekkaa
sen mokomaa, jotta ei tarvitseisi köyhiä ihmisiä narrata niinkuin tuo
Lutikainen tekee! Vai hyysipaperia, vai hyysipaperia nyt on ruvennyt
levereeraamaan Rämsänrannan kunnallishallitus! Vaan sen minä
sanon että…

Ryysyrannan Joosepin puhe katkesi, kun Riepuniemen Matti löi


häntä takaapäin olalle ja, iskien silmää, kuiskasi: Tuuhhan
Kenkkunen vähän ulos — oisi pikkusen assieta.

Jooseppi oli ihmeissään, mutta meni. Matti kiersi Maakunnan


takapihalle, kaivoi povestansa pienoisen pullon ja käski Joosepin
kulauttaa. Kolmesti kulauttikin Jooseppi, jonka jälkeen Matti myös
kulautti kolmesti, painoi tulpan suulle ja sanoi:

— Elähän hätääsi kuole, Kenkkunen! Yhteiset on köyhän saatanan


asiat.
Eikös olekkin — mitääh?

— Niinpä taitaa olla, sanoi Ryysyrannan Jooseppikin, jonka


sisuksia niin mukavasti oli alkanut kiertää ja polttaa.
— Kuulehhan Kenkku!

— Joo?

— Että… että elähän hätääsi kuole!

— Tuota että mitä sinä meinaat? kysyi Jooseppi.

Riepuniemen Matti vilkuili ympärilleen salaperäisesti ja kumartui


sitten supattamaan, asian ihan Joosepin korvan sisään.

Jooseppi alkoi kynsiä niskaansa naama ilon irvistyksessä ääneensä


lausuen:

— Antaisikohan tuo, jos…

— Antaa se varmasti, vakuutti Matti. — Ja antaa, täällä koko


kirkonkylä… herrat ja työmiehet, kauppiaat ja maamiehet,
kommuunat ja porvalit, lukkarit ja pap…

— Antaako poliisi Pirhonenkin? kysyi jännittyneenä Jooseppi.

Riepuniemen Matti ei vastannut, vaan iski ovelasti silmää.

8.

Raskas jauhosäkki ja täysinäinen reppu törrötti Ryysyrannan


Joosepin veturikelkassa, koska mies hikipäin hiihtää hipsutteli pois
kirkonkylästä kumarassa lyöden sompiansa lumeen. Hänen
hengityksessään huokui hiukan väkijuoman tuoksu ja tuontuostaan
hän tyytyväisenä tirskautti syljen, sillä makea pikanelli pullotti
miehen poskessa. Vekku koira myös näytti virkeältä, kun pääsi pois
kylän hurttain kintuista — oi kuinka ihanaa oli koirallekin oman
mökin ikuinen rauha. Mutta Vekku vaistosi ettei hänkään saisi
leipäpalaa, ellei isäntänsä joskus tehnyt matkaa kirkonkylään — siksi
katseli koira kunnioittavasti veturin kuormaan ja oli valmis henkeen
ja vereen asti vartioimaan jauhosäkkiä ja reppua. Ja kuinka Vekku
rakastikaan Ryysy-Jooseppia, tuota erämaan yksikyttyräistä
kameelia, joka tuossa junnasi jälessä — yhtä asiaa vain koira
oudosteli — kameelissa oli jotakin uutta, uhmailevaa,
salariemukasta, peloittavaa — isännän äänikin oli toinen kuin tullessa
ja silmissä kumma kiilto…

Totta se olikin, mitä koira isännästään vaistosi!

Outo, peloittava, ennenkokematon elämänriemu ja uhmaileva usko


oli syttynyt tällä matkalla Ryysyrannan Joosepin latuskaiseen rintaan.
Hänelle oli kuiskuteltu korvaan, senjälkeen hänet oli ohjattu
jonnekkin… siellä taas supatettu suljettujen ovien takana… ja sitten
oli sujahutettu muutamia satalappusia ryysyisen miehen poveen —
hän oli tarttunut antajan käteen, pusertanut sitä ankarasti, katsonut
kiinteästi silmiin ja korottanut äänensä ylistykseen — Jooseppi oli
tullut haltioitumistilaan…

Ja nytpä hän tässä hiihteli illan jo pimettyä kallista kuormaa


vetäen pitkin järven ulappaa — takana tuikahtelivat kylän akkuna-
valot. Kirottu oli ollut köyhälle ennen tuo kirkonkylä — siunattu,
siunattu oli se nyt! Koko porvaristo, koko virkakunta— poliisi
Pirhonenkin — tuntui nyt niin kunnolliselta, veljellismieliseltä,
melkein kristillisrakkaalta — Joosepilla kihahtivat kyynelet silmiin,
kun muisti miten se, joka rahat oli antanut, oli sanonut… Miten
olikaan se sanonut?
Että: Kurjuudesta ei nousta rehellisin keinoin. Kierrä hiukan kieroa
lakia eläkä päästä pakkorikosta omalletunnollesi, niin elät iloksesi.
Ryysyrannan Jooseppi, terve!…

Jooseppi hihkasi hiihtäessään, kun nuo merkilliset sanat muisti —


se mies oli oivaltanut kansan kohtalon ja nykyajan hengen! Miksi
olivatkaan maan isät siinä »etuskunnassa» laatineet lain, jota oli
mahdoton täyttää? Ei ainakaan Ukko Jumala ollut sellaisen
armottoman asian puolella — olihan »Jumalan poikai ryypännynnä
viiniä» ja sellainen oli hokema että tasavallan resitenttikin karrasi
vastaan… Ei siis syvintä uomaa myöten haraten ollutkaan oikea
rikos, jos köyhyyden hädässä pikkurikkisen — kuusenjuurta tirautti.
Jooseppi hihkasi pimeässä jään ulapalla, ja jos ei olisi omaa
koiraansa hiukan ujostellut, olisi miekkonen lyykähtänyt polvilleen
lumeen, nostanut käsikämpyränsä Kalevan miekkaa kohden ja
ääneensä kiittänyt kaikkivaltiasta tämän talvipäivän tapahtuneesta
armosta… Nyt valkeni, nytpä ota ja iske, valkeni elämä! Ja jos ei vain
Pirhosta niin tässä pärjäisi elintarpeen puolesta pian kesään asti, ja
jos sitten halkolautan saisi viedyksi, niin lopputilissä sieppaisi vielä
tuhansien tulon kunnalta…

— Pentele kun oli hyvää se Riepuniemen Matin pontikka! julisti


Jooseppi ääneen, tuntien ylentävää huumausta päässään. — Mutta
annahhan, annahhan kun Ryysy-Jooseppikin tirauttaa…

Vekku koira oli kääntynyt ja laskenut kippuran häntänsä alas ja


näytti katsovan kovin kysyväisesti isäntäänsä, joka puheli ääneen ja
puhkui. Mikä ihme olikaan tullut rakkaalle Ryysy-Joosepille?

— Juokse, juokse! komensi Jooseppi painellen rivakasti eteenpäin.


Lukkarin rannoille päästyään hän ei poikennut mökkilöihin, vaan
painautui rämekorpeen. Ihan laulattamaan tuppasi Jooseppia
jängällä:

Pupu-Jussi se metsässä
nukkuu kuusen alla.
Mökkikin oma on Juss…

Mitähän se liinatukka Liisa-Valappu ja Einari Jaakoppi nyt sanoo,


kun pappa repustaan kaivaa karamellia?… »Hyvä setä lähetti! Hyvä
setä lähetti!»

Jooseppi livutteli hyvää vauhtia alas möykkelikköä Kullanperän


rotkoa, niin että pitkän jutkon päässä hyppelehtivä veturi toisinaan
kapsahti puuhun, joka karisti kaiken lumensa miehen niskaan.
Tuossa jo kiilui Karihtaniemen akkunavalo salmen takana: »Ne on
kateellista väkeä nuo niemeläiset — niitä täytyy varoa, vaan tekisi
mieli taas vähän kiusata, kun näin hyvin luonnisti», tunnelmoi
Jooseppi.

Hän heitti kelkkansa ja suksensa saunan edustalle, ja kaivettuaan


repusta pienen mytyn, käveli pirtille.

— Heh, tuossa on tilaukset — kaksi kymppiä omistani panin, selitti


Jooseppi reilusti ja istahti penkille hiestä höyryten.

— Kyllä minä nousuviikolla maksan, änkytti Kusti ja lisäsi kaivellen


pakettia: — Pannaanhan täältä mustaa karhua.

— En minä huoli, torjui Jooseppi kopeasti, kaivellen poveaan; vaan


pannaanhan täältä oikeata Pietarsaaren rullaa. Heh, ukko —
hiivatissako se on Amanta, kun ei näy pirtissä?

— Mihin lie pistäynyt… navettaan, kai se meni…


Miten lienee Jooseppia niin hätkäyttänyt aavistus, hän tirkisti ulos
hajanaisesta lasiruudusta — samalla kuului Vekku, joka oli jäänyt
vahtimaan kelkkaa, kovasti urisevan. Jooseppi jokelsi:

— Saunalla taitaa Amanta Olla…

Ja sieltähän se emäntä rääsy tuli tyhjää piippua imien, silmät


pälyen:

— Kah, paluussako jo on Jooseppi. Jääthän yöksi, niin keitän


kahvit…

— En minä jää. Nyt on kiire kotiin!

Jooseppi hämmästytti Amantaa kaivamalla housuntaskustaan


pienoisen pullon:

— Siinä sinulle lamppuöljyä!

Amanta ei tietänyt mitä ajatella. Tuo Ryysyrannan Jooseppi oli


merkillinen miehen murrikka: hyvyyttäänkö lienee öljyn tuonut vai
piruuttaan?

Amanta koppasi intohimoisesti miehensä Kustin kourista


tupakkatokan ja tottuneesti täytti äkkivääränsä »mustalla karhulla».

— Taisit saada jauhosäkin?

— Sain!

— Saitko muuta mitä?

— Ainahan se köyhä saatana keinottelemalla suupalan sieppaa


rehellistä tienestiä vastaan, toimitti Jooseppi juhlallisesti, tirskutellen
lattialle, joka kuohui lastukkoa ja russakkaa.

Amanta ja Kusti imivät intohimoisesti piippujansa, varsinkin akka


veti sauhut syvälle keuhkoihinsa samalla kun hänen silmänsä
tutkivasti vilkahtelivat Jooseppiin, joka jo teki poislähtöä.

— Ka käyhhän vastai! sanoi Amanta yhtaikaa haikeasti ja


vihaisesti.

Jooseppi tuli suksilleen, veti reppunsa narulla kiinni, mutta


ihmetteli; noinko hän äskettäin oli heittänyt veturin, näytti aivankuin
kelkka olisi nykäisty kannaksilta saunaan päin…!

Hän hymähti ja läksi hiihtämään pitkin pimeää viittatietä, jota


taivaan tähdet heikosti valaisivat.

»Ei, parasta on vältellä taipalen varrella olevia mökkejä — jos ne


paholaiset tietäisivät, niin — —»

Ja Jooseppi sivuutti Tyynelän ja Kyyrylän, mutta Varisautiossa hän


pistäytyi, ronkki repustaan kahvit ja sokerit ja naurahti vaan, kun
Romppanen päivitteli ettei ollut rahaa millä maksaa ostokset —
eipähän senvertaisilla nyt ollut järin kiirettä. Hämmästytti toisia
köyhiä vielä viskaamalla karamellin kullekkin Romppasen eukon
lapsista — kalpean emännän silmiin sihahti kyynel. Jooseppi levähti
vasta Mullimäessä, paiskasi pöydälle viitosen käskien keittää kahvit
itselleen kuin herralle sekä intoutui suurella, kimeällä äänellään
kertomaan kirkonkylän kuulumiset:

— Että Hermanni Hulkon lehmä on menneellä viikolla poikinna


sarvipäisen vasikan. Että Uulea-yhtiö on Rommakon savotalla
löysännyt työstä sata miestä. Että Työväentalolle ensi pyhän seutuna
kuuluu tulevan oikein se pääpunanen Sarvikallo Kajjaanista roletaaria
rakuteeraamaan ja kommuunan katkismusta romulkeeraamaan. Että
ohrana on pistännä köysiin seppä Herraskaisen, jolle kuuluu tulleen
satoja tuhansia ryssänruplia rajan takaa — ka niitä epattia. Että
osuuskaupan pirtillä ovat suojeluskuntapojat toissa yönä vähän
löylyyttäneet lekioonalaisia — mauserilla pöksyille pärähyttäneet.
Että varavallesmanni kuuluu lähteneen akanottoon Ahvenanmaalta.
Ja siunatuksi lopuksi että atteikari Nuurplaati viikon päivät on
huippaillut hummerissa, niin ettei hänenkään, Joosepin, onnistunut
ostaa ämmälle rintaroppia…

Mutta siitä tärkeimmästä uutisesta Jooseppi supatteli korvaan vain


Mullimäen isännälle — menivätpä vielä ulos kujaankin yksissä
asioista sopimaan. Emäntä kuuli sieltä pimeästä Joosepin kimakan
hihkailun ja katkonaisia lauseita: »Tirautan, tirautan minnäi kerran!
Joutaako sulta muuri? Minä paan Aapelin hakemaan vielä tänä
yönä… Entä muut roskat… On mulla ihtelläi… Ka saan minä
Huhmarniemestä… Terve, terve. Ja tuuhhan sitten lauvantaina
viisaamaan… Ja suu poikki…»

Oli jo hameenheitto-aika, kun Jooseppi vetureineen saapui kotiinsa


Ryysyrantaan.

9.

Jooseppi Kenkkusen pahaisessa pirtissä syödään nyt selvää leipää,


keitetäänpä joka päivä kahviakin. Tosin ei emännälle vieläkään
räkkää omaa kylähametta eikä liioin paitaa — se on kai isännän
huolimattomuutta ja emännän kohtaloonsa orjistumista — tosin ovat
lapset puolialasti, lattia puhki ja russakat valloillaan, mutta ryhti ja
elämänusko on toinen kuin ennen. Joosepissa on jotakin repäisevää,
purskuvan miehekästä, tuosta yksikyttyräisestä kameelista on
karaistumassa erinomainen juhta. Ja repäisevä meininki tarttuu
muihinkin, kaikki ovat liikkeellä, pienimmät mukulatkin hommassa,
Kurli Kustaavankin lulluhuudossa luikkaa elämäniloa, Einari Jaakoppi
juosta hippoo isänsä vanhoissa saapaslötöissä äidin perässä
navetassa, Irmeli tyttö jyryyttää kätkyttä ja Leena-Kenoveeva ynnä
Liisa Valpuri pistävät keskellä päivää tanssiksi matkien isän
opettamaa laulua:

Hei liri lii!


Hei luri luu!
Kuperinkeikkaa ja pyllylleen!

Isä Jooseppi ryskää päivät metsässä särkien ja sahaten halkoja


sylen syleltä, pinon pinolta ja saapuu iltahämärissä hiihtäen kotiin
nälkäisenä kuin susi ja hiestä höyryten, mutta mainiolla tuulella.

— Annahhan lisää velliä… Aapeli hoi, joko siellä on tuli muurin


alla?… Hei akka, kiehautappa kahvit…

Iltapuhde on pitkä — Joosepista se on pitempi kuin ennen — joka


puolen tunnin päästä hän tirkistää taskukelloa, joka tikuttaa mustalla
seinällä ympärillä kihisevien ruskeatakkisten peloittavana ihmeenä —
mistä kummasta lienee Kenkku mokoman tiksuttajan hankkinut?
mutta heti jauhosäkin tuonnin jälkeen aikataulu vain on ilmestynyt
pirttiin. Ja kun kellon puikko vihdoin osoittaa kahdeksikkoa, silloin
Jooseppi keinotekoisen äräkästi kivahtaa:

— Yö tulee. Penskat nukkumaan! — Mutta vanhinta lasta, Aapelia,


ei komenneta nukkumaan, poika huiskale kulkee pirtin ja kodan väliä
katsellen tarkkaavaisesti isäänsä. Ämmäkin on liikkeellä, viivähtääpä
toisinaan puolentuntia kodassa, josta tulenloimo vilkkuu navetan
kujaan, ja toimittaa jotakin hyvin asiantuntevasti Joosepille.

Kaisa-Reeta vain näyttää väsyneeltä ja alakuloiselta, mutta


Jooseppi koettaa ylläpitää vaimonsa rohkeutta eikä ota vastaan sitä
sielullista vaikutelmaa, mikä pyrkii johtumaan siitä että eukon vartalo
päivä päivältä pullistuu. »Juuri noin sen olla pitääkin!» ajattelee
Jooseppi uhmariemulla. Ja hänestä, aviomiehestä, se totta puhuen
näyttää sangen miellyttävältä. Uusi elämänusko on pannut hänet
näkemään lastenlisääntymisenkin toisessa valossa. »Mies syöpi, mies
saapi, miehelle antaapi Jumala.»

— Mene sinä Kaisa-Reeta vain nukkumaan, kyllä me ämmän ja


Aapelin kanssa pärjäämme.

— Pärjäätte! matkii vaimo maseasti itku kurkussa. — Pärjäätte te


siihen asti että kopsahtaa konstaapeli ja potkasee muuripadan
kumoon… särkee kaikki roskat.

— Vaimo! kimahtaa Ryysy-Jooseppi kirkkain siansilmin. — Tämä


on yhteinen asia yhteiskunnan painon alla. Sinä olet heikompi astia,
minun velvollisuuteni on sinua kärsiä ja — opettaa.

Ja Jooseppi rientää pahkakauha kourassa, pikanelli poskessa


tehtäviinsä, ensin ripustettuaan säkinkuoria pirtinakkunoihin, jotta ei
lampun tuli tuikuta ulos järven viittatielle.

Vielä kello 10 hän lähettää Aapeli pojan hiihtämään alas järvelle


kuulostamaan, onko viittatiellä kulkijoita, puolen tunnin kuluttua
poika palaa hehkuvin poskin, reuhka takaraivolla ja antaa raportin.
— Näkyi muuan mies reppuselkä hiihtää vouhottavan Petkelettä
kohti —
Konsta setäkö ollut lie.

— Se runtti se on ollut, sanoi Jooseppi, joka tunsi veljensä. —


Eipähän poikennut meille. Se on kärmeissään, kun on tietenkin
kuullut että olemme saaneet sata kiloa jauhoja… Hyväpä oli että sivu
pyyhkäsi.

Ja isä ja poika ryhtyivät salaperäisiin yöaskareisiin pahaisessa


kodassa, joka oli kuin vartavasten rakennettu piiloon navetan tunkion
kupeelle kujan taa. Kaahlasi sinne toki vanha ämmäkin. Lehmät
navetassa ynähtelivät äärimmäisen uteliaina, mitä kummaa talossa
puuhattiin nykyään näin öiseen aikaan? Omenan ja Äpylin sieraimiin
tunkeutui muikea haju, joka omituisesti kiihoitti… Teki mieli riuhtaista
kytkyensä poikki ja syöstä suinpäin sinne kotaan, josta ämmänkin
pälpätys kuului. Ei se ollut Iehmänhaudetta, jota siellä keitettiin,
paljon väkevämpää suurusta se oli…

Mutta Vekku koira, joka siitä saakka kun isäntänsä kanssa oli
saatellut jauhosäkin kotiin, oli tullut ikäänkuin syvämietteiseksi, oli
asianaavistavasti asettunut vahtiin rinteellä kallellaan kekottavaan
saunariiheen, jonka hatarain seinäin ja luukun kautta se tarkoin
saattoi silmälläpitää ja kuunnella mahdollisia yökulkijoita. Ei noita
kulkijoita liioin lipunut päivänaikaan, kuinka niitä siis olisi yltänyt
yöksikään tässä harvasti asutussa korvessa? Mutta virka
ennenkaikkea ja Ryysyrannan kunnia! Vekkua kotakeiton äitelä
tuoksu hiukan ärsytti, ellosti. Mutta se oli hyväin ihmisten asia —
hän, Vekku, oli vain halpa palvelija korkeammasta käskystä.
Keittäköön rakas Ryysy-Jooseppi vaikka kuusenjuurta, se oli hänen
yksityisasiansa!
Olipa, olipa tarkkaa hommaa tuo maaviinan keitto. Ei siinä saanut
riehua nokitonttuna, tervakoprana niinkuin tervahaudalla, vaan piti
oikein pestä kätensäkin lipeällä.

— Pese sinäkin kätesi, Aapeli! komensi isä poikaansa. — Ämmä,


annahhan riepu.

Ja honka paloi paukkuen ja muuripata porisi kodikkaasti ja


tulenloimo ilkamoi pitkin mustia seiniä — ja väkevä oli mäskin
löyhkä.

Siinä punertavassa lieskan hohteessa näytti Ryysyrannan Jooseppi


vuorenpeikolta, joka käärityin hihoin ikäänkuin uhmasi uhrata
kultasarvisen tunturipukin pimeän yön haltijoille.

Hän katseli asiantuntevasti, nykeröä nenäänsä nyrpistäen,


ympärilleen kaikkia vehkeitä, putkia, röörejä ja tisleeraustorvia,
hämmenteli pitkällä puikolla, haisteli ja kuunteli ja pisti joskus
sormensa erinäisiin astioihin. Hänen naamaansa oli pölähtänyt
valkoista ruisjauhoa. Joskus hän jo kahvikupilla Iipasi annoksen,
puhalteli tärkeän näköisenä kuin kemisti, jäähdytteli kodan ovella,
tarkasti väriä ja kirkkautta, ja vihdoin mäiskäsi suuhunsa.

— Tuloo miestä väkevämpää! hän tuumailee ylpeästi.

— Keitettiin tuota ennen Pyhälässäi viinaa, pälpättää ämmä.

— Lääkkeeksikö isä keittää? kysyy Aapeli.

— Lääkkeeksipä hyvinkin! kimahtaa Jooseppi merkitsevästi. —


Vaan muistakkin Aapeli, jotta et hiisku kellenkään kuolevaiselle. Et
toisillekaan lapsille.
— En minä sano! lupaa poika, jota jännittää asian salaperäisyys.

Jännitettynä häärii Jooseppi isäkin joka hetki kuin tulisilla hiilillä,


hän on yhtaikaa peloissaan ja tolkussaan, ja ajattelee että tällaista
se mahtaa olla sotasankarinkin sieluntila niissä maailman rintamain
juoksuhaudoissa — yöllä vahditaan lumikuopissa, tulet
Ieiskahtelevat; jos pistää päänsä näkyviin, niin pamahtaa vihollisen
pommi ja — pää pois, pää pois, miekkonen. Pää pois, jos poliisi
Pirhonenkin nyt yllättäisi itse teossa!

Se se vasta olisi shrapnelli…

Tunnit ne vierivät ja tehdas on käynnissä, se porisee ja


haiskahtaa, sihisee ja tislaa, ja milloin käy neste läpi kuuman, milloin
jääkylmän putken — koivunhiiliäkin tarvitaan — ja lopuksi tirisee
viimeistelty väkimehu suureen tiiviiseen astiaan, josta se
ammennetaan suppilon läpi pulloihin, joita seisoo rivissä toinen
toisensa takana kodan pimeimmässä sopessa.

— Saat sinä ämmä jo mennä levolle, lausuu mestari


anoppimuorilleen — nuo vanhan kansan vaimoihmiset ne aina
tietävät taikoja näissä hommissa ja siksi Jooseppi ämmää on
vaivannut. — Haluatko ryypyn, Retriika?

— Ka anna!

Aapeli poikaa naurattaa, kun ämmä kulahuttaa kulkkuunsa,


muikistelee suutaan ja sylkeekin, mutta pärskäytettyään
aivastuksensa kaappaa sisukas ämmä toisenkin kulauksen ja
kakisteltuaan kaulaansa sanoa kumauttaa:

— Maku on! Maku!


Mestari Jooseppi vastaa:

— Maku siinä juuttaassa kyllä oisi tavallinen, kun vain saisi


vinkkelin vihat poikkeen… piessan peukaloko hänessä pitelöö, kun
tuppaa juoksuttamaan harmaata sinukkaa sekaan? Kirkasta ja
väkövää se keittää käski!

— Kirkasta ja väkövää siitä lopulla laarautuukin, ennusti ämmä,


pyyhkäsi kämmenensä säkki-esiliinaan ja palasi pirttiin.

Isä Jooseppi ja poika Aapeli nyt kahteen pekkaan hoitelevat


maanalaista masinaa, tuli palaa lekottelee ja pata porisee.
Jäähdytyssaavi höyryää kuin koski pakkasessa. On jo sivu puolesta
yöstä…

Eivät monta sanaa toisilleen virka isä ja mökinpoika, ja hiukan


kaamealta alkaa tuntua koko huusholli, vähän unettaakin, mutta työ
on tehtävä loppuun asti, juuri tänä yönä kaikki on saatava valmiiksi,
monet yöt tässä jo on vapriikia valvateltukin, esitöitä ja
eksperimenttejä tehty…

Pul-pul-pul! pani pontikka, kun pulloihin putosi.

Puita padan alle ei enää lisätä, mutta valtavana hehkuu hiilos.


Hiljaisuus… sydänyön syvät tunnelmat. Pul-pul-pul! Mitä on ihmisen
elämä? Miksi sama aine, minkä yhteiskunta määrää saatavaksi
apteekista keskellä Jumalan kirkasta päivää, muuttuu kirotuksi, kun
sitä korven köyhä yön pimeydessä pienten lastensa pelastamiseksi
kuolemasta, oman kunniansa uhalla valmistaa? Pul-pul-pul! Tänäkin
yönä jossakin siellä pääkaupungin kivipalatsissa hännystakkiset
herrat ja silkissä sihisevät naiset kilistävät kirkkaita, väkeväsisältöisiä
kristallimaljojaan huudellen eläköötä isänmaalle ja köyhälle Suomelle
— eikä heidän iloaan kukaan häiritse, ei heidän päihdyttäviä
juomiaan maahan kaada eikä heitä itsiään putkaan vie, vaikka
monen jalat kaduilla horjuvat, mutta täällä kaukana korpiyön
pimeydessä tuo »köyhä Suomi» huokailee häpeän vaiheilla ja saa
joka hetki peljätä, milloin hänen kimppuunsa hyökätään. Missä silloin
on oikeus? Pul-pul-pul! pani pontikka putoillen erikokoisiin pulloihin,
joihin Aapeli poika pisteli vanhoja, mustuneita korkkeja.

He eivät puhuneet mitään. Yhtäkkiä he häpsähtivät ja kuulivat


koiran kiihkeätä haukuntaa, haukku tuli kovaa vauhtia suoraa kotaa
kohti niin että sekä isä että poika tyrmistyivät, mutta samassa
kaikkosi ääni kodan taitse pellolle ja kuului omituista räksytystä ja
kahinaa. Isä Jooseppi virkahti, kauha kourassa:

— Kylläpä säikäytti. Ihan veret seisautti. Minä jo ihan luulin…

— Mikä se oli, isä?

— Kettua Vekku ajoi…

— Saat sinä, Aapeli rukka, jo mennä nukkumaan. Tulen minä jo


toimeen yksinkin.

Kalpeaposkinen, solakka Aapeli läksi pirttiin, ensin kuitenkin


kuulostaen ketunajoa. Takaisin pinkasi metsästä Vekku läähättäen
kovasti ja nuolasi kuumalla kielellä Aapelin kättä sekä killisti kiiluvin
silmin poikaan. Käväsi haistamassa, vieläkö isäntä jäi kotaan, ja
surkeasti vinkuen juoksi taas vahtipaikalleen.

Ennen päivän kajoa puhkesi lumimyrsky. Tuuli ulvoi kodan


nurkissa, hiilihanko kaatui puuskasta kolahtaen ja särki pienen
täysinäisen pullon. Silloin Jooseppi heittäysi suulleen mustalle

You might also like