前言

最近不是redis 6.0 出了吗,官网介绍最新稳定版本是 6.0.3 。于是,我就准备在自己的破小服务器上安装一下。于是,出现了后续的糟心事 (linux 下的文件正常删除不了)。

下载了最新版本,在源码包里边 make 之后,出现了好几个错误,上网查了下,有人说最新版本有问题,建议使用 5.0.8 。我嘞个去,我想也没想就相信了。(其实,也有可能跟我的系统没安装 tcl 有关系,这就是后话了)

然后,我就下载了 5.0.8 版本的redis,重新安装。

发现问题

从官网下载了 5.0.8 的源码包之后,就从我本地(win系统)通过 scp 命令上传到服务器。如下,

由于源码包下载到了桌面位置,因此本地路径的地址就写的绝对路径 “C:\ ...” ,上传到远程服务器的 /root 目录下。谁成想到了服务器上的文件名是这个样子。如下,

文件名竟然把本地文件的路径也带上了。这就让人很头疼了,我想着,就把它重新命名一下吧。

这么长的文件名,我肯定复制粘贴啊。但是粘贴之后发现 linux 下把前边当成一个路径来解析了,按照的是 linux 下文件夹的路径格式(windows的文件分隔符为反斜杠"\",linux下为"/"),如下,

很明显,在linux下默认是没有根路径为 "/c" 这样的路径的。因此,就报错没有找到该目录。

这就让人很 dan 疼了,重命名不行,那就尝试下删除吧,大不了我重新上传文件就是了。

但是,结果也并不如我所愿, 执行删除命令之后,文件还在,

原因,我猜测也是和重命名一样,linux 把文件名解析为路径了。然后看到网上说,给文件名加引号可以避免这种情况,我就操作了一番,并刻意地手打原文件的名字。(原为反斜杠)

然而并没有什么用,怎样都绕不过它把这个文件名当成路径来解析。。。

解决问题

后来,还是群里的小伙伴给我的解决方案,真是 tql 。遂记录如下,

解决链接:https://www.askcto.com/searchInfo?qId=7056cab522d84d0eb9c1a36eba66b324

思路就是,通过文件索引节点号来删除,绕过文件名。先通过 ls -i,显示所有文件索引节点号(如下,目标文件的索引节点号为 477536),然后通过索引节点号来删除文件。

文件索引节点号

那么,有的童鞋就会问了,什么是文件索引节点号呢?

在这之前需要了解一下 linux 中文件的存储形式,以及文件索引节点。

在 linux 下,文件在磁盘上的存储是以“块”为单位的,“块”是文件的最小存储单元。每个块又包含多个扇区,每个扇区大小为 512 字节。通常 8 个扇区组成一个“块”。

由于文件的数据都存储在“块”中,因此我们还需要找到一块区域来保存文件的元信息,包括文件的权限,拥有者,大小,以及存储的位置。而这样的区域就叫做文件索引节点(inode)

元信息可以理解为是用来保存文件相关信息的信息。可以拿 Java 中的元注解来类比(元注解就是用来标注注解的注解)。

每个 inode 都有一个号码,这个就叫做文件索引节点号。操作系统最终是通过文件索引节点号来识别不同的文件的,而不是通过文件名。

如下图,可以通过 stat 命令打印出一个文件(以 TankServer.zip为例)的 inode 所有元信息,还有 inode 号。

文件名和文件索引节点号之间的关系,有点类似于域名和 IP 之间的映射关系。

比如访问百度,我们只会记得它的域名为"www.baidu.com",并不会去记它的 IP 地址是多少,而且 IP 对我们来说也不好记。这就好比,我们程序员只用记文件名,而不知道它的文件索引节点号一样。

但是实际上,最终还是需要域名解析器 DNS 把域名解析为具体的 IP 地址(此处不考虑CDN),才能让其他服务器识别。这就好比,linux 系统最终只会通过文件索引节点号来识别文件。

说了这么多,其实我们只是想知道当前需要删除文件的文件索引节点号而已。既然不能通过文件名删除,我直接越过你,找到对应的文件索引节点号不就可以了(相当于,我如果知道百度的 IP 地址,可以直接通过 IP 访问)。

PS:更多关于 inode 的介绍,可以参考阮一峰老师的博客:http://www.ruanyifeng.com/blog/2011/12/inode.html

删除命令

那么知道了文件索引节点号,我们就可以通过以下的格式来删除它对应的文件。

find ./ -inum inode号 -exec rm {} \;

前半部分,find 命令是在当前目录下找到 inode 号对应的文件。后半部分 -exec 表示查找后紧跟着要执行的命令。rm 就是删除文件的命令。删除哪个文件呢,{} 作用就是把 find 的结果作为参数传给 -exec 。

最后还要注意, 使用 -exec 参数,需要用 ; 分号结尾,不然会报错如下图。而 "\"反斜杠是为了转义分号。


结语

以上就是在 linux 中删除文件时遇到的坑。若你遇到类似的问题,或者出现了某个文件名中有特殊字符导致删除不了文件,也可以尝试一下以上的操作方式哦。

温馨提示:删除文件时,一定要小心哦,别最后删库跑路了!

我刚才测试时,就在 inum 前少加了横杠 (正确应该为 -inum)。导致整个命令删除了其它目录文件,如下图。

幸好这是个目录文件,也幸好我没用 rm -rf  递归删除文件,要不然,这个文件夹就废了。下边继续执行下去,还要删除 npm,天知道最后会不会把系统文件也删了。

幸好我手快,及时 Ctrl + C 了(单身二十多年的手速可不是白练的~)。

若本文对你有用,欢迎关注我,给我点赞哦 ~

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

linux 连个文件都删除不了,什么鬼!相关推荐

  1. linux 删除含有关键词的文件_linux 连个文件都删除不了,什么鬼!

    前言 最近不是redis 6.0 出了吗,官网介绍最新稳定版本是 6.0.3 .于是,我就准备在自己的破小服务器上安装一下.于是,出现了后续的糟心事 (linux 下的文件正常删除不了). 下载了最新 ...

  2. linux find查找文件然后删除,linu查找find命令及删除7天前的文件

    在/ l o g s目录中查找更改时间在7日以前的文件并删除它们: $ find logs/ -type f -mtime +7 -exec rm -f {} \; 在/ l o g s目录中查找更改 ...

  3. linux乱码的文件怎么删除,如何删除Linux的乱码文件

    当发现linux 里有中文命名文件,乱码文件想删除时,请使用inode 删除.[root@localhost tmp]# ls -l total 1024 -r--r--r-- 1 root  roo ...

  4. Linux下的文件被删除后恢复

    作为一个多用户.多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的.尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据.不过, ...

  5. Linux系统中文件被删除后的恢复方法(ext4)

    本文档给出了恢复ext4文件系统被误删的文件的方法,需要使用的软件是extundelete,这款软件对ext4文件系统的恢复成功率比较高,值得拥有! [root@localhost ~]# rm -R ...

  6. linux find查找文件并删除文件,Linux find 查找 并删除文件 杀掉进程

    find 默认在当前 即 . 目录下查找 du 文件名 / 目录 # 查看文件占用内存大小 1. 按照文件名查找 find / -name qwe # qwe为文件名 find / -name *qw ...

  7. Linux shell 对于文件的删除,复制,修改文件名等操作

    2019独角兽企业重金招聘Python工程师标准>>> 修改文件名或者修改文件夹名 mv file1 file2 把当前目录下的file1文件名改成file2,如果该目录下有file ...

  8. linux模糊匹配文件并删除,在Linux系统中使用dupeGuru查找并移除重复文件的教程

    简介 对我们来说,磁盘被装满是棘手问题之一.无论我们如何小心谨慎,我们总可能将相同的文件复制到多个不同的地方,或者在不知情的情况下,重复下载了同一个文件.因此,迟早你会看到"磁盘已满&quo ...

  9. linux的tmp文件夹定期会删除么,关于linux tmp下文件自动删除的问题

    近日发现有一台机器tmp 下放置的文件无辜丢失,而且排查发现是自动丢失,并且,只是删除10天之前的文件-. 本来以为是哪位写了一个自动执行脚本, find 了一下10天前的文件删除了-. 结果,排查所 ...

最新文章

  1. QT安装由问题的,安装后发现有些控件标签名显示不了
  2. 在TEASOFT中如何设置出镜摄像头?
  3. 【概念原理】四种SQL事务隔离级别和事务ACID特性
  4. 前后端交互概述与URL地址格式
  5. Java中创建对象的5种方式 -[转] http://www.codeceo.com/article/5-ways-java-create-object.html...
  6. 将JacpFX客户端与JSR 356 WebSockets一起使用
  7. __invoke,try{}catch(){},microtime(),is_callable()
  8. electron深入浅出
  9. SQLAlchemy黄金体验
  10. 腾讯云区块链,产业区块链的坚守者
  11. Python_封装案例(士兵突击)
  12. 解决java虚拟机内存不足的错误 java.lang.OutOfMemoryError: PermGen space 没有文件TOMCAT_HOME/bin/catalina.sh
  13. 大学最后一个学习的半年,Do crazily without hesitation
  14. 为何说美团打车更像是一场破坏行业生态的闹剧?
  15. mybatis注解记录
  16. 走一个青瓜风——青瓜鸡尾酒
  17. java线程的停止,暂停,恢复*
  18. QT下载网址(国内)
  19. 牛顿法及其几何意义理解
  20. 北京交通大学全日制硕士专业学位研究生计算机技术培养方案,北京交通大学交通运输学院专业型硕士研究生培养方案.PDF...

热门文章

  1. oracle备份信息在控制文件丢失,恢复之利用备份在所有控制文件丢失情况下恢复(一)...
  2. 服务器不在工作_DHCP的工作原理
  3. wpf绑定treeview 带查找_如何查找,修复和避免C#.NET中内存泄漏的8个最佳实践
  4. mariadb不能导入与mysql可以,mysql/mariadb知识点总结(12):insert语句总结
  5. 论文英文参考文献[10]的时候后面多空格_英文学术论文标点符号使用规范
  6. linkbot 中文教程系列 linkbot破解教程
  7. C/C++语言函数参数里的“...”作用,va_list的使用(stdarg.h)
  8. RedHat gcc编译器版本升级到4.8.2支持C++11标准
  9. FZOJβ #31.字符串
  10. UIBackgroundTaskIdentifier 进入后台后结束任务再挂起APP