日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

BigBrother的大数据之旅 Day 4 Linux(4)

發布時間:2023/12/20 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BigBrother的大数据之旅 Day 4 Linux(4) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習目標:

  • 掌握shell的基本語法
  • 變量
  • 本地變量:作用在當前shellscript中
  • 環境變量:作用在當前的shell(bash)及其子shell(bash)
  • 局部變量
  • 特殊變量 :$#, $?,位置變量:$1,$2,$3…
  • 條件判斷
  • if 。。elif。。。 else
  • 邏輯運算來做條件判斷: && 或者 ||
  • 條件表達式:數值比較,字符串,文件,權限。命令
  • 循環
  • for循環
  • while循環
  • 了解函數
  • 了解case語句
  • 1 bash編程

    Shell 圖形化和命令行兩種,一個用戶一旦登錄就默認打開 /bin/bash

    查看/etc/passwd最后一列就是用戶打開的那個程序,/bin/bash 或者 nolgin

    1.1 pstree命令

    ? Linux pstree命令將所有行程以樹狀圖顯示,樹狀圖將會以 pid (如果有指定) 或是以 init 為根

    ? 通過ssh鏈接后敲入改命令的結果如下:

    ? 通過本機敲入該命令的結果如下:

    1.2 bash

    ? Bash 是一個與 sh 兼容的命令解釋程序,可以執行從標準輸入或者文件中讀取的命令(解釋器),是許多Linux發行版的默認Shell(啟動器).

    ? 通俗地講,用命令行和linux交換的界面就是一個bash(可能不太準確哦),有解釋器和啟動器的功能.

    ? (1) source 命令 和 . 命令+文件

    ? 從當前bash執行命令或者腳本

    ? (2) bash命令 或者文件自己執行(./文件)

    ? 從子bash執行命令(重新打開一個bash)
    bash -x 文件 ,可以查看程序執行過程(debug)
    ? bash -n 文件,檢查是否有語法錯誤

    下面的test1中寫的為echo $$和pstree

    2 文件重定向

    2.1 fd

    ? 一個 Linux 進程啟動后,會在內核空間中創建一個 PCB 控制塊,PCB 內部有一個文件描述符表(File descriptor table),記錄著當前進程所有可用的文件描述符,也即當前進程所有打開的文件。

    文件描述符文件名類型硬件
    0stdin標準輸入文件鍵盤
    1stdout標準輸出文件顯示器
    2stderr標準錯誤輸出文件顯示器

    ? 0,1,2比較特殊,代表著標準輸入(鍵盤),標準輸出(顯示器)和錯誤輸出(顯示器)。一般指向于當前shell的終端,(包含輸入輸出設備).如果是本機的話是tty,ssh鏈接的話,指向的是ptsx(虛擬終端,x為數字,一般從0開始).他們都指向于dev下的設備文件.誰讓linux中一切皆文件呢.

    下圖為ssh登錄

    下圖為本地登錄

    ? 下面是每個進程的fd指向于文件表,但是實際的文件在節點表中,如果重定向就是把fd到文件表的指針指向其他地方.

    補充: 同一個進程的不同文件描述符可以指向同一個文件;
    不同進程可以擁有相同的文件描述符;
    不同進程的同一個文件描述符可以指向不同的文件(一般也是這樣,除了 0、1、2 這三個特殊的文件);
    不同進程的不同文件描述符也可以指向同一個文件

    2.2 輸出重定向

    ? 重定向不是命令

    ? 示例 /目錄下不存在/abb目錄下面是各種輸出重定向

    ? ls / 1>1.out : 把根目錄下的list信息輸出到1.out文件中

    ? ls /abb 2>2.out:把錯誤信息重定向到2.out文件中

    ? ls / /abb 1>3.out 2>4.out 把兩種信息重定向到不同文件

    ? ls / /abb 1>5.out 2>5.out 不能重定向到同一個文件,會覆蓋優先輸入的信息,該命令會覆蓋錯誤信息,文件中只有/目錄的 信息

    ? ls / /abb 1>6.out 2>&1 把1信息重定向到6.out 把錯誤信息重定向到1,不會覆蓋

    ? 簡單寫法為 ls / /abb &>7.out 或者 ls / /abb >& 7.out

    ? tips: > 前面沒有空格,除了上面的&> 或者 >&的寫法

    2.3 輸入重定向

    ? <<< : 讀取字符串 – read aad <<< “hello shell” 然后 echo $aad , 結果為hello shell

    ? <<結束符: read aad<<EX 從鍵盤輸入一些數據,遇到EX結束,第一行為aad的內容

    ? < : 讀取文件: cat 0</etc/passwd

    ? tips: wc -l </etc/passwd : 查看passwd文件有多少行

    3 shell編程

    3.1 shell變量

    環境變量:作用域為當前shell進程及其子進程;

    export VARNAME=VALUE

    VARNAME=VALUE

    export VARNAME “導出”

    查看本地環境變量: env命令

    Q:為什么每個用戶都可以使用 JAVA_HOME?

    A:是因為每次用戶登錄進來后,都會啟動~/.bashrc的文件,把變量export當前shell

    本地變量

    屬于當前bash ,比如LANG=zh_CN.UTF-8,如果輸入這個只是給當前bash設置了,其他沒有設置,再啟另一個,發現沒有改變LANG的值

    set VARNAME=VALUE: 作用域為整個bash進程;

    局部變量(local) 雖然叫local其實是局部變量

    屬于一個函數

    sxt(){

    echo “sxt1”

    local bbb =hello

    }

    local VARNAME=VALUE:作用域為當前代碼段;

    特殊變量

    $?: 上一個命令的執行狀態返回值;

    程序執行,可能有兩類返回值:

    ? 0: 正確執行

    ? 1-255:錯誤執行,1,2,127系統預留;

    $#:位置參數個數

    $*:參數列表,雙引號引用為一個字符串

    $@:參數列表,雙引號引用為單獨的字符串

    $ $ (兩個 $ 之間沒有空格啊): 腳本運行時的當前進程的ID號,有時候會作為臨時變量的后綴,haison.$$

    位置變量:(文件和函數中使用)

    $1,$2…

    vim a.test

    echo $1

    echo $2

    執行文件 source a.test a b

    屏幕的結果為 a 回車 b

    其他

    管道| 管道命令會開啟一個新的子bash,子bash會繼承父bash里面的變量的值在其他情況下不會,需要export一下

    ?引用:

    –雙引號:弱引用,參數擴展 ,把引號中的變量進行替換

    –單引號:強引用,不可嵌套,把引號中所有類容當成字符串

    -翻引號: `` 命令替換當成命令去執行

    –花括號擴展不能被引用

    –命令執行前刪除引用:加轉義字符

    3.2 shell 流程控制

    (1) (())和let

    (2) [ ] 和 test

    test -a + 文件 : 判斷文件是否存在

    test -d + 目錄或文件: 判斷對象是否是目錄

    test 3 -gt 2 : 判斷3 是否大于2 等價于 [ 3 -gt 2 ] – 記得3,2 前后都有空格哦

    test 3 -lt 8: 判斷3是否小于8 等價于 [ 3 -lt 8 ]

    test 3 -le 3:判斷3是否小于等于3

    ps: 這些結果可以用 echo $? 查看命令的結果,本身沒有任何輸出
    [ -e 文件] :測試文件是否存在

    [ -f 文件] :測試文件是否是普通文件

    [ -d 目錄] :測試文件是否是目錄

    [ -n string ] : 判斷字符串是否為空

    [ -s string ] : 判斷字符串是否不空

    == ,!= 等號兩端需要空格

    (2.5補充) 表達式

    a: [ expression ] – 使用 -a 進行邏輯與 ,使用 -o 進行邏輯或*
    ? 例如 if [ $# -gt 1 -a $# -lt 3 -o $# -eq 2 ];

    b: test expression

    c: 任何一個命令都可以作為條件表達式
    其實就是(2)中的內容多了最下面的一條

    (3) 創建用戶的腳本

    #! /bin/bash

    useradd $1

    echo $1 | passwd --stdin $1 – 設置與用戶名相同的密碼

    echo “add user successfully”

    (4) 控制語句

    if ;then;else;fi

    if test 3 -gt 2;then echo ok;else echo ook;fi – 如果3大于2,就輸出ok,不大于輸出ook

    for((;; ));do;done – (())里面的東東和java中類似,不用-gt -lt等直接用> <等就行

    for((a=1;a<5;a++));do echo $a;done echo"haha" – 輸出1-5的數字,最后輸出haha

    加強for循環 for in 1 2 3 4 5;do echo $i;done

    輸出1-5的最簡單的寫法為 seq 5

    while(());do;done 和for一樣的 也可以 寫為 while [ ];do;done [ ]中寫條件 這里就需要寫成-gt的格式了
    ps: set ts = 4 設置tab為4個字符

    case 語句
    case 變量 in
    value1)
    語句
    ;;
    value2)
    語句
    ;;
    *) – 默認(其他情況)
    語句
    ;;
    esac

    tips: /dev/null 為"黑洞文件"可以把輸出重定向"吃掉" 如 echo “ha” > /dev/null

    shadow文件: 加密密碼后的第一個數字為用戶創建時間,距離1970年的天數,密碼最小使用天數,密碼最大使用天數,密碼距離最大使用天數前多少天進行警告.

    (5)算數運算符

    a: let 算數運算符表達式

    ? let c=$ A+$ B

    b: $[算術表達式]

    ? C = $ [$ A+$ B]

    c: $((算術表達式))

    ? C=$ (($ A+$B))

    d:expr 算術表達式1、
    注意:表達式中各操作數及運算符之間要有空格。而且要使用命令引用

    ? C = expr $A+$B

    (6)函數

    函數的定義

    function 函數名(){

    }

    1 function可以省略,()不能省略,

    2小括號中不能定義參數

    3 函數體中可以定義函數,叫嵌套函數

    4 函數體中可以寫return,只能返回0-255之間的數字,代表當前函數的執行狀態,如果沒有retrun,執行狀態為最后一行命令的狀態

    函數的調用

    函數名就行,不要寫小括號

    給函數進行傳遞參數, 例如test(){

    ? echo $1

    }

    函數調用test 100,如果在腳本中寫,函數不能直接獲取從鍵盤中輸入的值

    vim /etc/inittab

    0 關閉模式

    1 單機

    2 無網絡

    3 默認為3的,完整模式

    4 自定義

    5 圖形化界面

    6 重啟

    chkconifg 345 10 90 :在3,4,5級別上啟用,10啟動的優先級 越小越優先,一般調整到比較靠后的比如99,90為關閉的優先級

    chkconfig tomcat on 加入開機

    chkconifg --list 查看列表

    參考文章:

    1 關于fd(這篇文章寫得很好)

    http://c.biancheng.net/view/3066.html

    總結

    以上是生活随笔為你收集整理的BigBrother的大数据之旅 Day 4 Linux(4)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。