Calendar Programs
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:
which cal
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.
Today’s modular x86 servers are compute-centric, designed as a least common denominator to support a wide range of IT workloads. Those generic, virtualized IT workloads have much different resource optimization requirements than hyperscale and cloud applications. They have resulted in a “one size fits all” enterprise IT architecture that is not optimized for a specific set of IT workloads, and especially not emerging hyperscale workloads, such as web applications, big data, and object storage. In this report, you will learn how shifting the focus from traditional compute-centric IT architectures to an innovative disaggregated fabric-based architecture can optimize and scale your data center.
Sponsored by AMD
Built-in forensics, incident response, and security with Red Hat Enterprise Linux 6
Every security policy provides guidance and requirements for ensuring adequate protection of information and data, as well as high-level technical and administrative security requirements for a system in a given environment. Traditionally, providing security for a system focuses on the confidentiality of the information on it. However, protecting the data integrity and system and data availability is just as important. For example, when processing United States intelligence information, there are three attributes that require protection: confidentiality, integrity, and availability.
Learn more about catching the bad guy in this free white paper.
Sponsored by DLT Solutions
| Making Linux and Android Get Along (It's Not as Hard as It Sounds) | May 16, 2013 |
| Drupal Is a Framework: Why Everyone Needs to Understand This | May 15, 2013 |
| Home, My Backup Data Center | May 13, 2013 |
| Non-Linux FOSS: Seashore | May 10, 2013 |
| Trying to Tame the Tablet | May 08, 2013 |
| Dart: a New Web Programming Experience | May 07, 2013 |
- RSS Feeds
- New Products
- Making Linux and Android Get Along (It's Not as Hard as It Sounds)
- Drupal Is a Framework: Why Everyone Needs to Understand This
- A Topic for Discussion - Open Source Feature-Richness?
- Home, My Backup Data Center
- Developer Poll
- May 2013 Issue of Linux Journal: Raspberry Pi
- Dart: a New Web Programming Experience
- What's the tweeting protocol?
Enter to Win an Adafruit Prototyping Pi Plate Kit for Raspberry Pi

It's Raspberry Pi month at Linux Journal. Each week in May, Adafruit will be giving away a Pi-related prize to a lucky, randomly drawn LJ reader. Winners will be announced weekly.
Fill out the fields below to enter to win this week's prize-- a Prototyping Pi Plate Kit for Raspberry Pi.
Congratulations to our winners so far:
- 5-8-13, Pi Starter Pack: Jack Davis
- 5-15-13, Pi Model B 512MB RAM: Patrick Dunn
- Next winner announced on 5-21-13!
Free Webinar: Linux Backup and Recovery
Most companies incorporate backup procedures for critical data, which can be restored quickly if a loss occurs. However, fewer companies are prepared for catastrophic system failures, in which they lose all data, the entire operating system, applications, settings, patches and more, reducing their system(s) to “bare metal.” After all, before data can be restored to a system, there must be a system to restore it to.
In this one hour webinar, learn how to enhance your existing backup strategies for better disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible bare-metal recovery solution for UNIX and Linux systems.




42 min 14 sec ago
2 hours 16 min ago
3 hours 52 min ago
5 hours 50 min ago
6 hours 7 min ago
6 hours 37 min ago
6 hours 38 min ago
6 hours 38 min ago
9 hours 39 min ago
18 hours 5 min ago