黑馬Linux筆記

Linux發展史與安裝
一、Linux發展史
1、Linux前身-Unix
1968年 Multics項目
MIT、Bell實驗室、美國通用電氣有限公司走到了一起,致力於開發Multics項目。到後期由於開發進度不是很好,MIT和Bell實驗室相繼離開這個項目的開發,最終導致項目擱淺。

1970年(Unix元年,時間戳) Unix誕生
當時在開發Multics項目的時候,實驗室中有一個開發成員開發了一款遊戲(travel space:遨遊太空),因爲兩個實驗室相繼離開項目開發,導致這名開發人員沒法玩遊戲,後來他提議組織人員重新在Multics項目之上重新的開發,也就出現了1970年的Unix。當時Unix操作系統是使用的彙編語言(機器語言)開發的。

1973年 用C語言重寫Unix
因爲彙編語言有一個最大的侷限性:對於計算機硬件過於依賴。導致移植性不好,所以後期在1973年使用了C語言對其進行重新開發。

1975年 Bell實驗室允許大學使用Unix。

1975年,bell實驗室允許大學使用Unix操作系統用於教學作用,而不允許用於商業用途。
2、Linux誕生
人物 Linus
Linux的開發作者,Linux之父,李納斯·託瓦茲。Linux誕生時是荷蘭在校大學生。
1991年 0.0.1版本
李納斯當時學校使用的就是Unix操作系統,然後其對系統的底層代碼進行了修改,放到了學校爲學生開放的網站上,原先他把文件命名寫成了Linus’s Unix,後期網絡管理髮現之後覺得這個名字不好,自己手動的將名字改成Linux。隨後其他同學下載之後發現這個版本還是挺好用的,隨後都把自己代碼貢獻給李納斯。
1992年 0.0.2版本
1994年 1.0版本
2003年 2.6版本
上述所提及的版本號並不是分支版本,而是指Linux的內核版本。
3、開源文化
Linux是開源的操作系統。所謂開源就是指開放源代碼。
人 物 Stallman 斯特曼,開源文化的倡導人。

1983年 GNU計劃
1985年 FSF基金會
1990年 Emacs、GCC(c語言的編譯器)、程序庫
1991年 Stallman去找Linus,商談讓Linux加入其開源計劃(GNU計劃)
1992年 GNU/Linux

4、Linux系統特點
開放性(開源)、多用戶、多任務、良好的用戶界面、優異的性能與穩定性

多用戶多任務:
單用戶:一個用戶,在登錄計算機(操作系統),只能允許同時登錄一個用戶;
單任務:一個任務,允許用戶同時進行的操作任務數量;
多用戶:多個用戶,在登錄計算機(操作系統),允許同時登錄多個用戶進行操作;
多任務:多個任務,允許用戶同時進行多個操作任務;

Windows屬於:單用戶、多任務。
Linux屬於:多用戶、多任務。

5、Linux分支
分支:Linux分支有很多,現在比較有名的ubuntu、debian、centos(Community Enterprise Operating System)、redhat、suse等等。

二、Linux系統的安裝
1、安裝方式
目前安裝操作系統方式有2種:真機安裝、虛擬機安裝。
真機安裝:使用真實的電腦進行安裝,像安裝windows操作系統一樣,真機安裝的結果就是替換掉當前的windows操作系統;
虛擬機安裝:通過一些特定的手段,來進行模擬安裝,並不會影響當前計算機的真實操作系統;

如果是學習或者測試使用,強烈建議使用虛擬機安裝方式。
2、虛擬機軟件(瞭解)
什麼是虛擬機?
虛擬機,有些時候想模擬出一個真實的電腦環境,礙於使用真機安裝代價太大,因此而誕生的一款可以模擬操作系統運行的軟件。

虛擬機目前有2個比較有名的產品:vmware出品的vmware workstation、oracle 出品的virtual Box。

3、虛擬機的安裝
3.1、VMware Workstation的安裝
①打開安裝程序

②進行下一步開始安裝

③同意許可協議

④根據需要決定是否需要更改軟件的安裝位置

點擊下一步:

⑤用戶體驗設置

⑥快捷方式創建的步驟

⑦點擊安裝按鈕

⑧點擊完成

⑨最重要的地方,在安裝完之後需要檢查,檢查虛擬機軟件是否有安裝2個虛擬網卡

如果沒有這2個網卡的話,則會影響後期windows系統與虛擬機其中操作系統之間的相互通信(比如共享網絡、文件傳輸等)。
3.2、Virtual Box的安裝
①運行安裝程序

②點擊下一步

③選擇性更改安裝的位置

④安裝的選項設置

⑤斷網警告,點擊是即可

⑤點擊安裝按鈕

⑥完成

⑦檢查是否有對應的虛擬網卡存在

兩個軟件安裝完成之後在桌面上都有對應的快捷方式

4、Linux版本的選擇
版本選擇:CentOS 6.5 【鏡像一般都是xxx.iso文件】
問題:爲什麼不選擇最新版的7.x版本?
6.x目前依然是主流
6.x的各種系統操作模式是基礎
7.x實際上也支持大多數6.x的操作形式

官網:https://www.centos.org/
從官網下載得到的鏡像文件

5、新建虛擬機
5.1、使用VMware Workstation(重點)
①點擊“文件”菜單,選擇“新建虛擬機…”選項,選擇“自定義”點擊下一步

②選擇兼容性,默認即可,直接下一步

③選擇鏡像文件的時候選擇“稍後….”,點擊下一步

④選擇需要安裝的操作系統

⑤選擇虛擬機的名稱(名稱將會後期出現在左側)和設置虛擬系統的安裝位置

⑥cpu設置

⑦分配內存

⑧選擇網絡類型,選擇nat即可
NAT:配置好之後windows即可和虛擬機進行互相通信,但是教室內的其他同學是訪問不了的,只能自己可以訪問虛擬機中的操作系統;
橋接:配置好之後其他同學也可以訪問你的虛擬機操作系統;

⑨後續默認的步驟,直接下一步

⑩點擊完成

5.2、使用Virtual Box(瞭解)
①點擊左上角的新建按鈕

②選擇操作系統,由於centos在列表中是沒有的,所以選擇centos對應的主線redhat 32位

③選擇內存大小

④創建磁盤,默認即可

⑤選擇磁盤類型,默認即可

⑥選擇磁盤大小的分配方式,方式爲動態分配即可

⑦設置磁盤的位置和大小確認

6、Linux操作系統安裝
6.1、使用VMware workstation進行安裝
a. 由於之前沒有指定iso鏡像文件,因此此處需要先指定系統鏡像文件

b. 運行此虛擬機

注意:如果開機之後鼠標點進去虛擬機出不來,則可以按下組合快捷鍵“ctrl+alt”。

如果啓動之後出現類似提示框(不是錯誤框)則勾選不再提示,並且確定即可:

如果在啓動時候出現下述錯誤,則說明電腦沒有開啓cpu的 虛擬化,如果需要開啓,則需要重啓計算機,並且在開啓的時候進入主板的BIOS設置開啓虛擬化,然後保存設置重啓電腦:

c. 選擇升級/安裝已經存在的系統(通過↑/↓方向鍵)按下回車

d. 在檢測到光盤(disc)之後選擇跳過完整性檢測直接進行安裝

隨後提示不支持的硬件,忽略直接下一步

e. 點擊下一步

f. 選擇在安裝過程中使用的語言

g. 選擇鍵盤類型,美國式英語

h. 選擇存儲設備類型

i. 對磁盤進行空白盤的初始化操作,選擇“是,忽略所有的數據”

j. 設置網卡自動連接,依次應用 – 關閉 – 下一步

k. 設置時區,默認亞洲/上海

l. 設置密碼,設置好了之後下一步

m. 使用全部的磁盤空間來安裝Linux系統,點擊下一步

n. 選擇安裝的Linux類型

o. 選擇開發 – 開發工具,前面複選框√,點擊下一步

p. 等待軟件包的安裝

等待完成,點擊重新引導

q. 重新引導之後點擊“前進”

r. 在協議許可界面選擇同意,然後點擊前進

s. 創建普通用戶帳號(可選),然後點擊前進

t. 時間設置,設置好之後前進

u. 關於kdump,之後點擊完成

v. 登錄界面

如果需要使用非列出的用戶進行登錄則點擊其他,否則雙擊列出的用戶名即可,隨後輸入密碼。

w. 使用root帳號登錄之後的提示

x. 看到的桌面

6.2、使用virtual Box安裝Linux(瞭解)
a. 選擇需要安裝的系統鏡像

b. 啓動虛擬機

注意:如果鼠標在虛擬機中想退出到windows,則需要按下ctrl+alt組合鍵(空格右側的)

c. 後續全部操作按照上面6.1章節中的步驟繼續安裝即可。
7、終端
問題:在目前的桌面系統中,如果需要關機可以通過“系統”“關機”進行關機,那麼後期服務器都是命令行模式的,屆時這種方式將不好用,那會要怎麼關機呢?

答:可以通過命令行方式進行關機。命令的輸入需要在終端中進行輸入。

所謂終端,其實類似於windows下cmd命令行模式。在終端中可以輸入需要執行的一些指令,同樣可以通過終端進行關機(注意:以後在工作中很少會去使用關機命令,會使用重啓比較多)。

終端的形式:

終端組成部分:

如何使用終端命令進行關機?
在Linux中關機命令 有以下幾個:shutdown -h now(正常關機)、halt(關閉內存)、init 0

8、使用VMware備份操作系統
在vm中備份方式有2種:快照、克隆。
快照:又稱還原點,就是保存在拍快照時候的系統的狀態(包含了所有的內容),在後期的時候隨時可以恢復。【側重在於短期備份,需要頻繁備份的時候可以使用快照,做快照的時候虛擬的操作系統一般處於開啓狀態】
①在菜單“虛擬機”-“快照”-“拍攝快照”

輸入相關信息,點擊拍攝快照

②搞事情

③使用快照恢復搞事情之前的狀態
路徑:虛擬機 – 快照 – 快照管理器

恢復好之後的狀態:

克隆:就是複製的意思。【側重長期備份,做克隆的時候是必須得關閉】
路徑:先關機 – 右鍵需要克隆的虛擬機 – 管理 – 克隆

上述的名稱和位置與之前新建虛擬機的時候是一樣的含義。
等待克隆完成

克隆好的服務器相關密碼帳號等信息與被克隆的系統一致。
三、Linux系統的文件
1、文件與文件夾(目錄)
什麼是文件?
一般都是一個獨立的東西,可以通過一些特定的工具進行打開,並且其中不能在包含除了文字以外的東西。例如:

什麼是文件夾?
可以在其中包含其他文件的東西。

爲什麼先講文件?
1:日常運維工作中,有近一半以上的工作內容 精力 其實都是對文件的操作。
2: Linux 本身也是一個基於文件形式表示的操作系統。
Linux一切皆文件。
①在windows是文件的,在Linux下同樣也是文件;
②在windows不是文件的,在Linux下也是以文件的形式存儲的;

日常學習中和日常工作中,對於文件的操作的都有哪些種類?
創建文件、編輯文件、保存文件、關閉文件、重命名文件、刪除文件、恢復文件。

2、Linux系統的文件目錄結構

目錄結構:
Bin:全稱binary,含義是二進制。該目錄中存儲的都是一些二進制文件,文件都是可以被運行的。
Dev:該目錄中主要存放的是外接設備,例如盤、其他的光盤等。在其中的外接設備是不能直接被使用的,需要掛載(類似windows下的分配盤符)。
Etc:該目錄主要存儲一些配置文件。
Home:表示“家”,表示除了root用戶以外其他用戶的家目錄,類似於windows下的User/用戶目錄。
Proc:process,表示進程,該目錄中存儲的是Linux運行時候的進程。
Root:該目錄是root用戶自己的家目錄。
Sbin:全稱super binary,該目錄也是存儲一些可以被執行的二進制文件,但是必須得有super權限的用戶才能執行。
Tmp:表示“臨時”的,當系統運行時候產生的臨時文件會在這個目錄存着。
Usr:存放的是用戶自己安裝的軟件。類似於windows下的program files。
Var:存放的程序/系統的日誌文件的目錄。
Mnt:當外接設備需要掛載的時候,就需要掛載到mnt目錄下。
Linux的基本指令
一、指令與選項
什麼是Linux的指令?
指在Linux終端(命令行)中輸入的內容就稱之爲指令。

一個完整的指令的標準格式:Linux通用的格式
#指令主體(空格) [選項](空格) [操作對象]
一個指令可以包含多個選項
操作對象也可以是多個

例如:需要讓張三同學幫忙去樓下小賣鋪買一瓶農夫山泉水和清風餐巾紙,在這個指令中“買東西”是指令的主體,買的水和餐巾紙是操作的對象,農夫山泉、清風是操作的選項。
二、基礎指令(重點)
1、ls指令
含義:ls (list)

用法1:#ls
含義:列出當前工作目錄下的所有文件/文件夾的名稱

用法2:#ls 路徑
含義:列出指定路徑下的所有文件/文件夾的名稱
關於路徑(重要):
路徑可以分爲兩種:相對路徑、絕對路徑。
相對路徑:相對首先得有一個參照物(一般就是當前的工作路徑);
相對路徑的寫法:在相對路徑中通常會用到2個符號“./”【表示當前目錄下】、“…/”【上一級目錄下】。
絕對路徑:絕對路徑不需要參照物,直接從根“/”開始尋找對應路徑;

用法3:#ls 選項 路徑
含義:在列出指定路徑下的文件/文件夾的名稱,並以指定的格式進行顯示。
常見的語法:
#ls -l 路徑
#ls -la 路徑
選項解釋:
-l:表示list,表示以詳細列表的形式進行展示
-a:表示顯示所有的文件/文件夾(包含了隱藏文件/文件夾)

上述列表中的第一列字符表示文檔的類型,其中“-”表示改行對應的文檔類型爲文件,“d”表示文檔類型爲文件夾。

在Linux中隱藏文檔一般都是以“.”開頭。

用法4:#ls -lh 路徑
含義:列出指定路徑下的所有文件/文件夾的名稱,以列表的形式並且在顯示文檔大小的時候以可讀性較高的形式顯示
參數含義:

2、pwd指令
用法:#pwd (print working directory,打印當前工作目錄)

3、cd指令
命令:#cd (change directory,改變目錄)
作用:用於切換當前的工作目錄的
語法:#cd 路徑

案例:當前在“/”下,需要使用絕對路徑切換到/usr/local。

案例:當前在/usr/local下,需要使用相對路徑切換目錄到home目錄下的Linux123用戶家目錄中去。

補充:
在Linux中有一個特殊的符號“~”,表示當前用戶的家目錄。
切換的方式:#cd ~

4、mkdir指令
指令:mkdir (make directory,創建目錄)
語法1:#mkdir 路徑 【路徑,可以是文件夾名稱也可以是包含名稱的一個完整路徑】

案例:在當前路徑下創建出目錄“yunweihenniux”

注意:ls列出的結果顏色說明,其中藍色的名稱表示文件夾,黑色的表示文件,綠色的其權限爲擁有所有權限。

案例:在指定路徑下創建出一個文件夾“yunweihenniux”

語法2:#mkdir -p 路徑
含義:當一次性創建多層不存在的目錄的時候,添加-p參數,否則會報錯

語法3:#mkdir 路徑1 路徑2 路徑3 …. 【表示一次性創建多個目錄】

5、touch指令
指令:touch
作用:創建文件
語法:#touch 文件路徑 【路徑可以是直接的文件名也可以是路徑】

案例:使用touch來在當前路徑下創建一個文件,命名爲Linux.txt

案例:使用touch來同時創建多個文件

案例:使用touch來在“Linux123”用戶的家目錄中創建文件,Linux.txt

6、cp指令
指令:cp (copy,複製)
作用:複製文件/文件夾到指定的位置
語法:#cp 被複制的文檔路徑 文檔被複制到的路徑

案例:使用cp命令來複制一個文件

注意:Linux在複製過程中是可以重新對新位置的文件進行重命名的,但是如果不是必須的需要,則建議保持前後名稱一致。

案例:使用cp命令來複制一個文件夾
注意:當使用cp命令進行文件夾複製操作的時候需要添加選項“-r”【-r表示遞歸複製】,否則目錄將被忽略

7、mv指令
指令:mv (move,移動,剪切)
作用:移動文檔到新的位置
語法:#mv 需要移動的文檔路徑 需要保存的位置路徑

確認:移動之後原始的文件還在不在原來的位置?原始文件是不在原始位置的

案例:使用mv命令移動一個文件

案例:使用mv命令移動一個文件夾

補充:在Linux中重命名的命令也是mv,語法和移動語法一樣。

8、rm指令
指令:rm (remove,移除、刪除)
作用:移除/刪除文檔
語法:#rm 選項 需要移除的文檔路徑
選項:
-f:force,強制刪除,不提示是否刪除
-r:表示遞歸

案例:刪除一個文件

在刪除的時候如果不帶選項,會提示是否刪除,如果需要確認則輸入“y/yes”,否則輸入“n/no”按下回車。

注意:如果在刪除的時候不想頻繁的確認,則可以在指令中添加選項“-f”,表示force(強制)。

案例:刪除一個文件夾

注意:刪除一個目錄的時候需要做遞歸刪除,並且一般也不需要進行刪除確認詢問,所以移除目錄的時候一般需要使用-rf選項。

案例:刪除多個文檔

案例:要刪除一個目錄下有公共特性的文檔,例如都以Linux開頭

其中稱之爲通配符,意思表示任意的字符,Linux,則表示只要文件以Linux開頭,後續字符則不管。

9、vim指令
指令:vim (vim是一款文本編輯器)
語法:#vim 文件的路徑
作用:打開一個文件(可以不存在,也可以存在)

案例:使用vim來打開文件

退出打開的文件:在沒有按下其他命令的時候,按下shift+英文冒號,輸入q,按下回車即可

10、輸出重定向
一般命令的輸出都會顯示在終端中,有些時候需要將一些命令的執行結果想要保存到文件中進行後續的分析/統計,則這時候需要使用到的輸出重定向技術。

:覆蓋輸出,會覆蓋掉原先的文件內容

:追加輸出,不會覆蓋原始文件內容,會在原始內容末尾繼續添加

語法:#正常執行的指令 > / >> 文件的路徑
注意:文件可以不存在,不存在則新建

案例:使用覆蓋重定向,保存ls -la 的執行結果,保存到當前目錄下的ls.txt

案例:使用追加重定向,保存ls -la的執行結果到ls.txt中

11、cat指令
作用1:cat有直接打開一個文件的功能。
語法1:#cat 文件的路徑

作用2:cat還可以對文件進行合併
語法2:#cat 待合併的文件路徑1 待合併的文件路徑2 …. 文件路徑n > 合併之後的文件路徑
例如,合併3個文件,並存到一個文件中【配合輸出重定向使用】

三、進階指令(重點)
1、df指令
作用:查看磁盤的空間
語法:#df -h -h表示以可讀性較高的形式展示大小

2、free指令
作用:查看內存使用情況
語法:#free -m -m表示以mb爲單位查看

剩餘的真實可以用的內存爲1665mb。
Swap:用於臨時內存,當系統真實內存不夠用的時候可以臨時使用磁盤空間來充當內存。

3、head指令
作用:查看一個文件的前n行,如果不指定n,則默認顯示前10行。
語法:#head -n 文件路徑 【n表示數字】

4、tail指令
作用1:查看一個文件的未n行,如果n不指定默認顯示後10行
語法:#tail -n 文件的路徑 n同樣表示數字

作用2:可以通過tail指令來查看一個文件的動態變化內容【變化的內容不能是用戶手動增加的】
語法:#tail -f 文件路徑
該命令一般用於查看系統的日誌比較多。

5、less指令
作用:查看文件,以較少的內容進行輸出,按下輔助功能鍵(數字+回車、空格鍵+上下方向鍵)查看更多
語法:#less 需要查看的文件路徑

在退出的只需要按下q鍵即可。
6、wc指令
作用:統計文件內容信息(包含行數、單詞數、字節數)
語法:#wc -lwc 需要統計的文件路徑
-l:表示lines,行數
-w:表示words,單詞數 依照空格來判斷單詞數量
-c:表示bytes,字節數

7、date指令(重點)
作用:表示操作時間日期(讀取、設置)
語法1:#date 輸出的形式:2018年 3月 24日 星期六 15:54:28
語法2:#date +%F (等價於#date “+%Y-%m-%d” ) 輸出形式:2018-03-24
語法3:#date “+%F %T” 引號表示讓“年月日與時分秒”成爲一個不可分割的整體
等價操作#date “+%Y-%m-%d %H:%M:%S”
輸出的形式:2018-03-24 16:01:00

語法4:獲取之前或者之後的某個時間(備份)
#date -d “-1 day” “+%Y-%m-%d %H:%M:%S”

符號的可選值:+(之後) 或者 - (之前)
單位的可選值:day(天)、month(月份)、year(年)
%F:表示完整的年月日
%T:表示完整的時分秒
%Y:表示四位年份
%m:表示兩位月份(帶前導0)
%d:表示日期(帶前導0)
%H:表示小時(帶前導0)
%M:表示分鐘(帶前導0)
%S:表示秒數(帶前導0)
8、cal指令
作用:用來操作日曆的
語法1:#cal 等價於 #cal -1 直接輸出當前月份的日曆
語法2:#cal -3 表示輸出上一個月+本月+下個月的日曆
語法3:#cal -y 年份 表示輸出某一個年份的日曆

9、clear/ctrl + L指令
作用:清除終端中已經存在的命令和結果(信息)。
語法:clear 或者快捷鍵:ctrl + L

需要注意的是,該命令並不是真的清除了之前的信息,而是把之前的信息的隱藏到了最上面,通過滾動條繼續查看以前的信息。
10、管道(重要)
管道符:|
作用:管道一般可以用於“過濾”,“特殊”,“擴展處理”。
語法:管道不能單獨使用,必須需要配合前面所講的一些指令來一起使用,其作用主要是輔助作用。

①過濾案例(100%使用):需要通過管道查詢出根目錄下包含“y”字母的文檔名稱。
#ls / | grep y
針對上面這個命令說明:
①以管道作爲分界線,前面的命令有個輸出,後面需要先輸入,然後再過濾,最後再輸出,通俗的講就是管道前面的輸出就是後面指令的輸入;

②grep指令:主要用於過濾

②特殊用法案例:通過管道的操作方法來實現less的等價效果(瞭解)
之前通過less查看一個文件,可以#less 路徑
現在通過管道還可以這麼:#cat 路徑|less

③擴展處理:請使用學過的命令,來統計某個目錄下的文檔的總個數?
答:#ls / | wc -l

Linux的基本指令(2)
一、高級指令
1、hostname指令
作用:操作服務器的主機名(讀取、設置)
語法1:#hostname 含義:表示輸出完整的主機名
語法2:#hostname -f 含義:表示輸出當前主機名中的FQDN(全限定域名)

2、id指令
作用:查看一個用戶的一些基本信息(包含用戶id,用戶組id,附加組id…),該指令如果不指定用戶則默認當前用戶。
語法1:#id 默認顯示當前執行該命令的用戶的基本信息
語法2:#id 用戶名 顯示指定用戶的基本信息

驗證上述信息是否正確?
驗證用戶信息:通過文件/etc/passwd
驗證用戶組信息:通過文件/etc/group

3、whoami指令
作用:“我是誰?”顯示當前登錄的用戶名,一般用於shell腳本,用於獲取當前操作的用戶名方便記錄日誌。
語法:#whoami

4、ps -ef指令(重點)
指令:ps
作用:主要是查看服務器的進程信息
選項含義:
-e:等價於“-A”,表示列出全部的進程
-f:顯示全部的列(顯示全字段)

執行結果:

列的含義:
UID:該進程執行的用戶id;
PID:進程id;
PPID:該進程的父級進程id,如果一個程序的父級進程找不到,該程序的進程稱之爲殭屍進程(parent process ID);
C:Cpu的佔用率,其形式是百分數;
STIME:進行的啓動時間;
TTY:終端設備,發起該進程的設備識別符號,如果顯示“?”則表示該進程並不是由終端設備發起;
TIME:進程的執行時間;
CMD:該進程的名稱或者對應的路徑;

案例:(100%使用的命令)在ps的結果中過濾出想要查看的進程狀態
#ps -ef|grep “進程名稱”

再例如查看火狐瀏覽器的進程:

5、top指令(重點)
作用:查看服務器的進程佔的資源(100%使用)
語法:
進入命令:#top (動態顯示)
退出命令:按下q鍵

輸出的結果:

表頭含義:
PID:進程id;
USER:該進程對應的用戶;
PR:優先級;
VIRT:虛擬內存;
RES:常駐內存;
SHR:共享內存;
計算一個進程實際使用的內存 = 常駐內存(RES)- 共享內存(SHR)
S:表示進程的狀態status(sleeping,其中S表示睡眠,R表示運行);
%CPU:表示CPU的佔用百分比;
%MEM:表示內存的佔用百分比;
TIME+:執行的時間;
COMMAND:進程的名稱或者路徑;

在運行top的時候,可以按下方便的快捷鍵:
M:表示將結果按照內存(MEM)從高到低進行降序排列;
P:表示將結果按照CPU使用率從高到低進行降序排列;
1:當服務器擁有多個cpu的時候可以使用“1”快捷鍵來切換是否展示顯示各個cpu的詳細信息;
6、du -sh指令
作用:查看目錄的真實大小
語法:#du -sh 目錄路徑
選項含義:
-s:summaries,只顯示彙總的大小
-h:表示以高可讀性的形式進行顯示

案例:統計“/root/yunweihenniux”目錄的實際大小

案例:統計“/etc”目錄實際大小

7、find指令
作用:用於查找文件(其參數有55個之多)
語法:#find 路徑範圍 選項 選項的值
選項:
-name:按照文檔名稱進行搜索(支持模糊搜索)
-type:按照文檔的類型進行搜索
文檔類型:“-”表示文件(在使用find的時候需要用f來替換),“d”表示文件夾

案例:使用find來搜索httpd.conf
#find / -name httpd.conf

案例:搜索etc目錄下所有的conf後綴文件
#find /etc -name *.conf

案例:使用find來搜索/etc/sane.d/目錄下所有的文件
#find /etc/sane.d/ -type f

案例:使用find來搜索/etc/目錄下所有的文件夾
#find /etc -type d

8、service指令(重點)
作用:用於控制一些軟件的服務啓動/停止/重啓
語法:#service 服務名 start/stop/restart

例如:需要啓動本機安裝的Apache(網站服務器軟件),其服務名httpd
#service httpd start

通過ps命令來檢查httpd服務是否啓動:

9、kill指令(重點)
作用:表示殺死進程 (當遇到殭屍進程或者出於某些原因需要關閉進程的時候)
語法:#kill 進程PID (語法需要配合ps一起使用)

案例:需要kill掉Apache的進程

與kill命令作用相似但是比kill更加好用的殺死進程的命令:killall
語法:#killall 進程名稱

10、ifconfig指令(重點)
作用:用於操作網卡相關的指令。
簡單語法:#ifconfig (獲取網卡信息)

Eth0表示Linux中的一個網卡,eth0是其名稱。Lo(loop,本地回還網卡,其ip地址一般都是127.0.0.1)也是一個網卡名稱。

注意:inet addr就是網卡的ip地址。

11、reboot指令
作用:重新啓動計算機
語法1:#reboot 重啓
語法2:#reboot -w 模擬重啓,但是不重啓(只寫關機與開機的日誌信息)

12、shutdown指令
作用:關機 (慎用)
語法1:#shutdown -h now “關機提示” 或者 #shutdown -h 15:25 “關機提示”
案例:設置Linux系統關機時間在12:00

如果想要取消關機計劃的話,則可以按照以下方式去嘗試:
①針對於centos7.x之前的版本:ctrl+c
②針對於centos7.x(包含)之後的版本:#shutdown -c

除了shutdown關機以外,還有以下幾個關機命令:
#init 0
#halt
#poweroff
13、uptime指令
作用:輸出計算機的持續在線時間(計算機從開機到現在運行的時間)
語法:#uptime

14、uname指令
作用:獲取計算機操作系統相關信息
語法1:#uname 獲取操作系統的類型
語法2:#uname -a all,表示獲取全部的系統信息(類型、全部主機名、內核版本、發佈時間、開源計劃)

15、netstat -tnlp指令
作用:查看網絡連接狀態
語法:#netstat -tnlp

選項說明:
-t:表示只列出tcp協議的連接;
-n:表示將地址從字母組合轉化成ip地址,將協議轉化成端口號來顯示;
-l:表示過濾出“state(狀態)”列中其值爲LISTEN(監聽)的連接;
-p:表示顯示發起連接的進程pid和進程名稱;

16、man指令
作用:manual,手冊(包含了Linux中全部命令手冊,英文)
語法:#man 命令 (退出按下q鍵)

案例:通過man命令查詢cp指令的用法
#man cp

二、練習題
1、如何通過命令行重啓linux操作系統? #reboot
2、如何在命令行中快速刪除光標前/後的內容? 前:ctrl + u 後:ctrl + k
3、如何刪除/tmp下所有A開頭的文件? #rm -f /tmp/A*
4、系統重要文件需要備份,如何把/etc/passwd備份到/tmp目錄下?
#cp /etc/passwd /tmp/
5、如何查看系統最後創建的3個用戶?
#tail -3 /etc/passwd
6、什麼命令可以統計當前系統中一共有多少賬戶?
#wc -l /etc/passwd #cat /etc/passwd|wc -l
7、如何創建/tmp/test.conf文件?
#touch /tmp/test.conf
8、如何通過vim編輯打開/tmp/test.conf?
#vim /tmp/test.conf
9、如何查看/etc/passwd的頭3行和尾3行?
#head -3 /etc/passwd
#tail -3 /etc/passwd
10、如何一次性創建目錄/text/1/2/3/4?
#mkdir -p /text/1/2/3/4
11、如何最快的返回到當前賬戶的家目錄?
#cd ~ #cd
12、如何查看/etc所佔的磁盤空間?
#du -sh /etc
13、如何刪除/tmp下所有的文件?
#rm -rf /tmp/*
14、嘗試啓動Apache的服務,並且檢查是否啓動成功。
#service httpd start
#ps -ef|grep httpd
15、使用已學命令殺死Apache的進程。
#killall httpd

編輯器之神——vim編輯器
一、vi介紹
Vi編輯器是所有Unix及Linux系統下標準的編輯器,類似於windows系統下的notepad(記事本)編輯器,由於在Unix及Linux系統的任何版本,Vi編輯器是完全相同的,因此可以在其他任何介紹vi的地方都能進一步瞭解它,Vi也是Linux中最基本的文本編輯器,學會它後,我們將在Linux的世界裏暢行無阻,尤其是在終端中。

關於vim:
vi和vim都是Linux中的編輯器,不同的是,vim比較高級,可以視爲vi的升級版本。vi使用於文本編輯,但是vim更適用於coding(寫代碼的)。

Vim重點是光標的移動,模式切換,刪除,查找,替換,複製,粘貼,撤銷命令的使用。
二、vim三種模式(重點)
Vim中存在三種模式(大衆的認知):命令模式、編輯模式(輸入模式)、末行模式(尾行模式)。

命令模式:在該模式下是不能對文件直接編輯,可以輸入快捷鍵進行一些操作(刪除行,複製行,移動光標,粘貼等等)【打開文件之後默認進入的模式】;
編輯模式:在該模式下可以對文件的內容進行編輯;
末行模式:可以在末行輸入命令來對文件進行操作(搜索、替換、保存、退出、撤銷、高亮等等);

Vim的打開文件的方式(4種,要求掌握的就前三種):
#vim 文件路徑 作用:打開指定的文件
#vim +數字 文件的路徑 作用:打開指定的文件,並且將光標移動到指定行
#vim +/關鍵詞 文件的路徑 作用:打開指定的文件,並且高亮顯示關鍵詞
#vim 文件路徑1 文件路徑2 文件路徑3 作用:同時打開多個文件

重點:先複製出一個/etc/passwd文件,複製當前家目錄下(千萬不要在etc下直接修改!!!)

後續一切vim命令都是基於/root/passwd文件進行操作。

退出方式:輸入:q按下回車即可

三、命令模式
注意:該模式是打開文件的第一個看到的模式(打開文件即可進入)
1、光標移動
①光標移動到行首
按鍵:shift + 6 或 ^(T字母上面的6,不要按小鍵盤的6)

②光標移動到行尾
按鍵:shift + 4 或 $(R字母的左上角的4,不是小鍵盤的4)

③光標移動到首行
按鍵:gg

④光標移動到末行
按鍵:G

⑤翻屏
向上翻屏:按鍵ctrl + b (before) 或 PgUp
向下翻屏:按鍵ctrl + f (after) 或 PgDn
2、複製操作
①複製光標所在行
按鍵:yy
粘貼:在想要粘貼的地方按下p鍵

②以光標所在行爲準(包含當前行),向下複製指定的行數
按鍵:數字yy

③可視化複製
按鍵:ctrl + v(可視塊)或V(可視行)或v(可視),然後按下↑↓←→方向鍵來選中需要複製的區塊,按下y鍵進行復制,最後按下p鍵粘貼
3、剪切/刪除
①剪切/刪除光標所在行
按鍵:dd (刪除之後下一行上移)
注意:dd嚴格意義上說是剪切命令,但是如果剪切了不粘貼就是刪除的效果。

②剪切/刪除光標所在行爲準(包含當前行),向下刪除/剪切指定的行
按鍵:數字dd (刪除之後下一行上移)

③剪切/刪除光標所在的當前行之後的內容,但是刪除之後下一行不上移
按鍵:D (刪除之後當前行會變成空白行)

④可視化刪除
按鍵:ctrl + v(可視塊)或V(可視行)或v(可視),上下左右移動,按下D表示刪除選中行,d表示刪選中塊

4、撤銷/恢復
撤銷:輸入:u (不屬於命令模式) 或者 u (undo)
恢復:ctrl + r 恢復(取消)之前的撤銷操作

5、擴展1:光標的快速移動
①快速將光標移動到指定的行
按鍵:數字G

②以當前光標爲準向上/向下移動n行
按鍵:數字↑,數字↓

③以當前光標爲準向左/向右移動n字符
按鍵:數字←,數字→

④末行模式下的快速移動方式:移動到指定的行
按鍵:輸入英文“:”,其後輸入行數數字,按下回車

四、模式間的切換(重點)

五、末行模式
進入方式:由命令模式進入,按下“:”或者“/(表示查找)”即可進入
退出方式:
a. 按下esc
b. 連按2次esc鍵
c. 刪除末行全部輸入字符

①保存操作(write)
輸入:“:w” 保存文件
輸入:“:w 路徑” 另存爲

②退出(quit)
輸入:“:q” 退出文件

③保存並退出
輸入:“:wq” 保存並且退出

④強制 (!)
輸入:“:q!” 表示強制退出,剛纔做的修改操作不做保存

⑤調用外部命令(瞭解)
輸入:“:!外部命令”
例如:

當外部命令執行結束之後按下任意鍵回到vim編輯器打開的內容

⑥搜索/查找
輸入:“/關鍵詞”
例如:我想在passwd文件中搜索“sbin”關鍵詞

在搜索結果中切換上/下一個結果:N/n (next)
如果需要取消高亮,則需要輸入:“:nohl”【no highlight】

⑦替換
😒/搜索的關鍵詞/新的內容 替換光標所在行的第一處符合條件的內容
😒/搜索的關鍵詞/新的內容/g 替換光標所在行的全部符合條件的內容
:%s/搜索的關鍵詞/新的內容 替換整個文檔中每行第一個符合條件的內容
:%s/搜索的關鍵詞/新的內容/g 替換整個文檔的符合條件的內容

%表示整個文件
g表示全局(global)

⑧顯示行號(臨時)
輸入:“:set nu”[number]
如果想取消顯示,則輸入:“:set nonu”

⑨擴展2:使用vim同時打開多個文件,在末行模式下進行切換文件
查看當前已經打開的文件名稱:“:files”

在%a的位置有2種顯示可能
%a:a=active,表示當前正在打開的文件;
#:表示上一個打開的文件

切換文件的方式:
a. 如果需要指定切換文件的名稱,則可以輸入:“:open 已經打開的文件名”

b. 可以通過其他命令來切換上一個文件/下一個文件
輸入:“:bn”切換到下一個文件(back next)
輸入:“:bp”切換到上一個文件(back prev)

六、編輯模式

重點看前2個進入方式:i(insert)、a(after)。
退出方式:按下esc鍵
七、實用功能
1、代碼着色

案例:首先創建簡單的c語言程序

如何控制着色顯示與否?
顯示:“:syntax on” syn
tax:語法
關閉顯示:“:syntax off”

2、vim中計算器的使用
當在編輯文件的時候突然需要使用計算器去計算一些公式,則此時需要用計算器,但是需要退出,vim自身集成了一個簡易的計算器。

a. 進入編輯模式
b. 按下按鍵“ctrl + R”,然後輸入“=”,此時光標會變到最後一行
c. 輸入需要計算的內容,按下回車

八、擴展(3)
1、vim的配置(重點)
Vim是一款編輯器,編輯器也是有配置文件的。
Vim配置有三種情況:
a. 在文件打開的時候在末行模式下輸入的配置(臨時的)
b. 個人配置文件(~/.vimrc,如果沒有可以自行新建)
c. 全局配置文件(vim自帶,/etc/vimrc)

①新建好個人配置文件之後進入編輯

②在配置文件中進行配置
比如顯示行號:set nu

配置好之後vim打開文件就會永遠顯示行號

問題:如果某個配置項,在個人配置文件與全局配置文件產生衝突的時候應該以誰爲準?
測試步驟:在兩個配置文件中針對同一個配置項設置不同的值

①先在全局的配置中設置不顯示行號,在個人的配置文件中設置顯示行號,觀察結果
最後顯示行號:說明以個人爲準

②先在全局中配置顯示行號,在個人中設置不顯示行號,觀察結果
最後的顯示是不顯示行號,說明以個人爲準

結論:如果針對同一個配置項,個人配置文件中存在,則以個人配置文件爲準,如果個人配置文件中不存在這一項,則以全局配置文件爲準。

2、異常退出
什麼是異常退出:在編輯文件之後並沒有正常的去wq(保存退出),而是遇到突然關閉終端或者斷電的情況,則會顯示下面的效果,這個情況稱之爲異常退出:

解決辦法:將交換文件(在編程過程中產生的臨時文件)刪除掉即可
#rm -f .passwd.swp

3、別名機制(實用)
作用:相當於創建一些屬於自己的自定義命令

例如:在windows下有cls命令,在Linux下可能因爲沒有這個命令而不習慣清屏。現在可以通過別名機制來解決這個問題,可以自己創造出cls命令

別名機制依靠一個別名映射文件:~/.bashrc
#vim ~/.bashrc

注意:如果想新創造的命令生效,必須要重新登錄當前用戶。
4、退出方式
回顧:之前vim中退出編輯的文件可以使用“:q”或者“:wq”。

除了上面的這個語法之外,vim還支持另外一個保存退出方法“:x”。

說明:
①“:x”在文件沒有修改的情況下,表示直接退出,在文件修改的情況下表示保存並退出;
②如果文件沒有被修改,但是使用wq進行退出的話,則文件的修改時間會被更新;但是如果文件沒有被修改,使用x進行退出的話,則文件修改時間不會被更新的;主要是會混淆用戶對文件的修改時間的認定。

因此建議以後使用“:x”來進行對文件的保存退出。
但是:不要使用X,不要使用X,不要使用X,X表示對文件進行加密操作。

九、作業
1、參考作業文件“httpd-vhosts.conf”的描述;
2、使用別名機制,創建出一個快捷命令“kj”,要求實現按下“kj”回車之後能夠實現:
統計出Apache的服務進程數量。

Linux自有服務(1)
自有服務,即不需要用戶獨立去安裝的軟件的服務,而是當系統安裝好之後就可以直接使用的服務(內置)。
一、運行模式
運行模式也可以稱之爲運行級別。

在linux中存在一個進程:init (initialize,初始化),進程id是1。
查看進程:#ps -ef|grep init

該進程存在一個對應的配置文件:inittab(系統運行級別配置文件,位置/etc/inittab)

文件的主要內容:

根據上述的描述,可以得知,Centos6.5中存在7中運行級別/模式。
0 — 表示關機級別(不要將默認的運行級別設置成這個值)
1 — 單用戶模式
2 — 多用戶模式,不帶NFS(Network File Syetem)
3 — 多用戶模式,完全的多用戶模式(不帶桌面的,純命令行模式)
4 — 沒有被使用的模式(被保留模式)
5 — X11,完整的圖形化界面模式
6 — 表示重啓級別(不要將默認的運行級別設置成這個值)

與該級別相關的幾個命令:
#init 0 表示關機
#init 3 表示切換到不帶桌面的模式
#init 5 切換到圖形界面
#init 6 重啓電腦
注意:init指令需要超級管理員的權限,普通用戶無法執行。

這些命令其實都是調用的init進程,將數字(運行級別)傳遞給進程,進程去讀配置文件執行對應的操作。

①切換到純命令行模式下(臨時切換,重啓之後又恢復)
#init 3

切換之後需要輸入用戶名和密碼,在輸入密碼的時候沒有“*”提示輸入,只要自己確認輸入的密碼沒有錯誤,按下回車即可。

②回到桌面模式
#init 5

③設置模式永久爲命令行模式

將/etc/inittab文件中的initdefault值設置成3,然後重啓操作系統。
二、用戶與用戶組管理(重點)
Linux系統是一個多用戶多任務的操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號,然後以這個賬號的身份進入系統。
用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,並控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,併爲用戶提供安全性保護。
每個用戶賬號都擁有一個惟一的用戶名和各自的密碼。
用戶在登錄時鍵入正確的用戶名和密碼後,就能夠進入系統和自己的主目錄。
要想實現用戶賬號的管理,要完成的工作主要有如下幾個方面:

用戶賬號的添加、刪除、修改以及用戶密碼的管理。
用戶組的管理。

注意三個文件:
/etc/passwd 存儲用戶的關鍵信息
/etc/group 存儲用戶組的關鍵信息
/etc/shadow 存儲用戶的密碼信息
1、用戶管理
①添加用戶
常用語法:#useradd 選項 用戶名
常用選項:
-g:表示指定用戶的用戶主組,選項的值可以是用戶組的id,也可以是組名
-G:表示指定用戶的用戶附加組,選項的值可以是用戶組的id,也可以是組名
-u:uid,用戶的id(用戶的標識符),系統默認會從500之後按順序分配uid,如果不想使用系統分配的,可以通過該選項自定義【類似於騰訊QQ的自選靚號情況】
-c comment:添加註釋
案例:創建用戶zhangsan,不帶任何選項

驗證是否成功:
a. 驗證/etc/passwd的最後一行,查看是否有zhangsan的信息;
b. 驗證是否存在家目錄(在Centos下創建好用戶之後隨之產生一個同名家目錄);

擴展:認識passwd文件

用戶名:密碼:用戶ID:用戶組ID:註釋:家目錄:解釋器shell

用戶名:創建新用戶名稱,後期登錄的時候需要輸入;
密碼:此密碼位置一般情況都是“x”,表示密碼的佔位;
用戶ID:用戶的識別符;
用戶組ID:該用戶所屬的主組ID;
註釋:解釋該用戶是做什麼用的;
家目錄:用戶登錄進入系統之後默認的位置;
解釋器shell:等待用戶進入系統之後,用戶輸入指令之後,該解釋器會收集用戶輸入的指令,傳遞給內核處理;

注意:在不添加選項的時候,執行useradd之後會執行一系列的操作
a. 創建同名的家目錄;
b. 創建同名的用戶組;

案例:添加選項,創建用戶lisi,讓lisi屬於501主組,附加組500,自選靚號666。

注意:查看用戶的主組可以查看passwd文件,查看附加組可以查看group文件。

②修改用戶
常用語法:#usermod 選項 用戶名
Usermod:user modify,用戶修改
常用選項:
-g:表示指定用戶的用戶主組,選項的值可以是用戶組的id,也可以是組名
-G:表示指定用戶的用戶附加組,選項的值可以是用戶組的id,也可以是組名
-u:uid,用戶的id(用戶的標識符),系統默認會從500之後按順序分配uid,如果不想使用系統分配的,可以通過該選項自定義【類似於騰訊QQ的自選靚號情況】
-l:修改用戶名

案例:修改zhangsan用戶主組爲500,附加組改爲501
#usermod -g 500 -G 501 zhangsan

案例:修改zhangsan用戶用戶名,改爲wangerma
#usermod -l 新的用戶名 舊的用戶名
#usermod -l wangerma zhangsan

③設置密碼
Linux不允許沒有密碼的用戶登錄到系統,因此前面創建的用戶目前都處於鎖定狀態,需要設置密碼之後才能登錄計算機。

常用語法:#passwd 用戶名
案例:設置wangerma用戶的密碼

在設置密碼的時候也是沒有任何輸入提示的,放心輸入,確保兩次輸入的密碼一致,按下回車即可。

也可以使用弱密碼,但是不建議,否則會看到以下的提示:

設置密碼之後shadow文件中的體現:能夠看出lisi用戶沒有密碼的。

在設置用戶密碼之後可以登錄帳號,例如此處需要登錄wangerma
切換用戶命令:#su [用戶名] (switch user)
如果用戶名不指定則表示切換到root用戶。

切換用戶需要注意的事項:
a. 從root往普通用戶切換不需要密碼,但是反之則需要root密碼;
b. 切換用戶之後前後的工作路徑是不變的;
c. 普通用戶沒有辦法訪問root用戶家目錄,但是反之則可以;

④刪除用戶
常用語法:#userdel 選項 用戶名
Userdel:user delete(用戶刪除)
常用選項:
-r:表示刪除用戶的同時,刪除其家目錄;
案例:刪除wangerma用戶

注意:已經登錄的wangerma用戶刪除的時候提示刪除失敗,但是沒有登錄的lisi用戶可以正常刪除。

解決辦法:簡單粗暴,kill對應用戶的全部進程

提示:所有跟用戶操作的命令(除passwd外)只有root超級管理員有權限執行。
2、用戶組管理
每個用戶都有一個用戶組,系統可以對一個用戶組中的所有用戶進行集中管理。不同Linux 系統對用戶組的規定有所不同,如Linux下的用戶屬於與它同名的用戶組,這個用戶組在創建用戶時同時創建。
用戶組的管理涉及用戶組的添加、刪除和修改。組的增加、刪除和修改實際上就是對/etc/group文件的更新。

文件結構:
用戶組名:密碼:用戶組ID:組內用戶名
密碼:X表示佔位符,雖然用戶組可以設置密碼,但是絕大部分的情況下不設置密碼;
組內用戶名:表示附加組是該組的用戶名稱;

①用戶組添加
常用語法:#groupadd 選項 用戶組名
常用選項:
-g:類似用戶添加里的“-u”,-g表示選擇自己設置一個自定義的用戶組ID數字,如果自己不指定,則默認從500之後遞增;

案例:使用groupadd指令創建一個新的用戶組,命名爲Administrators

②用戶組編輯
常用語法:#groupmod 選項 用戶組名
常用選項:
-g:類似用戶修改裏的“-u”,-g表示選擇自己設置一個自定義的用戶組ID數字
-n:類似於用戶修改“-l”,表示設置新的用戶組的名稱
案例:修改Administrators用戶組,將組ID從502改成520,將名稱改爲admins

③用戶組刪除
常用語法:#groupdel 用戶組名

注意:當如果需要刪除一個組,但是這個組是某個用戶的主組時,則不允許刪除;如果確實需要刪除,則先從組內移出所有用戶。

三、網絡設置
首先知道網卡配置文件位置:/etc/sysconfig/network-scripts

在目錄中網卡的配置文件命名格式:ifcfg-網卡名稱

ONBOOT:是否開機啓動
BOOTPROTO:ip地址分配方式,DHCP表示動態主機分配協議
HWADDR:硬件地址,MAC地址

如果後續需要重啓網卡怎麼去操作呢?
#service network restart

在有的分支版本中可能沒有service命令來快速操作服務,但是有一個共性的目錄:/etc/init.d
這個目錄中放着很對服務的快捷方式。
此處重啓網卡命令還可以使用:
#/etc/init.d/network restart

擴展1:如果修改網卡的配置文件,但是配置文件的目錄層次很深,此時可以在淺的目錄中創建一個快捷方式(軟連接),方便以後去查找
#ln -s 原始文件的路徑 快捷方式的路徑

通過ls -l可以列出如下的效果:

其中,文件類型位置的“l”表示其類型爲link(連接類型),後面的“->”指向的是原始文件路徑。

擴展2:如何去重啓單個網卡?
停止某個網卡:#ifdown 網卡名
開啓某個網卡:#ifup 網卡名
例如:需要停止-啓動(重啓)eth0網卡,則可以輸入
#ifdown eth0
#ifup eth0

提示:在實際工作的時候不要隨意禁網卡。
四、ssh服務(重點)
ssh(secure shell,安全外殼協議),該協議有2個常用的作用:遠程連接協議、遠程文件傳輸協議。

協議使用端口號:默認是22
可以是被修改的,如果需要修改,則需要修改ssh服務的配置文件:
#/etc/ssh/ssh_config

端口號可以修改,但是得注意2個事項:
a. 注意範圍,端口範圍是從0-65535;
b. 不能使用別的服務已經佔用的端口;

服務啓動/停止/重啓
#service sshd start/stop/restart
#/etc/init.d/sshd start/stop/restart

1、遠程終端
終端工具主要幫助運維人員連接遠程的服務器,常見終端工具有:Xshell、secureCRT、Putty等。以putty爲例:

①獲取服務器ip地址,可以通過ifconfig命令進行查看,然後順手測試ip的連接相通性

②打開putty,輸入相關的信息

③在彈出key確認的時候點擊“是”,以後不會再提示

④輸入登錄信息

2、SSH服務文件傳輸
可視化的界面傳輸工具:Filezilla
安裝好之後可以查看到桌面圖標:

①選擇“文件”- “站點管理器(Ctrl + S)”

②點擊“文件”菜單下方的“▽”選擇需要連接的服務器,連接好之後的效果

③從本地windows上傳文件到linux中方式
支持直接拖拽文件,也可以右鍵本地需要上傳的文件,然後點選“上傳”即可

④下載linux文件到本地
支持服務器文件直接拖拽到本地,也可以在右側窗口選擇需要下載的文件,右鍵,點選“下載”。

擴展3:通過命令行工具來傳輸文件/文件夾
工具:PSCP.exe(必須通過cmd命令行打開),爲了使用方便可以將其放到環境變量目錄中
如果不清楚哪些路徑是環境變量路徑,只需要將其放到C:/Windows目錄下即可。

用法:
a. pscp 選項 用戶名@linux主機地址:資源路徑 windows本地的地址 (下載到win)
b. pscp 選項 資源路徑 用戶名@linux主機地址:遠程路徑 (上傳到linux)
c. pscp 選項 -ls 用戶名@linux主機地址 (列出遠程路徑下結構)

①下載到本地windows
要求將遠程linux服務器下的/etc整個目錄下載到本地E:\tmp下
#pscp -r [email protected]:/etc E:\tmp

在CMD中輸入之後輸入密碼

②上傳文件到linux
將“E:\coursedocs\運維學科\北京運維01期\01-基礎班\20180329_Linux自有服務”所有的內容傳輸到linux下root用戶的家目錄
#pscp -r “E:\coursedocs\運維學科\北京運維01期\01-基礎班\20180329_Linux自有服務” [email protected]:/root

五、作業
1、能夠分別使用Filezilla和PSCP工具傳輸給定文件到“/usr/src/data”目錄下,如目錄不存在則自行創建。

Linux自有服務(2)
自有服務,即不需要用戶獨立去安裝的軟件的服務,而是當系統安裝好之後就可以直接使用的服務(內置)。
一、設置主機名
回顧:
#hostname
#hostname -f FQDN(全限定域名)

①臨時設置主機名(立竿見影),需要切換用戶使之生效
#hostname 設置的主機名

②永久設置主機名(需要重啓)
先找到一個文件
/etc/sysconfig/network 【主機名的配置文件】

修改其中的HOSTNAME爲自己需要設置的永久主機名

③修改linux服務器的hosts文件,將yunwei指向本地(設置FQDN)
Hosts文件的位置:/etc/hosts

問題:不設置FQDN會怎麼樣?
①很多開源服務器軟件(例如Apache)則無法啓動,或出現報錯;
②方便記憶,看到主機名對其作用有一個初步判斷;
③如果不設置則會影響本地的域名的解析(本地訪問);
二、chkconfig
作用:相當於windows下“安全衛士”、“電腦管家”之類的安全輔助工具提供“開機啓動項”的一個管理服務。

在linux下不是所有的軟件安裝完成之後都有開機啓動服務,有的可能需要自己去添加。除此之外還可以查看和刪除。

①開機啓動服務查詢
#chkconfig --list

其中0-6表示各個啓動級別
例如:以httpd爲例,其3級別爲關閉(off),則表示其在3啓動形式下默認開機不啓動
5對應的也是關閉,則表示其在桌面環境下也是開機不啓動。

再例如:kdump服務,在2,3,4,5的級別下默認開機啓動的,其他級別下默認開機不啓動

②刪除服務
#chkconfig --del 服務名
例如刪除httpd服務

③添加開機啓動服務
#chkconfig --add 服務名 【必須要保證服務正常運行,纔可以添加】

④設置服務在某個級別下開機啓動/不啓動【重點命令】
#chkconfig --level 連在一起的啓動級別 服務名on/off

案例:設置httpd服務在3,5級別下默認開機啓動

案例:設置httpd服務在5的級別下默認開機不啓動

三、ntp服務
作用:ntp主要是用於對計算機的時間同步管理操作。

時間是對服務器來說是很重要的,一般很多網站都需要讀取服務器時間來記錄相關信息,如果時間不準,則可能造成很大的影響。

例如:當前虛擬機裏的linux時間就是不準確的

同時服務器時間方式有2個:一次性同步(手動同步)、通過服務自動同步。

上游的概念:

①一次性同步時間(簡單)
#ntpdate 時間服務器的域名或ip地址
Ip地址查看可以訪問:http://www.ntp.org.cn/pool.php

②設置時間同步服務
服務名:ntpd
啓動ntpd服務
#service ntpd start 或者 /etc/init.d/ntpd start

設置ntpd服務開機啓動:

chkconfig --list|grep ntpd

chkconfig --level 35 ntpd on

四、防火牆服務
防火牆:防範一些網絡攻擊。有軟件防火牆、硬件防火牆之分。

防火牆選擇讓請求通過,從而保證網絡安全性。

在當前的centos6.5中防火牆有一個名稱:iptables 【7.x中默認使用的是firewalld】

①查看iptables是否開機啓動

②iptables服務啓動/重啓/關閉
#service iptables start/restart/stop
/etc/init.d/iptables start /restart/stop

③查看iptables的狀態(規則)
]# service iptables status

如果iptables沒有啓動,則提示服務沒啓動,如果已經啓動,則顯示防火牆的相關的規則信息

④查看規則的命令
#iptables -L -n
含義:
-L:表示列出規則
-n:表示將單詞表達形式改成數字形式顯示

⑤簡單設置防火牆規則
例如,需要允許80端口通過防火牆,則規則可以用以下的命令來設置
#iptables -I INPUT -p tcp --dport 80 -j ACCEPT #允許訪問80端口
Iptables:主命令
-I:表示將規則放到最前面
-A:add,添加規則(最後)
INPUT:進站請求【出站output】
-p:protocol,指定協議(icmp/tcp/udp)
–dport:指定端口號
-j:指定行爲結果,允許(accept)/禁止(reject)/丟棄(drop)

添加完成之後需要保存操作:
/etc/init.d/iptables save

測試80端口訪問:

五、rpm管理(重點)
作用:rpm的作用類似於windows上的電腦管家中“軟件管理”、安全衛士裏面“軟件管家”等產品,主要作用是對linux服務器上的軟件包進行對應管理操作,管理分爲:查詢、卸載、安裝。

①查詢某個軟件的安裝情況
#rpm -qa|grep 關鍵詞
選項:
-q:查詢,query
-a:全部,all

案例:查詢linux上是否安裝firefox

案例:查詢是否安裝qq

②卸載某個軟件
#rpm -e 軟件的名稱

火狐卸載的時候是沒有依賴關係的,所以可以直接卸載。

但是在卸載Apache的時候提示無法卸載:

當存在依賴關係的時候又不想去解決這個問題的時候可以:
#rpm -e 軟件包名 --nodeps

③軟件的安裝
要想裝軟件,和windows下一樣,先得找到安裝包。
軟件包的獲得方式:
a. 去官網去下載;
b. 不介意老版本的話,可以從光盤(或者鏡像文件)中讀取;
此處以光盤文件爲例:
查看塊狀設備的信息:
#lsblk (list block devices) 查看塊狀設備的信息

Name:名稱
Size:設備大小
Type:類型
MountPoint:掛載點(類似windows下盤符)

擴展:光盤的掛載和解掛
a. 解掛操作
命令:umount
語法:#umount 當前設備的掛載點(路徑)

此時,相當於U盤在windows上已經被彈出了,但是沒有拔下電腦USB接口。

b. 掛載光盤
命令:mount
語法:#mount 設備原始地址 要掛載的位置路徑
設備原始地址:地址統一都在/dev下,然後根據大小確定具體name值,拼湊在一起組成原始地址,例如當前:“/dev/sr0”
要掛載的位置路徑:掛載目錄一般都在mnt下,也可以在mnt下建目錄,此處以“/mnt/dvd”爲例

安裝軟件的命令:
#rpm -ivh 軟件包完整名稱
選項:
-i:install,安裝
-v:顯示進度條
-h:表示以“#”形式顯示進度條

六、cron/crontab計劃任務(重點)
作用:操作系統不可能24小時都有人在操作,有些時候想在指定的時間點去執行任務(例如:每天夜裏2點去重新啓動Apache),此時不可能真有人每天夜裏2點去執行命令,此時可以交給計劃任務程序去執行操作。

語法:#crontab 選項
常用選項:
-l:list,列出指定用戶的計劃任務列表
-e:edit,編輯指定用戶的計劃任務列表
-u:user,指定的用戶名,如果不指定,則表示當前用戶
-r:remove,刪除指定用戶的計劃任務列表

①列出

②編輯計劃任務(重點)
計劃任務的規則語法格式,以行爲單位,一行則爲一個計劃:
分 時 日 月 周 需要執行的命令
例如:如果想要每天的0點0分執行reboot指令,則可以寫成
0 0 * * * reboot

取值範圍:
分:0~59
時:0~23
日:1~31
月:1~12
周:0~7,0和7表示星期天

四個符號:
:表示取值範圍中的每一個數字
-:做連續區間表達式的,要想表示1~7,則可以寫成:1-7
/:表示每多少個,例如:想每10分鐘一次,則可以在分的位置寫:
/10
,:表示多個取值,比如想在1點,2點6點執行,則可以在時的位置寫:1,2,6

問題1:每月1、10、22日的4:45重啓network服務
45 4 1,10,22 * * service network restart

問題2:每週六、週日的1:10重啓network服務
10 1 * * 6,0 service network restart

問題3:每天18:00至23:00之間每隔30分鐘重啓network服務
*/30 18-23 * * * service network restart

問題4:每隔兩天的上午8點到11點的第3和第15分鐘執行一次重啓
3,15 8-11 */2 * * reboot

案例:真實測試案例,每1分鐘往root家目錄中的RT.txt中輸入當前的時間信息,爲了看到效果使用追加輸出
計劃任務:*/1 * * * * ls ~>> /root/RT.txt

Crontab權限問題:本身是任何用戶都可以創建自己的計劃任務。

但是超級管理員可以通過配置來設置某些用戶不允許設置計劃任務 :
配置文件位於(黑名單):
/etc/cron.deny 裏面寫用戶名,一行一個

還有一個配置文件:(白名單)
/etc/cron.allow (本身不存在,自己創建)

注意:白名單優先級高於黑名單,如果一個用戶同時存在兩個名單文件中,則會被默認允許創建計劃任務。

Linux的權限管理操作
Linux的權限操作與用戶、用戶組是兄弟操作。
一、權限概述
總述:Linux系統一般將文件可存/取訪問的身份分爲3個類別:owner、group、others,且3種身份各有read、write、execute等權限。
1、權限介紹
什麼是權限?
在多用戶(可以不同時)計算機系統的管理中,權限是指某個特定的用戶具有特定的系統資源使用權力,像是文件夾、特定系統指令的使用或存儲量的限制。

在Linux中分別有讀、寫、執行權限:
讀權限:
對於文件夾來說,讀權限影響用戶是否能夠列出目錄結構
對於文件來說,讀權限影響用戶是否可以查看文件內容

寫權限:
對文件夾來說,寫權限影響用戶是否可以在文件夾下“創建/刪除/複製到/移動到”文檔
對於文件來說,寫權限影響用戶是否可以編輯文件內容

執行權限:
一般都是對於文件來說,特別腳本文件。
2、身份介紹
Owner身份(文件所有者,默認爲文檔的創建者)
由於Linux是多用戶、多任務的操作系統,因此可能常常有多人同時在某臺主機上工作,但每個人均可在主機上設置文件的權限,讓其成爲個人的“私密文件”,即個人所有者。因爲設置了適當的文件權限,除本人(文件所有者)之外的用戶無法查看文件內容。

例如某個MM給你發了一封Email情書,你將情書轉爲文件之後存檔在自己的主文件夾中。爲了不讓別人看到情書的內容,你就能利用所有者的身份去設置文件的適當權限,這樣,即使你的情敵想偷看你的情書內容也是做不到的。
Group身份(與文件所有者同組的用戶)
與文件所有者同組最有用的功能就體現在多個團隊在同一臺主機上開發資源的時候。例如主機上有A、B兩個團體,A中有a1,a2,a3三個成員,B中有b1,b2兩個成員,這兩個團體要共同完成一份報告F。由於設置了適當的權限,A、B團體中的成員都能互相修改對方的數據,但是團體C的成員則不能修改F的內容,甚至連查看的權限都沒有。同時,團體的成員也能設置自己的私密文件,讓團隊的其它成員也讀取不了文件數據。在Linux中,每個賬戶支持多個用戶組。如用戶a1、b1即可屬於A用戶組,也能屬於B用戶組【主組和附加組】。
Others身份(其他人,相對於所有者)
這個是個相對概念。打個比方,大明、二明、小明一家三兄弟住在一間房,房產證上的登記者是大明(owner所有者),那麼,大明一家就是一個用戶組,這個組有大明、二明、小明三個成員;另外有個人叫張三,和他們三沒有關係,那麼這個張三就是其他人了。
同時,大明、二明、小明有各自的房間,三者雖然能自由進出各自的房間,但是小明不能讓大明看到自己的情書、日記等,這就是文件所有者(用戶)的意義。
Root用戶(超級用戶)
在Linux中,還有一個神一樣存在的用戶,這就是root用戶,因爲在所有用戶中它擁有最大的權限 ,所以管理着普通用戶。

3、Linux的權限介紹
要設置權限,就需要知道文件的一些基本屬性和權限的分配規則。在Linux中,ls命令常用來查看文件的屬性,用於顯示文件的文件名和相關屬性。
#ls -l 路徑 【ls -l 等價於 ll】

標紅的部分就是Linux的文檔權限屬性信息。

Linux中存在用戶、用戶組和其他人概念,各自有不同的權限,對於一個文檔來說,其權限具體分配如下:

十位字符表示含義:
第1位:表示文檔類型,取值常見的有“d表示文件夾”、“-表示文件”、“l表示軟連接”、“s表示套接字”等等;
第2-4位:表示文檔所有者的權限情況,第2位表示讀權限的情況,取值有r、-;第3位表示寫權限的情況,w表示可寫,-表示不可寫,第4位表示執行權限的情況,取值有x、-。
第5-7位:表示與所有者同在一個組的用戶的權限情況,第5位表示讀權限的情況,取值有r、-;第6位表示寫權限的情況,w表示可寫,-表示不可寫,第7位表示執行權限的情況,取值有x、-。
第8-10位:表示除了上面的前2部分的用戶之外的其他用戶的權限情況,第8位表示讀權限的情況,取值有r、-;第9位表示寫權限的情況,w表示可寫,-表示不可寫,第10位表示執行權限的情況,取值有x、-。

權限分配中,均是rwx的三個參數組合,且位置順序不會變化。沒有對應權限就用 – 代替。

例如:以下一個文檔權限是怎麼樣的?

a. 其是文件夾類型
b. 所有者:擁有全部權限(讀寫執行)
c. 同組用戶:可讀、可執行
d. 其他用戶:可讀、可執行
二、權限設置
語法:#chmod 選項 權限模式 文檔
注意事項:
常用選項:
-R:遞歸設置權限 (當文檔類型爲文件夾的時候)
權限模式:就是該文檔需要設置的權限信息
文檔:可以是文件,也可以是文件夾,可以是相對路徑也可以是絕對路徑。
注意點:如果想要給文檔設置權限,操作者要麼是root用戶,要麼就是文檔的所有者。
1、字母形式

給誰設置:
u:表示所有者身份owner(user)
g:表示給所有者同組用戶設置(group)
o:表示others,給其他用戶設置權限
a:表示all,給所有人(包含ugo部分)設置權限
如果在設置權限的時候不指定給誰設置,則默認給所有用戶設置

權限字符:
r:讀
w:寫
x:表示執行
-:表示沒有權限

權限分配方式:
+:表示給具體的用戶新增權限(相對當前)
-:表示刪除用戶的權限(相對當前)
=:表示將權限設置成具體的值(注重結果)【賦值】

例如:需要給anaconda-ks.cfg文件(-rw-------.)設置權限,要求所有者擁有全部的權限,同組用戶擁有讀和執行權限,其他用戶只讀權限。
答案:
①#chmod u+x,g+rx,o+r anaconda-ks.cfg

②#chmod  u=rwx,g=rx,o=r  anaconda-ks.cfg

提示:當文檔擁有執行權限(任意部分),則其顏色在終端中是綠色。

#chmod ug=rwx 形式,如果有兩部分權限一樣則可以合在一起寫的

例如:如果anaconda-ks.cfg文件什麼權限都沒有,可以使用root用戶設置所有人都有執行權限,則可以寫成
①#chmod +x anaconda-ks.cfg
②#chmod a=x anaconda-ks.cfg
③#chmod a+x anaconda-ks.cfg
2、數字形式
經常會在一些技術性的網頁上看到類似於#chmod 777 a.txt 這樣的一個權限,這種形式稱之爲數字形式權限(777)。

讀:r 4
寫:w 2
執行:x 1
沒有任何權限:0

例如:需要給anaconda-ks.cfg設置權限,權限要求所有者擁有全部權限,同組用戶擁有讀執行權限,其他用戶只讀。
全部權限(u):讀+寫+執行=4+2+1=7
讀和執行(g):讀+執行=4+1=5
讀權限(o):讀=4
由上得知權限爲:754
#chmod 754 anaconda-ks.cfg

面試題:用超級管理員設置文檔的權限命令是#chmod -R 731 aaa,請問這個命令有沒有什麼不合理的地方?
擁有者:7=4+2+1=讀+寫+執行
同組用戶:3=2+1=寫+執行
其他用戶:1=1=執行

注意:在寫權限的時候千萬不要設置類似於上面的這種“奇葩權限”。如果一個權限數字中但凡出現2與3的數字,則該權限有不合理的情況。
3、注意事項
使用root用戶創建一個文件夾(/oo),權限默認,權限如下:

需要在oo目錄下創建文件(oo/xx.txt),需要給777權限:

切換到test用戶(不是文檔所有者,也不是同組用戶,屬於other部分):

問題1:test用戶是否可以打開oo/xx.txt文件?【能打開】
問題2:test用戶是否可以編輯oo/xx.txt文件?【可以】
問題3:test用戶是否可以刪除oo/xx.txt文件?【不可以,同樣還不允許創建文件/文件夾、移動文件、重命名文件】

在Linux中,如果要刪除一個文件,不是看文件有沒有對應的權限,而是看文件所在的目錄是否有寫權限,如果有纔可以刪除。
三、屬主與屬組設置
屬主:所屬的用戶(文件的主人)
屬組:所屬的用戶組

前面的那個root就是屬主
後面的那個root就是屬組

這兩項信息在文檔創建的時候會使用創建者的信息(用戶名、用戶所屬的主組名稱)。

如果有時候去刪除某個用戶,則該用戶對應的文檔的屬主和屬組信息就需要去修改。
1、chown(重點)
作用:更改文檔的所屬用戶
語法:#chown -R username 文檔路徑

案例:將剛纔root用戶創建的oo目錄,所有者更改爲test
#chown test oo/

2、chgrp(瞭解)
作用:更改文檔的所屬用戶組
語法:#chgrp -R groupname 文檔的路徑
案例:將剛纔root用戶創建的oo目錄,所有者更改爲test,並且將所屬用戶組也改爲test
#chgrp test oo/

思考,如何通過一個命令實現既可以更改所屬的用戶,也可以修改所屬的用戶組呢?
答:可以實現的,通過chown命令
語法:#chown -R username:groupname 文檔路徑

案例:要求只使用chown指令,將oo目錄的所屬用戶和用戶組改回成root,並且包含其子目錄

四、擴展(1)

問題:reboot、shutdown、init、halt、user管理,在普通用戶身份上都是操作不了,但是有些特殊的情況下又需要有執行權限。又不可能讓root用戶把自己的密碼告訴普通用戶,這個問題該怎麼解決?

該問題是可以被解決的,可以使用sudo(switch user do)命令來進行權限設置。Sudo可以讓管理員(root)事先定義某些特殊命令誰可以執行。

默認sudo中是沒有除root之外用戶的規則,要想使用則先配置sudo。

Sudo配置文件:/etc/sudoers

a. 配置sudo文件請使用“#visudo”,打開之後其使用方法和vim一致

b. 配置普通用戶的權限

Root表示用戶名,如果是用戶組,則可以寫成“%組名”
ALL:表示允許登錄的主機(地址白名單)
(ALL):表示以誰的身份執行,ALL表示root身份
ALL:表示當前用戶可以執行的命令,多個命令可以使用“,”分割

案例:本身test用戶不能添加用戶,要求使用sudo配置,將其設置爲可以添加用戶,並且可以修改密碼(但是不能修改root用戶密碼)。
注意:在寫sudo規則的時候不建議寫直接形式的命令,而是寫命令的完整路徑。
路徑可以使用which命令來查看
語法:#which 指令名稱

在添加好對應的規則之後就可以切換用戶,切換到普通用戶test,再去執行:

此時要想使用剛纔的規則,則以以下命令進行:
#sudo 需要執行的指令

在輸入sudo指令之後需要輸入當前的用戶密碼進行確認的操作(不是root用戶密碼),輸入之後在接下來5分鐘內再次執行sudo指令不需要密碼。

特別注意:此處按照案例要求,不能讓test用戶修改root密碼,因此規則還需要調整,不然其可以修改root密碼的:

禁止修改root密碼的配置(先允許全部,再拒絕root密碼設置): /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

補充:在普通用戶下怎麼查看自己具有哪些特殊權限呢?
#sudo -l

最後:sudo不是任何Linux分支都有的命令,常見centos與ubuntu都存在sudo命令。

作業:給普通用戶設置一個關機命令執行權限。
Linux的網絡基礎
一、網絡相關概述
1、網絡發展
信息傳遞
遠古時期,人們就通過簡單的語言、壁畫等方式交換信息
千百年來,人們一直在用語言、圖符、鐘鼓、煙火、竹簡、紙書等傳遞信息
古代人的烽火狼煙、飛鴿傳信、驛馬郵遞
現代社會中,交通警的指揮手語、航海中的旗語等
這些信息傳遞的基本方式都是依靠人的視覺與聽覺

電的產生
1831年,法拉第製出了世界上最早的第一臺發電機
1866年,德國人西門子(Siemens)製成世界上第一臺大功率發電機
1837年,美國人塞繆樂·莫樂斯成功地研製出世界上第一臺電磁式電報機
1844年5月24日,莫樂斯在國會大廈聯邦最高法院會議廳進行了“用莫爾斯電碼”發出了人類歷史上的第一份電報,從而實現了長途電報通信

網絡誕生
1957年,前蘇聯發射了第一顆人造衛星,震驚了美國
1958年美國成立了國防部高級研究計劃署(ARPA,Advanced Research Projects Agency),應對冷戰形勢,ARPA是一個管理機構,沒有實驗室和科學家

1969年,ARPANET(阿帕網)開始聯機,因此1969年被稱爲Internet元年

網絡分類(記憶)
局域網(Local Area Network,LAN)是指範圍在幾百米到十幾公里內辦公樓羣或校園內的計算機相互連接所構成的計算機網絡。
城域網(Metropolitan Area Network,MAN)所採用的技術基本上與局域網相類似,只是規模上要大一些。城域網既可以覆蓋相距不遠的幾棟辦公樓,也可以覆蓋一個城。
廣域網(Wide Area Network,WAN)通常跨接很大的物理範圍,如一個國家。

除了上述的劃分,網絡還可以按照所有者分爲公網、私網是兩種Internet的接入方式。公網接入方式:上網的計算機得到的IP地址是Internet上的非保留地址,公網的計算機和Internet上的其他計算機可隨意互相訪問。私網則反之。

2、ip地址(重點記憶)
IP是英文Internet Protocol的縮寫,意思是“網絡之間互連的協議”,也就是爲計算機網絡相互連接進行通信而設計的協議。

IP地址類型分爲:公有地址、私有地址。
公有地址
公有地址(Public address)由Inter NIC(Internet Network Information Center因特網信息中心)負責。這些IP地址分配給註冊並向Inter NIC提出申請的組織機構。通過它直接訪問因特網。

私有地址(重點)
私有地址(Private address)屬於非註冊地址,專門爲組織機構內部使用。以下列出留用的內部私有地址:
A類 10.0.0.0–10.255.255.255
B類 172.16.0.0–172.31.255.255
C類 192.168.0.0–192.168.255.255

IP地址按類型可以分爲三類:
類別 最大網絡數 IP地址範圍 最大主機數 私有IP地址範圍
A 126(2^7-2) 1.0.0.0-127.255.255.255 16777214 10.0.0.0-10.255.255.255
B 16384(2^14) 128.0.0.0-191.255.255.255 65534 172.16.0.0-172.31.255.255
C 2097152(2^21) 192.0.0.0-223.255.255.255 254 192.168.0.0-192.168.255.255

網絡運維相關技能:ip分類、子網劃分、劃分vlan、ACL、綜合佈線、各種Serve的搭建。

127.0.0.1 本機ip

3、網卡

網卡是一個網絡組件,屬於硬件範疇,主要負責計算機之間數據的封裝和解封。

MAC地址:網卡的物理地址,網卡設備的編號,默認情況是全球唯一的(16進制)。

與IP地址的區別:
長度不同。IP地址爲32位,MAC地址爲48位。
分配依據不同。
網絡尋址方式不同。OSI參考模型,ip地址是基於第三層工作(網絡層),mac地址是第二層(數據鏈路層)
4、網線
網線是連接局域網必不可少的。在局域網中常見的網線主要有雙絞線(RJ45接口)、銅軸電纜、光纜三種。

	雙絞線						銅軸電纜				  光纖

5、交換機
交換機(Switch)意爲“開關”,是一種用於電(光)信號轉發的網絡設備,交換機它可以爲接入交換機的任意兩個網絡節點提供獨享的電信號通路。

目前,交換機品牌比較有名的是:華爲、華三(h3c)、思科、銳捷。

6、路由器
路由器(Router)又稱網關設備(Gateway)是用於連接多個邏輯上分開、相對獨立的網絡。

7、拓撲結構圖(擴展)
所謂“拓撲”就是把實體抽象成與其大小、形狀無關的“點”,而把連接實體的線路抽象成“線”,進而以圖的形式來表示這些點與線之間關係的方法,其目的在於研究這些點、線之間的相連關係。表示點和線之間關係的圖被稱爲拓撲結構圖。
常見的幾種拓撲結構圖:

二、網絡相關命令
1、ping
作用:檢測當前主機與目標主機之間的連通性(不是100%準確,有的服務器是禁ping)
語法:#ping 主機地址(ip地址、主機名、域名等)

例如:測試和baidu.com之間的連通性。

該命令可以跨平臺,windows下也可以使用,語法一致。(區別在於Linux下默認一直髮送,windows下默認發送4個數據包)

2、netstat
作用:表示查看網絡的連接信息
語法:#netstat -tnlp (-t:tcp協議,-n:將字母轉化成數字,-l:列出狀態爲監聽,-p:顯示進程相關信息)
#netstat -an (-a:表示全部,-n:將字母轉化爲數字)

TCP/IP協議需要使用這個命令。
3、traceroute
作用:查找當前主機與目標主機之間所有的網關(路由器,會給沿途各個路由器發送icmp數據包,路由器可能會不給響應)。
該命令不是內置命令,需要安裝,但是目前的已經安裝好了(之前選了開發工具)。
語法:#traceroute 主機地址

類似於查看快遞的跟蹤路由:

擴展:在windows下也有類似的命令:tracert 主機地址

在線工具網址:http://tool.chinaz.com

4、arp
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取(MAC)物理地址的協議。

當一個主機發送數據時,首先查看本機MAC地址緩存中有沒有目標主機的MAC地址, 如果有就使用緩存中的結果;如果沒有,ARP協議就會發出一個廣播包,該廣播包要求查詢目標主機IP地址對應的MAC地址,擁有該IP地址的主機會發出迴應,迴應中包括了目標主機的MAC地址,這樣發送方就得到了目標主機的MAC地址。如果目標主機不在本地子網中,則ARP解析到的MAC地址是默認網關的MAC地址。

常用語法:#arp -a 查看本地緩存mac表
#arp -d 主機地址 刪除指定的緩存記錄

該命令在windows下同樣適用。

5、tcpdump(瞭解)
作用:抓包,抓取數據表
常用語法:
#tcpdump 協議 port 端口
#tcpdump 協議 port 端口 host 地址
#tcpdump -i 網卡設備名

查看22端口(ssh)的數據包:

00:09:17.xxxx 監聽數據的時分秒
IP:使用的協議類型
192.168.21.1 數據包的一個方向(來自)

  			數據的流向

192.168.21.136 數據包的另外一個方向(到達)
三、項目上線流程(必須掌握)
1、服務器選配購買
項目上線服務器必須是外網服務器。

一般服務器有2種情況:購買真實服務器、購買雲服務器。

購買真實服務器一次性成本過高,所以現在基本都是選擇雲服務器。

雲服務的廠商:阿里雲、騰訊雲、知道創宇(加速樂)、華爲雲、盛大雲、新浪雲(sae)、亞馬遜雲等等。
以後以阿里云爲例:
官網:http://www.aliyun.com

①打開阿里雲官網,選擇產品中的“雲服務器ECS”

在頁面上點擊“立即購買”:

②選擇具體的配置

安全組需要先在控制面板中創建,創建好之後才能在這裏進行選擇(安全組類似於防火牆,可以設置相關規則):

進入後臺查看信息:

需要重置密碼的話,則可以選擇右側“更多”選擇“重置密碼”,然後重啓服務器,最後可以通過遠程終端連接服務器:

2、域名購買
①在首頁產品中找到域名註冊

域名註冊得先查看是否可以註冊:

選擇需要的域名:

確認購買信息:

購買之後就可以在後臺控制面板中去查看域名情況。
3、域名備案
備案:當申請域名的人要想在國內使用域名,則需要向當地的通信管理局(省級)去申請報備。
備案前提:想要使用境內服務器的話,則必須得備案。

在管理後臺點擊“ICP備案系統”

點擊新增主體備案:

填寫完基本信息之後點擊增加網站:

備案服務號可以在控制檯頂部去獲取:

申請到備案服務號之後填寫繼續:

會讓用戶下載一個圖片:網站真實性覈驗單
下載打印,填寫好上傳到阿里雲備案系統中。

後面等待初審,初審通過之後繼續下一步(初審時間一般1天即可)

拍照

上傳照片

等待管局審覈(到這個步驟基本是已經通過,審覈週期一般是15個工作日)。

等待審覈通過,就會收到工信部發送的短信與郵件通知,郵件中有備案號和備案密碼(備案密碼用於註銷備案)。
4、域名解析

點擊“解析”

解析:將域名綁定到一個服務器地址的操作
DNS:domain name server,用於將域名轉化成ip地址的服務器。

點擊右上角的添加記錄:

選擇記錄:

例如:需要將www.linux123.xyz解析到之前購買的雲主機上,則解析可以設置如下:

解析之後可以通過在線ping命令檢測效果:

5、配置生產環境(最後1天)
6、上傳代碼
此時需要使用上傳工具:pscp,filezilla。

和之前使用的方式一樣。

Shell基礎
一、關於shell
1、什麼是shell
什麼是shell?
Shell(外殼) 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。

什麼是腳本?
腳本簡單地說就是一條條的文字命令,這些文字命令是可以看到的(如可以用記事本打開查看、編輯)。
常見的腳本: JavaScript(JS,前端),VBScript, ASP,JSP,PHP(後端),SQL(數據庫操作語言),Perl,Shell,python,Ruby,JavaFX,Lua等。

爲什麼要學習和使用shell?
Shell屬於內置的腳本
程序開發的效率非常高,依賴於功能強大的命令可以迅速地完成開發任務(批處理)
語法簡單,代碼寫起來比較輕鬆,簡單易學

常見的shell種類?
在linux中有很多類型的shell,不同的shell具備不同的功能,shell還決定了腳本中函數的語法,Linux中默認的shell是/bin/bash(重點),流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特點以及用途。

csh
C shell 使用的是“類C”語法,csh是具有C語言風格的一種shell,其內部命令有52個,較爲龐大。目前使用的並不多,已經被/bin/tcsh所取代。

ksh
Korn shell 的語法與 Bourne shell 相同,同時具備了 C shell 的易用特點。許多安裝腳本都使用 ksh ,ksh有42條內部命令,與bash相比有一定的限制性。

tcsh
tcsh是csh的增強版,與 C shell 完全兼容。

sh
是一個快捷方式,已經被/bin/bash所取代。

nologin
指用戶不能登錄

zsh
目前Linux裏最龐大的一種shell:zsh。它有84個內部命令,使用起來也比較複雜。一般情況下,不會使用該shell。

bash
大多數Linux系統默認使用的shell,bash shell 是 Bourne shell 的一個免費版本,它是最早的 Unix shell,bash還有一個特點,可以通過help命令來查看幫助。包含的功能幾乎可以涵蓋shell所具有的功能,所以一般的shell腳本都會指定它爲執行路徑。
2、shell入門
編寫規範:
代碼規範:
#!/bin/bash [指定告知系統當前這個腳本要使用的shell解釋器]
Shell相關指令

文件命名規範:
文件名.sh .sh是linux下bash shell 的默認後綴

使用流程:
①創建.sh文件 touch/vim
②編寫shell代碼
③執行shell腳本 腳本必須得有執行權限

案例1:創建test.sh,實現第一個shell腳本程序,輸出hello world.
輸出命令:#echo 123
注意:輸出的內容如果包含字母和符號(不包含變量),則需要用引號包括起來。如果是純數字可以包也可以不包。

注意,這裏在運行時一定要寫成 ./test.sh,而不是 test.sh,運行其它二進制的程序也一樣,直接寫 test.sh,Linux 系統會去 PATH(環境變量) 裏尋找有沒有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 裏,你的當前目錄通常不在 PATH 裏,所以寫成 test.sh 是會找不到命令的,要用 ./test.sh 告訴系統說,就在當前目錄找。

案例2:使用root用戶帳號創建並執行test2.sh,實現創建一個shelltest用戶,並在其家目錄中新建文件try.html。

腳本執行的另外一個方式:/bin/bash 腳本的路徑(瞭解)

Shell腳本分爲簡單的寫法(簡單命令的堆積)和複雜寫法(程序的設計)
二、shell進階(重點)
1、變量(重點)
1.1、變量的含義
a. 什麼是量
量就是數據.
b. 什麼是變量
數據可以發生改變就是變量.
在一個腳本週期內,其值可以發生改變的量就是變量.
c. 什麼叫做一個腳本週期
一個腳本週期我們可以簡單的理解爲當前的shell文件

變量是shell中不可或缺的一部分,也是最基礎、最重要的組成部分。

1.2、變量的定義與使用(重點)
變量,先定義後使用。

定義形如:class_name="yunwe "
使用形如:echo $class_name

變量就是由2部分組成,一個是變量名(左邊),另外一部分是變量的值(右邊)
變量名和變量值是什麼關係??
變量名和變量值是使用和被使用關係; 我們的變量名來使用變量值;

在使用變量的時候一定需要在變量名前面添加一個$符號,該要求在其他語言中也存在的(例如php)。

變量名的規範
注意,變量名後面的等號左右不能有空格,這可能和你熟悉的所有編程語言都不一樣。同時,變量名的命名須遵循如下規則:
命名只能使用英文字母,數字和下劃線,首個字符不能以數字開頭。
中間不能有空格,可以使用下劃線“_”。
不能使用標點符號。
不能使用bash裏的關鍵字(可用help命令查看保留關鍵字)。

問題:以下哪個shell變量名是合法的?
A. var B.?var C. user*name D.echo

案例1:使用變量改寫入門腳本中的第1個shell腳本。

關於單雙引號的問題:
雙引號能夠識別變量,雙引號能夠實現轉義(類似於“*”)
單引號是不能識別變量,只會原樣輸出,單引號是不能轉義的

案例2:定義一個變量,輸出當前時間,要求格式爲“年-月-日 時:分:秒”。

注意:反引號(esc鍵下方的那個鍵),當在腳本中需要執行一些指令並且將執行的結果賦給變量的時候需要使用“反引號”。

1.3、只讀變量(瞭解)
語法:readonly 變量名

案例:定義變量a並且其值爲10,隨後設置其爲只讀變量,再去嘗試重新賦值

1.4、接收用戶輸入(重點)
語法:read -p 提示信息 變量名

案例:編寫一個腳本test6.sh,要求執行之後提示用戶輸入文件的名稱(路徑),然後自動爲用戶創建該文件

1.5、刪除變量(瞭解)
語法:unset 變量名

案例:定義變量b=20,再輸出b的值,隨後刪除b,最後再輸出下b

2、條件判斷語句
老婆給當程序員的老公打電話:下班順路買一斤包子帶回來,如果看到賣西瓜的,買一個。當晚,程序員老公手捧一個包子進了家門…老婆怒道:你怎麼就買了一個包子?!老公答曰:因爲看到了賣西瓜的。
把程序員老婆的話當作一段需求分析一下吧。買一斤包子是一個確定無疑的需求項,無論後面是什麼情況什麼條件,前面這一斤包子是肯定要買的。看到賣西瓜的是一個條件判斷,後面“買一個”是一個模糊不清的需求項,買一個什麼呢?需求裏沒說啊。客戶把這個當作開發人員默認了解的內容了。可是作爲一個成熟合格的程序員,該老婆的丈夫應該馬上跟進確認需求“買一個什麼?”,要不然程序可怎麼寫呢?所以笑話裏該程序員是不合格的,起碼是不積極不負責的。在沒有明確需求的情況下,他只能按照自己的理解來完成工作了。那比較可能的結果就有如下幾種:
1 看到賣西瓜的,買一個西瓜
如果 看到賣西瓜的
那麼
買一個西瓜
否則
買一斤包子
2 看到賣西瓜的,買一個包子
如果 看到賣西瓜的
那麼
買一個包子
3 看到賣西瓜的,買一個賣西瓜的
4 看到賣西瓜的,買一個老婆一直想買的東西
5 看到賣西瓜的,隨便買一個東西

上述1和2下面的條件漢字描述稱之爲“僞代碼”,也是屬於條件表達式的語法。

語法1(一個條件):
if condition
then
command1
command2

fi

單行寫法(一般在命令行中執行的時候):if [ condition ]; then command; fi

語法2(兩個條件):
if condition
then
command1
command2

else
command
fi

語法3(多個條件):
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
3、運算符
在shell中,運算符和其他編程腳本語言一樣,常見的有算數運算符、關係運算符、
邏輯運算符、字符串運算符、文件測試運算符等
3.1、算數運算符
下表列出了常用的算術運算符,假定變量 a 爲 10,變量 b 爲 20:
運算符 說明 舉例

  • 加法 expr $a + $b 結果爲 30。
  • 減法 expr $a - $b 結果爲 -10。
  • 乘法 expr $a \* $b 結果爲  200。
    / 除法 expr $b / $a 結果爲 2。
    % 取餘 expr $b % $a 結果爲 0。
    = 賦值 a=$b 將把變量 b 的值賦給 a。
    == 相等。用於比較兩個數字,相同則返回 true(真)。 [ $a == $b ] 返回 false(假)。
    != 不相等。用於比較兩個數字,不相同則返回 true。 [ $a != b]true: [b ] 返回 true。 注意:條件表達式要放在方括號之間,並且要有空格,例如: [a==$b] 是錯誤的,必須寫成 [ $a == $b ]。
    原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。
    expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
    例如,兩個數相加(注意使用的是反引號 而不是單引號 '): #!/bin/bash val=expr 2 + 2`
    echo “兩數之和爲 : $val”

兩點注意:
表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與我們熟悉的大多數編程語言不一樣。
完整的表達式要被 包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊。

3.2、關係運算符
關係運算符只支持數字,不支持字符串,除非字符串的值是數字。
下表列出了常用的關係運算符,假定變量 a 爲 10,變量 b 爲 20:
運算符 說明 舉例
-eq 檢測兩個數是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 檢測兩個數是否相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 檢測左邊的數是否大於右邊的,如果是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左邊的數是否小於右邊的,如果是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左邊的數是否大於等於右邊的,如果是,則返回 true。 [ $a -ge $b ] 返回 false。
-le 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 [ $a -le $b ] 返回 true。
-eq:equal
-ne:not equal
-gt:great than
-lt:less than
-ge:great than or equal
-le:less than or equal

案例:使用a=10,b=20來實現本案例

課堂作業:
寫一個腳本,判斷當前輸入的用戶是否存在。如果存在則提示“用戶存在”否則提示“用戶不存在”。

3.3、邏輯運算符
下表列出了常用的布爾運算符,假定變量 a 爲 10,變量 b 爲 20:
運算符 說明 舉例
! 非運算,表達式爲 true 則返回 false,否則返回 true。 [ ! false ] 返回 true。
-o 或(或者)運算,有一個表達式爲 true 則返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 與(並且)運算,兩個表達式都爲 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

或運算:一個爲真即爲真,全部爲假纔是假
與運算:一個爲假即爲假,全部爲真纔是真

3.4、字符串運算符
下表列出了常用的字符串運算符,假定變量 a 爲 “abc”,變量 b 爲 “efg”:
運算符 說明 舉例
= 檢測兩個字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 檢測兩個字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 檢測字符串長度是否爲0,爲0返回 true。 [ -z $a ] 返回 false。
-n 檢測字符串長度是否爲0,不爲0返回 true。 [ -n $a ] 返回 true。
str 檢測字符串是否爲空,不爲空返回 true。 [ $a ] 返回 true。

案例:將上述的語法驗證下

3.5、文件測試運算符(重點)
文件測試運算符用於檢測 Unix/Linux 文件的各種屬性。
屬性檢測描述如下:
操作符 說明 舉例
-b file 檢測文件是否是塊設備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
-c file 檢測文件是否是字符設備文件,如果是,則返回 true。 [ -c $file ] 返回 false。
-d file 檢測文件是否是目錄,如果是,則返回 true。 [ -d $file ] 返回 false。
-f file 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。 [ -f $file ] 返回 true。
-g file 檢測文件是否設置了 SGID 位,如果是,則返回 true。 [ -g $file ] 返回 false。
-k file 檢測文件是否設置了粘着位(Sticky Bit),如果是,則返回 true。 [ -k $file ] 返回 false。
-p file 檢測文件是否是有名管道,如果是,則返回 true。 [ -p $file ] 返回 false。
-u file 檢測文件是否設置了 SUID 位,如果是,則返回 true。 [ -u $file ] 返回 false。
-r file 檢測文件是否可讀,如果是,則返回 true。 [ -r $file ] 返回 true。
-w file 檢測文件是否可寫,如果是,則返回 true。 [ -w $file ] 返回 true。
-x file 檢測文件是否可執行,如果是,則返回 true。 [ -x $file ] 返回 true。
-s file 檢測文件是否爲空(文件大小是否大於0),不爲空返回 true。 [ -s $file ] 返回 true。
-e file 檢測文件(包括目錄)是否存在,如果是,則返回 true。 [ -e $file ] 返回 true。

案例:測試上述標綠色的效果

注意:權限幾個判斷,如果只有一個部分符合,則認爲是有權限的。

4、shell腳本附帶選項(重點)
問題描述:在linux shell中如何處理tail -10 access.log這樣的命令行選項?
步驟:
調用tail指令
系統把後續選項傳遞給tail
Tail先去打開指定的文件
取出最後10行

問題:自己寫的shell是否也可以像內置命令一樣傳遞一些選項呢?
答:可以的,傳遞方式與上述的描述是一樣的,關鍵是怎麼接收。例如:
傳遞:
#./test.sh a b c
接收:
在腳本中可以用“$1”來表示a,“$2”來表示b,以此類推。

接收可以用“$”加上選項對應的序號即可。

測試:編寫test14.sh,傳遞a,b,c,輸出其值

其實$1、$2是變量。

練習:創建自定義指令“user”,可以直接執行,要求該指令具備以下語法和功能:
a. #user -add 用戶名 【添加用戶】
b. #user -del 用戶名 【刪除用戶及其家目錄】

同時題目中要求是指令,所以可以再去添加個別名:

三、作業
1、嘗試寫一個shell的簡易計算器功能,實現加減乘除。
2、作業:使用-e文件測試運算符,改寫“1.4接收用戶輸入”的案例,在創建文件的時候需要先判斷是否存在,如果存在則提示用戶並且不執行創建操作,如果不存在則創建。
3、嘗試創建一個shell腳本,該腳本要求可以類似於“touch”指令一樣,能夠使用“touch 文件路徑”的形式進行創建文件操作,並且要求創建好的文件權限默認爲755。

MySQL基礎
一、關於數據庫
1、什麼是數據庫

如果一個項目是動態(內容會變化的,網頁後綴.jsp、.php、.shtml等)內容的話,則數據庫是必不可少的一個環節。
2、MySQL簡介
MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,2008年被Sun公司收購,目前屬於 Oracle 旗下產品。MySQL 是最流行的數據庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件。其和php是黃金搭檔(LAMP/LNMP)。
3、常見的其他數據庫軟件
目前市場上還有:Oracle(重量級的數據庫)、MS SQL Server(微軟)、Access(微軟)、PostgreSQL、DB2、Mariadb(MySQL分支,完全兼容MySQL)。

二、MySQL的安裝與初始化
操作之前先確保計算機時間準確。
1、Linux下的軟件安裝方式(初步)
a. 源碼包(建議)
優點
開源,如果有足夠的能力,可以修改源代碼
編譯安裝,更加適合自己的系統,穩定高效
缺點
安裝步驟較多,容易出錯
編譯過程時間較長

案例:使用源碼編譯安裝方式安裝ncurses(一種常用的終端庫)
擴展:解包
常用語法:
#tar -zxvf *.tar.gz (大多數)
#tar -jxvf *.tar.bz2
選項含義:
-z或–gzip或–ungzip:通過gzip指令處理文件;
-x或–extract或–get:從文件中還原文件;
-v:顯示操作過程;
-f或–file:指定一個文件;
-j:支持bzip2解壓文件;
①先將軟件包傳遞到服務器上“/usr/local/src”

②解壓需要安裝的源碼包

tar -zxvf ncurses-6.1.tar.gz

③切換到源碼文件夾,然後執行後續操作
配置(config/configure/bootstrap) → 編譯(make/bootstrapd) → 安裝(make install/bootstrapd install)

配置操作主要是指定軟件的安裝目錄、需要的依賴在什麼地方、指定不需要可選依賴、配置文件的路徑、通用數據存儲位置等等。
指定安裝的路徑:–prefix=路徑
需要依賴的路徑:–with-PACKAGE名=[包所在的路徑]
不需要依賴:–without-PACHAGE名

./configure --prefix=/usr/local/ncurses

make

make install

成功之後查看目錄(可選):

b. 二進制包(rpm)
優點: 包管理系統簡單,只需要幾個命令就可以實現包的安裝,升級,查詢和卸載
缺點: 經過編譯,不再可以看到源代碼

回顧rpm相關指令:
#rpm -qa|grep 關鍵詞
#rpm -e 關鍵詞 [–nodeps]
#rpm -ivh 完整名稱
#rpm -Uvh 完整名稱
#rpm -qf 文件路徑 【查詢指定文件屬於哪個包】

案例:使用二進制包安裝lynx(一款純命令行的瀏覽器)
在光盤中就有這個包

例如查看百度:#lynx --dump www.baidu.com

c. yum等傻瓜式安裝
優點: 安裝簡單,快捷
缺點: 完全喪失了自定義性
注意:如果不更改軟件來源的情況下,是需要聯網才能使用yum的。

常用的yum指令:
#yum list [installed] 列出當前已經裝的和可以裝的軟件(全部)
#yum search 名 搜索指定的關鍵詞的包
#yum [-y] install 包名 安裝指定的包(-y表示允許不再確認)
#yum [-y] update [包名] 更新指定的包,不指定包則更新全部軟件
#yum [-y] remove 包名 卸載指定的包

案例:使用yum指令卸載火狐瀏覽器
#yum remove firefox

案例:使用yum指令安裝火狐瀏覽器
#yum install firefox

2、安裝MySQL(重點)
注:此處安裝以yum安裝爲例
2.1、MySQL安裝
#yum install mysql-server

完成的:

2.2、MySQL初始化
#service mysqld start

查看端口號(默認端口號3306):

mysql_secure_installation

Enter current password for root (enter for none):請輸入當前root用戶的密碼,如果沒有按回車,注意此root並非linux的root用戶。

Set root password?是否設置root密碼?
需要設置的密碼:qhabOfhlluB9

Remove anonymous users?是否移除匿名用戶,選擇移除(Y)

Disallow root login remotely?是否不允許root遠程登錄(默認不允許)

Remove test database and access to it?是否移除測試數據庫(建議先不移除)

Reload privilege tables now?是否重新加載權限表(當我們更改了mysql用戶相關的信息之後建議去重載權限)

2.3、MySQL的啓動控制
語法:service mysqld start/stop/restart

進入mysql的方式:
#mysql -u用戶名 -p

退出MySQL到linux命令行:
mysql > exit
2.4、默認目錄/文件位置(瞭解)
數據庫存儲目錄:/var/lib/mysql
配置文件:/etc/my.cnf

三、MySQL的基本操作(難點)
1、名詞介紹
以Excel文件舉例:
數據庫:可以看作是整個excel文件。
數據表:可以看作是一個excel文件中的工作表。
行(記錄):可以看作是一個工作表中的一行
列(字段):可以看作是一個工作表總的一列
2、庫操作(重點)
以下命令在MySQL終端命令行中執行(大小寫均可):
SHOW DATABASES; 顯示當前MySQL中全部的數據庫
CREATE DATABASE 庫名; 創建數據庫
DROP DATABASE 庫名; 刪除數據庫
USE 庫名; 切換數據庫

Show databases效果

創建數據庫:創建yunwei數據庫

刪除數據庫:刪除yunwei數據庫

切換數據庫:切換到test數據庫

3、表操作
SHOW TABLES; 顯示當前數據庫中所有的表名(必須先use數據庫)
CREATE TABLE 表名稱 在當前數據庫下創建數據表
(
列名稱1 數據類型 [NOT NULL AUTO_INCREMENT],
列名稱2 數據類型,
列名稱3 數據類型,
…,
PRIMARY KEY(主鍵字段名)
);
常見的數據類型:int(整型)、char(定長字符)、varchar(不定長字符)。
主鍵一般就是序號所在的那一列(主鍵不能重複)。
DESC 表名; 描述一個數據表(查看錶結構)
DROP TABLE [IF EXISTS] 表名; 刪除一個數據表

案例:使用上述的語法
查看所有的數據表

創建數據表(去test庫中創建)
要求:表名xg,要求有字段如下:
Id字段,11位整型,不爲空,自增,主鍵
Username字段,varchar類型,20長度
Password字段,char類型,32長度
SQL(standard query language)語句:
Create table xg(
Id int(11) not null auto_increment,
Username varchar(20),
Password char(32),
Primary key(id)
);

查看錶結構:

刪除數據表:

4、記錄/字段操作(重點)
4.1、增加記錄
語法1:INSERT INTO 表名稱 VALUES (值1, 值2,…);
語法2:INSERT INTO 表名稱 (列1, 列2,…) VALUES (值1, 值2,…);

案例:往數據表xg表中新增一個記錄username爲zhangsan,password爲123456(加密結果E10ADC3949BA59ABBE56E057F20F883E)
Sql語句:
insert into xg (username,password) values (‘zhangsan’,’E10ADC3949BA59ABBE56E057F20F883E’)

要求前面的列名與值要一一對應。
4.2、更新記錄
語法:UPDATE 表名稱 SET 列名稱1 = 新值1,列名稱2 = 新值2… WHERE 列名稱 = 某值;
案例:使用更新語句更新id大於等於2的記錄,將其密碼改爲:25F9E794323B453885F5181F1B624D0B
SQL語句:
Update xg set password = ‘25F9E794323B453885F5181F1B624D0B’ where id >= 2;

以後在執行影響行數的sql操作的時候一定需要注意條件是否寫錯或者漏寫。
4.3、查詢記錄
SELECT 列名稱1,列名稱2… FROM 表名稱 WHERE 條件;
SELECT * FROM 表名稱 WHERE 條件;
案例:查詢剛纔新增的記錄
只查詢用戶名和密碼,並且是id=2的:
Select username,password from xg where id = 2;

查詢全部:
Select * from xg;

4.4、刪除記錄
DELETE FROM 表名稱 WHERE 列名稱 = 值;

案例:刪除id爲2的記錄
Delete from xg where id = 2;

5、備份與還原(重點)
5.1、備份(導出)
全量備份(數據+結構):#mysqldump -uroot -p123456 -A > 備份文件路徑
指定庫備份(數據+結構):# mysqldump -uroot -p123456 庫名 > 備份文件路徑
多個庫備份(數據+結構):# mysqldump -uroot -p123456 --databases db1 db2 > 備份文件路徑

案例:備份整個庫

mysqldump -uroot -pqhabOfhlluB9 -A > /root/sql_201804061609.sql

案例:每1分鐘自動備份1次test數據庫

計劃任務編寫:

等待幾分鐘觀察目錄情況:

5.2、還原(導入)
還原部分分(1)mysql命令行source方法 和 (2)系統命令行方法
1.還原全部數據庫:
(1) mysql命令行:mysql> source 備份文件路徑
(2) 系統命令行: #mysql -uroot -p123456 < 備份文件路徑
2.還原單個數據庫(需指定數據庫)
(1) mysql> use 庫名
mysql> source 備份文件路徑
(2) #mysql -uroot -p123456 庫名 < 備份文件路徑
3.還原單個數據庫的多個表(需指定數據庫)
(1) mysql> use 庫名
mysql> source 備份文件路徑
(2) mysql -uroot -p123456 庫名 < 備份文件路徑
4.還原多個數據庫,(一個備份文件裏有多個數據庫的備份,此時不需要指定數據庫)
(1) mysql命令行:mysql> source 備份文件路徑
(2) 系統命令行: mysql -uroot -p123456 < 備份文件路徑

案例1:人爲刪除xg表(模擬數據表丟失),然後通過最後一次備份還原數據表。
先刪除數據表

還原操作:

案例2:需要還原sql文件到test庫(mobile.sql 31萬條數據)

設置Mysql連接字符集:
Mysql> set names utf8; 【三碼一致,服務器端+傳輸過程中+客戶端】

四、擴展
1、mysql的遠程管理工具
分爲兩大類:B/S架構、C/S架構。
B/S:B是指瀏覽器,S是指服務器。例如:百度搜索應用就屬於BS架構軟件。
C/S:C是指客戶端,S是指服務器。例如:QQ、電腦端微信等應用程序都是CS架構。

在BS中,mysql有個典型的管理工具:PMA(phpMyAdmin)

CS中比較典型的軟件:navicat、mysql workbrach

要解決的問題:允許mysql遠程登錄

a. 先進入數據庫選擇mysql數據庫;
b. 執行sql語句:select host,user from user;

c. 將其中的一個記錄的host值改爲“%”,表示可以允許任何地方登錄

d. 刷新權限表或者重啓mysql
刷新權限:mysql> flush privileges;

e. navicat登錄成功

五、作業
1、導入sql文件(mobile.sql)到test數據庫,並使用該數據表進行數據的增刪改查練習。
2、請編寫一個簡單的shell腳本,文件名爲autoBakup.sh,並寫出計劃任務指令,能夠實現每天0點整自動備份整個MySQL數據庫。

Yum項目上線實戰 (網站運維)
一、編譯安裝與卸載Nginx
Nginx:是一款比較流行的web服務器軟件,類似於Apache。

1、安裝nginx
①下載nginx
下載地址:https://nginx.org/en/download.html
使用在服務器端下載的方式進行下載(此處不使用filezilla):
#wget 地址
例如當前需要下載nginx到“/usr/local/src”
#wget https://nginx.org/download/nginx-1.13.11.tar.gz

②解壓nginx安裝包

tar -zxvf nginx-1.13.11.tar.gz

③進入nginx解壓目錄
開始進行配置、編譯、安裝操作

在配置時候報錯:沒有PCRE庫

直接yum安裝pcre-devel:
#yum install pcre-devel

報錯缺少zlib庫:

直接使用yum安裝zlib庫:
#yum install zlib-devel

還需要自己去下載一個zlib的源碼包,然後解壓出來:

最終的nginx配置命令:
#./configure --prefix=/usr/local/nginx --with-pcre --with-zlib=/usr/local/src/zlib-1.2.11

開始安裝:
#make

最後安裝:
#make install

安裝好的目錄:

④運行nginx
先停止Apache,然後再運行nginx

#/usr/local/nginx/sbin/nginx 【啓動命令】
#/usr/local/nginx/sbin/nginx -s reload 【重載,重載配置文件】

啓動效果:

⑤瞭解:卸載編譯安裝的軟件
#rm -rf 軟件的安裝目錄
注意:卸載一個編譯安裝的軟件的時候必須先停止。

二、關於LAMP
LAMP:Linux + Apache + MySQL + PHP LAMP架構(組合)
LNMP:Linux + Nginx + MySQL + php-fpm LNMP架構(組合)
LNMPA:Linux + Nginx + MySQL + PHP + Apache Nginx代理方式

三、LAMP環境部署
首先登錄控制檯獲取需要連接的主機ip地址:

後續可以進行遠程登錄。

在整個LAMP中需要自己安裝的也就只有Apache + PHP + Mysql。後續以yum爲例。
1、PHP與Apache的安裝
#yum install php 【在安裝好php的同時會一起順帶安裝Apache】

啓動Apache:#service httpd start

此處會有一個警告,無法確定主機的FQDN,如果需要處理,則需要修改Apache的配置文件(/etc/httpd/conf/httpd.conf)

vim /etc/httpd/conf/httpd.conf

在文件中搜索“ServerName”

將前面的“#”去除,保存退出,重啓apache

測試訪問,在地址欄中輸入ip地址直接訪問(關閉防火牆):

測試php是否可以運行(默認的Apache站點目錄:/var/www/html):
創建一個index.php文件

運行php看到頁面:

2、MySQL的安裝與初始化
#yum install mysql-server

初始化操作:
#service mysqld start 【啓動】

mysql_secure_installation

測試進行命令行登錄:
#mysql -uroot -p

如果需要遠程登錄則需要修改登錄主機:

重啓MYSQL或者刷新權限:
Mysql> flush privileges;

阿里雲上的安全組端口放行:

使用navicat進行登錄:

3、項目上線
解壓項目包,將upload其中的內容上傳到服務器站點目錄(/var/www/html)

①使用filezilla上傳需要的代碼文件

②傳完之後打開網站的首頁,會運行DZ的安裝嚮導
a. 選擇同意協議

b. 賦予指定目錄寫權限

chmod 777 -R /var/www/html

#yum install php-mysqli

重啓Apache:

重啓之後保證所有的配置項都是綠色的勾纔可以下一步。

c. 選擇DZ的安裝方式

d. 填寫數據庫與管理員的信息

e. 安裝完成

f. 首頁

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