前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux系统shell环境下的通配符远比我想的复杂

Linux系统shell环境下的通配符远比我想的复杂

作者头像
生信技能树
发布2020-11-03 14:53:36
1.1K0
发布2020-11-03 14:53:36
举报
文章被收录于专栏:生信技能树

其中一台服务器里面有一个用户,提出来了一个无理要求,想把他的用户目录全部清空,包括环境变量等隐藏文件。

我简单思考了一下,就进入了他的目录,敲下了如下的命令:

代码语言:javascript
复制
sudo rm -rf .*

当时有一个警告,我没有细看:

代码语言:javascript
复制
幸好这个阻止了我,差一点就铸成大错!!!
rm: refusing to remove '.' or '..' directory: skipping '.'
rm: refusing to remove '.' or '..' directory: skipping '..'

这样用户目录下面是完全空白的目录,甚至连隐藏文件都没有,其实是没办法登陆的。所以我就去拷贝了一个空白用户下面的全部文件给它的用户目录,就是下面的文件:

拷贝到他的目录后,但是呢,需要修改权限,命令如下:

代码语言:javascript
复制
sudo chown -R vip32 .*

然后,漫长的等待就开始了

让我百思不得解,因为这些空白用户下面的隐藏文件并没有多少,不可能修改一下所有权耗费那么长时间。我就杀掉了这个命令,经过仔细的思考,终于意识到了问题所在,我使用了通配符,它居然匹配到了上层目录!!!

我连忙去检查,果然:

这些人的用户,因为我的错误操作, 文件的所有权被 vip32拿走了。可能某些文件会没办法删除了,因为不属于他们了。但是文件不会丢失,也不影响使用。因为这些用户都是vip32用户目录的上层目录,被我的通配符给覆盖到了,所以被上面的命令给执行了。

不过,经过简单思考,我解决了这个问题,把大家的文件所有权修改回来了。我先拿到这些用户的用户名制作成为了 patch.id 文件,然后修改权限,如下;

代码语言:javascript
复制
cat ~/patch.id | while read id;do ( sudo chown -R $id /home/data/$id  );done

一切恢复如初!

差一点就铸成大错!!!但是还是没有想明白,为什么我的命令 sudo rm -rf .* 会被阻止呢?

代码语言:javascript
复制
rm: refusing to remove '.' or '..' directory: skipping '.'
rm: refusing to remove '.' or '..' directory: skipping '..'

虽然这个阻止其实是让我很开心!

学习资源推荐

  • shell中的扩展(Expansions) https://opengers.github.io/linux/linux-shell-brace-parameter-command-pathname-expansion/
  • bash脚本的参数扩展 (parameter expansion) :https://www.ibm.com/developerworks/cn/linux/l-bash-parameters.html
  • shell通配符(wildcard):https://cloud.tencent.com/developer/article/1114732
  • type命令:https://man.linuxde.net/type
  • 字符串操作:https://my.oschina.net/aiguozhe/blog/41557ß

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 学习资源推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档