最近不是redis 6.0 出了嗎,官網介紹最新穩定版本是 6.0.3 。因而,我就準備在本身的破小服務器上安裝一下。因而,出現了後續的糟心事 (linux 下的文件正常刪除不了)。html
下載了最新版本,在源碼包裏邊 make 以後,出現了好幾個錯誤,上網查了下,有人說最新版本有問題,建議使用 5.0.8 。我嘞個去,我想也沒想就相信了。(其實,也有可能跟個人系統沒安裝 tcl 有關係,這就是後話了)node
而後,我就下載了 5.0.8 版本的redis,從新安裝。linux
從官網下載了 5.0.8 的源碼包以後,就從我本地(win系統)經過 scp 命令上傳到服務器。以下,程序員
因爲源碼包下載到了桌面位置,所以本地路徑的地址就寫的絕對路徑 「C: ...」 ,上傳到遠程服務器的 /root 目錄下。誰成想到了服務器上的文件名是這個樣子。以下,redis
文件名居然把本地文件的路徑也帶上了。這就讓人很頭疼了,我想着,就把它從新命名一下吧。npm
這麼長的文件名,我確定複製粘貼啊。可是粘貼以後發現 linux 下把前邊當成一個路徑來解析了,按照的是 linux 下文件夾的路徑格式(windows的文件分隔符爲反斜槓"\",linux下爲"/"),以下,windows
很明顯,在linux下默認是沒有根路徑爲 "/c" 這樣的路徑的。所以,就報錯沒有找到該目錄。服務器
這就讓人很 dan 疼了,重命名不行,那就嘗試下刪除吧,大不了我從新上傳文件就是了。測試
可是,結果也並不如我所願, 執行刪除命令以後,文件還在,spa
緣由,我猜想也是和重命名同樣,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 了(單身二十多年的手速可不是白練的~)。
若本文對你有用,歡迎關注我,給我點贊哦 ~