1. 程式人生 > >linux學習第三周總結

linux學習第三周總結

關系 單分支 oar node 模式 linux系統 sta rpm-gpg cdr

linux學習第三周總結

學習linux的第三周,也是驚喜最多的一周,讓我看到學linux並不是很枯燥,相反非常有趣,可玩性很多,但越深入越覺得可學習的地方有很多,也有非常多的不足,所以革命尚未成功,同誌更需努力

同樣來簡單終結一下本周的重點,內容比較多,說要簡單提一下,不做詳解

一、shell腳本編程基礎

內容:1. 編程基礎 2. 腳本基本格式3. 變量4.運算5.條件測試6.條件判斷if 7.條件判斷case 8.配置用戶環境

shell腳本:包含一些命令或聲明,並符合一定格式的文本文件  
格式要求:首行shebang機制  
    #!/bin/bash
    #!/usr/bin/python
    #!/usr/bin/perl  
shell腳本的用途有:
    自動化常用命令
    執行系統管理和故障排除
    創建簡單的應用程序
    處理文本或文件
bash中變量的種類 
    局部變量:生效範圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效
    環境變量:生效範圍為當前shell進程及其子進程
    本地變量:生效範圍為當前shell進程中某代碼片斷,通常指函數
    位置變量:$1, $2, ...來表示,用於讓腳本在腳本代碼中調用通過命令行傳遞給它的參數
    特殊變量:$?, $0, $*, $@, $#,$$
算術運算和邏輯運算
    算術運算:help let
        +, -, *, /, %取模(取余), **(乘方)  
    邏輯運算true (0), false(1)
條件測試
    斷某需求是否滿足,需要由測試機制來實現專用的測試表達式需要由測試命令輔助完成測試過程  
    test EXPRESSION  
    [ EXPRESSION ]  
    [[ EXPRESSION ]]
    COMMAND1 && COMMAND2 並且,短路與,代表條件性的AND THEN
    COMMAND1 || COMMAND2 或者,短路或,代表條件性的OR ELSE
    ! COMMAND 非
    如:[ -f “$FILE” ] && [[ “$FILE”=~ .*\.sh$ ]]
使用read來把輸入值分配給一個或多個shell變量
條件選擇if語句
    單分支
        if 判斷條件;then
            條件為真的分支代碼
        fi
    雙分支
        if 判斷條件; then
            條件為真的分支代碼
        else
            條件為假的分支代碼
        fi
case語句

二、文件查找和壓縮

文件查找
在文件系統上查找符合條件的文件
文件查找:locate, find
    非實時查找(數據庫查找):locate
    實時查找:find
locate查詢系統上預建的文件索引數據庫 
    locate KEYWORD
find實時查找工具,通過遍歷指定路徑完成文件查找
    find [OPTION]... [查找路徑] [查找條件] [處理動作]
壓縮、解壓縮及歸檔工具 
    tar zcvf file.tar.gz  /etc/   file.tgz
    tar jcvf file.tar.bz2 /etc/
    tar Jcvf file.tar.xz  /etc 
    tar Jxvf file.tar.xz -C /data/
    tar xvf file.tar.xz  

三、處理文本的工具sed

Stream EDitor, 行編輯器
sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成後,把緩沖區的內容送往屏幕。然後讀入下行,執行下一個循環。如果沒有使諸如‘D’的特殊命令,那會在兩個循環之間清空模式空間,但不會清空保留空間。這樣不斷重復,直到文件末尾。文件內容並沒有改變,除非你使用重定向存儲輸出。  

功能:主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等
用法:sed [option]... ‘script‘ inputfile..
常用選項:
    -n 不輸出模式空間內容到屏幕,即不自動打印
    -e 多點編輯
    -f /PATH/SCRIPT_FILE 從指定文件中讀取編輯腳本
    -r 支持使用擴展正則表達式
    -i.bak 備份文件並原處編輯
編輯命令:
    d 刪除模式空間匹配的行,並立即啟用下一輪循環
    p 打印當前模式空間內容,追加到默認輸出之後
    a [\]text 在指定行後面追加文本,支持使用\n實現多行追加
    i [\]text 在行前面插入文本
    c [\]text 替換行為單行或多行文本
    w /path/file 保存模式匹配的行至指定文件
    r /path/file 讀取指定文件的文本至模式空間中匹配到的行後
    = 為模式空間中的行打印行號
    ! 模式空間中匹配行取反處理
sed工具
   s/// 查找替換,支持使用其它分隔符,s@@@;s### 
    替換標記:
        g   行內全局替換
        p 顯示替換成功的行
        w /PATH/FILE 將替換成功的行保存至文件中

四、軟件包管理

包和包管理器
最初只有.tar.gz的打包的源碼文件,用戶必須編譯每個他想在GNU/Linux上運行的軟件。用戶們急需系統提供一種方法來管理這些安裝在機器上的軟件,當Debian誕生時,這樣一個管理工具也就應運而生,它被命名為dpkg。從而著名的“package”概念第一次出現在GNU/Linux系統中,稍後Red Hat才開發自己的“rpm”包管理系統
包的組成:
    二進制文件、庫文件、配置文件、幫助文件
程序包管理器:
    debian: deb文件, dpkg包管理器
    redhat: rpm文件, rpm包管理器
    rpm:Redhat Package Manager
        RPM Package Manager
包之間:可能存在依賴關系,甚至循環依賴
解決依賴包管理工具:
    yum:rpm包管理器的前端工具
    apt:deb包管理器前端工具
    zypper:suse上的rpm前端管理工具
    dnf:Fedora 18+ rpm包管理器前端管理工具
庫文件
映射關系
    配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
    緩存文件:/etc/ld.so.cache
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
包文件組成 (每個包獨有)
    RPM包內的文件
    RPM的元數據,如名稱,版本,依賴性,描述等
    安裝或卸載時運行的腳本
數據庫(公共):/var/lib/rpm
    程序包名稱及版本
    依賴關系
    功能說明
    包安裝後生成的各文件路徑及校驗碼信息
獲取程序包的途徑
    系統發版的光盤或官方的服務器
    CentOS鏡像:
        https://www.centos.org/download/
        http://mirrors.aliyun.com
        http://mirrors.sohu.com
        http://mirrors.163.com
        項目官方站點
包查詢
    rpm {-q|--query} [select-options] [query-options]
        -a:所有包
        -f:查看指定的文件由哪個程序包安裝生成
        -p rpmfile:針對尚未安裝的程序包文件做查詢操作
        --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
        --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
        -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
包卸載:
    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_
    當包卸載時,對應的配置文件不會刪除, 以FILENAME.rpmsave形式保留
yum客戶端配置文件:    
    /etc/yum.conf:為所有倉庫提供公共配置
    /etc/yum.repos.d/*.repo:為倉庫的指向提供配置
    [cdrom]
    name=cdromrepo
    baseurl=file:///mnt/
    gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-

    [epel]
    name=epel
    baseurl=http://mirrors.sohu.com/fedora-epel/7/x86_64/
    gpgkey=http://mirrors.sohu.com/fedora-epel/RPM-GPG-KEY-EPEL-7
yum源   
阿裏雲repo文件
    http://mirrors.aliyun.com/repo/
CentOS系統的yum源
?阿裏雲:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
清華大學:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源
阿裏雲:https://mirrors.aliyun.com/epel/$releasever/x86_64
阿裏巴巴開源軟件
https://opsx.alibaba.com/
DNF (DaNdiFied)
DNF 介紹:新一代的RPM軟件包管理器。DNF 發行日期是2015年5月11日,DNF 包管理器采用Python 編寫,發行許可為GPL v2,首先出現在Fedora 18 發行版中。在 RHEL 8.0 版本正式取代了 YUM,DNF包管理器克服了YUM包管理器的一些瓶頸,提升了包括用戶體驗,內存占用,依賴分析,運行速度等
安裝所需軟件包,依賴epel源
    wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm 
    wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm 
    wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/python-dnf-0.6.4-2.sdl7.noarch.rpm 
    yuminstallpython-dnf-0.6.4-2.sdl7.noarch.rpmdnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm
配置文件:/etc/dnf/dnf.conf 
倉庫文件:/etc/yum.repos.d/ *.repo
日誌: /var/log/dnf.rpm.log 
DNF 使用與yum一致 
程序包編譯
    源代碼-->預處理-->編譯-->匯編-->鏈接-->執行
    源代碼組織格式:
        多文件:文件中的代碼之間,很可能存在跨文件依賴關系
        C、C++:make 項目管理器
            configure腳本--Makefile.in--> Makefile
        java: maven
C語言源代碼編譯安裝三步驟:
1、./configure
    (1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成Makefile
    (2) 檢查依賴到的外部環境,如依賴的軟件包
2、make 根據Makefile文件,構建應用程序
3、make install 復制文件到相應路徑

linux學習第三周總結