400块钱3小时上门服务,同城附近人100米,怎么找同城的人服务,夜场女都是为了钱吗

    <strike id="t98gp"></strike>

    1. <code id="t98gp"></code>

      <nav id="t98gp"></nav>
    2. <object id="t98gp"></object>
      首頁 Linux教程Linux 實用運維腳本分享

      Linux 程序編譯過程詳解

      運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
      領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

      #查看僵尸進程
      ps -al | gawk '{print $2,$4}' | grep Z
      
      
      # 匹配電子郵件的地址
      cat index.html | egrep -o "[A-Za-z0-9._]+@[A-Za-z0-9.]+\.[a-zA-Z]{2,4}" > ans.txt
      
      #匹配http URL
      cat index.html | egrep -o "http://[A-Za-z0-9.]+\.[a-zA-Z]{2,3}" > ans.txt 
      
      #純文本形式下載網頁
      lynx -dump www.baidu.com > plain.txt
      
      #只打印HTTP頭部信息,無須遠程下載文件
      curl --head www.baidu.com
      
      #使用POST提交數據
      curl -d "param2=nickwolfe?m2=12345" http://www.linuxidc.com/login.cgi
      
      #顯示分組途經的網關
      traceroute www.baidu.com
      
      #列出系統中的開放端口以及運行在端口上的服務
      lsof -i 
      
      #nc命令建立socket連接
      
      #設置監聽 nc -l 5555
      #連接到套接字 nc 192.0.0.1 5555
      
      #快速文件傳輸
      #接收端 nc -l 5555 > destination_filename
      #發送端 nc 192.0.0.1 5555 < source_filename
      
      #找出指定目錄最大的n個文件
      du -ak target_dir | sort -nrk 1 | head -n 4
      # du中a為遞歸,k為kb;sort中n為數字,r為降序,k指定列
      
      #向終端中的所有登陸用戶發送廣播信息
      cat message.txt | wall
      
      #創建新的screen窗口
      screen
      
      #打印所有的.txt和.pdf文件
      find . \( -name "*.txt" -o -name "*.pdf" \) -print
      
      # -exec command {} \;是連用的,所有符合的都會放置在{}中,去執行command 
      
      #將文件分割成多個大小為10kb的文件
      split -b 10k data.file 
      
      #打印兩個文件的交集
      comm A.txt B.txt -3 | sed 's/^\t//'
      
      #sed移除空白行
      sed '/^$/d' file

      mysql備份

      #!/bin/bash
      
      set -e
      
      USER="backup"
      PASSWORD="backup"
      # 數據庫數據目錄 #
      DATA_DIR="/data/mysql"
      BIN_INDEX=$DATA_DIR"/mysql-bin.index"
      # 備份目錄 #
      BACKUP_DIR="/data/backup/mysql"
      BACKUP_LOG="/var/log/mysql/backup.log"
      
      DATE=`date +"%Y%m%d"`
      TIME=`date +"%Y%m%d%H"`
      
      LOG_TIME=`date +"%Y-%m-%d %H:%M:%S"`
      DELETE_BINLOG_TIME="7 day"
      INCREMENT_INTERVAL="3 hour"
      
      note() {
          printf "[$LOG_TIME] note: $*\n" >> $BACKUP_LOG;
      }
      
      warning() {
          printf "[$LOG_TIME] warning: $*\n" >> $BACKUP_LOG;
      }
      
      error() {
          printf "[$LOG_TIME] error: $*\n" >> $BACKUP_LOG;
          exit 1;
      }
      
      full_backup() {
          local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`
      
          for db in $dbs
          do
              local backup_dir=$BACKUP_DIR"/full/"$db
              local filename=$db"."$DATE
              local backup_file=$backup_dir"/"$filename".sql"
      
              if [ ! -d $backup_dir ]
              then
                  mkdir -p $backup_dir || { error "創建數據庫 $db 全量備份目錄 $backup_dir 失敗"; continue; }
                  note "數據庫 $db 全量備份目錄 $backup_dir  不存在,創建完成";
              fi
      
              note "full backup $db start ..."
              mysqldump --user=${USER} --password=${PASSWORD} --flush-logs --skip-lock-tables --quick $db > $backup_file || { warning "數據庫 $db 備份失敗"; continue; }
      
              cd $backup_dir
              tar -cPzf $filename".tar.gz" $filename".sql"
              rm -f $backup_file
              chown -fR mysql:mysql $backup_dir
      
              note "數據庫 $db 備份成功";
              note "full backup $db end."
          done
      }
      
      increment_backup() {
          local StartTime=`date "-d $INCREMENT_INTERVAL ago" +"%Y-%m-%d %H:%M:%S"`
          local DELETE_BINLOG_END_TIME=`date "-d $DELETE_BINLOG_TIME ago" +"%Y-%m-%d %H:%M:%S"`
          local dbs=`ls -l $DATA_DIR | grep "^d" | awk -F " " '{print $9}'`
      
          mysql -u$USER -p$PASSWORD -e "purge master logs before '$DELETE_BINLOG_END_TIME'" && note "delete $DELETE_BINLOG_TIME days before log";
      
          filename=`cat $BIN_INDEX | awk -F "/" '{print $2}'`
          for i in $filename
          do
              for db in $dbs
              do
                  local backup_dir=$BACKUP_DIR"/increment/"$db
                  local filename=$db"."$TIME
                  local backup_file=$backup_dir"/"$filename".sql"
      
                  if [ ! -d $backup_dir ]
                  then
                      mkdir -p $backup_dir || { error "創建數據庫 $db 增量備份目錄 $backup_dir 失敗"; continue; }
                      note "數據庫 $db 增量備份目錄 $backup_dir  不存在,創建完成";
                  fi
      
                  note "increment backup $db form time $StartTime start ..."
      
                  mysqlbinlog -d $db --start-datetime="$StartTime" $DATA_DIR/$i >> $backup_file || { warning "數據庫 $db 備份失敗"; continue; }
      
                  note "increment backup $db end."
              done
          done
      
          for db in $dbs
          do
              local backup_dir=$BACKUP_DIR"/increment/"$db
              local filename=$db"."$TIME
              local backup_file=$backup_dir"/"$filename".sql"
      
              cd $backup_dir
              tar -cPzf $filename".tar.gz" $filename".sql"
              rm -f $backup_file
      
              note "數據庫 $db 備份成功";
          done
      }
      
      case "$1" in
          full)
              full_backup
          ;;
          increment)
              increment_backup
          ;;
          *)
              exit 2
          ;;
      esac
      
      exit 1

      目錄備份

      #!/bin/bash
      #
      #
      # 時間
      DATE=$(date '+%Y-%m-%d_%H_%M_%S')
      # 備份目錄 
      BACKUPDIR="/home/backups"
      # 需要備份的目錄
      SORFILE=/opt
      # 目標文件名
      DESFILE=/home/backups/$SORFILE.$(date '+%Y-%m-%d_%H_%M_%S').zip
      
      [ ! -d $BACKUPDIR ] && mkdir -p $BACKUPDIR
      cd $BACKUPDIR
      
      echo "start backup $SORFILE ..."
      sleep 3
      #echo "$DESFILE"
      
      
      #tar cvf $DESFILE $SORFILE
      #gzip -f .zip $DESFILE
      zip -r $DESFILE $SORFILE &>/dev/null
      if [ "$?" == "0" ]
      then
         echo $(date +%Y-%m-%d)" zip sucess">>backup.log
      else
         echo $(date +%Y-%m-%d)" zip failed">>backup.log
         exit 0
      fi
      
      # 刪除3天前的備份
      find $BACKUPDIR -type f -ctime +3 | xargs rm -rf
      PING查詢
      #!/bin/bash
      #用途:根據網絡配置對網絡地址192.168.0進行修改,檢查是否是活動狀態
      
      #{start..end}shell擴展生成一組地址
      for ip in 192.168.0.{1..255}
      do 
          (
          ping $ip -c 2 &> /dev/null 
          # > 標準輸出重定向,和1>一致
          # 2>&1 將標準錯誤輸出 重定向 到標準輸出
          # &>file 將標準輸出和標準錯誤輸出都重定向到文件filename中
      
          if [ $? -eq 0 ];then
              echo $ip is alive
          fi
          )&
      done
      wait
      #并行ping,加速

      磁盤IO檢查

      ##iostat是查看磁盤活動統計情況
      
      ##顯示所有設備負載情況 r/s:  每秒完成的讀 I/O 設備次數。即 rio/s;w/s:  每秒完成的寫 I/O 設備次數。即 wio/s等
      iostat 
      
      ##每隔2秒刷新磁盤IO信息,并且每次顯示3次
      iostat 2 3
      
      #顯示某個磁盤的IO信息
      iostat -d sda1
      
      ##顯示tty和cpu信息
      iostat -t
      
      ##以M為單位顯示磁盤IO信息
      iostat -m
      
      ##查看TPS和吞吐量信息  kB_read/s:每秒從設備(drive expressed)讀取的數據量;kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;kB_read:讀取的總數據量;kB_wrtn:寫入的總數量數據量;
      iostat -d -k 1 1
      
      #查看設備使用率(%util)、響應時間(await)
      iostat -d -x -k 1 1
      
      #查看CPU狀態
      iostat -c 1 3
      
      #統計進程(pid)的stat,進程的stat自然包括進程的IO狀況
      pidstat
      
      #只顯示IO
      pidstat -d  1 
      
      #-d IO 信息,-r 缺頁及內存信息-u CPU使用率-t 以線程為統計單位1  1秒統計一次
      pidstat -u -r -d -t 1
      
      #文件級IO分析,查看當前文件由哪些進程打開
      lsof   
      ls /proc/pid/fd
      
      #利用 sar 報告磁盤 I/O 信息DEV 正在監視的塊設備 tps 每秒鐘物理設備的 I/O 傳輸總量 rd_sec/s 每秒從設備讀取的扇區數量 wr_sec/s 每秒向設備寫入的扇區數量 avgrq-sz I/O 請求的平均扇區數
      #avgqu-sz I/O 請求的平均隊列長度 await I/O 請求的平均等待時間,單位為毫秒 svctm I/O 請求的平均服務時間,單位為毫秒 %util I/O 請求所占用的時間的百分比,即設備利用率
      sar -pd 10 3 
      
      #iotop  top的io版
      iotop
      
      #查看頁面緩存信息 其中的Cached 指用于pagecache的內存大?。╠iskcache-SwapCache)。隨著寫入緩存頁,Dirty 的值會增加 一旦開始把緩存頁寫入硬盤,Writeback的值會增加直到寫入結束。
      cat /proc/meminfo 
      
      #查看有多少個pdflush進程 Linux 用pdflush進程把數據從緩存頁寫入硬盤
      #pdflush的行為受/proc/sys/vm中的參數的控制/proc/sys/vm/dirty_writeback_centisecs (default 500): 1/100秒, 多長時間喚醒pdflush將緩存頁數據寫入硬盤。默認5秒喚醒2個(更多個)線程。如果wrteback的時間長于dirty_writeback_centisecs的時間,可能會出問題
      cat /proc/sys/vm/nr_pdflush_threads
      
      #查看I/O 調度器
      #調度算法
      #noop anticipatory deadline [cfq] 
      #deadline :    deadline 算法保證對既定的IO請求以最小的延遲時間。
      #anticipatory:有個IO發生后,如果又有進程請求IO,則產生一個默認6ms猜測時間,猜測下一個進程請求IO是干什么。這對于隨機讀取會造成較大的延時。對數據庫應用很糟糕,而對于Web Server等則會表現不錯。
      #cfq:        對每個進程維護一個IO隊列,各個進程發來的IO請求會被cfq以輪循方式處理,對每一個IO請求都是公平。適合離散讀的應用。
      #noop:        對所有IO請求都用FIFO隊列形式處理。默認IO不會存在性能問題。
      cat /sys/block/[disk]/queue/scheduler
      
      
      #改變IO調度器
      $ echo deadline > /sys/block/sdX/queue/scheduler
      #提高調度器請求隊列的
      $ echo 4096 > /sys/block/sdX/queue/nr_requests

      性能相關

      #查看當前系統load
      uptime
      
      #查看系統狀態和每個進程的系統資源使用狀況
      top
      
      #可視化顯示CPU的使用狀況
      htop
      
      #查看每個CPU的負載信息
      mpstat -P ALL 1
      
      #每隔1秒查看磁盤IO的統計信息
      iostat -xkdz 1
      
      #每隔一秒查看虛擬內存的使用信息
      vmstat 1
      
      #查看內存使用統計信息
      free
      
      #查看網絡使用信息
      nicstat -z 1
      
      #類似vmstat的顯示優化的工具
      dstat 1
      
      #查看系統活動狀態,比如系統分頁統計,塊設備IO統計等
      sar
      
      #網絡連接狀態查看
      netstat -s
      
      #進程資源使用信息查看
      pidstat 1
      pidstat -d 1
      
      #查看某個進程的系統調用信息 -p后面是進程id,-tttT 進程系統后的系統調用時間
      strace -tttT -p 12670
      #統計IO設備輸入輸出的系統調用信息
      strace -c dd if=/dev/zero of=/dev/null bs=512 count=1024k
      
      
      #tcpdump 查看網絡數據包
      tcpdump -nr /tmp/out.tcpdump
      
      #塊設備的讀寫事件信息統計
      btrace /dev/sdb 
      
      #iotop查看某個進程的IO操作統計信息
      iotop -bod5
      
      #slabtop 查看內核 slab內存分配器的使用信息
      slabtop -sc
      
      #系統參數設置
      sysctl -a
      
      #系統性能指標統計信息
      perf stat gzip file1
      #系統cpu活動狀態查看
      perf record -a -g -F 997 sleep 10

      進程相關

      ## processes  進程管理
      
      ##ps查看當前系統執行的線程列表,進行瞬間狀態,不是連續狀態,連續狀態需要使用top名稱查看  更多常用參數請使用 man ps查看
      ps
      
      ##顯示所有進程詳細信息
      ps aux
      
      ##-u 顯示某個用戶的進程列表
      ps -f -u www-data 
      
      ## -C 通過名字或者命令搜索進程
      ps -C apache2
      
      ## --sort  根據進程cpu使用率降序排列,查看前5個進程  -pcpu表示降序  pcpu升序
      ps aux --sort=-pcpu | head -5 
      
      ##-f 用樹結構顯示進程的層次關系,父子進程情況下
      ps -f --forest -C apache2 
      
      ##顯示一個父進程的所有子進程
      ps -o pid,uname,comm -C apache2
      ps --ppid 2359 
      
      ##顯示一個進程的所有線程  -L 參數
      ps -p 3150 -L 
      
      ##顯示進程的執行時間 -o參數
      ps -e -o pid,comm,etime 
      
      ##watch命令可以用來實時捕捉ps顯示進程
      watch -n 1 'ps -e -o pid,uname,cmd,pmem,pcpu --sort=-pmem,-pcpu | head -15' 
      
      ##jobs 查看后臺運行的進程  jobs命令執行的結果,+表示是一個當前的作業,減號表是是一個當前作業之后的一個作業,jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated,但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識;也就是說,jobs命令顯示的是當前shell環境中所起的后臺正在運行或者被掛起的任務信息
      jobs
      
      ##查看后臺運營的進程號
      jobs -p
      
      ##查看現在被終止或者退出的進程號
      jobs -n
      
      
      ##kill命令 終止一個前臺進程可以使用Ctrl+C鍵   kill  通過top或者ps獲取進程id號  kill [-s 信號 | -p ] [ -a ] 進程號 ...
      ##發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程。關閉進程號12的進程
      kill 12
      
      
      ##等同于在前臺運行PID為123的進程時按下Ctrl+C鍵
      kill -2 123
      
      ##如果任無法終止該程序可用“-KILL” 參數,其發送的信號為SIGKILL(9) ,將強制結束進程  
      kill -9 123
      
      ##列出所有信號名稱
      ##HUP    1    終端斷線
      ##INT     2    中斷(同 Ctrl + C)
      ##QUIT    3    退出(同 Ctrl + \)
      ##TERM   15    終止
      ##KILL    9    強制終止
      ##CONT   18    繼續(與STOP相反, fg/bg命令)
      ##STOP    19    暫停(同 Ctrl + Z)
      kill -l
      
      ##得到指定信號的數值
      kill -l KILL
      
      ##殺死指定用戶所有進程
      kill -u peidalinux
      kill -9 $(ps -ef | grep peidalinux) 
      
      ##將后臺中的命令調至前臺繼續運行  將進程123調至前臺執行
      fg 123
      
      ##將一個在后臺暫停的命令,變成繼續執行
      bg  123
      
      ##該命令可以在你退出帳戶/關閉終端之后繼續運行相應的進程。nohup就是不掛起的意思  下面輸出被重定向到myout.file文件中
      nohup command > myout.file 2>&1 &
      
      ##at:計劃任務,在特定的時間執行某項工作,在特定的時間執行一次。
      ## 格式:at HH:MM YYYY-MM-DD //HH(小時):MM(分鐘) YYYY(年)-MM(月份)-DD(日)
      ##HH[am pm]+D(天) days //HH(小時)[am(上午)pm(下午)]+days(天)
      at 12:00(時間) //at命令設定12:00執行一項操作
      #at>useradd aaa //在at命令里設定添加用戶aaa
      #ctrl+d //退出at命令
      #tail -f /etc/passwd //查看/etc/passwd文件后十行是否增加了一個用戶aaa
      
      ##計劃任務設定后,在沒有執行之前我們可以用atq命令來查看系統沒有執行工作任務。
      atq
      
      ##啟動計劃任務后,如果不想啟動設定好的計劃任務可以使用atrm命令刪除。
      atrm 1 //刪除計劃任務1
      
      ##pstree命令:列出當前的進程,以及它們的樹狀結構  格式:pstree [選項] [pid|user]
      pstree
      
      ##nice命令:改變程序執行的優先權等級 應用程序優先權值的范圍從-20~19,數字越小,優先權就越高。一般情況下,普通應用程序的優先權值(CPU使用權值)都是0,如果讓常用程序擁有較高的優先權等級,自然啟動和運行速度都會快些。需要注意的是普通用戶只能在0~19之間調整應用程序的優先權值,只有超級用戶有權調整更高的優先權值(從-20~19)。
      nice [-n <優先等級>][--help][--version][命令]
      nice -n 5 ls
      
      ##sleep命令:使進程暫停執行一段時間
      date;sleep 1m;date
      
      
      ##renice命令 renice命令允許用戶修改一個正在運行進程的優先權。利用renice命令可以在命令執行時調整其優先權。
      ##其中,參數number與nice命令的number意義相同。(1) 用戶只能對自己所有的進程使用renice命令。(2) root用戶可以在任何進程上使用renice命令。(3) 只有root用戶才能提高進程的優先權
      renice -5 -p 5200  #PID為5200的進程nice設為-5 
      
      ##pmap命令用于顯示一個或多個進程的內存狀態。其報告進程的地址空間和內存狀態信息 #pmap PID 
      pmap 20367

      javadump.sh

      #!/bin/sh

      DUMP_PIDS=`ps  --no-heading -C java -f --width 1000 |awk '{print $2}'`
      if [ -z "$DUMP_PIDS" ]; then
          echo "The server $HOST_NAME is not started!"
          exit 1;
      fi

      DUMP_ROOT=~/dump
      if [ ! -d $DUMP_ROOT ]; then
        mkdir $DUMP_ROOT
      fi

      DUMP_DATE=`date +%Y%m%d%H%M%S`
      DUMP_DIR=$DUMP_ROOT/dump-$DUMP_DATE
      if [ ! -d $DUMP_DIR ]; then
        mkdir $DUMP_DIR
      fi

      for PID in $DUMP_PIDS ; do
      #Full thread dump 用來查線程占用,死鎖等問題
        $JAVA_HOME/bin/jstack $PID > $DUMP_DIR/jstack-$PID.dump 2>&1
        echo -e ".\c"
      #打印出一個給定的Java進程、Java core文件或遠程Debug服務器的Java配置信息,具體包括Java系統屬性和JVM命令行參數。
        $JAVA_HOME/bin/jinfo $PID > $DUMP_DIR/jinfo-$PID.dump 2>&1
        echo -e ".\c"
      #jstat能夠動態打印jvm(Java Virtual Machine Statistics Monitoring Tool)的相關統計信息。如young gc執行的次數、full gc執行的次數,各個內存分區的空間大小和可使用量等信息。
        $JAVA_HOME/bin/jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil-$PID.dump 2>&1
        echo -e ".\c"
        $JAVA_HOME/bin/jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity-$PID.dump 2>&1
        echo -e ".\c"
      #未指定選項時,jmap打印共享對象的映射。對每個目標VM加載的共享對象,其起始地址、映射大小及共享對象文件的完整路徑將被打印出來,  
        $JAVA_HOME/bin/jmap $PID > $DUMP_DIR/jmap-$PID.dump 2>&1
        echo -e ".\c"
      #-heap打印堆情況的概要信息,包括堆配置,各堆空間的容量、已使用和空閑情況  
        $JAVA_HOME/bin/jmap -heap $PID > $DUMP_DIR/jmap-heap-$PID.dump 2>&1
        echo -e ".\c"
      #-dump將jvm的堆中內存信息輸出到一個文件中,然后可以通過eclipse memory analyzer進行分析
      #注意:這個jmap使用的時候jvm是處在假死狀態的,只能在服務癱瘓的時候為了解決問題來使用,否則會造成服務中斷。
        $JAVA_HOME/bin/jmap -dump:format=b,file=$DUMP_DIR/jmap-dump-$PID.dump $PID 2>&1
        echo -e ".\c"
      #顯示被進程打開的文件信息
      if [ -r /usr/sbin/lsof ]; then
        /usr/sbin/lsof -p $PID > $DUMP_DIR/lsof-$PID.dump
        echo -e ".\c"
        fi
      done
      #主要負責收集、匯報與存儲系統運行信息的。
      if [ -r /usr/bin/sar ]; then
      /usr/bin/sar > $DUMP_DIR/sar.dump
      echo -e ".\c"
      fi
      #主要負責收集、匯報與存儲系統運行信息的。
      if [ -r /usr/bin/uptime ]; then
      /usr/bin/uptime > $DUMP_DIR/uptime.dump
      echo -e ".\c"
      fi
      #內存查看
      if [ -r /usr/bin/free ]; then
      /usr/bin/free -t > $DUMP_DIR/free.dump
      echo -e ".\c"
      fi
      #可以得到關于進程、內存、內存分頁、堵塞IO、traps及CPU活動的信息。
      if [ -r /usr/bin/vmstat ]; then
      /usr/bin/vmstat > $DUMP_DIR/vmstat.dump
      echo -e ".\c"
      fi
      #報告與CPU相關的一些統計信息
      if [ -r /usr/bin/mpstat ]; then
      /usr/bin/mpstat > $DUMP_DIR/mpstat.dump
      echo -e ".\c"
      fi
      #報告與IO相關的一些統計信息
      if [ -r /usr/bin/iostat ]; then
      /usr/bin/iostat > $DUMP_DIR/iostat.dump
      echo -e ".\c"
      fi
      #報告與網絡相關的一些統計信息
      if [ -r /bin/netstat ]; then
      /bin/netstat > $DUMP_DIR/netstat.dump
      echo -e ".\c"
      fi
      echo "OK!"

      常用工具安裝

      #!/usr/bin/env bash

      # ---------------------------------------------------------------------------------
      # 控制臺顏色
      BLACK="\033[1;30m"
      RED="\033[1;31m"
      GREEN="\033[1;32m"
      YELLOW="\033[1;33m"
      BLUE="\033[1;34m"
      PURPLE="\033[1;35m"
      CYAN="\033[1;36m"
      RESET="$(tput sgr0)"
      # ---------------------------------------------------------------------------------

      printf "${BLUE}\n"
      cat << EOF
      ###################################################################################
      # 安裝常用命令工具
      # 命令工具清單如下:
      # 核心工具:df、du、chkconfig
      # 網絡工具:ifconfig、netstat、route、iptables
      # IP工具:ip、ss、ping、tracepath、traceroute
      # DNS工具:dig、host、nslookup、whois
      # 端口工具:lsof、nc、telnet
      # 下載工具:curl、wget
      # 編輯工具:emacs、vim
      # 流量工具:iftop、nethogs
      # 抓包工具:tcpdump
      # 壓縮工具:unzip、zip
      # 版本控制工具:git、subversion
      #
      ###################################################################################
      EOF
      printf "${RESET}\n"

      printf "\n${GREEN}>>>>>>>>> 安裝常用命令工具開始${RESET}\n"

      # 核心工具
      printf "\n${CYAN}>>>> install coreutils(df、du)${RESET}\n"
      yum install -y coreutils
      printf "\n${CYAN}>>>> install chkconfig${RESET}\n"
      yum install -y chkconfig

      # 網絡工具
      printf "\n${CYAN}>>>> install net-tools(ifconfig、netstat、route)${RESET}\n"
      yum install -y net-tools
      printf "\n${CYAN}>>>> install iptables${RESET}\n"
      yum install -y iptables

      # IP工具
      printf "\n${CYAN}>>>> install iputils(ping、tracepath)${RESET}\n"
      yum install -y iputils
      printf "\n${CYAN}>>>> install traceroute${RESET}\n"
      yum install -y traceroute
      printf "\n${CYAN}>>>> install iproute(ip、ss)${RESET}\n"
      yum install -y iproute

      # 端口工具
      printf "\n${CYAN}>>>> install lsof${RESET}\n"
      yum install -y lsof
      printf "\n${CYAN}>>>> install nc${RESET}\n"
      yum install -y nc
      printf "\n${CYAN}>>>> install netstat${RESET}\n"
      yum install -y netstat

      # DNS工具
      printf "\n${CYAN}>>>> install bind-utils(dig、host、nslookup)${RESET}\n"
      yum install -y bind-utils
      printf "\n${CYAN}>>>> install whois${RESET}\n"
      yum install -y whois

      # 下載工具
      printf "\n${CYAN}>>>> install curl${RESET}\n"
      yum install -y curl
      printf "\n${CYAN}>>>> install wget${RESET}\n"
      yum install -y wget

      # 編輯工具
      printf "\n${CYAN}>>>> install emacs${RESET}\n"
      yum install -y emacs
      printf "\n${CYAN}>>>> install vim${RESET}\n"
      yum install -y vim

      # 流量工具
      printf "\n${CYAN}>>>> install iftop${RESET}\n"
      yum install -y iftop
      printf "\n${CYAN}>>>> install nethogs${RESET}\n"
      yum install -y nethogs

      # 抓包工具
      printf "\n${CYAN}>>>> install tcpdump${RESET}\n"
      yum install -y tcpdump

      # 壓縮工具
      printf "\n${CYAN}>>>> install unzip${RESET}\n"
      yum install -y unzip

      # 版本控制工具
      printf "\n${CYAN}>>>> install git${RESET}\n"
      yum install -y git
      printf "\n${CYAN}>>>> install subversion${RESET}\n"
      yum install -y subversion

      printf "\n${GREEN}<<<<<<<< 安裝常用命令工具結束${RESET}\n"

      常用lib庫安裝

      #!/usr/bin/env bash
      
      # ---------------------------------------------------------------------------------
      # 控制臺顏色
      BLACK="\033[1;30m"
      RED="\033[1;31m"
      GREEN="\033[1;32m"
      YELLOW="\033[1;33m"
      BLUE="\033[1;34m"
      PURPLE="\033[1;35m"
      CYAN="\033[1;36m"
      RESET="$(tput sgr0)"
      # ---------------------------------------------------------------------------------
      
      printf "${BLUE}\n"
      cat << EOF
      ###################################################################################
      # 安裝常見 lib
      # 如果不知道命令在哪個 lib,可以使用 yum search xxx 來查找
      # lib 清單如下:
      # gcc gcc-c++ kernel-devel libtool
      # openssl openssl-devel
      # zlib zlib-devel
      # pcre
      ###################################################################################
      EOF
      printf "${RESET}\n"
      
      printf "\n${GREEN}>>>>>>>>> 安裝常見 lib 開始${RESET}\n"
      
      printf "\n${CYAN}>>>> install gcc gcc-c++ kernel-devel libtool${RESET}\n"
      yum -y install make gcc gcc-c++ kernel-devel libtool
      
      printf "\n${CYAN}>>>> install openssl openssl-devel${RESET}\n"
      yum -y install make openssl openssl-devel
      
      printf "\n${CYAN}>>>> install zlib zlib-devel${RESET}\n"
      yum -y install make zlib zlib-devel
      
      printf "\n${CYAN}>>>> install pcre${RESET}\n"
      yum -y install pcre
      
      printf "\n${GREEN}<<<<<<<< 安裝常見 lib 結束${RESET}\n"

      系統檢查腳本

      #!/usr/bin/env bash
      
      ##############################################################################
      # console color
      C_RESET="$(tput sgr0)"
      C_BLACK="\033[1;30m"
      C_RED="\033[1;31m"
      C_GREEN="\033[1;32m"
      C_YELLOW="\033[1;33m"
      C_BLUE="\033[1;34m"
      C_PURPLE="\033[1;35m"
      C_CYAN="\033[1;36m"
      C_WHITE="\033[1;37m"
      ##############################################################################
      
      printf "${C_PURPLE}"
      cat << EOF
      ###################################################################################
      # 系統信息檢查腳本
      ###################################################################################
      EOF
      printf "${C_RESET}"
      
      [[ $(id -u) -gt 0 ]] && echo "請用root用戶執行此腳本!" && exit 1
      sysversion=$(rpm -q centos-release | cut -d- -f3)
      double_line="==============================================================="
      line="----------------------------------------------"
      
      # 打印頭部信息
      printHeadInfo() {
        cat << EOF
      +---------------------------------------------------------------------------------+
      |                           歡迎使用 【系統信息檢查腳本】                          |
      +---------------------------------------------------------------------------------+
      EOF
      }
      
      # 打印尾部信息
      printFootInfo() {
        cat << EOF
      +---------------------------------------------------------------------------------+
      |                            腳本執行結束,感謝使用!|
      +---------------------------------------------------------------------------------+
      EOF
      }
      
      options=( "獲取系統信息" "獲取服務信息" "獲取CPU信息" "獲取系統網絡信息" "獲取系統內存信息" "獲取系統磁盤信息" "獲取CPU/內存占用TOP10" "獲取系統用戶信息" "輸出所有信息" "退出" )
      printMenu() {
        printf "${C_BLUE}"
        printf "主菜單:\n"
        for i in "${!options[@]}"; do
          index=`expr ${i} + 1`
          val=`expr ${index} % 2`
          printf "\t(%02d) %-30s" "${index}" "${options[$i]}"
          if [[ ${val} -eq 0 ]]; then
            printf "\n"
          fi
        done
        printf "${C_BLUE}請輸入需要執行的指令:\n"
        printf "${C_RESET}"
      }
      
      # 獲取系統信息
      get_systatus_info() {
        sys_os=$(uname -o)
        sys_release=$(cat /etc/redhat-release)
        sys_kernel=$(uname -r)
        sys_hostname=$(hostname)
        sys_selinux=$(getenforce)
        sys_lang=$(echo $LANG)
        sys_lastreboot=$(who -b | awk '{print $3,$4}')
        sys_runtime=$(uptime | awk '{print  $3,$4}' | cut -d, -f1)
        sys_time=$(date)
        sys_load=$(uptime | cut -d: -f5)
      
        cat << EOF
      【系統信息】
      系統: ${sys_os}
      發行版本:   ${sys_release}
      系統內核:   ${sys_kernel}
      主機名:    ${sys_hostname}
      selinux狀態:  ${sys_selinux}
      系統語言:   ${sys_lang}
      系統當前時間: ${sys_time}
      系統最后重啟時間:   ${sys_lastreboot}
      系統運行時間: ${sys_runtime}
      系統負載:   ${sys_load}
      EOF
      }
      
      # 獲取CPU信息
      get_cpu_info() {
        Physical_CPUs=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)
        Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
        CPU_Kernels=$(grep "cores" /proc/cpuinfo | uniq | awk -F ': ' '{print $2}')
        CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
        CPU_Arch=$(uname -m)
        cat << EOF
      【CPU信息】
      物理CPU個數:$Physical_CPUs
      邏輯CPU個數:$Virt_CPUs
      每CPU核心數:$CPU_Kernels
      CPU型號:$CPU_Type
      CPU架構:$CPU_Arch
      EOF
      }
      
      # 獲取服務信息
      get_service_info() {
        port_listen=$(netstat -lntup | grep -v "Active Internet")
        kernel_config=$(sysctl -p 2> /dev/null)
        if [[ ${sysversion} -gt 6 ]]; then
          service_config=$(systemctl list-unit-files --type=service --state=enabled | grep "enabled")
          run_service=$(systemctl list-units --type=service --state=running | grep ".service")
        else
          service_config=$(/sbin/chkconfig | grep -E ":on|:啟用" | column -t)
          run_service=$(/sbin/service --status-all | grep -E "running")
        fi
        cat << EOF
      【服務信息】
      ${service_config}
        ${line}
      運行的服務:
      ${run_service}
        ${line}
      監聽端口:
      ${port_listen}
        ${line}
      內核參考配置:
      ${kernel_config}
      EOF
      }
      
      # 獲取系統內存信息
      get_mem_info() {
        check_mem=$(free -m)
        MemTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}') #KB
        MemFree=$(grep MemFree /proc/meminfo | awk '{print $2}') #KB
        let MemUsed=MemTotal-MemFree
        MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")
        report_MemTotal="$((MemTotal/1024))" "MB" #內存總容量(MB)
        report_MemFree="$((MemFree/1024))" "MB" #內存剩余(MB)
        report_MemUsedPercent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
      
        cat << EOF
      【內存信息】
      內存總容量(MB): ${report_MemTotal}
      內存剩余量(MB):${report_MemFree}
      內存使用率: ${report_MemUsedPercent}
      EOF
      }
      
      # 獲取系統網絡信息
      get_net_info() {
        pri_ipadd=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
        pub_ipadd=$(curl ifconfig.me -s)
        gateway=$(ip route | grep default | awk '{print $3}')
        mac_info=$(ip link | egrep -v "lo" | grep link | awk '{print $2}')
        dns_config=$(egrep -v "^$|^#" /etc/resolv.conf)
        route_info=$(route -n)
        cat << EOF
      【網絡信息】
      系統公網地址:${pub_ipadd}
      系統私網地址:${pri_ipadd}
      網關地址:${gateway}
      MAC地址:${mac_info}
      路由信息:
      ${route_info}
      DNS 信息:
      ${dns_config}
      EOF
      }
      
      # 獲取系統磁盤信息
      get_disk_info() {
        disk_info=$(fdisk -l | grep "Disk /dev" | cut -d, -f1)
        disk_use=$(df -hTP | awk '$2!="tmpfs"{print}')
        disk_percent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
        disk_inode=$(df -hiP | awk '$1!="tmpfs"{print}')
      
        cat << EOF
      【磁盤信息】
      ${disk_info}
      磁盤使用: ${disk_use}
      磁盤使用百分比: ${disk_percent}
      inode信息: ${disk_inode}
      EOF
      }
      
      # 獲取系統用戶信息
      get_sys_user() {
        login_user=$(awk -F: '{if ($NF=="/bin/bash") print $0}' /etc/passwd)
        ssh_config=$(egrep -v "^#|^$" /etc/ssh/sshd_config)
        sudo_config=$(egrep -v "^#|^$" /etc/sudoers | grep -v "^Defaults")
        host_config=$(egrep -v "^#|^$" /etc/hosts)
        crond_config=$(for cronuser in /var/spool/cron/*; do
          ls ${cronuser} 2> /dev/null | cut -d/ -f5; egrep -v "^$|^#" ${cronuser} 2> /dev/null;
          echo "";
        done)
        cat << EOF
      【用戶信息】
      系統登錄用戶:
      ${login_user}
        ${line}
      ssh 配置信息:
      ${ssh_config}
        ${line}
      sudo 配置用戶:
      ${sudo_config}
        ${line}
      定時任務配置:
      ${crond_config}
        ${line}
      hosts 信息:
      ${host_config}
      EOF
      }
      
      # 獲取CPU/內存占用TOP10
      get_process_top_info() {
      
        top_title=$(top -b n1 | head -7 | tail -1)
        cpu_top10=$(top -b n1 | head -17 | tail -11)
        mem_top10=$(top -b n1 | head -17 | tail -10 | sort -k10 -r)
      
        cat << EOF
      【TOP10】
      CPU占用TOP10:
      ${cpu_top10}
      內存占用TOP10:
      ${top_title}
        ${mem_top10}
      EOF
      }
      
      show_dead_process() {
        printf "僵尸進程:\n"
        ps -al | gawk '{print $2,$4}' | grep Z
      }
      
      get_all_info() {
        get_systatus_info
        echo ${double_line}
        get_service_info
        echo ${double_line}
        get_cpu_info
        echo ${double_line}
        get_net_info
        echo ${double_line}
        get_mem_info
        echo ${double_line}
        get_disk_info
        echo ${double_line}
        get_process_top_info
        echo ${double_line}
        get_sys_user
      }
      
      main() {
        while [[ 1 ]]
        do
          printMenu
          read option
          local index=$[ ${option} - 1 ]
          case ${options[${index}]} in
            "獲取系統信息")
              get_systatus_info ;;
            "獲取服務信息")
              get_service_info ;;
            "獲取CPU信息")
              get_cpu_info ;;
            "獲取系統網絡信息")
              get_net_info ;;
            "獲取系統內存信息")
              get_mem_info ;;
            "獲取系統磁盤信息")
              get_disk_info ;;
            "獲取CPU/內存占用TOP10")
              get_process_top_info ;;
            "獲取系統用戶信息")
              get_sys_user ;;
            "輸出所有信息")
              get_all_info > sys.log
              printf "${C_GREEN}信息已經輸出到 sys.log 中。${C_RESET}\n\n"
            ;;
            "退出")
              exit ;;
            *)
              clear
              echo "抱歉,不支持此選項" ;;
          esac
        done
      }
      
      ######################################## MAIN ########################################
      printHeadInfo
      main
      printFootInfo
      printf "${C_RESET}"

      sed進階

      #!/bin/bash
      
      #多個空格只保留一個
      #sed '/./,/^$/!d' test
      
      #刪除開頭的空白行
      #sed '/./,$!d' test
      
      #刪除結尾的空白行
      sed '{
      :start
      /^\n*$/{$d; N; b start}
      }' test
      
      #刪除html標簽
      #有問題
      #s/<.*>//g
      
      #sed 's/<[^>]*>//g' test1
      
      #sed 's/<[^>]*>//g;/^$/d' test1
      
      
      #and符號,代表替換命令中的匹配模式,不管預定義模式是什么文本,都可以用and符號替換,and符號會提取匹配替換命令中指定替換模式中的所有字符串
      echo "The cat sleeps in his hat" | sed 's/.at/"&"/g'
      
      #替換單獨的單詞
      echo "The System Administrator manual" | sed 's/\(System\) Administrator/\1 user/'
      
      #在長數字中插入逗號
      echo "1234567" | sed '{:start; s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/; t start}'
      
      #給文件中的行編號
      sed '=' test | sed 'N; s/\n/ /'
      

      原文來自:杰哥的IT之旅

      本文鏈接:http://www.605748.com/41739.html

      Linux 程序編譯過程詳解

      網友評論comments

      發表評論

      您的電子郵箱地址不會被公開。

      暫無評論

      Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
      掃二維碼
      掃二維碼
      返回頂部
      400块钱3小时上门服务,同城附近人100米,怎么找同城的人服务,夜场女都是为了钱吗