I am obsessive about keeping track of things. I used to get a free calendar each year from the local phone company. It was the perfect interface for all my appointments—a slim, spiral-bound calendar that I kept on my desktop and used to record any upcoming appointments, as well as mark the birthdays of my friends and family. Every year around the holidays I'd get a new calendar and dutifully re-transcribe the birthdays and other annual appointments into the new calendar.
A few years ago, the phone company decided to stop sending out these free calendars, but fortunately I had found a better way. By using cal and calendar programs, I can leave all my old analog date books behind.
Different versions of these utilities exist. Originally part of the BSD utilities, a GNU version called gcal with some advanced features has been released. I will focus this tutorial on the original BSD programs since they're widely available, as well as mention some other related programs at the end of the article.
You'll first want to find out if you have these programs installed on your system by typing:
If which returns a full pathname of the cal program, it is installed. If instead you are immediately returned to a shell prompt, then you will need to obtain and install this program. You can use which again to see if you have the calendar program installed as well; they are different programs and you will need them both.
If you use the Debian distribution of Linux, both programs are available in the bsdmainutils package. Otherwise, consult your distribution, or search the Linux Software Map at http://www.linuxresources.com/apps.html.
calendar is a basic reminder service. It reads a file called calendar in the current directory and prints lines which start with today's or tomorrow's dates. The calendar file is a text file that can be created and edited with any text editor.
This program is more powerful than it may seem at first. The general format for a calendar file entry is the month and day to the immediate left, followed by a tab and the reminder text. The month and day can be skipped—each line beginning with a tab carries the same month and day value as the line preceding it.
There is quite a varied syntax for the month and day. To demonstrate, let's make up a sample calendar file and look at it line by line:
10/31 Johnny's Halloween party Friday Garbage day Nov. 20 Dentist appointment, 9:30am 20/11 Mandatory staff meeting, 10:00am January Happy new year! Have you made your resolutions yet? 18 * Rent's due
Let's imagine that today is Friday, October 31, 1997. At the shell prompt, type:
calendarWith the sample calendar file in your current directory, you will see this output:
10/31 Johnny's Halloween party Friday Garbage dayThe 10/31 in the first line tells calendar to print that line if it is October 31 (or the day before), and the Friday in the second line tells it to print (you guessed it) every Friday.
As you can see, you can also use an abbreviated form of writing out the month, as in the example line starting with Nov. 20. Now, on the fourth line, the mm/dd format is reversed—in this case, calendar figures that out and will print it on the 20th day of November. It's probably not a good idea to keep records in this format. If you were to write May 10th as 10/5, calendar will assume you mean the U.S. convention of mm/dd and print that entry on October 5th.
If you have just the name of a month in the first column, calendar will print the entry on the first of that month. If you eliminate that column altogether by inserting a tab and some reminder text, calendar will print the line on the date of the preceding entry. Thus, on New Year's Day, our example calendar will output:
January Happy new year! Have you made your resolutions yet?
Finally, substituting an asterisk for the month will print that entry on the stated date each month. In our example, a reminder to pay the rent will be displayed on the eighteenth of each month.
Since it is pre-processed by cpp, the C preprocessor, calendar recognizes include files. This allows you to keep and use special lists, such as a personal list of birthdays, without cluttering up your main calendar file. The calendar program comes with a set of such files in /usr/lib/calendar/ to get you started:
calendar.birthday: birth and death dates of many famous historical figures
calendar.computer: important dates in the history of computing
calendar.holiday: known (and not-so-well-known) holidays
calendar.music: important dates in music, especially mainstream rock-n-roll
calendar.christian: Christian holidays
calendar.history: many historical events
calendar.judaic: Jewish holidays
calendar.usholiday: standard US holidays
When you use an include statement, calendar first searches the directory it was called in, and then looks in /usr/lib/calendar/. Including this line in your file,
#include <calendar.usholiday>means calendar will first look in the current directory for such a file. If not present, it will then check /usr/lib/calendar/, and if the appropriate file is found, include it.
One of the functions of my old paper calendar was to record and keep a record of important events in my life. I was able to reproduce this function by keeping this information in files named calendar.yyyy, such as calendar.1997. Looking through the files in order gives me a chronological record of major events in my life, and if I ever wanted to see what I was doing around today's date in a certain year or years, I could add include statements for the appropriate calendar.yyyy files in my calendar file.
Fast/Flexible Linux OS Recovery
On Demand Now
In this live one-hour webinar, learn how to enhance your existing backup strategies for complete disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible full-system recovery solution for UNIX and Linux systems.
Join Linux Journal's Shawn Powers and David Huffman, President/CEO, Storix, Inc.
Free to Linux Journal readers.Register Now!
- Download "Linux Management with Red Hat Satellite: Measuring Business Impact and ROI"
- Client-Side Performance
- Tibbo Technology's Tibbo Project System
- Sony Settles in Linux Battle
- Peppermint 7 Released
- Libarchive Security Flaw Discovered
- Maru OS Brings Debian to Your Phone
- The Giant Zero, Part 0.x
- Profiles and RC Files
- Git 2.9 Released
With all the industry talk about the benefits of Linux on Power and all the performance advantages offered by its open architecture, you may be considering a move in that direction. If you are thinking about analytics, big data and cloud computing, you would be right to evaluate Power. The idea of using commodity x86 hardware and replacing it every three years is an outdated cost model. It doesn’t consider the total cost of ownership, and it doesn’t consider the advantage of real processing power, high-availability and multithreading like a demon.
This ebook takes a look at some of the practical applications of the Linux on Power platform and ways you might bring all the performance power of this open architecture to bear for your organization. There are no smoke and mirrors here—just hard, cold, empirical evidence provided by independent sources. I also consider some innovative ways Linux on Power will be used in the future.Get the Guide