1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        52張圖入門Linux!

        共 12338字,需瀏覽 25分鐘

         ·

        2020-11-26 18:29


        本文公眾號(hào)來(lái)源:我是程序員小賤
        作者:暖藍(lán)
        本文已收錄至我的GitHub

        前面文章回顧(強(qiáng)烈建議觀看 對(duì)入門極度友好


        Linux軟件安裝

        Linux排查問(wèn)題套路

        Linux命令詳解

        一 Linux通用知識(shí)

        說(shuō)到操作系統(tǒng),如果讀大學(xué)的時(shí)候是計(jì)算機(jī)專業(yè),那肯定就會(huì)上這門課,我猜測(cè)當(dāng)時(shí)的你們想法是這樣的

        • 上大學(xué)使用的都是Windows系統(tǒng),界面友好,上手快,習(xí)慣性的點(diǎn)點(diǎn)點(diǎn)操作

        • 大部分的課程在windows中操作,比如C++用的Vistual Studio,學(xué)數(shù)據(jù)庫(kù)的SQL Server

        • 大學(xué)中的操作系統(tǒng)更加偏向理論研究,至于到底是怎么運(yùn)作的可能懵懵懂懂

        知道上了研究生到了實(shí)驗(yàn)室,我發(fā)現(xiàn)實(shí)驗(yàn)室的怎么都是對(duì)著一個(gè)窗口操作,瞬間覺(jué)得以前的計(jì)算機(jī)知識(shí)白學(xué)了,于是開(kāi)啟了Linux之路。

        其實(shí)大部分的系統(tǒng),團(tuán)購(gòu),打車,快遞都部署在服務(wù)端,其中都包含Linux,什么云計(jì)算,虛擬化,大數(shù)據(jù)等也是基于Linux,那為啥在大學(xué)里都是windows?


        為什么說(shuō)了解Linux的生態(tài),會(huì)讓你學(xué)到更多的新技術(shù)?

        我們要知道很多的大牛通過(guò)Linux來(lái)開(kāi)發(fā)各種如那件,數(shù)據(jù)庫(kù)Mysql,kafka,Spark等技術(shù)都會(huì)默認(rèn)提供Linux的安裝運(yùn)維手冊(cè),所以盡快的進(jìn)入Linux的世界對(duì)于個(gè)人的進(jìn)步和職業(yè)發(fā)展都是非常有好處的

        每當(dāng)我們買了手機(jī),買了電腦,上手就可以用,這是因?yàn)轭A(yù)裝了操作系統(tǒng)。所以呀,那有什么歲月靜好,知識(shí)有人幫我們負(fù)重前行了,操作系統(tǒng)就是這樣一個(gè)角色。

        那么操作系統(tǒng)幫助我們做了哪些事兒呢?

        • 跑幾個(gè)問(wèn)題,桌面上的圖標(biāo)是什么,為啥子敲一下鍵盤就出來(lái)了畫面

        • 電腦咋個(gè)知道我們鼠標(biāo)點(diǎn)擊的那個(gè)位置

        • 為什么我一回車,這些字符就飛出去了

        這幾個(gè)任何一個(gè)操作,基本上都覆蓋了操作系統(tǒng)的所有功能,那我來(lái)認(rèn)識(shí)熟悉而默認(rèn)的操作系統(tǒng)

        1 vmvare

        虛擬機(jī)是什么?

        虛擬機(jī)通過(guò)軟件來(lái)模擬具有完整硬件系統(tǒng)功能的,運(yùn)行在完全隔離的完整計(jì)算機(jī)系統(tǒng)。每個(gè)虛擬計(jì)算機(jī)可以獨(dú)立運(yùn)行并安裝各種軟件和應(yīng)用

        • 首先從官方下載并解壓虛擬機(jī)安裝包,然后雙擊運(yùn)行

        雙擊VMVARE
        • 下一步

        接受許可進(jìn)行下一步
        • 選擇安裝位置,最好不要出現(xiàn)中文

        自定義路徑
        • 設(shè)置用戶體驗(yàn)選項(xiàng),都可以選擇

        設(shè)置用戶體驗(yàn)
        • 在桌面和開(kāi)始菜單程序文件夾創(chuàng)建快捷方式。

        創(chuàng)建快捷方式
        • 百度一個(gè)許可證ZG1WH-ATY96-H80QP-X7PEX-Y30V4

        輸入許可證密鑰
        • 打開(kāi)vmvare

        打開(kāi)vmvare
        • 點(diǎn)擊新建虛擬機(jī)向?qū)?選擇文件-新建虛擬機(jī)打開(kāi)

        新建虛擬機(jī)
        • 選擇自定義 下一步

        選擇自定義
        • 下一步

        選擇下一步
        • 安裝客戶機(jī)操作系統(tǒng),選擇稍后安裝操作系統(tǒng)

        選擇稍后安裝操作系統(tǒng)
        • 命名虛擬機(jī) 更改虛擬機(jī)名稱并選擇安裝得位置

        命名虛擬機(jī)
        • 更改主機(jī)配置進(jìn)行處理的分配

        處理器核心數(shù)分配
        • 虛擬內(nèi)存分配:注意內(nèi)存分配不能大于主機(jī)內(nèi)存

          虛擬內(nèi)存分配
        • 設(shè)置虛擬機(jī)網(wǎng)絡(luò)得類型,這里選擇NAT

        網(wǎng)絡(luò)類型暫設(shè)為NAT
        • IO控制器選擇,選擇LSILogic

        • 磁盤類型選擇SCSI即可

        • 創(chuàng)建磁盤選擇創(chuàng)建新虛擬磁盤

        創(chuàng)建新虛擬磁盤
        • 指定磁盤文件

        指定磁盤文件
        • 修改路徑

        • 選擇自定義硬件

        選擇自定義硬件
        • 選擇centos得ISO鏡像文件,先選擇CDDVN---ISO鏡像文件---瀏覽找到鏡像、

        導(dǎo)入鏡像
        • 點(diǎn)擊完成

        完成
        • 開(kāi)啟虛擬機(jī) 選擇配置好的虛擬機(jī)

        開(kāi)啟虛擬機(jī)
        • 鼠標(biāo)移動(dòng)到虛擬機(jī)內(nèi)部,上下鍵選擇install centos7然后回車

        install centos7
        • 選擇軟件選擇最小安裝,選擇語(yǔ)言

          選擇最小化安裝
        • 軟件安裝

        軟件安裝
        • 選擇計(jì)算節(jié)點(diǎn)

        選擇計(jì)算節(jié)點(diǎn)
        • 開(kāi)始安裝

        開(kāi)始安裝
        • 設(shè)置root密碼,點(diǎn)擊完成配置

        • 設(shè)置root密碼

        2 進(jìn)行網(wǎng)絡(luò)配置

        現(xiàn)在我們的centos還是個(gè)空殼子,如果我們需要訪問(wèn)外網(wǎng),則需要進(jìn)一步配置一波

        • 打開(kāi)配置文件

        #vi?/etc/sysconfig/network-scripts/ifcfg-eth0
        • 更改相應(yīng)的配置

        DEVICE=eth0?#設(shè)備名稱,可根據(jù)ifcofnig命令查看到。
        BOOTPROTO=dhcp?#連接方式,dhcp會(huì)自動(dòng)分配地址,此時(shí)不需要在下面設(shè)置ip和網(wǎng)關(guān)
        HWADDR=00:0C:29:AD:66:9F #硬件地址,可根據(jù)ifcofnig命令查看到。
        ONBOOT=yes?#yes表示啟動(dòng)就執(zhí)行該配置,需要改為yes
        • service restart network完事 ping www.baidu.com

        網(wǎng)絡(luò)檢測(cè)

        3 安裝xshell

        我們已經(jīng)完成了安裝vmvare并導(dǎo)入了centos,那么我們?nèi)绾稳ネ鎯哼@個(gè)看似很牛皮的玩意?直接上手?不習(xí)慣吧,那我們用個(gè)遠(yuǎn)程工具連連

        Xshell 是一個(gè)強(qiáng)大的安全終端模擬軟件,Xshell 可以在 Windows 界面下用來(lái)訪問(wèn)遠(yuǎn)端不同系統(tǒng)下的服務(wù)器,從而比較好的達(dá)到遠(yuǎn)程控制終端的目的。除此之外,其還有豐富的外觀配色方案以及樣式選擇。

        • 下載xshell(別去下了,賊慢麻煩)

        • 鏈接測(cè)試(因?yàn)槭褂玫膕sh,那么確保centos中22端口已經(jīng)打開(kāi)了)

        • 文件-----屬性進(jìn)行XHSELL相關(guān)的配置,比如配色,字體大小等

        4 基本命令的使用

        命令太多,必須要全部記憶,但是要學(xué)會(huì)如何查每個(gè)命令的參數(shù)。我畫了個(gè)思維導(dǎo)圖可以當(dāng)作小字典查看,下面列出可能我們使用頻率會(huì)更高的命令

        執(zhí)行命令含義
        cd ~切換到登錄用戶的主目錄即/home/用戶名
        cd /進(jìn)入根目錄
        cd /home/lj將/home/LJ作為當(dāng)前的目錄
        cd ..返回到上一層目錄
        cd -回到上次所在的目錄
        cd ../../去上上層目錄
        ls查看當(dāng)前目錄
        ls -la查看當(dāng)前目錄的文件信息 包含了隱藏文件
        pwd查看當(dāng)前目錄的絕對(duì)路徑
        cp /目錄/1.txt /目錄/復(fù)制
        rm刪除
        q!不保存文件退出
        wq!保存退出
        hostname查看當(dāng)前主機(jī)名
        ifconfig查看網(wǎng)卡相關(guān)信息
        firewall-cmd --statecentos7查看卡其關(guān)閉防火墻狀態(tài)

        5 用戶管理

        剛才說(shuō)了可以創(chuàng)建自己的用戶,那么怎么創(chuàng)建自己的用戶呢?

        添加用戶

        useradd?-d?/home/lanj?-m?lanj

        更改密碼

        passwd?lanj

        系統(tǒng)有很多的用戶,怎么進(jìn)行用戶的切換?

        su?-lanj
        su?-root

        如果需要

        用戶之間的切換使用su命令實(shí)現(xiàn)。root用戶可以無(wú)需輸入密碼切換到lj用戶,如果普通用戶lj切換到root用戶則需要輸入密碼,我們看看

        su -lj

        su -root

        如何切換路徑,絕對(duì)路徑和相對(duì)路徑

        6 軟件的安裝方法

        在Linux安裝相關(guān)的工具分為三種方式,分別為源碼安裝,RPM包安裝以及YUM安裝方式

        源碼安裝方式

        開(kāi)源軟件都會(huì)提供源碼下載的方式,對(duì)于源代碼安裝方式的好處即可以定制軟件功能,安裝需要的模塊,不需要的模塊可以屏蔽,方便管理,卸載等。

        對(duì)于源碼安裝的步驟如下

        • 下載解壓源碼

        一般下載下來(lái)源碼以后都會(huì)存在一個(gè)Readme文件,首先應(yīng)該仔細(xì)閱讀這個(gè)文件,可能有很多需要修復(fù)的以前人家遇見(jiàn)的問(wèn)題都會(huì)在上面做記錄,以免入坑不回頭

        • 分析平臺(tái)環(huán)境

        • 編譯安裝軟件

        這里會(huì)使用make工具,make工具就會(huì)通過(guò)makefile文件來(lái)實(shí)現(xiàn)。makefile文件是一種按照某種語(yǔ)法來(lái)編寫且定義了各個(gè)文件的依賴關(guān)系。

        在Linux中,習(xí)慣使用Makefile替代makefile,當(dāng)用戶執(zhí)行configure后,就會(huì)在當(dāng)前目錄生成這個(gè)makefile文件,然后用戶輸入make就開(kāi)始運(yùn)行。我們看看Makefile是怎么個(gè)有樣子

        edit?:?main.o?kbd.o?command.o?display.o?\
        ????????insert.o?search.o?files.o?utils.o???????/*注釋:如果后面這些.o文件比edit可執(zhí)行文件新,那么才會(huì)去執(zhí)行下面這句命令*/
        ????cc?-o?edit?main.o?kbd.o?command.o?display.o?\
        ????????insert.o?search.o?files.o?utils.o

        main.o?:?main.c?defs.h
        ????cc?-c?main.c
        kbd.o?:?kbd.c?defs.h?command.h
        ????cc?-c?kbd.c
        command.o?:?command.c?defs.h?command.h
        ????cc?-c?command.c
        display.o?:?display.c?defs.h?buffer.h
        ????cc?-c?display.c
        insert.o?:?insert.c?defs.h?buffer.h
        ????cc?-c?insert.c
        search.o?:?search.c?defs.h?buffer.h
        ????cc?-c?search.c
        files.o?:?files.c?defs.h?buffer.h?command.h
        ????cc?-c?files.c
        utils.o?:?utils.c?defs.h
        ????cc?-c?utils.c
        clean?:
        ????rm?edit?main.o?kbd.o?command.o?display.o?\
        ????????insert.o?search.o?files.o?utils.o

        make和make install的關(guān)系

        當(dāng)我們輸入make命令過(guò)后即進(jìn)入了編譯階段,編譯時(shí)間根據(jù)軟件的程序規(guī)模大小以及硬件配置有關(guān),當(dāng)輸入make install就會(huì)開(kāi)始安裝軟件,我們可以指定安裝目錄也可以不指定,系統(tǒng)將給你默認(rèn)指定目錄為/user/local,這樣安裝完畢。

        RPM安裝方式

        RPM是Red Hat公司開(kāi)發(fā)出來(lái)的Linux下的軟件包管理工具。這些以.rpm結(jié)尾的包包含了已經(jīng)編譯好的二進(jìn)制可執(zhí)行文件,一句話即將源代碼進(jìn)行編譯,安裝,然后封裝為RPM包

        優(yōu)點(diǎn)即安裝簡(jiǎn)單,方便,因?yàn)橐呀?jīng)編譯完成,安裝只是用來(lái)驗(yàn)證和解壓過(guò)程,缺點(diǎn)也比較明顯,過(guò)于依賴于操作系統(tǒng),要求RPM包的安裝環(huán)境必須和RPM封裝時(shí)的環(huán)境保持一致,

        RPM包是怎么個(gè)樣子?

        server-2.1.0-22.I386.rpm

        其中:server為如那件的名稱

        2.1.0:軟件的版本號(hào)

        22:軟件更新發(fā)行的次數(shù)

        i386:適合硬件發(fā)行的次數(shù)

        .rpm:rpm軟件包的標(biāo)識(shí)

        YUM安裝方式

        • 查看是否存在yum

        rpm?-qa?|?grep?yum
        • 沒(méi)有則安裝

        rpm?-ivh?yum-*.noarch.rpm
        • 自定義yum的配置。我們可以通過(guò)打開(kāi)/etc/yum.repos.d/Centos-Base.repo進(jìn)行源的配置

        YUM有哪些特點(diǎn)呢

        • 安裝方便

        • 可以同時(shí)配置多個(gè)源

        • 配置文件簡(jiǎn)單明了

        推薦個(gè)不錯(cuò)的yum源

        • EPEL

        是一個(gè)針對(duì)紅帽企業(yè)版Linux及衍生發(fā)行版的一個(gè)高質(zhì)量附加軟件包項(xiàng)目。網(wǎng)址:http://fedoraproject.org/wiki/EPEL/zh-cn

        • RPMForge

        這是一個(gè)第三方軟件倉(cāng)庫(kù),被centos社區(qū)認(rèn)為是一個(gè)最安全最穩(wěn)定的一個(gè)軟件倉(cāng)庫(kù)

        6 shell

        大部分情況都是Linux操作系統(tǒng),那么熟悉命令的用法以外,熟悉使用shell腳本能介紹不少時(shí)間

        shell是什么

        “ 平時(shí)經(jīng)常在Linux操作系統(tǒng)中使用各種命令,比如查看當(dāng)前的目錄文件,我們會(huì)使用"ls"或者"ls -l",這些字符串參數(shù)實(shí)際上會(huì)被"某段程序"執(zhí)行并啟動(dòng)它。這個(gè)負(fù)責(zé)將用戶輸入的字符串轉(zhuǎn)換為需要執(zhí)行程序的東西叫做"shell"。即幫用戶更方便使用操作系統(tǒng)接口的“殼”。同樣的殼還有當(dāng)我輸入Maven+相關(guān)參數(shù)的時(shí)候是不是就會(huì)去執(zhí)行相應(yīng)的功能,我們駛?cè)雜ql語(yǔ)句的時(shí)候,數(shù)據(jù)庫(kù)引擎是不是也會(huì)各種調(diào)用,一樣的道理

        嘗試編寫第一個(gè)shell

        vim創(chuàng)建打開(kāi)一個(gè)文件,擴(kuò)展名為.sh。如下所示

        #!/bin/bash?#告訴系統(tǒng)使用什么解析器
        echo?"Hello?xiaolan?!"?#?echo進(jìn)行輸出
        • 執(zhí)行方法1

        ?chmod?+x?./hello.sh?./hello.sh
        • 執(zhí)行方法2

        ?/bin/sh?hello.sh

        變量

        變量名和等號(hào)之間不能有空格

        定義變量注意事項(xiàng)

        • 命名首個(gè)字符不能是數(shù)字,只能使用英文字母、數(shù)字和下劃線

        • 不能使用標(biāo)點(diǎn)符號(hào)

        • 不能使用bash中關(guān)鍵字

        變量使用

        使用變量(使用變量的過(guò)程中,最好加上花括號(hào)),只需要在變量前面加上美元符號(hào)即可

        #!/bin/bash
        James="小皇帝"
        echo?$James

        只讀變量

        使用readonly將變量定義為只讀,只讀意味著不能改變

        #!/bin/bash
        James="小皇帝"
        readonly?James
        James="登哥"

        刪除變量

        使用unset刪除變量 變量刪除以后不能再次使用,且不能刪除只讀變量

        #!/bin/bash
        James="小皇帝"
        unset?James
        echo?$James?#不會(huì)有任何輸出

        變量類型

        • 局部變量

        僅當(dāng)前shell可用

        • 環(huán)境變量

        所有程序都能訪問(wèn)環(huán)境變量

        • shell變量

        通過(guò)一部分環(huán)境變量和shell變量保證shell的正常運(yùn)行

        字符串

        使用字符串的過(guò)程中,既可以用雙引號(hào)也可以用單引號(hào),也可以不用

        • 單引號(hào)

        單引號(hào)內(nèi)容原樣輸出,不能包含變量,且不能出現(xiàn)單獨(dú)單引號(hào)

        • 雙引號(hào)

        可以出現(xiàn)轉(zhuǎn)義字符

        #!/bin/bash
        James="小皇帝"
        str="\"$?James\"!?oh?my?gad?\n?"
        echo?-e?$str?

        獲取字符串長(zhǎng)度

        使用#

        string="qwert"
        echo?$(#string)

        #?提取子字符串
        echo?$(string:1:3)
        #查找字符串
        echo?

        數(shù)組

        支持以為數(shù)組

        定義數(shù)組

        數(shù)組元素使用“空格”隔開(kāi)

        array=(value1,value2,value3)

        讀取數(shù)組

        value1=${array[0]}

        使用@輸出數(shù)組所有元素

        echo?${array[@]}

        獲取數(shù)組中所有元素以及數(shù)組長(zhǎng)度

        #!?/bin/bash
        # author:xiaolan
        array[0]=a
        array[1]=b
        array[3]=c

        echo “數(shù)組的元素為:${array[*]}”
        echo “數(shù)組的元素為:${array[@]}”
        echo “數(shù)組的個(gè)數(shù)為:${#array[*]}”
        echo “數(shù)組的個(gè)數(shù)為:${#array[@]}”

        執(zhí)行

        ./array.sh

        結(jié)果

        result

        注釋

        單行注釋

        使用#開(kāi)頭的行為注釋,會(huì)被解釋器忽略

        多行注釋

        shell傳遞參數(shù)

        在執(zhí)行shell的時(shí)候,命令行指定參數(shù),如下所示

        #!/bin/bash
        James="小皇帝"
        echo?"執(zhí)行的文件名為:$0"
        echo?"第一個(gè)參數(shù)為:$1"
        echo?"第二個(gè)參數(shù)為:$2"

        執(zhí)行

        ./param.sh 1 2

        結(jié)果

        result

        幾個(gè)特殊字符

        result

        案例(partionnal.sh)

        #!/bin/bash
        #?author:xiaolan

        echo?"--?\$*?演示?---"
        for?i?in?"$*";?do
        ????echo?$i
        done

        echo?"--?\$@?演示?---"
        for?i?in?"$@";?do
        ????echo?$i
        done

        執(zhí)行

        ./demo2.sh?1?2?3

        結(jié)果

        img

        相同點(diǎn):都是會(huì)引用所有參數(shù)

        不同點(diǎn):在使用雙引號(hào)的時(shí)候。如果腳本運(yùn)行時(shí)兩個(gè)參數(shù)為a,b,則"*"等價(jià)于"ab",而"@"等價(jià)于"a","b"

        #!/bin/bash
        #?author:xiaolan

        echo?"--?\$*?演示?---"
        for?i?in?"$*";?do
        ????echo?$i
        done

        echo?"--?\$@?演示?---"
        for?i?in?"$@";?do
        ????echo?$i
        done

        8 printf

        使用printf格式化字符串,同時(shí)可以指定字符串寬度和對(duì)齊方式,格式如下

        printf?format-string?[arguments...]

        #!/bin/bash
        #?author:xiaolan

        printf?"%-8s?%-8s?%-4s\n"?姓名?科目?分?jǐn)?shù)??
        printf?"%-8s?%-8s?%-4f\n"?小明?數(shù)學(xué)?97
        printf?"%-8s?%-8s?%-4f\n"?小話?語(yǔ)文?89
        printf?"%-8s?%-8s?%-4f\n"?王三?英語(yǔ)?93

        結(jié)果

        img

        9 test

        shell中的test用于檢查某個(gè)條件是否成立

        result

        案例

        #!/bin/bash
        #?author:xiaolan
        num1=55
        num2=55
        if?test?$[num1]?-eq?$[num2]
        then
        ????echo?'兩個(gè)數(shù)相等!'
        else
        ????echo?'兩個(gè)數(shù)不相等!'
        fi

        結(jié)果

        result

        字符串比較

        字符串比較
        #!/bin/bash
        #?author:xiaolan
        num1="xiaolan"
        num2="xiaolna"
        if?test?$num1?=?$num2
        then
        ????echo?'兩個(gè)字符串相等!'
        else
        ????echo?'兩個(gè)字符串不相等!'
        fi

        結(jié)果

        result

        流程

        if語(yǔ)句語(yǔ)法格式

        if?condition
        then
        ????exec1?
        ????exec2
        ????...
        ????execN?
        fi

        如果簡(jiǎn)化為一行

        if?[$(ps?-ef?|?grep?-c?"httpd")?-gt?1];then?echo?"true";fi

        if else-if else

        if?condition1
        then
        ????exec1
        elif?condition2?
        then?
        ????exec2
        else
        ????execn
        fi

        案例 判斷兩數(shù)值是否相等

        #!/bin/bash
        #?author:xiaolan
        a=2
        b=3
        if?[?$a?==?$b?]
        then
        ???echo?"a?等于?b"
        elif?[?$a?-gt?$b?]
        then
        ???echo?"a?大于?b"
        elif?[?$a?-lt?$b?]
        then
        ???echo?"a?小于?b"
        else
        ???echo?"沒(méi)有符合的條件"
        fi

        for循環(huán)

        for?loop?in?1?2?3?4?5
        do
        ????echo?"The?value?is:?$loop"
        done

        while語(yǔ)句

        “ 通常用于從輸入文件不斷讀取數(shù)據(jù)

        while?condition
        do
        ????exec
        done

        #!/bin/bash
        #?author:xiaolan
        int=1
        while((?$int<=6?))
        do
        ????echo?$int
        ????let?"int++"#?用于執(zhí)行一個(gè)或者多個(gè)
        done

        無(wú)限循環(huán)

        while?true
        do
        ????exec
        done

        case語(yǔ)句

        多選擇語(yǔ)句。取值后面為單詞in,每一個(gè)模式以")"結(jié)束。匹配發(fā)現(xiàn)取值符合某一模式后,其間所有命令開(kāi)始執(zhí)行直至 ";;"。

        #!/bin/bash
        #?author:xiaolan
        echo?'輸入?1?到?3?之間的數(shù)字:'
        echo?'你輸入的數(shù)字為:'
        read?aNum
        case?$aNum?in
        ????1)??echo?'你選擇了?1'
        ????;;
        ????2)??echo?'你選擇了?2'
        ????;;
        ????3)??echo?'你選擇了?3'
        ????;;
        ????*)??echo?'你沒(méi)有輸入?1?到?3?之間的數(shù)字'
        ????;;
        esac

        輸入不同的內(nèi)容,會(huì)有不同的結(jié)果,例如:

        輸入?1?到?4?之間的數(shù)字:
        你輸入的數(shù)字為:
        3
        你選擇了?3

        跳出循環(huán)

        break

        break命令允許跳出所有循環(huán)

        #!/bin/bash
        #?author:xiaolan
        while?:
        do
        ????echo?-n?"輸入?1?到?3?之間的數(shù)字:"
        ????read?aNum
        ????case?$aNum?in
        ????????1|2|3)?echo?"你輸入的數(shù)字為?$aNum!"
        ????????;;
        ????????*)?echo?"你輸入的數(shù)字不是?1?到?3?之間的!?游戲結(jié)束"
        ????????????break
        ????????;;
        ????esac
        done

        continue

        跳出當(dāng)次循環(huán)

        #!/bin/bash
        while?:
        do
        ????echo?-n?"輸入?1?到?3?之間的數(shù)字:?"
        ????read?aNum
        ????case?$aNum?in
        ????????1|2|3|4|5)?echo?"你輸入的數(shù)字為?$aNum!"
        ????????;;
        ????????*)?echo?"你輸入的數(shù)字不是?1?到?3?之間的!"
        ????????????continue
        ????????????echo?"游戲結(jié)束"
        ????????;;
        ????esac
        done

        10 shell函數(shù)

        用戶定義函數(shù),然后在shell腳本中隨便調(diào)用,格式如下

        [?function?]?funname?[()]

        {

        ????action;

        ????[return?int;]

        }

        例子

        #!/bin/bash
        #?author:xiaolan

        Fun1(){
        ????echo?"這是我的第一個(gè)?shell?函數(shù)!"
        }
        echo?"-----函數(shù)開(kāi)始執(zhí)行-----"
        Fun1
        echo?"-----函數(shù)執(zhí)行完畢-----"

        帶return語(yǔ)句

        #!/bin/bash
        #?author:xiaolan

        FunReturn(){
        ????echo?"這個(gè)函數(shù)會(huì)對(duì)輸入的兩個(gè)數(shù)字進(jìn)行相加運(yùn)算..."
        ????echo?"輸入第一個(gè)數(shù)字:?"
        ????read?aNum
        ????echo?"輸入第二個(gè)數(shù)字:?"
        ????read?anotherNum
        ????echo?"兩個(gè)數(shù)字分別為?$aNum?和?$anotherNum?!"
        ????return?$(($aNum+$anotherNum))
        }
        FunReturn
        echo?"輸入的兩個(gè)數(shù)字之和為?$??!"

        函數(shù)參數(shù)

        #!/bin/bash
        #?author:xiaolan

        funParam(){
        ????echo?"第一個(gè)參數(shù)為?$1?!"
        ????echo?"第二個(gè)參數(shù)為?$2?!"
        ????echo?"參數(shù)總數(shù)有?$#?個(gè)!"
        ????echo?"作為一個(gè)字符串輸出所有參數(shù)?$*?!"
        }
        funParam?1?2?3?4

        shell重定向

        輸出重定向

        command1 > file # 如果file中存在內(nèi)容將被清空覆蓋。如果追加使用command1 >>file

        ls?-l?>?dir.txt

        cat dir.txt

        img

        /dev/null文件

        寫入到它的內(nèi)容都會(huì)被丟棄,會(huì)起到"禁止輸出"的效果,如果希望屏蔽stdout和stderr ?“ command > /dev/null 2>&1

        注意:Linux命令行都會(huì)打開(kāi)三個(gè)文件

        • 標(biāo)準(zhǔn)輸入文件:stdin文件描述符為0

        • 標(biāo)準(zhǔn)輸出文件:stdout文件描述符為1

        • 標(biāo)準(zhǔn)錯(cuò)誤文件:stderr文件描述符2

        12 運(yùn)算符

        下表列出了常用的算術(shù)運(yùn)算符,假定變量 a 為 2,變量 b 為 3:

        算術(shù)運(yùn)算符

        算術(shù)運(yùn)算符

        關(guān)系運(yùn)算符

        關(guān)系運(yùn)算符

        布爾運(yùn)算符

        布爾運(yùn)算符

        邏輯運(yùn)算符

        邏輯運(yùn)算符

        字符串運(yùn)算符


        12 shell實(shí)戰(zhàn)

        • 請(qǐng)將當(dāng)前目錄中demo.txt第二行第三列數(shù)據(jù)輸出到demo2.txt中

        ?cat?demo.txt|awk?’NR==2{print?$3}’?>demo2.txt?
        • 日志如下統(tǒng)計(jì)訪問(wèn)ip最多的前10個(gè)

        awk?’{print?$1}’?*.log?|?sort?|?uniq?-c?|?sort?-nr?|?head?-n?

        uniq - 刪除排序文件中的重復(fù)行 sort對(duì)于文本進(jìn)行排序 -l 按照當(dāng)前環(huán)境排序. -m 合并已經(jīng)排序好的文件,不排序. -n 按照字符串的數(shù)值順序比較,暗含-b -r 顛倒比較的結(jié)果.

        • 查看占用內(nèi)存最大的進(jìn)程的PID和VSZ

        ps?-aux|sort?-k5nr|awk?’BEGIN{print?”PID?VSZ”}{print?![2,(https://www.zhihu.com/equation?tex=2%2C)2,5}’|awk?’NR<3′?
        • 如何檢查文件系統(tǒng)中是否存在某個(gè)文件

        if?[-f?/var/log/messages]
        then
        echo?"File?exts"
        fi
        • 每個(gè)腳本開(kāi)始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?

        #!/bin/bash 表示腳本使用 /bin/bash。對(duì)于 python 腳本,就是 #!/usr/bin/python

        • &和&&區(qū)別

        “ “&” 腳本在后臺(tái)運(yùn)行時(shí)使用它?!?&”當(dāng)前一個(gè)腳本成功完成才執(zhí)行后面的命令

        • 腳本文件中,如何將其重定向標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤流到 log.txt 文件 ?

        ./a.sh?>log.txt?2>&1
        • 如何計(jì)算本地用戶的數(shù)目

        wc?-l?/etc/passwd?|?cut?-d
        • shell中進(jìn)行字符串比較和數(shù)字比較

        [?$A?==?$B?]?–?用于字符串比較
        [?$A?-eq?$B?]?–?用于數(shù)字比較
        • 去掉字符串空格

        echo $string | tr -d " "

        • 統(tǒng)計(jì)內(nèi)存使用

        #!?/bin/bash
        #?author:xiaolan
        sum=0
        for?mem?in?`ps?aux?|awk?'{print?$6}'?|grep?-v?'RSS'?`
        do
        ????sum=$[$sum+$mem]
        done
        echo?"The?total?memory?is?$sum""k"

        結(jié)果

        result
        • 批量更改文件名

        批量修改123目錄下txt為txt.temp。將temp打包為test.tar.gz

        #!/bin/bash
        ##查找txt文件
        find?/123?-type?f?-name?"*.txt"?>?/tmp/txt.list
        ##批量修改文件名
        for?f?in?`cat?/tmp/txt.list`
        do
        ????mv?$f?$f.temp
        done
        ##創(chuàng)建一個(gè)目錄,為了避免目錄已經(jīng)存在,所以要加一個(gè)復(fù)雜的后綴名
        d=`date?+%y%m%d%H%M%S`
        mkdir?/tmp/123_$d
        ##把.temp文件拷貝到/tmp/123_$d
        for?f?in?`cat?/tmp/txt.list`
        do
        ????cp?$f.temp?/tmp/123_$d
        done
        ##打包壓縮
        cd?/tmp/
        tar?czf?123.tar.gz?123_$d/

        7 awk文本處理工具

        awk是一個(gè)處理文本文件的應(yīng)用程序,幾乎所有的Linux系統(tǒng)都自帶了這個(gè)程序

        依次處理每一行,并讀取里面的每一個(gè)字段。對(duì)于處理生產(chǎn)環(huán)境的日志有著非常高校的作用

        基本用法

        #?格式
        awk?做什么?文件嗎
        awk?'print?$0'?lan.txt

        上面lan.txt是awk需要處理的文本文件。前面單引號(hào)里面有一個(gè)大括號(hào),單引號(hào)里面就是每一行的處理動(dòng)作。其中print為打印命令,

        上菜

        echo?'my?name?is?lanlan'?|?awk?'{print?$0}'

        上面代碼中,print 0即將標(biāo)準(zhǔn)輸入my name is lanlan ,c重新打印一遍

        awk根據(jù)空格和制表符,將每一行分成若干段,依次為2

        echo?'my?name?is?lanlan'|?awk?'{print?$3}'

        為了方便,我們直接使用/etc/passwd文件進(jìn)行操作,

        awk?-F?':'?'{?print?$1?}'?demo.txt

        3 變量

        上面我們說(shuō)了,可以使用符號(hào) “+” 數(shù)字的方式表示第幾個(gè)字段,其實(shí)還有一些變量可以直接表示相應(yīng)的字段。比如 “$NFb” 表示最后一個(gè)字段

        echo?'my?name?is?lanlan'|?awk?'{print?$NF}'
        awk?-F?':'?'{print?NR?")?"?$1}'?demo.txtshe

        這里出現(xiàn)了雙引號(hào),表示原樣輸出

        其他常用的內(nèi)置變量

        • FILENAME:當(dāng)前文件名

        • FS:字段分隔符,默認(rèn)是空格和制表符。

        • RS:行分隔符,用于分割每一行,默認(rèn)是換行符。

        • OFS:輸出字段的分隔符,用于打印時(shí)分隔字段,默認(rèn)為空格。

        • ORS:輸出記錄的分隔符,用于打印時(shí)分隔記錄,默認(rèn)為換行符。

        • OFMT:數(shù)字輸出的格式,默認(rèn)為%.6g。

        4 函數(shù)

        既然算是一門語(yǔ)言,函數(shù)當(dāng)然少不了,下面看一波常用的函數(shù)

        函數(shù)toupper()用于將字符轉(zhuǎn)為大寫

        awk?-F?':'?'{?print?toupper($1)?}'?demo.txt

        可以發(fā)現(xiàn)第一個(gè)字段輸出的時(shí)候變成了大寫

        • tolower():字符轉(zhuǎn)為小寫。

        • length():返回字符串長(zhǎng)度。

        • substr():返回子字符串。

        • sin():正弦。

        • cos():余弦。

        • sqrt():平方根。

        • rand():隨機(jī)數(shù)。

        5 條件**

        通過(guò)使用相應(yīng)的條件,過(guò)濾出自己想要的內(nèi)容

        awk?'條件?動(dòng)作'?文件名

        上菜

        $?awk?-F?':'?'/usr/?{print?$1}'?demo.txt
        root
        daemon
        bin
        sys

        這里/usr/表示只輸出包含usr的行

        這個(gè)例子輸出奇數(shù)行

        #?輸出奇數(shù)行
        $?awk?-F?':'?'NR?%?2?==?1?{print?$1}'?demo.txt
        root
        bin
        sync

        #
        ?輸出第三行以后的行
        $?awk?-F?':'?'NR?>3?{print?$1}'?demo.txt
        sys
        sync

        下面的例子輸出第一個(gè)字段等于指定值的行。

        $?awk?-F?':'?'$1?==?"root"?{print?$1}'?demo.txt
        root

        $
        ?awk?-F?':'?'$1?==?"root"?||?$1?==?"bin"?{print?$1}'?demo.txt
        root
        bin

        5 if語(yǔ)句

        通過(guò)if語(yǔ)句編寫比較復(fù)雜的內(nèi)容

        $?awk?-F?':'?'{if?($1?>?"m")?print?$1}'?demo.txt
        root
        sys
        sync

        上面代碼輸出第一個(gè)字段的第一個(gè)字符大于m的行。

        if結(jié)構(gòu)還可以指定else部分。

        8 進(jìn)程管理與定時(shí)任務(wù)和后臺(tái)執(zhí)行

        crond是什么?

        crond是一個(gè)可以在指定時(shí)間執(zhí)行一個(gè)shell腳本或者一系列的Linux命令。和Windows下的計(jì)劃任務(wù)類似。當(dāng)安裝完操作系統(tǒng)后,默認(rèn)會(huì)安裝這個(gè)服務(wù)工具,并且會(huì)自動(dòng)啟動(dòng)crond進(jìn)程。

        在Linux中任務(wù)的調(diào)度分為兩類

        • 系統(tǒng)任務(wù)的調(diào)度

        系統(tǒng)會(huì)周期性的執(zhí)行一些工作,比如說(shuō)寫緩存的數(shù)據(jù)到硬盤,清理日志等

        • 用戶任務(wù)的調(diào)度

        用戶定期也會(huì)執(zhí)行一些任務(wù),比如用戶數(shù)據(jù)的備份,定時(shí)的郵件提醒等,這些都是通過(guò)crondtab來(lái)設(shè)置

        那么crontab到底怎么用么

        首先看看crontab的使用格式:

        crontab?-u?user?file

        常見(jiàn)的選項(xiàng)

        • -u user:很明顯是需要表明是那個(gè)用戶的crontab服務(wù),別瞎搞

        • file:file是命名文件的名字,表示將file作為crontab的任務(wù)列表文件并載入到crontab中

        • -e:e為edit,表示標(biāo)記某個(gè)用戶的crontab文件內(nèi)容

        • -l:顯示用戶的crontab文件、

        crontab的含義

        創(chuàng)建的crontab文件,每一行代表一項(xiàng)任務(wù),每個(gè)字段都有對(duì)應(yīng)的設(shè)置規(guī)則,一共分為6個(gè)字段,分別為:

        minute?hour?day?month?week?command
        • minute:區(qū)間 0-59

        • hour:區(qū)間0-23

        • day:區(qū)間0-31

        • month:區(qū)間1-12

        • week:區(qū)間0-7 周日可以是0/7

        • command

        這里的command代表的是需要執(zhí)行的而命令,通常為腳本文件,

        除了上面幾個(gè)字段,還需要注意幾個(gè)特殊字段

        • *:代表所欲嘔可能的值

        • ,:通過(guò),來(lái)表示區(qū)間范圍的值

        • _:整數(shù)之間的中杠表示一個(gè)證書范圍

        • 正斜線:表示時(shí)間的間隔頻率,比如0-23/2表示每?jī)蓚€(gè)小時(shí)執(zhí)行一次
          開(kāi)始放幾個(gè)例子**

        crontab?-e
        0?5?*?*?*?/root/bin/backup.sh

        這代表的是每天早上5點(diǎn)運(yùn)行backup.sh

        每個(gè)工作日11:59pm進(jìn)行備份作業(yè)

        59?11?*?*?1-5?/root/bin/backup.sh

        每五分鐘運(yùn)行一個(gè)命令

        */5?*?*?*?*?/root/bin/check-status.sh

        crontab有哪些選項(xiàng)

        crontab -e:修 改crontab文件,如果文件不存在會(huì)自動(dòng)創(chuàng)建

        crontab -l:顯示crontab文件

        crontab -r:刪除crontab 文件

        crontab -ir:刪除crontab文件前提醒用戶

        9 后臺(tái)運(yùn)行

        用途:不掛斷的運(yùn)行命令

        語(yǔ)法:nohup Command [ Arg … ] [&]

        • 無(wú)論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當(dāng)前目錄的 nohup.out 文件中。

        • 如果當(dāng)前目錄的 "nohup.out" 文件不可寫,輸出重定向到"home/nohup.out"

        • 如果沒(méi)有文件能創(chuàng)建或打開(kāi)以用于追加,那么 Command 參數(shù)指定的命令不可調(diào)用。

        退出狀態(tài):該命令返回下列出口值: 

        • 126 可以查找但不能調(diào)用 Command 參數(shù)指定的命令?!?/p>

        • 127 nohup 命令發(fā)生錯(cuò)誤或不能查找由 Command 參數(shù)指定的命令。 

        • 否則,nohup 命令的退出狀態(tài)是 Command 參數(shù)指定命令的退出狀態(tài)。

        使用&
        用途:在后臺(tái)運(yùn)行,一般兩個(gè)一起用

        nohup?command?&

        新用戶一年只需84.97元,我當(dāng)年認(rèn)證學(xué)生,以學(xué)生的身份購(gòu)買都得10塊錢一個(gè)月,現(xiàn)在一個(gè)月只要7塊錢!


        通過(guò)我的鏈接或者掃描二維碼購(gòu)買即可享受優(yōu)惠:

        https://www.aliyun.com/1111/pintuan-share?ptCode=MTk2NjQwOTYyMDkyNzI4MXx8MTE0fDE%3D&userCode=pfn5xpli

        老實(shí)說(shuō)我在學(xué)生時(shí)期就沒(méi)折騰過(guò)虛擬機(jī),直接上的云服務(wù)器,這給我在學(xué)習(xí)的時(shí)候省了不少的時(shí)間。現(xiàn)在一個(gè)月7塊錢就可以擁有自己的一臺(tái)服務(wù)器,如果還沒(méi)買過(guò)的同學(xué)可以買起來(lái)~ 新人擁有自己的一臺(tái)服務(wù)器可以先簡(jiǎn)單做些小事情(必經(jīng)的一個(gè)過(guò)程):

        • 學(xué)習(xí)Linux命令

        • 部署Java環(huán)境(包括Elasticseach,Redis..等等),這些框架都是在Linux部署很方便,在Windows上安裝就比較麻煩了。

        • 把自己寫的小東西掛在服務(wù)器

        我寫了非常詳細(xì)的搭建教程,買了如果還不會(huì)用,聯(lián)系我手把手教學(xué)!

        【戳我】教你使用云服務(wù)器

        如果不是新用戶,可以用爸媽手機(jī)注冊(cè)一個(gè)(我就是這樣干的),享受阿里云的最低價(jià)!

        閱讀原文
        購(gòu)買最便宜的服務(wù)器
        瀏覽 58
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产日产久久欧美精品一区 | 韩国色网站 | 日本操操操 | 超碰av人人 | 蓝莓 c到爽 H视频 | 东北欲情老妇耸乳乱 | 欧美色图一区 | 黄色工厂这里只有精品 | 你的欲梦裸身视频在线观看 | 成年人在线观看视频 |