Linux基本命令+Makefile

1.linux下查看進程占用cpu的情況(top);

格式
top [-] [d delay] [q] [c] [S] [s] [i] [n]
主要參數

  • d:指定更新的間隔,以秒計算。
  • q:沒有任何延遲的更新。如果使用者有超級用戶,則top命令將會以最高的優先序執行。
  • S:累積模式,會將己完成或消失的子行程的CPU時間累積起來。
  • s:安全模式。
  • n:顯示更新的次數,完成后將會退出top。
    這里寫圖片描述
    ??在圖1中,第一行表示的項目依次為當前時間、系統啟動時間、當前系統登錄用戶數目、平均負載(最近一分鐘,五分鐘和十五分鐘的系統負載。load average數據是每隔5秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高于5的時候就表明系統在超負荷運轉了。)。第二行顯示的是所有啟動的進程、目前運行的、掛起(Sleeping)的和無用(Zombie)的進程。
    第三行,cpu狀態信息,具體屬性說明如下:
  • 5.9%us — 用戶空間占用CPU的百分比。
  • 3.4% sy — 內核空間占用CPU的百分比。
  • 0.0% ni — 改變過優先級的進程占用CPU的百分比
  • 90.4% id — 空閑CPU百分比
  • 0.0% wa — IO等待占用CPU的百分比
  • 0.0% hi — 硬中斷(Hardware IRQ)占用CPU的百分比
  • 0.2% si — 軟中斷(Software Interrupts)占用CPU的百分比

??第四行顯示物理內存的使用情況,包括總的可以使用的內存、已用內存、空閑內存、緩沖區占用的內存。
??第五行顯示交換分區使用情況,包括總的交換分區、使用的、空閑的和用于高速緩存的大小。對于內存監控,在top里我們要時刻監控第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。
??第七行以下:各進程(任務)的狀態監控,項目列信息說明如下:

  • PID — 進程id
  • USER — 進程所有者
  • PR — 進程優先級
  • NI — nice值。負值表示高優先級,正值表示低優先級
  • VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
  • RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
  • SHR — 共享內存大小,單位kb
  • S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程
  • %CPU — 上次更新到現在的CPU時間占用百分比
  • %MEM — 進程使用的物理內存百分比
  • TIME+ — 進程使用的CPU時間總計,單位1/100秒
  • COMMAND — 進程名稱(命令名/命令行)

在top基本視圖中,按鍵盤數字“1”,可監控每個邏輯CPU的狀況:
這里寫圖片描述
觀察上圖,服務器有16個邏輯CPU,實際上是4個物理CPU。再按數字鍵1,就會返回到top基本視圖界面。
高亮顯示當前運行進程
敲擊鍵盤“b”(打開/關閉加亮效果),top的視圖變化如下:
這里寫圖片描述
我們發現進程id為2570的“top”進程被加亮了,top進程就是視圖第二行顯示的唯一的運行態(runing)的那個進程,可以通過敲擊“y”鍵關閉或打開運行態進程的加亮效果。

2.查看內存使用情況free

free命令用來顯示內存的使用情況,使用權限是所有用戶。
格式
free [-b-k-m] [-o] [-s delay] [-t] [-V]
主要參數

  • -b -k -m:分別以字節(KB、MB)為單位顯示內存使用情況。
  • -s delay:顯示每隔多少秒數來顯示一次內存使用情況。
  • -t:顯示內存總和列。
  • -o:不顯示緩沖區調節列。

應用實例
??free命令是用來查看內存使用情況的主要命令。和top命令相比,它的優點是使用簡單,并且只占用很少的系統資源。通過-S參數可以使用free命令不間斷地監視有多少內存在使用,這樣可以把它當作一個方便實時監控器。
#free -b -s5
??使用這個命令后終端會連續不斷地報告內存使用情況(以字節為單位),每5秒更新一次。
這里寫圖片描述

3.linux下查看目錄(ls);

4.顯示日期的指令: date

這里寫圖片描述

5.顯示日歷的指令:cal

這里寫圖片描述
這里寫圖片描述

5.1簡單好用的計算器:bc

這里寫圖片描述
怎么10/100會變成0呢?這是因為bc預設僅輸出整數,如果要輸出小數點下位數,那么就必須要執行 scale=number ,那個number就是小數點位數,例如:
這里寫圖片描述

數據同步寫入磁盤: sync

輸入sync,在內存中尚未被更新的數據就會被寫入硬盤中;所以,這個指令在系統關機重新啟動之前很重要!最好多執行幾次!

7.慣用的關機指令:shutdown

這里寫圖片描述

8.改變文件擁有者:chown

這里寫圖片描述

9.改變文件的權限:chmod

權限的設定方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。
–數字類型改變檔案權限:
這里寫圖片描述

10.變換目錄:cd

這里寫圖片描述

11.顯示當前所在目錄:pwd

這里寫圖片描述

12.檔案與目錄的顯示:ls

這里寫圖片描述

13.觀察文件類型:file

這里寫圖片描述

14. 網絡操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger。

netstat 查看網絡信息
telnet命令通常用來遠程登錄。telnet程序是基于TELNET協議的遠程登錄客戶端程序。Telnet協議是TCP/IP協議族中的一員,是Internet遠程登錄服務的標準協議和主要方式。它為用戶提供了在本地計算機上完成遠程主機工作的能力。
telnet 192.168.120.209

15.終止當前執行命令 ctrl+c

16.打開終端: ctrl+alt+t;關閉當前終端:exit

vi編輯器命令

三種工作模式:輸入模式、命令模式、底行命令模式。三種模式轉換方式如下:
這里寫圖片描述

  • i鍵–光標之前插入
  • I鍵–光標所在行的行首插入
  • a鍵– 光標之后插入
  • A鍵–光標所在行的行尾插入
  • o鍵–光標所在行的下一行插入
  • O鍵–光標所在行的上一行插入
  • x鍵–刪除光標所在字符
  • X鍵–刪除光標前面的字符
  • dd–刪除光標所在的整行
  • u鍵–取消最近的一次操作
  • U鍵–取消所有的操作

底行命令

  • :set number 顯示正文行號
  • :set autoindent 設置正文自動縮進

文件間的文本移動(前提:目標文件已存在)

  • :1,5 w filename
  • :1,5 w >> filename

文本塊移動

  • :1,3 m 7

按行復制

  • :1,3 co . 將1-3行復制到光標所在位置
  • :1.3 co 7 將1-3行復制到第7行

編輯多個文件

  • vi m1.c m2.c m3.c

編輯下一個文件

  • : n

跳躍式編輯

  • : e m3.c

返回剛才編輯的文件

  • :e #
  • :wq 存盤后退出
  • :q 若無修改直接退出
  • :w filename 另存為
  • :w 將編輯緩沖區的文件寫入編輯的文件中
  • :q! 強制退出,丟棄緩沖區內容

注 makefile

??makefile關系到了整個工程的編譯規則。一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至于進行更復雜的功能操作,因為makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。
??makefile帶來的好處就是——“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。
??一般來說,無論是C、C++、還是pas,首先要把源文件編譯成中間代碼文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,這個動作叫做編譯(compile)。然后再把大量的Object File合成執行文件,這個動作叫作鏈接(link)。
??編譯時,編譯器需要的是語法的正確,函數與變量的聲明的正確。對于后者,通常是你需要告訴編譯器頭文件的所在位置(頭文件中應該只是聲明,而定義應該放在C/C++文件中),只要所有的語法正確,編譯器就可以編譯出中間目標文件。一般來說,每個源文件都應該對應于一個中間目標文件(O文件或是OBJ文件)。
??鏈接時,主要是鏈接函數和全局變量,所以,我們可以使用這些中間目標文件(O文件或是OBJ文件)來鏈接我們的應用程序。鏈接器并不管函數所在的源文件,只管函數的中間目標文件(Object File),在大多數時候,由于源文件太多,編譯生成的中間目標文件太多,而在鏈接時需要明顯地指出中間目標文件名,這對于編譯很不方便,所以,我們要給中間目標文件打個包,在Windows下這種包叫“庫文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
??總結一下,源文件首先會生成中間目標文件,再由中間目標文件生成執行文件。在編譯時,編譯器只檢測程序語法,和函數、變量是否被聲明。如果函數未被聲明,編譯器會給出一個警告,但可以生成Object File。而在鏈接程序時,鏈接器會在所有的Object File中找尋函數的實現,如果找不到,那到就會報鏈接錯誤碼(Linker Error).
新建文件 vi、vim、touch
假設我們有下面這樣的程序:

/*main.c*/
#include "mytool1.h"
#include "mytool2.h"
#include <stdio.h>int main(int argc,char *argv[])
{mytool1_print("hello");mytool2_print("hello");
}
/*mytoo1.h*/
#ifndef _MYTOOL1_H
#define _MYTOOL1_H
void mytool1_print(char *print_str);
#endif
/*mytool1.c*/
#include "mytool1.h"void mytool1_print(char *print_str)
{printf("This is mytool1 print %s\n",print_str);
}
/*mytool2.h*/
#ifndef _MYTOOL2_H
#define _MYTOOL2_H
void mytool2_print(char *print_str);
#endif
/*mytool2.c*/
#include "mytool2.h"void mytool2_print(char *print_str)
{printf("This is mytool2 print %s\n",print_str);
}

我們可以這么編譯鏈接這個程序:

gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o myprint main.o mytool1.o mytool2.o

這樣之后只需執行命令”./myprint”,便可以簡單的運行這個程序。
但是當我們修改了其中的一個文件之后是不是還要不厭其煩的輸入上面的編譯命令?

??為了解決這一問題,我們有個好方法去解決,那就是編寫一個makefile文件,用make命令去編譯上面的程序。
執行命令”vim Makefile”
編寫如下代碼:

main: main.o mytool1.o mytool2.o
[Tab]gcc -o myprint main.o mytool1.o mytool2.o
main.o: main.c mytool1.h mytool2.h
[Tab]gcc -c main.c
mytool1.o: mytool1.c mytool1.h
[Tab]gcc -c mytool1.c
mytool2.o: mytool2.c mytool2.h
[Tab]gcc -c mytool2.c

保存后執行命令“make -f Makefile”
這樣也可以生成一個可執行程序。
有了這個Makefile文件之后,無論我們修改什么地方,只要make一些這個文件,就可以輕松的生成可執行文件。
在Makefile中#開始的行為注釋行,此文件的一般格式為:
(target目標):(components依賴對象)
【Tab制表符按鍵】(rule規則)
??第一行為依賴關系,比如上面那個Makefile文件的第一行,我們的目標main的依賴對象為main.o、mytool1.o和mytool2.o
??第二行為執行規則,當依賴的對象在目標修改后修改的話,就要執行規則這一行所指定的命令,注意,這一行開頭必須是Tab鍵。
??上面的make里的-f參數表示尋找到名為Makefile的文件進行make,因為make只能自動識別名為makefile或者Makefiile兩個文件,如果你編譯的makefile文件名為my_makefile的話,就需要加上-f參數,否則make無法找到你指定的my_makefile文件。
??此外,makefile里面還有三個非常有用的變量:$@(目標文件)、$^(所有的依賴文件)和$<(第一個依賴文件)
??如果使用這三個變量,我們的Makefile文件可以簡化為:

main: main.o mytool1.o mytool2.o
[Tab]gcc -o $@ $^
main.o: main.c mytool1.h mytool2.h
[Tab]gcc -c $<
mytool1.o: mytool1.c mytool1.h
[Tab]gcc -c $<
mytool2.o: mytool2.c mytool2.h
[Tab]gcc -c $<

轉載于:https://www.cnblogs.com/Y-S-X/p/8331654.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452931.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構與算法--2.數組的定位排序

問題&#xff1a; 給定一個數組A以及下標i&#xff0c;將數組元素進行調整&#xff0c;使得所有比A[i]小的元素排在前邊&#xff0c;接著是所有等于A[i]的元素&#xff0c;最后排列的是比A[i]大的元素 思路&#xff1a; 第一步&#xff1a;將數組分成兩部分&#xff0c;一部…

mysql語法題_mysql數據庫題語法練習

一、練習。導入下面sql執行語句/*數據導入&#xff1a;Navicat Premium Data TransferSource Server : localhostSource Server Type : MySQLSource Server Version : 50624Source Host : localhostSource Database : sqlexamTarget Server Type : MySQLTarget Server Version …

ipv4的不足

v地址基本耗盡&#xff0c;這是當前最棘手的問題v路由表越來越大v功能不足&#xff0c;缺少對多媒體信息傳輸的支持v缺少對高速傳輸的支持v缺少對安全的支持v缺少對主機漫游的支持

OpenGL開發庫的詳細介紹

OpenGL開發庫的組成 開發基于OpenGL的應用程序&#xff0c;必須先了解OpenGL的庫函數。它采用C語言風格&#xff0c;提供大量的函數來進行圖形的處理和顯示。OpenGL庫函數的命名方式非常有規律。所有OpenGL函數采用了以下格式<庫前綴><根命令><可選的參數個數&g…

thinkphp5運行原理_ThinkPHP5.1~5.2全版本遠程代碼執行高危漏洞預警

漏洞綜述關于ThinkPHPThinkPHP是一個快速、兼容而且簡單的輕量級國產PHP開發框架&#xff0c;其借鑒了國外很多優秀的框架和模式&#xff0c;包括使用面向對象的開發結構和MVC模式&#xff0c;融合了Struts的思想和TagLib(標簽庫)、RoR的ORM映射和ActiveRecord模式等。該框架常…

ASP.NET MVC中controller和view相互傳值的方式

ASP.NET MVC中Controller向view傳值的方式&#xff1a; ViewBag、ViewData、TempData單個值的傳遞Json匿名類型ExpandoObjectCookieViewModel(向普通View頁面傳個Model對象、向強類型頁面傳一個Model對象、用一個ViewModel對象解決所有問題)ASP.NET MVC中view向Controller傳值的…

自定義SeekBar 實時顯示百分比進度

進度下方實時顯示百分比進度禁止掉了SeekBar的滑動事件 詳情 githus地址

數據結構與算法--3.字符串的旋轉

題目&#xff1a; A是含有n個元素的數組&#xff0c;如果可以申請到最大內存&#xff0c;那么把A從位置i開始旋轉是比較簡單的。例如&#xff1a;A:a,b,c,d,e.其中i3,旋轉后的字符串A為&#xff1a;d,e,a,b,c要求設計一個時間復雜度為O(n),空間復雜度為O(1)的算法&#xff0c;…

三網融合情況下,實時語音通信技術解決之道

隨著技術和標準的不斷成熟,伴隨著“三網合一”的大潮,VoIP可望成為下一代電信基礎設施結構的楊心,使未來各電信業務綜合統一在IP網絡上成為可能,導致數據的融合和未來電信市場的重組,并帶來新的經濟模式和價值鏈。 Internet在全世界范圍內的快速發展和語音信號處理技術的進步,促…

ipv6相對于ipv4的改進

v更大的地址空間&#xff1a;16字節&#xff0c;128位v首部的簡化&#xff1a;只有7個固定域&#xff0c;撤消了有關分段的域和校驗和域&#xff0c;以便更快地處理分組&#xff0c;提高路由器的吞吐量縮短延時。v更好地支持選項&#xff1a;選項是有次序的&#xff0c;以便路由…

輕量高效的開源JavaScript插件和庫 【轉】

圖片布局輪播圖彈出層音頻視頻編輯器字符串表單存儲動畫時間其它加載器構建工具測試包管理器CDN圖片 baguetteBox.js - 是一個簡單易用的響應式圖像燈箱效果腳本。demoLightgallery.js - 是一個功能齊全的JavaScript圖像燈箱插件。demoviewerjs - 是一個圖像預覽插件。democrop…

Linux內核中的常用宏container_of其實很簡單【轉】

轉自&#xff1a;http://blog.csdn.net/npy_lp/article/details/7010752 開發平臺&#xff1a;Ubuntu11.04 編 譯器&#xff1a;gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4) Container_of在Linux內核中是一個常用的宏&#xff0c;用于從包含在某個結構中的指針獲得結構本…

mysql concat例子_MYSQL中CONCAT詳解

concat()函數1. 功能&#xff1a;返回結果為連接參數產生的字符串。如有任何一個參數為NULL &#xff0c;則返回值為 NULL。2. 語法concat(str1, str2,...)3. 例子案例一&#xff1a;mysql> select concat(蘋果,香蕉,梨子);------------------------------| CONCAT(蘋果,香蕉…

常見的狀態響應碼

200&#xff1a;請求正常&#xff0c;服務器正常的返回數據 301&#xff1a;永久重定向。比如在訪問www.jingdong.com的時候&#xff0c;會重定向到www.jd.com。 302&#xff1a;臨時重定向。比如在訪問一個需要登錄的界面時&#xff0c;而此時沒有登錄&#xff0c;那么就會重定…

軟件行業為什么那么多項目經理

記得聽誰說過&#xff0c;軟件行業的項目經理太濫了&#xff0c;二十幾歲的毛頭小伙子&#xff0c;動不動就是項目經理&#xff0c;手下沒幾個人&#xff0c;管的也沒幾個事&#xff0c;在其他行業&#xff0c;項目經理一般都是四五十歲的老頭子做&#xff0c;要聯系這&#xf…

ipv6的表示方法

v冒分十六進制表示法X:X:X:X:X:X:X:X 其中X表示地址中16位二進制數的十六進制值 例&#xff1a;FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 v零壓縮法如其中有多個連續的零&#xff0c;則可用零壓縮法 如 &#xff1a;1080:0000:0000:0000:0008:0800:200C:417A 可寫成&am…

mysql php7安裝配置_centos7無網絡下安裝部署php7.1.33+mysql5.7.28+apache2.4.6-Go語言中文社區...

centos7無網絡下安裝部署php7.1.33mysql5.7.28apache2.4.6一、1、先ping www.baidu.com&#xff0c;root賬戶下&#xff0c;如果未聯網&#xff0c;創建目錄&#xff0c;把提前下載好的rpm包拷貝到rpm目錄下如圖&#xff1a;(如果沒有安裝包請查看我的另一篇教程下載這些安裝包…

webkit渲染

2019獨角獸企業重金招聘Python工程師標準>>> 參考鏈接 理解WebKit和Chromium 簡明魔法學院 Chrome軟件渲染 WebKit渲染基礎 Webkit 渲染基礎 Webkit不是瀏覽器,它是一個渲染引擎 軟件渲染 硬件渲染(GPU加速) 會觸發GPU加速的屬性 CSS3 3D transformation, trans…

element ui中dialog相關問題

一&#xff0c;今天需要在dialog里面引入另一個頁面&#xff0c;就是打開dialog顯示該頁面&#xff08;把頁面放到dialog中&#xff09;&#xff0c;引入的語句如下&#xff1a; <iframe src"view?pathrkdj_b" ></iframe> 二&#xff0c;使用table組件時…

數據結構與算法--4.使用堆棧模擬隊列

問題&#xff1a; 隊列的插入和刪除遵循先入先出的原則&#xff0c;而堆棧遵循后進先出的原則。用兩個堆棧模擬隊列&#xff0c;要求實現時不能分配超過O&#xff08;1&#xff09;的內存&#xff0c;時間復雜度必須是o&#xff08;m&#xff09;。 思路&#xff1a; 用兩個…