文章來源:程式員編程指南 ,作者不二
C/C++的學習裙【七一二 二八四 七零五 】,無論你是小白還是進階者,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多干貨和技術資料分享!
1 Unix/Linux作業系統介紹
1.1 作業系統的作用
1.1.1 作業系統的目標
方便:使計算機系統易于使用有效:以更有效的方式使用計算機系統資源擴展:方便用戶有效開發、測驗和引進新功能
1.1.2 作業系統的地位
作業系統在計算機系統中承上啟下的地位:向下封裝硬體,向上提供操作介面,
1.2 Unix/Linux作業系統介紹
1.2.1 Unix家族
1965:貝爾實驗室(Bell Labs)加入一項由通用電氣和麻省理工學院合作的計劃,該計劃要建立一套多使用者、多任務、多層次的MULTICS作業系統,后來因為專案太為復雜失敗,1969:其主要開發者Thompson(后被稱為UNIX之父)和Ritchie領導一組開發者,開發了一個新的多任務作業系統—UNICS,后來被改名為Unix,最初的Unix是用B語言和匯編語言混合撰寫而成,1971:兩人在貝爾實驗室共同發明了C語言,并于1973用C語言重寫了Unix,1974:UNIX第一次出現在貝爾實驗室以外,此后UNIX被政府機關,研究機構,企業和大學注意到,并逐漸流行開來,1980:有兩個最主要的Unix的版本線,一個是Berkeley的BSD UNIX,另一個是AT&T的Unix,兩者的競爭最終引發了Unix的戰爭,最終導致Unix出現各種各樣的變種,1982:AT&T基于版本7開發了UNIX System Ⅲ的第一個商業版本,并不再開源,1992~2001:由于著作權問題,AT&T公司與BSD開發組開始了一場將近10年的著作權官司,UNIX由于其昂貴的費用,僅局限于大型機的應用;BSD因為著作權問題,失去了寶貴的發展時期,
1.2.2 Linux家族
Minix(mini-UNIX)最初是由Andrew Tanenbaum教授,仿照4.3BSD的源代碼,白手起家完成了12000行C語言的撰寫作業這個系統只是一個教學工具,沒有什么實際應用價值,1990年,Linus Torvalds決定撰寫一個自己的Minix內核,初名為Linus' Minix,意為Linus的Minix內核,后來改名為Linux,此內核于1991年正式發布,并逐漸引起人們的注意,Linux作業系統的誕生、發展、和成長程序依賴于五個重要支柱:unix作業系統、minix作業系統、GNU計劃、POSIX標準和互聯網,GNU計劃:GNU是“GNU is Not Unix”的遞回縮寫,由Richard M.Stallman于1984年創辦,旨在開發一個免費、類unix的作業系統-GNU系統及其開發工具;Emacs編輯系統、BASH shell程式、GCC、GDB等開發工具都是GNU組織的產品,1992年Linux與其他GNU軟體結合,完全自由的作業系統正式誕生,該作業系統往往被稱為“GNU/Linux”或簡稱Linux,POSIX標準:POSIX標準定義了作業系統應該為應用程式提供的介面標準,POSIX標準用來統一Unix、Linux各分支編程介面,以提高其通用型和可移植性,
1.2.3 Linux的兩類用戶
1.2.4 Linux的遠親
1.2.5 Linux和Unix的聯系
UNIX系統是作業站上最常用的作業系統,它是一個多用戶、多任務的實時作業系統,允許多人同時訪問計算機, 并同時運行多個任務,UNIX系統具有穩定、高效、安全、方便、功能強大等諸多優點,自20世紀70年代開始便運行在許多大型和小型計算機上,UNIX雖然是一個安全、穩定且功能強大的作業系統,但它也一直是一種大型的而且對運行平臺要求很高的作業系統,只能在作業站或小型機上才能發揮全部功能,并且價格昂貴,對普通用戶來說是可望而不可及的,這為后來Linux的崛起提供了機會,Linux是一個類UNIX作業系統,Linux是免費的、不受著作權制約、與UNIX兼容的作業系統,Linux在x86架構上實作了UNIX系統的全部特性,具有多用戶多任務的能力,同時保持了高效性和穩定性,Linux具有如下的優秀的特點:
- 開放性;
- 完全免費;
- 多用戶;
- 多任務;
- 良好的用戶界面;
- 設備獨立性;
- 提供了豐富的網路功能;
- 可靠的系統安全性;
- 良好的可移植性,
1.2.6 Linux內核及發行版介紹
「1) Linux內核版本」
內核(kernel)是系統的心臟,是運行程式和管理像磁盤和列印機等硬體設備的核心程式,它提供了一個在裸設備與應用程式間的抽象層,
Linux內核版本又分為穩定版和開發版,兩種版本是相互關聯,相互回圈:
穩定版:具有工業級強度,可以廣泛地應用和部署,新的穩定版相對于較舊的只是修正一些bug或加入一些新的驅動程式,開發版:由于要試驗各種解決方案,所以變化很快,
內核原始碼網址:http://www.kernel.org,所有來自全世界的對Linux原始碼的修改最終都會匯總到這個網站,由Linus領導的開源社區對其進行甄別和修改最終決定是否進入到Linux主線內核原始碼中,
「2)Linux發行版本」
Linux發行版 (也被叫做 GNU/Linux 發行版) 通常包含了包括桌面環境、辦公套件、媒體播放器、資料庫等應用軟體,
這些作業系統通常由Linux內核、以及來自GNU計劃的大量的函式庫,和基于X Window的圖形界面,在X Window中用戶同樣可以通過使用滑鼠對視窗、選單等進行操作來完成相應的作業,
X Window系統是一個非常出色的圖形視窗系統,是類UNIX系統的圖形用戶界面的工業標準,X Window系統最重要的特征之一就是它的結構與設備無關,
X Window系統的主要特點有如下幾點:
X Window系統是客戶機/服務器結構的,X Window的實作是與作業系統內核分開的,其主要由X Server和X Client兩部分組成,X Window系統不是Unix/Linux作業系統的必須的構成部分,而只是一個可選的應用程式組件,
1.2.7 Unix/Linux開發應用領域介紹
Unix/Linux服務器
是目前Unix/Linux應用最多的一個領域,可以提供Web、FTP、Gopher、SMTP/POP3、Proxy/Cache、DNS等服務器,支持服務器集群,支持虛擬主機、虛擬服務、VPN等,
嵌入式Linux系統
嵌入式Linux是將流行的Linux作業系統進行剪裁修改,能夠在嵌入式計算機系統上運行的一種作業系統,Linux嵌入式系統能夠支持多種CPU和硬體平臺,性能穩定,剪裁性好,開發和使用容易,其中包括Embedix、uCLinux、muLinux等,
桌面應用
近年來,Linux系統特別強調在桌面應用方面的改進,并且已達到相當的水平,完全可以作為一種集辦公應用、多媒體應用、網路應用等多方面功能于一體的圖形界面作業系統,在辦公應用方面,Unix/Linux集成了openOffice、SUN公司的StarOffice以及KOffice等工具,
電子政務
隨著Linux的快速發展,Linux已逐漸成為Windows系統重要的競爭力量,尤其是Linux在安全性方面的獨特優勢,又使得Linux在政府應用領域得到很大的發展,目前一些國家正將其電子政務系統向Linux平臺遷移,中國政府也對Linux給予極大的支持,
2 檔案系統
2.1 目錄和路徑
2.1.1 目錄
目錄是一組相關檔案的集合,一個目錄下面除了可以存放檔案之外還可以存放其他目錄,即可包含子目錄,在確定檔案、目錄位置時,DOS和Unix/Linux都采用“路徑名+檔案名”的方式,路徑反映的是目錄與目錄之間的關系,
2.1.2 路徑
Unix/Linux路徑由到達定位檔案的目錄組成,在Unix/Linux系統中組成路徑的目錄分割符為斜杠“/”,而DOS則用反斜杠“\”來分割各個目錄,
路徑分為絕對路徑和相對路徑:
「絕對路徑」
絕對路徑是從目錄樹的樹根“/”目錄開始往下直至到達檔案所經過的所有節點目錄,下級目錄接在上級目錄后面用“/”隔開,注意:絕對路徑都是從“/”開始的,所以第一個字符一定是“/”,
「相對路徑」
相對路徑是指目標目錄相對于當前目錄的位置,如果不在當前目錄下,則需要使用兩個特殊目錄“.”和“”了,目錄“.”指向當前目錄,而目錄“..”,
2.2 檔案系統
2.2.1 Windows和Linux檔案系統區別
在 windows 平臺下,打開“計算機”,我們看到的是一個個的驅動器盤符:
每個驅動器都有自己的根目錄結構,這樣形成了多個樹并列的情形,如圖所示:
在 Linux 下,我們是看不到這些驅動器盤符,我們看到的是檔案夾(目錄):
在早期的 UNIX 系統中,各個廠家各自定義了自己的 UNIX 系統檔案目錄,比較混亂,Linux 面世不久后,對檔案目錄進行了標準化,于1994年對根檔案目錄做了統一的規范,推出 FHS ( Filesystem Hierarchy Standard ) 的 Linux 檔案系統層次結構標準,FHS 標準規定了 Linux 根目錄各檔案夾的名稱及作用,統一了Linux界命名混亂的局面,
和Windows作業系統類似,所有Unix/Linux的資料都是由檔案系統按照樹型目錄結構管理的,而且Unix/Linux作業系統同樣要區分檔案的型別,判斷檔案的存取屬性和可執行屬性,
Unix/Linux也采用了樹狀結構的檔案系統,它由目錄和目錄下的檔案一起構成,但Unix/Linux檔案系統不使用驅動器這個概念,而是使用單一的根目錄結構,所有的磁區都掛載到單一的“/”目錄上,其結構示意圖如圖所示:
無論何種版本的 Linux 發行版,桌面、應用是 Linux 的外衣,檔案組織、目錄結構才是Linux的內心,
2.2.2 Linux目錄結構
/:根目錄,一般根目錄下只存放目錄,在Linux下有且只有一個根目錄,所有的東西都是從這里開始,當你在終端里輸入“/home”,你其實是在告訴電腦,先從/(根目錄)開始,再進入到home目錄,/bin: /usr/bin: 可執行二進制檔案的目錄,如常用的命令ls、tar、mv、cat等,/boot:放置linux系統啟動時用到的一些檔案,如Linux的內核檔案:/boot/vmlinuz,系統引導管理器:/boot/grub,/dev:存放linux系統下的設備檔案,訪問該目錄下某個檔案,相當于訪問某個設備,常用的是掛載光驅 mount /dev/cdrom /mnt,/etc:系統組態檔存放的目錄,不建議在此目錄下存放可執行檔案,重要的組態檔有 /etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d,/home:系統默認的用戶家目錄,新增用戶賬號時,用戶的家目錄都存放在此目錄下,~表示當前用戶的家目錄,~edu 表示用戶 edu 的家目錄,/lib: /usr/lib: /usr/local/lib:系統使用的函式庫的目錄,程式在執行程序中,需要呼叫一些額外的引數時需要函式庫的協助,/lost+fount:系統例外產生錯誤時,會將一些遺失的片段放置于此目錄下,/mnt: /media:光碟默認掛載點,通常光碟掛載于 /mnt/cdrom 下,也不一定,可以選擇任意位置進行掛載,/opt:給主機額外安裝軟體所擺放的目錄,/proc:此目錄的資料都在記憶體中,如系統核心,外部設備,網路狀態,由于資料都存放于記憶體中,所以不占用磁盤空間,比較重要的目錄有 /proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等,/root:系統管理員root的家目錄,/sbin: /usr/sbin: /usr/local/sbin:放置系統管理員使用的可執行命令,如fdisk、shutdown、mount 等,與 /bin 不同的是,這幾個目錄是給系統管理員 root使用的命令,一般用戶只能"查看"而不能設定和使用,/tmp:一般用戶或正在執行的程式臨時存放檔案的目錄,任何人都可以訪問,重要資料不可放置在此目錄下,/srv:服務啟動之后需要訪問的資料目錄,如 www 服務需要訪問的網頁資料存放在 /srv/www 內,/usr:應用程式存放目錄,/usr/bin 存放應用程式,/usr/share 存放共享資料,/usr/lib 存放不能直接運行的,卻是許多程式運行所必需的一些函式庫檔案,/usr/local: 存放軟體升級包,/usr/share/doc: 系統說明檔案存放目錄,/usr/share/man: 程式說明檔案存放目錄,/var:放置系統執行程序中經常變化的檔案,如隨時更改的日志檔案 /var/log,/var/log/message:所有的登錄檔案存放目錄,/var/spool/mail:郵件存放的目錄,/var/run:程式或服務啟動后,其PID存放在該目錄下,
2.3 一切皆檔案
2.3.1 一切皆檔案
Unix/Linux對資料檔案(.mp3、.bmp),程式檔案(.c、.h、*.o),設備檔案(LCD、觸摸屏、滑鼠),網路檔案( socket ) 等的管理都抽象為檔案,使用統一的方式方法管理,
在Unix/Linux作業系統中也必須區分檔案型別,通過檔案型別可以判斷檔案屬于可執行檔案、文本檔案還是資料檔案,在Unix/Linux系統中檔案可以沒有擴展名,
2.3.2 檔案分類
通常,Unix/Linux系統中常用的檔案型別有5種:普通檔案、目錄檔案、設備檔案、管道檔案和鏈接檔案,
「普通檔案」
普通檔案是計算機作業系統用于存放資料、程式等資訊的檔案,一般都長期存放于外存盤器(磁盤、磁帶等)中,普通檔案一般包括文本檔案、資料檔案、可執行的二進制程式檔案等,
在Unix/Linux中可以通過file命令來查看檔案的型別,如果file檔案后面攜帶檔案名,則查看指定檔案的型別,如果攜帶通配符“*”,則可以查看當前目錄下的所有檔案的型別,
「目錄檔案」
Unix/Linux系統把目錄看成是一種特殊的檔案,利用它構成檔案系統的樹型結構,
目錄檔案只允許系統管理員對其進行修改,用戶行程可以讀取目錄檔案,但不能對它們進行修改,
每個目錄檔案至少包括兩個條目,“..”表示上一級目錄,“.”表示該目錄本身,
「設備檔案」
Unix/Linux系統把每個設備都映射成一個檔案,這就是設備檔案,它是用于向I/O設備提供連接的一種檔案,分為字符設備和塊設備檔案,
字符設備的存取以一個字符為單位,塊設備的存取以字符塊為單位,每一種I/O設備對應一個設備檔案,存放在/dev目錄中,如行式列印機對應/dev/lp,第一個軟盤驅動器對應/dev/fd0,
「管道檔案」
管道檔案也是Unix/Linux中較特殊的檔案型別,這類檔案多用于行程間的通信,
「鏈接檔案」
似于 windows 下的快捷方式,鏈接又可以分為軟鏈接(符號鏈接)和硬鏈接,
2.4 檔案權限
檔案權限就是檔案的訪問控制權限,即哪些用戶和組群可以訪問檔案以及可以執行什么樣的操作,
Unix/Linux系統是一個典型的多用戶系統,不同的用戶處于不同的地位,對檔案和目錄有不同的訪問權限,為了保護系統的安全性,Unix/Linux系統除了對用戶權限作了嚴格的界定外,還在用戶身份認證、訪問控制、傳輸安全、檔案讀寫權限等方面作了周密的控制,
在 Unix/Linux中的每一個檔案或目錄都包含有訪問權限,這些訪問權限決定了誰能訪問和如何訪問這些檔案和目錄,
2.4.1 訪問用戶
通過設定權限可以從以下三種訪問方式限制訪問權限:
「只允許用戶自己訪問(所有者)」
所有者就是創建檔案的用戶,用戶是所有用戶所創建檔案的所有者,用戶可以允許所在的用戶組能訪問用戶的檔案,
「允許一個預先指定的用戶組中的用戶訪問(用戶組)」
用戶都組合成用戶組,例如,某一類或某一專案中的所有用戶都能夠被系統管理員歸為一個用戶組,一個用戶能夠授予所在用戶組的其他成員的檔案訪問權限,
「允許系統中的任何用戶訪問(其他用戶)」
用戶也將自己的檔案向系統內的所有用戶開放,在這種情況下,系統內的所有用戶都能夠訪問用戶的目錄或檔案,在這種意義上,系統內的其他所有用戶就是 other 用戶類
這有點類似于 QQ 空間的訪問權限:
這個 QQ 空間是屬于我的,我相當于管理者(也就是“所有者”),我想怎么訪問就怎么訪問,同時,我可以設定允許 QQ 好友訪問,而這些 QQ 好友則類似于“用戶組”,當然,我可以允許所有人訪問,這里的所有人則類似于“其他用戶”,
2.4.2 訪問權限
用戶能夠控制一個給定的檔案或目錄的訪問程度,一個檔案或目錄可能有讀、寫及執行權限:
「讀權限(r)」
對檔案而言,具有讀取檔案內容的權限;對目錄來說,具有瀏覽目錄的權限,
「寫權限(w)」
對檔案而言,具有新增、修改檔案內容的權限;對目錄來說,具有洗掉、移動目錄內檔案的權限,
「可執行權限(x)」
對檔案而言,具有執行檔案的權限;對目錄了來說該用戶具有進入目錄的權限,
注意:通常,Unix/Linux系統只允許檔案的屬主(所有者)或超級用戶改變檔案的讀寫權限,
2.4.3 示例說明
- 第1個字母代表檔案的型別:“d” 代表檔案夾、“-” 代表普通檔案、“c” 代表硬體字符設備、“b” 代表硬體塊設備、“s”表示管道檔案、“l” 代表軟鏈接檔案,
- 后 9 個字母分別代表三組權限:檔案所有者、用戶者、其他用戶擁有的權限,
每一個用戶都有它自身的讀、寫和執行權限,
第一組權限控制訪問自己的檔案權限,即所有者權限,第二組權限控制用戶組訪問其中一個用戶的檔案的權限,第三組權限控制其他所有用戶訪問一個用戶的檔案的權限,
這三組權限賦予用戶不同型別(即所有者、用戶組和其他用戶)的讀、寫及執行權限就構成了一個有 9 種型別的權限組,
3 常用命令
3.1 概述
- 很多人可能在電視或電影中看到過類似的場景,黑客面對一個黑色的螢屏,上面飄著密密麻麻的字符,梆梆一頓敲,就完成了竊取資料的任務,
- Linux 剛出世時沒有什么圖形界面,所有的操作全靠命令完成,就如同電視里的黑客那樣,充滿了神秘與晦澀,
- 近幾年來,盡管 Linux 發展得非常迅速,圖形界面越來越友好,但是在真正的開發程序中,Linux 命令列的應用還是占有非常重要的席位,而且許多Linux功能在命令列界面要比圖形化界面下運行的快,可以說不會命令列,就不算會 Linux,
- Linux 提供了大量的命令,利用它可以有效地完成大量的作業,如磁盤操作、檔案存取、目錄操作、行程管理、檔案權限設定等,Linux 發行版本最少的命令也有 200 多個,這里只介紹比較重要和使用頻率最多的命令,
3.2 命令使用方法
3.2.1 Linux 命令格式
command [-options] [parameter1] …
說明:
command:命令名,相應功能的英文單詞或單詞的縮寫[-options]:選項,可用來對命令進行控制,也可以省略,[]代表可選parameter1 …:傳給命令的引數,可以是零個一個或多個
3.2.2 查看幫助檔案
「--help」
一般是 Linux 命令自帶的幫助資訊,并不是所有命令都自帶這個選項,
如我們想查看命令 ls 的用法:ls --help
「man」
man 是 Linux 提供的一個手冊,包含了絕大部分的命令、函式使用說明,
該手冊分成很多章節(section),使用 man 時可以指定不同的章節來瀏覽不同的內容,
man 中各個 section 意義如下:
Standard commands(標準命令)System calls(系統呼叫,如open,write)Library functions(庫函式,如printf,fopen)Special devices(設備檔案的說明,/dev下各種設備)File formats(檔案格式,如passwd)Games and toys(游戲和娛樂)Miscellaneous(雜項、慣例與協定等,例如Linux檔案系統、網路協定、ASCII 碼;environ全域變數)Administrative Commands(管理員命令,如ifconfig)
man使用格式如下:
man [選項] 命令名
man設定了如下的功能鍵:
如,我們想查看 ls 的用法:man 1 ls ( 1:為數字“1”,代表第 1 個 section,標準命令 )
實際上,我們不用指定第幾個章節也用查看,如,man ls,但是,有這個一種情況,假如,命令的名字和函式的名字剛好重名(如:printf),它既是命令,也可以是庫函式,如果,我們不指定章節號,man printf,它只查看命令的用法,不會查詢函式的用法,因為 man 是按照手冊的章節號的順序進行搜索的,
所以,使用 man 手冊時,最好指定章節號:
3.2.3 使用技巧
「自動補全」
在敲出命令的前幾個字母的同時,按下tab鍵,系統會自動幫我們補全命令,
「歷史命令」
當系統執行過一些命令后,可按上下鍵翻看以前的命令,history將執行過的命令列舉出來,
3.3 常用命令
3.3.1 檔案管理
「1 查看檔案資訊:ls」
ls是英文單詞list的簡寫,其功能為列出目錄的內容,是用戶最常用的命令之一,它類似于DOS下的dir命令,
Linux檔案或者目錄名稱最長可以有256個字符,“.”代表當前目錄,“..”代表上一級目錄,以“.”開頭的檔案為隱藏檔案,需要用 -a 引數才能顯示,
ls常用引數:
圖中列出的資訊含義如下圖所示:
與DOS下的檔案操作類似,在Unix/Linux系統中,也同樣允許使用特殊字符來同時參考多個檔案名,這些特殊字符被稱為通配符,
「2 輸出重定向命令:>」
Linux允許將命令執行結果重定向到一個檔案,本應顯示在終端上的內容保存到指定檔案中,
如:ls > test.txt ( test.txt 如果不存在,則創建,存在則覆寫其內容 )
>輸出重定向會覆寫原來的內容,>>輸出重定向則會追加到檔案的尾部,
「3 分屏顯示:more」
查看內容時,在資訊過長無法在一屏上顯示時,會出現快速滾屏,使得用戶無法看清檔案的內容,此時可以使用more命令,每次只顯示一頁,按下空格鍵可以顯示下一頁,按下q鍵退出顯示,按下h鍵可以獲取幫助,
「4 管道:|」
管道:一個命令的輸出可以通過管道做為另一個命令的輸入,
管道我們可以理解現實生活中的管子,管子的一頭塞東西進去,另一頭取出來,這里“ | ”的左右分為兩端,左端塞東西(寫),右端取東西(讀),
「5 清屏:clear」
clear作用為清除終端上的顯示(類似于DOS的cls清屏功能),也可使用快捷鍵:Ctrl + l ( “l” 為字母 ),
「6 切換作業目錄:cd」
在使用Unix/Linux的時候,經常需要更換作業目錄,cd命令可以幫助用戶切換作業目錄,Linux所有的目錄和檔案名大小寫敏感,
cd后面可跟絕對路徑,也可以跟相對路徑,如果省略目錄,則默認切換到當前用戶的主目錄,
注意:如果路徑是從根路徑開始的,則路徑的前面需要加上 “ / ”,如 “ /mnt ”,通常進入某個目錄里的檔案夾,前面不用加 “ / ”,
「7 顯示當前路徑:pwd」
使用pwd命令可以顯示當前的作業目錄,該命令很簡單,直接輸入pwd即可,后面不帶引數,
「8 創建目錄:mkdir」
通過mkdir命令可以創建一個新的目錄,引數-p可遞回創建目錄,
需要注意的是新建目錄的名稱不能與當前目錄中已有的目錄或檔案同名,并且目錄創建者必須對當前目錄具有寫權限,
「8 洗掉目錄:rmdir」
可使用rmdir命令洗掉一個目錄,必須離開目錄,并且目錄必須為空目錄,不然提示洗掉失敗,
「10 洗掉檔案:rm」
可通過rm洗掉檔案或目錄,使用rm命令要小心,因為檔案洗掉后不能恢復,為了防止檔案誤刪,可以在rm后使用-i引數以逐個確認要洗掉的檔案,
常用引數及含義如下表所示:
「11 建立鏈接檔案:ln」
Linux鏈接檔案類似于Windows下的快捷方式,鏈接檔案分為軟鏈接和硬鏈接,軟鏈接:軟鏈接不占用磁盤空間,源檔案洗掉則軟鏈接失效,硬鏈接:硬鏈接只能鏈接普通檔案,不能鏈接目錄,
使用格式:
ln 源檔案 鏈接檔案ln -s 源檔案 鏈接檔案
如果沒有-s選項代表建立一個硬鏈接檔案,兩個檔案占用相同大小的硬碟空間,即使洗掉了源檔案,鏈接檔案還是存在,所以-s選項是更常見的形式,
注意:如果軟鏈接檔案和源檔案不在同一個目錄,源檔案要使用絕對路徑,不能使用相對路徑,
「12 查看或者合并檔案內容:cat」
「13 文本搜索:grep」
Linux系統中grep命令是一種強大的文本搜索工具,grep允許對文本檔案進行模式查找,如果找到匹配模式, grep列印包含模式的所有行,
grep一般格式為:
grep [-選項] ‘搜索內容串’檔案名
在grep命令中輸入字串引數時,最好引號或雙引號括起來,例如:grep‘a ’1.txt,
常用選項說明:
grep搜索內容串可以是正則運算式,
正則運算式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯,
grep常用正則運算式:
「14 計算檔案行數或字數:wc」
常用選項說明:
「15 查找檔案:find」
find命令功能非常強大,通常用來在特定的目錄下搜索符合條件的檔案,也可以用來搜索特定用戶屬主的檔案,
常用用法:
「16 拷貝檔案:cp」
cp命令的功能是將給出的檔案或目錄復制到另一個檔案或目錄中,相當于DOS下的copy命令,
常用選項說明:
cp vim_configure/ code/ -ivr 把檔案夾 vim_configure 拷貝到 code 目錄里:
「17 移動檔案:mv」
用戶可以使用mv命令來移動檔案或目錄,也可以給檔案或目錄重命名,
常用選項說明:
「18 獲取檔案型別:file」
Linux系統檔案型別不是根據檔案擴展名分類的,通過file命令可以確認檔案具體型別,
「19 歸檔管理:tar」
計算機中的資料經常需要備份,tar是Unix/Linux中最常用的備份工具,此命令可以把一系列檔案歸檔到一個大檔案中,也可以把檔案檔案解開以恢復資料,
tar使用格式
tar [引數] 打包檔案名 檔案
tar命令很特殊,其引數前面可以使用“-”,也可以不使用,
常用引數:
注意:除了f需要放在引數的最后,其它引數的順序任意,
「20 檔案壓縮解壓:gzip」
tar與gzip命令結合使用實作檔案打包、壓縮,tar只負責打包檔案,但不壓縮,用gzip壓縮tar打包后的檔案,其擴展名一般用xxxx.tar.gz,
gzip使用格式如下:
gzip [選項] 被壓縮檔案
常用選項:
tar這個命令并沒有壓縮的功能,它只是一個打包的命令,但是在tar命令中增加一個選項(-z)可以呼叫gzip實作了一個壓縮的功能,實行一個先打包后壓縮的程序,
「壓縮用法」:tar cvzf 壓縮包包名 檔案1 檔案2 ...
-z 指定壓縮包的格式為:file.tar.gz
例如:tar zcvf test.tar.gz 1.c 2.c 3.c 4.c把 1.c 2.c 3.c 4.c 壓縮成 test.tar.gz
「解壓用法」:tar zxvf 壓縮包包名
「解壓到指定目錄」:-C (大寫字母“C”)
例子:tar -xvf new.tar.gz -C ./test/ 將 new.tar.gz 解壓到當前目錄下的 test 目錄下:
「21 檔案壓縮解壓:bzip2」
tar與bzip2命令結合使用實作檔案打包、壓縮(用法和gzip一樣),tar只負責打包檔案,但不壓縮,用bzip2壓縮tar打包后的檔案,其擴展名一般用xxxx.tar.bz2,在tar命令中增加一個選項(-j)可以呼叫bzip2實作了一個壓縮的功能,實行一個先打包后壓縮的程序,壓縮用法:tar cjvf 壓縮包包名 檔案...(tar jcvf bk.tar.bz2 *.c)解壓用法:tar xjvf 壓縮包包名 (tar jxvf bk.tar.bz2)
「22 檔案壓縮解壓:zip、unzip」
通過zip壓縮檔案的目標檔案不需要指定擴展名,默認擴展名為zip,壓縮檔案:zip [-r] 目標檔案(沒有擴展名) 源檔案解壓檔案:unzip -d 解壓后目錄檔案 壓縮檔案
「23 查看命令位置:which」
3.3.2 用戶、權限管理
用戶是Unix/Linux系統作業中重要的一環,用戶管理包括用戶與組賬號的管理,在Unix/Linux系統中,不論是由本機或是遠程登錄系統,每個系統都必須擁有一個賬號,并且對于不同的系統資源擁有不同的使用權限,Unix/Linux系統中的root賬號通常用于系統的維護和管理,它對Unix/Linux作業系統的所有部分具有不受限制的訪問權限,在Unix/Linux安裝的程序中,系統會自動創建許多用戶賬號,而這些默認的用戶就稱為“標準用戶”,在大多數版本的Unix/Linux中,都不推薦直接使用root賬號登錄系統,
「1) 查看當前用戶:whoami」
whoami該命令用戶查看當前系統當前賬號的用戶名,可通過cat /etc/passwd查看系統用戶資訊,
由于系統管理員通常需要使用多種身份登錄系統,例如通常使用普通用戶登錄系統,然后再以su命令切換到root身份對傳統進行管理,這時候就可以使用whoami來查看當前用戶的身份,
「2) 查看登錄用戶:who」
who命令用于查看當前所有登錄系統的用戶資訊,
常用選項:
「3) 查看登錄用戶:w」
w命令也可以查看登錄當前系統的用戶資訊,與who命令相比,w命令的功能更強大,它不但可以顯示當前有哪些用戶登錄到系統,還可以顯示這些用戶正在進行的操作,并給出更加詳細和科學的統計資料,
w命令的格式如下:
w [選項] [用戶名]
如果w命令攜帶用戶名,則只顯示指定用戶的資訊,否則顯示當前所有登錄用戶的資訊,
常用選項:
「4) 退出登錄賬戶:exit」
如果是圖形界面,退出當前終端;如果是使用ssh遠程登錄,退出登陸賬戶;如果是切換后的登陸用戶,退出則回傳上一個登陸賬號,
「5) 切換用戶:su」
可以通過su命令切換用戶,su后面可以加“-”,su和su –命令不同之處在于,su -切換到對應的用戶時會將當前的作業目錄自動轉換到切換后的用戶主目錄:
「注意」:如果是ubuntu平臺,需要在命令前加“sudo”,如果在某些操作需要管理員才能操作,ubuntu無需切換到root用戶即可操作,只需加“sudo”即可,sudo是ubuntu平臺下允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,減少了root 用戶的登陸和管理時間,提高了安全性,
「6) 添加、洗掉組賬號:groupadd、groupdel」
groupadd 新建組賬號groupdel 組賬號cat /etc/group 查看用戶組
「7) 修改用戶所在組:usermod」
使用方法:usermod -g 用戶組 用戶名
「8) 添加用戶賬號:useradd」
在Unix/Linux中添加用戶賬號可以使用adduser或useradd命令,因為adduser命令是指向useradd命令的一個鏈接,因此,這兩個命令的使用格式完全一樣,
useradd命令的使用格式如下:
useradd [引數] 新建用戶賬號
相關說明:
Linux每個用戶都要有一個主目錄,主目錄就是第一次登陸系統,用戶的默認當前目錄(/home/用戶);每一個用戶必須有一個主目錄,所以用useradd創建用戶的時候,一定給用戶指定一個主目錄;用戶的主目錄一般要放到根目錄的home目錄下,用戶的主目錄和用戶名是相同的;如果創建用戶的時候,不指定組名,那么系統會自動創建一個和用戶名一樣的組名,
「9) 設定用戶密碼:passwd」
在Unix/Linux中,超級用戶可以使用passwd命令為普通用戶設定或修改用戶口令,用戶也可以直接使用該命令來修改自己的口令,而無需在命令后面使用用戶名,
「10) 洗掉用戶:userdel」
「11) 查詢用戶登錄情況:last」
不管是哪位用戶從哪里登錄,管理員都可以通過last命令查出,以及是否有人非法登錄,
「12) 修改檔案權限:chmod」
chmod 修改檔案權限有兩種使用格式:字母法與數字法,
字母法:chmod u/g/o/a +/-/= rwx 檔案
chmod o+w file 給檔案file的其它用戶增加寫權限:
chmod u-r file 給檔案file的擁有者減去讀的權限:
chmod g=x file設定檔案file的同組用戶的權限為可執行,同時去除讀、寫權限:
數字法:“rwx” 這些權限也可以用數字來代替
如執行:chmod u=rwx,g=rx,o=r filename
就等同于:chmod u=7,g=5,o=4 filename
chmod 751 file:
檔案所有者:讀、寫、執行權限同組用戶:讀、執行的權限其它用戶:執行的權限
chmod 777 file:所有用戶擁有讀、寫、執行權限
注意:如果想遞回所有目錄加上相同權限,需要加上引數“ -R ”,
如:chmod 777 test/ -R 遞回 test 目錄下所有檔案加 777 權限,
「13) 修改檔案所有者:chown」
使用方法:chown 用戶名 檔案或目錄名
「14) 修改檔案所屬組:chgrp」
使用方法:chgrp 用戶組名 檔案或目錄名
3.3.3 系統管理
「1) 查看當前日歷:cal」
cal命令用于查看當前日歷,-y顯示整年日歷:
「2) 顯示或設定時間:date」
設定時間格式(需要管理員權限):
date [MMDDhhmm[[CC]YY][.ss]] +format
CC為年前兩位yy為年的后兩位,前兩位的mm為月,后兩位的mm為分鐘,dd為天,hh為小時,ss為秒,如:date 010203042016.55,
顯示時間格式(date '+%y,%m,%d,%H,%M,%S').
「3) 查看行程資訊:ps」
行程是一個具有一定獨立功能的程式,它是作業系統動態執行的基本單元,
ps命令可以查看行程的詳細狀況,常用選項(選項可以不加“-”)如下:
「4) 動態顯示行程:top」
top命令用來動態顯示運行中的行程,top命令能夠在運行后,在指定的時間間隔更新顯示資訊,可以在使用top命令時加上-d來指定顯示資訊更新的時間間隔,
在top命令執行后,可以按下按鍵得到對顯示的結果進行排序:
「5) 終止行程:kill」
kill命令指定行程號的行程,需要配合 ps 使用,
使用格式:
kill [-signal] pid
信號值從0到15,其中9為絕對終止,可以處理一般信號無法終止的行程,
kill 9133 :9133 為應用程式所對應的行程號
有些行程不能直接殺死,這時候我們需要加一個引數“ -9 ”,“ -9 ” 代表強制結束:
「6) 后臺程式:&、jobs、fg」
用戶可以將一個前臺執行的程式調入后臺執行,方法為:命令 &如果程式已經在執行,ctrl+z可以將程式調入后臺jobs查看后臺運行程式fg編號(編號為通過jobs查看的編號),將后臺運行程式調出到前臺
「7) 關機重啟:reboot、shutdown、init」
「8) 字符界面和圖形界面切換」
在redhat平臺下,可通過命令進行切換:
init 3 切換到字符界面init 5 切換到圖形界面
通過快捷鍵切換(適用大部分平臺):
Ctrl + Alt + F2 切換到字符界面Ctrl + Alt + F7 切換到圖形界面
「9) 檢測磁盤空間:df」
df命令用于檢測檔案系統的磁盤空間占用和空余情況,可以顯示所有檔案系統對節點和磁盤塊的使用情況,
「10) 檢測目錄所占磁盤空間:du」
du命令用于統計目錄或檔案所占磁盤空間的大小,該命令的執行結果與df類似,du更側重于磁盤的使用狀況,
du命令的使用格式如下:
du [選項] 目錄或檔案名
「11) 格式化:mkfs」
mkfs命令相當于DOS/Windows系統中的格式化命令,用于創建指定的檔案系統,
使用格式如下:
mkfs [選項] 設備檔案名 [blocks]
「12) 應用軟體安裝和卸載」
在 Linux 作業系統下,幾乎所有的軟體均通過RPM 進行安裝、卸載及管理等操作,RPM 的全稱為Redhat Package Manager ,是由Redhat公司提出的,用于管理Linux下軟體包的軟體,它是一種軟體打包發行并且實作自動安裝的程式,需要用rpm程式安裝的軟體包,其后綴是.rpm,并可以對這種程式包進行安裝、卸裝和維護,
rpm命令的使用格式如下:
rpm [選項] [軟體包名]
如果是在ubuntu平臺,軟體的安裝可以通過互聯網在線安裝,更加方便快捷:
「13) 查看或配置網卡資訊:ifconfig」
如果,我們只是敲:ifconfig,它會顯示所有網卡的資訊:
我們可以通過ifconfig配置網路引數:
只有root才能用ifconfig配置引數,其他用戶只能查看網路配置ifconfig 網路介面名稱 [地址協議型別] [address] [引數]地址協議型別如:inet(IPv4),inet6(IPv6)等如:ifconfig eth0 inet 192.168.10.254 netmask 255.255.255.0 up
常用引數:
ifconfig配置的網路引數在記憶體中,計算機重新啟動之后就失效了,如果需要持久有效就需要修改網路介面的組態檔:
redhat修改/etc/sysconfig/network-scripts/ifcfg-eth0檔案
IPADDR=IP地址
GATEWAY=默認網關
ubuntu修改/etc/NetworkManager/system-connections/Wired connection 1檔案
[ipv4]
method=manual
addresses1=IP地址;24;默認網關;
「14) 測驗遠程主機連通性:ping」
ping通過ICMP協議向遠程主機發送ECHO_REQUEST請求,期望主機回復ECHO_REPLY訊息通過ping命令可以檢查是否與遠程主機建立了TCP/IP連接
使用方法:ping [引數] 遠程主機IP地址
「15) 網路路由設定:route」
route可以增加,修改,顯示路由資訊,使用格式如下:
route [-v] [-A family] add default [gw 默認網關地址] [[dev interface]]
示例:route add default gw 192.168.1.1 dev eth0
「16) 監控網路狀態:netstat」
netstat命令監控網路狀態,包括介面設定,IP路由,各種網路協議的統計,netstat輸出資訊說明如下:
netstat常用命令引數:
4 編輯器
4.1 gedit編輯器
gedit是一個Linux環境下的文本編輯器,類似windows下的寫字板程式,在不需要特別復雜的編程環境下,作為基本的文本編輯器比較合適,
4.2 vi編輯器
4.2.1 vi介紹
vi 編輯器是 Linux 系統中最常用的文本編輯器,vi 在Linux界有編輯器之神的美譽,幾乎所有的 Linux 發行版中都包含 vi 程式,
vi 作業在字符模式下,不需要圖形界面,非常適合遠程及嵌入式作業,是效率很高的文本編輯器,盡管在 Linux 上也有很多圖形界面的編輯器可用,但vi的功能是那些圖形編輯器所無法比擬的,
vim 是 vi 的升級版,它不僅兼容 vi 的所有指令,而且還有一些新的特性,例如 vim 可以撤消無限次、支持關鍵詞自動完成、可以用不同的顏色來高亮你的代碼,vim 普遍被推崇為類 vi 編輯器中最好的一個,
vi有輸入和命令兩種作業模式,輸入模式(也叫插入模式)用于輸入字符,命令模式則是用來運行一些編排檔案、存檔以及離開vi等操作命令,當執行vi后,首先進入命令模式,此時輸入的任何字符都被視為命令,
4.2.2 vi最基本操作
「1) 打開檔案」
vi filename:打開或新建檔案,并將游標置于第一行行首,如果檔案不存在,則會新建檔案,
「2) 編輯檔案」
如果通過vi打開一個已經存在的檔案,首先進入命令模式,此時輸入的任何字符都被視為命令,不能輸入內容,
「3) 保存檔案」
一定要先退出插入模式(按Esc進入命令模式),然后,shift + zz (按住 “shift” + 按兩下“z”鍵) 即可保存退出當前檔案,
4.2.3 vi實用命令
「1) vi的插入模式」
「2) vi的退出」
「3) vi的洗掉和修改功能」
「4) vi的行定位功能」
「5) vi的文本查找功能」
「6) vi的替換功能」
「7) vi的set指令」
5 遠程操作
5.1 SSH介紹
SSH為Secure Shell的縮寫,由 IETF 的網路作業小組(Network Working Group)所制定;SSH 為建立在應用層和傳輸層基礎上的安全協議,
SSH是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議,常用于遠程登錄,以及用戶之間進行資料拷貝,
利用SSH協議可以有效防止遠程管理程序中的資訊泄露問題,SSH最初是 UNIX 系統上的一個程式,后來又迅速擴展到其他操作平臺,SSH 在正確使用時可彌補網路中的漏洞,SSH 客戶端適用于多種平臺,幾乎所有 UNIX 平臺—包括 HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平臺,都可運行SSH,
使用SSH服務,需要安裝相應的服務器和客戶端,客戶端和服務器的關系:如果,A機器想被B機器遠程控制,那么,A機器需要安裝SSH服務器,B機器需要安裝SSH客戶端,
5.2 遠程登錄
5.2.1 Linux平臺相互遠程
操作命令:ssh -l username hostip
注意:遠程登錄的兩臺機器必須要能ping通(平通),
首先,查看需要被遠程機器的ip:
遠程登錄(這里是用戶 wencong ( A 機器 ) 遠程登錄 edu ( B 機器 ) ), 可以不用sudo :
SSH 告知用戶,這個主機不能識別,這時鍵入"yes",SSH 就會將相關資訊,寫入" ~/.ssh/know_hosts" 中,再次訪問,就不會有這些資訊了,然后輸入完口令,就可以登錄到主機了,
接著,提示輸入登陸密碼:
登陸成功:
5.2.2 Windows遠程登錄Linux
如果想在 Windows 平臺下遠程登錄 Linux,這時候,Windows 需要安裝 安裝相應軟體包,這里介紹是Xmanager,
Xmanager是一款小巧、便捷的瀏覽遠端X視窗系統的工具,它包含Xshell、Xftp等軟體:
Xshell:是一個Windows平臺下的SSH、TELNET和RLOGIN終端軟體,它使得用戶能輕松和安全地在Windows平臺上訪問Unix/Linux 主機,Xftp:是一個應用于 Windows 平臺的 FTP 和 SFTP 檔案傳輸程式,Xftp能安全地在Unix/Linux 和 Windows 平臺之間傳輸檔案,
配置Xshell,遠程登錄:
Linux默認采用的編碼格式是UTF-8,Windows默認采用的編碼格式是ANSI(GB2312、GBK),所以需要設定一下相應編碼:
5.3 遠程傳輸檔案
5.3.1 Linux平臺相互傳輸
SSH 提供了一些命令和shell用來登錄遠程服務器,在默認情況下,不允許用戶拷貝檔案,但還是提供了一個“scp”命令,
本地檔案復制到遠程:
scp FileName RemoteUserName@RemoteHostIp:RemoteFile
scp FileName RemoteHostIp:RemoteFolder
scp FileName RemoteHostIp:RemoteFile
本地目錄復制到遠程:
scp -r FolderName RemoteUserName@RemoteHostIp:RemoteFolder
scp -r FolderName RemoteHostIp:RemoteFolder
遠程檔案復制到本地:
scp RemoteUserName@RemoteHostIp:RemoteFile FileName
scp RemoteHostIp:RemoteFolder FileName
scp RemoteHostIp:RemoteFile FileName
遠程目錄復制到本地:
scp -r RemoteUserName@RemoteHostIp:RemoteFolder FolderName
scp -r RemoteHostIp:RemoteFolder FolderName
拷貝遠程的檔案:
拷貝遠程的檔案可以任意修改其名字:
拷貝遠程的檔案可以指定存放路徑:
5.3.2 Windows和Linux相互傳輸檔案
6 webserver環境搭建
6.1 webserver環境搭建
http.tar.gz是用C語言編程的一個簡單版webserver,
1)把http.tar.gz拷貝到Linux環境中:
2)解壓壓縮包:
3)進入解壓后的目錄,終端敲make編譯代碼:
4)如果是RedHat環境,需要額外配置一下防火墻:
5)root用戶啟動或關閉web服務:
6)環境測驗
a)必須root用戶先啟動web服務:
b)查看web服務器所在機器的ip:
c)打開能ping通web服務器的瀏覽器:
6.2 網頁版HelloWorld
1)重新打開一個終端,進入web服務器所在目錄:
2)通過vi新建hello.c檔案,內容寫如下代碼:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
3)退出保存hello.c后,通過gcc編譯代碼,可執行程式的后綴名(擴展名)一定是cgi:
gcc是編譯命令,放最開始位置-o引數后面一定是可執行程式名字
4)測驗網頁版helloworld,在瀏覽器輸入:192.168.31.143/hello.cgi
5)顯示中文亂碼解決方法
Linux默認采用的編碼格式是UTF-8,瀏覽器顯示默認采用的編碼格式是GBK,在瀏覽器中直接設定utf-8編碼或者通過代碼指定瀏覽器為utf-8編碼,
a) 直接設定瀏覽器編碼
b) 通過代碼指定瀏覽器為utf-8編碼,代碼中加上頭部元素資訊:
<head>
<meta http - equiv = "content-type" content = "text/html;charset=utf-8">
< / head>
#include <stdio.h>
int main()
{
printf("<head>");
printf("<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">");
printf("</head>");
printf("<html>");
printf("測驗\n");
printf("</html>");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/266262.html
標籤:其他
下一篇:buuctf
