日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 连个文件都删除不了,什么鬼!

發布時間:2025/3/16 linux 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 连个文件都删除不了,什么鬼! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近不是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 连个文件都删除不了,什么鬼!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。