<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    shell編程15例(三)

    VSole2022-03-25 07:43:19

    1、統計當前 Linux 系統中可以登錄計算機的賬戶有多少個

    #!/bin/bash
    
    # 統計當前 Linux 系統中可以登錄計算機的賬戶有多少個
    #方法 1:
    grep "bash$" /etc/passwd | wc -l
    #方法 2:
    awk -f: '/bash$/{x++}end{print x}'  /etc/passwd
    

    2、統計/var/log 有多少個文件,并顯示這些文件名

    #!/bin/bash
    
    # 統計/var/log 有多少個文件,并顯示這些文件名 
    # 使用 ls 遞歸顯示所有,再判斷是否為文件,如果是文件則計數器加 1
    cd  /var/log
    sum=0
    for i in `ls -r *`
    do
       if [ -f $i ];then
           let sum++
             echo "文件名:$i"
         fi
    done
    echo "總文件數量為:$sum"
    

    3、自動為其他腳本添加解釋器信息

    #!/bin/bash
    
    # 自動為其他腳本添加解釋器信息#!/bin/bash,如腳本名為 test.sh 則效果如下: 
    # ./test.sh  abc.sh  自動為 abc.sh 添加解釋器信息
    # ./test.sh  user.sh  自動為 user.sh 添加解釋器信息
     
    # 先使用 grep 判斷對象腳本是否已經有解釋器信息,如果沒有則使用 sed 添加解釋器以及描述信息
    if  !  grep  -q  "^#!"  $1; then
    sed  '1i #!/bin/bash'  $1
    sed  '2i #Description: '
    fi
    # 因為每個腳本的功能不同,作用不同,所以在給對象腳本添加完解釋器信息,以及 Description 后還希望
    # 繼續編輯具體的腳本功能的描述信息,這里直接使用 vim 把對象腳本打開,并且光標跳轉到該文件的第 2 行
    vim +2 $1
    

    4、自動化部署 varnish 源碼包軟件

    #!/bin/bash
    
    # 自動化部署 varnish 源碼包軟件 
    # 本腳本需要提前下載 varnish‐3.0.6.tar.gz 這樣一個源碼包軟件,該腳本即可用自動源碼安裝部署軟件
     
    yum -y install gcc readline‐devel pcre‐devel
    useradd -s /sbin/nologin varnish
    tar -xf varnish‐3.0.6.tar.gz
    cd varnish‐3.0.6
     
    # 使用 configure,make,make install 源碼安裝軟件包
    ./configure ‐‐prefix=/usr/local/varnish
    make && make install
     
    # 在源碼包目錄下,將相應的配置文件拷貝到 Linux 系統文件系統中
    # 默認安裝完成后,不會自動拷貝或安裝配置文件到 Linux 系統,所以需要手動 cp 復制配置文件
    # 并使用 uuidgen 生成一個隨機密鑰的配置文件
     
    cp redhat/varnish.initrc /etc/init.d/varnish
    cp redhat/varnish.sysconfig /etc/sysconfig/varnish
    cp redhat/varnish_reload_vcl /usr/bin/
    ln -s /usr/local/varnish/sbin/varnishd /usr/sbin/
    ln -s /usr/local/varnish/bin/* /usr/bin
    mkdir /etc/varnish
    cp /usr/local/varnish/etc/varnish/default.vcl /etc/varnish/
    uuidgen > /etc/varnish/secret
    

    5、編寫 nginx 啟動腳本

    #!/bin/bash
    
    # 編寫 nginx 啟動腳本 
    # 本腳本編寫完成后,放置在/etc/init.d/目錄下,就可以被 Linux 系統自動識別到該腳本
    # 如果本腳本名為/etc/init.d/nginx,則 service nginx start 就可以啟動該服務
    # service nginx stop 就可以關閉服務
    # service nginx restart 可以重啟服務
    # service nginx status 可以查看服務狀態
     
    program=/usr/local/nginx/sbin/nginx
    pid=/usr/local/nginx/logs/nginx.pid
    start(){
    if [ -f $pid ];then
      echo  "nginx 服務已經處于開啟狀態"
    else
      $program
    fi
    stop(){
    if [ -! -f $pid ];then
      echo "nginx 服務已經關閉"
    else
      $program -s stop
      echo "關閉服務 ok"
    fi
    }
    status(){
    if [ -f $pid ];then
      echo "服務正在運行..."
    else
      echo "服務已經關閉"
    fi
    }
     
    case $1 in
    start)
      start;;
    stop)
      stop;;
    restart)
      stop
      sleep 1
      start;;
    status)
      status;;
    *)
      echo  "你輸入的語法格式錯誤"
    esac
    

    6、自動對磁盤分區、格式化、掛載

     #!/bin/bash
     
    # 自動對磁盤分區、格式化、掛載
    # 對虛擬機的 vdb 磁盤進行分區格式化,使用<<將需要的分區指令導入給程序 fdisk
    # n(新建分區),p(創建主分區),1(分區編號為 1),兩個空白行(兩個回車,相當于將整個磁盤分一個區)
    # 注意:1 后面的兩個回車(空白行)是必須的!
    fdisk /dev/vdb << EOF
    n
    p
    1
     
     
    wq
    EOF
     
    #格式化剛剛創建好的分區
    mkfs.xfs   /dev/vdb1
     
    #創建掛載點目錄
    if [ -e /data ]; then
    exit
    fi
    mkdir /data
     
    #自動掛載剛剛創建的分區,并設置開機自動掛載該分區
    echo '/dev/vdb1     /data    xfs    defaults        1 2'  >> /etc/fstab
    mount -a
    
    

    7、自動優化 Linux 內核參數

    #!/bin/bash
    
    # 自動優化 Linux 內核參數
     
    #腳本針對 RHEL7
    cat >> /usr/lib/sysctl.d/00‐system.conf <fs.file‐max=65535
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_synack_retries = 5
    net.ipv4.tcp_syn_retries = 5
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    #net.ipv4.tcp_keepalive_time = 120
    net.ipv4.ip_local_port_range = 1024  65535
    kernel.shmall = 2097152
    kernel.shmmax = 2147483648
    kernel.shmmni = 4096
    kernel.sem = 5010 641280 5010 128
    net.core.wmem_default=262144
    net.core.wmem_max=262144
    net.core.rmem_default=4194304
    net.core.rmem_max=4194304
    net.ipv4.tcp_fin_timeout = 10
    net.ipv4.tcp_keepalive_time = 30
    net.ipv4.tcp_window_scaling = 0
    net.ipv4.tcp_sack = 0
    EOF
     
    sysctl –p
    
    

    8、切割 Nginx 日志文件(防止單個文件過大,后期處理很困難)

    #mkdir  /data/scripts
    #vim   /data/scripts/nginx_log.sh  
    #!/bin/bash
    
    # 切割 Nginx 日志文件(防止單個文件過大,后期處理很困難) 
    logs_path="/usr/local/nginx/logs/"
    mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
    kill -USR1  `cat /usr/local/nginx/logs/nginx.pid`
     
    # chmod +x  /data/scripts/nginx_log.sh
    # crontab  ‐e                    #腳本寫完后,將腳本放入計劃任務每天執行一次腳本
    0  1  *  *   *   /data/scripts/nginx_log.sh
    

    9、檢測 MySQL 數據庫連接數量

    #!/bin/bash
    
    # 檢測 MySQL 數據庫連接數量 
     
    # 本腳本每 2 秒檢測一次 MySQL 并發連接數,可以將本腳本設置為開機啟動腳本,或在特定時間段執行
    # 以滿足對 MySQL 數據庫的監控需求,查看 MySQL 連接是否正常
    # 本案例中的用戶名和密碼需要根據實際情況修改后方可使用
    log_file=/var/log/mysql_count.log
    user=root
    passwd=123456
    while :
    do
        sleep 2
        count=`mysqladmin  -u  "$user"  -p  "$passwd"   status |  awk '{print $4}'`
        echo "`date +%Y‐%m‐%d` 并發連接數為:$count" >> $log_file
    done
    

    10、根據 md5 校驗碼,檢測文件是否被修改

    #!/bin/bash
    
    # 根據 md5 校驗碼,檢測文件是否被修改 
    # 本示例腳本檢測的是/etc 目錄下所有的 conf 結尾的文件,根據實際情況,您可以修改為其他目錄或文件
    # 本腳本在目標數據沒有被修改時執行一次,當懷疑數據被人篡改,再執行一次
    # 將兩次執行的結果做對比,MD5 碼發生改變的文件,就是被人篡改的文件
    for i in $(ls /etc/*.conf)
    do
      md5sum "$i" >> /var/log/conf_file.log
    done
    

    11、檢測 MySQL 服務是否存活

    #!/bin/bash
    
    # 檢測 MySQL 服務是否存活 
     
    # host 為你需要檢測的 MySQL 主機的 IP 地址,user 為 MySQL 賬戶名,passwd 為密碼
    # 這些信息需要根據實際情況修改后方可使用
    host=192.168.51.198
    user=root
    passwd=123456
    mysqladmin -h '$host' -u '$user' -p'$passwd' ping &>/dev/null
    if [ $? -eq 0 ]
    then
            echo "MySQL is UP"
    else
            echo "MySQL is down"
    fi
    
    

    12、備份 MySQL 的 shell 腳本(mysqldump版本)

    #!/bin/bash
    
    # 備份 MySQL 的 shell 腳本(mysqldump版本) 
     
    # 定義變量 user(數據庫用戶名),passwd(數據庫密碼),date(備份的時間標簽)
    # dbname(需要備份的數據庫名稱,根據實際需求需要修改該變量的值,默認備份 mysql 數據庫)
     
    user=root
    passwd=123456
    dbname=mysql
    date=$(date +%Y%m%d)
     
    # 測試備份目錄是否存在,不存在則自動創建該目錄
    [ ! -d /mysqlbackup ] && mkdir /mysqlbackup
    # 使用 mysqldump 命令備份數據庫
    mysqldump -u "$user" -p "$passwd" "$dbname" > /mysqlbackup/"$dbname"-${date}.sql
    

    13、將文件中所有的小寫字母轉換為大寫字母

    #!/bin/bash
    
    # 將文件中所有的小寫字母轉換為大寫字母 
     
    # $1是位置參數,是你需要轉換大小寫字母的文件名稱
    # 執行腳本,給定一個文件名作為參數,腳本就會將該文件中所有的小寫字母轉換為大寫字母
    tr "[a‐z]" "[A‐Z]" < $1
    
    

    14、非交互自動生成 SSH 密鑰文件

    #!/bin/bash
    
    # 非交互自動生成 SSH 密鑰文件 
     
    # ‐t 指定 SSH 密鑰的算法為 RSA 算法;‐N 設置密鑰的密碼為空;‐f 指定生成的密鑰文件>存放在哪里
    rm  -rf  ~/.ssh/{known_hosts,id_rsa*}
    ssh‐keygen -t RSA -N '' -f ~/.ssh/id_rsa
    

    15、檢查特定的軟件包是否已經安裝

    #!/bin/bash
    
    # 檢查特定的軟件包是否已經安裝 
    if [ $# -eq 0 ];then
      echo "你需要制定一個軟件包名稱作為腳本參數"
      echo "用法:$0 軟件包名稱 ..."
    fi
    # $@提取所有的位置變量的值,相當于$*
    for package in "$@"
    do
        if rpm -q ${package} &>/dev/null ;then
        echo -e "${package}\033[32m 已經安裝\033[0m"
        else
        echo -e "${package}\033[34;1m 未安裝\033[0m"
        fi
    done
    
    linux腳本varnish
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    shell編程15例(三)
    2022-03-25 07:43:19
    1、統計當前 Linux 系統中可以登錄計算機的賬戶有多少個 #!/bin/bash # 統計當前 Linux 系統中可以登錄計算機的賬戶有多少個 #方法 1: grep "bash$" /etc/passwd | wc -l #方法 2: awk -f: '/bash$/{x++}end{print x}' /etc/passwd
    內網滲透合集(一)
    2023-01-28 09:31:07
    dmesg | grep Linuxls /boot | grep vmlinuz正在運行的服務ps auxps -eftopcat /etc/service哪些服務具有root權限ps aux | grep rootps -ef | grep root安裝了哪些程序,版本,以及正在運行的ls -alh /usr/bin/ls -alh /sbin/dpkg -lrpm -qals -alh /var/cache/apt/archivesOls -alh /var/cache/yum/服務的配置文件cat /etc/syslog.conf?cat /etc/apache2/apache2.confcat /etc/my.confcat /etc/httpd/conf/httpd.confcat /opt/lampp/etc/httpd.confls -aRl /etc/ | awk '$1 ~ /^.*r.*/工作計劃crontab -lls -alh /var/spool/cronls -al /etc/ | grep cronls -al /etc/cron*cat /etc/cron*cat /etc/at.allowcat /etc/at.denycat /etc/cron.allowcat /etc/cron.denycat /etc/crontabcat /etc/anacrontabcat /var/spool/cron/crontabs/root網絡配置cat /etc/resolv.confcat /etc/sysconfig/networkcat /etc/networksiptables -Lhostnamednsdomainname其他用戶主機與系統的通信?
    信息搜集:開源情報信息收集、創建企業密碼字典進入內網:基于企業弱賬號漏洞、基于系統漏洞進入、網站應用程序滲透隱匿攻擊:Command and Control、代理內網跨邊界應用:內網跨邊界轉發、內網跨邊界代理穿透、shell反彈等
    一個內網安全攻防的知識倉庫
    服務器的相關信息(真實ip,系統類型,版本,開放端口,WAF等) 網站指紋識別(包括,cms,cdn,證書等),dns記錄 whois信息,姓名,備案,郵箱,電話反查(郵箱丟社工庫,社工準備等) 子域名收集,旁站,C段等 google hacking針對化搜索,pdf文件,中間件版本,弱口令掃描等 掃描網站目錄結構,爆后臺,網站banner,測試文件,備份等敏感文件泄漏等 傳輸協議,通用漏洞,ex
    ?上整理的?試問題?全,有些 HW ?試的題,已經收集好了,提供給?家。
    前言:Linux服務器是系統重要的業務運行平臺,對服務器進行巡檢能夠及時發現服務器的隱患,以便于改善和優化服務器的性能;觀察服務器的運行狀況,及時對設備進行調整,保證服務器的24小時不間斷的工作;以及采集網內服務器信息。在此,為了便于運維人員順利的完成服務器巡檢工作,小編寫了此文檔,希望對Linux服務器的巡檢工作起到指導、幫助的作用。
    出于對Linux操作系統的興趣,以及對底層知識的強烈欲望,因此整理了這篇文章。本文也可以作為檢驗基礎知識的指標,另外文章涵蓋了一個系統的方方面面。應用程序的行為細節往往是和這些東西互相牽扯的,這些底層的東西會以意想不到的方式影響應用程序的性能,比如某些程序無法充分利用 cache,從而導致性能下降。times,則一直采集數據,直到用戶手動停止為止。
    應用程序的行為細節往往是和這些東西互相牽扯的,這些底層的東西會以意想不到的方式影響應用程序的性能,比如某些程序無法充分利用 cache,從而導致性能下降。times,則一直采集數據,直到用戶手動停止為止。是一個用來監視磁盤 I/O 使用狀況的 top 類工具,具有與 top 相似的 UI,其中包括 PID、用戶、I/O、進程等相關信息。
    vmstat的常規用法:vmstat interval times即每隔interval秒采樣一次,共采樣times次,如果省略times,則一直采集數據,直到用戶手動停止為止。mpstatmpstat 是Multiprocessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类