Linux 基本shell命令和Linux rm -rf原理分析
還是老規矩,循序漸進,先來簡單入門一下Linux
Linux中一切皆檔案,所以我們應該知道的是Linux中只有一個根目錄,然後分為下圖幾個目錄,其中桌面在home 目錄下,圖(來源網上):
cd
> cd 目的地 --(..代表父目錄,.代表當前目錄)
一開始開啟的終端模擬器是預設在桌面目錄下開啟的,即$前面有個~號。
pwd
> pwd --顯示當前路徑
ls
> ls --顯示當前目錄下的檔案(夾)
-R
> 遞迴的作用 --配合使用
-i
> 詢問資訊 --配合使用
touch
建立空檔案
mkdir
建立空目錄
cp
> cp 原始檔 目的檔案 ----複製原始檔
mv
> mv 原始檔 目的檔案 ---移動,原始檔消失
rm/rmdir
rm 刪除原始檔 / rmdir 刪除空目錄
file
> file 原始檔 ---檢視檔案型別
cat
cat 原始檔 –檢視檔案內容
cat 原始檔 -n 帶行號(包括空行)顯示
cat 原始檔 -b 帶行號顯示(只包括文字)
cat 原始檔 -T 不讓製表符(用^I代替)出現
more/less
> more/less 原始檔 --檢視大檔案,以頁的方式檢視
tail/head
> tail/head 原始檔 -n --檢視大檔案內容的尾部和頭部n行
tree
一種展示目錄的美觀工具,sudo apt install tree可安裝
rm -rf
rm -rf -i 源目錄 (r是遞迴刪除,f是強制刪除,i是提示資訊)
遞迴刪除是不是很神奇,這倒是讓我產生了濃厚的興趣,遂進行了一番研究,以下內容參考自:Linux rm刪除檔案原理
硬連結
符號連結(可以給目錄新增)
只能夠在處於同一儲存媒體的檔案建立硬連結。要想在不同儲存媒體的檔案之間建立連結,只能使用符號連結。
檔案 或目錄的inode編號是一個用於標識的唯一數字,這個數字由核心分配給檔案系統中的每一個物件,要想檢視檔案或目錄的inode編號,可以給ls命令加入-i引數
很多時候,我們都會發現,某個程序在對當前檔案讀寫,但是我們依然能夠rm, 是不是很奇怪?而windows下面,肯定會報錯,”當前檔案正在被使用“, 這就得從linux下面刪除檔案的原理說起了。
Linux是通過link的數量來控制檔案刪除的,只有當一個檔案不存在任何link的時候,這個檔案才會被刪除。一般來說,每個檔案都有2個link計數器:i_count 和 i_nlink。
i_count的意義是當前檔案使用者(或被呼叫)的數量,i_nlink 的意義是介質連線的數量(硬連結的數量);可以理解為i_count是記憶體引用計數器,i_nlink是磁碟的引用計數器。
當一個檔案被某一個程序引用時,對應i_count數就會增加;當建立檔案的硬連結的時候,對應i_nlink數就會增加。
對於刪除命令rm而言,實際就是減少磁碟引用計數i_nlink。這裡就會有一個問題,如果一個檔案正在被某個程序呼叫,而使用者卻執行rm操作把檔案刪除了,那麼會出現什麼結果呢?當用戶執行rm操作刪除檔案後,再執行ls或者其他檔案管理命令,無法再找到這個檔案了,但是呼叫這個刪除的檔案的程序卻在繼續正常執行,依然能夠從檔案中正確的讀取及寫入內容。這又是為什麼呢?
這是因為rm操作只是將檔案的i_nlink減少了,如果沒其它的連結i_nlink就為0了;但由於該檔案依然被程序引用,因此,此時檔案對應的i_count並不為0,所以即使執行rm操作,但系統並沒有真正刪除這個檔案,當只有i_nlink及i_count都為0的時候,這個檔案才會真正被刪除。也就是說,還需要解除該程序的對該檔案的呼叫才行。
以上講的i_nlink及i_count是檔案刪除的真實條件,但是當檔案沒有被呼叫時,執行了rm操作刪除檔案後是否還可以找回被刪的檔案呢?
前面說了,rm操作只是將檔案的i_nlink減少了,或者說置0了,實際就是將檔名到inode的連結刪除了,此時,並沒有刪除檔案的實體即(block資料塊),此時,如果及時停止機器工作,資料是可以找回的,如果此時繼續寫入資料,那麼當新資料就可能會被分配到被刪除的資料的block資料塊,此時,檔案就會被真正的回收了
備註:根據以上原理,實際情況會出現以下問題,web伺服器磁碟空間不夠了,刪除了所有無用日誌還是顯示磁碟空間不足,但是用du -sh /*發現磁碟空間佔用的遠小於硬碟總大小,這就是因為只刪除了一個i_nlink,而還有其他程序在使用著這些log檔案,apache或者tomcat,重啟再看就ok了。
補充:
df命令詳細用法
a:顯示全部的檔案系統和各分割區的磁碟使用情形
i:顯示i -nodes的使用量
k:大小用k來表示 (預設值)
t:顯示某一個檔案系統的所有分割區磁碟使用量
x:顯示不是某一個檔案系統的所有分割區磁碟使用量
T:顯示每個分割區所屬的檔案系統名稱
h:動態顯示易讀的格式
常用命令:df -hi
du:查詢檔案或目錄的磁碟使用空間
a:顯示全部目錄和其次目錄下的每個檔案所佔的磁碟空間
b:大小用bytes來表示 (預設值為k bytes)
c:最後再加上總計 (預設值)
s:只顯示各檔案大小的總合 (summarize)
x:只計算同屬同一個檔案系統的檔案
L:計算所有的檔案大小
常用命令:du -a
系統管理命令:
start:顯示指定檔案的相關資訊,比ls命令顯示的內容更多
who,w:顯示線上登入使用者
whoname :顯示使用者自己的身份
hostname:顯示主機名稱
uname:顯示系統資訊
top:顯示當前耗費資源最多的程序
ps:顯示瞬間程序狀態
du:顯示檔案已使用磁碟空間的總量
free:顯示當前記憶體和交換空間的使用情況
ifconfig:顯示網路介面資訊
ping:測試網路的連通性
man:命令幫助資訊查詢
Alias:設定命令別名
alias[別名]=[“指令名”]
Clear:清屏
Kill:殺死程序
dpkg和apt get的區別:
兩者的區別是dpkg繞過apt包管理資料庫對軟體包進行操作,所以你用dpkg安裝過的軟體包用apt可以再安裝一遍,系統不知道之前安裝過了,將會覆蓋之前dpkg的安裝。
1、dpkg是用來安裝.deb檔案,但不會解決模組的依賴關係,且不會關心ubuntu的軟體倉庫內的軟體,可以用於安裝本地的deb檔案。
2、apt會解決和安裝模組的依賴問題,並會諮詢軟體倉庫, 但不會安裝本地的deb檔案, apt是建立在dpkg之上的軟體管理工具。
dpkg軟體管理工具:(基於Debian)
dpkg –info “軟體包名” –列出軟體包解包後的包名稱.
dpkg -l –列出當前系統中所有的包.可以和引數less一起使用在分屏檢視.
dpkg -l |grep -i “軟體包名” –檢視系統中與”軟體包名”相關聯的包.
dpkg -s 查詢已安裝的包的詳細資訊.
dpkg -L 查詢系統中已安裝的軟體包所安裝的位置.
dpkg -S 查詢系統中某個檔案屬於哪個軟體包.
dpkg -I 查詢deb包的詳細資訊,在一個軟體包下載到本地之後看看用不用安裝(看一下唄).
dpkg -i 手動安裝軟體包(這個命令並不能解決軟體包之前的依賴性問題),如果在安裝某一個軟體包的時候遇到了軟體依賴的問題,可以用apt-get -f install在解決信賴性這個問題.
dpkg -r 解除安裝軟體包.不是完全的解除安裝,它的配置檔案還存在.
dpkg -P 全部解除安裝(但是還是不能解決軟體包的依賴性的問題)
dpkg -reconfigure 重新配置
apt高階包管理工具
軟體源設定 /etc/apt/sources.list
更新軟體源資料 apt-get update
更新已安裝軟體 apt-get upgrade
更新系統版本 apt-get dist-upgrade
通過安裝包或解除安裝包來修復依賴錯誤 apt-get -f install
搜尋軟體源資料 apt-cache search foo
解壓安裝軟體包 apt-get install foo
重新安裝軟體包 apt-get –reinstall install foo
刪除軟體包釋放的內容 apt-get remove foo
解除安裝軟體,同時清除該軟體配置檔案 apt-get –purge remove foo
刪除不需要的包 apt-get autoclean
刪除所有已下載的包 apt-get clean
在用命令apt-get install之前,是先將軟體包下載到/var/cache/apt/archives中,之後再進行安裝的.所以我們可以用apt-get clean清除/var/cache/apt/archives目錄中的軟體包.
原始碼包安裝
自動安裝編譯一軟體所需要的包 apt-get build-dep foo
再次梳理一下:
檔案目錄操作指令:
ls:顯示檔案和目錄列表
mv:移動檔案或目錄,檔案或重名
-l:列出檔案的詳細資訊
- find:查詢指定的檔案
-a:列出當前目錄的所有檔案,包含隱藏檔案
-name:檔名
mkdir:建立目錄
wc:統計文字文件的行,字,字數
-p:父目錄不存在的情況下先生成父目錄
grep:查詢指定字元
cd:切換目錄
rmdir:刪除空目錄
touch:生成一個空檔案
tree:顯示目錄,目錄改名為樹
echo:生成一個帶內容的檔案
pwd:顯示當前的工作目錄
cat,tac:顯示文字檔案的內容
ln:建立連結檔案
cp:複製檔案或目錄
more,less:分頁顯示文字檔案內容
rm:刪除檔案
Head,tail:顯示檔案開頭和結尾內容
-r:同時刪除該目錄下的所有檔案
-f:強制刪除檔案或目錄
小結
總體來說,這篇博文的產生是來源於tree和rm -rf -i的操作引起的,因為看見了刪除過程中的遞迴刪除,先進行遞到末目錄,然後歸來刪除。再接再厲吧,感覺Linux還是挺有意思的。
相關推薦
Linux 基本shell命令和Linux rm -rf原理分析
還是老規矩,循序漸進,先來簡單入門一下Linux Linux中一切皆檔案,所以我們應該知道的是Linux中只有一個根目錄,然後分為下圖幾個目錄,其中桌面在home 目錄下,圖(來源網上): cd > cd 目的地 --(..代表父目錄,.代表
nginx學習(三) 使用shell命令和linux定時任務完成nginx日誌管理
1.編寫shell指令碼 建立shell指令碼目錄和指令碼 mkdir /data cd /data vim runlog.sh 編寫指令碼 # /bin/bash LOGPATH=/usr/local/nginx/logs/zcom.access.log /
Linux下Shell命令的輸出信息同時顯示在屏幕和保存到日誌文件中
blog inux -a 輸出 輸出內容 使用 col 文件中 信息 #直接覆蓋日誌文件 ls -l | tee ./t.log #將輸出內容附加到日誌文件 ls -l | tee -a ./t.log 使用的是tee命令Linux下She
Linux下shell命令用法和例項總結:du
完整的Linux下Shell命令總結歸檔於IT老兵部落格。 命令格式 du [選項] [檔案] 命令功能 du(disk usage 的簡稱)命令用於檢查計算機上檔案和目錄的磁碟使用情況,可以遞迴顯示檔案和目錄。顯示每個檔案和目錄的磁碟使用空間。 命令引數
Linux的基礎命令和Shell指令碼
一、計算機 1、能接收使用者輸入的指令和資料,經過中央處理器的算術邏輯單元處理,然後會產生或者顯示新資料的,就是計算機。 比如,普通商戶用的計算器,手機,提款機,汽車導航,桌面電腦,手提電腦等 2、計算機
Linux進階命令和Shell程式設計
1.高階文字命令——sed 1.1sed簡介 sed全稱是:Stream EDitor,即流編輯器,是一個很好的文字處理工具,本身是一個管道命令,處理時,把當前處理的行儲存在臨時緩衝區中,接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往
關於linux的export命令和shell變數的生命週期,環境變
原文來自:http://www.cppblog.com/mydriverc/archive/2009/09/16/96476.html export:將自定義變數設定為系統環境變數(當前shell中有效) 功能說明:設定或顯示環境變數。 語 法:export [-
關於linux的export命令和shell變數的生命週期,環境變數
[-fnp][變數名稱]=[變數設定值]補充說明:在shell中執行程式時,shell會提供一組環境變數。export可新增,修改或刪除環境變數,供後續執行的程式使用。export的效力僅及於該此登陸操作。參 數: -f 代表[變數名稱]中為函式名稱。 -n 刪除指定的變數。變數實際上並未刪除,只
Linux 搭建java環境 和Linux基本命令(最基本的)
首先需要一個Linux的伺服器,阿里雲 騰訊雲的 最低配就行了 有問題聯絡 qq:185624592 所需要的工具: 1. Xshell 有免費的學生學習版本 2. Xftp 也有免費學生學習版
Linux基本操作命令
程序 詳細 位置 tool -1 擁有 Owner ss命令 單位 一、 ls ls最常用的參數有三個: -a -l -F 1、ls -a Linux上的文件以.開頭的文件被系統視為隱藏文件,僅用ls命令是看不到他們的,而用ls -a除了顯示 一般文件名外,連隱藏文
Linux 基本bash命令
inux 信息 bsp 詳解 目前 查看內存 ash java htm 1、查看文件大小、內存大小、cpu信息、硬盤空間 顯示當前目錄所有文件大小的命令:ls -lht 內存空間、CPU信息、硬盤空間:htop、top(htop詳解參考:http://blog
Linux修改Shell命令提示符及顏色
br0 小時 spa 日期 背景顏色 red 24小時 信息 pan 1. Linux登錄過程中加載配置文件順序: /etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc
Linux系列教程(五)——Linux鏈接命令和權限管理命令
密碼 mission pos link 掩碼 Owner 最大的 linux系統 passwd 前一篇博客我們講解了Linux文件和目錄處理命令,還是老生常淡,對於新手而言,我們不需要完全記住命令的詳細語法,記住該命令能完成什麽功能,然後需要的時候去查就好了,用的多了我
linux基本操作命令的使用
lin usr 查看 特殊符號 nbsp files 進一步 image mem 為了盡快完成對公司的linux服務器的部署,安裝,操作,需要進一步學習Linux系統中基本的文件和目錄管理命令,同時要熟悉獲取命令幫助的常用方法以便及時了解與服務器管理、維護相關的其他命令的用
Linux基本常用命令之ls詳解(含date,cal)
Linux基礎【1】顯示日期的指令:date示例:(1)#date +%Y/%m/%d結果:2018/02/27(2)#date +%H:%M結果:10:48【2】顯示日歷的指令:cal格式:cal [month] [year]示例:(1)#cal 2 2018(2)#cal 13 2018結果:cal:il
Linux基本的命令使用
-a 追加 touch 大小 通配符 運用 歷史 主目錄 替換 1.1ls -a 顯式所有文件,包括隱藏文件 1.2 ls -l 列表形式顯式文件名稱 1.3 ls -l -h 列表顯式大小和名稱 也可以這樣寫 ls -alh (-可以省略) 重定向 ls -alh
Linux基本權限和特殊權限管理
Linux的權限管理 特殊權限 ACL權限 基本權限UGO u 所屬主 g 所屬組 o 其他人 r (4)讀 read w(2)寫 write x(1)執行 execute 針對文件: ? r 讀 是否允許可以查看文件的內容 ?
LINUX學習—使用者命令和許可權
使用者、組、許可權 許可權: r,w, x - 檔案: -- r:可讀,可以用cat檢視檔案內容 -- w:可寫 -- x:可執行 - 目錄: -- r:可以對此目錄執行ls以列出內部的 所有檔案: -- w:可以在此目錄
Linux 內建命令和系統命令
1.什麼是build in命令: shell內建命令是指bash(或其它版本)工具集中的命令。一般都會有一個與之同名的系統命令,比如bash中的echo命令與/bin/echo是兩個不同的命令,儘管他們行為大體相仿。當在bash中鍵入一個命令時系統會先看他是否是一個內建命令,如果不是才會檢視是否是系統
Linux的rsync命令和歸檔、壓縮
一、Linux的rsync命令 1.rsync與scp的區別 scp是複製和rsync是同步,rsync和scp在資料夾均不存在時,執行時間相差不大,但是資料夾存在的情況下差異很大。因為scp是複製:若目的地檔案不存在則新建,若存在