必威体育betway登录:linux连个文件都删除不了,什么鬼!

admin/2020-05-27/ 分类:科技/阅读:

前言

最近不是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 了(独身二十多年的手速可不是白练的~)。

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

,

欧博网址

www.aidshuhehaote.com欢迎进入欧博网址(Allbet Gaming),欧博网址开放会员注册、代理开户、电脑客户端下载、苹果安卓下载等业务。

TAG:
阅读:
广告 330*360
广告 330*360
Sunbet_进入申博sunbet官网
微信二维码扫一扫
关注微信公众号
新闻自媒体 Copyright © 2002-2019 Sunbet 版权所有
二维码
意见反馈 二维码