Linux基礎命令-Nginx-正則表達式( grep sed awk )-Shell Script--etc

Linux基礎使用

學習內容博客html

內存

  • 查看swap分區信息 > swapon -s
  • 添加swap分區 > mkswap /dev/sdb2 > 激活 swapon -a /dev/sdb2 便可
  • 移除swap分區 > swapoff /dev/sdb2
  • 查看系統版本 > cat /etc/redhat-release > more /etc/*release 能夠看到更多信息
  • buffer A buffer is something that has yet to be "written" to disk
  • cache A cache is something that has been "read" from the disk and stored for late use
  • 清理cache > echo 3 > /proc/sys/vm/drop_caches
  • echo $[88316+8764] 進行簡單的計算(+-*/)
  • total-used=free+buff/cache 內存就是用來分buffer和cache的
  • dd if=/dev/zero of=/root/test bs=50M count=1 測試磁盤速度,zero爲空文件

進程管理

  • ps aux 查看全部進程 > grep過濾的意思
  • 查看特定的進程 > ps aux | grep firefox
  • 殺死進程 > kill -9 3489 ( 9表示強制殺) 或者 pkill -9 firefox
  • firefox & 即命令後接&在後臺啓動,在當前終端使用jobs能夠查看工做號 > kill -9 %1使用工做號殺
  • centos7最小化安裝沒有ptree (樹型顯示當前運行的進程),須要安裝yum install psmisc
  • pgrep sshd 直接顯示包含sshd的進程的PID號

軟件包管理

  • rpm -ivh rpm文件名 i 安裝, v 顯示安裝信息, h顯示進度條 後接--nodeps忽略以來,--force覆蓋安裝node

  • rpm -qi 軟件名 查看軟件的詳細信息 ,q 表示查詢, i informationpython

  • rpm -ql 軟件名 查看軟件位置, l 表示位置linux

  • rpm -qf 文件名 查看該文件是由哪一個軟件包產生的ios

  • 查看命令對應的文件的真實位置 which lsnginx

  • rpm -qa 顯示所有安裝的rpm包,跟grep結合驗證是否安裝了某個包,rpm -qa | grep vsftp 或者 rpm -q vsftpd 必須知道軟件包全名正則表達式

  • ls ----> /etc/usr/ls --color=auto 這是流程 ,alias s='ls' 爲ls命令起別名, 永久的話修改vim /etc/bashrc 或者vim /etc/profileshell

  • rpm -e 軟件包名 卸載軟件vim

  • rpm -e `rpm -qa \grep vsftp 這裏反引號的做用是把後面的結果看做變量做爲前面的輸入centos

  • rpm安裝對依賴性問題很差解決,須要先手動安裝依賴包,yum自動解決依賴性

  • 手動配置yum源,事先將完整的光盤掛載到/opt,移走原有的repo,而後 vi /etc/yum.repos.d/loal.repo

    [local]
    name=local.repo
    baseurl=file:///opt   #能夠本地也能夠網上
    enable=1
    gpgcheck=0

    yum clean all清除緩存後就能夠用本身配置的yum源安裝yum -y install xxxxx

  • yum erase xxx刪除已經安裝的軟件 或 yum remove xxx

  • yum install epel-*安裝擴展源

  • yum makecache建立緩存提升下次裝軟件的速度

  • 要想保留yum下載的rpm包,須要更改設置vim /etc/yum.conf

    cachedir=/root/rpm_bak   #路徑本身設置
    keepcache=1   #0改成1
  • 部署本身的yum倉庫

    1. 新建倉庫文件夾mkdir /repo_httpd
    2. 將全部依賴包和該rpm包放在這個文件夾中,方法如上一條所示
    3. 建立依賴關係createrepo /repo_httpd, 以後在該文件夾中生成repodata文件夾
    4. 手動配置yum源,如以前所示, 其中baseurl=file:///repo_httpd
    5. 同理修改baseurl=http://xxxxx能夠自定義網絡yum源
  • yum grouplist列出有哪些軟件包組, yum groupinstall "開發工具"安裝開發工具

  • wget --no-check-certificate https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz下載,tar xvf Python-3.6.1.tgz解壓,進入目錄,configure爲安裝配置文件,爲了生成makefile文件,./configure --prefix=/usr/local/python3.6 , 而後 make && make install 編譯並安裝,報錯的話缺啥裝啥yum install zlib*

  • PATH=/usr/local/python3.6/bin:$PATH 設置臨時的環境變量, 永久的話vim /etc/profile在末尾加上

    PATH=/usr/local/python3.6/bin:$PATH
    export PATH
  • yum update所有更新包括配置和內核,yum upgrade只更新軟件包

  • 安裝yum install sysstat*裏面有查看運行信息的軟件vmstat iostat

  • 安裝yum install net-tools ,執行netstat -tunalp 查看端口詳細信息 能夠netstat -tunalp | grep 22查看目的端口 。另外sar啥也能看

n g i n x

  • yum install nginx 安裝

  • 寫配置 vim /etc/nginx/nginx.conf 摘取部分以下

    worker_processes auto;  #自動檢測CPU數目,幾個CPU開幾個進程
    error_log /var/log/nginx/error.log;  #錯誤日誌
    include /usr/share/nginx/modules/*.conf;  #包含的模塊
    events {  #一個進程開多少線程
        worker_connections 1024;
    }
    http {
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        #日誌格式
        access_log  /var/log/nginx/access.log  main;
        #訪問日誌,以main格式寫入
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
    
        include             /etc/nginx/mime.types;
        default_type        application/octet-stream;
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
        #包含的配配置文件
        server {  #核心配置
            listen       80 default_server;  #監聽端口號
            listen       [::]:80 default_server;
            server_name  _;
            root         /usr/share/nginx/html;  #Web根目錄
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {  #匹配/a/b/c/d.txt,若以/開頭則匹配這個配置,沒有內容則按全局配置
    
            }
        }
  • URL 統一資源定位符 11.12.13.14:80 找到惟一的一個軟件

  • URI 統一資源標識符 /a/b/c/d.txt 找到惟一的一個文件 /usr/share/nginx/html/a/b/c/d.txt

  • systemctl start nginx 啓動nginx status查看狀態

  • systemctl stop firewalld 關閉防火牆,systemctl disable firewalld開機不啓動,enable開機啓動, iptables -F 清除防火牆配置

  • tail -f /var/log/nginx/access.log動態查看日誌文件

反向代理

  1. 將虛擬機拷貝3個提供Web功能,原虛擬機提供反向代理

  2. 按照官網的手冊 Using nginx as HTTP load balancer 配置提供反向代理的機器

  3. 爲實現數據的一致,給幾臺Web服務器提供共享存儲 如 NFS,文件存儲

    對象存儲--->像網盤同樣,下載下來修改再上傳覆蓋,經過URI定位。 塊存儲 ---> 相似一整塊磁盤

  4. 能夠給NFS服務器專門掛載一塊硬盤

  5. 臨時配置IP地址 ifconfig 網卡名 IP地址

  6. ##服務端配置
    [root@localhost ~]# mkdir /share   #新建文件夾
    [root@localhost ~]# mount /dev/sdb1 /share/^C    #掛載一塊硬盤
    [root@localhost ~]# touch /share/share.txt   
    [root@localhost ~]# echo 'hello share' > /share/share.txt
    [root@localhost ~]# vim /etc/exports #編輯配置文件
    [root@localhost ~]# cat /etc/exports
    /share 192.168.58.0/24(rw,sync,fsid=0)  #配置文件內容
    [root@localhost ~]# chmod -R o+w /share #爲文件夾添加權限
    [root@localhost ~]# systemctl start rpcbind.service  #先開啓RPC服務
    [root@localhost ~]# systemctl start nfs-server.service  #再開啓NFS服務
    [root@localhost ~]# systemctl enable nfs-server.service  #設置開機啓動
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
    [root@localhost ~]# systemctl enable rpcbind.service
  7. ##客戶端配置
    [root@localhost ~]# systemctl enable rpcbind.service && systemctl enable nfs-server.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.  #開機啓動
    [root@localhost ~]# showmount -e 192.168.58.129 #查看共享服務
    Export list for 192.168.58.129:
    /share 192.168.58.0/24
    [root@localhost ~]# mount -t nfs 192.168.58.129:/share /usr/share/nginx/html/ #掛載
    [root@localhost ~]# ls /usr/share/nginx/html/ #查看掛載後文件內容
    share.txt
    [root@localhost ~]# df |grep 129 #查看磁盤信息
    192.168.58.129:/share 18351104 2376448 15974656   13% /usr/share/nginx/html
  8. nginx

網絡配置

ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>#功能#  mtu 1500#最大傳輸單元,字節單位#
        inet 192.168.58.129  netmask 255.255.255.0  broadcast 192.168.58.255
        inet6 fe80::c00d:cb8b:4aed:6cc7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1c:9a:5a#MAC地址#  txqueuelen 1000  (Ethernet)
        RX packets 3422  bytes 444096 (433.6 KiB) #收了多少包#
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2374  bytes 418819 (409.0 KiB) #傳了多少包#
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20  bytes 1524 (1.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20  bytes 1524 (1.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • ifconfig ens33 192.168.58.200/24手動配置IP地址, 24表示子網掩碼255.255.255.0

  • vim /etc/resolv.conf 修改DNS信息 nameserver 192.168.58.2

  • route add default gw 192.168.58.254 netmask 255.255.255.0添加網關,route -n查看路由信息, del爲刪除

    [root@localhost share]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.58.2    0.0.0.0         UG    100    0        0 ens33  #不一個子網
    192.168.58.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33  #同一個自網內
  • 要想永久修改 cd /etc/sysconfig/network-scripts/ 該目錄下有不少配置信息 vim ifcfg-ens33

    TYPE=Ethernet
    BOOTPROTO=static
    IPADDR=192.168.58.200
    NETMASK=255.255.255.0
    GATEWAY=192.168.58.254
    DNS1=192.168.58.254
    DNS2=114.114.114.114
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=2ceec922-bd48-4fcb-8c96-56a288ddb680
    DEVICE=ens33
    ONBOOT=yes #開機激活網卡

    重啓網絡服務systemctl restart network 便可

  • vim /etc/hosts 修改hosts

  • [root@localhost network-scripts]# hostnamectl set-hostname centostest #設置hostname
    [root@localhost network-scripts]# hostname #查看hostname
    centostest

SSH

  • [root@localhost ~]# ssh 192.168.58.129  #登陸默認root  實際ssh root@192.168.58.129
    The authenticity of host '192.168.58.129 (192.168.58.129)' can't be established.
    ECDSA key fingerprint is 82:68:11:05:e9:98:f9:bb:df:a1:02:e2:72:59:cb:0e.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.58.129' (ECDSA) to the list of known hosts.
    root@192.168.58.129's password:    #輸入密碼
    Last login: Mon Apr  3 22:48:51 2017 from 192.168.58.1
    [root@centostest ~]#    #SSH登陸成功,先後主機名不同
  • scp遠程複製文件

    [root@centostest ~]# scp /etc/hosts 192.168.58.131:/tmp  #遠程複製,也可用域名,先後位置可換 -r目錄
    The authenticity of host '192.168.58.131 (192.168.58.131)' can't be established.
    ECDSA key fingerprint is 82:68:11:05:e9:98:f9:bb:df:a1:02:e2:72:59:cb:0e.
    Are you sure you want to continue connecting (yes/no)? y
    Please type 'yes' or 'no': yes
    Warning: Permanently added '192.168.58.131' (ECDSA) to the list of known hosts.
    root@192.168.58.131's password:  #輸入密碼
    hosts                                                  100%  159     0.2KB/s   00:00 #複製成功
  • 在客戶端把SSH密鑰生成 ssh-keygen 以後在/root/.ssh/目錄下有生成的信息id_rsa.pub

  • 把密鑰等發給服務端 ssh-copy-id -i 192.168.58.131 以後在服務端的相同路徑下會找到相關文件authorized_keys , 即發給了root用戶目錄下,如發給其餘用戶能夠在該用戶目錄下找到公鑰

  • 以後客戶端直接ssh 192.168.58.131不須要輸入密碼便可登錄成功

  • 配置文件在vim /etc/ssh/sshd_config 。若服務端更改端口爲8888,以上發送密鑰時須要ssh-copy-id -i id_rsa.pub 192.168.58.131 -p 8888 ,鏈接時ssh 192.168.58.131 -p 8888 便可

bash

學習內容博客

  • source a.sh沒加權限也能夠執行

  • 命令優先級

    1. alias #alias查看當前的別名 alias ppp='ls -l'設置 unalias ppp取消
    2. compound commands #if for while
    3. function #function ppp() { echo hello;echo bash; }定義 ppp執行 set查看當前函數 unset ppp清除
    4. build_in #內建 如cd
    5. hash #hash查看 hash -r清除
    6. $PATH #路徑
    7. error:command not found
  • 通配符

    $[] #運算 同$(())
    $()  #同``同樣
    ${}  #
    % 取餘
    ^  ! #取反
    &  #後臺運行
    && 與
    | 管道
    || 或
    * 任意
    ? 任意一個
    = 賦值
    == 判斷是否相等
    [ $x == $y ]  ---> test 
    echo $? 取上一條命令的執行結果
    \  ---> "$x"軟引用,取值  '$x'硬引用,$沒有其餘意義
    : 永遠爲真,常與while連用
    ; 命令分割
    / 路徑分割符
    >> 追加
    > 覆蓋​

固化命令的方式

#以登陸的方式加載順序
/etc/profile
/etc/profile.d/a.sh
/root/.bash_profile
/root/.bashrc
/etc/bashrc

#不登陸的方式加載順序
/root/.bashrc
/etc/bashrc
/etc/profile.d/a.sh

正則表達式

學習內容博客

grep ----

  1. 經常使用參數

    -n  :顯示行號
    -e  :指定多個規則
    -o  :只顯示匹配的內容
    -q  :靜默模式,沒有任何輸出,得用echo $?來判斷執行成功(0)沒有,即有沒有過濾到想要的內容
    -l  :若是匹配成功,則只將文件名打印出來,失敗則不打印,一般-rl一塊兒用,grep -rl 'root' /etc 
    -A  :若是匹配成功,則將匹配行及其後n行一塊兒打印出來 如 grep -A 2 'root' test.txt
    -B  :若是匹配成功,則將匹配行及其前n行一塊兒打印出來
    -C  :若是匹配成功,則將匹配行及其先後n行一塊兒打印出來
    --color
    -c  :若是匹配成功,則將匹配到的行數打印出來
    -E  :等於egrep,擴展
    -i  :忽略大小寫
    -v  :取反,不匹配
    -w:匹配單詞
    
    例:過濾掉無用的行,包括註釋和空格
    grep -v '^#' /etc/ssh/sshd_config | grep -v '^ *$'
  2. 正則表達式

    ^    行首
    $    行尾
    .    除了換行符之外的任意單個字符
    *    前導字符的零個或多個
    .*   全部字符
    []   字符組內的任一字符  #若要匹配-須要放在最後\-
    [^]  對字符組內的每一個字符取反(不匹配字符組內的每一個字符)
    ^[^] 非字符組內的字符開頭的行
    [a-z] 小寫字母  
    [A-Z] 大寫字母
    [a-Z] 小寫和大寫字母
    [0-9] 數字
    \<   單詞頭 單詞通常以空格或特殊字符作分隔,連續的字符串被當作單詞
    \>   單詞尾
    ? 前導字符零個或一個
    + 前導字符一個或多個
    abc|def abc或def
    a(bc|de)f abcf 或 adef
    x\{m\} x出現m次     #egrep不加\
    x\{m,\} x出現m次至屢次(至少m次)
    x\{m,n\} x出現m次至n次

    sed ---- 流編輯器 stream editer,是以行爲單位的處理程序

sed [options] 'command' in_file[s]
options 部分
-n  靜默模式,不顯示默認輸出
-e  指定多個規則
-i  直接修改原文件
-f  指定匹配規則文件
command 部分
'[地址1,地址2] [函數] [參數(標記)]'
//裏面正則表達式定址
例: sed -r '1 s/()()()/\1\2\3/g' passwdbk  1表示定位第幾行,g表示把這一行的全部匹配的都修改了,括號表示第幾部分,後面的\1表示第一部分顯示的位置

awk ---- 處理有格式的文件 !!!!!!

awk [options] 'commands' files
option
-F 定義字段分隔符,默認的分隔符是連續的空格或製表符
使用option中的-F參數定義間隔符號
用$1,$2,$3等的順序表示files中每行以間隔符號分隔的各列不一樣域 例:awk -F: '{print $1,$4}' passwdbk $0全部
NF變量表示當前記錄的字段數  可用 $NF 取最後一段
NR表示行號 例: awk -F: 'NR>=3 && NR<=5{print NR,"----",$1}' passwdbk   ||或
//裏面正則表達式定址 例 awk -F: '/nologin$/{print $1}' passwdbk
讓某一部分匹配正則 awk -F: '$1~/^r.*t$/{print $NF}' passwdbk
-v 定義變量並賦值 也能夠借用次方式從shell變量中引入
例:
count=7
awk -v x=$count -F: '$3 >= x{print $1}' passwdbk

addr=`ifconfig |awk 'NR==2{print $2}'` 取IP地址

其餘命令

du -sh /boot/   #統計目錄大小
cat test |sort |uniq -c #排序去重,c顯示重複的行數
cat /etc/passwd |cut -d: -f2,3 #d表示以什麼分割 f指定取第幾部分 可做爲awk的簡單模式
dd if=/dev/zero of=/test.ha bs=20M count=1 #新建一個指定大小的文件
find / -size +10M -size -30M -type f -name \*.ha #在/目錄下尋找文件大小>10M且<30M,類型爲普通文件,後綴名爲ha的文件
grep -rl 'root' /etc #在/etc目錄下尋找文件內含有'root'的文件並把文件名輸出,r表示遞歸,l表示顯示文件名

shell script

學習內容博客

中括號 [] 至關於 test

獲取當前內存使用率:
mem_per=`echo "scale=2;$mem_used/$mem_total" | bc -l | cut -d. -f2` #scale保留幾位小數,bc浮點運算
echo ${mem_per}%

$$ 進程PID
$* 全部參數
$# 參數個數

當nginx關閉時開啓nginx
#!/bin/bash
var=`systemctl status nginx| awk 'NR==3{print $2}'`
if [ $var = inactive ]
    then
        systemctl start nginx
fi

將x.sh文件移動到/usr/bin/目錄下能夠在任何位置使用x執行改腳本

計劃任務

學習內容博客

rondtab -e -u root  #e表示編輯 u表示用戶
在計劃任務中全部命令都使用絕對路徑!!!

------------本地有md文件備份----------

-----------------end------------------

相關文章
相關標籤/搜索