www. On IT Road .com

恢复主目录下的文件

  1. 例如,如果 .bash_profile 文件从用户的主目录中删除,如下所示。
$ rm ~/.bash_profile
# ls -lart /etc/skel
total 32
drwxr-xr-x    4 root root  4096 Nov  4  2016 .mozilla
-rw-r--r--    1 root root   124 Nov 15  2017 .bashrc
-rw-r--r--    1 root root    18 Nov 15  2017 .bash_logout
drwxr-xr-x.   3 root root  4096 Aug 22  2017 .
drwxr-xr-x. 112 root root 12288 Nov 26 03:09 ..

2.要恢复原来的.bash_profile文件,复制“骨架”目录下的默认文件:

$ cp /etc/skel/.bash_profile ~/
# ls -lart ~/
total 32
drwxr-xr-x    4 root root  4096 Nov  4  2016 .mozilla
-rw-r--r--    1 root root   124 Nov 15  2017 .bashrc
-rw-r--r--    1 root root   176 Nov 15  2017 .bash_profile
-rw-r--r--    1 root root    18 Nov 15  2017 .bash_logout
drwxr-xr-x.   3 root root  4096 Aug 22  2017 .
drwxr-xr-x. 112 root root 12288 Nov 26 03:09 ..

注意:在相应的用户权限下复制文件。
如果通过 root 用户复制文件,则需要手动更改所有权和文件权限。

解决方案

将用户的主目录恢复为默认值需要 2 个重要的文件/目录。
它们主要是:

  1. /etc/skel 目录
  2. /etc/default/useradd

skel 目录

目录 /etc/skel/(skel 派生自“骨架”)用于在首次创建用户时启动主目录。
“骨架”用户文件的示例布局:

# ls -lart /etc/skel
total 32
drwxr-xr-x    4 root root  4096 Nov  4  2016 .mozilla
-rw-r--r--    1 root root   124 Nov 15  2017 .bashrc
-rw-r--r--    1 root root   176 Nov 15  2017 .bash_profile
-rw-r--r--    1 root root    18 Nov 15  2017 .bash_logout
drwxr-xr-x.   3 root root  4096 Aug 22  2017 .
drwxr-xr-x. 112 root root 12288 Nov 26 03:09 ..

注意:“骨架”目录在 /etc/default/useradd 文件中定义。

# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

从头开始恢复整个主目录

让我们看看如何为用户恢复整个主目录。
出于本示例的目的,我们将删除 user1 的主目录。

  1. 检查用户 UID 和 GID:
$ id user1
uid=54324(user1) gid=54325(user1) groups=54325(user1)
  1. 通过root权限删除用户家目录和用户:
# rm -rf /home/user1
  1. 将/etc/skel 目录中的所有文件复制到用户主目录中。
# cp -r /etc/skel/* ~/
# ls -lart /home/user1/
total 32
drwxr-xr-x    4 root root  4096 Nov  4  2016 .mozilla
-rw-r--r--    1 root root   124 Nov 15  2017 .bashrc
-rw-r--r--    1 root root   176 Nov 15  2017 .bash_profile
-rw-r--r--    1 root root    18 Nov 15  2017 .bash_logout
drwxr-xr-x.   3 root root  4096 Aug 22  2017 .
drwxr-xr-x. 112 root root 12288 Nov 26 03:09 ..

问题

如果不小心改变了用户家目录下文件的上下文或者文件权限,则该用户登录系统后可能会遇到权限错误或者应用程序意外行为。

比如/home/user1/.bash_profile文件权限错误,登录user1会提示“/home/user1/.bash_profile: Permission denied”:

login as: user1
user1@onitroad's password:
Last login: Mon Dec 15 15:08:20 2014 from onitroad2.example.com
-bash: /home/user1/.bash_profile: Permission denied
-bash-3.2$

这篇文章指导如何将用户主目录下的文件/子目录恢复为默认值。

恢复home目录下的子目录

例如,要恢复子目录 .mozilla,请使用 -recursive (-r) 选项复制它:

$ cp -r /etc/skel/.mozilla/ ~/
Linux下如何将用户 home目录下的文件恢复为默认值
日期:2020-09-17 00:13:48 来源:oir作者:oir