如何从任何官方(本地或远程)存储库获取 Ubuntu 默认 /etc/crontab 文件的精确副本?

如何从任何官方(本地或远程)存储库获取 Ubuntu 默认 /etc/crontab 文件的精确副本?

长话短说:我在我的电脑上安装 Ubuntu 时意外删除了 64 位 Ubuntu 20.04 安装程序放入的默认内容/etc/crontab,所以现在我试图找出是否可以从 Ubuntu ISO 安装文件内部(例如“本地存储库”)或远程存储库ubuntu-20.04-amd64.iso(例如托管在 ubuntu.com 或类似的地方)获取此类文件的精确副本,以便我可以将此默认crontab文件放回原处/etc

我安装了 Ubuntu 20.04 ISO 并sudo ls -lR | grep -i crontab在其中运行,但没有crontab找到任何文件,因此我猜想它可能被压缩在这样的 ISO 文件中的一个文件中,或者可能是系统定时任务可以在 ubuntu.com 网络或 Launchpad 的 PPA 的某个地方下载:我只是不知道。


短话长说:在使用管道功能时|,为了将命令的 1 行输出附加到/etc/crontab,我不小心输入了:

| sudo tee /etc/crontab

...代替:

| sudo tee -a /etc/crontab

...因此最终/etc/crontab用一行替换了整个内容,而不是将这一行添加到该文件的末尾。绝望!

幸运的是,这是我第一次尝试修改此类文件,因此其内容是 Ubuntu 在安装期间创建的默认文件。但它的内容是什么?

我决定逃跑info crontab,结果发现了什么似乎与默认内容相同/etc/crontab(但我不太确定):

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d.  These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
#.-------------<-------- minute (0 - 59)
#| .------------<------- hour (0 - 23)
#| | .-----------<------ day of month (1 - 31)
#| | | .----------<----- month (1 - 12) OR jan,feb,mar,apr ...
#| | | | .---------<---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
#| | | | |  .-------<--- user
#| | | | |  |     .--<-- command
#| | | | |  |     |
#v v v v v  v     v
17 * * * *  root  cd / && run-parts --report /etc/cron.hourly
25 6 * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

然后,我决定将上述代码保存在一个全新的/etc/crontab文件中,其中包含owner:group = root:root(sudo chown root:root /etc/crontab),然后使用恢复其权限sudo chmod 755 /etc/crontab。完成此操作后,我还创建了它的备份副本,sudo cp /etc/crontab /etc/crontab.bak并创建了一个骨骼(即模板)与sudo cp /etc/crontab /etc/skel/crontab...

...但我不禁想知道上面的代码是否确实与 Ubuntu 20.04 安装程序/etc/crontab在 Ubuntu 安装期间在其中创建的代码完全相同,而且我也不知道如何获取此类原始/默认文件的精确副本(如果有的话)。

答案1

假设您安装了 cron 或至少有一个包含该文件的包,您可以使用以下命令找到该包:

$ dpkg -S /etc/crontab
cron: /etc/crontab

接下来,下载并将包解压到自定义文件夹(DEBIAN 文件夹也位于 /var/lib/dpkg/info 中):

mkdir -p cron && \
cd $_ && apt-get download $_ && \
dpkg-deb --raw-extract ${_}*.deb $_

$_是前一个命令的最后一个参数的缩写。

答案2

在我的 ubuntu 20.04 桌面上,/etc/crontab 内容如下

koen@hpubuntu:/etc$ cat crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

除了更改 /etc/crontab 文件之外,您还可以考虑在某些目录中添加文件

  • /etc/cron.d/ 中带有 cron 代码片段的文件
  • 相关 /etc/cron.[hourly |daily |weekly |monthly] 目录中的可执行文件(脚本)。
dpkg -S can help to find the package linked to some source
 > dpkg -S "/etc/crontab"
   cron: /etc/crontab

似乎可以在这里找到代码:https://git.launchpad.net/ubuntu/+source/cron/tree/debian/crontab.main

相关内容