显示日历信息的命令 cal 和 ncal

2013-07-19
7分钟阅读时长

  Linux 里内置两个用来显示和校准日历的命令 cal 和 ncal。一旦你习惯使用它们,你会发现使用命令很多时候都比你运用鼠标在 GUI 的日历里查看要来的更迅速和方便。命令行下,有许多参数,这些参数能完成您所需要的所有关于日历的需求,目前来说,我还没有发现我需要显示的一种日历的需求是它没有的,哈。

  下面,我就来和大家一起学习学习这些命令,这些命令我都在 Ubuntu Linux 日常使用:

问1、如何显示当前月份的信息

答:直接使用 cal 命令就可以,不需要添加任何参数

$ cal
     July 2013        
Su Mo Tu We Th Fr Sa  
    1  2  3  4  5  6  
 7  8  9 10 11 12 13  
14 15 16 **17** 18 19 20  
21 22 23 24 25 26 27  
28 29 30 31

  当然,您使用 ncal 也会得到同样的效果:

$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 **17** 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27

  您可以看到整个当前月份的日历,当天日期是高亮显示的,您可以使用 -h 参数来关闭高亮。

问2、如何竖向排列日期

答:使用 ncal 命令同时添加 -J 参数

$ ncal -J
    July 2013         
Su  1  8 15 22 29   
Mo  2  9 16 23 30   
Tu  3 10 17 24 31   
We  **4** 11 18 25      
Th  5 12 19 26      
Fr  6 13 20 27      
Sa  7 14 21 28

问3、想查询复活节日期

答:使用 ncal 命令添加 -e 参数

$ ncal -e
31 March 2013

问4、怎么显示 Julian 日历

答:使用 cal 命令添加 -j 参数

$ cal -j
         July 2013           
 Su  Mo  Tu  We  Th  Fr  Sa  
    182 183 184 185 186 187  
188 189 190 191 192 193 194  
195 196 197 **198** 199 200 201  
202 203 204 205 206 207 208  
209 210 211 212

问5、如何显示指定月份日历

答:使用 cal 命令添加 -m 参数和月份

$ cal -m1
    January 2013      
Su Mo Tu We Th Fr Sa  
       1  2  3  4  5  
 6  7  8  9 10 11 12  
13 14 15 16 17 18 19  
20 21 22 23 24 25 26  
27 28 29 30 31

  默认情况下,您添加的 -m参数和月份为当年的月份,如果您希望看到指定的某个年的月份,您可以在后面添加四位数字的年份。

$ cal -m1 1999
    January 1999      
Su Mo Tu We Th Fr Sa  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31

问6、如何同时显示前一个月本月和下一个月三个月的日历

答:使用 cal 命令添加 -3 参数

$ cal -3
     June 2013             July 2013            August 2013       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                   1      1  2  3  4  5  6               1  2  3  
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10  
 9 10 11 12 13 14 15  14 15 16 **17** 18 19 20  11 12 13 14 15 16 17  
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24  
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30 31  
30

  同样道理,您可以查看任意三个月的日历:

$ cal -3 -m3 1984
   February 1984           March 1984            April 1984       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4               1  2  3   1  2  3  4  5  6  7  
 5  6  7  8  9 10 11   4  5  6  7  8  9 10   8  9 10 11 12 13 14  
12 13 14 15 16 17 18  11 12 13 14 15 16 17  15 16 17 18 19 20 21  
19 20 21 22 23 24 25  18 19 20 21 22 23 24  22 23 24 25 26 27 28  
26 27 28 29           25 26 27 28 29 30 31  29 30

问7、如何显示orthodox Easter 的信息

答:使用 ncal 命令添加 -o 参数

$ ncal -o
 5 May 2013

问8、如何显示国家代码

答:使用 ncal 命令添加 -p 参数

$ ncal -p
 AL Albania        1912-11-30      IT Italy          1582-10-04
 AT Austria        1583-10-05      JP Japan          1918-12-18
 AU Australia      1752-09-02      LI Lithuania      1918-02-01
 BE Belgium        1582-12-14      LN Latin          9999-05-31
 BG Bulgaria       1916-03-18      LU Luxembourg     1582-12-14
 CA Canada         1752-09-02      LV Latvia         1918-02-01
 CH Switzerland    1655-02-28      NL Netherlands    1582-12-14
 CN China          1911-12-18      NO Norway         1700-02-18
 CZ Czech Republic 1584-01-06      PL Poland         1582-10-04
 DE Germany        1700-02-18      PT Portugal       1582-10-04
 DK Denmark        1700-02-18      RO Romania        1919-03-31
 ES Spain          1582-10-04      RU Russia         1918-01-31
 FI Finland        1753-02-17      SI Slovenia       1919-03-04
 FR France         1582-12-09      SW Sweden         1753-02-17
 GB United Kingdom 1752-09-02      TR Turkey         1926-12-18
 GR Greece         1924-03-09     *US United States  1752-09-02
 HU Hungary        1587-10-21      YU Yugoslavia     1919-03-04
 IS Iceland        1700-11-16

问9、如何按自然月显示周信息

答:使用 ncal 命令添加 -w 参数

$ ncal -w
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      
   26 27 28 29 30

  最下面的一行是下个月的信息。

问10、怎么一下查看全年的日历

答:使用 ncal 命令添加 -y 参数和 四位数的年份

$ ncal -y 2010
                                  2010
    January           February          March             April             
Su     3 10 17 24 31     7 14 21 28        7 14 21 28        4 11 18 25   
Mo     4 11 18 25     1  8 15 22        1  8 15 22 29        5 12 19 26   
Tu     5 12 19 26     2  9 16 23        2  9 16 23 30        6 13 20 27   
We     6 13 20 27     3 10 17 24        3 10 17 24 31        7 14 21 28   
Th     7 14 21 28     4 11 18 25        4 11 18 25        1  8 15 22 29   
Fr  1  8 15 22 29     5 12 19 26        5 12 19 26        2  9 16 23 30   
Sa  2  9 16 23 30     6 13 20 27        6 13 20 27        3 10 17 24      

    May               June              July              August            
Su     2  9 16 23 30     6 13 20 27        4 11 18 25     1  8 15 22 29   
Mo     3 10 17 24 31     7 14 21 28        5 12 19 26     2  9 16 23 30   
Tu     4 11 18 25     1  8 15 22 29        6 13 20 27     3 10 17 24 31   
We     5 12 19 26     2  9 16 23 30        7 14 21 28     4 11 18 25      
Th     6 13 20 27     3 10 17 24        1  8 15 22 29     5 12 19 26      
Fr     7 14 21 28     4 11 18 25        2  9 16 23 30     6 13 20 27      
Sa  1  8 15 22 29     5 12 19 26        3 10 17 24 31     7 14 21 28      

    September         October           November          December          
Su     5 12 19 26        3 10 17 24 31     7 14 21 28        5 12 19 26   
Mo     6 13 20 27        4 11 18 25     1  8 15 22 29        6 13 20 27   
Tu     7 14 21 28        5 12 19 26     2  9 16 23 30        7 14 21 28   
We  1  8 15 22 29        6 13 20 27     3 10 17 24        1  8 15 22 29   
Th  2  9 16 23 30        7 14 21 28     4 11 18 25        2  9 16 23 30   
Fr  3 10 17 24        1  8 15 22 29     5 12 19 26        3 10 17 24 31   
Sa  4 11 18 25        2  9 16 23 30     6 13 20 27        4 11 18 25

问11、如何显示某个月和某个月前几个月和后几个月的日历

答:使用 cal 命令添加 -m -B -A 参数和月个数

$ cal -m4 -B2 -A2
   February 2013           March 2013            April 2013       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                1  2                  1  2      1  2  3  4  5  6  
 3  4  5  6  7  8  9   3  4  5  6  7  8  9   7  8  9 10 11 12 13  
10 11 12 13 14 15 16  10 11 12 13 14 15 16  14 15 16 17 18 19 20  
17 18 19 20 21 22 23  17 18 19 20 21 22 23  21 22 23 24 25 26 27  
24 25 26 27 28        24 25 26 27 28 29 30  28 29 30              
                      31                                          

      May 2013             June 2013        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4                     1  
 5  6  7  8  9 10 11   2  3  4  5  6  7  8  
12 13 14 15 16 17 18   9 10 11 12 13 14 15  
19 20 21 22 23 24 25  16 17 18 19 20 21 22  
26 27 28 29 30 31     23 24 25 26 27 28 29  
                      30

  显示结果上,您可以看出,我们想显示 4 月份和 4 月份前两个月和后两个月的日历。如果您想显示指定年份的日历同时在显示年份前后的几个月,那么直需要在添加 -y 参数和四位数的年份即可:

$ cal -y 2012 -B2 -A2
   November 2011         December 2011          January 2012      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
       1  2  3  4  5               1  2  3   1  2  3  4  5  6  7  
 6  7  8  9 10 11 12   4  5  6  7  8  9 10   8  9 10 11 12 13 14  
13 14 15 16 17 18 19  11 12 13 14 15 16 17  15 16 17 18 19 20 21  
20 21 22 23 24 25 26  18 19 20 21 22 23 24  22 23 24 25 26 27 28  
27 28 29 30           25 26 27 28 29 30 31  29 30 31              

   February 2012           March 2012            April 2012       
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4               1  2  3   1  2  3  4  5  6  7  
 5  6  7  8  9 10 11   4  5  6  7  8  9 10   8  9 10 11 12 13 14  
12 13 14 15 16 17 18  11 12 13 14 15 16 17  15 16 17 18 19 20 21  
19 20 21 22 23 24 25  18 19 20 21 22 23 24  22 23 24 25 26 27 28  
26 27 28 29           25 26 27 28 29 30 31  29 30                 

      May 2012             June 2012             July 2012        
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
       1  2  3  4  5                  1  2   1  2  3  4  5  6  7  
 6  7  8  9 10 11 12   3  4  5  6  7  8  9   8  9 10 11 12 13 14  
13 14 15 16 17 18 19  10 11 12 13 14 15 16  15 16 17 18 19 20 21  
20 21 22 23 24 25 26  17 18 19 20 21 22 23  22 23 24 25 26 27 28  
27 28 29 30 31        24 25 26 27 28 29 30  29 30 31              

    August 2012          September 2012         October 2012      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
          1  2  3  4                     1      1  2  3  4  5  6  
 5  6  7  8  9 10 11   2  3  4  5  6  7  8   7  8  9 10 11 12 13  
12 13 14 15 16 17 18   9 10 11 12 13 14 15  14 15 16 17 18 19 20  
19 20 21 22 23 24 25  16 17 18 19 20 21 22  21 22 23 24 25 26 27  
26 27 28 29 30 31     23 24 25 26 27 28 29  28 29 30 31           
                      30                                          

   November 2012         December 2012          January 2013      
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
             1  2  3                     1         1  2  3  4  5  
 4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12  
11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19  
18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26  
25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30 31        
                      30 31                                       

   February 2013      
Su Mo Tu We Th Fr Sa  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28

  从结果上我们看到,除了 2012 年整年外,我们还能看到 2011 年最后俩月和 2013 年前俩月的日历。

问12、如何让 ncal 命令显示成 cal 命令的结果

答:可以使用 -C 参数来完成这一点

$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      

$ cal
     July 2013        
Su Mo Tu We Th Fr Sa  
    1  2  3  4  5  6  
 7  8  9 10 11 12 13  
14 15 16 17 18 19 20  
21 22 23 24 25 26 27  
28 29 30 31           

$ ncal -C
     July 2013        
Su Mo Tu We Th Fr Sa  
    1  2  3  4  5  6  
 7  8  9 10 11 12 13  
14 15 16 17 18 19 20  
21 22 23 24 25 26 27  
28 29 30 31

  同样,你可以使用 -N 参数来让 cal 命令看起来和 ncal 一样:

$ cal
     July 2013        
Su Mo Tu We Th Fr Sa  
    1  2  3  4  5  6  
 7  8  9 10 11 12 13  
14 15 16 17 18 19 20  
21 22 23 24 25 26 27  
28 29 30 31           

$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      

$ cal -N
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 17 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27

问13、如何让日历显示成以周一为每周第一天的样子

答:使用 ncal 命令添加 -M 参数即可

$ ncal -M
    July 2013         
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 **17** 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      
Su  7 14 21 28

  还有一个 -S 参数,可以按周日为第一天来显示

问14、如何切换 ncal 命令为以前的显示方式

答:使用 ncal 命令添加 -b 参数

$ ncal
    July 2013         
Su     7 14 21 28   
Mo  1  8 15 22 29   
Tu  2  9 16 23 30   
We  3 10 **17** 24 31   
Th  4 11 18 25      
Fr  5 12 19 26      
Sa  6 13 20 27      

$ ncal -b
     July 2013        
Su Mo Tu We Th Fr Sa  
    1  2  3  4  5  6  
 7  8  9 10 11 12 13  
14 15 16 **17** 18 19 20  
21 22 23 24 25 26 27  
28 29 30 31

cal 和 ncal 命令的一些其他相关信息

  虽然我们可以查看这两个的命令的 man page 来得到更多的信息,不过在这里,我还有一些其他信息要告诉大家。需要指定年份的时候,我们需要四位数的年份。不是所有的参数都可以同时使用的,比如 -y, -3, -1 他们之间是冲突的,如果同时使用,后面的参数会覆盖掉前面的参数。

已同步至 linux的微博