當前位置 博文首頁 > 貓耳山在天邊:《Linux命令行與shell腳本編程大全》(第三版)讀

    貓耳山在天邊:《Linux命令行與shell腳本編程大全》(第三版)讀

    作者:[db:作者] 時間:2021-09-13 18:54

    第一部分 Linux命令行

    第三章、基本的bash shell命令

    bash手冊

    man 命令

    例子:

    man cat
    空格翻頁、回車下一行、左右鍵看右側(左側)內容、q退出
    
    info
    info info
    展示info頁面,沒看出有什么特別的
    
    hostname

    設置hostname

    hostname mycomputer
    

    瀏覽文件系統

    遍歷目錄

    cd

    切換目錄

    cd /home/a  切換到/home/a目錄,絕對路徑
    cd b    切換到當前目錄下的b目錄
    cd .. 切換到上級目錄
    cd ../../ 切換到上級目錄的上級目錄
    cd ~ 切換到用戶家目錄
    cd 切換到用戶家目錄
    cd - 切換到上次切換的目錄
    
    pwd

    打印當前目錄

    文件和目錄列表

    ls

    列出當前目錄下的文件和目錄

    ls 輸出當前目錄下文件和目錄
    ls -F 同上,目錄名后會有/方便區分
    ls -a 同ls,同時展示隱藏文件
    ls -R 遞歸顯示子目錄
    ls -l 顯示長列表,會有更多文件相關的信息
    ls myscript 展示名字為myscript的文件或目錄
    ls myscri?t 過濾展示內容,問號代表一個任意字符
    ls mysc* 過濾展示內容,星號代表多個任意字符
    ls -l --time=atime 展示文件,時間列展示內容改為訪問時間(默認是修改時間)
    

    處理文件

    創建文件

    touch
    touch a.log 創建a.log文件,如果該文件存在,更新該文件的修改時間
    touch -a a.log 更新該文件的訪問時間而非修改時間
    

    復制文件

    cp
    cp test_1 test_2 把當前目錄下的test_1復制到test_2
    cp -i test_1 test_2 復制時如果有文件已經存在,會詢問是否覆蓋
    cp ../test_3 . 復制上級目錄的test_3到當前目錄
    cp ../test_3/*.log . 把上級目錄中的test_3目錄下的所有以.log結尾的文件復制到當前目錄
    cp -R test_1 test_2 拷貝時遞歸拷貝子文件夾
    

    自動補全

    在輸入命令、目錄名、文件名時制表符可以自動補全

    鏈接文件

    ln

    創建鏈接

    ln -s test.log s1_test.log 創建test.log的軟鏈接(符號鏈接)s1_test.log
    ln test.log h1_test.log 創建test.log的硬鏈接h1_test.log
    
    readlink -f /usr/bin/python 如果/usr/bin/python是個鏈接文件,讀取他的原始文件
    

    重命名文件

    mv

    移動文件或重命名文件

    mv a.log b.log 重命名a.log文件,改為b.log
    mv ../a.log . 將上級目錄中的a.log移動到當前目錄
    

    刪除文件

    rm

    刪除文件或目錄

    rm a.log 刪除a.log
    rm -i a.log 刪除a.log,刪除前詢問是否刪除
    rm -f a.log 強制刪除a.log,不詢問
    rm -r somedir 遞歸刪除somedir中的內容
    

    處理目錄

    創建目錄

    mkdir

    創建目錄

    mkdir adir 創建adir目錄
    mkdir -p adir/bdir/cdir 遞歸創建目錄(不存在的父級目錄會自動創建)
    

    刪除目錄

    rmdir

    刪除目錄,只有目錄為空時才會刪除,所以要先刪除目錄中的內容再刪除目錄

    rmdir adir 刪除adir目錄
    

    查看目錄樹

    tree

    打印目錄樹,默認可能沒有安裝

    tree . 打印當前目錄的樹狀結構
    

    查看文件內容

    查看文件類型

    file

    查看文件類型(文本、目錄、鏈接、可執行文件等)

    file a.log 查看a.log的文件類型
    

    查看整個文件

    cat

    查看整個文件

    cat a.log 查看a.log文件的內容
    cat -n a.log 查看a.log文件內容,帶行號
    cat -b a.log 查看a.log文件內容,非空行帶行號
    cat -T a.log 查看a.log文件內容,不顯示制表符(用^I代替)
    
    more

    逐頁查看文件內容

    more a.log 逐頁查看a.log的文件內容,翻頁方法和man相同
    
    less

    逐頁查看文件內容,可以倒退

    less a.log 逐頁查看a.log的文件內容,翻頁方法和more相同,但是在原有基礎上增加了上下翻頁的功能鍵(PgUp和PgDn)
    

    查看部分文件

    tail

    查看文件末尾(默認10行)的內容

    tail a.log 查看a.log末尾的內容
    tail -n 20 a.log 查看a.log末尾20行的內容
    tail -f a.log 動態查看a.log末尾的內容(即如果其他程序寫入了a.log,這里會實時顯示出來)
    

    查看文件開始(默認10行)的內容

    head a.log 查看a.log文件開頭的內容
    head -n 20 a.log 查看a.log文件開頭20行的內容
    

    第四章、更多的bash shell命令

    監測程序

    探查進程

    ps

    ps的基本輸出顯示了程序的進程id(PID)、運行在哪個終端(TTY)、以及進程已用的CPU時間

    完成輸出格式中,UID:啟動進程的用戶,PID:進程ID,PPID:父進程ID,C:進程生命周期中的CPU利用率,STIME:進程啟動時的系統時間,TTY:進程啟動時的終端設備,TIME:累積CPU時間,CMD:啟動的程序名稱

    ps 顯示運行在當前控制臺下的屬于當前用戶的進程
    ps -e 顯示所有進程
    ps -f 顯示完整格式的輸出
    Ps -l 顯示長列表(不常用)
    ps --forest 顯示進程層級
    ps -ef --forest 前幾個的組合使用
    

    實時監測進程

    top

    實時監測進程,q退出,d修改輪詢間隔,f選擇顯示哪些字段字段d,F選擇按哪個字段排序

    top 實時監測進程
    

    結束進程

    linux信號
    信號名稱描述
    1HUP掛起
    2INT中斷
    3QUIT結束運行
    9KILL無條件終止
    11SEGV段錯誤
    15TERM盡可能終止
    17STOP無條件停止運行,但不終止
    18TSTP停止或暫停,但繼續在后臺運行
    19CONT在STOP或TSTP之后恢復執行
    kill

    kill命令通過進程id給進程發信號。默認情況發送TERM信號

    kill 123 盡可能殺死pid是123的進程
    kill -9 123 無條件殺死pid是123的進程
    
    killall

    通過進程名而不是PID來結束進程,支持通配符

    killall http* 殺死所有以http開頭的進程
    

    監測磁盤空間

    掛載存儲媒體

    mount

    給出兩個簡單例子

    mount 輸出當前系統上掛載的設備列表,每行展示:媒體設備文件名、虛擬目錄掛載點、文件系統類型、已掛載媒體的訪問狀態
    mount -t vfat /dev/sdb1 /media/disk  將vfat格式的u盤/dev/sdb1掛載到/dev/sdb1目錄
    
    umount
    umount [directory|device] 這個命令可以通過設備文件或掛載點來指定要卸載的設備
    

    使用df命令

    df

    顯示設備上還有多少磁盤空間

    df 顯示每個有數據的已掛載文件系統使用情況
    df -h 同上,但是按照用戶易讀的形式顯示數值
    

    使用du命令

    du

    du顯示某個特定目錄的磁盤使用情況

    du 當前目錄下所有文件、目錄、子目錄的磁盤使用情況
    

    處理數據文件

    排序數據

    sort
    sort a.log 排序輸出a.log內容,默認按照字典順序
    sort -n a.log 排序輸出a.log的內容,將他們識別成數字排序
    sort -M a.log 如果a.log以Jan等形式的三字符月份名開頭,可以按照月份排序
    sort -t ':' -k 3 -n /etc/passwd 排序/etc/passwd文件,按冒號分段,然后按第三段排序,并且將其作為數字進行排序
    du -sh * | sort -nr 這里用了管道,查看當前目錄下所有子文件、子文件夾的大小,然后當做數字倒排序(-r為倒排序)
    

    搜索數據

    grep

    查找文件內容

    grep [options] pattern [file] 查找某個文件中匹配pattern模式的字符的行
    grep three a.log 查找a.log文件中包含three的行
    grep -v three a.log 查找a.log文件中不包含three的行
    grep -n three a.log 查找a.log文件中包含three的行,并添加行號
    grep -c three a.log 統計a.log文件中包含three的有多少行
    grep -e three -e two a.log 查找a.log中包含three或two的行,-e可以用來指定多個匹配模塊
    grep [tf] a.log 查找a.log中包含t或包含f的行
    
    egrep

    grep的衍生,支持POSIX擴展正則表達式

    fgrep

    grep的衍生,支持將匹配模式指定為用換行符分割的一列固定長度的字符串

    壓縮數據

    gzip

    用來壓縮文件

    gzip a.log 壓縮a.log文件
    gzip my* 壓縮my開頭的所有文件(不壓縮目錄)
    
    gzcat

    用來查看壓縮過的文本文件的內容

    gunzip

    用來解壓文件

    歸檔數據

    tar
    tar -cvf test.tar test/ test2/ 創建test.tar的歸檔文件,還有test和test2目錄內容
    tar -tf test.jar 列出test.jar的內容
    tar -xvf test.jar 從test.tar中提取內容
    

    第五章 理解shell

    shell的父子關系

    bash 從當前shell啟動一個shell 
    bash 從剛啟動的shell再啟動一個shell
    ps --forest 展示進程樹,可以看出父子關系
    

    進程列表

    echo $BASH_SUBSHELL
    pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL 這是一個命令列表,最后一行顯示0,表示沒有生產子shell
    (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; echo $BASH_SUBSHELL) 這是一個進程列表,最后一行顯示1,表示生產了一個子shell
    (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls ; (echo $BASH_SUBSHELL)) 這是一個進程列表,最后一行顯示2,表示生產了兩個子shell
    

    別出心裁的子shell用法

    sleep
    sleep 10 休息10秒
    sleep 10 & 在后臺休息10秒,馬上輸入后臺作業號和進程id
    
    jobs
    jobs 顯示當前運行在后臺模式中的所有用戶的進程
    jobs -l 顯示當前運行在后臺模式中的所有用戶的進程以及它們的pid
    
    coproc

    協成可以同時做兩件事:在后臺生產子shell,并在這個子shell中執行命令

    coproc sleep 10 在后臺創建shell并執行休眠10秒
    coproc My_Job { sleep 1000; } 在后臺創建shell并執行休眠1000秒,為這個后臺程序起名為My_Job,注意,格式要求嚴格,空格和分號需要嚴格按照格式
    

    理解shell的內建命令

    外部命令

    外部命令也被稱為文件系統命令,是存在于bash shell之外的程序。執行他們時回創建出一個子進程,這種操作被稱為衍生(forking)。

    ps -f 命令可以很清楚的看出,他創建了一個子進程,ps是一個外部命令
    
    which

    這個命令可以找出可執行命令的位置

    which ps 可以找出ps命令的位置(一般情況下是在/bin/ps)
    

    內建命令

    內建命令和shell編譯在一起,不需要子進程執行,效率更高。

    type

    內建命令,可以查看命令的類型

    type cd 顯示可執行命令cd的類型(會顯示類似于shell builtin,說明是內建命令)
    type -a echo 顯示可執行命令echo的類型,如果有多個,全部列出
    
    history

    內建命令,bash shell會記錄用過的命令,可以喚回并重新使用

    history 顯示最近用過的命令列表
    !! 執行理事列表中最近的命令
    history -a 強制將理事記錄寫入.bash_history文件,默認情況下退出時才會寫入
    !1082 執行命令歷史記錄編號為1082的命令
    
    alias

    內建命令,可以為長遠命令及其參數創建別名,減少輸入量。別名僅在它所被定義的shell進程中才有效

    alias -p 查看當前可用別名
    alias li='ls -li' 為ls -li 命令創建別名li,以后直接執行li即可
    

    第六章 使用Linux環境變量

    什么是環境變量

    全局環境變量

    全局環境變量會對shell會話和所有生成的子shell都是可見的。

    printenv 或 env
    printenv 打印全局環境變量
    env 打印全局環境變量
    printenv HOME 打印名為HOME的全局變量
    echo $HOME 打印名為HOME的全局變量
    cd $HOME 進入HOME所指的目錄
    

    局部環境變量

    局部環境變量只能在定義他們的進程中可見。

    set
    set 輸出局部變量、全局變量及用戶定義變量(比env、printenv更詳細)
    

    設置用戶定義變量

    用戶定義變量需要用小寫,避免重新定義系統環境變量(系統環境變量都是大寫)帶來的災難

    my_var=Hello 定義my_var變量的值Hello;注意不能有空格
    my_var2='hello world' 定義my_var2變量的值為hello world;注意不能有空格,值中若有空格,用單引號括起來
    

    設置全局環境變量

    在設定全局環境變量的進程所創建的子進程中,該變量都是可見的。

    export

    使用export將用戶已經定義好的局部環境變量導出到全局環境中。

    my_var=hello 創建局部環境變量my_var
    export my_var 將my_var導出到全局環境中
    

    刪除環境變量

    unset
    unset my_var 刪除名為my_var的環境變量
    

    設置PATH環境變量

    PATH=$PATH:/home/raul/Scripts 把PATH環境變量加上/home/raul/Scripts(PATH環境變量中用冒號分割)
    PATH=$PATH:. 把PATH環境變量加上當前目錄
    

    定位系統環境變量

    登錄shell

    /etc/profile 系統默認的主啟動文件,每個用戶登錄時都會執行這個啟動文件
    $HOME/.bash_profile 用戶專屬啟動文件
    $HOME/.bashrc 用戶專屬啟動文件
    $HOME/bash_login 用戶專屬啟動文件
    $HOME/.profile 用戶專屬啟動文件
    

    交互式shell進程

    如果bash shell不是登錄系統時啟動的(比如是在命令行提示符下敲bash時啟動),那么啟動的這個shell叫做交互式shell。它不會訪問/etc/profile,只會檢查$HOME/.bashrc文件

    非交互式shell

    通過BASH_ENV環境變量來配置需要執行的啟動文件

    環境變量持久化

    全局性的環境變量可以在/etc/profile.d目錄中創建一個以.sh結尾的文件,將全局環境變量設置放入其中
    個人環境變量放到$HOME/.bashrc中
    非交互式shell的設置文件配置到BASH_ENV環境中
    

    數組變量

    環境變量可以作為數組使用

    mytest=(one two three four five) 把一個數組存入mytest環境變量中
    echo $mytest 只會顯示第一個值one
    echo ${mytest[2]} 顯示數組的第三個值
    echo ${mytest[*]} 顯示數組的所有值
    mytest[2]=seven 修改數組第三個值,改為seven
    unset mytest[2] 去掉數組第三個值(數組長度并未改變,該位置存放了‘空’)
    unset mytest 刪除整個數組
    

    第七章、理解Linux的安全性

    Linux的安全性

    用戶賬戶存在/etc/passwd文件,展示:用戶登錄名、用戶密碼、用戶賬戶的UID、用戶賬戶的組ID(GID)、用戶賬戶的文本描述、用戶HOME目錄的位置、用戶的默認shell

    用戶密碼存在/etc/shadow文件,暫時:用戶登錄名、加密后的密碼、自上次修改密碼后過去的天數(自1970.1.1開始計算)、多少天后才能更改密碼、多少天后必須更改密碼、密碼過期前提前多少天提醒用戶更改密碼、密碼過期后多少天禁用用戶賬戶、用戶賬戶被禁用的日期(自1970.1.1到當天的天數)、預留字段給將來使用

    添加新用戶

    useradd
    useradd -D 查看添加新用戶的默認配置
    useradd test 添加test用戶
    useradd -D -s /bin/tsch 修改添加新用戶時shell的默認值為/bin/tsch
    

    刪除用戶

    userdel
    userdel test 刪除test用戶
    userdel -r test 刪除test用戶,并且刪除他的home目錄和郵件目錄
    

    修改用戶

    usermod

    修改用戶賬戶的字段

    參數有
    -l 修改用戶賬戶的登錄名
    -L 鎖定賬戶,使用戶無法登錄
    -p 修改賬戶的密碼
    -U 解除鎖定,使用戶能夠登錄
    
    passwd
    passwd 修改自己的密碼
    passwd test 修改test賬戶的密碼
    
    chpasswd
    chpasswd < users.txt 用users.txt中的內容來修改密碼,該文件中的內容應該是userid:passwd的鍵值對
    
    chsh
    chsh -s /bin/csh test 修改test用戶的默認shell為/bin/csh
    
    chfn

    修改用戶在/etc/passwd文件中的備注字段中的存儲信息

    chfn test 修改test的備注信息,會提示輸入
    
    finger
    finger test 查看test用戶的信息
    
    chage

    用來幫助管理用戶賬戶的有效期

    使用Linux組

    組存在/etc/group文件下,分別展示:組名、組密碼、GUID、屬于該組的用戶列表

    創建新租

    groupadd
    groupadd shared 創建名為shared的組
    usermod -G shared test 將test用戶添加到shared組中
    

    修改組

    groupmod
    groupmod -n sharing shared 修改組shared的名字,改為sharing
    

    理解文件權限

    默認文件權限

    umask

    默認權限由umask設置,比較復雜

    umask 展示創建文件時的默認權限
    umask 026 設置創建文件時的默認權限為640(666-026),創建目錄時的默認權限751(777-026)
    

    改變安全性設置

    改變權限

    chmod

    兩種方式,8進制權限碼或符號模式

    chmod 760 newfile 設置newfile的權限為 -rwxrw----
    chmod [ugoa...][+-=][rwxXstugo...]
    其中第一組定義了權限作用的對象:u代表用戶、g代表組、o代表其他、a代表上述所有
    第二組定義了是想 在現有權限上增加權限(+),還是現有權限上移除權限(-),或是將權限設置成后面指定的值(=)
    第三組代表作用到設置上的權限:
    X:如果對象是目錄或者它已有執行權限,賦予執行權限
    s:運行時重新設置UID或GID
    t:保留文件或目錄
    u:將權限設置為跟屬主一樣
    g:將權限設置為跟屬組一樣
    o:將權限設置為跟其他用戶一樣
    
    chmod o+r newfile 給newfile的其他用戶增加讀權限
    chmod u-x newfile 移除newfile的屬主的執行權限
    

    改變所屬關系

    chown
    chown raul newfile 改變newfile的屬主為raul
    chown raul.shared newfile 改變newfile的屬主為raul,屬組為shared
    chown .rich newfile 改變newfile的屬組為rich
    chown raul. newfile 將newfile的屬主和屬組都改為raul
    chown -R raul newdir 遞歸的將newdir下的所有文件和目錄的屬主都改為raul
    
    chgrp
    chgrp shared newfile 修改newfile的屬組為chgrp
    

    共享文件

    可以創建共享文件夾,如果有需要了解細節再仔細學習,下面給出方法

    mkdir testdir 創建共享目錄
    chgrp shared testdir    將屬組改為需要共享文件的組shared
    chmod g+s testdir 修改權限
    umask 002 所有用戶的umask都需要改成002
    cd testdir  進入目錄
    touch testfile  創建文件,這個文件的屬組會是shared
    

    第八章、管理文件系統

    操作文件系統

    創建分區

    fdisk
    fdisk /dev/sdb 給存儲設備/dev/sdb分區
    進入后,有如下有用的操作
    p 顯示這個存儲設備的詳細信息
    n 創建新分區
    w 保存更改
    

    創建文件系統

    分區數據使用前,應先用某種文件系統對其進行格式化,每個文件系統相對應的格式化工具不同。

    mkefs   創建一個ext文件系統
    mke2fs  創建一個ext2文件系統
    mkfs.ext3   創建一個ext3文件系統
    mkfs.ext4   創建一個ext4文件系統
    mkreiserfs  創建一個ReiserFS文件系統
    jfs_mkfs    創建一個JFS文件系統
    mkfs.xfs    創建一個XFS文件系統
    mkfs.zfs    創建一個ZFS文件系統
    mkfs.btrfs  創建一個Btrfs文件系統
    

    示例

    sudo mkfs.ext4 /dev/sdb1 在/dev/sdb1分區上創建一個ext4文件系統
    

    格式化后,需要將這個文件系統掛載到虛擬目錄中才能使用

    ls /mnt
    sudo mkdir /mnt/my_partition
    ls -al /mnt/my_partition/
    ls -dF /mnt/my_partition
    sudo mount -t ext4 /dev/sdb1 /mnt/my_partition
    ls -al /mnt/my_partition
    

    這種掛載方式是臨時的,如果想linux啟動時自動掛載,可以將其添加到/etc/fstab文件中

    文件系統的檢查與修復

    fsck

    fsck可以檢查和修復大部分類型的Linux文件系統(包含ext、ext2、ext3、ext4、ReiserFS、JFS、XFS)。需要先卸載目錄再檢查,檢查完后再掛載。

    fsck options filesystem 對文件系統進行fsck命令
    -a 如果檢測遇到錯誤,自動修復
    -A 檢查/etc/fstab/文件中列出的所有文件系統
    -C 如果支持進度條功能,顯示進度條
    -N 不進行檢查,只顯示哪些檢查會執行
    -r 出現錯誤時提示
    -R 使用-A選項時跳過根文件系統
    -s 檢查多個文件系統時,依次進行檢查
    -t 指定要檢查的文件系統類型
    -T 啟動時不顯示頭部信息
    -V 在檢查時產生詳細輸出
    -y 檢測到錯誤時自動修復文件系統
    

    邏輯卷管理

    使用Linux LVM

    fsdisk中分區類型8e即表示這個糞污將會被用作Linux LVM系統的一部分,而不是一個直接的文件系統。

    fsdisk 命令,輸入t,然后輸入8e
    

    下一步是用分區創建實際的物理卷

    sudo pvcreate /dev/sdb1 創建實際的物理卷
    sudo pvdisplay /dev/sdb1 查看創建進度
    sudo vgcreate Vol1 /dev/sdb1 創建卷組
    sudo vgdisplay Vol1 查看剛創建的卷組的細節
    sudo lvcreate -l 100%FREE -n lvtest Vol1 創建邏輯卷lvtest(參數細節查看lvcreate --help或man lvcreate)
    sudo lvdisplay Vol1 查看剛創建的邏輯卷的詳細情況
    

    邏輯卷創建后,還需要創建文件系統,掛載到虛擬目錄中

    sudo mkfs.ext4 /dev/Vol1/lvtest 為邏輯卷創建ext4文件系統
    sudo mount /dev/Vol1/lvtest /mnt/my_partition 把邏輯卷掛載到/mnt/my_partition目錄下
    

    其他命令

    vgchange 激活和禁用卷組
    vgremove 刪除卷組
    vgextend 將物理卷加到卷組中
    vgreduce 從卷組中刪除物理卷
    lvextend 增加邏輯卷的大小
    lvreduce 減小邏輯卷的大小
    

    第九章、安裝軟件程序

    基于Debian的系統

    用aptitude管理軟件包

    aptitude工具本質上是apt工具和dpkg的前端,使用它有助于避免常見的軟件安裝問題,如軟件依賴關系缺失、系統環境不穩定及其他一些不必要的麻煩。

    aptitude
    aptitude 進入aptitude的全屏模式
    aptitude show mysql-client 顯示mysql-client的詳情(以及是否已經安裝等信息)
    
    dpkg
    dpkg -L vim-common 列出vim-common軟件包所安裝的全部文件
    dpkg --search /user/bin/xxd 查找某個特定文件屬于哪個軟件包
    

    用aptitude安裝軟件包

    aptitude search wine 查找所有名字中包含wine的軟件包(如果行首顯示i u則表示已經安裝,顯示p v說明這個包可用,但還沒安裝)
    sudo aptitude install wine 安裝名字包含wine的軟件包
    

    用aptitude更新軟件

    sudo aptitude safe-upgrade 將所有已安裝的包更新到軟件倉庫中的最新版本,會檢查包之間的依賴關系,有利于系統穩定。
    aptitude full-upgrade 同safe-upgrade,但不會檢查包與包之間的依賴關系。
    aptitude dist-upgrade 同safe-upgrade,但不會檢查包與包之間的依賴關系。
    

    用aptitude卸載軟件

    sudo aptitude remove wine 只刪除軟件包而不刪除數據和配置文件
    sudo aptitude purge wine 同時刪除軟件包以及相關的數據和配置文件
    

    aptitude倉庫

    /etc/apt/sources.list aptitude默認的軟件倉庫配置文件,如果需要自定義,修改這里(最好不要自定義,原始配置中的軟件包版本不會互相沖突)
    

    基于Red Hat的系統

    列出已安裝包

    yum
    yum list installed 查看系統上已經安裝的包
    yum list xterm 查看xterm軟件包的詳細信息
    yum list installed xterm 查看xterm軟件包是否已經安裝
    yum provides /etc/yum.conf 查看/etc/yum.conf文件是屬于哪個軟件包
    

    用yum安裝軟件

    yum install xterm 安裝xterm軟件包
    yum localinstall package_name.rpm 手動安裝下載好的package_name.rpm文件
    
    su
    su hadoop 切換hadoop用戶
    su - hadoop 切換hadoop用戶,并進入hadoop的家目錄
    su - 切換到root用戶,并進入root的家目錄
    

    用yum更新軟件

    yum list updates 列出所有已安裝包的可用更新
    yum update package_name 更新指定的軟件包
    yum update 更新所有可更新的包
    

    用yum卸載軟件

    yum remove package_name 只刪除軟件包而保留配置文件和數據
    yum erase package_name 同時刪除軟件包和相關的配置和數據
    

    處理損壞的包依賴關系

    有時在安裝多個軟件包時,某個軟件包的依賴關系可能會被另一個包的安裝覆蓋,這叫做損壞的包依賴關系。解決辦法如下

    首先嘗試

    yum clean all
    yum update
    

    如果不行

    yum deplist package_name 可以查看這個軟件包所需要的庫由那些軟件提供,然后可以安裝他們。
    

    如果還是不行

    yum update --skip-broken 更新所有軟件包,忽略依賴關系損壞的那個包。這個雖然不能解決問題,但至少可以減少影響。
    

    yum軟件倉庫

    軟件倉庫的配置文件在/etc/yum.repos.d目錄下

    yum repolist 查看現有軟件倉庫
    

    從源碼安裝

    首先下載源碼包

    tar -zxvf name.tar.gz 解壓縮軟件包
    cd name 進入剛剛解壓的軟件包目錄,查看README文件或AAAREADME文件。該文件中包含了軟件安裝所需要的操作
    

    下面三條為常用的從源碼安裝的步驟

    ./configure 這個命令檢查Linux系統,確保有合適的編譯器可以編譯源代碼,另外確保有正確的庫依賴關系
    make 編譯源碼,創建可執行文件
    make install 安裝編譯好的可執行文件到系統中
    

    第十章、使用編輯器

    vim編輯器

    vim基礎

    vim myprog.c 打開文件,如果文件不存在,則打開臨時文件
    

    進入vim后有兩種模式:普通模式和插入模式。剛打開時vim編輯器會進入普通模式。普通模式中,vim編輯器會將案件解釋成命令。在插入模式下,vim會將在當前光標位置的輸入插入到緩沖區。

    i 進入插入模式,若要退出插入模式回到普通模式,按下退出鍵(ESC)
    h 左移一個字符
    j 下移一行
    k 上移一行
    l 右移一個字符
    PageDown(或Ctrl+F) 下翻一屏
    PageUp(或Ctrl+B)上翻一屏
    G 移動到緩沖區的最后一行
    num G 移動到緩沖區中的第num行
    gg 移動到緩沖區的第一行
    

    在普通模式下輸入冒號,會進入普通模式下的一個特別功能:命令行模式。在命令行模式中有如下命令:

    q 如果未修改緩沖區數據,退出
    q! 取消所有對緩沖區的修改并退出
    w filename 將文件保存到另一個文件中
    wq 將緩沖區數據保存到文件中并退出
    

    編輯數據

    在普通模式下,vim編輯器提供了一些命令來編輯緩沖區中的數據。

    x 刪除當前光標所在位置的字符
    2x 刪除從當前光標所在位置開始的2個字符
    dd 刪除當前光標所在行
    5dd 刪除從當前光標所在行開始的5行數據
    dw 刪除當前光標所在位置的單詞
    d$ 刪除當前光標所在位置至行尾的內容
    J 刪除當前光標所在行行尾的換行符(拼接行)
    u 撤銷前一編輯命令
    a 在當前光標后追加數據
    A 在當前光標所在行行尾追加數據
    r char 用char替換當前光標所在位置的單個字符
    R text 用text覆蓋當前光標所在位置的數據,直到按下esc鍵
    

    復制和粘貼

    刪除命令默認都會把刪除內容放到一個單獨的寄存器中,類似于剪切。
    p 取出寄存器中的數據并追加到當前光標位置
    yw復制一個單詞
    y$復制到行尾
    v 移動光標到要開始復制的位置,按下v,光標所在位置已經高亮,這時可以移動光標覆蓋想要復制的區域,最后按y來激活復制命令。
    

    查找和替換

    / 在普通模式下按斜線,就是查找命令,輸入查找的命令后按回車。如果沒有找到,會報錯,如果找到了,會顯示光標后第一個(如果光標后沒有,則從緩沖區第一行開始搜索),如果要查看下一個,鍵入n或者鍵入/后鍵入回車。
    :s/old/new/ 命令行模式中使用,vim編輯器會調到old第一次出現的地方,并用new替換
    :s/old/new/g 將當前行的所有old替換成new
    :n,ms/old/new/g 替換行號n和m之間的所有old
    :%s/old/new/g 替換整個文件中的所有old
    :%s/old/new/gc 替換整個文件中的所有old,但在每次出現時提示
    

    nano編輯器

    nano編輯器窗口的地步顯示了各種命令及簡要描述。脫字符(^)表示Ctrl鍵,組合鍵大小寫不敏感。

    CTRL+C 顯示光標在文本編輯緩沖區中的位置
    CTRL+G 顯示nano的主幫助窗口
    CTRL+J 調整當前文本段落
    CTRL+K 剪切文本行,并將其保存在剪切緩沖區
    CTRL+O 將當前文本編輯緩沖區的內容寫入文件
    CTRL+R 將文件讀入當前文本編輯緩沖區
    CTRL+T 啟動可用的拼寫檢查器
    CTRL+U 將剪切緩沖區中的內容放入當前行
    CTRL+V 翻動到文本編輯緩沖區中的下一頁內容
    CTRL+W 在文本編輯緩沖區中所搜單詞或短語
    CTRL+X 關閉當前文本編輯緩沖區,退出nano,返回shell
    CTRL+Y 翻動到文本編輯緩沖區中的上一頁內容
    

    emacs編輯器

    emacs編輯器使用包括控制鍵(PC鍵盤上的Ctrl鍵)和Meta鍵的按鍵組合。Meta一般被映射到Alt鍵。emacs官方文檔將Ctrl鍵縮寫為C-,而Meta鍵縮寫為M-。

lj663的博客 原創內容,個人筆記,僅供參考。篠AP中導出物料 lj663的博客 原創內容,個人筆記,僅供參考。宏P于作者博文的 lj663的博客 原創內容,個人筆記,僅供參考。荷昝鳎罕救瞬┛ lj663的博客 原創內容,個人筆記,僅供參考。宏P于VIP文章的 程序員springmeng:??爆肝熬夜開發了一個SpringBoot活動管理系統 相太陽的博客:CSS font-size字體大小樣式屬性 Jqcode:配置文件中propertyConfigurer類的使用 Jqcode:Eclipse插件使用Mybatis-generator代碼生成器 Jqcode:命令行使用Mybatis-generator代碼生成器 Jqcode:SpringMVC工作原理 Jqcode:MD5Utils Jqcode:mysql中自連接查詢與case-when-then用法 Jqcode:json相關轉換 Jqcode:使用Pipeline管道技術快速寫入百萬級別緩存數據 Jqcode:mysql查詢中常用的函數整理 Jqcode:Eclipse中Debug調試時各個快捷鍵的作用 Jqcode:Controller返回json格式數據報反序列化異常的解決辦法 Jqcode:java配置相關參數啟動項目 Jqcode:初步了解mysql存儲過程 Jqcode:layDate,一款來自layui的強大日期插件 Jqcode:layer,一款來自layui的強大彈出層插件 Jqcode:java實現線程間的通信 Jqcode:java導出EXCEL表格―實戰篇 Jqcode:Redis常問面試題整理 Jqcode:List數據去重方法 Jqcode:初識mysql觸發器 Jqcode:數據庫設計規范之三大范式 Jqcode:關于mysql用戶安全管理的一些命令 Jqcode:關于哈希表必須了解的一些知識 Jqcode:本地環境nexus搭建私服jar包站點 Jqcode:使用Dom4j中的Document與Element解析XML文檔 Jqcode:postman調用https接口方式 Jqcode:簡單記錄Spring中輕量級任務調度@Scheduled注解的使用 Jqcode:項目啟動后控制臺自定義輸出圖案或內容 Jqcode:RabbitMQ消息隊列中間件――安裝與配置 Jqcode:RabbitMQ消息隊列中間件――“Hello World”入門 Jqcode:nginx反向代理實踐:將某個指定的域名代理到指定的服務 Jqcode:Spring Cloud微服務架構――Eureka注冊中心 Jqcode:Spring Cloud微服務架構――Eureka服務注冊 Jqcode:Spring Cloud微服務架構――Eureka服務發現與消費 Jqcode:Spring Cloud微服務架構――Ribbon客戶端負載均衡 Jqcode:Spring Cloud微服務架構――Feign客戶端負載均衡 Jqcode:es+kibana在windows平臺下的搭建記錄 Jqcode:kibana安裝中文插件 Jqcode:mongodb常用語法 Jqcode:關于原碼、反碼、補碼的學習 Jqcode:@Autowired、@Resource還分不清嗎? 英雄哪里出來:??13萬字《C語言動漫對話教程(入門篇)》??(建議收 lyndon:CSDN 去除圖片水印 lyndon:Android 手機修改 WiFi MAC 地址 php怎么將漢字轉成拼音 php 50.00怎么轉換成50 一文帶你分析php7的zval 聊聊關于PHP定時器的那些事 微信推廣 如何做好微商 必看微信朋友圈購物八大準則 如何避免朋友圈購物存在問題 JavaScript循環遍歷的24個方法 關于@PostConstruct、afterPropertiesSet和init-method的執行順序 Redis數據過期策略的實現詳解 Java設計模式之java觀察者模式詳解 java工程師進階之MyBatis延遲加載的使用 提高網站收錄率請從建站開始! php pthreads的使用方法 php分頁有幾種實現方法 Yaf遇上PHP7.1會有什么火花? 這個php-cs-fixer編碼格式化工具,你還不會用嗎? 微信朋友圈曬成交、曬對話有圖不等于有真相 交易量是這么來的 揭秘微商驚天陷阱 微信朋友圈里的面膜都賣給了誰? .net平臺的rabbitmq使用封裝demo詳解 C++類的特種函數生成機制詳解
A级免费视频