国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux應(yīng)用程序開發(fā)經(jīng)驗

這篇具有很好參考價值的文章主要介紹了Linux應(yīng)用程序開發(fā)經(jīng)驗。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1、學(xué)會使用Linux

1.1 熟練掌握命令行環(huán)境

? 要學(xué)會Linux編程,必須得先學(xué)會用Linux,也就是要在Linux命令行環(huán)境下“生存”下來
? 給一臺主機(jī),能夠在上面裝一個操作系統(tǒng)(比如Ubuntu18.04或者其他版本)
? 給一臺Linux服務(wù)器,能夠熟練地用起來
? 或者在Win10下,熟練使用WSL2
? 安裝WSL2
? 基于WSL2環(huán)境下安裝ubuntu 16.04,或ubuntu 18.04
? 基于WSL2+ubuntu,搭建應(yīng)用程序的交叉編譯環(huán)境
? 什么叫熟練地用起來?原來在Windows上干啥,在Linux上也能干:
? 新建文件,查看文件,編輯文件,保存文件,復(fù)制,移動,刪除,打包,解壓,聯(lián)網(wǎng)……
? 下載軟件,安裝軟件,不僅要熟練掌握apt-get,yum之類的軟件包管理工具,還要能從源碼編譯、安裝
? 常用命令:chmod, chown, passwd, cat, more, cd , ps , top, dmesg等等
? 插入一個U盤,如何掛載這個U盤,操作U盤下的文件
? vim基本操作:編輯模式,寫入,保存,退出,光標(biāo)移動……
? docker基本操作,能夠利用docker處理一些日常工作,比如程序編譯
? ……
? 另外要熟悉Linux下的文件系統(tǒng),每個目錄是干啥的,目錄下的文件是干嘛的:

  ? /etc
  ? /proc
  ? /sys
  ? /usr
  ? /var
  ? /sbin
  ? /lib
  ? /dev
  ? ……

? 推薦《鳥哥的Linux私房菜-基礎(chǔ)篇》,記得是基礎(chǔ)篇,記得安裝Linux系統(tǒng)自己操作一遍
? 還有一本是服務(wù)器篇,既然是要學(xué)Linux編程開發(fā),可先不用看服務(wù)器架設(shè)篇

2、Linux應(yīng)用程序開發(fā)

2.1 Linux C/C++應(yīng)用程序開發(fā)

2.1.1 要點(diǎn)

? Linux的API是遵循POSIX標(biāo)準(zhǔn)的,可自行搜索學(xué)習(xí)什么叫POSIX。
? Linux下文件操作,這個很重要,你要知道Linux下的一個思想叫一切皆文件,可見文件讀寫多重要了
? I/O模型,五大I/O模型,阻塞,非阻塞,復(fù)用,信號驅(qū)動和異步I/O,環(huán)環(huán)相扣絲絲相連,概念和操作都要仔細(xì)琢磨
? 最重要的當(dāng)屬復(fù)用,就是select,poll和epoll,要知道他們的適用范圍和優(yōu)缺點(diǎn)
? 進(jìn)程和線程,包括進(jìn)程和線程的概念和區(qū)別,進(jìn)程和線程的建立,同步,通信,互斥等等
? 網(wǎng)絡(luò)編程,就是socket編程,這個學(xué)不好等于啥都沒學(xué)
? 還得了解一下TCP/IP協(xié)議,socket,bind,listen,accept……
? 要熟悉種常見的服務(wù)器模型,進(jìn)程池線程池方式的,多進(jìn)程方式的,復(fù)用方式的,最重要的是復(fù)用方式的,這部分可以先只寫服務(wù)器,測試直接用Telnet
? 數(shù)據(jù)庫,這個東西不屬于Linux,但是還得會,要不然啥都做不了,推薦《MySQL必知必會》
? Makefile的編寫,重點(diǎn)學(xué)習(xí)CMake
? 編譯和鏈接原理,掌握靜態(tài)庫,動態(tài)庫等基本概念

2.1.2 推薦的書籍

? C語言:推薦《c語言程序設(shè)計》(丹尼斯.里奇)、《Linux C編程一站式學(xué)習(xí)》
? C++:推薦《Essential C++》、《C++ Primer》、《Effective C++》、《C++并發(fā)編程實(shí)戰(zhàn)》等
? 《Unix環(huán)境高級編程》(W.Richard.Stevens)
? 《Unix網(wǎng)絡(luò)編程》 兩部,(W.Richard.Stevens)
? 《Unix/Linux編程實(shí)踐教程》,(Bruce Molay)
? 《Linux網(wǎng)絡(luò)編程》 宋勁彬
? 《Linux高級程序設(shè)計》 華清遠(yuǎn)見
? 《MySQL必知必會》
? 《數(shù)據(jù)庫系統(tǒng)概念》
? 《大話數(shù)據(jù)結(jié)構(gòu)》
? 《算法導(dǎo)論》

2.2 Linux Shell腳本開發(fā)

2.2.1 要點(diǎn)

? Linux的基礎(chǔ)要盡可能好。Shell編程其實(shí)就是將Linux命令進(jìn)行組裝,配合shell script的一些邏輯實(shí)現(xiàn)更復(fù)雜的功能。所以要想寫出厲害的shell script,Linux基礎(chǔ)太重要了。基礎(chǔ)命令如ls、cd、pwd、echo、ps等這些不用說,用戶、組、文件權(quán)限(755)、設(shè)備(/dev/null)、管道命令(|)、隱藏文件權(quán)限(4755?)、服務(wù)這些都要熟悉。
? Linux基礎(chǔ)不太好的話推薦《鳥哥的Linux私房菜 基礎(chǔ)篇》,前十章要看完并且動手操作一遍,整本書都能啃完自然最好。
? Shell Script的基本語法要熟練。鳥哥Linux私房菜第十章就是在講Shell基礎(chǔ),這里面講的東西看完,代碼敲一遍,習(xí)題做完,基礎(chǔ)就夠用了。
? 正則表達(dá)式要會靈活運(yùn)用。grep、sed、awk這些命令實(shí)在是太重要了,配合正則表達(dá)式,可以極大提高shell腳本的質(zhì)量。
? 最重要的還是要多寫多練。既然要用shell script,那這是個很好的鍛煉shell編程的機(jī)會。
? 遇到問題了多Google、百度,多在命令行下面試。
? 平時在工作過程中發(fā)現(xiàn)有些經(jīng)常做的事情,重復(fù)性很高,比如天天都要pull代碼,那就可以考慮寫shell script來做自動化。

2.2.2 推薦的書籍

? 想要深入研究shell script的話,可以看看這本書:《Linux Command Line and Shell Scripting Bible》,中文名叫做: 《Linux命令行與shell腳本編程大全》。

2.3 Linux C/C++開發(fā)環(huán)境

? 基于Ubuntu 18.04(或以上版本)的C/C++開發(fā)環(huán)境
? vscode
? gcc,gdb,cmake,ninja
? 基于Win10+WSL2+vscode的C/C++開發(fā)環(huán)境
? 基于Win10+Vscode ssh remote+Linux服務(wù)器的C/C++開發(fā)環(huán)境

2.4 進(jìn)階學(xué)習(xí)

? 看看Linux內(nèi)核源碼,了解Linux內(nèi)核的進(jìn)線程調(diào)度等原理
? 學(xué)習(xí)和了解計算機(jī)網(wǎng)絡(luò),操作系統(tǒng)原理等,知其所以然
? 在學(xué)習(xí)的過程中,要不斷積累和了解最新的東西,最起碼要知道個概念,比如分布式,大數(shù)據(jù),云計算,機(jī)器學(xué)習(xí),計算機(jī)視覺,JIT等等,形成知識鏈
? 學(xué)一學(xué)python,用python完成一些shell腳本實(shí)現(xiàn)的功能

3、Linux程序調(diào)試技巧

在Linux下的用戶空間調(diào)試工具主要有系統(tǒng)工具和專門調(diào)試工具:‘print’ 打印語句,這是新手最常用的;查詢 (/proc, /sys 等)系統(tǒng)的虛擬文件查看,這個方法有局限性;跟蹤 (strace/ltrace)工具使用這個比較普遍,值得提倡;Valgrind (memwatch)內(nèi)存排除工具,在內(nèi)存排除方面比較獨(dú)到,是內(nèi)存排錯的法寶;GDB大名鼎鼎的程序調(diào)試工具,這個是個全能的工具,沒有完不成的,只有你不知道的。

3.1 ‘print’ 打印日志

這是一個基本的調(diào)試問題的方法。 我們在程序中懷疑的地方插入printf(syslog,或者其他打印日志手段)語句來了解程序的運(yùn)行流程控制流和變量值的改變。 這是一個最簡單的技術(shù), 它的缺點(diǎn)。 需要進(jìn)行程序編輯,添加’print’語句,必須重新編譯,重新運(yùn)行來獲得輸出。若需要調(diào)試的程序比較大,這將是一個耗時費(fèi)力的方法。

3.2 查詢系統(tǒng)信息

在某些情況下,我們需要弄清楚在一個運(yùn)行在內(nèi)核中的進(jìn)程的狀態(tài)和內(nèi)存映射。為了獲得這些信息,我們不需要在內(nèi)核中插入任何代碼。 相反,可以用 /proc 文件系統(tǒng)。在/proc的偽文件系統(tǒng),保留系統(tǒng)啟動運(yùn)行就收集的運(yùn)行時信息 (cpu信息, 內(nèi)存容量等)。
ls -l /proc’的輸出結(jié)果,通過對 系統(tǒng)中運(yùn)行的每一個進(jìn)程在/proc文件系統(tǒng)中有一個以進(jìn)程id命名的項。每個進(jìn)程的細(xì)節(jié)信息可以在進(jìn)程id對應(yīng)的目錄下的文件中獲得。也可以’ls /proc/pid’的輸出
解釋/proc文件系統(tǒng)內(nèi)的所有條目超出了本文的范圍。一些有用的列舉如下:

? /proc/buddyinfo 每個內(nèi)存區(qū)中的每個order有多少塊可用,和內(nèi)存碎片問題有關(guān)
? /proc/cmdline 啟動時傳遞給kernel的參數(shù)信息
? /proc/cpuinfo cpu的信息
? /proc/crypto 內(nèi)核使用的所有已安裝的加密密碼及細(xì)節(jié)
? /proc/devices 已經(jīng)加載的設(shè)備并分類
? /proc/execdomains Linux內(nèi)核當(dāng)前支持的execution domains
? /proc/filesystems 內(nèi)核當(dāng)前支持的文件系統(tǒng)類型
? /proc/interrupts 架構(gòu)中的每個IRQ中斷數(shù)
? /proc/iomem 每個物理設(shè)備當(dāng)前在系統(tǒng)內(nèi)存中的映射
? /proc/ioports 一個設(shè)備的輸入輸出所使用的注冊端口范圍
? /proc/kmsg 記錄內(nèi)核生成的信息,可以通過/sbin/klogd或/bin/dmesg來處理
? /proc/loadavg 根據(jù)過去一段時間內(nèi)CPU和IO的狀態(tài)得出的負(fù)載狀態(tài),與uptime命令有關(guān)
? /proc/locks 內(nèi)核鎖住的文件列表
? /proc/meminfo RAM使用的相關(guān)信息
? /proc/misc 其他的主要設(shè)備(設(shè)備號為10)上注冊的驅(qū)動
? /proc/modules 所有加載到內(nèi)核的模塊列表
? /proc/mounts 系統(tǒng)中使用的所有掛載
? /proc/partitions 分區(qū)中的塊分配信息
? /proc/slabinfo 系統(tǒng)中所有活動的 slab 緩存信息
? /proc/stat 所有的CPU活動信息
? /proc/uptime 系統(tǒng)已經(jīng)運(yùn)行了多久
? /proc/swaps 交換空間的使用情況
? /proc/version Linux內(nèi)核版本和gcc版本
? /proc/bus 系統(tǒng)總線(Bus)信息,例如pci/usb等
? /proc/driver 驅(qū)動信息
? /proc/fs 文件系統(tǒng)信息
? /proc/irq 中斷請求設(shè)備信息
? /proc/net 網(wǎng)卡設(shè)備信息
? /proc/scsi scsi設(shè)備信息
? /proc/tty tty設(shè)備信息
? /proc/net/dev 顯示網(wǎng)絡(luò)適配器及統(tǒng)計信息
? /proc/vmstat 虛擬內(nèi)存統(tǒng)計信息
? /proc/vmcore 內(nèi)核panic時的內(nèi)存映像
? /proc/diskstats 取得磁盤信息
? /proc/sched_debug kernel調(diào)度器的統(tǒng)計信息
? /proc/zoneinfo 顯示內(nèi)存空間的統(tǒng)計信息,對分析虛擬內(nèi)存行為很有用
以下是/proc目錄中進(jìn)程N(yùn)的信息:
? /proc/N pid為N的進(jìn)程信息
? /proc/N/cmdline 進(jìn)程啟動命令
? /proc/N/cwd 鏈接到進(jìn)程當(dāng)前工作目錄
? /proc/N/environ 進(jìn)程環(huán)境變量列表
? /proc/N/exe 鏈接到進(jìn)程的執(zhí)行命令文件
? /proc/N/fd 包含進(jìn)程相關(guān)的所有的文件描述符
? /proc/N/maps 與進(jìn)程相關(guān)的內(nèi)存映射信息
? /proc/N/mem 指代進(jìn)程持有的內(nèi)存,不可讀
? /proc/N/root 鏈接到進(jìn)程的根目錄
? /proc/N/stat 進(jìn)程的狀態(tài)
? /proc/N/statm 進(jìn)程使用的內(nèi)存的狀態(tài)
? /proc/N/status 進(jìn)程狀態(tài)信息,比stat/statm更具可讀性
? /proc/self 鏈接到當(dāng)前正在運(yùn)行的進(jìn)程

一個常用的例子是通過/proc/tty/drivers下的文件接口,查看串口的工作狀態(tài):

[root@buildroot(V8133L) ~]# cat /proc/tty/driver/*
serinfo:1.0 driver revision:
0: uart:16550A mmio:0x54E00000 irq:7 tx:7011 rx:207 oe:1 RTS|DTR
1: uart:16550A mmio:0x57100000 irq:13 tx:2800 rx:38006 RTS|DTR
2: uart:16550A mmio:0x56B00000 irq:12 tx:1442 rx:2275 RTS|DTR
3: uart:16550A mmio:0x55100000 irq:9 tx:103361 rx:102977 RTS|DTR
4: uart:16550A mmio:0x55000000 irq:8 tx:102977 rx:103343 RTS|DTR
5: uart:16550A mmio:0x55200000 irq:10 tx:103791 rx:102844 RTS|CTS|DTR
6: uart:16550A mmio:0x56A00000 irq:11 tx:103481 rx:103791 RTS|DTR
usbserinfo:1.0 driver:2.0

3.3 跟蹤

strace的和ltrace是兩個在Linux中用來追蹤程序的執(zhí)行細(xì)節(jié)的跟蹤工具。

3.3.1 strace

strace攔截和記錄系統(tǒng)調(diào)用及其接收的信號。對于用戶,它顯示了系統(tǒng)調(diào)用、傳遞給它們的參數(shù)和返回值。strace的可以附著到已在運(yùn)行的進(jìn)程或一個新的進(jìn)程。它作為一個針對開發(fā)者和系統(tǒng)管理員的診斷、調(diào)試工具是很有用的。它也可以用來當(dāng)做一個通過跟蹤不同的程序調(diào)用來了解系統(tǒng)的工具。這個工具的好處是不需要源代碼,程序也不需要重新編譯。

3.3.2 ltrace

ltrace跟蹤和記錄一個進(jìn)程的動態(tài)(運(yùn)行時)庫的調(diào)用及其收到的信號。它也可以跟蹤一個進(jìn)程所作的系統(tǒng)調(diào)用。它的用法類似與strace。

3.4 Valgrind

Valgrind是一套調(diào)試和分析工具。它的一個被廣泛使用的默認(rèn)工具——‘Memcheck’——可以攔截malloc(),new(),free()和delete()調(diào)用。換句話說,它在檢測下面這些問題非常有用:
? 內(nèi)存泄露
? 重釋放
? 訪問越界
? 使用未初始化的內(nèi)存
? 使用已經(jīng)被釋放的內(nèi)存等。
它直接通過可執(zhí)行文件運(yùn)行。
? Valgrind也有一些缺點(diǎn),因為它增加了內(nèi)存占用,會減慢你的程序。它有時會造成誤報和漏報。它不能檢測出靜態(tài)分配的數(shù)組的訪問越界問題。
? Valgrind目前對ARM平臺的支持并不好

3.5 gdb/gdbserver

GDB是來自自由軟件基金會的調(diào)試器。它對定位和修復(fù)代碼中的問題很有幫助。當(dāng)被調(diào)試的程序運(yùn)行時,它給用戶控制權(quán)去執(zhí)行各種動作, 比如:
? 啟動程序
? 停在指定位置
? 停在指定的條件
? 檢查所需信息
? 改變程序中的數(shù)據(jù) 等。
也可以將一個崩潰的程序coredump附著到GDB并分析故障的原因。
還可通過gdb+gdbserver來調(diào)試,gdbserver在目標(biāo)系統(tǒng)中運(yùn)行,gdb則在宿主機(jī)上運(yùn)行。

3.6 ipcs 查詢進(jìn)程間通信狀態(tài)

ipcs是Linux下顯示進(jìn)程間通信設(shè)施狀態(tài)的工具??梢燥@示消息隊列、共享內(nèi)存和信號量的信息。對于程序員非常有用,普通的系統(tǒng)管理員一般用不到此指令。

$ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status

------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x00000000 229376     weber      600        1

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

$ipcs -m 查看系統(tǒng)使用的IPC共享內(nèi)存資源
$ipcs -q 查看系統(tǒng)使用的IPC隊列資源
$ipcs -s 查看系統(tǒng)使用的IPC信號量資源

3.7 lsof 一切皆文件

lsof(list open files)是一個查看當(dāng)前系統(tǒng)文件的工具。在linux環(huán)境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng)絡(luò)連接和硬件。如傳輸控制協(xié)議 (TCP) 和用戶數(shù)據(jù)報協(xié)議 (UDP) 套接字等,系統(tǒng)在后臺都為該應(yīng)用程序分配了一個文件描述符,該文件描述符提供了大量關(guān)于這個應(yīng)用程序本身的信息。
lsof打開的文件可以是:

  1. 普通文件
  2. 目錄
  3. 網(wǎng)絡(luò)文件系統(tǒng)的文件
  4. 字符或設(shè)備文件
  5. (函數(shù))共享庫
  6. 管道,命名管道
  7. 符號鏈接
  8. 網(wǎng)絡(luò)文件(例如:NFS file、網(wǎng)絡(luò)socket,unix域名socket)
  9. 還有其它類型的文件,等等
$lsof| more
COMMAND     PID      USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init          1      root  cwd       DIR              253,0     4096          2 /
init          1      root  rtd       DIR              253,0     4096          2 /
init          1      root  txt       REG              253,0   150352    1310795 /sbin/init
init          1      root  mem       REG              253,0    65928    5505054 /lib64/libnss_files-2.12.so
init          1      root  mem       REG              253,0  1918016    5521405 /lib64/libc-2.12.so
init          1      root  mem       REG              253,0    93224    5521440 /lib64/libgcc_s-4.4.6-20120305.so.1
init          1      root  mem       REG              253,0    47064    5521407 /lib64/librt-2.12.so
init          1      root  mem       REG              253,0   145720    5521406 /lib64/libpthread-2.12.so
...

3.8 ps 進(jìn)程查看器

Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統(tǒng)中當(dāng)前運(yùn)行的那些進(jìn)程。ps命令列出的是當(dāng)前那些進(jìn)程的快照,就是執(zhí)行ps命令的那個時刻的那些進(jìn)程,如果想要動態(tài)的顯示進(jìn)程信息,就可以使用top命令。
要對進(jìn)程進(jìn)行監(jiān)測和控制,首先必須要了解當(dāng)前進(jìn)程的情況,也就是需要查看當(dāng)前進(jìn)程,而 ps 命令就是最基本同時也是非常強(qiáng)大的進(jìn)程查看命令。使用該命令可以確定有哪些進(jìn)程正在運(yùn)行和運(yùn)行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等等??傊蟛糠中畔⒍际强梢酝ㄟ^執(zhí)行該命令得到的。

3.9 top linux下的任務(wù)管理器

top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進(jìn)程的資源占用狀況,類似于Windows的任務(wù)管理器。top是一個動態(tài)顯示過程,即可以通過用戶按鍵來不斷刷新當(dāng)前狀態(tài).如果在前臺執(zhí)行該命令,它將獨(dú)占前臺,直到用戶終止該程序為止.比較準(zhǔn)確的說,top命令提供了實(shí)時的對系統(tǒng)處理器的狀態(tài)監(jiān)視.它將顯示系統(tǒng)中CPU最“敏感”的任務(wù)列表.該命令可以按CPU使用.內(nèi)存使用和執(zhí)行時間對任務(wù)進(jìn)行排序;而且該命令的很多特性都可以通過交互式命令或者在個人定制文件中進(jìn)行設(shè)定。

$top
    top - 09:14:56 up 264 days, 20:56,  1 user,  load average: 0.02, 0.04, 0.00
    Tasks:  87 total,   1 running,  86 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
    Mem:    377672k total,   322332k used,    55340k free,    32592k buffers
    Swap:   397308k total,    67192k used,   330116k free,    71900k cached
    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0  2856  656  388 S  0.0  0.2   0:49.40 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S  0.0  0.0   7:15.20 ksoftirqd/0
    4 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0

? 第一行
? 09:14:56 : 系統(tǒng)當(dāng)前時間
? 264 days, 20:56 : 系統(tǒng)開機(jī)到現(xiàn)在經(jīng)過了多少時間
? 1 users : 當(dāng)前2用戶在線
? load average: 0.02, 0.04, 0.00: 系統(tǒng)1分鐘、5分鐘、15分鐘的CPU負(fù)載信息
? 第二行
? Tasks:任務(wù);
? 87 total:很好理解,就是當(dāng)前有87個任務(wù),也就是87個進(jìn)程。
? 1 running:1個進(jìn)程正在運(yùn)行
? 86 sleeping:86個進(jìn)程睡眠
? 0 stopped:停止的進(jìn)程數(shù)
? 0 zombie:僵死的進(jìn)程數(shù)
? 第三行
? Cpu(s):表示這一行顯示CPU總體信息
? 0.0%us:用戶態(tài)進(jìn)程占用CPU時間百分比,不包含renice值為負(fù)的任務(wù)占用的CPU的時間。
? 0.7%sy:內(nèi)核占用CPU時間百分比
? 0.0%ni:改變過優(yōu)先級的進(jìn)程占用CPU的百分比
? 99.3%id:空閑CPU時間百分比
? 0.0%wa:等待I/O的CPU時間百分比
? 0.0%hi:CPU硬中斷時間百分比
? 0.0%si:CPU軟中斷時間百分比
? 注:這里顯示數(shù)據(jù)是所有cpu的平均值,如果想看每一個cpu的處理情況,按1即可;折疊,再次按1;
? 第四行
? Men:內(nèi)存的意思
? 8175320kk total:物理內(nèi)存總量
? 8058868k used:使用的物理內(nèi)存量
? 116452k free:空閑的物理內(nèi)存量
? 283084k buffers:用作內(nèi)核緩存的物理內(nèi)存量
? 第五行
? Swap:交換空間
? 6881272k total:交換區(qū)總量
? 4010444k used:使用的交換區(qū)量
? 2870828k free:空閑的交換區(qū)量
? 4336992k cached:緩沖交換區(qū)總量
? 進(jìn)程信息
? PID:進(jìn)程的ID
? USER:進(jìn)程所有者
? PR:進(jìn)程的優(yōu)先級別,越小越優(yōu)先被執(zhí)行
? NInice:值
? VIRT:進(jìn)程占用的虛擬內(nèi)存
? RES:進(jìn)程占用的物理內(nèi)存
? SHR:進(jìn)程使用的共享內(nèi)存
? S:進(jìn)程的狀態(tài)。S表示休眠,R表示正在運(yùn)行,Z表示僵死狀態(tài),N表示該進(jìn)程優(yōu)先值為負(fù)數(shù)
? %CPU:進(jìn)程占用CPU的使用率
? %MEM:進(jìn)程使用的物理內(nèi)存和總內(nèi)存的百分比
? TIME+:該進(jìn)程啟動后占用的總的CPU時間,即占用CPU使用時間的累加值。
? COMMAND:進(jìn)程啟動命令名稱
3.10、 free 查詢可用內(nèi)存
free工具用來查看系統(tǒng)可用內(nèi)存:
[root@buildroot(V8133L) ~]# free
total used free shared buff/cache available
Mem: 511724 24548 431356 72 55820 481412
Swap: 0 0

第一列
Mem 內(nèi)存的使用信息
Swap 交換空間的使用信息
第一行
total 系統(tǒng)總的可用物理內(nèi)存大小
used 已被使用的物理內(nèi)存大小
free 還有多少物理內(nèi)存可用
shared 被共享使用的物理內(nèi)存大小
buff/cache 被 buffer 和 cache 使用的物理內(nèi)存大小
available 還可以被 應(yīng)用程序 使用的物理內(nèi)存大小
free 與 available 的區(qū)別
free 是真正尚未被使用的物理內(nèi)存數(shù)量。
available 是應(yīng)用程序認(rèn)為可用內(nèi)存數(shù)量,available = free + buffer + cache (注:只是大概的計算方法)
Linux 為了提升讀寫性能,會消耗一部分內(nèi)存資源緩存磁盤數(shù)據(jù),對于內(nèi)核來說,buffer 和 cache 其實(shí)都屬于已經(jīng)被使用的內(nèi)存。但當(dāng)應(yīng)用程序申請內(nèi)存時,如果 free 內(nèi)存不夠,內(nèi)核就會回收 buffer 和 cache 的內(nèi)存來滿足應(yīng)用程序的請求。這就是稍后要說明的 buffer 和 cache。
Linux和其他成熟的操作系統(tǒng)(例如windows),為了提高IO read的性能,總是要多cache一些數(shù)據(jù),這也就是為什么cached memory比較大,而free比較小的原因。

4、其他常用的命令和工具

4.1 stty

stty命令用于顯示和修改終端行設(shè)置(change and print terminal line settings)。
stty常用來查看或者修改串口的設(shè)置。
比如查看串口/dev/ttyS3的設(shè)置:

[root@buildroot(V8133L) ~]# stty -a -F /dev/ttyS3
speed 9600 baud;stty: /dev/ttyS3
 line = 0;
intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>;
eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>;
stop = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>;
lnext = <undef>; flush = <undef>; min = 255; time = 4;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon
-ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop
-echoprt -echoctl -echoke -flusho -extproc

修改串口/dev/ttyS3的波特率為9600
stty -F /dev/ttyS3 9600

4.2 dmesg

Linux dmesg(英文全稱:display message)命令用于顯示開機(jī)信息。
kernel 會將開機(jī)信息存儲在 ring buffer 中。您若是開機(jī)時來不及查看信息,可利用 dmesg 來查看。

[root@buildroot(V8133L) ~]# dmesg | more
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.14.155-gac856fcaf (root@lme-server1) (gcc version 7.4.1 20181213 [linaro-7.4-2019.02 revision 56ec6f6b99cc167ff0c2f8e1a2eed33b1edc85d4] (Linaro GCC 7.4-2019.02)) #V1.0.0 20220119
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c53c7d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: leo
[    0.000000] earlycon: uart8250 at MMIO32 0x54e00000 (options '')
[    0.000000] bootconsole [uart8250] enabled
[    0.000000] Memory policy: Data cache writeback
[    0.000000] On node 0 totalpages: 131072
[    0.000000] free_area_init_node: node 0, pgdat c0779e10, node_mem_map dfbf0000
[    0.000000]   Normal zone: 1024 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 131072 pages, LIFO batch:31
[    0.000000] CPU: All CPU(s) started in SVC mode.
[    0.000000] platform_i2s_init: pll3 locked
[    0.000000] platform_lcdc_init: pll5 locked
[    0.000000] platform_sdhci_init: pll7 locked
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
--More-- 

4.3 netstat

顯示各種網(wǎng)絡(luò)相關(guān)信息,如網(wǎng)絡(luò)連接(無參數(shù)),路由表(-r)等網(wǎng)絡(luò)信息。

[root@buildroot(V8133L) ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:ftp             0.0.0.0:*               LISTEN      
netstat: /proc/net/tcp6: No such file or directory
udp        0      0 0.0.0.0:4060            0.0.0.0:*                           
udp        0      0 0.0.0.0:4061            0.0.0.0:*                           
udp        0      0 0.0.0.0:4066            0.0.0.0:*                           
udp        0      0 0.0.0.0:4067            0.0.0.0:*                           
udp        0      0 0.0.0.0:4069            0.0.0.0:*                           
udp        0      0 0.0.0.0:4070            0.0.0.0:*                           
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  17     [ ]         DGRAM                      3728 /dev/log
unix  2      [ ]         DGRAM                      3962 
unix  2      [ ]         DGRAM                      3903 
unix  2      [ ]         DGRAM                      4180 
unix  2      [ ]         DGRAM                      4183 
unix  2      [ ]         DGRAM                      4207 
unix  2      [ ]         DGRAM                      4019 
unix  2      [ ]         DGRAM                      3997 
unix  2      [ ]         DGRAM                      4102 
unix  2      [ ]         DGRAM                      4101 
unix  2      [ ]         DGRAM                      3967 
unix  2      [ ]         DGRAM                      3970 
unix  2      [ ]         DGRAM                      3971 
unix  2      [ ]         DGRAM                      3956 
unix  2      [ ]         DGRAM                      3963 
unix  2      [ ]         DGRAM                      5125 
[root@buildroot(V8133L) ~]# 

4.4 route命令

Linux系統(tǒng)的route命令用于顯示和操作IP路由表(show / manipulate the IP routing table)。
查看路由:

root@OpenWrt:/# route 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.2.1     0.0.0.0         UG    0      0        0 eth0
default         192.168.2.1     0.0.0.0         UG    0      0        0 eth0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0

增加一條路由:文章來源地址http://www.zghlxwxcb.cn/news/detail-471180.html

route add -net $HOSTIP netmask 255.255.255.0 gw $GWIP ppp0

5、參考資料

  1. Linux基礎(chǔ),https://linuxtools-rst.readthedocs.io/zh_CN/latest/base/index.html
  2. Linux工具進(jìn)階,https://linuxtools-rst.readthedocs.io/zh_CN/latest/advance/index.html
  3. 鳥哥的Linux私房菜:基礎(chǔ)學(xué)習(xí)篇,http://cn.linux.vbird.org/linux_basic/linux_basic.php

到了這里,關(guān)于Linux應(yīng)用程序開發(fā)經(jīng)驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RK3568平臺開發(fā)系列講解(Linux系統(tǒng)篇)Linux 應(yīng)用程序的安全

    RK3568平臺開發(fā)系列講解(Linux系統(tǒng)篇)Linux 應(yīng)用程序的安全

    ??返回專欄總目錄 沉淀、分享、成長,讓自己和他人都能有所收獲!?? ??本篇讓我們?nèi)绾螌懗霰M可能安全的應(yīng)用程序。

    2023年04月16日
    瀏覽(92)
  • Linux設(shè)備模型統(tǒng)一:橋接硬件多樣性與應(yīng)用程序開發(fā)的關(guān)鍵

    Linux設(shè)備模型統(tǒng)一:橋接硬件多樣性與應(yīng)用程序開發(fā)的關(guān)鍵

    在Linux的宏大世界中,各種各樣的硬件設(shè)備如星辰般繁多。從常見的USB設(shè)備到復(fù)雜的網(wǎng)絡(luò)接口卡,從嵌入式設(shè)備到強(qiáng)大的服務(wù)器,Linux需要在這些差異極大的硬件上運(yùn)行。這就引出了一個問題:Linux是如何統(tǒng)一這些不同硬件的設(shè)備模型的呢?本文將探討Linux是如何針對不同的硬

    2024年04月10日
    瀏覽(18)
  • CoreDX DDS應(yīng)用開發(fā)指南(5)開發(fā)發(fā)布應(yīng)用程序

    ????????創(chuàng)建發(fā)布應(yīng)用程序的步驟如下: 創(chuàng)建或獲取應(yīng)用程序數(shù)據(jù)的DDL文件。 使用DDL編譯器編譯DDL文件。類型特定的支持和DataWriter是編譯DDL的結(jié)果。 編寫發(fā)布應(yīng)用程序 編譯發(fā)布應(yīng)用程序 ????????啟用DDS的應(yīng)用程序本質(zhì)上是以數(shù)據(jù)為中心data-centric的。為了使這些以數(shù)

    2024年02月08日
    瀏覽(21)
  • Flutter中的Web應(yīng)用程序開發(fā):構(gòu)建現(xiàn)代Web應(yīng)用程序

    作者:禪與計算機(jī)程序設(shè)計藝術(shù) 作為人工智能專家,程序員和軟件架構(gòu)師,CTO,我今天將為大家分享有關(guān) Flutter 中 Web 應(yīng)用程序開發(fā)的見解。在這篇文章中,我們將深入探討 Flutter Web 應(yīng)用程序的開發(fā)過程、技術(shù)原理以及最佳實(shí)踐。 引言 隨著移動設(shè)備的普及,Web 應(yīng)用程序在全

    2024年02月12日
    瀏覽(33)
  • 《Qt開發(fā)》MDI應(yīng)用程序

    《Qt開發(fā)》MDI應(yīng)用程序

    實(shí)現(xiàn)多個子窗體的自定義布局(自定義子窗體尺寸和位置)、平鋪布局(titleSubWindows)和分頁模式(QMdi::TabbedView)。 運(yùn)行效果圖 初始布局(自定義布局) 平鋪布局 多頁模式 實(shí)現(xiàn)過程 1. 創(chuàng)建項目MdiFirstDemo,并創(chuàng)建3個子窗體,分別為FirstSubWindow、SecondSubWindow和ThirdSubWindow。

    2024年01月16日
    瀏覽(85)
  • 桌面應(yīng)用程序開發(fā)攻略(初步了解)

    ????????桌面應(yīng)用開發(fā) 是指為桌面計算機(jī)或其他類似設(shè)備(如服務(wù)器)開發(fā)軟件應(yīng)用程序的過程。桌面應(yīng)用通常是獨(dú)立于瀏覽器運(yùn)行的,并且可以在操作系統(tǒng)的桌面或應(yīng)用程序菜單中找到。桌面應(yīng)用可以使用各種編程語言開發(fā),包括C++、Java、C#和Python等。桌面應(yīng)用的開發(fā)

    2024年02月09日
    瀏覽(21)
  • 開發(fā)GPT的應(yīng)用程序流程

    開發(fā)GPT的應(yīng)用程序流程

    開發(fā)一個基于GPT的應(yīng)用程序(GPT APP)涉及到與GPT模型的集成,用戶界面設(shè)計,以及應(yīng)用程序的功能實(shí)現(xiàn)。以下是一個一般的開發(fā)流程,希望對大家有所幫助。北京木奇移動技術(shù)有限公司,專業(yè)的軟件外包開發(fā)公司,歡迎交流合作。 明確目標(biāo)和用例: 定義您的GPT應(yīng)用的目標(biāo)和

    2024年01月19日
    瀏覽(26)
  • windows驅(qū)動開發(fā)7:應(yīng)用程序和驅(qū)動程序的通信

    windows驅(qū)動開發(fā)7:應(yīng)用程序和驅(qū)動程序的通信

    一、基礎(chǔ)介紹 1.1 設(shè)備與驅(qū)動的關(guān)系 設(shè)備由驅(qū)動去創(chuàng)建,訪問一個設(shè)備,是首先得訪問驅(qū)動。如果驅(qū)動在卸載的時候沒有刪除符號,r3下也是不能去訪問設(shè)備的。 驅(qū)動程序和系統(tǒng)其他組件之間的交互是通過給設(shè)備發(fā)送或者接受發(fā)給設(shè)備的請求來交互的。換句話說,一個沒有任

    2023年04月08日
    瀏覽(27)
  • 開發(fā)多點(diǎn)觸控MFC應(yīng)用程序

    當(dāng)下計算機(jī)變得越來越智能化,越來越無所不能,觸摸屏的普及只是時間問題了。 雖然鼠標(biāo)和鍵盤不會很快就離開人們的視野,畢竟人們使用鼠標(biāo)跟鍵盤已經(jīng)成為一種習(xí)慣,但是處理信息或者說操作計算機(jī)的其他方法也層出不窮——比如觸控技術(shù)。從硬件技術(shù)的角度來講,觸

    2024年02月10日
    瀏覽(26)
  • 鴻蒙(HarmonyOS)應(yīng)用開發(fā)——應(yīng)用程序入口UIAbility(題目答案)

    1.一個應(yīng)用只能有一個UIAbility。 錯誤(False) 解析:可以有多個,也可以有一個 2.創(chuàng)建的Empty Ability模板工程,初始會生成一個UIAbility文件。 正確(True) 3.每調(diào)用一次router.pushUrl()方法,頁面路由棧數(shù)量均會加1。 錯誤(False) 解析: pushUrl()有兩種模式,一種單實(shí)例模式,一種是多實(shí)例

    2024年02月04日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包