Linux入門的基礎知識點彙總,有這篇就夠了

語言: CN / TW / HK

到底要如何Linux入門呢?

因為Linux的知識體系非常的龐大,IT行業很多領域都需要使用到Linux,有運維的、有應用程式開發的、有驅動開發的、有系統優化的、有搞微控制器的、有做系統移植的、有做網路產品的等等。

總結一句話,IT的很大部分從業者都需要掌握Linux的部分知識,但是由於每個人的從事領域不一樣,對Linux的要求也不一樣,這就直接導致,網上搜索學習路線有很多種,還有就是推薦的書籍很多都不利於初學者。

比如Linux命令的學習,很多人都力推《鳥哥的私房菜》這本書,一口君在直播間多次強調,初學者不要看這本書,不是說這本書不好,而是,這本書其實你要當做一本工具書來看,如果你的目標是想快速的基於Linux做一些開發工作,最迫切的就是快速掌握一些基本的命令,一些和開發相關的最基礎的知識,而不是去學習那些可能這輩子都用不到的命令。

為了讓初學者更好的學習Linux,入門Linux,一口君特地整理了Linux入門必須掌握的一些基礎知識點,掌握這些知識點之後,就可以學習C程式設計的知識了,後續遇到一些不熟悉的命令和配置,只需要網上搜索下就可以很快上手了。

後續一口君會陸續錄製Linux入門的影片,手把手教大家Linux入門。

歡迎大家訪問我的B站空間, https://space.bilibili.com/661326452

持續更新中。

一、Linux作業系統概述

1、發展

1991 Linus Linux 0.0.1版,程式碼為8K行。現在最新版本為5.12.4。Linux加入了GNU,整體基於GPL協議,允許開源、分享傳播、修改。

核心下載的地址:

https://www.kernel.org/

2、組成

  1. kernel核心:

核心程式,用於管理硬體裝置、系統的執行緒程序、記憶體、交換空間、檔案系統、精靈程序(守護程序)等。主要實現系統程式與硬體之間的控制管理功能。

  1. Shell:

包裹在核心之外的人機互動介面,用於使用者和核心之間打交道的功能,類似於windows的cmd。通過Shell將輸入的命令與核心通訊,好讓核心可以控制硬體並正確無誤的操作工作。

Shell有著不同的分類,比如Bourne shell(sh),Korn shell(ksh)、C shell (csh)、Bourne-again shell(bash)、tcsh。其中最常用的有csh和bash。

ubuntu 16.04的terminal如下:

  1. user application Linux根據程式的執行,分為使用者空間和核心空間,簡單的理解就是,普通的應用程式執行在使用者空間,一些涉及到系統核心資源的操作的程式執行在核心空間,比如TCP/IP協議棧、驅動、程序排程、記憶體管理、檔案系統等都運行於Linux核心空間,

其實一些應用程式當需要訪問系統資源的時候,必須通過系統呼叫,通過一些核心函式將系統資源由核心空間拷貝到使用者空間。

  1. Files System:檔案系統,管理檔案和目錄。

3、Linux的特性:

多使用者、多工(程序、執行緒處理),多平臺,圖形化介面(x-windows)、硬體配置、通訊與聯網、應用程式的支援(編輯器、編輯工具、資料庫、辦公軟體、圖形處理、Internet應用、遊戲)。

二、Linux作業系統安裝

1、Linux的選擇

red hat:企業級的,已經開始收費(商用)。

CentOS是RHEL的克隆版本。RedHat一直都提供原始碼的發行方式,CentOS就是將RedHat發行的原始碼重新編譯一次,形成一個可使用的二進位制版本。由於Linux的原始碼是GNU,所以從獲得RedHat的原始碼到編譯成新的二進位制,都是合法。只是RedHat是商標,所以必須在新的發行版裡將RedHat的商標去掉。通常搭建伺服器選用CentOS。

ubuntu:桌面開源的,比較純正的Linux,android官方指定的編譯作業系統,發展快、已支援ARM架構。ubuntu在開發者中,非常受歡迎,一口君所有的文章和影片都以ubuntu為主。

2、安裝Ubuntu Desktop

Linux環境安裝篇幅較長,安裝詳細步驟參考這篇文章:

linux驅動、ARM學習環境搭建

3、基本操作

ctrl+alt F2  可以進入終端介面
ctrl+alt F7 進入桌面介面
ctrl+alt+t 文字編輯

我們通常用快捷鍵 ctrl+alt+t 開啟一個終端,這個一定要記住。

其中:

peng    當前使用者
ubuntu 主機名
~ 當前使用者主目錄,/home/peng,每一個使用者都會在/home下建立一個與使用者名稱同名的目錄
$ 普通使用者

如果切換到管理員使用者

root  管理員
/home/peng 當前工作目錄
# 當前是管理員

三、Linux檔案系統及檔案基礎

1、檔案系統概述

Linux 中一切皆為檔案,檔案系統用來組織計算機的檔案和資料的系統,是作業系統封裝的一個系統服務程式,實際是一個軟體程式,用來儲存和管理計算機檔案和資料。檔案系統分類如下:

磁碟檔案系統:NTFS,EXT3
快閃記憶體檔案系統:JFFS2,YAFFS
資料庫檔案系統:BFFS,WINFS
網路檔案系統:NFS
虛擬檔案系統:VFS(Proc)

檔案系統的功能:能定義檔案的組織方式,檔案的結構;提供建立和存取檔案的環境(目錄和檔案)

2、Linux檔案系統及檔案

  1. EXT3:是一個日誌方式的檔案系統,系統中的每個檔案都有索引,使用者對檔案的每個操作都會記錄在日誌中,形成一個任務佇列。

  2. SWAP:是交換分割槽的檔案系統,類似於windows的虛擬記憶體,其實現的方式有以下兩種:第一種是進行記憶體排列像記憶體池一樣,進行優化;第二種是把硬碟上的空間模擬成記憶體。Swap是Linux 的虛擬記憶體,在安裝時要設定好大小,一般設定為實體記憶體的兩倍。

  3. 目錄結構 linux 的結構是由很多檔案塊區組成,與Windows分割槽不同。

目錄 應放置檔案內容
/bin 系統有很多放置執行檔的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般帳號所使用,主要有:cat,chmod(修改許可權), chown, date, mv, mkdir, cp, bash等等常用的指令。
/boot 主要放置開機會使用到的檔案,包括Linux核心檔案以及開機選單與開機所需設定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這個開機管理程式,則還會存在/boot/grub/這個目錄。
/dev 在Linux系統上,任何裝置與周邊裝置都是以檔案的型態存在於這個目錄當中。只要通過存取這個目錄下的某個檔案,就等於存取某個裝置。比較重要的檔案有/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等
/etc 系統主要的設定檔幾乎都放置在這個目錄內,例如人員的帳號密碼檔、各種服務的啟始檔等等。一般來說,這個目錄下的各檔案屬性是可以讓一般使用者查閱的,但是隻有root有權力修改。FHS建議不要放置可執行檔(binary)在這個目錄中。比較重要的檔案有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等等。另外,其下重要的目錄有:/etc/init.d/ :所有服務的預設啟動script都是放在這裡的,例如要啟動或者關閉iptables的話:/etc/init.d/iptables start、/etc/init.d/ iptables stop
/etc/xinetd.d/ 這就是所謂的super daemon管理的各項服務的設定檔目錄。
/etc/X11/ 與X Window有關的各種設定檔都在這裡,尤其是xorg.conf或XF86Config這兩個X Server的設定檔。
/home 這是系統預設的使用者家目錄(home directory)。在你新增一個一般使用者帳號時,預設的使用者家目錄都會規範到這裡來。比較重要的是,家目錄有兩種代號:~ :代表當前使用者的家目錄,而 ~guest:則代表使用者名稱為guest的家目錄。
/lib 系統的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已 。什麼是函式庫呢?妳可以將他想成是外掛,某些指令必須要有這些外掛才能夠順利完成程式的執行之意。尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關的模組(驅動程式)。
/media media是媒體的英文,顧名思義,這個/media底下放置的就是可移除的裝置。包括軟碟、光碟、DVD等等裝置都暫時掛載於此。常見的檔名有:/media/floppy, /media/cdrom等等。
/mnt 如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦。只是有了/media之後,這個目錄就用來暫時掛載用了。
/opt 這個是給第三方協力軟體放置的目錄 。什麼是第三方協力軟體啊?舉例來說,KDE這個桌面管理系統是一個獨立的計畫,不過他可以安裝到Linux系統中,因此KDE的軟體就建議放置到此目錄下了。另外,如果妳想要自行安裝額外的軟體(非原本的distribution提供的),那麼也能夠將你的軟體安裝到這裡來。不過,以前的Linux系統中,我們還是習慣放置在/usr/local目錄下。
/root 系統管理員(root)的家目錄。之所以放在這裡,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分割槽中。
/sbin Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來設定系統,其他使用者最多隻能用來查詢而已。放在/sbin底下的為開機過程中所需要的,裡面包括了開機、修復、還原系統所需要的指令。至於某些伺服器軟體程式,一般則放置到/usr/sbin/當中。至於本機自行安裝的軟體所產生的系統執行檔(system binary),則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。
/srv srv可以視為service的縮寫,是一些網路服務啟動之後,這些服務所需要取用的資料目錄。常見的服務例如WWW, FTP等等。舉例來說,WWW伺服器需要的網頁資料就可以放置在/srv/www/裡面。呵呵,看來平時我們編寫的程式碼應該放到這裡了。
/tmp 這是讓一般使用者或者是正在執行的程式暫時放置檔案的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要資料不可放置在此目錄啊。因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除。

3. Linux檔案屬性:

Linux檔案屬性一共7種:

型別 字母 說明
普通檔案型別 - Linux中最多的一種檔案型別, 包括 純文字檔案(ASCII);二進位制檔案(binary);資料格式的檔案(data);各種壓縮檔案.第一個屬性為 [-]
目錄檔案 d 就是目錄, 能用 # cd 命令進入的。第一個屬性為 [d],例如 [drwxrwxrwx]
塊裝置檔案 b 塊裝置檔案 :就是儲存資料以供系統存取的介面裝置,簡單而言就是硬碟。例如一號硬碟的程式碼是 /dev/hda1等檔案。第一個屬性為 [b]
字元裝置 c 字元裝置檔案:即串列埠的介面裝置,例如鍵盤、滑鼠等等。第一個屬性為 [c]
套接字檔案 s 這類檔案通常用在網路資料連線。可以啟動一個程式來監聽客戶端的要求,客戶端就可以通過套接字來進行資料通訊。第一個屬性為 [s],最常在 /var/run目錄中看到這種檔案型別
管道檔案 p FIFO也是一種特殊的檔案型別,它主要的目的是,解決多個程式同時存取一個檔案所造成的錯誤。FIFO是first-in-first-out(先進先出)的縮寫。第一個屬性為 [p]
連結檔案 l 類似Windows下面的快捷方式。第一個屬性為 [l],例如 [lrwxrwxrwx]

1、普通檔案

使用 ls -l 命令後,

第一列第一個字元為 "-" 的檔案為普通檔案.

2、目錄檔案

Linux 中的目錄也是檔案,目錄檔案中儲存著該目錄下其他檔案的 inode 號 和檔名等資訊,目錄檔案中的每個資料項都是指向某個檔案 inode 號的連結,刪除檔名就等於刪除與之對應的連結。目錄檔案的字型顏色是藍色,使用 ls -l 命令檢視,第一個字元為"d"(directory)。

目錄檔案的許可權:

  • 1)r 表明該目錄檔案具有可讀許可權,即可以使用 ls 命令檢視該目錄的儲存情況;

  • 2)w 表明該目錄檔案具有寫許可權,即可以往該目錄下新增、修改、刪除檔案;

  • 3)x 表明該目錄檔案具有可執行檔案,即可以使用 cd 命令進入到該目錄下。

可以使用 chmod 指令來改變檔案的許可權。

3、連結檔案

連結檔案一般指的是一個檔案的軟連線(或符號連結),使用 ls -l 命令檢視,第一個符號為  "l",檔名為淺藍色,如下:

這裡,test_softlink 就是一個連結檔案,從結果上還可以看到它是檔案 test.txt 的軟連結,刪除原檔案 test.txt 的話,對應的軟連結檔案 test_softlink 也會消失。可以使用 ln 命令來建立一個檔案的連結檔案:

1)軟連結 軟連結(又稱符號連結),使用 ln -s file file_softlink 命令可以建立一個檔案的軟連結檔案:

ln -s test.txt test_softlink

軟連結相當於給原檔案建立了一個快捷方式,如果刪除原檔案,則對應的軟連結檔案也會消失。

2)硬連結 硬連結,相當於給原檔案取了個別名,其實兩者是同一個檔案,刪除二者中任何一個,另一個不會消失;對其中任何一個進行更改,另一個的內容也會隨之改變,因為這兩個本質上是同一個檔案,只是名字不同。使用 ls -i 命令檢視,可以發現硬連結的兩個檔案的 inode 號是一樣的:

同樣的,使用 ln 命令可以建立一個檔案的硬連結:

ln test.txt test_hardlink

4、裝置檔案

Linux 中的硬體裝置如硬碟、滑鼠等也都被表示為檔案,即為裝置檔案。

裝置檔案一般存放在 /dev/ 目錄下,檔名為黃色,如下:

裝置檔案分兩種:

  • 1)塊裝置檔案:

塊裝置檔案支援以塊(block)為單位的訪問方式。在 EXT4 檔案系統中,一個 block 通常為 4KB 的大小,也就是說每次可以存取 4096(或其整數倍) 個位元組的資料。應用程式可以隨機訪問塊裝置檔案的資料,程式可以自行確定資料的位置,硬碟、軟盤等都是塊裝置。使用 ls -l 命令檢視,塊裝置檔案的第一個字元是 "b"(block)。

  • 2)字元裝置檔案:

字元裝置檔案以位元組流的方式進行訪問,由字元裝置驅動程式來實現這種特性,這通常要用到 open、close、read、write 等系統呼叫。字元終端、串列埠和鍵盤等就是字元裝置。另外,由於字元裝置檔案是以檔案流的方式進行訪問的,因此可以順序讀取,但通常不支援隨機存取。使用 ls -l 命令檢視,字元裝置檔案的第一個字元是 "c"(char)。

5、管道檔案(FIFO檔案)

管道檔案主要用於程序間通訊,使用 ls -l 命令檢視,第一個字元為 "p"(pipe)。可以使用 mkfifo 命令來建立一個管道檔案:

mkfifo fifo_file

在 FIFO 中可以很好地解決在無關程序間資料交換的要求,FIFO 的通訊方式類似於在程序中使用檔案來傳輸資料,只不過 FIFO 型別的檔案同時具有管道的特性,在讀取資料時,FIFO 管道中同時清除資料。

6、套接字檔案

套接字檔案,通常指域套接字檔案,使用 ls -l 命令檢視,第一個字元為 "s"。

域套接字是程序間通訊(IPC)的一種方法,是可靠的一種IPC通訊,是POSIX標準的一個元件,只能用於同一主機間的通訊。

後續學習程序間通訊需要學習該知識。

4. 檔案顏色

常見的檔案顏色如下:

  • 藍色:目錄檔案

  • 綠色:可執行檔案

  • 淺藍色:連結檔案

  • 紅色:壓縮檔案

  • 黃色:字元裝置

  • 灰色:其他檔案

四、Linux作業系統命令使用基礎

1、命令格式

$command    [option(s)]   [argument(s)]
命令名 空格 選項 空格 引數
  • command  :命令名

  • [option(s)]  :選項

  • [argument(s)] :引數

注意:

  • 在命令列中,每兩個部分之間有空格分隔

  • 每個命令列可使用的最多的命令字元是256個

  • 命令區分大小寫

  • 不同的命令提示符使用分隔符號 “/”

  • 命令中的引數/選項可以是多個,並且引數其實就是要傳入命令程式主函式main的引數。

  • [ ]表示這個內容可以不包含,比如  [argument(s)] ,輸入命令時可以不加引數

2、聯機幫助、清屏與歷史記錄命令

1)聯機幫助

遇到一些函式和命令,不知道含義時可以使用命令man來檢視幫助資訊。

man ls
man -k keyword

man手冊根據內容分為9個手冊,可以使用下面命令檢視

man man

man文件的分類編號

1 - commands(普通的命令)
2 - system calls(系統呼叫)

3 - library calls(庫函式)
4 - special files(特殊檔案:/dev下裝置檔案)
5 - file formats and convertions(檔案格式)

6 - games for linux(遊戲和娛樂)
7 - macro packages and conventions(雜項)
8 - system management commands(管理員命令)
9 - 其他(Linux特定, 用來存放核心例行程式的文件)

使用-k引數,man可以在所有的man文件和簡介中查詢符合條件的命令。

[email protected]:~/test$ man -k bash
bash (1) - GNU Bourne-Again SHell
bash-builtins (7) - bash built-in commands, see bash(1)
bashbug (1) - report a bug in bash
builtins (7) - bash built-in commands, see bash(1)
dh_bash-completion (1) - install bash completions for package
rbash (1) - restricted bash, see bash(1)

有的關鍵詞在系統中對應多個手冊, 使用-f引數,用於查詢同名的手冊:

[email protected]:~/test$ man -f time
time (7) - overview of time and timers
time (1) - run programs and summarize system resource usage
time (2) - get time in seconds

2)清屏 clear

清屏使用命令clear或者使用快捷鍵:ctrl + l

3)歷史紀錄 history(history -n)

這是一個非常有用的命令,想知道之前輸入過的所有命令,就可以用他。

history :檢視最近使用的命令,最多500條
history n :曾經使用的最近n條命令
!n :執行最近第n條命令
!! :執行最近使用的第一條命令
方向上鍵:執行上一條命令
方向下鍵:執行下一條命令

五、檔案管理

1)檢視檔案目錄

下面這幾個命令是使用最頻繁的命令:

命令 說明
pwd 顯示當前工作目錄
cd  [要改變的目錄] 改變目錄
ls 列出當前目錄的檔案和子目錄
file 辨識檔案型別
  • cd

cd  //回到當前使用者主目錄
cd ~//回到當前使用者主目錄
cd ~[使用者名稱] //進入指定使用者主目錄
  • file 功能說明:辨識檔案型別。

語法:file [-beLvz][-f <名稱檔案>][-m <魔法數字檔案>…][檔案或目錄…] 

引數:

 -b  列出辨識結果時,不顯示檔名稱。 
-c 詳細顯示指令執行過程,便於排錯或分析程式執行的情形。
-f<名稱檔案> 指定名稱檔案,其內容有一個或多個檔名稱呢感,讓file依序辨識這些檔案,格式為每列一個檔名稱。
-L 直接顯示符號連線所指向的檔案的類別。
-m<魔法數字檔案> 指定魔法數字檔案。
-v 顯示版本資訊。
-z 嘗試去解讀壓縮檔案的內容。

補充說明:通過file指令,我們得以辨識該檔案的型別。

[email protected]:~/test$ file wait.c 
wait.c: ASCII text
[email protected]:~/test$ file fifo_file
fifo_file: fifo (named pipe)

2) 檔案路徑

什麼是檔案的路徑?就是檔案存放的地方,可以聯想為 檔案的“家”。

在Linux中,存在著絕對路徑和相對路徑:

絕對路徑:

路徑的寫法一定是由根目錄 / 寫起的,例如 /usr/local/mysql

相對路徑:

路徑的寫法不是由根目錄 / 寫起的。

例如 首先使用者進入到 /home,然後再進入到peng,執行的命令為

#cd /home
#cd peng

此時使用者所在的路徑為 /home/peng。

第一個cd命令後緊跟/home,前面有斜槓,是絕對路徑;而第二個cd命令後緊跟peng,前面沒有斜槓,表示從當前目錄下找peng這個目錄,這個peng是相對於/home目錄來講的,所以稱為相對路徑。

3)建立和刪除檔案目錄

1、建立檔案touch

功能說明:

檔名不存在,則建立一個新的空檔案
如果檔名存在,更新該檔案或者目錄的修改訪問時間,內容不變。

語法:

touch [-acfm][-d <日期時間>][-r <參考檔案或目錄>][-t <日期時間>][–help]   [–version][檔案或目錄…] 

或 touch [-acfm][–help][–version][日期時間][檔案或目錄…]

補充說明:使用touch指令可更改檔案或目錄的日期時間,包括存取時間和更改時間。

引數:

 -a或–time=atime或–time=access或–time=use  只更改存取時間。 
-c或–no-create 不建立任何檔案。
-d<時間日期> 使用指定的日期時間,而非現在的時間。
-f 此引數將忽略不予處理,僅負責解決BSD版本touch指令的相容性問題。
-m或–time=mtime或–time=modify 只更改變動時間。
-r<參考檔案或目錄> 把指定檔案或目錄的日期時間,統統設成和參考檔案或目錄的日期時間相同。
-t<日期時間> 使用指定的日期時間,而非現在的時間。
help 線上幫助。
–version 顯示版本資訊。

2、建立目錄mkdir

功能說明:

建立目錄

語法:

mkdir [-p][–help][–version][-m <目錄屬性>][目錄名稱]

補充說明:mkdir可建立目錄並同時設定目錄的許可權。

引數:

  -m<目錄屬性>或–mode<目錄屬性>   建立目錄時同時設定目錄的許可權。
-p或–parents 若所要建立目錄的上層目錄目前尚未建立,則會一併建立上層目錄。
help 顯示幫助。
–verbose 執行時顯示詳細的資訊。
–version 顯示版本資訊。

3、刪除檔案rm

功能說明:

刪除檔案或目錄。

語法:

rm [-dfirv][–help][–version][檔案或目錄…]

補充說明:執行rm指令可刪除檔案或目錄,如欲刪除目錄必須加上引數”-r”,否則預設僅會刪除檔案。

引數:

 -d或–directory  直接把欲刪除的目錄的硬連線資料刪成0,刪除該目錄。 
-f或–force 強制刪除檔案或目錄。
-i或–interactive 刪除既有檔案或目錄之前先詢問使用者。
-r或-R或–recursive 遞迴處理,將指定目錄下的所有檔案及子目錄一併處理。
-v或–verbose 顯示指令執行過程。
help 線上幫助。
–version 顯示版本資訊。

4、刪除目錄

rmdir(remove directory)

功能說明:刪除目錄。

語法:

rmdir [-p][–help][–ignore-fail-on-non-empty][–verbose][–version][目錄…]

補充說明:當有空目錄要刪除時,可使用rmdir指令。

引數:

  -p或–parents   刪除指定目錄後,若該目錄的上層目錄已變成空目錄,則將其一併刪除。
help 線上幫助。
–ignore-fail-on-non-empty 忽略非空目錄的錯誤資訊。
–verbose 顯示指令執行過程。
–version 顯示版本資訊。

3)顯示檔案內容

1. cat

功能:

把檔案串連線後傳到基本輸出到螢幕或加 > fileName 到另一個檔案

使用許可權:

所有使用者 

語法:

cat [-AbeEnstTuv] [–help] [–version] fileName 

引數:

-n 或 –number 由 1 開始對所有輸出的行數編號
-b 或 –number-nonblank 和 -n 相似,只不過對於空白行不編號
-s 或 –squeeze-blank 當遇到有連續兩行以上的空白行,就代換為一行的空白行
-v 或 –show-nonprinting

範例:

cat -n textfile1 > textfile2 把 textfile1 的檔案內容加上行號後輸入 textfile2 這個檔案裡
cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的檔案內容加上行號(空白行不加)之後將內容附加到 textfile3 裡。

cat < /dev/stdin > 1.txt //利用輸入重定向 CRTL+D 結束輸入
cat /dev/null > 1.txt //輸出重定向進行清空

2. head

功能:

查詢檔案的前多少行

語法:

head [-n] filename

3. tail

功能:

查詢檔案的莫問多少行

語法:

tail [-n] filename

4. more

功能:

分屏顯示

用法

more filename

4)拷貝和移動檔案目錄

1. cp

功能說明:

cp 原始檔 目標檔案
將原始檔複製為目標檔案或目錄。

語法:

cp [-abdfilpPrRsuvx][-S <備份字尾字串>][-V <備份方式>][–help][–spares=<使用時機>][–version][原始檔或目錄][目標檔案或目錄] [目的目錄]

補充說明:cp指令用在複製檔案或目錄,如同時指定兩個以上的檔案或目錄,且最後的目的地是一個已經存在的目錄,則它會把前面指定的所有檔案或目錄複製到該目錄中。若同時指定多個檔案或目錄,而最後的目的地並非是一個已存在的目錄,則會出現錯誤資訊。

2. mv

功能說明:

mv [原始檔、目錄] [目的檔案、目錄]
移動或更名現有的檔案或目錄。

語法:

mv [-bfiuv][–help][–version][-S <附加字尾>][-V <方法>][原始檔或目錄][目標檔案或目錄]

補充說明:mv可移動檔案或目錄,或是更改檔案或目錄的名稱。

引數:

 -b或–backup  若需覆蓋檔案,則覆蓋前先行備份。 
-f或–force 若目標檔案或目錄與現有的檔案或目錄重複,則直接覆蓋現有的文 件或目錄。
-i或–interactive 覆蓋前先行詢問使用者。
-S<附加字尾>或
–suffix=<附加字尾> 與-b引數一併使用,可指定備份檔案的所要附加的字尾。
-u或–update 在移動或更改檔名時,若目標檔案已存在,且其檔案日期比原始檔新,則不覆蓋目標檔案。
-v或–verbose 執行時顯示詳細的資訊。
-V=<方法>或
–version-control=<方法> 與-b引數一併使用,可指定備份的方法。
help 顯示幫助。
–version 顯示版本資訊

5)檔案目錄許可權

1. 許可權

檔案的許可權:

以普通檔案為例,使用 ls -l 命令,可以看到結果的第一列是 -rwxrwxrwx 的形式,其中第一個字元 "-" 表示這個檔案為普通檔案,它也可以是其他的字元,不同的字元代表不同型別的檔案。其後的一串字元表明了該檔案的許可權,其中:

  • 1)r 表明該檔案具有可讀許可權,若該位置為 "-" ,則表明檔案不可讀;

  • 2)w 表明該檔案具有寫許可權,若該位置為 "-" ,則表明檔案不可寫;

  • 3)x 表明該檔案具有可執行許可權,若該位置為 "-" ,則表明檔案不具有可執行許可權;

  • 4)第一個 rwx 表示該檔案的所有者對該檔案的許可權;第二個 rwx 表示該檔案所屬組對該檔案的許可權;第三個 rwx 表示其他使用者對該檔案的許可權。

2. 許可權所屬物件

檔案所有者:生成檔案或目錄的當前人,許可權最高,用u表示。檔案所屬使用者組:系統管理員分配的同組一個或幾個人,用g表示。其他人對此檔案的許可權:除擁有者、使用者組以外的人,用o 表示。所有人:包括擁有者,所屬使用者組、其他使用者,用a表示

-rwxr(所有者) -xr(所在組) -x(其他人)

3.修改屬性chmod

chmod命令用來修改檔案目錄的訪問許可權,修改許可權的前提條件是在修改許可權時具有可操作許可權。

(a)用字母表示許可權 Who(u、g、o、a)+cp(“=”設定許可權“+”新增許可權“-”刪除許可權)+permission(“r”讀許可權“w”寫許可權“x”操作許可權) 例如:

chmod  g=wr  1.c;
chmod u+w,g-w,o=wr 1.c

(b)用八進位制數字表示許可權

 r      w   x
0 0 0 無許可權
1 1 1 有許可權
R:4,w;2,x:1

例如 :

Chmod 777 build   將build的許可權成所有人rwx

注意:在Ubuntu中建立的檔案預設許可權是664

4. Chown改變檔案的所屬者和所屬組

chown(英文全拼:change owner)命令用於設定檔案所有者和檔案關聯組的命令。

語法

chown [-cfhvR] [--help] [--version] user[:group] file...

引數 :

user : 新的檔案擁有者的使用者 ID
group : 新的檔案擁有者的使用者組(group)
-c : 顯示更改的部分的資訊
-f : 忽略錯誤資訊
-h :修復符號連結
-v : 顯示詳細的處理資訊
-R : 處理指定目錄以及其子目錄下的所有檔案
--help : 顯示輔助說明
--version : 顯示版本

例項: 把 /var/run/httpd.pid 的所有者設定 root:

chown root /var/run/httpd.pid

5. chgrp改變檔案或目錄所屬組

Linux chgrp(英文全拼:change group)命令用於變更檔案或目錄的所屬群組。

與 chown 命令不同,chgrp 允許普通使用者改變檔案所屬的組,只要該使用者是該組的一員。

語法

chgrp [-cfhRv][--help][--version][所屬群組][檔案或目錄...] 或 chgrp [-cfhRv][--help][--reference=<參考檔案或目錄>][--version][檔案或目錄...]

引數說明:

  -c或--changes 效果類似"-v"引數,但僅回報更改的部分。
-f或--quiet或--silent 不顯示錯誤資訊。
-h或--no-dereference 只對符號連線的檔案作修改,而不更動其他任何相關檔案。
-R或--recursive 遞迴處理,將指定目錄下的所有檔案及子目錄一併處理。
-v或--verbose 顯示指令執行過程。
--help 線上幫助。
--reference=<參考檔案或目錄> 把指定檔案或目錄的所屬群組全部設成和參考檔案或目錄的所屬群組相同。
--version 顯示版本資訊。

Chown、chgroup使用頻率較低,瞭解即可。

6)find查詢檔案

Linux find 命令用來在指定目錄下查詢檔案。任何位於引數之前的字串都將被視為欲查詢的目錄名。

如果使用該命令時,不設定任何引數,則 find 命令將在當前目錄下查詢子目錄與檔案。並且將查詢到的子目錄和檔案全部進行顯示。

我們有時候還要模糊查詢某個檔案,比如根據檔案的字尾名,檔案建立時間,檔案大小等等。

語法:

find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份為 path,之後的是 expression。

如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 為預設 expression。

expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。

引數說明:



-name name, -iname name : 檔名稱符合 name 的檔案。iname 會忽略大小寫
-user 按照使用者(檔案的屬主)
-size n : 檔案大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。
-mtime 按照最後一次修改時間
-atime 按照最後一次訪問時間
-perm :按照檔案的許可權
-type typen : 查詢檔案型別為typen的檔案
c: 字元裝置
d: 目錄
c: 字型裝置檔案
b: 區塊裝置檔案
p: 具名貯列
f: 一般檔案
l: 符號連結
s: socket

注意 find 的使用條件所查詢的路徑必須具有讀許可權。查詢選項通過檔案屬性來查詢。

例如:例項

  • 1.將當前目錄及其子目錄下所有檔案字尾為 .c 的檔案列出來:

# find . -name "*.c"
  • 2.將目前目錄及其下子目錄中所有一般檔案列出

# find . -type f
  • 3.將當前目錄及其子目錄下所有最近 20 天內更新過的檔案列出:

# find . -ctime -20
  • 4.查詢 /var/log 目錄中更改時間在 7 日以前的普通檔案,並在刪除之前詢問它們:

# find /var/log -type f -mtime +7 -ok rm {} \;
  • 5.查詢當前目錄中檔案屬主具有讀、寫許可權,並且檔案所屬組的使用者和其他使用者具有讀許可權的檔案:

# find . -type f -perm 644 -exec ls -l {} \;
  • 6.查詢系統中所有檔案長度為 0 的普通檔案,並列出它們的完整路徑:

# find / -type f -size 0 -exec ls -l {} \;
  1. whereis whereis命令用於查詢檔案。該指令會在特定目錄中查詢符合條件的檔案。這些檔案應屬於原始程式碼、二進位制檔案,或是幫助檔案。該指令只能用於查詢二進位制檔案、原始碼檔案和man手冊頁,一般檔案的定位需使用locate命令。

語法

whereis [-bfmsu][-B <目錄>...][-M <目錄>...][-S <目錄>...][檔案...]

引數:

-b  只查詢二進位制檔案。
-B<目錄> 只在設定的目錄下查詢二進位制檔案。
-f 不顯示檔名前的路徑名稱。
-m 只查詢說明檔案。
-M<目錄> 只在設定的目錄下查詢說明檔案。
-s 只查詢原始程式碼檔案。
-S<目錄> 只在設定的目錄下查詢原始程式碼檔案。
-u 查詢不包含指定型別的檔案。

例項:

  • 1.使用指令"whereis"檢視指令"bash"的位置,輸入如下命令:

[email protected]:~/test$ whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz
  • 2.查詢標準庫標頭檔案stdio.h位置

[email protected]:~/test$ whereis stdio.h
stdio: /usr/include/stdio.h /usr/share/man/man3/stdio.3.gz

7)grep過濾和統計

功能:查出包含某些字串的結果,對檔案或輸出結果進行過濾,對於大小寫有一定 要求。

語法:

grep [option] string filename

補充說明:grep指令用於查詢內容包含指定的範本樣式的檔案,如果發現某檔案的內容符合所指定的範本樣式,預設grep指令會把含有範本樣式的那一列顯示出來。若不指定任何檔名稱,或是所給予的檔名為“-”,則grep指令會從標準輸入裝置讀取資料。

-A<顯示行數>:除了顯示匹配 pattern 的那一行外,顯示該行之後的內容
-B<顯示行數>:除了顯示匹配 pattern 的那一行外,顯示該行之前的內容
-C<顯示行數>:除了顯示匹配 pattern 的那一行外,顯示該行前、後的內容
-c:統計匹配的行數
-e:同時匹配多個pattern
-i:忽略字元的大小寫
-n:顯示匹配的行號
-o:只顯示匹配的字串
-v:顯示沒有匹配pattern的那一行,相當於反向匹配
-w:匹配整個單詞

舉例:

1、在當前目錄中,查詢字尾有 file 字樣的檔案中包含 test 字串的檔案,並打印出該字串的行。此時,可以使用如下命令:

grep test *file 

2、以遞迴的方式查詢符合條件的檔案。例如,查詢指定目錄/etc/acpi 及其子目錄(如果存在子目錄的話)下所有檔案中包含字串"update"的檔案,並打印出該字串所在行的內容,使用的命令為:

grep -r update /etc/acpi  

3、反向查詢。前面各個例子是查詢並打印出符合條件的行,通過"-v"引數可以打印出不符合條件行的內容。

查詢檔名中包含 test 的檔案中不包含test 的行,此時,使用的命令為:

grep -v test *test*

grep應用非常頻繁,經常還會和正則表示式一起使用,常用的正則表示式:

.:任意單個字元
*:任意字元多次
[]:指定範圍,如[0-9]、[a-z]、[A-Z]、[0-9a-zA-Z]
^:行首
$:行尾
^$:空行

舉例 假定如下檔案:

9)wc計數

功能:Linux wc命令用於計算字數。利用wc指令我們可以計算檔案的Byte數、字數、或是列數,若不指定檔名稱、或是所給予的檔名為"-",則wc指令會從標準輸入裝置讀取資料。

wc [選項] 檔名

  • l 統計多少行

  • w 統計多少單詞

  • c 統計多少個字元

語法

wc [-clw][--help][--version][檔案...]

引數:

-c或--bytes或--chars 只顯示Bytes數。
-l或--lines 顯示行數。
-w或--words 只顯示字數。
--help 線上幫助。
--version 顯示版本資訊。

例項

在預設的情況下,wc將計算指定檔案的行數、字數,以及位元組數。使用的命令為:

wc testfile 

8) tar檔案壓縮解壓

tar命令可以為linux的檔案和目錄建立檔案。利用tar命令,可以把一大堆的檔案和目錄全部打包成一個檔案,這對於備份檔案或將幾個檔案組合成為一個檔案以便於網路傳輸是非常有用的。

語法

tar[必要引數][選擇引數][檔案] 

常用命令引數:

-A 新增壓縮檔案到已存在的壓縮
-B 設定區塊大小
-c 建立新的壓縮檔案
-d 記錄檔案的差別
-r 新增檔案到已經壓縮的檔案
-u 新增改變了和現有的檔案到已經存在的壓縮檔案
-x 從壓縮的檔案中提取檔案
-t 顯示壓縮檔案的內容
-z 支援gzip解壓檔案
-j 支援bzip2解壓檔案
-Z 支援compress解壓檔案
-v 顯示操作過程
-l 檔案系統邊界設定
-k 保留原有檔案不覆蓋
-m 保留檔案不被覆蓋
-W 確認壓縮檔案的正確性

常見解壓/壓縮命令 tar

解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是壓縮!)

.gz

解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName

.tar.gz 和 .tgz

解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName

.bz2

解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮:bzip2 -z FileName

.tar.bz2

解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName

.bz

解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓縮:未知

.tar.bz

解壓:tar jxvf FileName.tar.bz
壓縮:未知

.Z

解壓:uncompress FileName.Z
壓縮:compress FileName

.tar.Z

解壓:tar Zxvf FileName.tar.Z
壓縮:tar Zcvf FileName.tar.Z DirName

.zip

解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName

.rar

解壓:rar x FileName.rar
壓縮:rar a FileName.rar DirName

舉例:

例項1:將檔案log2021全部打包成tar包

命令:

tar -cvf log.tar log2021.log          僅打包,不壓縮! 
tar -zcvf log.tar.gz log2021.log 打包後,以 gzip 壓縮
tar -jcvf log.tar.bz2 log2021.log 打包後,以 bzip2 壓縮

例項2:查閱上述 tar包內有哪些檔案

說明:

由於我們使用 gzip 壓縮的log.tar.gz,所以要查閱log.tar.gz包內的檔案時,就得要加上 z 這個引數了。

例項3:將tar 包解壓縮

命令:

tar -zxvf /opt/soft/test/log.tar.gz

六、shell的特殊字元

1) 萬用字元* ?

* :通配0個或多個字元 
* ? :通配任意單個字元
* [s] :通配某個範圍內的任意一個字元

舉例:

2) 一行執行多條命令

一行執行多條命令:在命令與命令之間用“;”隔開

cd ; ls

3)  輸出重定向:>,>>

>  :將一個命令的輸出放入檔案中
>> :輸出重定向但不會把原始檔覆蓋,在原檔案末尾追加

舉例:將ls的輸出結果輸出給test.txt

  1. 當前目錄沒有操作許可權 cd .. 退回上一級目錄

  1. 修改資料夾許可權 為方便起見,我們將test的許可權全部開啟

用“>”的輸出結果如下:

然後再用“>>”做測試其結果如下

4) 輸入重定向:<

下面再實現以下輸入重定向:

5) 管道符:|

管道符“|”:將一個程序的輸出作為另一個程序的輸入

輸入命令 :

 ls -l /etc | cat

顯示的結果如上圖所示。

6) 其他:%,$,~

% :作業控制,提示符等
$ : 取某一列的值,取變數值等

七、使用者及程序

1、日期時間程序檢視

a) date: 顯示日期時間

b) cal :顯示日曆

2、ps程序查詢

功能:ps (英文全拼:process status)命令用於顯示當前程序的狀態,類似於 windows 的工作管理員。

語法

ps [options] [--help]

ps 的引數非常多, 在此僅列出幾個常用的引數並大略介紹含義:

-A 列出所有的程序
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細的資訊
-aux 顯示所有包含其他使用者的行程

au(x) 輸出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程擁有者
PID: pid
%CPU: 佔用的 CPU 使用率
%MEM: 佔用的記憶體使用率
VSZ: 佔用的虛擬記憶體大小
RSS: 佔用的記憶體大小
TTY: 終端的次要裝置號碼 (minor device number of tty)
STAT: 該行程的狀態:
D: 無法中斷的休眠狀態 (通常 IO 的程序)
R: 正在執行中
S: 靜止狀態
T: 暫停執行
Z: 不存在但暫時無法消除
W: 沒有足夠的記憶體分頁可分配
<: 高優先序的行程
N: 低優先序的行程
L: 有記憶體分頁分配並鎖在記憶體內 (實時系統或捱A I/O)
START: 行程開始時間
TIME: 執行的時間
COMMAND:所執行的指令

例項

  1. 顯示所有程序資訊,連同命令列

  1. 查詢指定程序init:

  1. 顯示指定使用者資訊

3、sudo使用者管理

終端的命令列最右邊的字元

$  普通使用者
# 管理員使用者

有很多命令需要管理員許可權才能使用,可以輸入命令前加sudo,也可以直接切換到管理員再執行。

切換到管理員root

切換使用者

su 使用者名稱  :切換賬戶

4、電源管理

a) shutdown

安全關閉或重啟Linux系統,它在系統關閉之前給系統上的所有登陸使用者提示一條警告資訊。該命令還允許使用者指定一個時間引數、可以是一個精確的時間、也可以是從現在開始的一段時間。精確時間的格式:hh:mm 表示小時和分鐘,時間段由 + 和分鐘數表示。系統執行該命令後會自動進行資料同步的工作。

功能說明:系統關機指令。

語  法:shutdown [-efFhknr][-t 秒數][時間][警告資訊]

補充說明:shutdown指令可以關閉所有程式,並依使用者的需要,進行重新開機或關機的動作。

引數:

 -c  當執行”shutdown -h 11:50”指令時,只要按+鍵就可以中斷關機的指令。 
-f 重新啟動時不執行fsck。
-F 重新啟動時執行fsck。
-h 將系統關機。
-k 只是送出資訊給所有使用者,但不會實際關機。
-n 不呼叫init程式進行關機,而由shutdown自己進行。
-r shutdown之後重新啟動。
-t<秒數> 送出警告資訊和刪除資訊之間要延遲多少秒。
[時間] 設定多久時間後執行shutdown指令。
[警告資訊] 要傳送給所有登入使用者的資訊。

b) reboot

功能說明:重新開機。

語法:

dreboot [-dfinw]

補充說明:執行reboot指令可讓系統停止運作,並重新開機。

引數:

  -d  重新開機時不把資料寫入記錄檔案/var/tmp/wtmp。本引數具有”-n”引數的效果。 
-f 強制重新開機,不呼叫shutdown指令的功能。
-i 在重開機之前,先關閉所有網路介面。
-n 重開機之前不檢查是否有未結束的程式。
-w 僅做測試,並不真的將系統重新開機,只會把重開機的資料寫入/var/log目錄下的wtmp記錄檔案。

c) halt

功能說明:關閉系統。

語法:

halt [-dfinpw]

補充說明:halt會先檢測系統的runlevel。若runlevel為0或6,則關閉系統,否則即呼叫shutdown來關閉系統。

引數:

  -d  不要在wtmp中記錄。 
-f 不論目前的runlevel為何,不呼叫shutdown即強制關閉系統。
-i 在halt之前,關閉全部的網路介面。
-n halt前,不用先執行sync。
-p halt之後,執行poweroff。
-w 僅在wtmp中記錄,而不實際結束系統。

4、使用者管理補充

(1)使用者密碼要求

使用者的密碼要求有6~8個字元,其中至少要包含2個字母、1個數字或特殊字元,而且不能與使用者名稱相同,還要不同於以前的密碼,至少要有三個字元不同與以前的密碼。

(2)passwd修改密碼命令

輸入命令 passwd
輸入原密碼 ****
輸入新密碼
確認新密碼

注意:在輸入密碼過程中機器是沒有任何動作的

(3)查詢使用者

id

檢視使用者ID(使用者名稱)及其所屬組ID(組名)

user

檢視已經登陸到當前系統中的使用者,只顯示出使用者名稱。

who

檢視使用者的詳細資訊

who am i

檢視當前使用者自己的資訊

whoanmi

檢視當前使用者自己的使用者名稱

八、相關資訊查詢

產看磁碟資訊

1. du

顯示磁碟使用摘要資訊

du 以Block為單位方式顯示
-k 以k位元組方式顯示
-m 以m位元組方式顯示
-s 顯示當前目錄下的內容總的佔用磁碟的大小,以Block為單位
以Block單位顯示的數字是以k位元組方式顯示的數字的2倍,1k位元組=2個Block

2. df

顯示整個檔案系統的空間使用磁碟情況

-k 以k位元組方式顯示

九、網路配置

1、ping

檢視當前機器與另一臺機器的聯通情況 ping 主機名稱或者主機的IP:向ping後面的主機發送資料包,若被ping的主機有回覆則表示連通的。

語法:

ping [-dfnqrRv][-c<完成次數>][-i<間隔秒數>][-I<網路介面>][-l<前置載入>][-p<範本樣式>][-s<資料包大小>][-t<存活數值>][主機名稱或IP地址]

補充說明:執行ping指令會使用ICMP傳輸協議,發出要求迴應的資訊,若遠端主機的網路功能沒有問題,就會迴應該資訊,因而得知該主機運作正常。

引數:

  -d   使用Socket的SO_DEBUG功能。
-c<完成次數> 設定完成要求迴應的次數。
-f 極限檢測。
-i<間隔秒數> 指定收發資訊的間隔時間。
-I<網路介面> 使用指定的網路介面送出資料包。
-l<前置載入> 設定在送出要求資訊之前,先行發出的資料包。
-n 只輸出數值。
-p<範本樣式> 設定填滿資料包的範本樣式。
-q 不顯示指令執行過程,開頭和結尾的相關資訊除外。
-r 忽略普通的Routing Table,直接將資料包送到遠端主機上。
-R 記錄路由過程。
-s<資料包大小> 設定資料包的大小。
-t<存活數值> 設定存活數值TTL的大小。
-v 詳細顯示指令的執行過程。

2、ifconfig

檢視和配置當前機器的網路引數資訊

語法:

ifconfig [網路裝置][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<網路裝置型別><硬體地址>][io_addr<I/O地址>][irq<IRQ地址>][media<網路媒介型別>][mem_start<記憶體地址>][metric<數目>][mtu<位元組>][netmask<子網掩碼>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

補充說明:ifconfig可設定網路裝置的狀態,或是顯示目前的設定。

引數:

  add<地址>   設定網路裝置IPv6的IP地址。
del<地址> 刪除網路裝置IPv6的IP地址。
down 關閉指定的網路裝置。
<hw<網路裝置型別><硬體地址> 設定網路裝置的型別與硬體地址。
io_addr<I/O地址> 設定網路裝置的I/O地址。
irq<IRQ地址> 設定網路裝置的IRQ。
media<網路媒介型別> 設定網路裝置的媒介型別。
mem_start<記憶體地址> 設定網路裝置在主記憶體所佔用的起始地址。
metric<數目> 指定在計算資料包的轉送次數時,所要加上的數目。
mtu<位元組> 設定網路裝置的MTU。
netmask<子網掩碼> 設定網路裝置的子網掩碼。
tunnel<地址> 建立IPv4與IPv6之間的隧道通訊地址。
up 啟動指定的網路裝置。
-broadcast<地址> 將要送往指定地址的資料包當成廣播資料包來處理。
-pointopoint<地址> 與指定地址的網路裝置建立直接連線,此模式具有保密功能。
-promisc 關閉或啟動指定網路裝置的promiscuous模式。
[IP地址] 指定網路裝置的IP地址。
[網路裝置] 指定網路裝置的名稱。

舉例

ifconfig -a // 顯示產看當前機器的IP、Netmask、Gateway等網路資訊
ifconfig eth0 up(down) //啟用與關閉某個網路介面卡
ifconfig eth0 [ip address] netmask [address] //設定IP和子網掩碼

十、Linux應用程式的安裝與解除安裝基礎

1、Linux安裝包

Linux安裝包的通常是tar的格式,同時也支援自己定義的格式。在redhat中軟體安裝包的格式通常是rpm 在Ubuntu中軟體安裝包的格式通常是deb

2、 安裝包命名通用規則

在Linux中常用的命名格式是:

軟體名稱版本號-修訂版本號體系架構.副檔名

3、安裝包的離線安裝及解除安裝

dpkg
dpkg -i 安裝
dpkg -p 解除安裝

原始檔安裝的過程:

配置configure  >>  編譯make  >>  安裝 make  install

4、線上安裝及解除安裝

安裝 :

apt-get install 

解除安裝 :

apt-get remove -purge  

十一、VIM編譯工具

Vim是從 vi 發展出來的一個文字編輯器。程式碼補完、編譯及錯誤跳轉等方便程式設計的功能特別豐富,在程式設計師中被廣泛使用。

簡單的來說, vi 是老式的字處理器,不過功能已經很齊全了,但是還是有可以進步的地方。vim 則可以說是程式開發者的一項很好用的工具。

連 vim 的官方網站 (http://www.vim.org) 自己也說 vim 是一個程式開發工具而不是文書處理軟體。

1、vim優勢:

  • a)所有Unix Like系統都會內建vi文字編輯器,其他的文字編輯器則不一定會存在;

  • b)很多軟體的編輯介面都會主動呼叫vi

  • c)vi具有程式編輯能力,可以主動以字型顏色辨別語法的正確性,方便程式設計;

  • d)程式簡單編輯速度快。

2、vi的模式:

基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)。這三種模式的作用分別是:

1)命令模式:

使用者剛剛啟動 vi/vim,便進入了命令模式。

此狀態下敲擊鍵盤動作會被Vim識別為命令,而非輸入字元。比如我們此時按下i,並不會輸入一個字元,i被當作了一個命令。

以下是常用的幾個命令:

i 切換到輸入模式,以輸入字元。
x 刪除當前游標所在處的字元。
: 切換到底線命令模式,以在最底一行輸入命令。

若想要編輯文字:啟動Vim,進入了命令模式,按下i,切換到輸入模式。

命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令。

2)輸入模式

在命令模式下按下i就進入了輸入模式。

在輸入模式中,可以使用以下按鍵:

字元按鍵以及Shift組合,輸入字元

ENTER,回車鍵,換行
BACK SPACE,退格鍵,刪除游標前一個字元
DEL,刪除鍵,刪除游標後一個字元
方向鍵,在文字中移動游標
HOME/END,移動游標到行首/行尾
Page Up/Page Down,上/下翻頁
Insert,切換游標為輸入/替換模式,游標將變成豎線/下劃線
ESC,退出輸入模式,切換到命令模式

3)底行命令模式

在命令模式下按下:(英文冒號)就進入了底線命令模式。

底線命令模式可以輸入單個或多個字元的命令,可用的命令非常多。

在底線命令模式中,基本的命令有(已經省略了冒號):

q 退出程式
w 儲存檔案
按ESC鍵可隨時退出底線命令模式。

簡單的說,我們可以將這三個模式想成底下的圖示來表示:

3. vim cheat sheet

下圖就是赫赫有名的vim cheat sheet,一圖包含了大部分常用的vim命令,建議儲存

4. 舉例

如果你想要使用 vim 來建立一個名為 peng.c 的檔案時,輸入下面命令:

[email protected]:~$ vim peng.c

按下 i 進入輸入模式(也稱為編輯模式),開始編輯文字

在一般模式之中,只要按下 i, o, a 等字元就可以進入輸入模式了!

在編輯模式當中,你可以發現在左下角狀態列中會出現 –INSERT- 的字樣,那就是可以輸入任意字元的提示。

這個時候,鍵盤上除了 Esc 這個按鍵之外,其他的按鍵都可以視作為一般的輸入按鈕了,所以你可以進行任何的編輯。

按下 ESC 按鈕回到一般模式

好了,假設我已經按照上面的樣式給他編輯完畢了,那麼應該要如何退出呢?是的!沒錯!就是給他按下 Esc 這個按鈕即可!馬上你就會發現畫面左下角的 – INSERT – 不見了!

在一般模式中按下 :wq 儲存後離開 vi

OK,我們要存檔了,存檔並離開的指令很簡單,輸入 :wq 即可儲存離開!

OK! 這樣我們就成功建立了一個peng.c 的檔案。

5. 快捷鍵說明

移動游標的方法

操作 含義
h 或 向左箭頭鍵(←) 游標向左移動一個字元
j 或 向下箭頭鍵(↓) 游標向下移動一個字元
k 或 向上箭頭鍵(↑) 游標向上移動一個字元
l 或 向右箭頭鍵(→) 游標向右移動一個字元

如果你將右手放在鍵盤上的話,你會發現 hjkl 是排列在一起的,因此可以使用這四個按鈕來移動游標。如果想要進行多次移動的話,例如向下移動 30 行,可以使用 "30j" 或 "30↓" 的組合按鍵, 亦即加上想要進行的次數(數字)後,按下動作即可!

快捷鍵 含義
[Ctrl] + [f] 螢幕『向下』移動一頁,相當於 [Page Down]按鍵 ( 常用 )
[Ctrl] + [b] 螢幕『向上』移動一頁,相當於 [Page Up] 按鍵 ( 常用 )
[Ctrl] + [d] 螢幕『向下』移動半頁
[Ctrl] + [u] 螢幕『向上』移動半頁
+ 游標移動到非空格符的下一行
- 游標移動到非空格符的上一行
n 那個 n 表示『數字』,例如 20 。按下數字後再按空格鍵,游標會向右移動這一行的 n 個字元。例如 20 則游標會向後面移動 20 個字元距離。
0 或功能鍵[Home] 這是數字『 0 』:移動到這一行的最前面字元處 ( 常用 )
$ 或功能鍵[End] 移動到這一行的最後面字元處( 常用 )
H 游標移動到這個螢幕的最上方那一行的第一個字元
M 游標移動到這個螢幕的中央那一行的第一個字元
L 游標移動到這個螢幕的最下方那一行的第一個字元
G 移動到這個檔案的最後一行( 常用 )
nG n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu)
gg 移動到這個檔案的第一行,相當於 1G 啊!( 常用 )
n n 為數字。游標向下移動 n 行( 常用 )

搜尋替換

快捷鍵 含義
/word 向光標之下尋找一個名稱為 word 的字串。例如要在檔案內搜尋 vbird 這個字串,就輸入 /vbird 即可!( 常用 )
?word 向光標之上尋找一個字串名稱為 word 的字串。
n 這個 n 是英文按鍵。代表重複前一個搜尋的動作。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字串,則按下 n 後,會向下繼續搜尋下一個名稱為 vbird 的字串。如果是執行 ?vbird 的話,那麼按下 n 則會向上繼續搜尋名稱為 vbird 的字串!
N 這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。

使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重複的找到一些你搜尋的關鍵詞!

快捷鍵 含義
:n1,n2s/word1/word2/g n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字串,並將該字串取代為 word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 並取代為 VBIRD 則:『:100,200s/vbird/VBIRD/g』。( 常用 )
:1,$s/word1/word2/g 或 :%s/word1/word2/g 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !( 常用 )
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認 (confirm) 是否需要取代!( 常用 )

刪除、複製與貼上

快捷鍵 含義
x, X 在一行字當中,x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] 亦即是退格鍵) ( 常用 )
nx n 為數字,連續向後刪除 n 個字元。舉例來說,我要連續刪除 10 個字元, 『10x』。
dd 刪除遊標所在的那一整行( 常用 )
ndd n 為數字。刪除游標所在的向下 n 行,例如 20dd 則是刪除 20 行 ( 常用 )
d1G 刪除游標所在到第一行的所有資料
dG 刪除游標所在到最後一行的所有資料
d$ 刪除遊標所在處,到該行的最後一個字元
d0 那個是數字的 0 ,刪除遊標所在處,到該行的最前面一個字元
yy 複製遊標所在的那一行( 常用 )
nyy n 為數字。複製游標所在的向下 n 行,例如 20yy 則是複製 20 行( 常用 )
y1G 複製遊標所在行到第一行的所有資料
yG 複製遊標所在行到最後一行的所有資料
y0 複製游標所在的那個字元到該行行首的所有資料
y$ 複製游標所在的那個字元到該行行尾的所有資料
p, P p 為將已複製的資料在游標下一行貼上,P 則為貼在遊標上一行!舉例來說,我目前游標在第 20 行,且已經複製了 10 行資料。則按下 p 後, 那 10 行資料會貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢?那麼原本的第 20 行會被推到變成 30 行。( 常用 )
J 將游標所在行與下一行的資料結合成同一行
c 重複刪除多個數據,例如向下刪除 10 行,[ 10cj ]
u 復原前一個動作。( 常用 )
. 重複前一個動作的意思。如果你想要重複刪除、重複貼上等等動作,按下小數點『.』就好了!( 常用 )
[Ctrl]+r 重做上一個動作。( 常用 )

這個 u 與 [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~ 利用這兩個功能按鍵,你的編輯,嘿嘿!很快樂的啦!

一般模式切換到編輯模式的可用的按鈕說明

進入輸入或取代的編輯模式

快捷鍵 含義
i, I 進入輸入模式(Insert mode):i 為『從目前游標所在處輸入』, I 為『在目前所在行的第一個非空格符處開始輸入』。( 常用 )
a, A 進入輸入模式(Insert mode):a 為『從目前游標所在的下一個字元處開始輸入』, A 為『從游標所在行的最後一個字元處開始輸入』。( 常用 )
o, O 進入輸入模式(Insert mode):這是英文字母 o 的大小寫。o 為在目前游標所在的下一行處輸入新的一行;O 為在目前游標所在的上一行處輸入新的一行!( 常用 )
r, R 進入取代模式(Replace mode):r 只會取代游標所在的那一個字元一次;R會一直取代游標所在的文字,直到按下 ESC 為止;( 常用 )
[Esc] 退出編輯模式,回到一般模式中( 常用 )

上面這些按鍵中,在 vi 畫面的左下角處會出現『--INSERT--』或『--REPLACE--』的字樣。由名稱就知道該動作了吧!!特別注意的是,我們上面也提過了,你想要在檔案裡面輸入字元時, 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入。

一般模式切換到指令行模式的可用的按鈕說明

指令行的儲存、離開等指令

快捷鍵 含義
:w 將編輯的資料寫入硬碟檔案中( 常用 )
:w! 若檔案屬性為『只讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案許可權有關啊!
:q 離開 vi ( 常用 )
:q! 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。
:wq 儲存後離開,若為 :wq! 則為強制儲存後離開 ( 常用 )
ZZ 這是大寫的 Z 喔!如果修改過,儲存當前檔案,然後退出!效果等同於(儲存並退出)
ZQ 不儲存,強制退出。效果等同於 :q!。
:w [filename] 將編輯的資料儲存成另一個檔案(類似另存新檔)
:r [filename] 在編輯的資料中,讀入另一個檔案的資料。亦即將 『filename』 這個檔案內容加到遊標所在行後面
:n1,n2 w [filename] 將 n1 到 n2 的內容儲存成 filename 這個檔案。
:! command 暫時離開 vi 到指令行模式下執行 command 的顯示結果!例如:『:! ls /home』即可在 vi 當中檢視 /home 底下以 ls 輸出的檔案資訊!

vim 環境的變更

快捷鍵 含義
:set nu 顯示行號,設定之後,會在每一行的字首顯示該行的行號( 常用 )
:set nonu 與 set nu 相反,為取消行號!

這些基礎知識都是必須掌握的知識點,學會以後,就可以進入到下一步Linux下的C程式開發的學習了!

- END -