<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    Linux筆記

    linux 專欄收錄該內容
    1 篇文章 1 訂閱

    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種:快照、克隆。
    快照:又稱還原點,就是保存在拍快照時候的系統的狀態(包含了所有的內容),在后期的時候隨時可以恢復?!緜戎卦谟诙唐趥浞?#xff0c;需要頻繁備份的時候可以使用快照,做快照的時候虛擬的操作系統一般處于開啟狀態】
    ①在菜單“虛擬機”-“快照”-“拍攝快照”

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

    ②搞事情

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

    恢復好之后的狀態:

    克隆:就是復制的意思?!緜戎亻L期備份,做克隆的時候是必須得關閉】
    路徑:先關機 – 右鍵需要克隆的虛擬機 – 管理 – 克隆

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

    克隆好的服務器相關密碼帳號等信息與被克隆的系統一致。
    三、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下可能因為沒有這個命令而不習慣清屏?,F在可以通過別名機制來解決這個問題,可以自己創造出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 root@192.168.21.128:/etc E:\tmp

    在CMD中輸入之后輸入密碼

    ②上傳文件到linux
    將“E:\coursedocs\運維學科\北京運維01期\01-基礎班\20180329_Linux自有服務”所有的內容傳輸到linux下root用戶的家目錄
    #pscp -r “E:\coursedocs\運維學科\北京運維01期\01-基礎班\20180329_Linux自有服務” root@192.168.21.128:/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)通??缃雍艽蟮奈锢矸秶?#xff0c;如一個國家。

    除了上述的劃分,網絡還可以按照所有者分為公網、私網是兩種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、條件判斷語句
    老婆給當程序員的老公打電話:下班順路買一斤包子帶回來,如果看到賣西瓜的,買一個。當晚,程序員老公手捧一個包子進了家門…老婆怒道:你怎么就買了一個包子?!老公答曰:因為看到了賣西瓜的。
    把程序員老婆的話當作一段需求分析一下吧。買一斤包子是一個確定無疑的需求項,無論后面是什么情況什么條件,前面這一斤包子是肯定要買的??吹劫u西瓜的是一個條件判斷,后面“買一個”是一個模糊不清的需求項,買一個什么呢?需求里沒說啊??蛻舭堰@個當作開發人員默認了解的內容了??墒亲鳛橐粋€成熟合格的程序員,該老婆的丈夫應該馬上跟進確認需求“買一個什么?”,要不然程序可怎么寫呢?所以笑話里該程序員是不合格的,起碼是不積極不負責的。在沒有明確需求的情況下,他只能按照自己的理解來完成工作了。那比較可能的結果就有如下幾種:
    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 ] 返 回 t r u e 。 注 意 : 條 件 表 達 式 要 放 在 方 括 號 之 間 , 并 且 要 有 空 格 , 例 如 : ? [ 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. 首頁

    • 3
      點贊
    • 0
      評論
    • 11
      收藏
    • 打賞
      打賞
    • 掃一掃,分享海報

    參與評論 您還未登錄,請先 登錄 后發表或查看評論
    ??2022 CSDN 皮膚主題:大白 設計師:CSDN官方博客 返回首頁

    打賞作者

    小饅頭的yy

    你的鼓勵將是我創作的最大動力

    ¥2 ¥4 ¥6 ¥10 ¥20
    輸入1-500的整數
    余額支付 (余額:-- )
    掃碼支付
    掃碼支付:¥2
    獲取中
    掃碼支付

    您的余額不足,請更換掃碼支付或充值

    打賞作者

    實付
    使用余額支付
    點擊重新獲取
    掃碼支付
    錢包余額 0

    抵扣說明:

    1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
    2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

    余額充值
    多乐彩