长话短说:我在我的电脑上安装 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