內(nèi)存是Linux內(nèi)核所管理的最重要的資源之一。內(nèi)存管理系統(tǒng)是操作系統(tǒng)中最為重要的部分,因為系統(tǒng)的物理內(nèi)存總是少于系統(tǒng)所需要的內(nèi)存數(shù)量。虛擬內(nèi)存就是為了克服這個矛盾而采用的策略。系統(tǒng)的虛擬內(nèi)存通過在各個進程之間共享內(nèi)存而使系統(tǒng)看起來有多于實際內(nèi)存的內(nèi)存容量。Linux支持虛擬內(nèi)存, 就是使用磁盤作為RAM的擴展,使可用內(nèi)存相應(yīng)地有效擴大。核心把當(dāng)前不用的內(nèi)存塊存到硬盤,騰出內(nèi)存給其他目的。當(dāng)原來的內(nèi)容又要使用時,再讀回內(nèi)存。以下就是我為大家整理到的詳細LINUX系統(tǒng)內(nèi)存管理的知識,歡迎大家閱讀!!!

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出廣漢免費做網(wǎng)站回饋大家。
LINUX系統(tǒng)教程:內(nèi)存管理的知識詳解
一、內(nèi)存使用情況監(jiān)測
(1)實時監(jiān)控內(nèi)存使用情況
在命令行使用“Free”命令可以監(jiān)控內(nèi)存使用情況
代碼如下:
#free
total used free shared buffers cached
Mem: 256024 192284 63740 0 10676 101004
-/+ buffers/cache: 80604 175420
Swap: 522072 0 522072
上面給出了一個256兆的RAM和512兆交換空間的系統(tǒng)情況。第三行輸出(Mem:)顯示物理內(nèi)存。total列不顯示核心使用的物理內(nèi)存(通常大約1MB)。used列顯示被使用的內(nèi)存總額(第二行不計緩沖)。 free列顯示全部沒使用的內(nèi)存。Shared列顯示多個進程共享的內(nèi)存總額。Buffers列顯示磁盤緩存的當(dāng)前大小。第五行(Swap:)對對換空間,顯示的信息類似上面。如果這行為全0,那么沒使用對換空間。在缺省的狀態(tài)下,free命令以千字節(jié)(也就是1024字節(jié)為單位)來顯示內(nèi)存使用情況。可以使用—h參數(shù)以字節(jié)為單位顯示內(nèi)存使用情況,或者可以使用—m參數(shù)以兆字節(jié)為單位顯示內(nèi)存使用情況。還可以通過—s參數(shù)使用命令來不間斷地監(jiān)視內(nèi)存使用情況:
#free –b –s2
這個命令將會在終端窗口中連續(xù)不斷地報告內(nèi)存的使用情況,每2秒鐘更新一次。
(2)組合watch與 free命令用來實時監(jiān)控內(nèi)存使用情況:
代碼如下:
#watch -n 2 -d free
Every 2.0s: free Fri Jul 6 06:06:12 2007
total used free shared buffers cached
Mem: 233356 218616 14740 0 5560 64784
-/+ buffers/cache: 148272 85084
Swap: 622584 6656 615928
watch命令會每兩秒執(zhí)行 free一次,執(zhí)行前會清除屏幕,在同樣位置顯示數(shù)據(jù)。因為 watch命令不會卷動屏幕,所以適合出長時間的監(jiān)測內(nèi)存使用率。可以使用 -n選項,控制執(zhí)行的頻率;也可以利用 -d選項,讓命令將每次不同的地方顯示出來。Watch命令會一直執(zhí)行,直到您按下 [Ctrl]-[C] 為止。
二、虛擬內(nèi)存的概念
(1)Linux虛擬內(nèi)存實現(xiàn)機制
Linux虛擬內(nèi)存的實現(xiàn)需要六種機制的支持:地址映射機制、內(nèi)存分配回收機制、緩存和刷新機制、請求頁機制、交換機制、內(nèi)存共享機制。
首先內(nèi)存管理程序通過映射機制把用戶程序的邏輯地址映射到物理地址,在用戶程序運行時如果發(fā)現(xiàn)程序中要用的虛地址沒有對應(yīng)的物理內(nèi)存時,就發(fā)出了請求頁要求;如果有空閑的內(nèi)存可供分配,就請求分配內(nèi)存(于是用到了內(nèi)存的分配和回收),并把正在使用的物理頁記錄在緩存中(使用了緩存機制)。 如果沒有足夠的內(nèi)存可供分配,那么就調(diào)用交換機制,騰出一部分內(nèi)存。另外在地址映射中要通過TLB(翻譯后援存儲器)來尋找物理頁;交換機制中也要用到交換緩存,并且把物理頁內(nèi)容交換到交換文件中后也要修改頁表來映射文件地址。
(2)虛擬內(nèi)存容量設(shè)定
也許有人告訴你,應(yīng)該分配2倍于物理內(nèi)存的虛擬內(nèi)存,但這是個不固定的規(guī)律。如果你的物理保存比較小,可以這樣設(shè)定。如果你有1G物理內(nèi)存或更多的話,可以縮小一下虛擬內(nèi)存。Linux會把大量的內(nèi)存用做Cache的,但在資源緊張時回收回.。你只要看到swap為0或者很小就可以放心了,因為內(nèi)存放著不用才是最大的浪費。
三、使甩vmstat命令監(jiān)視虛擬內(nèi)存使用情況
vmstat是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計)的縮寫,可對操作系統(tǒng)的虛擬內(nèi)存、進程、CPU活動進行監(jiān)視。它是對系統(tǒng)的整體情況進行統(tǒng)計,不足之處是無法對某個進程進行深入分析。通常使用vmstat 5 5(表示在5秒時間內(nèi)進行5次采樣)命令測試。將得到一個數(shù)據(jù)匯總它可以反映真正的系統(tǒng)情況。
代碼如下:
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2
0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0
0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0
1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0
1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0
vmstat命令輸出分成六個部分:
(1)進程procs:
r:在運行隊列中等待的進程數(shù) 。
b:在等待io的進程數(shù) 。
(2)內(nèi)存memoy:
swpd:現(xiàn)時可用的交換內(nèi)存(單位KB)。
free:空閑的內(nèi)存(單位KB)。
buff: 緩沖去中的內(nèi)存數(shù)(單位:KB)。
cache:被用來做為高速緩存的內(nèi)存數(shù)(單位:KB)。
(3) swap交換頁面
si: 從磁盤交換到內(nèi)存的交換頁數(shù)量,單位:KB/秒。
so: 從內(nèi)存交換到磁盤的交換頁數(shù)量,單位:KB/秒。
(4) io塊設(shè)備:
bi: 發(fā)送到塊設(shè)備的塊數(shù),單位:塊/秒。
bo: 從塊設(shè)備接收到的塊數(shù),單位:塊/秒。
(5)system系統(tǒng):
in: 每秒的中斷數(shù),包括時鐘中斷。
cs: 每秒的環(huán)境(上下文)切換次數(shù)。
(6)cpu中央處理器:
cs:用戶進程使用的時間 。以百分比表示。
sy:系統(tǒng)進程使用的時間。 以百分比表示。
id:中央處理器的空閑時間 。以百分比表示。
如果 r經(jīng)常大于 4 ,且id經(jīng)常小于40,表示中央處理器的負荷很重。 如果bi,bo 長期不等于0,表示物理內(nèi)存容量太小。
四、Linux 服務(wù)器的內(nèi)存泄露和回收內(nèi)存的方法
1、內(nèi)存泄漏的定義:
一般我們常說的內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分配的,大小任意的(內(nèi)存塊的大小可以在程序運行期決定),使用完后必須顯示釋放的內(nèi)存。應(yīng)用程序一般使用malloc,realloc,new等函數(shù)從堆中分配到一塊內(nèi)存,使用完后,程序必須負責(zé)相應(yīng)的調(diào)用free或釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了。
2、內(nèi)存泄露的危害
從用戶使用程序的角度來看,內(nèi)存泄漏本身不會產(chǎn)生什么危害,作為一般的用戶,根本感覺不到內(nèi)存泄漏的存在。真正有危害的`是內(nèi)存泄漏的堆積,這會最終消耗盡系統(tǒng)所有的內(nèi)存。從這個角度來說,一次性內(nèi)存泄漏并沒有什么危害,因為它不會堆積,而隱式內(nèi)存泄漏危害性則非常大,因為較之于常發(fā)性和偶發(fā)性內(nèi)存泄漏它更難被檢測到。存在內(nèi)存泄漏問題的程序除了會占用更多的內(nèi)存外,還會使程序的性能急劇下降。對于服務(wù)器而言,如果出現(xiàn)這種情況,即使系統(tǒng)不崩潰,也會嚴重影響使用。
3、內(nèi)存泄露的檢測和回收
對于內(nèi)存溢出之類的麻煩可能大家在編寫指針比較多的復(fù)雜的程序的時候就會遇到。在 Linux 或者 unix 下,C、C++語言是最使用工具。但是我們的 C++ 程序缺乏相應(yīng)的手段來檢測內(nèi)存信息,而只能使用 top 指令觀察進程的動態(tài)內(nèi)存總額。而且程序退出時,我們無法獲知任何內(nèi)存泄漏信息。
使用kill命令
使用Linux命令回收內(nèi)存,我們可以使用Ps、Kill兩個命令檢測內(nèi)存使用情況和進行回收。在使用超級用戶權(quán)限時使用命令“Ps”,它會列出所有正在運行的程序名稱,和對應(yīng)的進程號(PID)。Kill命令的工作原理是:向Linux操作系統(tǒng)的內(nèi)核送出一個系統(tǒng)操作信號和程序的進程號(PID)。
應(yīng)用例子:
為了高效率回收內(nèi)存可以使用命令ps 參數(shù)v:
代碼如下:
[root@www ~]# ps v
PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND
2542 tty1 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty1
2543 tty2 Ss+ 0:00 0 8 1631 428 0.1 /sbin/mingetty tty2
2547 tty3 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty3
2548 tty4 Ss+ 0:00 0 8 1627 428 0.1 /sbin/mingetty tty4
2574 tty5 Ss+ 0:00 0 8 1631 432 0.1 /sbin/mingetty tty5
2587 tty6 Ss+ 0:00 0 8 1627 424 0.1 /sbin/mingetty tty6
2657 tty7 Ss+ 1:18 12 1710 29981 7040 3.0 /usr/bin/Xorg :0 -br -a
2670 pts/2 Ss 0:01 2 682 6213 1496 0.6 -bash
3008 pts/4 Ss 0:00 2 682 6221 1472 0.6 /bin/bash
3029 pts/4 S+ 0:00 2 32 1783 548 0.2 ping 192.168.1.12
3030 pts/2 R+ 0:00 2 73 5134 768 0.3 ps v
然后如果想回收Ping命令的內(nèi)存的話,使用命令:
代碼如下:
# Kill -9 3029
使用工具軟件
Memprof是一個非常具有吸引力且非常易于使用的軟件,它由Red Hat的Owen Talyor創(chuàng)立。這個工具是用于GNOME前端的Boehm-Demers-Weiser垃圾回收器。這個工具直接就可以執(zhí)行,并且其工作起來無需對源代碼進行任何修改。在程序執(zhí)行時,這個工具會以圖形化的方式顯示內(nèi)存的使用情況。
相關(guān)介紹:Linux
嚴格來講,Linux這個詞本身只表示Linux內(nèi)核,但人們已經(jīng)習(xí)慣了用Linux來形容整個基于Linux內(nèi)核,并且使用GNU 工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。
Linux擁有以下特性:類似于Unix的基本思想,支持完全免費與自由傳播,完全兼容POSIX1.0標準,支持多用戶、多任務(wù)、有著良好的界面、支持多種平臺。Linux 能運行主要的UNIX工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。它支持32位和64位硬件。Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計思想,是一個性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。
Linux有著許多不同的版本,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計算機硬件設(shè)備中,比如手機、平板電腦、路由器、視頻游戲控制臺、臺式計算機、大型機和超級計算機。
模式:
當(dāng)打開終端,第一行所見的就叫命令行提示符。我的是這樣的:
命令行提示符,顧名思義就是提示在其后面輸入命令。在你輸入新的一行命令前,這個命令提示符都會出現(xiàn)。分別解析一下上邊代表什么意思:
oscar 這是當(dāng)前用戶的名字。Linux是一個多用戶的操作系統(tǒng),Windows也可以。不過Linux的多用戶管理更方便。我們一般建議每個使用Linux系統(tǒng)的用戶都創(chuàng)建一個屬于自己的賬戶,便于隱私管理。
@ 這個符號我們應(yīng)該不陌生,我們的電子郵件一般都是 name@domain.com 這樣的不是嗎。這個@就表示英語里的at,是“在...里面,落戶在...的,在其中”的意思。@前面是用戶名,后面是所在的域。
oscar-laptop 這是當(dāng)前電腦/操作系統(tǒng)的名字。上面說了在@后面的是一個域,所以 oscar@oscar-laptop 就表示oscar-laptop這臺電腦的oscar這個用戶。oscar-laptop這個名稱在安裝此Linux系統(tǒng)時可以任意指定。
: 這是分隔符,沒有什么特別的涵義。
~ 這是當(dāng)前所在目錄的名字,會隨著用戶進入不同目錄而改變。~表示當(dāng)前用戶的家目錄,有點類似Windows系統(tǒng)的“我的文檔”這個目錄。
$ 指示你所具有的權(quán)限的字符。在Linux系統(tǒng)中有兩種可能:
因此, oscar@oscar-laptop:~$ 的意思就是:
你目前是以oscar這個用戶登錄;你的電腦名稱為oscar-laptop;你目前位于 ~ 目錄下,就是你的用戶家目錄。你是普通用戶,擁有有限的權(quán)限。
參數(shù)里可以包含多個參數(shù),由空格隔開,也可以包含數(shù)字,字母,等等。可以說,參數(shù)沒有固定的格式,但是一般來說還是遵循一定的規(guī)范的。
如果我們要一次加好幾個短參數(shù),可以用空格隔開,例如:
多個短參數(shù)也可以合并在一起,例如上面的命令等價于:
請注意:參數(shù)的字母的大小寫是有區(qū)別的,大寫的T和小寫的t通常表示不同意思。
如果有多個長參數(shù),是不能像多個短參數(shù)那樣合并寫的。而是只能以空格隔開,例如:
當(dāng)然我們也可以組合使用短參數(shù)和長參數(shù),例如:
有時候,同一個意義的參數(shù)有短參數(shù)和長參數(shù)兩種形式,效果是一樣的,可以任選哪一種。
有一些參數(shù)你還需要給它賦一個值才行。而且短參數(shù)和長參數(shù)的賦值的方式不盡相同。
例如,短參數(shù)賦值,通常是這樣的:
表示把10賦值給p參數(shù)。
如果是長參數(shù),則一般是這樣賦值:
長參數(shù)的方式更加容易理解,但是不如短參數(shù)那么簡潔。
正如我們說過的,參數(shù)的形式?jīng)]有絕對的準則。我們上面給出的規(guī)則是一般的,有些命令的參數(shù)格式可能是我們沒怎么見過的。
有些參數(shù)就不一樣,而且取決于命令。例如對于 ls 這個命令,假如后面帶了一個參數(shù),這個參數(shù)是一個目錄的路徑名的話,那么就會列出此目錄下的文件。
兩種類型的文件
簡單起見,我們把Linux下的文件分為兩大類:
在一個文件系統(tǒng)中,我們總有一個被稱為根目錄的東西,這個根目錄里包含了所有其他目錄和文件。Linux中有且只有一個根目錄,就是
是的,就是用一個斜杠表示。沒有比根目錄再高一階的目錄了,因為沒有目錄包含根目錄,根目錄就是Linux最頂層的目錄。
Linux系統(tǒng)安裝后,包含了很多的文件和目錄(雖然其實都是文件),我們很容易迷失在“茫茫文海”中。
當(dāng)然我們不可能一下子列出Linux中的所有文件,那不現(xiàn)實。但是我們可以向你展示如何在Linux的目錄樹中來回穿梭,你可以知道此刻你位于哪個目錄下。就好比能看懂Linux這個很大的“地圖”。
pwd 是英語Print Working Directory的縮寫,表示“打印當(dāng)前工作目錄”。
which 命令:獲取命令的可執(zhí)行文件的位置,which命令用于顯示一個命令的對應(yīng)的可執(zhí)行程序的位置。可能聽起來有點拗口。
在Linux下,每一條命令其實對應(yīng)了一個可執(zhí)行程序。我們在終端中輸入命令,再按回車的時候,其實就是執(zhí)行了對應(yīng)的那個程序。比如說,pwd命令對應(yīng)的pwd程序就是存在于Linux中的。
which命令接受一個參數(shù),也就是你想要知道其可執(zhí)行程序位于哪里的那個命令。
我們來測試一下,就拿pwd命令來測試好了:
得到:
因此,pwd命令對應(yīng)的pwd這個可執(zhí)行程序位于/bin目錄中。
我們也可以注意到Linux中的可執(zhí)行程序和Windows中不太一樣,在Windows中可執(zhí)行程序一般以.exe結(jié)尾,而Linux中一般是沒有后綴名的。
Linux中的可執(zhí)行程序也不是都位于相同目錄的。我們可以來測試一下which命令本身對應(yīng)的可執(zhí)行程序位于哪里:
我們可以看到,which命令對應(yīng)的可執(zhí)行程序which并不位于/bin中,而是在/usr/bin中。
Ubuntu的終端默認是有顏色標注的,一般來說:
如果在你的終端里沒有標明顏色,那么你可以加上參數(shù) --color=auto 來開啟顏色標注。如下:
如果你不需要顏色標注,那么可以用 --color=none 來關(guān)閉顏色標注。如下:
當(dāng)然,為了避免每次都輸入這么一串額外的參數(shù),其實我們可以在一個配置文件里修改,使得永久顯示顏色或不顯示顏色。
在Linux,以點( . )開頭的文件是隱藏文件,不過這里不包括開頭的兩個 . 和 .. ,這兩個的含義如下:
- . (一個點)表示當(dāng)前目錄。在當(dāng)前情況下,就是 /home/oscar 。
- .. (兩個點)表示上一級目錄。因為當(dāng)前目錄是/home/oscar,所以上一級目錄就是 /home 。
我們有一個大寫的參數(shù) -A,它的作用和小寫的-a幾乎一樣,唯一不同就是-A不列出 . 和 .. 這兩個文件。
-l 這個參數(shù)算是ls命令最常用的了。加上-l參數(shù)使得ls命令列出一個顯示文件和目錄的詳細信息的列表。
當(dāng)我們僅用ls -l時,列出的文件詳細信息中,文件的大小是以字節(jié)為單位的。有時這不是太直觀。我們可以再加一個參數(shù)-h,h是humain readable的縮寫,表示“適合人類閱讀的”。所以我們的命令變成了:
t是time的縮寫。
du命令也是很有用的,因為它可以讓我們知道文件和目錄所占的空間大小。
雖然ls -l命令也可以顯示文件和目錄的大小,但是du命令統(tǒng)計的才是真正的文件大小。du命令會深入遍歷每個目錄的子目錄,把所有文件的大小都做一個統(tǒng)計。
du是英語disk usage的縮寫,表示“磁盤使用/占用”。
我們的du命令也可以使用參數(shù)。
cat命令和less命令:顯示文件內(nèi)容,這兩個命令只能顯示文件內(nèi)容,并不能對文件內(nèi)容進行修改。
一次性顯示文件的所有內(nèi)容,如果你想要在顯示的文件內(nèi)容上加上行號,那么你可以加上 -n 這個參數(shù)。
分頁顯示文件內(nèi)容
head命令和tail命令:顯示文件的開頭和結(jié)尾。
顯示文件開頭,默認情況下,head會顯示文件的頭10行。我們也可以指定顯示的行數(shù),用 -n 這個參數(shù):
就會顯示文件的頭5行。
顯示文件結(jié)尾。默認情況下,tail會顯示文件的尾10行。
我們也可以指定顯示的行數(shù),用 -n 這個參數(shù):
就會顯示文件的尾5行。
tail命令還可以配合 -f 參數(shù)來實時追蹤文件的更新:
這樣,就會檢查文件是否有追加內(nèi)容,如果有,就顯示新增內(nèi)容。
默認地,tail -f會每過1秒檢查一下文件是否有新內(nèi)容。你也可以指定間隔檢查的秒數(shù),用 -s 參數(shù):
可以用快捷鍵 Ctrl + c 來終止tail -f 命令。
touch命令和mkdir命令:創(chuàng)建文件和目錄
創(chuàng)建一個空白文件。事實上,Linux沒有一個命令是專門用來創(chuàng)建一個空白文件的。touch命令其實一開始的設(shè)計初衷是修改文件的時間戳,就是可以修改文件的創(chuàng)建時間或修改時間,讓電腦以為文件是在那個時候被修改或創(chuàng)建的。但是touch命令如果后面跟著的文件名是不存在的,那么它就會新建一個。
事實上,我們可以用touch命令同時創(chuàng)建多個文件:
如果我所要創(chuàng)建的文件的名字里有空格怎么辦呢?
很簡單,加上雙引號:
創(chuàng)建一個目錄。
mkdir也可以同時創(chuàng)建好幾個目錄:
如果我所要創(chuàng)建的目錄的名字里有空格怎么辦呢?
很簡單,加上雙引號:
我們還可以用 -p 參數(shù)來遞歸創(chuàng)建目錄結(jié)構(gòu)。
比如:
cp命令和mv命令:拷貝文件和移動文件
拷貝文件或目錄
cp是英語copy的縮寫,表示“拷貝”。所以,顧名思義,此命令用于拷貝。cp命令不僅可以拷貝單個文件,還可以拷貝多個文件,也可以拷貝目錄。
復(fù)制文件到另一個目錄只需要把cp命令的第二個參數(shù)換成目錄名。
拷貝目錄
要拷貝目錄,只要在cp命令之后加上-R參數(shù)(注意是大寫的R)。拷貝的時候,目錄中的所有內(nèi)容(子目錄和文件)都會被拷貝。
使用通配符*
*號(星號)是很常用的正則表達式的符號,被稱為“通配符”,
所以如果我們用如下命令:
那么就會把當(dāng)前目錄下所有txt文件拷貝到folder這個子目錄當(dāng)中。
又如:
那么就會把當(dāng)前目錄下凡是以ha開頭的文件都拷貝到folder目錄中。
移動文件
mv是英語move的縮寫,表示“移動”。mv命令有兩個功能:
用mv命令來移動目錄很簡單,不需要額外的參數(shù),就跟移動文件一樣:
當(dāng)然,我們也可以使用通配符。
除了移動文件,mv命令還可以用于重命名文件。
事實上,Linux中沒有一個專門的命令用于重命名文件。之所以mv命令可以重命名文件,其實還是歸因于它的機制:移動文件。經(jīng)過mv移動之后,原始文件變成了新的名字的文件,文件內(nèi)容是不變的,這不就相當(dāng)于重命名了嗎?
以上命令會將new_file重命名為renamed_file。
刪除文件和目錄
rm命令可以刪除一個文件,多個文件,目錄,甚至你的整個Linux系統(tǒng)(如果你愿意的話)。
以上命令刪除當(dāng)前目錄下的new_file_copy這個文件。
我們也可以同時刪除多個文件,只要用空格隔開每個文件即可。例如:
保險起見,用rm命令刪除文件時,可以加上 -i 參數(shù),這樣對于每一個要刪除的文件,終端都會詢問我們是否確定刪除。i是英語inform的縮寫,表示“告知,通知”。
有兩種回答:
y:是英語yes的縮寫,表示“是”。那么回車確認后,文件就刪除了。
n:是英語no的縮寫,表示“否”。那么回車確認后,文件不會刪除。
如果在rm命令后加上-f參數(shù),那么終端不會詢問用戶是否確定刪除文件,不論如何,文件會立刻被強制刪除。
f是英語force的縮寫。
以上命令會強制刪除file文件。
r是英語recursive的縮寫,表示“遞歸的”。所以使用-r參數(shù),可以使rm命令刪除目錄,并且遞歸刪除其包含的子目錄和文件。
這個命令也挺危險的,用得不好可能你的子目錄和文件都沒了。
以上命令會刪除one這個目錄,包括其子目錄和文件。
其實,也存在一個命令
看著和 rm -r 挺像的。但是這個命令有個局限性:只能刪除空的目錄。
創(chuàng)建鏈接
事實上,Linux下有兩種鏈接類型:
為了區(qū)分這兩種鏈接類型的不同,我們首先來談一談如Linux這樣的操作系統(tǒng)中文件在硬盤上的存放。
文件在硬盤上存儲時,大致來說(請注意我用了“大致來說”),每個文件有兩部分:
文件名的列表是儲存在硬盤的其他地方的,和文件內(nèi)容分開存放,這樣方便Linux管理。
注意:為什么我上面要用“大致說來”呢?因為此處我們簡化了描述,其實每個文件有三部分:
我們這里簡化地將文件分為兩部分:文件名和文件內(nèi)容。因為我們不想把事情復(fù)雜化,我們想要理解兩種鏈接類型的區(qū)別,暫時只要知道這些就夠了。
每個文件的文件內(nèi)容被分配到一個標示號碼,就是inode。因此每個文件名都綁定到它的文件內(nèi)容(用inode標識)。原理如下圖:
下面我們學(xué)習(xí)如何創(chuàng)建硬鏈接和軟連接。
比之軟鏈接,硬鏈接的使用幾率小很多。但是我們還是要學(xué)習(xí)一下,畢竟可能會用到。
硬鏈接的原理:使鏈接的兩個文件共享同樣的文件內(nèi)容,也就是同樣的inode。
所以一旦文件1和文件2之間有了硬鏈接,那么你修改文件1或文件2,其實修改的是相同的一塊內(nèi)容。只不過我們可以用兩個文件名來取到文件內(nèi)容。
硬鏈接有一個缺陷:只能創(chuàng)建指向文件的硬鏈接,不能創(chuàng)建指向目錄的硬鏈接。但是軟鏈接可以指向文件或目錄。當(dāng)然了,事實上,通過一些參數(shù)的修改,也可以創(chuàng)建指向目錄的硬鏈接,但是比較復(fù)雜,這里不再詳述。所以對于目錄的鏈接,我們一般都是用軟鏈接。
硬鏈接原理圖:
要創(chuàng)建硬鏈接,直接用ln命令,不加任何參數(shù):
我們可以用ls -i命令查看一下(-i參數(shù)可以顯示文件的inode)。對于硬鏈接來說,刪除任意一方的文件,共同指向的文件內(nèi)容并不會從硬盤上被刪除。
我們用ls -l命令查看文件信息的時候,第二列的那個2,其實是表示擁有相同inode號的文件數(shù)。不難理解,因為它們指向相同的文件內(nèi)容,所以共享一個inode。
這個第二列的數(shù)字,一般來說對于普通文件,都是1,因為不同文件inode不同嘛。對于目錄來說,這第二列的數(shù)字標明目錄內(nèi)所含文件數(shù)目。
其實,軟鏈接才是真正像我們在Windows下的快捷方式的,其原理很相似。
創(chuàng)建硬鏈接是ln不帶任何參數(shù),但是要創(chuàng)建軟鏈接需要加上-s參數(shù)。s是symbolic(符號的)的縮寫。
file2指向的不再是file1的文件內(nèi)容(和硬鏈接不同),而是指向file1的文件名。
軟鏈接原理圖:
用ls -l命令查看一下,會發(fā)現(xiàn)形式和之前的硬鏈接不一樣噢,file2的信息是這樣的: file2-file1,表示file2指向file1。
而且file2前面的權(quán)限那里的第一個字母變成了l,表示link(鏈接)。之前硬鏈接的時候是沒有l(wèi)的,硬鏈接外表看起來就和普通文件類似。
我們用ls -l命令查看文件信息的時候,第二列的那個1,表示擁有相同inode號的文件數(shù)。不難理解,因為file2指向file1,它們并沒有指向同一塊文件內(nèi)容,所以它們的inode號不相同。
軟鏈接的特點:
Linux編程中在命令行啟動另一個可執(zhí)行文件或調(diào)用命令用system函數(shù)最簡單了,這個函數(shù)原理是在你編寫的那個程序的內(nèi)部啟動另一個程序或命令,從而創(chuàng)建一個新進程,并等待這個進程執(zhí)行完畢退出。如果正常執(zhí)行,system函數(shù)將返回被執(zhí)行程序或命令的退出碼;如果無法運行這個程序或命令,將返回錯誤代碼127;如果是其他錯誤,返回-1。這個函數(shù)的原型是:
#include stdlib.h
int system(const char *string);
參數(shù)string是將要執(zhí)行的程序文件名或路徑,如果是啟動一個命令就是一個命令字符串。
還有一種執(zhí)行外部程序的方法是exec系列函數(shù),一般是在fork的子進程里面調(diào)用exec系列函數(shù),那主進程里直接調(diào)用exec系列不行嗎,為什么要fork再在子進程里調(diào)用呢?因為exec系列的函數(shù)(包括execl函數(shù))都是將當(dāng)前進程替換成新進程,也就是說新進程啟動后原來的進程就不存在了,exec系列函數(shù)后面的那些代碼就不會再執(zhí)行了。如果你不放在fork子進程里面,那主進程在執(zhí)行execl函數(shù)后就完全不存在了,所以exec系列函數(shù)的使用都是先fork然后在子進程里面調(diào)用。因為exec系列函數(shù)都要使用fork調(diào)用,所以我一般是用system函數(shù)。
作為一個程序員或者測試開發(fā)人員,我們在進行項目部署和運維時,經(jīng)常會用到一些linux命令,可是這些命令老是忘記,每次用到的時候都要去谷歌百度,很是麻煩!這不,為了自己使用方便,對常見的linux命令, SHELL, VIM, Linux性能調(diào)優(yōu)和linux kernel的總結(jié),以便在用到時能夠快速地找到相關(guān)命令,同時有需要的朋友也可以參考搜藏該篇文章!文章對講到的每個命令都有詳細的參數(shù)解釋,并且給出一些常用例子,因此也非常適合用來學(xué)習(xí)!
shell(命令解釋器)自帶的命令稱為內(nèi)部命令,其它的是外部命令
內(nèi)部命令使用help幫助:help cd
外部命令使用help幫助:ls --help
type命令:用于區(qū)分是內(nèi)部命令還是外部命令:
ls is aliased to `ls --color=auto' #外部命令
cd is a shell builtin #內(nèi)部命令
pwd命令:顯示當(dāng)前目錄
ls命令:查看目錄和文件名稱
ls -l 查看目錄各個字段含義
第一字段:首字母代表的是文件類型 ,其中"-"為普通文件、"d"為目錄文件、"c"為字符設(shè)備文件、"b"為塊設(shè)備文件、"p"為管道文件、"l"為鏈接文件、"s"為socket文件。“rwx”分別代表擁有讀、寫和執(zhí)行權(quán)限,"-代表無對應(yīng)權(quán)限。三個"rwx"依次代表文件所有者、文件所有者所在用戶組、其它用戶對文件擁有的權(quán)限。
第二字段:文件硬連接數(shù)量
第三字段:文件擁有者
第四字段:文件擁有者所在組
第五字段:文件大小(以字節(jié)為單位)
第六字段:文件最后更改時間
第七字段:文件名(若為鏈接文件則追加顯示其鏈接的原文件的路徑)
ls命令其它參數(shù)含義:
-a顯示隱藏文件(.開頭的文件)
-r逆序排序
-t按照時間順序顯示
-R遞歸顯示
ls -lartR : 按照時間順序倒序顯示所有文件及其文件夾的文件
cd命令:更改當(dāng)前的工作目錄
cd /path/... 絕對路徑
cd ./path/... 相對路徑(./可以省略)
cd ../path/... 相對路徑
mkdir -p 遞歸目錄:遞歸創(chuàng)建目錄
rmdir命令:刪除目錄
rmdir a/b/c/d/e/ #刪除空目錄
rm -r a/b/c/d/ #遞歸刪除目錄,但是系統(tǒng)會做多次詢問
rm -rf a/b/c/d/ #刪除目錄,不做任何詢問
cp命令:復(fù)制文件和目錄
-r 復(fù)制目錄
-p 保留用戶、權(quán)限、時間等文件屬性
mv命令:移動文件和重命名
mv *.log 目標目錄
通配符:
*匹配任何字符串
?匹配一個字符串
[xyz]任何一個字符串
[a-z]匹配一個范圍
cat命令:文本內(nèi)容顯示到終端
head命令:查看文件開頭
head -3 文件名稱 #顯示文件開頭3行
tail命令:查看文件末尾
tail -3 文件名稱 #顯示文件末尾3行
tail常用參數(shù)-f,文件內(nèi)容更新后,同步顯示更新的文件信息
tail -f 文件名稱
wc命令:統(tǒng)計文件內(nèi)容信息
wc 文件名稱
useradd命令:新建用戶
useradd 用戶名
userdel命令:刪除用戶
userdel 用戶名 用戶所在的家目錄不會被刪除
userdel -r 用戶名 用戶相關(guān)的所有配置都會被刪除
passwd命令:修改用戶密碼
passwd 用戶名
usermod命令:修改用戶屬性
/etc/passwd文件:查看用戶文件
tail /etc/passwd
/etc/shadow文件:查看用戶密碼
tail /etc/shadow
groupadd命令:添加用戶組
groupadd 用戶組
groupdel命令:刪除用戶組
groupdel 用戶組
用戶切換
su 用戶名 切換用戶,但是用戶所在環(huán)境不變,即pwd路徑不會變化
su - 用戶名 切換用戶,同時會切換到用戶家目錄,即/home/用戶名
sudo命令:普通用戶需要執(zhí)行root用戶權(quán)限的解決方案。
以下是一些常用命令匯總;The following table provides a reminder of most of the commands that we have covered so far. If you include the three, as-yet-unmentioned, commands in the last column, then you will probably be able to achieve 95% of everything that you will ever want to do in Unix (remember, you can use the man command to find out more about top , ps , and kill ). The power comes from how you can use combinations of these commands.
-c 'cc-address' -b 'bcc-address'
'to-address' | Command to send email | | mail -s "Subject"
to-address Filename` | Command to send email with attachment |
File Permission commands
Hope this Linux reference guide helps you!
希望這些常用的命令和系統(tǒng)原理,以及l(fā)inux操作可以幫助大家提升linux命令和操作!!!
linux命令在系統(tǒng)中有兩種類型:內(nèi)置Shell命令和Linux命令。像cd,cp,ls,rm,mkdir等都是linux命令。希望能幫到你,謝謝。
呵呵,這是bash的功能吧,你輸入
ls"
或
ls`
都有和
ls'類似的效果。
"
'
`都可以看作是引號,在命令中通常要成對出現(xiàn),你只打了一個',所以系統(tǒng)要等你輸下一個以配對處理。
這個特性有助于編寫腳本。在本例中沒有什么應(yīng)用。
文章標題:linux執(zhí)行命令原理,Linux 操作命令
標題路徑:http://chinadenli.net/article46/dsehohg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、App開發(fā)、網(wǎng)站策劃、面包屑導(dǎo)航、微信公眾號、品牌網(wǎng)站設(shè)計
聲明:本網(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)