Linux操作系統筆記(超詳細)

【歷史文章】
Ubuntu在進行更新系統時出現Hash校驗和不符的問題
Linux常用的命令總結(一)——ls命令與cd命令
Linux命令(二)mkdir命令與rmdir命令
Linux命令(三)touch命令與rm命令
Linux常用命令(四)——cp、mv、ln命令
Linux常用命令(五)——hostname、ping、host命令


一、Linux安裝

在這裏插入圖片描述
VirualBox安裝過程:

  • VirualBox默認安裝

Ubuntu安裝:

打開VirualBox新建

取名字,選擇Linux Ubuntu64

設置虛擬內存1024

創建虛擬硬盤——>VDI——>固定大小——>選擇文件的位置(不要再C盤)——>分配10G以上——>創建

設置——>光驅放在最前面——>存儲——>盤片——>選擇虛擬的文件

注:關於上面安裝使用的VirualBox與Ubuntu安裝包獲取,可以私信+回覆【Linux安裝包】來獲取。

二、Linux操作系統介紹

課程介紹

Linux操作系統及其應用

LINUX的基礎使用:圖形工作界面、字符工作界面、目錄、文件、幫助文檔、管理工具

LINUX的基本命令:文件操作命令、顯示命令、網絡命令、系統狀態顯示命令

磁盤和文件系統:LINUX文件系統的管理和維護

多用戶和多任務管理:概念、磁盤配額、文件和目錄的操作權限、進程

shell簡易編程:概念、功能、編程

嵌入式LINUX及編程:嵌入式開發、編輯器VI、編譯器GCC、調試器GDB、工程管理器make

網絡基礎

Unix\LINUX環境C語言,藉助學習操作系統的接口的方法,來學習、理解操作系統的運行機制以及一些網絡協議

C/C++ 數據結構與算法 與平臺無關,重點是算法邏輯

Unix\Linux\Android\iOS 平臺相關,系統接口

嵌入式\驅動\移植 硬件相關,硬件接口

一、Linux操作系統概述

1、Unix操作系統

​ 丹尼斯.裏奇、肯.湯普遜於1971年左右在美國的貝爾實驗室,使用C語言開發了這套操作系統

​ 系統特點是多用戶、多任務,支持多種處理器架構,高安全性、高可靠性、高穩定性

​ 既可以構建大型關鍵業務系統的商用服務器,也可以構建面向移動終端的、手持設備等相關的嵌入式設備

​ 三大衍生版本:

​ System V:銀行、電信公司在使用的服務器系統

​ Berkley:MacOS、iOS帶界面的

​ Hybrid:Minix、Linux

2、什麼是Linux操作系統

​ 類Unix操作系統,免費開源,它指的是系統的內核,凡是使用這種內核的操作系統都叫做Linux操作系統(發行版),嚴格意義上講Linux指的是內核,隸屬於GNU工程。

​ 手機、平板電腦、路由器、遊戲視頻的控制平臺、PC、大型計算機、超級計算機

​ 標誌是一隻企鵝,企鵝是南極洲的標誌性動物,南極洲不屬於任何一個國家所有

​ Linux選擇企鵝作爲標誌,表明了:開源的Linux,爲全人類所共有的,任何公司無權將其私有

3、爲什麼使用Linux

4、Linux的特點

  • 遵循GNU\GPL,具備開放性
  • 多用戶
  • 多任務
  • 良好的用戶界面
  • 設備獨立性
  • 豐富的網絡功能
  • 可靠的系統安全
  • 良好的可移植性

5、Linux系統的組成

​ Linux一般由內核、shell、文件結構、實用工具4個主要部分組成。內核是所有的組成部分中最基礎、最重要的部分。

  • 內核:內核是整個操作系統的核心,負責管理整個計算機的軟硬件資源
  • shell:提供了用戶與內核進行交互操作的一種接口,一種命令解釋器
  • 文件結構:文件存放在磁盤等儲存設備上的組織方式
  • 實用工具:
    • 編輯器:用於編輯文件
    • 過濾器:用於接收數據並過濾數據
    • 交互程序:用戶與機器的信息接口

6、相關知識

  • GNU工程

    GNU的原則是共享,主旨是發展一個有別於一切商用Unix系統的,免費的且完整的類Unix系統——GNU’s Not Unix

    目前Linux內核由GNU維護,所以Linux也叫做GNU Linux

  • POSIX標準

    Portable Operating System Interface,統一的系統編程接口規範,它規定了操作系統以接口的形式,提供的名字、參數、返回值。

    Linux完全遵循POSIX標準

  • GPL通用公共許可證

    允許對某成果或者是派生成果的重用、複製和修改,對所有人都是自由的,但是不能聲明做了原始工作,或者聲明由他人所做。

  • Minix操作系統

    操作系統是一個微型的類Unix系統,免費開源,Linux之父就是參照這款操作系統,才寫出了第一個版本的Linux內核

二、主要的Linux版本

1、早期版本:0.01,0.02,…0.99,1.0

2、舊計劃:介於1.0到2.6之間,A.B.C

  • A:主版本號,內核大幅更新
  • B:次版本號,內核重大修改,奇數測試版、偶數穩定版
  • C:補丁序號,內核輕微修訂

3、新計劃:2003年發佈2.6.0至今:-D-E

  • D:構建次數,反應是極其微小的更新
  • E:描述信息

4、發行版本

  • Ubuntu
  • Fedora
  • Debian
  • RedHat

三、Linux初步使用

3.1、字符工作界面和圖形工作界面

  • 命令行界面CLI
  • 圖形用戶界面GUI

爲什麼使用字符工作方式?

Linux是一種類UNIX操作系統。在UNIX發展早期的時候,類UNIX操作系統根本沒有圖形工作界面,只有字符工作界面。

1、在字符操作方式下可以高效的完成所有的任務,尤其是系統管理工具。

2、遠程登錄後,進入的只能是字符工作界面。

3、由於使用字符工作界面不用啓動圖形工作環境,大大的節省系統資源開銷。

進入字符工作方式的方法:

1、在圖形工作界面下開啓終端窗口,進入字符工作方式。

2、切換到字符工作界面進入了字符工作方式。

3、使用遠程登錄方式進入字符工作方式。

3.1.1、Linux的運行級別以及切換

Linux系統在任何時候都要運行在一個指定的運行級上,並且不同的運行級別的程序和服務都不同,所要完成的工作和達到的目的也就不同。

  • 級別0 直接關機

所有的進程將被終止,機器將有序停止,關機時系統處於該級別。系統默認運行級別不能設置爲0。

  • 級別1 單用戶模式

一般用於系統維護,只有少數進程運行,服務不啓動,禁止遠程登錄,類似於Windows下的安全啓動模式登錄

  • 級別2 多用戶離線模式

與級別3一樣,只是NFS(網絡文件系統)沒有啓動,相當於離線的多用戶系統

  • 級別3 多用戶文本模式

允許多用戶登錄系統,有NFS,登錄後進入控制檯命令行模式

  • 級別4 系統保留模式(不可選)

保留,一般不使用,留給用戶自定義的運行級別

  • 級別5 圖形模式(如果有的話)

登錄後進入圖形GUI模式

  • 級別6 不斷重啓模式

所有進程被終止,系統重啓

查看當前系統的運行級:   runlevel
切換運行級命令:  init N(0123456)
需要sudo獲取權限

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-b1hRtT7B-1591956045109)(C:\Users\201781~1\AppData\Local\Temp\1584685298098.png)]

3.1.2在字符界面下工作

虛擬控制檯

Linux系統提供多個虛擬控制檯(默認七個),每個控制檯都可以獨立使用,互不影響。

如果系統在圖形下啓動,那麼可以使用Ctrl+Alt+F1~F6來切換到不同的字符界面的虛擬控制檯。

如果系統在字符界面下啓動,那麼可以使用Alt+F1-F6進行多個字符界面虛擬控制檯的切換。

字符界面比圖形界面效率高的原因:

3.1.3在圖形界面下工作

Ctrl+Alt+F7切換到圖形界面的虛擬控制檯。

3.2、Linux的基本使用

3.2.1 目錄、文件和設備

Windows有一個個的驅動器盤符,每個盤符都有自己的根目錄結構,形成了多個樹並行的結構。

Linux管理硬盤能力非常強,因此不需要顯示地分區,也就是沒有盤符。

Linux把所有的文件都管理在根目錄下 /

整個文件系統是以樹形結構管理(倒懸樹)的可以上下進入,但是不能左右進入。

bin 目錄下存儲了一些常用的系統命令。
sbin 目錄下存儲的是一些管理用戶才能使用的高級命令。
boot 目錄存儲的是系統啓動需要的數據,一旦該目錄下的文件被破壞,無法正常啓動系統。
dev  目錄存儲的是硬件設備文件,包含,鼠標、鍵盤、硬盤等。
etc目錄下存儲的是操作系統的各種配置文件。
home  目錄下存儲的是用戶主目錄,每個用戶對自己的主目錄有絕對的控制權。
lib 目錄下存儲的是庫文件(代碼庫、以.so或者.a結尾的文件。)
media  目錄下存儲的是多媒體設備,例如光盤、U盤、共享文件夾。
mnt 目錄下以掛載的方式呈現一些目錄,比如U盤等。
opt 目錄下安裝一些常用的軟件。
proc 目錄下存儲了各個進程的臨時文件和數據,記錄了系統運行的絕大部分性能信息和參數信息。
root  目錄下存儲了超級用戶的相關文件。
sys  存儲了系統中的設備和文件夾層次結構,系統信息。
usr和用戶

3.2.2命令格式和通配符

Linux系統的命令提示符:  wst@wst-VirtualBox:~$  
wst:當前的登錄用戶
@:分割符號
wst-VirtualBox:當前系統的簡寫主機名
~:代表用戶所在的目錄,此處代表家目錄
$:用戶權限等級,超級用戶:#  普通用戶:$
一般格式   :命令 [選項][參數]

例如:

ls      
ls -l /home/wst 參數是命令的操作對象、目錄、用戶、進程等。

注:若後面沒有選項和參數,一般會有默認值。

通配符:

*  :代表任意多個字符。
? :代表一個字符。
rm * :刪除當前目錄下的所有文件。

3.2.3獲取幫助和文檔

幫助手冊 :  man  n  關鍵字
n  :表示章節號

可以查: 系統命令、系統函數、標準庫函數

q鍵: 退出

3.2.4修改默認運行級別

默認 :/etc/init/rc-sysinit.conf :需要用vim打開rc-sysinit.conf 文件

進去後,發現 這行 env DEFAULT RUNLEVEL=2 :本行表示設置默認允許級別爲2

3.2.5最基本的安全問題

  • 獲取管理員權限:sudo
  • 修改用戶密碼: sudo password 用戶名
  • 切換到指定用戶: sudo 用戶名
  • 文件權限修改:chmod

3.3、Linux環境下的管理工具

3.3.1、字符下面的管理工具

版本 後端 前端

Debian、Ubuntu等 DPT管理器 DEB軟件包管理工具dpkg-deb/apt-get

ReHat RPM管理器 rpm

DEB 軟件包管理工具

1、本地管理:dpkg命令

2、在線安裝:apt類命令

更新軟件源: sudo apt-get update
更新操作系統:  sudo apt-get  upgrade
安裝軟件:  sudo  apt-get  install  軟件名
卸載軟件: sudo  apt-get  remove 軟件名

3.3.2、圖形界面下的管理工具

1、Ubuntu軟件中心

2、更新管理器

3、系統設置

3.3.3、基於WEB界面下的管理工具

pyDash

四、Linux的一些基本命令

4.1、文件和目錄操作命令

Linux系統中,文件和目錄的命名規則

  • 除了/之外,所有字符都可以使用。但是使用某些特殊字符容易出問題,儘量避免。
  • 目錄名或者文件名不能超過255個字符。
  • 目錄名或文件名是區分大小寫的。
  • 文件的擴展名對Linux系統來說,沒有特殊的含義。
1) cd /    :回到根目錄
(2) clear   :清屏
(3)ls -l    :查看當前目錄下所有文件和目錄各種屬性,每一行第一個字符表示的就是文件類型。
- 普通文件,包括了純文本文件,二進制文件,各種壓縮文件
d 目錄
b 塊設備文件
c 字符設備文件,例如鍵盤,鼠標
s 套接字文件,通常用於網絡數據連接
p 管道文件
l 鏈接文件

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Epynf1zW-1591956045112)(C:\Users\201781~1\AppData\Local\Temp\1585293217206.png)]

4.1.1、pwd與cd命令

1)pwd [OPTION] ... :顯示當前路徑。
參數:-L 目錄連接鏈接時,輸出連接的路徑。
參數:-p 輸出物理路徑
(2)cd [相對路徑或者絕對路徑]  :切換路徑
cd /  :回到根目錄
cd ..  :回到上級目錄
cd    :切換到當前用戶的主目錄
cd ~  :切換到當前用戶的主目錄
cd -   :切換到上次所在的目錄

ls命令:

ls -a  :顯示全部的文件,包括隱藏文件(開頭.文件)
ls  -A  :-a一樣,不顯示...兩個目錄
ls  -d   :只列出目錄本身,而不列出
ls  -F   :顯示的目錄文件名之後加一個斜線(“/”)字符
ls  -l   :使用長格式列出文件和目錄信息。
ls   -R  :連同子目錄內容一起列出來
ls  -S :以文件大小排序列出。
ls  -t :以時間排序列出。

4.1.2、mkdir與rmdir命令

https://blog.csdn.net/weixin_43759352/article/details/105157844

4.1.3、touch命令

https://blog.csdn.net/weixin_43759352/article/details/105161279

4.1.4、cp命令、rm命令、mv命令、ln命令

https://blog.csdn.net/weixin_43759352/article/details/105161279

4.2、顯示命令

4.2.1、cat、more和less

cat:連接文件並打印輸出到標準輸出設備
more:分屏顯示文件內容
less:查看文件內容,功能更加豐富

4.2.2、head和tail

head:顯示文件開頭內容
tail:顯示文件結尾內容

​ 選項:

​ -n K:顯示開頭或結尾K行內容

​ -c K:顯示開頭或結尾K個字節的內容

4.2.3、file、locate和which

file:查看文件信息或類型

​ 選項:

​ -i:輸出文件的MIME類型字符串

locate:查找文件或目錄
舉例:
locate /etc/k     查找/etc目錄下以k開頭的文件
locate pwd        查找和pwd相關的所有文件
which:列出命令的所在路徑

4.3、網絡命令

4.3.1、hostname、ping和host

hostname命令:用於顯示或設置系統主機名
ping命令:測試與目標主機的連通性
  • Linux:會一直髮送數據包,ctrl+c結束

  • windows:只發送4次, 加/t 可以一直髮送

host命令:域名查詢工具。

例如: host www.baidu.com

4.3.2、ifconfig:顯示或者設置網絡配置信息。

sudo ifconfig eth0 up(開啓)/down(關閉)

注意:

  • ssh登錄Linux的遠程服務器時,關閉網卡要千萬小心,除非有多塊網卡。

  • 使用ifconfig命令配置網絡信息,當機器重啓或者網卡重啓,都會讓配置失效。

windows使用ipconfig查看。

4.3.3、telent和ftp命令。

telent:遠程登錄命令。採用明文傳送報文的方式,速度快,但是安全性不高,除了遠程登錄外,還可以確定遠程服務器的狀態。

ssh:安全的遠程登錄。

ssh 用戶名@serverip: 數據加密、速度稍慢、但安全性高。

ftp: 登錄ftp服務器

登錄格式:  ftp 域名或者serverip

4.3.4、wall、write和mesg命令。

wall:發送廣播信息。用於向系統當前所有打開的終端,輸出信息。

1、輸入wall 回車

2、輸入要廣播的內容

3、CTRL+D結束

write:用於發送信息給其他使用者。可以指定用戶發送信息、如果用戶有多個終端在線,還可以指定某個終端。

write 用戶名[用戶的終端名pts/123。。。]

發送完畢:CTRL+C結束

mesg命令:用戶設置終端機的信息寫入權限。

mesg y:其他用戶可以利用write來把信息直接顯示到自己終端上

mesg n:不允許用戶可以利用write來把信息直接顯示到自己終端上

4.3.5、finger命令。

查詢用戶的資料。

4.3.6、netstat

顯示網絡的狀態

  • netstat -a:顯示詳細的網絡狀態
  • netstat -nu:顯示當前用戶的udp的連接狀況
  • netstat -apu ;顯示端口號的使用情況
  • netstat -i:顯示網卡列表

4.4、系統狀態顯示命令

4.4.1、stat命令

用於顯示inode內容,以文字格式顯示。

stat text.txt

4.4.2、who、whoami、

who:顯示系統中哪些使用者正在使用

uname:顯示系統信息

4.4.3、clear 清屏

CTRL+L一樣的可以清屏。

五、磁盤和文件系統

5.1、磁盤與磁盤分區

5.1.1、磁盤簡介

5.1.1.1、機械硬盤(HDD)

機械硬盤的邏輯結構

磁道:盤片表面以盤面中心爲圓心,半徑不同的同心圓成爲磁道。

扇區:主要是存儲數據地點的標識符和存儲數據的數據段。每個扇區大小固定,一般爲512B、扇區也是磁盤的最小儲存單位。

柱面:不同的盤片,相同的磁道從上而下的圓柱區域稱爲柱面。

磁盤大小:磁頭數柱面數扇區數*每個扇區的大小

機械硬盤的接口(磁盤類型)

  • IDE接口的硬盤(ATA、PATA)

    價格低、兼容性強、性價比高、速度慢、線纜長度短、連接設備少,不支持熱插拔

  • SATA接口的硬盤

    又叫串口硬盤、速度更快、糾錯能力強、安全性高

  • SCSI接口的硬盤

    廣泛用於服務器上,可以多任務、帶寬大、價格高

  • SAS接口的硬盤

    其實是串行的SCSI、一般用於高端的服務器。

5.1.1.2、固態硬盤(SSD)

5.1.2磁盤分區

磁盤設備在Linux下的表達方式

主設備號+次設備號+磁盤分區號

sd[a-z]x

查詢命令所有磁盤設備文件     ls /dev/sd*
執行上面的命令,顯示結果:  /dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1

磁盤分區

MBR【主引導記錄】和主分區

MBR:放置硬盤的信息區,一般有512B,分爲兩個部分:

1、466字節,放置引導代碼,也就bootloder

2、64個字節,用於存放磁盤分區表

主分區:用來啓動操作系統,一般最好把MBR放置在主分區

擴展分區和邏輯分區

主分區最大數爲4,擴展分區也屬於主分區,並且最多隻能有一個擴展分區

主分區可以馬上使用,但不能再分區,擴展分區必須進行分區後才能使用,也就是劃分爲邏輯分區纔可以使用。

Linux規定:邏輯分區必須是建立在擴展分區上。

實際上只有主分區和邏輯分區是用來存儲數據的。

sudo fdisk -l
   設備 啓動      起點          終點     塊數   Id  系統
/dev/sda1   *        2048    39845887    19921920   83  Linux
/dev/sda2        39847934    41940991     1046529    5  擴展
/dev/sda5        39847936    41940991     1046528   82  Linux 交換 / Solaris

創建磁盤分區的目的

  • 1、提升數據的安全性。

  • 2、支持安裝多個操作系統。

  • 3、多個小分區對比一個大分區有性能上的提升。

  • 4、有更好的組織數據。

5.2、Linux的文件系統

5.2.1、Linux的文件系統

各個操作系統使用的文件系統並不相同,例如,WIN98用的FAT,WIn2000後使用NTFS,Linux使用EXT系列

df -T -h  //-h顯示換算單位方便查看,-T顯示文件系統類型

一般文件系統會將文件的實際內容和屬性分開存放:

1、文件屬性存放在inode中(節點塊)

2、文件的實際數據保存在block中(數據塊)

3、還有一個超級塊,用於記錄整個文件系統的整體信息

這類管理文件的系統稱爲索引式文件系統,(EXT系列都是索引式文件系統)

5.2.2、文件系統類型簡介

1、jffs2

最早基於Linux2.0的內核,並且爲嵌入式系統開發的文件系統。

2、yaffs

yaffs/yaffs2專門爲嵌入式系統使用的一種文件系統。

3、Cramfs

一款只讀的壓縮文件系統。

4、Romfs

傳統型的Romfs文件系統是一種簡單的、緊湊的、只讀的文件系統。

5.2.3、使用Linux文件系統的一般方法

touch 文件名  創建文件
rm  文件名    刪除文件、不經過回收站
cp  源文件(位置+文件名) 目標位置+新文件名
mv  源文件(位置+文件名) 目標位置+新文件名
注意:使用cp、mv如果目標位置有同名文件則會覆蓋

more 文件名    顯示文件開頭內容 q退出
cat  文件名    顯示文件的所有內容
head 文件名    只顯示文件的開頭
tail 文件名    只顯示文件的末尾

mkdir  目錄名  創建目錄
rmdir  空目錄名  刪除空目錄

5.3、文件系統的管理和維護

5.3.1、文件系統操作

1、列出文件系統的整體磁盤使用量——df:評估了文件系統的磁盤使用量,包括文件系統所在硬盤分區的總容量、已使用的容量、剩餘容量。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-P0DEpbuW-1591956045114)(D:\typora\File\Linux學習筆記image\Snipaste_2020-04-17_14-13-12.png)]

2、統計目錄或文件所佔磁盤空間大小——du

du  參數 文件名或目錄名
  • -h:使用習慣的單位顯示磁盤佔有量
  • -s:只顯示當前目錄的磁盤佔有量,不列出子目錄和文件的佔用量
舉例:
創建一個wst的空文件夾
用命令:du  -h  wst
顯示
4.0K	wst

3、連接文件——ln

5.3.2、維護文件系統的卷標

卷標就是一個磁盤的標識、不唯一

不同的文件系統的卷標管理工具:

  • 對於ext2/3/4類型的文件系統使用:e2label

  • 對於ntfs類型的文件系統使用:ntfsprogs

  • 對於FAT類型的文件系統:mtools

如何設置文件系統的磁盤卷標名:

1、顯示/dev/sda1塊設備的卷標名

sudo e2label /dev/sda1

2、設置卷標名disk1

sudo e2label /dev/sda1  /disk1

5.3.3、掛載文件系統

1、fdisk命令創建分區(主分區、邏輯分區)

sudo fdisk /dev/sda
n 新建分區
   p  主分區
   e  擴展分區
   l  邏輯分區
p 顯示當前分區
d 刪除分區
q 不保存退出
w 保存並退出  慎重使用

2、格式化分區——創建文件系統

分區完成後、如果不格式化寫入文件系統,則不能正常使用,此時需要mkfs命令對磁盤分區進行格式化

sudo mkfs -t 文件系統類型 -c  分區設備號
-t:指定文件系統類型
-c:建立文件系統前先檢測有無壞塊

3、掛載文件系統

掛載:將硬盤設備的文件系統和Linux系統中的文件系統,通過指定的目錄(作爲掛載點)進行關聯

mount 【參數】【分區設備名】 【掛載點】
舉例:
  sudo mount ext3 /dev/sda3  /media/sda3

4、卸載文件系統

sudo umount <分區設備名或者是掛載點>
sudo umount /dev/sda3  (/media/sda3)

5.3.4、使用可移動儲存設備

1、光盤

建立掛載點
sudo mkdir /mnt/cdrom
掛載光盤
sudo mount /mnt/cdrom
卸載
sudo umount /mnt/cdrom

2、U盤

1、先查看u盤的分區設備名
sudo fdisk -l
2、創建掛載點
sudo mkdir /mnt/usb
3、掛載u盤
sudo mount -t  vfat -o iocharset=utf8 u盤的分區設備名  /mnt/usb

5.3.5、在系統啓動時自動掛載文件系統

六、多用戶和多任務管理

6.1、多用戶概述

6.1.1、基本概念

  • 用戶:不同的用戶具備不同的權限,每個用戶在權限允許範圍內完成不同的任務,Linux利用了這種權限的劃分和管理,實現了多用戶多任務的運行機制。
  • 用戶組:用戶組是具有相同特徵用戶的邏輯集合。

Linux用戶與用戶組的關係:

  • 一對一關係:一個用戶存在與一個組中,是組中的唯一成員。
  • 一對多關係:一個用戶可以存在多個用戶組中,此用戶具有多個組的權限。
  • 多對一關係:多個用戶存在於一個組中,這些用戶就具有和組相同的權限
  • 多對多關係:多個用戶存在於多個組中。

Linux的UID和GID(用戶ID和組ID)

Linux系統中,每個用戶兩種ID號,用戶ID(UID),組ID(GID)

6.1.2、賬號的系統文件

1、/etc/passwd文件:系統用戶配置文件,存儲了系統中所有的用戶的基本信息,並且所有用戶都可以對此文件進行讀操作。

vim /etc/passwd 以只讀的方式打開passwd文件
退出:ZZ

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9l3CGYJG-1591956045115)(D:\typora\File\Linux學習筆記image\Snipaste_2020-04-24_14-08-28.png)]

用戶名 :密碼 :UID :GID :描述信息 :用戶的主目錄 :默認的Shell
  • 用戶名:就是一串能代表用戶身份的字符串。

  • 密碼:“X”表示此用戶設有密碼,但不是真正的密碼,真正的密碼保存在/etc/shadow文件中。

  • UID:每個用戶都有唯一的一個UID,範圍:0~65535。

    0:表示超級用戶

    1~999:表示系統用戶(僞用戶)

    1000~65535:普通用戶。

  • GID:表示用戶的初始組的組ID。

    初始組:指的是用戶登錄時就擁有這個組的相關權限,每個用戶的初始組只能有一個。

    附加組:指用戶可以加入多個其他的用戶組,並擁有這些組的共同權限。

  • 描述性信息:只是用於解釋這個用戶的意義而已。

  • 默認的Shell:Shell是Linux的命令解釋器,可以理解成用戶登錄後擁有的權限。

2、etc/shadow文件(影子文件):用於儲存Linux系統中用戶的密碼信息。

sudo vim /etc/shadow
用戶名:加密密碼:密碼最後一次修改時間:最小的修改時間間隔:密碼有效期:密碼有效期截至前的警告天數:密碼過期後的寬限時間:賬號失效時間:保留字段
  • 加密密碼:這裏保存的是真正加密後的密碼
  • 密碼最後一次修改時間:密碼最後修改的時間與1970年1月1日相隔幾天
date -d "1970-01-01 18326 days"//換算天數與日期
  • 最小的修改時間間隔:最後一次修改密碼日起,幾天內不能修改密碼,0表示隨時可以修改

  • 密碼有效期:默認99999,亦可以認爲是永久生效

  • 密碼有效期截至前的警告天數:提前幾天警告

  • 密碼過期後的寬限時間:0:立即失效 -1:永不失效

  • 賬號失效時間:如果規定了此時間,無論密碼是否失效,到期後,帳號都無法使用,以1970.1.1爲基準

  • 保留字段:目前還沒有使用

3、/etc/group文件:用戶組配置文件,所有的用戶組的所有信息都在此文件中

組名:組密碼:GID:該用戶組中的用戶列表
  • 組名:描述組名稱的一串字符串,不能重複

  • 組密碼:“x”表示有組密碼,真正的加密後的組密碼保存在/etc/gshadow中

  • GID:該用戶組中的用戶列表:顯示所有用戶(附加用戶)

4、/etc/gshadow文件:儲存組用戶的組密碼信息

組名:加密密碼:組管理員:組附加用戶列表

6.2、賬號管理

6.2.1、用戶賬號管理

1、useradd命令:添加新的系統用戶。

useradd 【選項】 用戶名

創建用戶賬號的默認值可以通過:useradd -D 來查看。

修改:

2、passwd命令:修改用戶密碼

passwd [選項] 用戶名 //root用戶

選項:

  • -S:查詢用戶密碼的狀態,只有root用戶能使用
  • -l:暫時鎖定用戶
  • -u:解鎖用戶

3、chage命令:修改用戶密碼狀態

chage [選項]	用戶名

選項:

  • -l:列出用戶的詳細密碼信息
  • -d 日期:修改最後一次修改密碼的日期

4、userdel命令:刪除用戶

userdel [選項] 用戶名

選項:

  • -r:刪除用戶並且刪除用戶家目錄

6.2.2、組帳號管理

1、groupadd命令:添加用戶組
groupadd [選項] 組名
2、groupdel命令:刪除用戶組
3、gpasswd命令:把用戶添加進組或者從組中刪除
gpasswd [選項] 組名

選項:

  • -a user:將user加入組中
  • -d user:將user從組中移除
  • -M user1…:講多個用戶加入組中
  • -A user1…:設置用戶管理員

4、newgrp命令:切換用戶的有效組

newgrp 組名
1、創建一個有家目錄,和shell爲bash的用戶user2
sudo useradd -g group1 -G group2,group3 -m -s /bin/bash user2 
2、給user2設置密碼
passwd user2
3、切換到user2用戶
su - user2
4、通過newgrp命令切換user2的有效組,並且創建文件
mkdir user1
newgrp group2
mkdir user2
newgrp group3
mkdir user3
ls -l

6.2.3、用戶和組狀態命令

1、usrmod命令:修改用戶信息
2、groupmod命令:修改用戶組

​ -g GID :修改組ID

​ -n 新組名: 修改組名:groupmod -n 新組名 舊組名

3、su命令:用戶間切換

​ 從普通用戶切換到root用戶,從root用戶切換到普通用戶,以及普通用戶之間切換

su [選項] 用戶名

選項:

  • -:當前用戶不僅切換爲指定用戶的身份,而且工作環境也切換了
  • -p:切換用戶身份,但是不切換工作環境
  • -c:切換用戶並且只執行一次命令,然後自動切換回來

4、id命令:查看用戶的UID和GID

6.3、磁盤配額

6.3.1、磁盤配額概述

磁盤配額:Linux系統中用來限定特定的普通用戶或者用戶組在指定的分區上佔用的磁盤空間或者文件個數。

1、磁盤配額限制普通用戶和用戶組,root用戶不能做磁盤配額

2、磁盤配額只針對分區,不能針對目錄

3、可以限制用戶所佔用的磁盤容量大小(block),還可以限制佔用的文件數(inode)

安裝quota命令:

sudo apt-get install quota

磁盤配額中的常見概念:

  • 用戶配額和組配額
  • 磁盤容量限制和文件個數限制
  • 軟限制和硬限制
  • 寬限時間

6.3.2、配置磁盤配額

1、設置掛載參數userquota和grpquota

創建一塊虛擬硬盤:

關閉虛擬機->設置->儲存->控制器SATA->添加虛擬硬盤->創建新的虛擬硬盤->VDI->固定大小->位置、名字、大小->創建

對sdb硬盤進行分區:

sudo fdisk /dev/sdb

格式化分區:

sudo mkfs -t ext3 -c /dev/sdb1

掛載分區:

sudo mount /dev/sdb1 /home/test

設置掛載參數

sudo mount -o remount,usrquota,grpquota /home/test
mount |grep sdb1
2、掃描文件系統並且建立Quota記錄文件:quotacheck命令
quotacheck [-avugfM] 文件系統

一般只需要使用 quotacheck -avug

6.3.3、管理磁盤配額

1、開啓磁盤配額限制(quotaon命令)
quotaon [-avug] 
quotaon [-uvg] 文件系統名稱
2、關閉磁盤配額限制(quotaoff命令)

命令格式與quotaon相同

3、修改用戶(羣組)的磁盤配額(edquota命令)
edquota [-u 用戶名] [-g 羣組名]
edquota -t
edquota -p 源用戶名 -u 新用戶名
4、查看配額(quota)
sudo quota -uvs linux

6.4、設置文件和目錄的操作權限

6.4.1、操作權限簡介

查看文件或者目錄的權限信息

ls -l
rwx(所有者權限) r-x (所屬組權限)r-x(其他人權限)
  • rwx權限對文件的作用

      	r:表示可讀取此文件的實際內容
    
      	w:表示文件可以被編輯
      
      	x:表示該文件具備被系統執行的權限
    
  • rwx權限對目錄的作用

      	r:表示讀取目錄結構列表的權限:ls
    
      	w:對於目錄,w權限是最高權限
      
      	x:表示用戶可以進入目錄:cd
    

6.4.2、更改文件和目錄的操作權限

chmod命令通過數字修改文件權限

r --> 4
w --> 2
x --> 1
例如:rwx(所有者權限) r-x (所屬組權限)r-x(其他人權限)
所有者:4+2+1 = 7
所屬組:4+1   = 5
其他人:4+1   = 5
    對應的權限值  755
chmod [-R] 權限值 文件\目錄名

chmod命令通過字母修改文件權限

chmod [u/g/o/a] [=(設定)/+(加入)/-(刪除)] [r/w/x] 文件名

6.4.3、更改文件或目錄的屬主和所屬組

chown [-R] 所有者:所屬組 文件或目錄

6.4.4、設置文件或目錄的權限掩碼

​ 默認情況下,創建一個文件的權限爲“rw-r–r-- 目錄:rwx r-x r-xr-x

​ umask:root用戶默認0022,— -w- -w-普通用戶默認0002 -------w

文件或者目錄的初始權限 = 文件或目錄的最大默認權限 - umask權限掩碼
  • 對於文件而言,最大默認權限666 rw rw rw
  • 對於目錄而已,最大默認權限777 rwx rwx rwx

umask 權限掩碼

umask 權限掩碼

6.5、多任務概述

6.5.1、基本概念

1、任務

通常一個任務就是程序的一次運行。

2、程序

程序是使用計算機語言編寫的可以實現特定目標或者解決特定問題的代碼集合

儲存在磁盤上,包括指令和數據的實體

3、進程

就是運行中的程序

一個運行的程序,可能有多個進程,每個進程在過程中執行特定的任務

是程序執行和管理資源的最小單位

4、進程的分類

  • 交互進程:由shell啓動的進程
  • 批處理進程:與終端無關,是一種進程序列,
  • 守護進程:也叫做監控進程,總是活躍的

5、查看進程

簡單形式

PS

以簡略的方式顯示當前用戶有控制終端的進程信息

  • BSD形式

ps axu

  • SVR4形式

ps -efl

6、父進程、子進程、孤兒進程、殭屍進程

父進程啓動子進程後,子進程可以與父進程同時運行

子進程先於父進程結束,子進程向父進程發送信號,父進程回收子進程的相關資源

父進程先於子進程結束,子進程成爲了孤兒進程,同時init進程收養,變成了init進程的子進程

子進程先於父進程結束,但是父進程沒有回收子進程的資源,子進程就變成了殭屍進程

7、進程標識符(進程ID)

每個進程都有一個非負整數表示的唯一標識,PID

任何時候PID都是唯一的,但是可以重用,當一個進程退出的時候,其進程ID就可以被其它進程使用

延時重用

6.5.2、進程的啓動方式

Linux手動啓動進程

前臺啓動進程

後臺啓動進程:其實就是在命令的結尾處添加一個 & 符號

Linux調度啓動進程:

​ 實現調度啓動的方式:at、crontab命令

6.6、進程的管理

6.6.1、實時監聽進程運行的狀態——top命令

top [選項]
  • -d 秒數:間隔幾秒更新
  • -n 次數:
  • -p 進程PID:僅查看指定ID的進程
  • -u 用戶名:查看指定用戶的進程

6.6.2、調整進程優先級——nice命令

修改NI值:

​ 1、NI範圍-20~19

​ 2、普通用戶調整的NI範圍是0~19,而且只能調整自己進程

​ 3、普通用戶只能調高NI值,不能降低

​ 4、只有root用戶才能設定NI值爲負數,並且可以調整任何一個用戶的進程

nice:可以給要啓動的進程賦予NI值,但是不能修改已啓動的進程的NI值

renice命令:可以修改正在運行的進程的NI值

6.6.3、終止進程

kill [信號] PID

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4e5XK5Mz-1591956045116)(D:\typora\File\Linux學習筆記image\Snipaste_2020-05-15_20-45-31.png)]

kill 2288//默認信號15
kill -9 2288//強制結束進程

七、Shell簡易編程

7.1、Shell簡介

7.1.1、Shell是什麼

  • Shell也是一個應用程序,它連接了用戶和Linux內核,讓用戶能夠更高效,安全,低成本的使用Linux內核,這也是Shell的本質。

  • Shell也是一種腳本編程語言。


7.1.2、Shell能做什麼

1、連接用戶和內核

2、還能連接其他程序

3、Shell還支持編程

7.1.3、Shell怎樣連接用戶和內核

Shell是通過內核提供的接口函數,來實現用戶與內核之間的交互

7.2、Shell的主要類型

常見的Shell有sh,bash,csh,ash,dash等

  • sh:sh是UNIX系統上標準的Shell,sh是第一個流行的Shell。
  • csh:csh的語法有點類似C語言,成爲C Shell。
  • ash:一個簡單的輕量級的Shell,佔用的資源少。
  • bash:bash由GNU組織開發,保持了對sh shell的兼容,也是各種Linux發行版默認的配置的shell

查看Shell

當前系統可用的Shell都記錄在/etc/shells文件中

cat /etc/shells

查看shell指向哪種解釋器:

ls /bin/sh -l

如何切換sh的指向,指向到bash:

sudo dpkg-reconfigure dash

7.3、Shell命令

7.3.1、進入Shell的兩種方式

1、進入Linux控制檯

Ctrl+Alt+Fn(1、2、3…)

2、使用終端

7.3.2、Shell命令的基本格式

命令提示符:

wst@wst-VirtualBox:~$ 

基本格式:

command [選項][參數]

1、使用選項:ls -l

2、使用參數:參數就是命令的操作對象 ls -l /bin/sh

3、一起使用

7.3.3、Shell命令的本質

一個外部的應用程序是如何變成一個Shell命令的?

Shell在啓動文件中增加了一個叫做PATH的環境變量,這個變量保存了Shell對外部命令的查找路徑,如果找不到對應的文件名,則直接保錯。

查看PATH環境變量的值:

echo $PATH

讓應用程序編程內部命令:

  • gcc -std=c99 getsum.c
  • gcc -std=c99 -o getsum getsum.c
  • mv getsum ~/bin
  • get
  • getsum -s 1 -e 100

Shell的內置命令本質是一個自帶的函數。

Shell的外部命令本質是一個應用程序,執行外部命令就是啓動一個應用程序。

7.4、Shell的特殊字符

7.4.1、通配符

  • *:代表任意長度的字符串,例如:ls f *
  • ?:代表任意的單字符
  • []:代表指定的一個字符範圍 ls f[abcd] ls f[a-d]
*Text*
[ab-df]*
[ab-dm]?
??    

7.4.2、引號

1、單引號

由單引號括起來的字符都作爲普通字符出現,特殊字符被單引號括起來後,失去原有的意義。

echo '$PATH'
$PATH    

2、雙引號

雙引號屬於弱引用,雙引號內有命令、變量等,會先把變量、命令解析出來結果,然後輸出最終結果。

echo "$PWD"
/home/wst

3、註釋符

單行註釋

直接在行的最前面加上#即可

多行註釋

1、eof 截止符

:<<eof 註釋代碼 eof

舉例:

echo "test"
echo "test"
echo "test"
:<<eof 
echo "test"
echo "test"
eof

2、感嘆號

:<<! 註釋代碼 !

3、逗號

:,註釋代碼 ,

7.5、輸入和輸出

7.5.1、管道

將兩個或者多個命令(程序、進程)連接在一起,把一個命令的輸出作爲下一個命令的輸入

Linux下使用|連接多個命令,也成爲管道符

command1 | command2 [|command3.....]

舉例:

find  ~/  | grep "test"

7.5.2、重定向

改變默認的輸出方式,可以由打印到屏幕改爲寫入文件

舉例:

ls > test.txt
ls >> test.txt
在輸出重定向中,>表示覆蓋,>>表示追加

管道和重定向的區別

  • 重定向必須是由文件來接收輸出
  • 管道可以由命令來接收輸出

不能嘗試:

command1 > command2 [|command3.....]

7.6、Shell編程

7.6.1、Shell基本語法

Shell變量

定義

變量名=value
變量名='value'
變量名="value"
注意:賦值號周圍不能加空格

使用變量

只要在變量前加入$即可

刪除變量

unset 變量名

7.6.2、Shell程序的控制結構語句

if 條件1  then    如果條件1爲真,則執行
elif  條件2  then  2爲真,則執行
else  12爲假則執行
for  變量名  in  列表
do 
   命令
   
done

7.6.3、運行Shell程序的方式

1、直接執行./test.sh

需要給Shell程序用戶的執行權限

 chmod u+x hello.sh
./test.sh

2、使用bash test.sh

3、使用. test.sh

執行方式 是否需要執行權限 是否以新進程運行腳本
./test.sh
bash test.sh
. test.sh

八、嵌入式Linux及編程

8.1、嵌入式系統概述

8.1.1、嵌入式系統的基本概念

什麼是嵌入式系統?

嵌入式系統是以應用爲中心,以現代計算機技術爲基礎,能夠根據用戶需求(功能、可靠性、成本、體積、功耗、環境等靈活裁剪軟硬件模塊的專用計算機系統。

8.1.2、嵌入式系統的體積結構

  • 硬件部分:
      	處理器、儲存器、外部設備、I/O接口
    
  • 軟件部分:
      	驅動層:是直接跟硬件打交道
    
      	操作系統層
      
      	中間件層
      
      	應用層
    

8.2、嵌入式開發

8.2.1、嵌入式系統開發概述

選擇嵌入式處理器(硬件平臺)-》選擇嵌入式操作系統-》開發嵌入式應用軟件 -》測試 -》系統測試 -》開發結束

​ 1、建立開發環境

​ 安裝操作系統以及交叉編譯器

​ 2、建立引導程序

​ 下載公開的源代碼

​ 3、下載已經移植好的Linux操作系統內核

​ 4、建立根文件系統

​ 5、開發應用程序

8.2.2、嵌入式軟件開發概述

  • 嵌入式開發的模式
      		A類機編寫源代碼,編譯得到可執行程序,發佈給B類機運行,這種編譯模式叫做交叉編譯
    
  • 非嵌入式開發模式
      		A類機編寫源代碼,編譯得到可執行程序,發佈給A類機運行
    
  • 爲什麼要用交叉編譯
      		1、嵌入式的CPU簡單,本身無法搭建開發環境,有些甚至連操作系統都沒有
    
      		2、交叉編譯可以讓高性能的機器爲低性能的機器開發軟件
    

8.3、編輯器VI

8.3.1、VI的三種工作模式

  • 命令模式
      	使用vim編輯文件時,默認處於命令模式。
    
      	可以移動光標的位置,可以對文件內容進行復制、粘貼、刪除
    
  • 輸入模式
      	可以對文本進行寫操作,可以使用i、I、a、A、o、O快捷鍵進入輸入模式
    
      	當文件編輯完成後,按Esc可以返回命令模式
    
  • 編輯模式(末行模式)
      	用於對文本中的指定內容的保存、查找、替換等操作
    
      	使用編輯模式方法:在命令模式狀態下按下 :  鍵,此時,編輯器末行出現 :符號,則進入了編輯模式,可以輸入對應的操作指令了
      
      	退出編輯模式:按Esc
    

8.3.2、VI常用命令

  • vim打開文件
vim [選項] 文件名

​ 選項:

​ -R:以只讀形式把文件放入vim編輯器中

​ +n:打開文件到第n行

​ +: 打開文件到最後一行

​ -r:恢復上次vim打開時崩潰的文件

  • vim刪除文本
      	在命令模式下:
    
      	x:刪除光標處字符
      
      	dd:刪除光標所在行
      
      	ndd:刪除當前行(包括當前)後n行
      
      	dG:刪除當前行後所有內容
      
      	G:刪除光標後所有內容
    
  • vim複製和粘貼文本
      	在命令模式下:	
    
      		yy:所在行復制到粘貼板,可以加n,複製多行
      
      		p:粘貼到當前行下一行
      
      		P:粘貼到當前行前一行
    
  • vim保存退出文本
      	在編輯模式下:
    
      		:wq 	保存並退出
      
      		:wq!	強制保存並退出
      
      		:q		不保存就退出
      
      		:q!		不保存,強制退出
      
      		:w
      
      		:w!
      
      		:w 文件名			
      
      	在命令模式下:
      
      		ZZ: 保存並退出
    
  • vim撤銷和恢復
      	在命令模式下:
    
      	u:撤銷最近一次對文本的修改操作
      
      	U:第一次會撤銷對所在行的全部操作,第二次恢復對該行文本的所有操作
    

8.3.3、VI的高級應用

  • vim可視化模式
      	在命令模式下:
    
      	v:以字符爲單位,進入可視化
      
      	V:以行爲單位,進入可視化
      
      	ctrl+v:以區域爲單位,進入可視化
    
  • vim多窗口編輯模式

    水平多窗口:

      		在命令模式下輸入 :sp 文件名
      
      	垂直多窗口:
      
      		在命令模式下輸入 :vs 文件名
      
      	切換窗口:ctrl + WW
    

8.4、編譯器GCC

8.4.1、GCC的編譯過程

編輯-》預處理-》編譯-》彙編-》鏈接

​ 1、編輯: vim hello.c ->hello.c

​ 2、預處理: hello.c ->hello.i(預處理文件)

​ 3、編譯: hello.i ->hello.s(彙編文件)

​ 4、彙編: hello.s ->hello.o(目標文件)

​ 5、鏈接: hello.o ->a.out(可執行文件)

8.4.2、GCC的基本用法和選項

1、生成可執行文件
gcc [選項] 源文件名

​ 得到默認名字爲 a.out 的可執行文件

2、運行可執行文件
./a.out
3、GCC常用的選項

​ -E:只做預處理,不進行編譯

​ -o 文件名:指定輸出文件

​ -S:只編譯,不彙編

​ -c:編譯、彙編,而不鏈接,得到目標文件

​ -l:鏈接指定的文件

​ -g:生成調試信息

8.4.3、GCC的錯誤類型及其對策

1、C語法錯誤。

2、頭文件錯誤。

3、段錯誤。

4、出現中文字符。

5、編譯標準錯誤。

hello.c
#include<stdio.h>
int main(){
printf("hello");
for(int i=0;i<10;i++){
printf("i=%d\n",i);
}
return 0;
}
gcc -std=c99 hello.c && ./a.out

注:

for(int i=0;i<10;i++)  需要加-std=c99

CTRL+空格:切換輸入法。

8.4.4、配置vim

vim的全局配置一般在/etc/vim/vimrc或者/etc/vimrc

個人用戶的配置在~/.vimrc

  • 先輸入冒號:

  • 打開行號:

set number
  • 關閉行號:
set nonumber
  • 查詢是否開啓
:set nonumber?

配置vimrc

1、打開vimrc

vim ~/.vimrc

2、進行配置 輸入如下配置代碼

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-3eE6RN1L-1591956045117)(C:\Users\201781~1\AppData\Local\Temp\1591337738814.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Gse7832A-1591956045118)(C:\Users\201781~1\AppData\Local\Temp\1591337750193.png)]

  1 "顯示行號
  2 set number
  3 "設置tab鍵的寬度
  4 set tabstop=4
  5 "設置縮進的寬度
  6 set shiftwidth=4
  7 "自動對齊
  8 set autoindent
  9 set smartindent
 10 "保存推出函數
 11 func! SaveExit()
 12     exec "wq"
 13 endfunc
 14 
 15 "不備份
 16 set nobackup
 17 "不生成臨時文件
 18 set noswapfile
 19 
 20 "映射Ctrl+z按鍵調用保存並推出函數“
 21 map <C-z> :call SaveExit()<CR>
 22 imap <C-z> <ESC>:call SaveExit()<CR>

寫完之後,先ESC、後大寫ZZ 保存退出!!!

3、設置配置生效

source ~/.vimrc

8.5、調試器GDB

8.5.1、GDB的簡單使用流程

1、編譯代碼加入-g選項

gcc gdb_sum.c -o gdb_sum -g 

2、如果編譯成功,啓動GDB調試器

gdb gdb_sum -silent

注:加上-silent是去掉描述提示信息。

3、輸入GDB調試命令,進行調試

gdb -l選項:列出源文件內容。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-8e6OgUyE-1591956045118)(C:\Users\201781~1\AppData\Local\Temp\1591339179603.png)]

默認每次顯示10行源代碼,如果沒顯示完,可以繼續使用l命令。。。

注意:q退出GDB.。

gdb -b選項:設置斷點。

設置斷點的方法:指定內存的地址爲斷點,指定行號爲斷點,指定函數名爲斷點。

gdb -r選項:執行程序。

斷點設置好後,r開始執行程序,直到斷點處停下。

gdb -p選項:打印變量的值

gdb -n選項:單步調試。

gdb -c選項:繼續執行程序。

直到遇到斷點或者程序結束

gdb -q(quit) 選項:退出調試。

8.6、工程管理器Makefile

Makefile可以認爲是一個工程文件的編譯規則。

gcc a.c b.c d.c -o out

1、編譯的時候徐需要鏈接庫的問題

2、編譯大的工程會花費大量的時間

到默認名字爲 a.out 的可執行文件

2、運行可執行文件
./a.out
3、GCC常用的選項

​ -E:只做預處理,不進行編譯

​ -o 文件名:指定輸出文件

​ -S:只編譯,不彙編

​ -c:編譯、彙編,而不鏈接,得到目標文件

​ -l:鏈接指定的文件

​ -g:生成調試信息

8.4.3、GCC的錯誤類型及其對策

1、C語法錯誤。

2、頭文件錯誤。

3、段錯誤。

4、出現中文字符。

5、編譯標準錯誤。

hello.c
#include<stdio.h>
int main(){
printf("hello");
for(int i=0;i<10;i++){
printf("i=%d\n",i);
}
return 0;
}
gcc -std=c99 hello.c && ./a.out

注:

for(int i=0;i<10;i++)  需要加-std=c99

CTRL+空格:切換輸入法。

8.4.4、配置vim

vim的全局配置一般在/etc/vim/vimrc或者/etc/vimrc

個人用戶的配置在~/.vimrc

  • 先輸入冒號:

  • 打開行號:

set number
  • 關閉行號:
set nonumber
  • 查詢是否開啓
:set nonumber?

配置vimrc

1、打開vimrc

vim ~/.vimrc

2、進行配置 輸入如下配置代碼

[外鏈圖片轉存中…(img-3eE6RN1L-1591956045117)]

[外鏈圖片轉存中…(img-Gse7832A-1591956045118)]

  1 "顯示行號
  2 set number
  3 "設置tab鍵的寬度
  4 set tabstop=4
  5 "設置縮進的寬度
  6 set shiftwidth=4
  7 "自動對齊
  8 set autoindent
  9 set smartindent
 10 "保存推出函數
 11 func! SaveExit()
 12     exec "wq"
 13 endfunc
 14 
 15 "不備份
 16 set nobackup
 17 "不生成臨時文件
 18 set noswapfile
 19 
 20 "映射Ctrl+z按鍵調用保存並推出函數“
 21 map <C-z> :call SaveExit()<CR>
 22 imap <C-z> <ESC>:call SaveExit()<CR>

寫完之後,先ESC、後大寫ZZ 保存退出!!!

3、設置配置生效

source ~/.vimrc

8.5、調試器GDB

8.5.1、GDB的簡單使用流程

1、編譯代碼加入-g選項

gcc gdb_sum.c -o gdb_sum -g 

2、如果編譯成功,啓動GDB調試器

gdb gdb_sum -silent

注:加上-silent是去掉描述提示信息。

3、輸入GDB調試命令,進行調試

gdb -l選項:列出源文件內容。

[外鏈圖片轉存中…(img-8e6OgUyE-1591956045118)]

默認每次顯示10行源代碼,如果沒顯示完,可以繼續使用l命令。。。

注意:q退出GDB.。

gdb -b選項:設置斷點。

設置斷點的方法:指定內存的地址爲斷點,指定行號爲斷點,指定函數名爲斷點。

gdb -r選項:執行程序。

斷點設置好後,r開始執行程序,直到斷點處停下。

gdb -p選項:打印變量的值

gdb -n選項:單步調試。

gdb -c選項:繼續執行程序。

直到遇到斷點或者程序結束

gdb -q(quit) 選項:退出調試。

8.6、工程管理器Makefile

Makefile可以認爲是一個工程文件的編譯規則。

gcc a.c b.c d.c -o out

1、編譯的時候徐需要鏈接庫的問題

2、編譯大的工程會花費大量的時間


注:本篇文章來自本學期Linux課程中老師所總結+自己的一些總結。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章