zoukankan      html  css  js  c++  java
  • CentOS日常维护及常用脚本

    [root@192-16.x.x xiewenming]# curl myip.ipip.net
    当前 IP:42.62.x.x  来自于:中国 北京 北京  联通/电信

     www.17ce.com  cdn解析网站测试

    如果遇到 -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory,解决办法如下:

    vi /etc/environment
    
    add these lines...
    
    LANG=en_US.utf-8
    LC_ALL=en_US.utf-8

    结束php进程,主进程除外

    ps -ef|grep php|grep -v grep|cut -c 9-15|xargs kill -9

    用指定用户执行脚本或命令

    su - tomcat -c /usr/local/tomcat/bin/startup.sh

    切换root执行

     sudo sh tomcat.sh start

    查查哪个目录的inode节点使用的多

    [root@opt]# df  -i
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    /dev/vda2        576K  497K   80K   87% /
    tmpfs            235K     5  235K    1% /dev/shm
    [root@192-168-3-157 var]# for i in /*; do echo $i; find $i| wc -l;done
    ...
    /var
    363753
    [root@var]# for i in /var/*; do echo $i; find $i| wc -l;done
    [root@var]#time find /var/spool/postfix/maildrop -type f -delete 
     

    其它其中删除目录下面有大量文件的方法

    #相同的测试数据
    #方法1
    time rsync -a --delete /dev/null / test/ 
    --16s
    #方法2
    time find ./ -type f -exec rm {} ;
    --43 分钟
    #方法3
    time find ./ -type f -delete       
    --9分钟
    #方法4 python
    import os
    import time
    stime=time.time()
    for pathname,dirnames,filenames in os.walk('/home/username/test'):
         for filename in filenames:
             file=os.path.join(pathname,filename)
             os.remove(file)
     ftime=time.time()
     print ftime-stime
    --8分钟

    ssh -t 可以创建一个虚拟终端,这样就可以执行一些如 vim / htop 之类的命令,也包括 sudo 之类

     ssh -t 192.168.56.134 "vi xiewenming.txt"

    sudo 使用需要tty可以通知/etc/sudoers 默认是需要的,有时远程执行sudo命令提示需要一个tty,可以把默认下面这行注释掉

    [root@xiewenming]# grep tty /etc/sudoers
    Defaults    requiretty

    使用$!调用上一个命令的最后一个参数

    [root@linux-node1 ~]# ll -d /etc/sysconfig/network-scripts/
    drwxr-xr-x. 2 root root 4096 Dec  5 03:39 /etc/sysconfig/network-scripts/
    [root@linux-node1 ~]# cd !$
    cd /etc/sysconfig/network-scripts/
    [root@linux-node1 network-scripts]# 

    当系统可用内存不足是可以用下面的命令回收系统可用内存命令,

    Nov 22 09:47:43 192-168-3-150 kernel: XFS: possible memory allocation deadlock in kmem_alloc (mode:0x250) 这里有报错内存死锁,有时候用下面这条命令可以解决问题

     echo 1 > /proc/sys/vm/drop_caches

    查看系统ip连接及流量统计信息

    iotop可以查看IO读写请求

     删除用户及家目录

    userdel -r 用户名

     清空nginx cache脚本

    #!/bin/bash
    
    cache_purge(){
    PURGE_URL=$1
        URL_NAME=$(echo -n $PURGE_URL | md5sum | awk '{print $1}')
        FILE_NAME=$(echo $URL_NAME  | awk '{print "/data/cdn_cache/proxy_cache_dir/"substr($0,length($0),1)"/"substr($0,length($0)-2,2)"/"$0}')
        rm -rf $FILE_NAME 
    }
    
    purge_file(){
        PURGE_FILE=$1
        for url in $(cat $PURGE_FILE);do
            cache_purge $url
        done
    }
    
    purge_url(){
        PURGE_URL=$1
        cache_purge $PURGE_URL
    }
    
    usage(){
        echo $"Usage: $0 <url_file | 'url'>"
    }
    
    main (){
        if [ "$#" -ne 1 ];then
            usage;
        else
            if [ -f $1 ];then
                purge_file $1;
            else
                purge_url $1;
            fi
        fi
    }
    
    main $1
    nginx_cache_clear.sh

    重启tomcat脚本

    #!/bin/bash
    TOMCAT_PATH=/usr/local/tomcat
    
    usage(){
       echo "Usage: $0 [start|stop|status|restart]"
    }
    
    status_tomcat(){
    
    ps aux | grep java | grep tomcat | grep -v 'grep' 
    
    }
    
    start_tomcat(){
    /usr/local/tomcat/bin/startup.sh
    }
    
    stop_tomcat(){
    
    TPID=$(ps aux | grep java | grep tomcat | grep -v 'grep' | awk '{print $2}')
    kill -9 $TPID
    sleep 5;
    
    TSTAT=$(ps aux | grep java | grep tomcat | grep -v 'grep' | awk '{print $2}')
        if [ -z $TSTAT ];then
          echo "tomcat stop"
        else
          kill -9 $TSTAT
        fi
    
    cd $TOMCAT_PATH
    
    rm temp/* -rf
    rm work/* -rf
    
    }
    
    main(){
    case $1 in
    
       start)
          start_tomcat;;
       stop)
          stop_tomcat;;
       status)
          status_tomcat;;
       restart)
          stop_tomcat && start_tomcat;;
        *)
          usage;
    esac
    
    }
    
    main $1
    cat tomcat.sh

    MySQL5.6在CentOS6上面的安装脚本

    [root@192-168-3-201 src]# more Setup_Mysql-5.6.30.sh
    #!/bin/bash
    echo '+++++++++++++++++++++++++++++++++++++++++'
    echo '+ 欢迎使用Mysql-5.6.30自动部署安装脚本!+'
    echo '+                                       +'
    echo '+ 系统版本:CentOS-6.6   CentOS-6.7     +'
    echo '+                                       +'
    echo '+ Mysql版本:5.6.30   Cmake版本:3.5.2  +'
    echo '+                                       +'
    echo '+ 自动部署程序制作者:刘琪              +'
    echo '+++++++++++++++++++++++++++++++++++++++++'
    
    read -p '请创建Mysql数据库root账户的安全密码:' password
    
    #配置163-Yum源
    mkdir /usr/local/src/Backup
    cp -a /etc/yum.repos.d/* /usr/local/src/Backup/
    rm -rf /etc/yum.repos.d/*
    mv /usr/local/src/CentOS6-Base-163.repo /etc/yum.repos.d/
    yum=`ls /etc/yum.repos.d/`
    if [ $yum = $yum ]
    then
    yum clean all
    yum listrepo
    else
    echo $yum163'这个Yum源没有安装成功!'
    kill=`ps aux | grep Setup | awk -F " " '{print $2}'`
    kill -9 $kill
    fi
    
    #安装依赖包和解压Mysql-5.6.30 Cmake-3.5.2的安装包
    yum groupinstall "开发工具" -y
    yum install ncurses-devel vim -y
    tar xvf /usr/local/src/cmake-3.5.2.tar.gz
    tar xvf /usr/local/src/mysql-5.6.30.tar.gz
    
    #安装Cmake软件包-->
    cd /usr/local/src/cmake-3.5.2
    ./configure --prefix=/usr/local/cmake && make && make install
    
    #安装Mysql-5.6.30软件包-->
    cd /usr/local/src/mysql-5.6.30
    /usr/local/cmake/bin/cmake 
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
    -DMYSQL_DATADIR=/usr/local/mysql/data 
    -DSYSCONFDIR=/etc 
    -DWITH_READLINE=1 
    -DMYSQL_TCP_PORT=3306 
    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock 
    -DENABLED_LOCAL_INFILE=1 
    -DEXTRA_CHARSETS=all 
    -DDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci
    make && make install
    
    #检车是否有rpm安装包残余-->
    mysqlrpm=`rpm -qa | grep mysql`
    if [ $mysqlrpm = $mysqlrpm ]
    then
    yum remove `rpm -qa | grep mysql` -y
    else
    echo $mysqlrpm'这些软件不存在'
    fi
    
    #系统防火墙临时关闭和SElinux临时关闭
    /etc/init.d/iptables stop
    setenforce 0
    
    #创建Mysql账户并且指定uid号码和gid号码
    useradd -M -u 27 -s /sbin/nologin mysql
    groupmod -g 27 mysql
    
    #设置Mysql所有者和所属组权限
    chown mysql.mysql -R /usr/local/mysql/
    
    #初始化Mysql数据库
    cd /usr/local/mysql/
    ./scripts/mysql_install_db --user=mysql
    
    #Mysql启动服务加载至系统当中
    echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
    source /etc/profile
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig --list mysqld
    
    #设置Mysql数据库目录所有者和所属组权限
    chown mysql.mysql -R /usr/local/mysql/data/
    
    #启动Mysql服务并且设置Mysql数据库root账户密码
    service mysqld start
    cd /usr/local/mysql/
    /usr/local/mysql/bin/mysqladmin -u root password "$password"
    
    #Mysql-5.6.30安装完毕后做一些系统归档工作
    mkdir /usr/local/src/Yum-163
    cp -a /etc/yum.repos.d/CentOS6-Base-163.repo /usr/local/src/Yum-163/
    echo '++++++++++++++++++++++++++++++++++++++++++++'
    echo '+ Mysql5.6.30源码包安装成功!!!          +'
    echo '+                                          +'
    echo "+ Mysql-5.6.30_root账户密码是:$password               <------ OK!"
    echo '+                                          +'
    echo '+ Mysql版本:5.6.30   Cmake版本:3.5.2     +'
    echo '+                                          +'
    echo '+ 自动部署程序制作者:刘琪                 +'
    echo '++++++++++++++++++++++++++++++++++++++++++++'
    Setup_Mysql-5.6.30.sh

    初始化系统和查看系统基础信息脚本CentOS6

    #!/bin/bash
    #desc:System initialization for RedHat OS4.7 32&64bit
    #create:2010/12/06
    
    
    #!/bin/bash
    
    cat << EOF
             ############################################################
                      check out OS info && SYSTEM initialization
             ############################################################
    
              please make sure your selection from the menu : 
    
                1) System initialization
                2) Check out servers hardware info
                3) Check out software info
                4) Check out system environment
                5) Check all info
    
              For example: 1 2 3
    EOF
    echo -n "          Please enter your selection: "
    
    
    ###########Begin Check servers hardware info###################
    hardware_info()
    {
    if [ -x /usr/sbin/dmidecode ]
    then
      :
    else
      echo "The dmidecode is not exist.please checkout."
      exit 0
    fi
    ID=0
    if [ $UID -ne $ID ]
      then
      echo "Must root to run this scripts."
      exit 0
    fi
    
    echo -e "33[1;31m----------------Begin check servers hardware infor---------------33[0m"
    echo
    ##base
    echo -e "33[1;36m----------------Base                         infor---------------33[0m"
    VEN_NAME=`/usr/sbin/dmidecode |grep 'Vendor' |awk -F: 'NR==1 {print $2}'`
    SER_MODEL=`/usr/sbin/dmidecode | grep "Product Name" |awk -F: 'NR==1{print $2}'`
    echo -e "The Vendor is "33[1;31m$VEN_NAME"33[0m"
    echo -e "The servers model is "33[1;31m$SER_MODEL"33[0m"
    ##cpu info
    echo -e "33[1;36m----------------CPU                          infor---------------33[0m"
    CPU_ID=`cat /proc/cpuinfo |grep 'physical id' |awk '!a[$0]++' |wc -l`
    CPU_PROCESSOR=`cat /proc/cpuinfo  |grep 'processor' |wc -l`
    CPU_CORE=`cat /proc/cpuinfo  |grep 'cpu core' |awk -F: 'NR==1 {print $2}'`
    CPU_MODEL=`cat /proc/cpuinfo  |grep '^model name' |awk 'NR==1' |cut -d":" -f2`
    echo -e "The cpu count is "33[1;31m$CPU_ID"33[0m"
    echo -e "Every cpu is "33[1;31m$CPU_CORE" core.33[0m"
    echo -e "The total cpu processor is "33[1;31m$CPU_PROCESSOR"33[0m"
    echo -e "The cpu model name is "33[1;31m$CPU_MODEL"33[0m"
    ##mem info
    echo -e "33[1;36m----------------MEM                          infor---------------33[0m"
    MEM_COUNT=`/usr/sbin/dmidecode | grep -A16 "Memory Device$"  |grep 'Set:' |awk '!a[$0]++' |wc -l`
    MEM_TOTAL=`/usr/bin/free -m  |grep 'Mem:'|awk '{print $2}'`
    echo -e "The memory count is "33[1;31m$MEM_COUNT"33[0m"
    echo -e "The memory total is "33[1;31m$MEM_TOTAL" MB.33[0m"
    ##disk info
    echo -e "33[1;36m----------------Disk                         infor---------------33[0m"
    DISK_INFO=`/sbin/fdisk -l|grep 'Disk' |awk -F',' '{print $1}' |xargs`
    echo -e "The disk info "33[1;31m$DISK_INFO"33[0m"
    echo
    echo -e "33[1;31m----------------End check servers  hardware  infor---------------33[0m"
    }
    
    ###########End Check servers hardware info#####################
    
    ###########Begin Check servers software info###################
    software_info()
    {
    echo -e "33[1;31m----------------Begin check servers soft infor-------------------33[0m"
    ##disk info
    echo
    echo -e "33[1;36mDetails disk info..........33[0m 33[1;31m"
    printf "FILESYSTEM SIZE USED PARNAME
    " ;/bin/df -h |grep '^/dev' |awk '{print $1,$2,$5,$6}' |column -t
    echo -e "33[0m"
    OS_NAME=`/bin/uname -ir`
    echo -e "The os is "33[1;31m$OS_NAME"33[0m"
    
    ##username info
    NUM_LINE=$(grep -n '<500>' /etc/passwd |awk -F: '{print $1}')
    if [ "$NUM_LINE" == "" ]
    then
    echo -e "The ADD username is : "33[1;31mNULL33[0m""
    else
    ADD_LINE="$NUM_LINE,$p"
    ADD_USERNAME=`sed -ne "$ADD_LINE" /etc/passwd |awk -F: '{print $1}' |xargs`
    echo -e "Add username is: "33[1;31m$ADD_USERNAME33[0m""
    fi
    
    ##time zone
    TIME_ZONE=`cat /etc/sysconfig/clock |grep '^ZONE' |cut -d "=" -f2`
    NOW_TIME=`/bin/date '+%F %T'`
    echo -e "The time zone is 33[1;31m$TIME_ZONE33[0m"
    echo -e "Now time is "33[1;31m$NOW_TIME33[0m""
    echo
    echo -e "33[1;31m----------------End check servers  soft  infor-------------------33[0m"
    }
    
    ###########End Check servers software info #####################
    
    ###########begin     system initialization #####################
    system_ini()
    {
    echo -e "33[1;31m----------------Begin  system initialization ---------------33[0m"
    echo
    ##being selinux config####
    SELINUX_STATUS=`cat /etc/selinux/config  |grep '^SELINUX>' |cut -d "=" -f2`
    if [[ $SELINUX_STATUS == enforcing || $SELINUX_STATUS == permissive ]]
      then
      sed -i "s/SELINUX=$SELINUX_STATUS/SELINUX=disabled/g" /etc/selinux/config
      echo -e "Now selinux status is 33[1;31m disable33[0m."
      else
      echo -e "No change.The selinux status is 33[1;35m disable33[0m."
    fi
    /usr/sbin/setenforce 0
    ##end selinux config####
    
    ##being set time zone####
    TIME_ZONE=`cat /etc/sysconfig/clock |grep '^ZONE' |cut -d "=" -f2`
    if [ $TIME_ZONE != "Asia/Shanghai" ]
      then
    cat > /etc/sysconfig/clock <<EOF
    ZONE="Asia/Shanghai"
    UTC=false
    ARC=false
    EOF
      TIME_ZONE=`cat /etc/sysconfig/clock |grep '^ZONE' |cut -d "=" -f2`
      echo -e "Now Time zone set success ,Zone now is "33[1;31m$TIME_ZONE33[0m"."
      else
      echo -e "No change.Time zone is "33[1;35m$TIME_ZONE33[0m"."
    fi
    
    ##end set time zone####
    
    ##begin set language #####
    echo "LANG=zh_CN.GB18030
    LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN
    SUPPORTED=zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en
    SYSFONT=lat0-sun16
    SYSFONTACM=8859-15" > /etc/sysconfig/i18n
    source /etc/sysconfig/i18n
    echo -e "Now The Language set "33[1;31m success..33[0m ""
    
    ##end set language #####
    
    ##begin set ssh port &&root log permit#######
    DE_SH=`cat /etc/ssh/sshd_config |grep 'Port>' |head -c1`
    DE_SH_PORT=`cat /etc/ssh/sshd_config |grep 'Port>'`
    
    if [ $DE_SH == # ]
    then
      sed -i s/"$DE_SH_PORT"/"Port 8020"/ /etc/ssh/sshd_config
      SSH_PORT=`cat /etc/ssh/sshd_config |grep 'Port>' |awk '{print $2}'`
      if [ $SSH_PORT == 8020 ]
      then
        echo -e "Now SSH port set success,port is "33[1;31m$SSH_PORT33[0m.""
      fi
    else
      SSH_PORT=`cat /etc/ssh/sshd_config |grep 'Port>' |awk '{print $2}'`
      if [ $SSH_PORT != 8020 ]
      then
        sed -i s/"Port $SSH_PORT"/"Port 8020"/ /etc/ssh/sshd_config
        echo -e "Now SSH port "33[1;31m$SSH_PORT33[0m" has change "33[1;31m802033[0m"."
      else 
      echo -e "No change SSH port is "33[1;35m802033[0m""
      fi
    fi
    
    DEF_PER=`cat /etc/ssh/sshd_config |grep 'PermitRootLogin'   |grep -v 'without-password' |head -c 1`
    DEF_PER_CON=`cat /etc/ssh/sshd_config |grep 'PermitRootLogin'   |grep -v 'without-password'`
    if [ $DEF_PER == # ]
    then
      sed -i s/"$DEF_PER_CON"/"PermitRootLogin no"/ /etc/ssh/sshd_config
      DEF_PER_CON1=`cat /etc/ssh/sshd_config |grep 'PermitRootLogin'   |grep -v 'without-password'`
      echo -e "Now Root login permit set success.Now is "33[1;31m$DEF_PER_CON133[0m" ." 
    else
      LOGIN_PER=`cat /etc/ssh/sshd_config |grep 'PermitRootLogin'   |grep -v 'without-password' |cut -d" " -f2`
      if [ $LOGIN_PER == yes ]
      then
       sed -i s/"PermitRootLogin yes"/"PermitRootLogin no"/ /etc/ssh/sshd_config
       DEF_PER_CON2=`cat /etc/ssh/sshd_config |grep 'PermitRootLogin'   |grep -v 'without-password'`
       echo -e "Now The permit is "33[1;31m$DEF_PER_CON233[0m" ."
      else
       echo -e "No change.The root login permit is "33[1;35m no33[0m"."
      fi
    fi
    
    /etc/init.d/sshd restart >/dev/null
    if [ $? -eq 0 ]
    then
      echo -e "33[1;31m sshd_config set success. 33[0m"
    fi
    
    ##end set ssh #######
    
    ##beging set user#####
    NAME_COU=`cat /etc/passwd |grep '^kylinyunwei>' |wc -l`
    if [ $NAME_COU -eq 1 ]
    then
      echo "7ujm0p;/" | passwd --stdin "kylinyunwei" > /dev/null
      echo -e "No change . The user name "33[1;35m kylinyunwei33[0m " exist,passwd has set again. please check out."
    else
     useradd kylinyunwei
     echo "0p;/7ujm" | passwd --stdin "kylinyunwei" > /dev/null
     echo -e "Now Create username "33[1;31m kylinyunwei 33[0m" && set passwd success."
    fi
    
    ##set root passwd####
    echo "0p;/7ujm" | passwd --stdin "root" > /dev/null
    echo -e "Now 33[1;31m Root33[0m passwd set success.."
    
    ##check all add username ####
    #NUM_LINE=$(grep -n '<500>' /etc/passwd |awk -F: '{print $1}')
    #ADD_LINE="$NUM_LINE,$p"
    #ADD_USERNAME=`sed -ne "$ADD_LINE" /etc/passwd |awk -F: '{print $1}' |xargs`
    #echo "Add username is: $ADD_USERNAME"
    
    ##end set user #######
    
    ##begin set runlevel #######
    RUNLEVEL=`cat /etc/inittab |grep '^id:.:initdefaul' |cut -d":" -f2`
    if [ $RUNLEVEL != 3 ]
    then
      /bin/sed -i  s/"id:$RUNLEVEL"/"id:3"/ /etc/inittab
      NOW_RUNLEVEL=`cat /etc/inittab |grep '^id:.:initdefaul' |cut -d":" -f2`
      echo -e "Now the runlevel is "33[1;31m$NOW_RUNLEVEL33[0m"."
    else
      echo -e "No change .The runlevel is "33[1;35m$RUNLEVEL33[0m"."
    fi
    
    ##end set runlevel #######
    
    ##begin set add time format for history ###########
    
    PRO_COUNT=`cat /etc/profile |grep 'HISTTIMEFORMAT' |wc -l`
    if [ $PRO_COUNT -eq 0 ]
    then
      /bin/sed -i "/^export PATH/aexport HISTTIMEFORMAT" /etc/profile
      /bin/sed -i "/^HISTSIZE/aHISTTIMEFORMAT="%Y-%m-%d %H:%M:%S: "" /etc/profile
      export HISTTIMEFORMAT
      echo -e "Now The33[1;31m history timeformat33[0m set success now."
    else
      echo -e "No change.The33[1;35m history timeformat33[0m has setted ."
    fi
    
    ##end set add time format for history ###########
    
    ##begin set iptables start levle##############
    /sbin/chkconfig --level 2345 iptables off
    echo -e "Now default 33[1;31m iptables33[0m start runlevel all set off " 
    ##end set iptables start levle##############
    
    ##begin turn off unnecessary services#####
    export LANG=C 
    for close_list in `chkconfig --list |awk '($5~/on/ || $7~/on/) {print $1}' | grep -vE "atd|crond|cpuspeed|irqbalance|lvm2-monitor|network|smartd|sshd|syslog|sysstat"`
    do
    echo $close_list
    /sbin/chkconfig --level 2345 $close_list off
    /sbin/service $close_list stop >/dev/null
    done
    echo -e "Now The 33[1;31m unnecessary services 33[0m turn off now."
    ##end turn off unnecessary services#####
    
    ##begin set hosts.allow&deny######
    AL_SSHD=`cat /etc/hosts.allow |grep sshd |grep 124.207.129 |wc -l`
    AL_SSH=`cat /etc/hosts.allow |grep sshd |xargs`
    DE_SSHD=`cat /etc/hosts.deny |grep sshd |wc -l`
    DE_SSH=`cat /etc/hosts.deny |grep sshd |xargs`
    if [[ $AL_SSHD -eq 0 && $DE_SSHD -eq 0 ]]
    then
      echo "sshd:124.207.129.193" >> /etc/hosts.allow
      echo "sshd:124.207.129.194" >> /etc/hosts.allow
      echo "sshd:all" >> /etc/hosts.deny
      echo -e "Now The 33[1;31mhosts.allow and hosts.deny33[0m set success."
    else
     echo -e "No change.The 33[1;35m hosts.allow and hosts.deny33[0m has set. hosts.allow is "33[1;35m $AL_SSH33[0m" , hosts.deny is "33[1;35m$DE_SSH33[0m""
    fi
    
    ##end set hosts.allow&deny######
    echo
    echo -e "33[1;31m----------------End  system initialization ---------------33[0m"
    echo
    }
    
    ###########end   system    initialization #####################
    
    check_environment()
    {
    echo -e "33[1;31m------------Begin check system environment-----------------------33[0m"
    echo
    echo -e "33[1;36m-----------------selinux          config-------------------------33[0m";echo -e "33[1;35m" `cat /etc/selinux/config  |grep '^SELINUX>'` "33[0m"
    echo -e "33[1;36m-----------------timezone         config-------------------------33[0m";echo -e "33[1;35m" `cat /etc/sysconfig/clock |grep '^ZONE'` "33[0m"
    echo -e "33[1;36m-----------------language         config-------------------------33[0m";echo -e "33[1;35m" `cat /etc/sysconfig/i18n |grep "LANG"` "33[0m"
    echo -e "33[1;36m-----------------sshd             config-------------------------33[0m";echo -e "33[1;35m" `cat /etc/ssh/sshd_config |grep -E "^PermitRootLogin|^Port"` "33[0m"
    echo -e "33[1;36m-----------------user             config-------------------------33[0m";NUM_LINE=$(grep -n '<500>' /etc/passwd |awk -F: '{print $1}');
    ADD_LINE="$NUM_LINE,$p";echo -e "33[1;35m" `sed -ne "$ADD_LINE" /etc/passwd |awk -F: '{print $1}' |xargs` "33[0m"
    echo -e "33[1;36m-----------------runlevel         config-------------------------33[0m";echo -e "33[1;35m" `cat /etc/inittab |grep '^id:.:initdefaul'` "33[0m"
    echo -e "33[1;36m-----------------history          config-------------------------33[0m";echo -e "33[1;35m" `cat /etc/profile |grep '^HISTTIMEFORMAT'` "33[0m"
    echo -e "33[1;36m-----------------iptables         config-------------------------33[0m";echo -e "33[1;35m" `/sbin/chkconfig --list |grep iptables|awk '{print $1,$5,$7}'` "33[0m"
    echo -e "33[1;36m-----------------process          config-------------------------33[0m";echo -e "33[1;35m" `/sbin/chkconfig --list |awk '($5~/on/ || $7~/on/) {print $1}' 
    | grep -E "atd|crond|cpuspeed|irqbalance|lvm2-monitor|network|smartd|sshd|syslog|sysstat"` "33[0m"
    echo -e "33[1;36m-----------------allow&&deny      config-------------------------33[0m";echo -e "33[1;35m" `cat /etc/hosts.allow /etc/hosts.deny |grep sshd` "33[0m"
    echo
    echo -e "33[1;31m------------End   check system environment-----------------------33[0m"
    }
    
    ##main
    
    read choise
    case "$choise" in
    1)
    
    system_ini
    
    ;;
    
    2)
    
    hardware_info
    
    ;;
    
    3)
    
    software_info
    
    ;;
    
    4)
    
    check_environment
    
    ;;
    
    5)
    
    hardware_info
    echo
    software_info
    echo
    check_environment
    
    ;;
    
    *)
    
    echo -e "33[1;31m You must choice 33[0m 33[1;35m NO:" 1~5" 33[0m 33[1;31m menu33[0m "
    exit 0
    
    ;;
    
    esac
    system_initialization

    zabbix监控nginx状态自定义脚本获取数据

    #!/bin/bash
    NGINX_PORT=$1
    nginx_active(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
            }
    nginx_reading(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
           }
    nginx_writing(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
           }
    nginx_waiting(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
           }
    nginx_accepts(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
           }
    nginx_handled(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
           }
    nginx_requests(){
            /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
           }
    
    main(){
        case $2 in
            active)
                nginx_active;
                ;;
            reading)
                nginx_reading;
                ;;
            writing)
                nginx_writing;
                ;;
            waiting)
                nginx_waiting;
                ;;
            accepts)
                nginx_accepts;
                ;;
            handled)
                nginx_handled;
                ;;
            requests)
                nginx_requests;
            esac 
    }
    
    main $1 $2
    zabbix_nginx_plugin.sh

     无交互创建用户及密码

    useradd -m test && echo "123456" | passwd --stdin test

    crond计划任务所有用户文件路径,可以定期做备份

    /var/spool/cron/

    计划任务日志查看

    more  /var/log/cron

    自动部署脚本

    #!/bin/bash
    
    #Date/Time
    CTIME=$(date "+%Y-%m-%d-%H-%M")
    
    #Shell
    CODE_DIR="/deploy/code/deploy"
    CONFIG_DIR="/deploy/config"
    TMP_DIR="/deploy/tmp"
    TAR_DIR="/deploy/tar"
    
    
    usage(){
        echo $"Usage: $0 [ deploy | rollback-list | rollback-pro ver]"
    }
    
    git_pro(){
      echo "begin git pull"
      cd "$CODE_DIR" && git pull
      API_VERL=$(git show | grep commit | cut -d ' ' -f2)
      API_VER=$(echo ${API_VERL:0:6})
      cp -r "$CODE_DIR" "$TMP_DIR"
    }
    
    config_pro(){
      echo "copy pro config to dir"
      /bin/cp "$CONFIG_DIR"/* $TMP_DIR/deploy/
      TAR_VER="$API_VER"-"$CTIME"
      cd $TMP_DIR && mv deploy pro_deploy_"$TAR_VER"
    }
    
    tar_pro(){
      echo "begin tar"
      cd $TMP_DIR && tar czf pro_deploy_"$TAR_VER".tar.gz pro_deploy_"$TAR_VER"
      echo "tar end pro_deploy_"$TAR_VER".tar.gz"
    }
    
    scp_pro(){
      echo "begin scp"
      /bin/cp $TMP_DIR/pro_deploy_"$TAR_VER".tar.gz /opt
      #scp $TMP_DIR/pro_deploy_"$TAR_VER".tar.gz 192.168.1.2:/opt
      #scp $TMP_DIR/pro_deploy_"$TAR_VER".tar.gz 192.168.1.3:/opt
      #scp $TMP_DIR/pro_deploy_"$TAR_VER".tar.gz 192.168.1.4:/opt
    }
    #执行部署操作
    deploy_pro(){
      #socat haproxy unix nginx 
      echo "begin deploy"
      cd /opt && tar zxf pro_deploy_"$TAR_VER".tar.gz
      rm -f /var/www/html && ln -s /opt/pro_deploy_"$TAR_VER" /var/www/html
    }
    #测试部署
    test_pro(){
      echo "begin test"
      #curl --head http://192.168.56.31/index.php | grep xxxx
      echo "add cluster" # socat haproxy-nginx+php
    }
    #回滚列表
    rollback_list(){
      ls -l /opt/*.tar.gz
    }
    #制定版本回滚
    rollback_pro(){
      #ssh 192.168.56.31 
      rm -f /var/www/html && ln -s /opt/$1 /var/www/html
    }
    #主函数,对之前编写的进行组合
    main(){
      case $1 in
        deploy)
            git_pro;
            config_pro;
            tar_pro;
            scp_pro;
            deploy_pro;
            test_pro;
            ;;
        rollback-list)
            rollback_list;
            ;;
        rollback-pro)
            rollback_pro $2;
            ;;
        *)
            usage;
      esac
    }
    main $1 $2
    deploy.sh

    统计nginx访问日志脚本并发邮件

    #!/bin/bash
    #Author:xxx
    #Date:2016-05-16
    #Function:www_Access_log Tongji
    export LANG=zh_CN.UTF-8
    date1=`date +%F-%T`
    wwwSendLog="/root/wwwTongji.log"
    wwwTongJiIp="/root/wwwTongJiIP.log"
    LogDir="/nas/backup/192.168.x.233/logs/"
    LogFile="www.xxx.com.log"
    LogDate=`date +%Y%m%d`
    >"$wwwSendLog"
    >"$wwwTongJiIp" 
    AvgRequestTime=`awk -F "," '{print $11}' ""$LogDir""$LogFile"-"$LogDate"" | awk -F ":" '{print $2}' | awk '{sum+=$1} END {print sum/NR}'`
    Yesterday=`date +%F -d yesterday`
    Today=`date +%F`
    IP_Top=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |grep "Request_Real_Client" | awk -F '"' '{print $4}' | sort | uniq -c | sort -rn | head -30`
    URI_Top=`awk -F "," '{print $13}' ""$LogDir""$LogFile"-"$LogDate"" | awk -F '"' '{print $4}' |sort |uniq -c |sort -rn |head -30`
    URI_Responstime=`awk -F "," '{print $11,$13}' ""$LogDir""$LogFile"-"$LogDate""  |awk -F '[":]' '{print $4,$8}' |sort |uniq -c | sort -rn -k2 | head -30`
    URI_MaxResponstime=`awk -F "," '{print $11,$13}' ""$LogDir""$LogFile"-"$LogDate""  |awk -F '[":]' '{print $4,$8}' | awk -F ":" '{print $1}' |awk 'BEGIN {max = 0} {if ($1>max) max=$1 } END {pr
    int max}'`
    Beijing_IP1="106.120.110.226"
    Beijing_IP2="106.2.184.106"
    ShangHai_IP1="124.74.136.34"
    GuangZhou_IP1="14.23.88.66"
    [root@192-168-3-55 scripts]# e more WwwLogTongji.sh 
    -bash: e: command not found
    [root@192-168-3-55 scripts]#  more WwwLogTongji.sh 
    #!/bin/bash
    #Author:PengWeiNan
    #Date:2016-05-16
    #Email:pengweinan_air@163.com
    #QQ:54203743
    #Function:www_Access_log Tongji
    export LANG=zh_CN.UTF-8
    date1=`date +%F-%T`
    wwwSendLog="/root/wwwTongji.log"
    wwwTongJiIp="/root/wwwTongJiIP.log"
    LogDir="/nas/backup/192.168.3.233/logs/"
    LogFile="www.xxx.com.log"
    LogDate=`date +%Y%m%d`
    >"$wwwSendLog"
    >"$wwwTongJiIp" 
    AvgRequestTime=`awk -F "," '{print $11}' ""$LogDir""$LogFile"-"$LogDate"" | awk -F ":" '{print $2}' | awk '{sum+=$1} END {print sum/NR}'`
    Yesterday=`date +%F -d yesterday`
    Today=`date +%F`
    IP_Top=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |grep "Request_Real_Client" | awk -F '"' '{print $4}' | sort | uniq -c | sort -rn | head -30`
    URI_Top=`awk -F "," '{print $13}' ""$LogDir""$LogFile"-"$LogDate"" | awk -F '"' '{print $4}' |sort |uniq -c |sort -rn |head -30`
    URI_Responstime=`awk -F "," '{print $11,$13}' ""$LogDir""$LogFile"-"$LogDate""  |awk -F '[":]' '{print $4,$8}' |sort |uniq -c | sort -rn -k2 | head -30`
    URI_MaxResponstime=`awk -F "," '{print $11,$13}' ""$LogDir""$LogFile"-"$LogDate""  |awk -F '[":]' '{print $4,$8}' | awk -F ":" '{print $1}' |awk 'BEGIN {max = 0} {if ($1>max) max=$1 } END {pr
    int max}'`
    Beijing_IP1="106.120.110.226"
    Beijing_IP2="106.2.184.106"
    ShangHai_IP1="124.74.136.34"
    GuangZhou_IP1="14.23.88.66"
    ChengDu_IP1="171.221.175.20"
    ShenYang_IP1="223.255.20.4"
    ShenYang_IP2="101.246.184.193"
    ShenZhen_IP1="218.17.106.42"
    WuHan_IP1="119.97.220.106"
    IDC_IP="42.62.69.70"
    Beijing_IP1_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$Beijing_IP1" | wc -l`
    Beijing_IP2_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$Beijing_IP2" | wc -l`
    ShangHai_IP1_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$ShangHai_IP1" | wc -l`
    GuangZhou_IP1_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$GuangZhou_IP1" | wc -l`
    ChengDu_IP1_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$ChengDu_IP1" | wc -l`
    ShenYang_IP1_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$ShenYang_IP1" | wc -l`
    ShenYang_IP2_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$ShenYang_IP2" | wc -l`
    ShenZhen_IP1_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$ShenZhen_IP1" | wc -l`
    WuHan_IP1_PV=`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |awk -F '"' '{print $4}' | grep "$WuHan_IP1" | wc -l`
    for ip in `awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |grep "Request_Real_Client" | awk -F '"' '{print $4}' | sort | uniq -c | sort -rn | head -30|awk '{print $2}'`
    do
      case "$ip" in
      $Beijing_IP1)
      TongJiIP="$Beijing_IP1(北京总部出口IP)"
      ;;
      $Beijing_IP2)
      TongJiIP="$Beijing_IP2(北京总部出口IP)"
      ;;
      $ShangHai_IP1)
      TongJiIP="$ShangHai_IP1(上海分公司出口IP)"
      ;;
      $GuangZhou_IP1)
      TongJiIP="$GuangZhou_IP1(广州分公司出口IP)"
      ;;
      $ChengDu_IP1)
      TongJiIP="$ChengDu_IP1(成都分公司出口IP)"
      ;;
      $ShenYang_IP1)
      TongJiIP="$ShenYang_IP1(沈阳分公司出口IP)"
      ;; 
      $ShenYang_IP2)
      TongJiIP="$ShenYang_IP2(沈阳分公司出口IP)"
      ;;
      $ShenZhen_IP1)
      TongJiIP="$ShenZhen_IP1(深圳分公司出口IP)"
      ;;
      $IDC_IP)
      TongJiIP="$IDC_IP(IDC机房IP)"
      ;;
      $WuHan_IP1)
      TongJiIP="$WuHan_IP1(武汉分公司出口IP)"
      ;;
      *)
      TongJiIP="$ip(未知IP)"
      esac
    echo "`awk -F "," '{print $8}' ""$LogDir""$LogFile"-"$LogDate"" |grep "Request_Real_Client" | awk -F '"' '{print $4}' | sort | uniq -c | sort -rn |grep "$ip"|awk '{print $1}'` $TongJiIP" >>"$
    wwwTongJiIp"
    done
    echo "脚本执行时间:"$date1"" >>"$wwwSendLog"
    cat >>"$wwwSendLog" <<EOF
                                        www统计信息($Yesterday-03:00至$Today-03:00日志信息统计)
    ----------------------------------------------------------------------------------------------------------------------------
    
    访问IP前30:    
    
    `cat "$wwwTongJiIp"`
    
    ----------------------------------------------------------------------------------------------------------------------------
    
    公司IP访问统计:
    
    北京总部出口IP$Beijing_IP1访问量:$Beijing_IP1_PV
    北京总部出口IP$Beijing_IP2访问量:$Beijing_IP2_PV
    上海分公司出口IP$ShangHai_IP1访问量:$ShangHai_IP1_PV
    广州分公司出口IP$GuangZhou_IP1访问量:$GuangZhou_IP1_PV
    成都分公司出口IP$ChengDu_IP1访问量:$ChengDu_IP1_PV
    沈阳分公司出口IP$ShenYang_IP1访问量:$ShenYang_IP1_PV
    沈阳分公司出口IP$ShenYang_IP2访问量:$ShenYang_IP2_PV
    深圳分公司出口IP$ShenZhen_IP1访问量:$ShenZhen_IP1_PV
    武汉分公司出口IP$WuHan_IP1访问量:$WuHan_IP1_PV
    
    ----------------------------------------------------------------------------------------------------------------------------
    
    访问URI前30:   
    
    ${URI_Top}
    
    ----------------------------------------------------------------------------------------------------------------------------
    
    访问URI的响应时间前30:
    
    ${URI_Responstime}
    
    -----------------------------------------------------------------------------------------------------------------------------
    
    最大URI的响应时间:
      
    ${URI_MaxResponstime}秒
    
    -----------------------------------------------------------------------------------------------------------------------------
    
    平均URI的响应时间:
    
     
    ${AvgRequestTime}秒
    
    -----------------------------------------------------------------------------------------------------------------------------
                                                                                                      xxx网
                                                                                                      技术支持中心运维部
    EOF
    date2=`date +%F-%T`
    echo "脚本执行结束时间:"$date2"" >> "$wwwSendLog"
    #mutt -s ""$Yesterday"日www.xxx.com日志访问量统计" xiewenming@xxx.com < "$wwwSendLog"
    mutt -s ""$Yesterday"日www.xxx.com日志访问量统计" xiewenming@xxx.com < "$wwwSendLog"
    View Code

    日志格式如下

    {"Request_time":"04/Dec/2017:03:44:03 +0800","Request_Server_Name":"www.xxx.com","Request_Server_Host":"42.62.69.90","Request_Server_Port":"80","Forward_Real_WebServer":"192.168.3.86:80"
    ,"Request_Server_Header_account_id":"-","Forward_Real_WebServer_Status_Code":"200","Request_Real_Client":"220.181.46.233","Requests_number":1,"Request_Size":"7167","Request_Response_Time":0.0
    01,"Request_Upstream_Time":"0.000","Request_Uri":"/do_not_delete/noc.gif","Requst_Return_Status_Code":200,"Request_Mothod":"GET /do_not_delete/noc.gif HTTP/1.1","Request_User_Agent":"ChinaCac
    he","Request_Content_Type":"-","Request_Http_Referer":"-"}
    View Code

    系统自带日志切割功能

    [root@x]# more /etc/logrotate.d/nginx 
    # Logrotate file for psacct RPM
    /logs/*.log {
    missingok
    compress
    notifempty
    daily
    rotate 100
    create 0666 bc bc
    postrotate
    kill -USR1 `cat /usr/local/webserver/tengine/logs/nginx.pid` 
    endscript
    }
    View Code

     yum报错问题

    You could try using --skip-broken to work around the problem,rpm -Va --nofiles --nodigest问题

    解决方法

    cd /etc/yum.repos.d/
    mkdir bak
    mv *.repo bak/
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    rpm -vhi https://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm 
    yum clean all 
    rpm --rebuilddb 
    yum update

    有时候下载第三方yum源版本一定要和系统对应上

     I just spotted you have a mix of .el6. and /el7/ packages listed tehre so 
    I suspect you've installed the wrong yum repo for Centreon. You need the one to match your
    CentOS version which appears to be 6 and you have installed the repo for 7. Remove it, add the correct one, run yum clean all then try again.

    其他yum相关

    #导入新key
    rpm --import /etc/pki/rpm-gpg/RPM*
    yum makecache

    CentOS7配置keepalive,设置监听非本机IP

    [root@~]# cat /proc/sys/net/ipv4/ip_nonlocal_bind 
    0

    CentOS7根据本机ip和主机名设置hostname

    #!/bin/bash
    #author: warren
    #blog: http://www.cnblogs.com/xiewenming/
    #date: 2017.12.16
    #function: This is for CentOS 7.2 changge hostname by eth0-lan-ip join domainname
    #version: 1.0
    
    #define domainname
    domainname="abaicheng.com"
    
    #Get the localip for eth0
    localip=`ifconfig eth0 | sed -n '2p' |awk -F " " '{print $2}'`
    
    #Create a tmp file save the localip
    echo $localip > /tmp/localip.txt
    
    #Convert ip format
    hostnameip=`sed "s/./-/g" /tmp/localip.txt`
    
    #set hostname 
    hostnamectl set-hostname ${hostnameip}.${domainname}
    Changge-hostname-CentOS-7.sh

    CentOS 系统添加账户

    #!/bin/bash
    #author: warren
    #blog: http://www.cnblogs.com/xiewenming/
    #date: 2017.12.16
    #function: add user
    
    #导入中文变量
    export LANG="zh_CN.UTF-8"
    #定义锁文件
    Lock_file="/tmp/adduser.lock"
    if [ -f "$Lock_file" ]
    then
    pid=`cat $Lock_file`
    [ -n "$pid" ] && ps -p $pid| grep $pid >/dev/null
    [ $? -eq 0 ]  && echo "脚本正在运行...." && exit 4
    fi
    echo $$ >"$Lock_file"
    
    #导入function文件
    source /etc/init.d/functions
    
    #判断参数个数
    if [ $# -eq 0 ]
    then
    echo "Usage:$0 "+" ("username" | "password")"
    exit 1
    fi
    
    #设置变量name接收第一个参数(要创建的用户名),$n表示第n个参数,且=两边不能有空格
    name=$1
    #设置变量pass接收第二个参数(要为其设置的密码)
    pass=$2
    #echo语句会输出到控制台,${变量}或者 $变量 表示变量代表的字符串
    echo "you are setting username : ${name}"
    echo "you are setting password : $pass for ${name}"
    #添加用户$name,此处sudo需要设置为无密码,后面将会作出说明
    sudo useradd $name
    #如果上一个命令正常运行,则输出成功,否则提示失败并以非正常状态退出程序
    # $?表示上一个命令的执行状态,-eq表示等于,[ 也是一个命令
    # if fi 是成对使用的,后面是前面的倒置,很多这样的用法。
    if [ $? -eq 0 ];then
       echo -e "33[32m user ${name} is created successfully 33[0m"
    else
       echo -e "33[31m user ${name} is created failly 33[0m"
       exit 1
    fi
    #sudo passwd $name会要求填入密码,下面将$pass作为密码传入
    echo $pass | sudo passwd $name --stdin  &>/dev/null
    if [ $? -eq 0 ];then
       echo -e "33[32m ${name}'s password is set successfully 33[0m"
    else
       echo -e "32[32m ${name}'s password is set failly!!! 33[0m"   
    fi
    Useradd.sh

    ip地址信息获取

    http://nstool.netease.com/

     CentOS7更改时区

    timedatectl set-timezone Asia/Shanghai
    

    修改/etc/login.defs文件 设置su

    系统安全方面:

    1.所有程序尽量使用普通用户启动,并设置没有加目录和no bash环境

    服务优化:

    java程序的启动最大和最小内存 最好设置成一样,一般不超过内存的50% tomcat 通常设置为4G就可以

     curl post模拟

    curl -H "Content-type: application/json" -X POST -d '{"password":"51eabc6506b952e15becc1a2ed952224","phone":"13600000000","userNo":"88888333","rank":"20","passwordsalt":"Fl62fw4samfEfnuldxApe9cbe4r9r947"}' internal-only-for-usr-server-2052723005.ap-northeast-1.elb.amazonaws.com:8632/v1/user/receiveStoreUserMessage

    chmod递归设置目录755和文件644权限

    find /path -type f -exec chmod 644 {} ; //设置文件权限为644 
    find /path -type d -exec chmod 755 {} ; //设置目录权限为755
  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/xiewenming/p/7877944.html
Copyright © 2011-2022 走看看