linux為什么刪除不了文件

本篇內(nèi)容主要講解“l(fā)inux為什么刪除不了文件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“l(fā)inux為什么刪除不了文件”吧! 

在成都網(wǎng)站制作、網(wǎng)站設(shè)計中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設(shè)十余年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

前言

最近不是redis 6.0 出了嗎,官網(wǎng)介紹最新穩(wěn)定版本是 6.0.3 。于是,我就準(zhǔn)備在自己的破小服務(wù)器上安裝一下。于是,出現(xiàn)了后續(xù)的糟心事 (linux 下的文件正常刪除不了)。

下載了最新版本,在源碼包里邊 make 之后,出現(xiàn)了好幾個錯誤,上網(wǎng)查了下,有人說最新版本有問題,建議使用 5.0.8 。我嘞個去,我想也沒想就相信了。(其實,也有可能跟我的系統(tǒng)沒安裝 tcl 有關(guān)系,這就是后話了)

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

 

發(fā)現(xiàn)問題

從官網(wǎng)下載了 5.0.8 的源碼包之后,就從我本地(win系統(tǒng))通過 scp 命令上傳到服務(wù)器。如下,

linux為什么刪除不了文件  

由于源碼包下載到了桌面位置,因此本地路徑的地址就寫的絕對路徑 “C:\ ...” ,上傳到遠(yuǎn)程服務(wù)器的 /root 目錄下。誰成想到了服務(wù)器上的文件名是這個樣子。如下,

linux為什么刪除不了文件  

文件名竟然把本地文件的路徑也帶上了。這就讓人很頭疼了,我想著,就把它重新命名一下吧。

這么長的文件名,我肯定復(fù)制粘貼啊。但是粘貼之后發(fā)現(xiàn) linux 下把前邊當(dāng)成一個路徑來解析了,按照的是 linux 下文件夾的路徑格式(windows的文件分隔符為反斜杠"\",linux下為"/"),如下,

linux為什么刪除不了文件  

很明顯,在linux下默認(rèn)是沒有根路徑為 "/c" 這樣的路徑的。因此,就報錯沒有找到該目錄。

這就讓人很 dan 疼了,重命名不行,那就嘗試下刪除吧,大不了我重新上傳文件就是了。

但是,結(jié)果也并不如我所愿, 執(zhí)行刪除命令之后,文件還在,

linux為什么刪除不了文件  

原因,我猜測也是和重命名一樣,linux 把文件名解析為路徑了。然后看到網(wǎng)上說,給文件名加引號可以避免這種情況,我就操作了一番,并刻意地手打原文件的名字。(原為反斜杠)

linux為什么刪除不了文件  

然而并沒有什么用,怎樣都繞不過它把這個文件名當(dāng)成路徑來解析。。。

 

解決問題

后來,還是群里的小伙伴給我的解決方案,真是 tql 。遂記錄如下,

解決鏈接:https://www.askcto.com/searchInfo?qId=7056cab522d84d0eb9c1a36eba66b324

思路就是,通過文件索引節(jié)點號來刪除,繞過文件名。先通過 ls -i,顯示所有文件索引節(jié)點號(如下,目標(biāo)文件的索引節(jié)點號為 477536),然后通過索引節(jié)點號來刪除文件。

linux為什么刪除不了文件  
 

文件索引節(jié)點號

那么,有的童鞋就會問了,什么是文件索引節(jié)點號呢?

在這之前需要了解一下 linux 中文件的存儲形式,以及文件索引節(jié)點。

在 linux 下,文件在磁盤上的存儲是以“塊”為單位的,“塊”是文件的最小存儲單元。每個塊又包含多個扇區(qū),每個扇區(qū)大小為 512 字節(jié)。通常 8 個扇區(qū)組成一個“塊”。

由于文件的數(shù)據(jù)都存儲在“塊”中,因此我們還需要找到一塊區(qū)域來保存文件的元信息,包括文件的權(quán)限,擁有者,大小,以及存儲的位置。而這樣的區(qū)域就叫做文件索引節(jié)點(inode)。

元信息可以理解為是用來保存文件相關(guān)信息的信息??梢阅?Java 中的元注解來類比(元注解就是用來標(biāo)注注解的注解)。

每個 inode 都有一個號碼,這個就叫做文件索引節(jié)點號。操作系統(tǒng)最終是通過文件索引節(jié)點號來識別不同的文件的,而不是通過文件名。

如下圖,可以通過 stat 命令打印出一個文件(以 TankServer.zip為例)的 inode 所有元信息,還有 inode 號。

linux為什么刪除不了文件  

文件名和文件索引節(jié)點號之間的關(guān)系,有點類似于域名和 IP 之間的映射關(guān)系。

比如訪問百度,我們只會記得它的域名為"www.baidu.com",并不會去記它的 IP 地址是多少,而且 IP 對我們來說也不好記。這就好比,我們程序員只用記文件名,而不知道它的文件索引節(jié)點號一樣。

但是實際上,最終還是需要域名解析器 DNS 把域名解析為具體的 IP 地址(此處不考慮cdn),才能讓其他服務(wù)器識別。這就好比,linux 系統(tǒng)最終只會通過文件索引節(jié)點號來識別文件。

說了這么多,其實我們只是想知道當(dāng)前需要刪除文件的文件索引節(jié)點號而已。既然不能通過文件名刪除,我直接越過你,找到對應(yīng)的文件索引節(jié)點號不就可以了(相當(dāng)于,我如果知道百度的 IP 地址,可以直接通過 IP 訪問)。

PS:更多關(guān)于 inode 的介紹,可以參考阮一峰老師的博客:http://www.ruanyifeng.com/blog/2011/12/inode.html

 

刪除命令

那么知道了文件索引節(jié)點號,我們就可以通過以下的格式來刪除它對應(yīng)的文件。

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

前半部分,find 命令是在當(dāng)前目錄下找到 inode 號對應(yīng)的文件。后半部分 -exec 表示查找后緊跟著要執(zhí)行的命令。rm 就是刪除文件的命令。刪除哪個文件呢,{} 作用就是把 find 的結(jié)果作為參數(shù)傳給 -exec 。

最后還要注意, 使用 -exec 參數(shù),需要用 ; 分號結(jié)尾,不然會報錯如下圖。而 "\"反斜杠是為了轉(zhuǎn)義分號。

linux為什么刪除不了文件  
 

結(jié)語

以上就是在 linux 中刪除文件時遇到的坑。若你遇到類似的問題,或者出現(xiàn)了某個文件名中有特殊字符導(dǎo)致刪除不了文件,也可以嘗試一下以上的操作方式哦。

溫馨提示:刪除文件時,一定要小心哦,別最后刪庫跑路了!

我剛才測試時,就在 inum 前少加了橫杠 (正確應(yīng)該為 -inum)。導(dǎo)致整個命令刪除了其它目錄文件,如下圖。

linux為什么刪除不了文件  

幸好這是個目錄文件,也幸好我沒用 rm -rf  遞歸刪除文件,要不然,這個文件夾就廢了。下邊繼續(xù)執(zhí)行下去,還要刪除 npm,天知道最后會不會把系統(tǒng)文件也刪了。

linux為什么刪除不了文件  

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

到此,相信大家對“l(fā)inux為什么刪除不了文件”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁標(biāo)題:linux為什么刪除不了文件
標(biāo)題URL:http://muchs.cn/article42/gppihc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)微信小程序、網(wǎng)頁設(shè)計公司、定制開發(fā)營銷型網(wǎng)站建設(shè)、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司