我无意中将一个没有主目录的用户添加到我的系统中(我忘记在 useradd 中输入 -d 和 -m 标志)。我没有删除用户并重新开始,而是尝试简单地创建主目录并从 /etc/skel 中自己复制文件。但是,我收到了以下奇怪的错误:
user@host:~$ sudo cp -rv /etc/skel/* /home/newuser/
cp: cannot stat `/etc/skel/*': No such file or directory
但是,以下两个命令可以按预期工作:
user@host:~$ sudo cp -rv /etc/skel/.bashrc /home/newuser/
user@host:~$ cp -rv ~/testfolder1/* /testfolder2/
有人能解释一下我为什么收到那个初始错误吗?
答案1
/etc/skel 目录通常只包含隐藏文件,即名称以句点开头的文件。*
除非设置了选项,否则 shell 扩展的 不会包含隐藏文件。对于 bash,此选项用 来设置shopt -s dotglob
。
在您的情况下/etc/skel/*
没有扩展为任何东西,所以 shell 将参数保留为/etc/skel/*
,但没有该名称的文件。
答案2
当 glob 表达式 ( /etc/skel/*
) 扩展为不文件,则默认情况下,表达式在命令中以纯字符串形式保留。在这种情况下,它会扩展为无文件,因为 /etc/skel 中的所有文件都是点文件。因此,您试图复制 /etc/skel 中的文字文件“*”,但该文件不存在。
看http://www.gnu.org/software/bash/manual/bashref.html#Filename-Expansion