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

最近共享了一些服务器,主要是唐医生的功劳,已经成功运行3台

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

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

sudo rm -rf .*

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

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

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

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

sudo chown -R vip32 .*

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

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

我连忙去检查,果然:

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

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

cat ~/patch.id | while read id;do ( sudo chown -R $id /home/data/$id  );done

一切恢复如初!

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

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ß

写到最后

如果你也想开启自己的生物信息学数据处理生涯,但是自学起来困难重重,还等什么呢,赶快行动起来吧!参加我们生信技能树官方举办的学习班:

生信技能树的粉丝都知道我们有一个全国巡讲的良心学习班,口碑爆棚,生物信息学入门省心省时省力!先看看大家的反馈吧:

(0)

相关推荐

  • 树莓派安装Java

    ​方法一. Java环境安装 1.  从sun主页下载JDK for Linux版本.这里下载的是jdk-6u6-linux-i586.bin. 2. 用root用户登录ubuntu,或是在普通用户下 ...

  • 如何使用Linux命令行删除文件和目录

    [日期:2019-08-06] 来源:Linux公社 作者:醉落红尘 在本教程中,我们将向您展示如何使用rm命令通过示例和最常见的rm选项的说明来删除文件和目录. 如何删除文件 要从命令行删除(或删除 ...

  • Linux:常用shell命令

    常看当前目录列表 ls 删除目录或文件 rm 文件路径 rm -rf 文件路径 (不提示你是否确认删除,不推荐使用) 复制目录或文件 cp 文件路径 目标文件路径 移动目录或文件 mv 文件路径 目标 ...

  • 【竺】Linux笔记1——基础命令

    Linux是做什么的? 一般用来做服务器端的操作系统, 服务器:提供服务.数据处理.安全 操作系统=开机之后进入的操作环境预览 电脑=硬件+操作系统(软件) 硬件=鼠标.键盘.显示屏.耳机.cpu.主 ...

  • 如何优雅地删除 Linux 中的垃圾文件的方法

    这篇文章主要介绍了如何优雅地删除 Linux 中的垃圾文件的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧不知道大家是否也跟 ...

  • Linux系统Shell脚本如何运行?linux操作系统

    Shell脚本语言很适合用于处理纯文本类型的数据,而Linux系统中几乎所有的配置文件.日志文件以及绝大多数的启动文件都是纯文本类型的文件.因此,学好Shell脚本语言,能够更好的操作Linux系统. ...

  • Linux系统 Centos7 环境基于Docker部署Rocketmq服务

    消息队列 基本概述 MQ,Message Queue,基于TCP协议构建的简单协议,区别于具体的通信协议. 基于通信协议定义和抽象的更高层次的通信模型,一般都是生产者和消费者模型,又或者说服务端和客户 ...

  • 香橙派OrangePi 3开发板在Linux系统下修改Framebuffer 宽度和高度的方法

    注意:此方法只适用于 linux4.9 内核的系统,linux5.4 内核的系统无法使用 1) 在 linux 系统的/boot/orangepiEnv.txt 中有 fb0_width 和 fb0_ ...

  • 海洋论坛▏低成本复杂环境下高精度单波束测深系统的设计与实现

    一.系统技术设计 本文为解决上述两大技术难题,使用中等精度.低成本组合惯导系统为测深仪提供厘米级定位数据.0.1°精度航向数据和高精度姿态数据,在GNSS信号受到严重干扰.导致无法定位的复杂环境下仍然 ...

  • (7条消息) VS2017环境下开发Linux程序

    参考文章: https://www.cnblogs.com/dongc/p/6599461.html(大部分参考了这位大佬的,做了一些修改,感觉原版有一个小瑕疵) https://blog.csdn. ...

  • shell环境变量有哪些知识?linux运维知识点

    环境变量一般是指用export内置命令导出的变量,用于定义Shell的运行环境,保证Shell命令的正确执行.Shell通过环境变量来确定登录用户名.命令路径.终端类型.登录目录等.Linux运维技能 ...

  • Shell脚本开发基本规范有哪些?linux系统学习

    Shell脚本开发基本规范和习惯有哪些?Shell脚本的开发规范及习惯非常重要,虽然这些规范不是必须要遵守的,但有了好的规范和习惯,可以大大提升开发效率,并能在后期降低对脚本的维护成本.让自己养成一个 ...

  • Shell脚本语言有什么优势?深入学习linux系统

    Shell脚本语言有什么优势?随着互联网技术的发展,Linux逐步成为了较为热门的职业岗位技术,受到越来越多的企业和个人的喜爱.目前,市场上Linux运维技术人才相对短缺.在Linux运维工作学习中, ...

  • linux系统下对目录扩容

    linux系统下对目录扩容