中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

1 linux shell基礎

發布時間:2020-06-06 21:51:09 來源:網絡 閱讀:307 作者:chenshengsheng 欄目:系統運維

[TOC]

一,DAY1

1.什么是shell

  • shell是一個命令解釋器,提供用戶和機器之間的交互(shell腳本是shell的一種表現)

  • 支持特定語法,比如邏輯判斷、循環 (if,for,while)
  • 每個用戶都可以有自己特定的shell
    • root:x:0:0:root:/root:/bin/bash
  • CentOS7默認shell為bash(Bourne Agin Shell)
  • 還有zsh、ksh等

2.命令歷史

  • history命令
  • .bash_history 存放命令記錄的文件,如果終端非exit,logout正常退出,命令會記錄不全。
  • 最大1000條,默認1000條,可修改
  • 變量HISTSIZE, 查看 echo $HISTSIZE如果顯示超過1000,是因為命令暫時存在內存中,還沒寫進文件,history-c可清空內存里記錄,但是不會清除.bash_history里的記錄
  • /etc/profile中修改,要修改后立即生效重新進終端或執行 source /etc/profile
  • HISTTIMEFORMAT="%Y/%m/%d %H:%M:%S " 增加此變量,可記錄對應命令的執行時間, 例: 1005 2019/11/12 10:29:47 w
  • 永久保存 chattr +a ~/.bash_history 即使超過1000條也沒有權限刪除
  • !! 上一條命令
  • !n n是數字,執行history記錄里對應編號的命令
  • !word

3.命令補全和別名

  • tab鍵,敲一下,敲兩下
  • centos7支持參數補全,安裝yum install -y bash-completion 需要重啟系統生效 systemctl restart network
  • alias別名給命令重新起個名字 alias restartnet="systemctl restart network" 取消alias:unalias restartnet
  • 各用戶都有自己配置別名的文件 ~/.bashrc
  • ls /etc/profile.d/
  • 自定義的alias放到~/.bashrc

    # .bashrc
    
    # User specific aliases and functions
    
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    alias restartnet="systemctl restart network"
    # Source global definitions
    if [ -f /etc/bashrc ]; then
            . /etc/bashrc
    fi

4.通配符、輸入輸出重定向

  • ls *.txt
  • ls ?.txt
  • ls [0-9].txt
  • ls {1,2}.txt
  • cat 1.txt >2.txt
  • cat 1.txt >> 2.txt
  • ls aaa.txt 2>err //2>表示錯誤重定向
  • ls aaa.txt 2>>err //2>>表示錯誤追加重定向
  • &> 結合正確和錯誤的重定向
  • wc -l < 1.txt
  • command >1.txt 2>&1

二,DAY2

5.管道符和作業控制

  • cat 1.txt |wc -l ; cat 1.txt |grep 'aaa'
  • 把前的結果交給后面的命令
  • ctrl z 暫停一個任務
  • jobs查看后臺的任務
  • bg[id]把任務調到后臺
  • fg[id]把任務調到前臺
  • 命令后面加&直接丟到后臺 sleep 100 &

6.shell變量

  • PATH,HOME,PWD,LOGNAME 常風的一些系統變量
  • env命令,可以查看系統常用變量,系統變量名通常是大寫,變量值可以是數值,也可以是字符串
  • set命令多了很多變量,并且包括用戶自定義的變量
  • 自定義變量a=1
  • 變量名規則:字母、數字下劃線,首位不能為數字,可以a1=4 a_1=4 但是不可以1a=4
  • 變量值有特殊符號時需要用單引號括起來
    • a='a b c' 里面帶空格要用單引號括起來
      [root@mydb1 ~]# a="a$bc"
      [root@mydb1 ~]# echo $a
      a
      [root@mydb1 ~]# a='a$bc'
      [root@mydb1 ~]# echo $a
      a$bc
      在取值時,單引號和雙引號結果不一樣,所以在取值時要用單引號
  • 變量的累加,變量累加時要用雙引號
    [root@mydb1 ~]# a=1
    [root@mydb1 ~]# b=2
    [root@mydb1 ~]# echo $a$b
    12
    [root@mydb1 ~]# a='a$bc'
    [root@mydb1 ~]# echo $a$b
    a$bc2
    [root@mydb1 ~]# c="a$bc"
    [root@mydb1 ~]# echo $c
    a
    [root@mydb1 ~]# c="a$b"c
    [root@mydb1 ~]# echo $c
    a2c
  • 全局變量export b=2

    [root@mydb1 ~]# w
     14:44:15 up 24 days, 23:49,  2 users,  load average: 0.07, 0.04, 0.00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.1.182    10:18    7:11   0.37s  0.37s -bash
    root     pts/1    192.168.1.182    14:44    0.00s  0.03s  0.01s w
    [root@mydb1 ~]# echo $SSH_TTY  查看當前終端的tty
    /dev/pts/1
    [root@localhost ~]# yum -y install psmisc
    [root@localhost ~]# pstree
    systemd─┬─NetworkManager───2*[{NetworkManager}]
            ├─VGAuthService
            ├─agetty
            ├─auditd───{auditd}
            ├─crond
            ├─dbus-daemon───{dbus-daemon}
            ├─firewalld───{firewalld}
            ├─master─┬─pickup
            │        └─qmgr
            ├─polkitd───6*[{polkitd}]
            ├─rsyslogd───2*[{rsyslogd}]
            ├─sshd───sshd───bash───pstree
            ├─systemd-journal
            ├─systemd-logind
            ├─systemd-udevd
            ├─tuned───4*[{tuned}]
            └─vmtoolsd
    [root@localhost ~]# 
    [root@localhost ~]# 
    [root@localhost ~]# bash  //bash命令進入到子shell
    [root@localhost ~]# pstree
    systemd─┬─NetworkManager───2*[{NetworkManager}]
            ├─VGAuthService
            ├─agetty
            ├─auditd───{auditd}
            ├─crond
            ├─dbus-daemon───{dbus-daemon}
            ├─firewalld───{firewalld}
            ├─master─┬─pickup
            │        └─qmgr
            ├─polkitd───6*[{polkitd}]
            ├─rsyslogd───2*[{rsyslogd}]
            ├─sshd───sshd───bash───bash───pstree  //這里可以看出在子shell上執行了pstree命令
            ├─systemd-journal
            ├─systemd-logind
            ├─systemd-udevd
            ├─tuned───4*[{tuned}]
            └─vmtoolsd
    [root@localhost ~]# a=linux  
    [root@localhost ~]# echo $a
    linux
    [root@localhost ~]# bash
    [root@localhost ~]# echo $a    非全局變量下,進入子shell,無法獲取父shell中a=linux的值,這是因為在非全局變量下,當前定義的變量只在當前shell中生效,而不能在子shell生效
    
    [root@localhost ~]# export b=123  父shell下定義全局變量 b=123,這樣定義全局變量只在當前終端有效,重新打開新的終端無效。
    [root@localhost ~]# echo $b      
    123
    [root@localhost ~]# bash         進入子shell,仍然可以獲得父shell定義的b=123的值
    [root@localhost ~]# echo $b
    123
    [root@localhost ~]# export c=456  在子shell中定義c=456
    [root@localhost ~]# echo $c
    456
    [root@localhost ~]# exit    退出子shell進入父shell
    exit
    [root@localhost ~]# echo $c  在父shell中無法獲得在子shell中定義c=456的值,父shell與子shell的關系是從上到下的,而不能從下到上
    
  • unset變量,取消賦值, unset b unset 變量名

7.環境變量配置文件

  • 系統層面的環境變量,etc下的配置文件,全局生效
    • /etc/profile 用戶環境變量,交互,登錄才執行,輸入用戶名,ip,port,密碼就會自動加載,然后profile又會自動的調用bashrc。
    • /etc/bashrc 用戶不用登錄,執行shell就生效,只要執行shell腳本,就會調用bashrc里面的配置
  • 用戶層面的環境變量,在各個用戶的家目錄下
    • ~/.bashrc
    • ~/.bash_profile . .bash_profile或者source .bash_profile
    • ~/.bash_history
    • ~/.bash_logout 定義用戶退出時需要做出的一些動作,比如:退出時刪除命令歷史,就可把刪除歷史命令的命令,放在.bash_logout里面
    • PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ '
      • vim /etc/bashrc 里定義

        三,DAY3

8.特殊符號

  • * 任意個任意字符
  • ? 任意一個字符
  • # 注釋字符
  • \ 脫義字符 要使c='$a$b'的結果為$a$b除了加單引號,還可以使用脫意符c=\$a\$b。
  • | 管道符

9.幾個和管道有關的命令

  • cut 分割,-d 分隔符 -f 指定段號 -c 指定第幾個字符
    • 演示:
      [root@localhost ~]# cat /etc/passwd |head -2
      root:x:0:0:root:/root:/bin/bash
      bin:x:1:1:bin:/bin:/sbin/nologin
      [root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1
      root
      bin
      [root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
      root:x
      bin:x
      [root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,5
      root:root
      bin:bin
      [root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-5
      root:x:0:0:root
      bin:x:1:1:bin
      [root@localhost ~]# cat /etc/passwd |head -2 |cut -c 4
      t
      :
  • sort 排序, -n 以數字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2
    • 演示:
      [root@localhost ~]# cat /etc/passwd |head -4 |sort
      adm:x:3:4:adm:/var/adm:/sbin/nologin
      bin:x:1:1:bin:/bin:/sbin/nologin
      daemon:x:2:2:daemon:/sbin:/sbin/nologin
      root:x:0:0:root:/root:/bin/bash
      [root@localhost ~]# cat /etc/passwd |head -4 |sort -n
      adm:x:3:4:adm:/var/adm:/sbin/nologin
      bin:x:1:1:bin:/bin:/sbin/nologin
      daemon:x:2:2:daemon:/sbin:/sbin/nologin
      root:x:0:0:root:/root:/bin/bash
      [root@localhost ~]# cat /etc/passwd |head -4 |sort -nr
      root:x:0:0:root:/root:/bin/bash
      daemon:x:2:2:daemon:/sbin:/sbin/nologin
      bin:x:1:1:bin:/bin:/sbin/nologin
      adm:x:3:4:adm:/var/adm:/sbin/nologin
  • wc -l 統計行數 -m 統計字符數 -w 統計詞

    • 演示
      
      [root@localhost ~]# cat 1.txt 內容有6個字符
      123
      abc
      [root@localhost ~]# cat -A 1.txt 
      123$
      abc$
      [root@localhost ~]# wc -m 1.txt  
      8 1.txt   統計有8個字符,不要忘記隱藏的換行符

    [root@localhost ~]# cat 1.txt
    123
    abc ,f23
    [root@localhost ~]# wc -w 1.txt 統計多少個詞,以空格區分
    3 1.txt

  • uniq 去重, -c統計行數

    • 演示
      
      [root@localhost ~]# uniq 1.txt  直接uniq沒有去重
      123
      abc  ,f23
      123
      abc
      1
      2
      1

    [root@localhost ~]# sort 1.txt |uniq 去重首先要排序,uniq通常要與sort一起使用
    1
    123
    2
    abc
    abc ,f23

    [root@localhost ~]# sort 1.txt |uniq -c 先排序再去重再統計行數
    2 1
    2 123
    1 2
    1 abc
    1 abc ,f23

  • tee 和 &gt; 類似,重定向的同時還在屏幕顯示

    • 演示
      
      [root@localhost ~]# cat 1.txt 
      123
      abc  ,f23
      123
      abc
      1
      2
      1

    [root@localhost ~]# sort 1.txt |uniq -c |tee a.txt |tee的作用相當于>,但是它會把重定向的內容顯示在屏屏幕上
    2 1
    2 123
    1 2
    1 abc
    1 abc ,f23

    [root@localhost ~]# sort 1.txt |uniq -c |tee -a a.txt |tee -a 相當于>>
    2 1
    2 123
    1 2
    1 abc
    1 abc ,f23

    [root@localhost ~]# cat a.txt
    2 1
    2 123
    1 2
    1 abc
    1 abc ,f23
    2 1
    2 123
    1 2
    1 abc
    1 abc ,f23

  • tr 替換字符,tr 'a' 'b',大小寫替換tr '[a-z]' '[A-Z]'

    • 演示
      [root@localhost ~]# echo "aminglinux" |tr 'a' 'A'   替換單個
      Aminglinux
      [root@localhost ~]# echo "aminglinux" |tr '[al]' '[AL]'  替換多個
      AmingLinux
      [root@localhost ~]# echo "aminglinux" |tr '[a-z]' '[A-Z]'  替換指定范圍
      AMINGLINUX
      [root@localhost ~]# echo "aminglinux" |tr '[a-z]' '1'  也可以替換成數字
      1111111111
  • split 切割,-b大小(默認單位字節),-l行數, -d添加數字后綴

    • 演示
      [root@localhost test]# split -b 2M 2.txt 指定切割后每個文件的大小
      [root@localhost test]# ls
      2.txt  xaa  xab  xac  xad  xae
      [root@localhost test]# ll -h
      總用量 20M
      -rw-r--r--. 1 root root  10M 2月  24 08:57 2.txt
      -rw-r--r--. 1 root root 2.0M 2月  24 09:04 xaa
      -rw-r--r--. 1 root root 2.0M 2月  24 09:04 xab
      -rw-r--r--. 1 root root 2.0M 2月  24 09:04 xac
      -rw-r--r--. 1 root root 2.0M 2月  24 09:04 xad
      -rw-r--r--. 1 root root 2.0M 2月  24 09:04 xae
      [root@localhost test]# split -b 2M 2.txt 2019.  指定切割后每個文件的大小以及文件的前綴
      [root@localhost test]# ls
      2019.aa  2019.ab  2019.ac  2019.ad  2019.ae  2.txt  xaa  xab  xac  xad  xae
      [root@localhost test]# split -l 10000 2.txt 201911.   指定切割文件的行數以及文件的前綴
      [root@localhost test]# ls
      201911.aa  201911.ab  201911.ac  201911.ad  201911.ae  201911.af  201911.ag  201911.ah  2.txt

      10.shell特殊符號

  • $ 變量前綴,!$組合,正則里面表示行尾
  • ;多條命令寫到一行,用分號分割
    • 演示
      [root@localhost test]# for i in `seq 1 10`
      > do
      > echo $i
      > done
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      [root@localhost test]# for i in `seq 1 10`; do echo $i; done
      [root@localhost test]# ls 2.txt ; wc -l 2.txt 
      2.txt
      77517 2.txt
  • ~ 用戶家目錄,后面正則表達式表示匹配符
  • & 放到命令后面,會把命令丟到后臺
  • &gt; &gt;&gt; 2&gt; 2&gt;&gt; &&gt;
  • [ ] 指定字符中的一個,[0-9],[a-zA-Z],[abc]
  • || 和 && ,用于命令之間

    • 演示
      
      [root@localhost test]# ls 2.txt || wc -l 2.txt 
      2.txt
      [root@localhost test]# ls 2a.txt || wc -l 2.txt 
      ls: 無法訪問2a.txt: 沒有那個文件或目錄
      77517 2.txt
      || 如果前面執行成功,就不執行后面。如果前面執行不成功,才會執行后面

    [root@localhost test]# ls 2a.txt && wc -l 2.txt
    ls: 無法訪問2a.txt: 沒有那個文件或目錄
    [root@localhost test]# ls 2.txt && wc -l 2.txt
    2.txt
    77517 2.txt
    前面執行不成功,后面就不會去執行,前面執行成功,后面才會去執行

    [root@localhost test]# [ -d aminglinux ] || mkdir aminglinux
    [root@localhost test]# ls
    201911.aa 201911.ac 201911.ae 201911.ag 2.txt
    201911.ab 201911.ad 201911.af 201911.ah aminglinux
    [root@localhost test]# [ -d aminglinux ] && mkdir aminglinux
    mkdir: 無法創建目錄"aminglinux": 文件已存在

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

锦州市| 德庆县| 同仁县| 昭平县| 泽州县| 河东区| 平遥县| 惠来县| 南昌县| 高邑县| 湟中县| 南川市| 株洲县| 乌拉特中旗| 云浮市| 东丽区| 郧西县| 金昌市| 兴宁市| 宁南县| 邢台市| 涡阳县| 金平| 韶关市| 永昌县| 铜山县| 济南市| 清镇市| 金川县| 色达县| 柳江县| 阳信县| 将乐县| 彰化市| 平塘县| 昌邑市| 故城县| 泊头市| 万安县| 根河市| 江陵县|