1. 程式人生 > >快速上手linux系統學習筆記

快速上手linux系統學習筆記

此文章是學習朱老師零基礎3天學會linux課程時所做的筆記,文中介紹了linux的基本知識、如何在windows虛擬機器裝載ubuntu系統、linux常用命令和c語言的編譯器等知識。此文章比較適合快速上手linux系統。

課堂筆記

0.2.1.當前主流作業系統及其特點

當前主流的作業系統:windows、android、iOS、symbian、linux/unix

Windows:傻瓜式、好學習、工資低

Linux:linux認為每一個使用者都是專業人士,

操作麻煩,學習比較難,免費的、開源的,linux效能好,可移植性好,好的設計理念

Android:移動作業系統,android基於linux

iOS:很優秀,創造性,走鋼絲

嵌入式作業系統:linux + WinCE(已淘汰)

當前:消費電子Android,工業linux

0.2.2.多機開發:雙系統與虛擬機器

開發嵌入式程式,需要linux環境。但是因為:windows中有許多很好用的軟體,如notepad++、SourceInsight,所以也需要windows。

既需要windows,又需要linux。

第一種:雙系統 不方便

第二種:虛擬機器 方便,損失效能,與
真機微小差異

第三種:兩臺電腦:不方便

現實中:

個人開發者:虛擬機器

大公司:伺服器+客戶端

0.2.3.搭建linux開發環境

涉及到兩個東西:虛擬機器軟體+linux系統

虛擬機器軟體:就是一個單純的在windows中執行的軟體,跟word、360沒有本質區別。現在主流的虛擬機器軟體有VMWare和VirtualBox

虛擬機器軟體在windows系統中執行,執行後它會模擬出來一個電腦,所以叫虛擬機器。然後我們可以在該虛擬機器中安裝別的作業系統。

0.2.4.隱藏檔案與非隱藏檔案

Windows中:檔案隱藏與不隱藏通過設定檔案屬性實現的,可以點選檔案,右鍵屬性,選擇勾選隱藏選項來設定檔案為隱藏檔案。。在Windows中檢視隱藏檔案方法:選單欄 工具->資料夾選項->檢視->顯示所有檔案和資料夾。

Linux中:linux中隱藏檔案特點是檔名以.開頭,跟檔案屬性無關。在linux中檢視隱藏檔案用ls -a(all所有)命令(普通顯示ls)

0.2.5.相對路徑與絕對路徑

什麼是路徑:路徑是用來標識一個檔案在作業系統的檔案系統中儲存位置的。pathname

舉例:

D:\winshare\enum.c 全路徑 pathname

D:\winshare 路徑 path

enum.c 檔名 name

絕對路徑:路徑是從絕對位置開始的。譬如Windows中從某一個碟符開始(C:\),linux中從根目錄/開始

相對路徑:指明路徑的時候,是從當前所在的位置開始的。

舉例:

D:\我的文件\123\123.txt

D:\我的文件\abc\abc.txt

當前在123.txt,但是要去abc.txt

方式1:採用絕對路徑。D:\我的文件\abc\abc.txt

方式2:採用相對路徑。../abc/abc.txt

從當前路徑開始,往上走一層,再往下走一層(abc)就到了

測試:

/abc/123/def.txt 是linux絕對路徑

abc/123/def.txt 不是linux絕對路徑(沒從根目錄開始的)

F:\abc\123\def.txt 是windows絕對路徑

abc\123\def.txt 不是windows絕對路徑

0.2.6.簡介linux核心and發行版

linux本身指的是一個作業系統核心,只有核心是無法直接使用的。我們需要的,可以使用的作業系統是一個包含了核心和一批有用的應用程式的一個集合體,這個就叫linux發行版。

ubuntu、redhat就是linux的不同的發行版。

0.2.7.GUI(圖形使用者介面)和cmdline(命令列)

GUI:grahics user interface,圖形使用者介面。關於人機互動的開發常用

cmdline:command line,命令列。攝像頭這些沒有互動介面的

人機互動:人和機器(計算機)進行互動,常用的有命令列和GUI。

Windows下既有GUI,又有命令列。linux中也是既有GUI,又有命令列。

但是,在linux中我們常用命令列,在Windows中常用GUI

0.2.8_15.linux常用命令

ls_cd_pwd_mkdir_mv_touch_cp_rm_cat_rmdir_ln_man_apt-get:

(1) ls(list,列表)

作用:使用列表把當前資料夾下所有檔案顯示出來

  ls         顯示當前資料夾下的檔案列表

  ls -a    顯示所有檔案,包括隱藏檔案

  ls -l    以詳細資訊顯示


  ls -a -l 顯示所有檔案,並有詳細資訊

  ls -l -a 如上

  ls -la     如上

  ls -al     四種方式都是可以的        

(2) cd(change directory,更改目錄)

作用:用來切換目錄,涉及到相對路徑和絕對路徑

  cd ..    ..代表上一層目錄

          . 代表當前目錄(.有個自動生成的路徑,隱藏檔案)


  cd /abc/123/def.txt    進入檔案(絕對路徑),/ 代表根目錄

  cd def.txt/     進入檔案(相對路徑)

  cd ../../../../.././../  返回到根目錄就停了

  ./a.out  執行該c語言檔案

(3) pwd(print work directory,列印工作目錄)

作用:打印出當前的絕對路徑

目錄很深時,顯示當前路徑

(4) mkdir(make directory,建立空資料夾)

作用:建立空資料夾

  mkdir -p 級聯建立資料夾


  mkdir abc   建立abc資料夾

  mkdir -p abc/def   建立abc,同時在abc裡建立def

(5) mv(move,移動)

作用:在目錄間移動檔案,重新命名檔案

  mv 原始檔pathname 目的檔案pathname(全路徑)


  mv def/def.txt ./def.txt     (移動def檔案下的def.txt到當前目錄下)

  mv def.txt def/def.txt         (移動當前目錄的下def.txt到def檔案下)

  mv def.txt abc.txt         (重新命名,沒改路徑改名字了)

(6) touch(建立空檔案)

作用:建立空檔案

  touch pathname


  touch 1.txt(建立空檔案並進入,q鍵是退出)

  vi 1.c  (建立空檔案並進入,沒編輯直接退出後,檔案並沒有)

  vim 1.c    (建立空檔案並進入,沒編輯直接退出後,檔案並沒有)

(7) cp(copy,複製)

作用:複製檔案或資料夾

  cp 原始檔pathname 目標檔案pathname

  cp -r 用來複制資料夾

  cp -f 強制複製

  實際操作時,一般都是cp -f複製檔案,

  cp -rf複製資料夾(如果之前有同名稱的,就會覆蓋之前的;但不強制就會複製失敗而其並不提示)


  cp 1.txt a.c     (複製1.txt為a.c)

  cp 1.txt ../b.c     (複製1.txt到上層目錄為b.c)

(8) rm(remove,去除,刪除)

作用:用來刪除檔案,資料夾

當一個檔案正在開啟時,也能刪除,刪的是硬碟那份,而開啟的是記憶體那份,又要儲存時,檔案又被存到了硬碟。

  rm 檔案pathname

  rm -r 資料夾pathname

  rm -rf 資料夾pathname (強制刪除資料夾,如果沒有該檔案,不會提示;但不強制就會提示沒有該資料夾)

(9) cat(直接在命令列下顯示檔案內容)

作用:直接在命令列下顯示檔案內容,適合短的內容,長的用vi直接開啟

也可以用來向檔案輸入,暫時不管


  cat b.c   (顯示b.c裡的內容)

  vi b.c       (開啟b.c)

(10)rmdir(remove directory,刪除資料夾)

作用:刪除空資料夾

rmdir只能刪除空資料夾(非空時有提示,哪怕是裡面有多個空資料夾也不行)

rm -r可以刪除空資料夾和非空資料夾

(11) ln(link,連線檔案)

windows中快捷方式,實際上快捷方式和它指向的檔案是獨立的兩個檔案,兩個都佔硬碟空間,只不過使用者訪問快捷方式時,其效果等同於訪問指向的檔案。        

linux中有兩種連線檔案:

一種叫軟連線(符號連線),等同於windows中快捷方式

一種叫硬連線


建立軟連線檔案: ln -s 原始檔名 符號連線檔名

 舉例:ln -s src.c linker.c     (linker.c就是src.c的一個符號連線檔案,刪除原始檔,符號連線檔案用不了)

硬連線:ln 原始檔名 連線檔名

 硬連線實際上和原始檔在硬碟中是同一個東西,效果類似於硬碟上的一個檔案,在檔案系統上,在我們看來有好多個檔案一樣。每次刪除一個檔案時,只要他還有其他的硬連線存在,這個檔案就不會被真正刪除。只有等所有的連線檔案都刪除掉了,這個檔案才會被真正從硬碟上刪除。

 ln a.c b.c  (a.c b.c兩個普通檔案,剩哪個都能開啟)

(12) man(查詢man手冊)

 作用:查詢man手冊,獲得幫助資訊

   man 1 ls        1表示查詢的是linux命令

   man 2 xxx        2表示查詢的是linux api(API就是作業系統留給應用程式的一個呼叫介面)

   man 3 xxx        3表示查詢的是C庫函式

  注意:在man手冊中查詢時,退出按Q鍵(Q就是quit的縮寫)

(13) apt-get

 作用:在ubuntu中用來線上安裝、解除安裝軟體的程式

   apt-get install

   apt-get remove


   apt-get install vim


   su root  進入root模式

   su username  退出root模式


 注意,安裝和解除安裝都是線上的,也就是說ubuntu必須能上網才能使用apt-get

說明:apt-get 安裝軟體的原理和必要性。

linux作業系統的發行版,核心版本,定製性,造成了linux中軟體的不相容性。在linux中安裝軟體是一件困難的事情,裝了軟體能不能用不一定。ubuntu解決了這個問題,ubuntu就適合某個發行版(ubuntu10.04)的所有軟體做了一個列表,然後使用者通過apt-get install的方式安裝軟體,就會實時連線到ubuntu伺服器,伺服器會根據你的ubuntu版本,給你下載合適的軟體來安裝。這樣確保了軟體的相容性。

0.2.13.linux中的檔案型別標記方法

ls -l顯示的詳細資訊中:

-rw-r–r–

drwxr-xr-x

一共10個字元,第一個字元表示檔案型別,後面9個字元表示檔案許可權。

檔案型別:

  • 表示普通檔案。普通檔案指文字檔案和二進位制檔案,如a.c 1.txt a.out都是普通檔案

    d 表示資料夾,d是directory的縮寫

    l 表示符號連線檔案,後面會用->打印出它指向的檔案

    s 表示socket檔案,網路通訊相關

    p 表示管道檔案(pipe),通訊

0.2.16.什麼是編輯器_vi和vim的關係

什麼是編輯器?編輯器就是一款軟體,它的主要作用就是用來編輯。譬如編寫檔案,編寫程式碼。

Windows中的常用編輯器,如自帶的notepad。比較好用的notepad++,UltraEditor,SlickEditor

Linux中常用編輯器,自帶的最古老的vi。比較好用的vim,gedit。

注:vi和vim的關係:vim是vi的升級版,推薦使用vim。

我們在後面提到vi時,其實都是指vim。

0.2.17.vi基礎使用

*使用vi來開啟/建立一個檔案,vi pathname

*vi的兩種模式:

命令模式:當vi開啟時預設為命令模式,要轉入輸入模式,需要按a或者i鍵。在命令模式下,此時鍵盤上輸入的所有東西都被vi當作命令來對待。

命令模式:最好不要亂輸入。此時應該輸入相應的命令,來讓vi做相應的事。

輸入模式:輸入模式用來向檔案輸入內容。可以從命令模式中按a或者i進入輸入模式。進入輸入模式後,就可以隨意按鍵盤進行輸入了。輸入完成後如果要儲存,要先退回到命令模式(因為儲存也是一種命令)。

在輸入模式下按ESC鍵退回到命令模式。

注:注意看螢幕左下角,當命令模式時無提示資訊或者提示檔名等資訊,等處於輸入模式時,提示 – INSERT –

在命令模式下如何儲存:

:wq 儲存並且退出

:w 只儲存不推出

:q 不儲存退出 進來看了一下沒改退出

:q! 不儲存強制退出

:wq! 儲存並強制退出

0.2.18.vi高階應用:查詢快速切換行設定顯示行號

  • 查詢

    在命令模式下,輸入 /xxx,就可以查詢到xxx

  • 快速切換行

    在命令模式下,輸入 :num,就可以快速切換到num行

  • 設定顯示行號

    在命令模式下,輸入 :set nu,就可以顯示行號

    在命令模式下,輸入 :set nonu,不顯示行號

    設定永久顯示行號,需要修改vi的配置檔案。開啟vi的配置檔案~/.vimrc,在其中輸入set nu即可。

0.2.19.linux命令列中一些符號的含義


   .        代表當前目錄

   ..        代表上一層目錄,當前目錄的父目錄

   -        代表前一個目錄,我剛才從哪個目錄cd過來

   ~        代表當前使用者的宿主目錄

   /        代表根目錄

   $        普通使用者的命令列提示符

   #        root使用者的命令列提示符

   *        萬能匹配符

宿主目錄:所謂宿主目錄,就是作業系統為當前使用者所設計的用來存放檔案、工作的預設目錄。如Windows中的“我的文件”目錄,就是Windows為我們設計的宿主目錄。Linux中每個使用者都有自己的宿主目錄,這個目錄對於普通使用者來說,在/home/username/,而對於root使用者來說,在/root。

0.2.20.vi高階應用:行刪除_行復制貼上

  • 行刪除

    命令模式下,先將游標移動到要刪除的行(或者:行),然後輸入dd

    如果要刪除連續多行,譬如要刪除連續的3行游標,該在3行的第一行,使用3dd

  • 行復制貼上

    複製:命令模式下,nyy(3yy)

    貼上:命令模式下,p

    細節,複製時要把游標放在多行的第一行,貼上時實際貼上到當前游標所在行的下一行。

0.2.21.普通使用者與特權使用者 su命令切換使用者

Windows中有普通使用者和特權使用者,特權使用者是Administrator,普通使用者可以有很多個。特權使用者是系統的管理員,對系統內所有檔案具有操作許可權。每個普通使用者只能處理自己的檔案,不能訪問其他使用者的檔案,更不能隨意處理作業系統的檔案。

Linux中也有普通使用者和特權使用者的區別。特權使用者就是root使用者。普通使用者許可權受到限制,譬如說普通使用者不能cd /root,普通使用者不能使用apt-get install 來裝軟體。

可以使用su 使用者名稱來在不同使用者間切換。譬如要從普通

使用者切換到root,可以su root,然後輸入root的密碼即可轉入root使用者。從root要切換到普通使用者gec,則su gec即可。從普通使用者gec進入普通使用者abc,su abc需要密碼。

0.2.22.rwx與linux中許可權表示

ls -l顯示詳細資訊:

 drwxr-xr-x    10個字元,第一個表示檔案型別。剩下的9個分成3組,表示檔案許可權。

前三個表示此檔案的屬主對檔案的許可權

中間三個表示此檔案屬主所在的組對檔案的許可權

最後三個表示其他使用者對檔案的許可權

rwx解析:r代表可讀,w代表可寫,x代表可執行

rwx:可讀,可寫,可執行

r-x: 可讀,不可寫,可執行

r--: 可讀,不可寫,不可執行


- 表示普通檔案。普通檔案指文字檔案和二進位制檔案,如a.c  1.txt a.out都是普通檔案

d 表示資料夾,d是directory的縮寫

l 表示符號連線檔案,後面會用->打印出它指向的檔案

0.2.23.ubuntu中使用sudo暫時獲取root許可權

這是ubuntu的一個特點,在ubuntu中可以使用sudo命令讓普通使用者暫時獲取root使用者的許可權,而不必進行使用者切換。

 sudo apt-get install vim  要輸入密碼,執行完後還是普通使用者

0.2.24_29.linux高階命令1_5:find_grep_which_whereis_uname_tree_mount_df_chmod

(1)find

功能:在linux檔案系統中,用來查詢一個檔案放在哪裡了。

舉例:find /etc -name “interfaces”

總結:

  • 什麼時候用find?

    當你知道你要找的檔名,但是你忘記了它被放在哪個目錄下,要找到該檔案時,用find。

  • 怎麼用find?

    find 路徑 -name “檔名”

    find / -name “檔名”

(2)grep

功能:在一個文字檔案中,查詢某個詞。

舉例:grep -nr “SUN” * (所有路徑)

     grep -nr "SUN" 路徑

總結:

  • 什麼時候用grep?

    當你想查詢某個符號在哪些地方(有可能是一個檔案,也有可能是多個檔案組成的資料夾)出現過,就用grep

  • 怎麼用?

    grep -nr “要查詢的符號” 要查詢的目錄或檔案集合

    注意:-n表示查詢結果中顯示行號,-r表示要遞迴查詢(資料夾裡面也查)

(3)which和whereis

功能:查詢一個應用程式(二進位制檔案)在哪裡

舉例:which ls whereis ls

區別:

which只顯示二進位制檔案的路徑

whereis顯示二進位制檔案的路徑,和其原始碼或man手冊位置    

(4)uname

功能:檢視系統資訊

舉例:uname -a

(5)開機和關機

init 0 關機

init 2 重啟

shutdown -h now 立即關機

shutdown -r now 立即重啟

reboot 重啟

(6)tree/lstree

功能:顯示檔案和目錄由根目錄開始的樹形結構

(7)mount/umount

功能:用來掛載磁碟到檔案系統中

舉例:mount -t nfs -o nolock 192.168.1.141:/root/rootfs /mnt 掛載

umount /mnt 解除安裝

(8)磁碟空間相關

df -h 顯示已掛載的分割槽列表,大小、容量

du -h 列出檔案或資料夾的大小

du -h 檔名,可以列出這個檔案有多大,列出方式是以人比較好看懂的方式。不像 ls -l列出的都是以位元組為單位。

(9)使用者管理

useradd user1 新增一個名為user1的使用者

userdel user1 刪除一個名為user1的使用者

passwd user1 為名為user的使用者設定密碼

adduser user1 新增一個名為user1的使用者,同時建立宿主目錄,使用者shell等。

adduser和useradd的區別:

adduser是一個指令碼,而useradd是一個二進位制應用程式。adduser建立使用者時比較麻煩,但是一次設定完所有的資訊;而useradd設定時簡單,但是需要額外的設定宿主目錄,密碼那些資訊。

(10)許可權管理

作用:用來管理系統中檔案的許可權。

chmod (change mode,修改檔案許可權,比較常用,要記得)

chown (change owner,修改屬主) chown meng a.c

chgrp (change group,修改檔案的組) chgrp meng a.c

ls -l 列出的屬性

-rwxr-xr-x

一共10個字元,第一個表示檔案屬性(d表示資料夾,-表示普通檔案),剩下的9個分成三組。每組中三個分別表示r可讀w可寫x可執行。如果是字母表示有這個許可權,如果是-表示沒這個許可權。三組分別表示:第一組表示檔案屬主的許可權,第二組表示屬主所在的組使用者的許可權,第三組表示其他使用者的許可權。

許可權還有另一種表示方法,用數字來表示。

編碼規則如下:

   r    可讀        4

   w    可寫        2

   -    無許可權        0

   x    可執行        1

有了這個編碼規則,則 rwxr-xr-x 編碼後為755

第一種修改許可權的方法:

要把許可權改成 rwxr–r– 則對應的編碼值為744

修改命令為:chmod 744 檔名

第二種修改許可權的方法:

在原來的許可權基礎上進行修改,即增加或減少某許可權。

三個組使用者的編碼依次為: 屬主u,屬主所在的組g,其他使用者o

譬如

要屬主增加可執行許可權 chmod u+x 檔名

其他使用者增加可寫許可權 chmod o+w 檔名

屬主所在組使用者去掉可執行許可權 chmod g-x 檔名

(11)檔案打包壓縮與解壓縮

tar -czvf dir.tar.gz dir/ 將dir目錄打包成dir.tar.gz

tar -cjvf dir.tar.bz2 dir/ 將dir目錄打包成dir.tar.bz2

tar -zxvf dir.tar.gz 解壓縮dir.tar.gz

tar -jxvf dir.tar.bz2 解壓縮dir.tar.bz2

(12)sed和awk

正則表示式。匹配加替換。

(13)格式化檔案系統

mkfs    /dev/hd1

mkfs -t vfat 32 -F /dev/hd1        建立一個FAT32檔案系統    

(14)網路配置命令

ifconfig eth0 192.168.1.13 設定IP地址

ifconfig eth0 up 啟動網絡卡

ifconfig eth0 down 禁用網絡卡

ifup eth0 啟動網絡卡

ifdown eth0 禁用網絡卡

ifconfig eth0 192.168.1.1 netmask 255.255.255.0 同時設定IP和子網掩碼

(15)設定共享資料夾

ln –s /mnt/hgfs/windows_share /root/windows_share, 即可在/root下成功建立共享資料夾的符號連結,便於以後實驗時與 Windows 下互動

線上安裝gcc:sudo apt-get install build-essential

本地安裝gcc: 檢視1.4.3安裝交叉工具鏈

搭建tftp伺服器

搭建nfs伺服器

使用技巧:

1>使用shell的Tab鍵自動補全

Tab在linux命令列輸入中可以自動完成。在linux命令列中使用Tab鍵會極大提高輸入效率

2>使用shell的歷史記錄,上下鍵

shell會記錄使用者執行命令的歷史記錄,而我們一般使用命令都會在短時間內集中反覆使用,因此當你需要使用一條剛才還使用過的命令時,不需再次花時間輸入,只要按下鍵盤上下箭頭按鍵,就可實現上下翻頁,翻出剛才用過的命令,直接回車執行。就好像電話機的通話記錄和快速回撥一樣。

0.2.30.補充-虛擬機器上網的問題

VMware中虛擬機器網路的三種設定

第一種:橋接(bridged)

第二種:NAT

第三種:Host only 。該模式下僅主機可以上網,虛擬機器不能上網。

(1)虛擬機器上網方式1:NAT方式

第一步:在選單欄 虛擬機器 -> 設定 -> 硬體 -> 網路介面卡,右側選擇NAT模式

第二步: vi /etc/network/interfaces,開啟該檔案,將內容編輯成為:

auto lo

iface lo inet loopback

auto eth0

iface eth0 inet dhcp

address 192.168.1.141

netmask 255.255.255.0

gateway 192.168.1.1

第三步:執行/etc/init.d/networking restart 重啟網絡卡

ping www.baidu.com   ctrl+c終止

檢視地址 ifconfig

(2)虛擬機器上網方式2:橋接方式

第一步:橋接。在選單欄 虛擬機器 -> 設定 -> 硬體 -> 網路介面卡,右側選擇橋接模式。

第二步:橋接到可以上網的網絡卡。在選單欄 編輯 -> 虛擬網路編輯器,選擇橋接到自己Windows中可以上網的網絡卡上(一般就是Wifi網路或者有線網路)

第三步:設定並重啟網絡卡。vi /etc/network/interfaces,開啟該檔案,將內容編輯成為:

auto lo

iface lo inet loopback

auto eth0

iface eth0 

inet dhcp

address 192.168.1.141

netmask 255.255.255.0

gateway 192.168.1.1

第四步:儲存退出。然後命令列執行/etc/init.d/networking restart 重啟網絡卡

總結

第一,NAT方式設定上網比較簡單,包含在主機裡外部感知不到,路由器不能察覺,網段地址都不一樣,但是不能用在嵌入式開發中

第二,橋接方式設定上網較繁瑣,相當於同一個網路裡面兩臺電腦,網段一樣地址不一樣,但是在嵌入式開發中比較有用。