The fourth draft of the book is now available. This version contains almost all the the review feedback received so far and has been edited through the final chapter. This draft does not yet include an index, but is otherwise close to being finished.
The new draft, named TLCL-09.11.pdf, is available here.
Enjoy!
Thursday, November 19, 2009
Saturday, October 3, 2009
The Linux Command Line - Third Draft Now Available
The third draft is now available. This version features reformatted and captioned tables, some of the changes suggested by the review team (more to follow), and a number of small additions. It also includes the edited versions of the first 18 chapters.
If you are working on the review, please switch to this version. The new draft, named TLCL-09.10.pdf, is available here.
Thanks for your help!
If you are working on the review, please switch to this version. The new draft, named TLCL-09.10.pdf, is available here.
Thanks for your help!
Friday, August 14, 2009
The Linux Command Line - Second Draft Now Available
Hi Everyone,
I just posted the second draft of my book. This incorporates items from my "to do" list. It does not yet include any changes from the review team. Reviewers may switch to this version if they wish (just indicate that you are reviewing version 09.08 of the book) but may also continue with the first draft. The changes in this version are not extensive but it should read a little better. A few new items were added, and the table of contents now provides links to the individual chapters making navigation somewhat easier. Enjoy!
The new PDF is named TLCL-09.08.pdf and is available here.
I just posted the second draft of my book. This incorporates items from my "to do" list. It does not yet include any changes from the review team. Reviewers may switch to this version if they wish (just indicate that you are reviewing version 09.08 of the book) but may also continue with the first draft. The changes in this version are not extensive but it should read a little better. A few new items were added, and the table of contents now provides links to the individual chapters making navigation somewhat easier. Enjoy!
The new PDF is named TLCL-09.08.pdf and is available here.
Wednesday, July 22, 2009
I'm Looking For Reviewers
Sorry about my long absence, but as you will see, I have an excuse:
Hello All,
I have just finished the first draft of a book I'm writing titled, "The Linux Command Line" to be released under a Creative Commons license. With the initial writing completed, it's time for some editing and review. That means I'm looking for folks willing to perform some reviewing. In particular, I need technical reviewers who can gently point out my technical and historical errors, and I need less experienced users who can find areas where my explanations are unclear. Don't worry about grammar and spelling and such, I have a "real" editor for that. At this stage I need gurus and sample users to test this thing.
The book is fairly long (about 475 pages) so a good review will take some time and effort on the part of any volunteers. If you make a serious contribution, I will add your name to the list of contributors in the "Acknowledgments" section of the first chapter. Don't laugh, that's all I got for doing a technical review on O'Reilly's "Bash Cookbook."
Unlike Bash Cookbook however, my book will be freely distributable in PDF format but I am reserving the right to sell printed versions.
Please feel free to take a look at the draft. It can be downloaded from my Sourceforge site at:
http://downloads.sourceforge.net/sourceforge/linuxcommand/TLCL-09.07.pdf?use_mirror=master
If you decide that you'd like to help out with the review, let me know and I will provide further details.
Many thanks!
Hello All,
I have just finished the first draft of a book I'm writing titled, "The Linux Command Line" to be released under a Creative Commons license. With the initial writing completed, it's time for some editing and review. That means I'm looking for folks willing to perform some reviewing. In particular, I need technical reviewers who can gently point out my technical and historical errors, and I need less experienced users who can find areas where my explanations are unclear. Don't worry about grammar and spelling and such, I have a "real" editor for that. At this stage I need gurus and sample users to test this thing.
The book is fairly long (about 475 pages) so a good review will take some time and effort on the part of any volunteers. If you make a serious contribution, I will add your name to the list of contributors in the "Acknowledgments" section of the first chapter. Don't laugh, that's all I got for doing a technical review on O'Reilly's "Bash Cookbook."
Unlike Bash Cookbook however, my book will be freely distributable in PDF format but I am reserving the right to sell printed versions.
Please feel free to take a look at the draft. It can be downloaded from my Sourceforge site at:
http://downloads.sourceforge.net/sourceforge/linuxcommand/TLCL-09.07.pdf?use_mirror=master
If you decide that you'd like to help out with the review, let me know and I will provide further details.
Many thanks!
Thursday, April 9, 2009
"We're Linux" Video Finalists
The Linux Foundation has announced the finalists in their "We're Linux" competition. While I consider all the entries rather weak, my favorite is this one:
Project: Building An All-Text Linux Workstation - Part 7
Today, we will finish up with printing by taking a look at the command line tools provided by CUPS.
CUPS supports two different families of printer tools. The first, Berkley or LPD comes from the Berkley Software Distribution (BSD) version of Unix and the second is SysV from the System V version of Unix. Both families include comparable functionality, so choosing one over the other is really a matter of personal taste.
Setting A Default Printer
A printer can be set as the default printer for the system. This will make using the command line print tools easier. To do this we can either use the web-based interface to CUPS at http://localhost:631 or we can use the following command:
lpadmin -d printer_name
where printer_name is the name of a print queue we defined in Part 6 of the series.
Sending A Job To The Printer (Berkley-Style)
The lpr program is used to send a job to the printer. It can accept standard input or file name arguments. One of the neat things about CUPS is that it can accept many kinds of data formats and can (within reason) figure out how to print them. Typical formats include PostScript, PDF, text, and images such as JPEG.
Here we will print a directory listing in three column format to the default printer:
ls /usr/bin | pr -3 | lpr
To use a different printer, append -P printer_name to the lpr command. To see a list of available printers:
lpstat -a
Sending A Job To The Printer (SysV-Style)
The SysV print system uses the lp command to send jobs to the printer. It can be used just as lpr in our earlier example:
ls /usr/bin | pr -3 | lp
however, lp has a different set of options. For example to specify a printer, the -d (for destination) option is used. lp also supports many options for page formatting and printer control not found with the lpr command.
Examining Print Job Status
While a print job is being printed, you may monitor its progress with the lpq command. This will display a list of all the jobs queued for printing. Each print job is assigned a job number that can be used with to control the job.
Terminating Print Jobs
Either the lprm (Berkley) or cancel (SysV) commands can be used to remove a job from a printer queue. While the two commands have different option sets, either command followed by a print job number will terminate the specified job.
Getting Help
The following man pages cover the CUPS printing commands
lp lpr lpq lprm lpstat lpoptions lpadmin cancel lpmove
In addition, CUPS provides excellent documentation of the printing system commands in the help section of the online interface to the CUPS server at:
http://localhost:631/help
Select the "Getting Started" link and the "Command Line Printing And Options" topic.
A Follow Up On Part 4
Midnight Commander allows direct access to its file viewer and built in text editor. The mcview command can be used to view files and the mcedit command can be used to invoke the editor.
CUPS supports two different families of printer tools. The first, Berkley or LPD comes from the Berkley Software Distribution (BSD) version of Unix and the second is SysV from the System V version of Unix. Both families include comparable functionality, so choosing one over the other is really a matter of personal taste.
Setting A Default Printer
A printer can be set as the default printer for the system. This will make using the command line print tools easier. To do this we can either use the web-based interface to CUPS at http://localhost:631 or we can use the following command:
lpadmin -d printer_name
where printer_name is the name of a print queue we defined in Part 6 of the series.
Sending A Job To The Printer (Berkley-Style)
The lpr program is used to send a job to the printer. It can accept standard input or file name arguments. One of the neat things about CUPS is that it can accept many kinds of data formats and can (within reason) figure out how to print them. Typical formats include PostScript, PDF, text, and images such as JPEG.
Here we will print a directory listing in three column format to the default printer:
ls /usr/bin | pr -3 | lpr
To use a different printer, append -P printer_name to the lpr command. To see a list of available printers:
lpstat -a
Sending A Job To The Printer (SysV-Style)
The SysV print system uses the lp command to send jobs to the printer. It can be used just as lpr in our earlier example:
ls /usr/bin | pr -3 | lp
however, lp has a different set of options. For example to specify a printer, the -d (for destination) option is used. lp also supports many options for page formatting and printer control not found with the lpr command.
Examining Print Job Status
While a print job is being printed, you may monitor its progress with the lpq command. This will display a list of all the jobs queued for printing. Each print job is assigned a job number that can be used with to control the job.
Terminating Print Jobs
Either the lprm (Berkley) or cancel (SysV) commands can be used to remove a job from a printer queue. While the two commands have different option sets, either command followed by a print job number will terminate the specified job.
Getting Help
The following man pages cover the CUPS printing commands
lp lpr lpq lprm lpstat lpoptions lpadmin cancel lpmove
In addition, CUPS provides excellent documentation of the printing system commands in the help section of the online interface to the CUPS server at:
http://localhost:631/help
Select the "Getting Started" link and the "Command Line Printing And Options" topic.
A Follow Up On Part 4
Midnight Commander allows direct access to its file viewer and built in text editor. The mcview command can be used to view files and the mcedit command can be used to invoke the editor.
Saturday, April 4, 2009
LinuxCommand.org (And Others) Under DDoS Attack
Since Thursday my domain registrar, register.com, has been under heavy distributed denial of service (DDoS) attack. This has, at times, made all or part of LinuxCommand.org unavailable. Here is the latest news:
Dear William,
Earlier today we communicated to you we were experiencing intermittent
service disruptions as a result of a distributed denial of service
(DDoS) attack – an intentionally malicious flooding of our systems
from various points across the internet.
We want to update you on where things stand.
Services have been restored for most of our customers including hosting
and email. However for some of our customers, services are not fully
restored. We know this is unacceptable.
We are using all available means to restore services to every one of
our customers and halt this criminal attack on our business and our
customers’ business. We are working round the clock to make that happen.
We are committed to updating you in as timely manner as possible,
please check your inbox or our website for additional updates.
Thank you for your patience.
Larry Kutscher
Chief Executive Officer
Register.com
Friday, April 3, 2009
Tip: Redirecting Multiple Command Outputs
Let's imagine a simple script:
Make A Separate Script
script1:
Write A Shell Function
We could take the basic idea of the separate script and incorporate it into a single script by making script1 into a shell function:
Make A List
We could construct a compound command using {} characters to enclose a list of commands:
Launch A Subshell
Finally, we could do this:
Enjoy!
#!/bin/bashSimple enough. It produces three lines of output:
echo 1
echo 2
echo 3
1Now let's say we wanted to redirect the output of the commands to a file named foo.txt. We could change the script as follows:
2
3
#!/bin/bashAgain, pretty straightforward, but what if we wanted to pipe the output of all three echo commands into less? We would soon discover that this won't work:
F=foo.txt
echo 1 >> $F
echo 2 >> $F
echo 3 >> $F
#!/bin/bashThis causes less to be executed three times. Not what we want. We want a single instance of less to input the results of all three echo commands. There are four approaches to this:
F=foo.txt
echo 1 | less
echo 2 | less
echo 3 | less
Make A Separate Script
script1:
#!/bin/bashscript2:
echo 1
echo 2
echo 3
#!/bin/bashBy running script2, script1 is also executed and its output is piped into less. This works but it's a little clumsy.
script1 | less
Write A Shell Function
We could take the basic idea of the separate script and incorporate it into a single script by making script1 into a shell function:
#!/bin/bashThis works too, but it's not the simplest way to do it.
# shell function
run_echoes () {
echo 1
echo 2
echo 3
}
# call shell function and redirect
run_echoes | less
Make A List
We could construct a compound command using {} characters to enclose a list of commands:
#!/bin/bashThe {} characters allow us to group the three commands into a single output stream. Note that the spaces between the {} and the commands, as well as the trailing semicolon after the third echo, are required.
{ echo 1; echo 2; echo 3; } | less
Launch A Subshell
Finally, we could do this:
#!/bin/bashPlacing the list inside () creates a subshell, or another copy of bash and it executes the commands. This has the same result as enclosing the list of commands within {} but with more overhead. The real reason we would want to do this is if, instead of just redirecting the output, we wanted to put all three commands in the background:
(echo 1; echo 2; echo 3) | less
#!/bin/bashThis doesn't make much sense for our echo commands (they execute too quickly to bother with), but if we have commands that take a long time to run, this technique can come in handy.
(echo 1; echo 2; echo 3) > foo.txt &
Enjoy!
Friday, March 27, 2009
Project: Building An All-Text Linux Workstation - Part 6
In this installment, we will tackle printing. If you recall from the second installment when we installed Debian on the system, we selected the "print server" group of packages to included with our installation. This installed CUPS (Common Unix Printing System) and related programs. This set of packages allows the system to print local print jobs and (if configured to do so) act as a print server to other systems on the local network.
Installing cups-pdf
One of the cool things we can do is install the cups-pdf package which supports a virtual printer that creates PDF files in lieu of actual printed output. After installation, we will take advantage of the package to demonstrate how to configure CUPS. Using apt-get we can install the package this way:
sudo apt-get install cups-pdf
Configuring CUPS
CUPS, by default, makes available a web-based configuration system. To access it, we will use w3m:
w3m http://localhost:631
which will open the web page on the local network interface using port 631. After the page opens, we will get a screen like this:

With this interface, you can configure:
At this point we are done. You may move to the "Home" link at the top of the page to repeat the process to add more printers.
That's all for this installment. Next time we will look at some printer commands that we can use with our new printing capability.
Installing cups-pdf
One of the cool things we can do is install the cups-pdf package which supports a virtual printer that creates PDF files in lieu of actual printed output. After installation, we will take advantage of the package to demonstrate how to configure CUPS. Using apt-get we can install the package this way:
sudo apt-get install cups-pdf
Configuring CUPS
CUPS, by default, makes available a web-based configuration system. To access it, we will use w3m:
w3m http://localhost:631
which will open the web page on the local network interface using port 631. After the page opens, we will get a screen like this:

With this interface, you can configure:
- Local USB, parallel port and virtual printers.
- Remote IPP (Internet Printing Protocol) printers. Cups will find them automatically if your network allows it.
- Remote SMB (Windows shared) printers.
- Using the tab key, move the cursor to the link labeled "Add Printer" and press enter.
- We will see a new page with some input fields. They are delimited with square bracket characters ([]). To enter data into the fields, move the cursor to the field and press enter. A text prompt will appear at the bottom of the screen.
- In the first field, "Name:" we will enter the name of the printer to be added. This name is like a file name and should be one word with no spaces. We will call our new printer, PDF. Type the letters PDF at the text prompt and press enter.
- Press the tab key to move to the next field, "Location:" and enter "localhost" using the text prompt.
- Press the tab key to move to the next field, "Description:" and enter "CUPS-PDF Virtual Printer."
- Press the tab key to move to the link labeled "Continue" and press enter. After a few seconds, we will see a new screen with a pull-down box of printer devices. Using the tab key move the cursor to the field labeled "Device:" and press enter. The contents of the list will appear.
- Using the arrow keys, select the entry "CUPS-PDF (Virtual PDF Printer)" and press enter.
- Press the tab key to move to the "Continue" link. Press enter.
- After a few seconds, a new screen will appear, again with a pull-down box. This box is for selecting drivers. The CUPS-PDF driver does not really need this, so open the box labeled "Make:" and select "Generic" and press enter.
- Move to the "Contiune" link and press enter.
- The next screen will appear and we can skip over the fields (they should already be correct.) Move the cursor to the link labeled "Add Printer" and press enter.
- You will briefly see a screen announcing that the printer has been successfully added. It will be followed by a page of printer options. If you need to change any, such as default paper size, do so now. When done, move to the link labeled "Set Printer Options" and press enter.
- The final screen contains a summary of the printer setup and contains a list of links for controlling the printer including printing a test page.
At this point we are done. You may move to the "Home" link at the top of the page to repeat the process to add more printers.
That's all for this installment. Next time we will look at some printer commands that we can use with our new printing capability.
Subscribe to:
Posts (Atom)
