日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LNMP 一键安装脚本阅读

發(fā)布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LNMP 一键安装脚本阅读 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 基礎(chǔ)
    • 筆記
    • 軟件介紹
    • 版本號
    • .user.ini
      • nginx
      • php.ini
    • 文件描述符
      • 系統(tǒng)級別
      • 用戶級別
    • 安裝
      • 編譯安裝Mysql
        • 后續(xù)處理
      • 編譯安裝 php
        • 工具
      • 編譯安裝 nginx
        • lua 配置
        • 流程
    • 安裝流程
    • 其他工具
      • tool/*
      • addons.sh
    • 卸載流程
    • 常用命令
      • php
      • nginx
      • mysql
      • yum
      • python
      • iptables
        • 規(guī)則
        • 服務(wù)
      • lnmp 腳本
    • 其他
      • 源碼地址
  • SHELL學(xué)習(xí)
    • 系統(tǒng)信息
      • 內(nèi)存大小
      • 版本信息
      • 內(nèi)存大小
      • Swap 大小
      • 磁盤大小
      • openssl 版本
      • centos 版本
      • 系統(tǒng)類型, 區(qū)分安裝工具
      • RHEL 版本
      • 系統(tǒng)位數(shù)
      • 判斷系統(tǒng)架構(gòu)是否為 arm
      • 地理位置
    • 系統(tǒng)管理
      • 設(shè)置時區(qū)
      • 創(chuàng)建Swap分區(qū)
      • 禁止 selinux
      • 設(shè)置虛擬內(nèi)存使用大小
      • 配置庫路徑
      • 配置文件描述符數(shù)量和進(jìn)程數(shù)量
      • 自啟管理
    • 進(jìn)程和命令
      • 判斷進(jìn)程是否存在
      • 關(guān)閉程序
    • 語法
      • 變量為 6789 或者等于 10
      • 隨機(jī)值
      • 判斷目錄是否存在, 存在刪除
      • 動態(tài)變量名
      • 局部數(shù)組變量聲明
    • 最佳實踐
      • 選擇 yes 或者 no
      • 刪除前置0, 默認(rèn)值為 0
      • 字符串分割
      • 值排序比較
    • 工具類
      • 字體
      • 按鍵繼續(xù)
      • 判斷文件是否存在, 不存在則下載
      • 編譯
      • 解壓
      • 隨機(jī) Secret
      • 倒計時
      • 死循環(huán)讀取字符串
      • 提示
    • 網(wǎng)絡(luò)
      • 判斷 host 是否包含 127.0.0.1
      • 判斷 dns 是否正確
      • 自定義臨時 dns 服務(wù)器
    • 其他
      • 阻止使用別名
      • 批量創(chuàng)建目錄
      • 管道增加額外參數(shù)
  • 工具類
  • 版本號對比
  • 配置
    • lnmp.conf
  • 選項
    • db
    • php

基礎(chǔ)

筆記

  • 選擇安裝JeMalloc或者TCMalloc, 則在編譯安裝 mysql 和 nginx時存在添加對應(yīng)的擴(kuò)展選項
  • swap 策略: x<1024, y=1024; 1024<x<2048, y=2048; 2048<x<4096, y=4096; 4096<x<16384, y=8192; x>16384,y=8192
  • swap 需要考慮剩余磁盤空間
  • 安裝系統(tǒng)相關(guān)庫時, 需要動態(tài)鏈接
  • 腳本運(yùn)行前執(zhí)行clear, 清空控制臺

軟件介紹

  • FreeType庫是一個完全免費(fèi)(開源)的, 高質(zhì)量的且可移植的字體引擎, 它提供統(tǒng)一的接口來訪問多種字體格式文件
  • PCRE(Perl Compatible Regular Expressions)是一個Perl庫, 包括 perl 兼容的正則表達(dá)式庫
  • Boost庫是一個可移植、提供源代碼的C++庫
  • cmake讀入所有源文件之后, 自動生成makefile, make依據(jù)makefile來批處理編譯

版本號

格式: major.minor.maintenance.build

  • major: 是主版本號, 一般在軟件有重大升級時增長
  • minor: 是次版本號, 一般在軟件有新功能時增長
  • maintenance: 是維護(hù)版本, 一般在軟件有問題修復(fù)后增長
  • build: 是構(gòu)建版本, 一般只要軟件被重新編譯過就會增長

.user.ini

配置參考地址: http://php.net/manual/zh/ini.list.php

  • 只有 PHP_INI_USER 和 PHP_INI_ALL可以被 .user.ini 和 ini_set 還有 nginx 設(shè)置
  • PHP_INI_PERDIR可在 php.ini, .htaccess 或 httpd.conf 中設(shè)定
  • PHP_INI_SYSTEM 可在 php.ini 或 httpd.conf 中設(shè)定
  • .user.ini 文件路徑 DOCUMENT_ROOT 下

nginx

  • 通過增加配置PHP_ADMIN_VALUE設(shè)置 php.ini 的值, 優(yōu)先級高于 .user.ini
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/:/home/wwwlogs/php_seaslog/";

php.ini

  • 默認(rèn)用戶配置文件為 .user.ini
user_ini.filename = ".user.ini"

文件描述符

  • 系統(tǒng)級別: 使用cat /proc/sys/fs/file-max查看, 默認(rèn)值是根據(jù)內(nèi)存大小自動設(shè)置, 一般為內(nèi)存為 x KB, 則描述符數(shù)量為 x/10
  • 用戶級別: 默認(rèn)為 1024
  • 限制原因: 1. 內(nèi)存資源有限 2. 防止程序惡意創(chuàng)建, 影響系統(tǒng)穩(wěn)定性
  • 用戶級別優(yōu)先級高于系統(tǒng)級別

系統(tǒng)級別

# 查看 cat /proc/sys/fs/file-max# 臨時設(shè)置 echo 1000000 > /proc/sys/fs/file-max# 永久設(shè)置 vi /etc/sysctl.conf fs.file-max = 1000000

用戶級別

/etc/security/limits.conf

* soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535
  • 第一列表示用戶和組(@開頭), * 表示所有用戶, 第二列表示軟限制還是硬限制, 第三列表示限制的資源類型, 第四列表示限制的最大值
  • /etc/security/limits.d/ 里面配置會覆蓋 /etc/security/limits.conf 的配置
  • core 是內(nèi)核文件, nofile 是文件描述符, noproc 是進(jìn)程
  • hard和soft的區(qū)別: soft是一個警告值, 而hard則是一個真正意義的閥值, 超過就會報錯, 一般情況下都是設(shè)為同一個值
# soft 查看 ulimit -Sn# hard 查看 ulimit -Hn# 臨時設(shè)置 ## soft ulimit -Sn 160000 ## hard ulimit -Hn 160000# 同時設(shè)置 ulimit -n 180000# 配置文件 cat >>/etc/security/limits.conf<<eof * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 eof

安裝

編譯安裝Mysql

wget https://soft.vpser.net/datebase/mysql/mysql-5.7.26.tar.gz tar xzf mysql-5.7.26.tar.gz wget https://soft.vpser.net/lib/boost/boost_1_59_0.tar.bz2 tar jxf boost_1_59_0.tar.bz2# 編譯安裝 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_BOOST=${cur_dir}/src/boost_${Get_Boost_Ver} make -j `grep 'processor' /proc/cpuinfo | wc -l` if [ $? -ne 0 ]; thenmake fi make install# 用戶組 groupadd mysql useradd -s /sbin/nologin -M -g mysql mysqlchown -R mysql:mysql ${MySQL_Data_Dir} # 初始化數(shù)據(jù)庫 /usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=${MySQL_Data_Dir} --user=mysql chgrp -R mysql /usr/local/mysql/. \cp support-files/mysql.server /etc/init.d/mysql # 可執(zhí)行權(quán)限 chmod 755 /etc/init.d/mysql# 添加動態(tài)庫 cat > /etc/ld.so.conf.d/mysql.conf<<EOF /usr/local/mysql/lib /usr/local/lib EOFldconfig ln -sf /usr/local/mysql/lib/mysql /usr/lib/mysql ln -sf /usr/local/mysql/include/mysql /usr/include/mysql

后續(xù)處理

# 設(shè)置密碼 UPDATE mysql.user SET authentication_string=PASSWORD('${DB_Root_Password}') WHERE User='root';# 刪除匿名用戶 DELETE FROM mysql.user WHERE User='';# 刪除遠(yuǎn)程登錄用戶 DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');# 刪除測試數(shù)據(jù)庫 DROP DATABASE test;# 刷新權(quán)限 FLUSH PRIVILEGES;

編譯安裝 php

# 編譯安裝 --disable-fileinfo ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/conf.d --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --enable-pcntl --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --enable-opcache --with-xsl make ZEND_EXTRA_LIBS='-liconv' -j `grep 'processor' /proc/cpuinfo | wc -l` if [ $? -ne 0 ]; thenmake ZEND_EXTRA_LIBS='-liconv' fi make install# 創(chuàng)建執(zhí)行命令軟連接 ln -sf /usr/local/php/bin/php /usr/bin/php ln -sf /usr/local/php/bin/phpize /usr/bin/phpize ln -sf /usr/local/php/bin/pear /usr/bin/pear ln -sf /usr/local/php/bin/pecl /usr/bin/pecl if [ "${Stack}" = "lnmp" ]; thenln -sf /usr/local/php/sbin/php-fpm /usr/bin/php-fpm fi rm -f /usr/local/php/conf.d/*# 設(shè)置包管理使用的 php.ini pear config-set php_ini /usr/local/php/etc/php.ini pecl config-set php_ini /usr/local/php/etc/php.ini# 安裝 composer curl -sS --connect-timeout 30 -m 60 https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer# 添加啟動任務(wù) \cp ${cur_dir}/src/${Php_Ver}/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpmchmod +x /etc/init.d/php-fpm

工具

cat >phpinfo.php<<eof <?php phpinfo(); ?> eof

編譯安裝 nginx

groupadd www useradd -s /sbin/nologin -g www wwwNginx_With_Openssl=--with-openssl=${cur_dir}/src/${Openssl_New_Ver} --with-openssl-opt='enable-weak-ssl-ciphers' ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module ${Nginx_With_Openssl} ${Nginx_Module_Lua} ${NginxMAOpt} ${Nginx_Modules_Options}

lua 配置

location /lua {default_type text/html;content_by_lua 'ngx.say("hello world")'; }

流程

  • 創(chuàng)建組
  • 編譯安裝
  • 設(shè)置軟連接
  • 開機(jī)自啟
  • 覆蓋配置
  • 創(chuàng)建日志目錄
  • 安裝流程

  • 獲取系統(tǒng)類型, 系統(tǒng)位數(shù), 設(shè)置包管理工具
  • 判斷系統(tǒng)是否在支持范圍
  • 判斷 lnmp 是否已安裝
  • 檢查 lnmp.conf 的配置
  • DB, PHP, MemoryAllocator 選擇
  • 按任意鍵安裝
  • 打印安裝應(yīng)用信息
  • 獲取系統(tǒng)版本
  • 打印系統(tǒng)信息
  • 判斷本機(jī) host 是否有 localhost
  • 檢查 DNS 是否正確
  • 檢查鏡像是否有效
  • 增加 swap 內(nèi)存
  • 設(shè)置時區(qū)
  • 安裝 ntp, 同步系統(tǒng)時間
  • 刪除已安裝的Apache, mysql, php, libcurl
  • 檢查 yum 的配置, 是否有不包含的 repo
  • 安裝依賴
  • 禁止 SELINUX
  • 下載相關(guān)源碼包
  • 安裝依賴 Libiconv Libmcrypt Mhash Mcrypt FreeType pecr Icu4c
  • 動態(tài)庫連接, 設(shè)置文件描述符數(shù), 進(jìn)程數(shù)
  • 安裝數(shù)據(jù)庫, 添加用戶 msyql
  • 刪除測試數(shù)據(jù)庫配置, 編譯包
  • 確定 php 的編譯選項, openssl: --with-openssl; curl: --with-curl; fileinfo: 如果內(nèi)存小于 1G 且設(shè)置為 n 則為 --disable-fileinfo
  • 安裝 php
  • 調(diào)整 PHP 的配置: 1024<內(nèi)存<2048 10-20; 2048<內(nèi)存<4096 20-40; 4096<內(nèi)存<8192 40-60; 8192<內(nèi)存 60-80;
  • 安裝 nginx, 添加用戶 www, 添加 openssl 選項, lua 選項
  • 安裝 php 工具: 1. phpinfo.php 2. 探針 3. 歡迎頁 4. phpMyAdmin
  • 添加 iptables 規(guī)則, 關(guān)閉防火墻
  • 調(diào)整 lnmp 腳本
  • 校驗安裝是否成功
  • 其他工具

    tool/*

    • backup.sh 數(shù)據(jù)備份
    • check502.sh 校驗地址否是 502 網(wǎng)關(guān)錯誤
    • cut_nginx_logs.sh nginx 日志切割
    • denyhosts_removeip.sh 解除 denyhost 屏蔽
    • denyhosts.sh 預(yù)防 SSH 暴力破解的
    • fail2ban.sh 防止暴力破解
    • remove_disable_function.sh 刪除預(yù)定義禁用函數(shù)
    • remove_open_basedir_restriction.sh 刪除 open_basedir 的限制
    • reset_mysql_root_password.sh 重置密碼

    addons.sh

  • eAccelerator
  • XCache
  • Memcached
  • opcache
  • Redis
  • apcu
  • imageMagick
  • ionCube Loader
  • 卸載流程

  • 關(guān)閉 lnmp
  • 刪除 nginx, php-fpm, mysql 的開機(jī)自啟
  • 備份 mysql 的數(shù)據(jù)
  • 刪除下述目錄
  • /usr/local/php /etc/init.d/nginx /etc/init.d/msyql /etc/init.d/php-fpm /usr/local/zend /etc/my.cnf /bin/lnmp

    常用命令

    php

    # 編譯參數(shù) php -i|grep configure# 擴(kuò)展地址 /usr/local/php/bin/php-config --extension-dir# 卸載 rpm -e php-mysql php-cli php-gd php-common php --nodeps

    nginx

    # 查看編譯參數(shù) nginx -V

    mysql

    # 版本 /usr/local/mysql/bin/mysql_config --version# 校驗密碼是否正常 Make_TempMycnf() { cat >~/.my.cnf<<EOF [client] user=root password='$1' socket=/home/mysql/tmp/mysql.sock EOFchmod 600 ~/.my.cnf }Verify_DB_Password() {status=1while [ $status -eq 1 ]; doread -s -p "Enter current root password of Database (Password will not shown): " DB_Root_PasswordMake_TempMycnf "${DB_Root_Password}"Do_Query ""status=$?doneecho "OK, MySQL root password correct." }TempMycnf_Clean() {if [ -s ~/.my.cnf ]; thenrm -f ~/.my.cnffiif [ -s /tmp/.mysql.tmp ]; thenrm -f /tmp/.mysql.tmpfi }# 卸載 yum -y remove mysql-server mysql mysql-libs mariadb-server mariadb mariadb-libs rpm -e mysql mysql-libs --nodeps rpm -e mariadb mariadb-libs --nodeps

    yum

    ## 檢查 yum 的配置, 是否有不包含的 repo sed -i 's:exclude=.*:exclude=:g' /etc/yum.conf

    python

    計算當(dāng)前目錄剩余空間, 單位 G

    #!/usr/bin/env python import osdir = os.path.dirname(__file__) disk = os.statvfs(dir) Avail = disk.f_bavail * disk.f_bsize / (1024*1024*1024) print(int(Avail))

    iptables

    規(guī)則

    iptables -I INPUT 1 -i lo -j ACCEPT # 已經(jīng)創(chuàng)建的連接和封包和本機(jī)有關(guān)的連接匹配規(guī)則 iptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -I INPUT 3 -p tcp --dport 22 -j ACCEPT iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT iptables -I INPUT 6 -p tcp --dport 3306 -j DROP iptables -I INPUT 7 -p icmp -m icmp --icmp-type 8 -j ACCEPT

    服務(wù)

    yum -y install iptables-services service iptables save service iptables reload if command -v firewalld >/dev/null 2>&1; thensystemctl stop firewalldsystemctl disable firewalld fi chkconfig --add iptables chkconfig iptables on

    lnmp 腳本

    # 排除 mysql sed -i 's#/etc/init.d/mysql.*##' /bin/lnmp

    其他

    源碼地址

    https://soft.vpser.net/web/libiconv/libiconv-1.15.tar.gz https://soft.vpser.net/web/libmcrypt/libmcrypt-2.5.8.tar.gz https://soft.vpser.net/web/mcrypt/mcrypt-2.6.8.tar.gz https://soft.vpser.net/web/mhash/mhash-0.9.9.9.tar.bz2 https://soft.vpser.net/web/nginx/nginx-1.16.1.tar.gz https://soft.vpser.net/web/php/php-7.1.33.tar.bz2 https://soft.vpser.net/datebase/mysql/mysql-5.7.26.tar.gz https://soft.vpser.net/datebase/phpmyadmin/phpMyAdmin-4.9.1-all-languages.tar.xz https://soft.vpser.net/prober/p.tar.gz https://soft.vpser.net/lib/openssl/openssl-1.0.2t.tar.gz https://soft.vpser.net/lib/boost/boost_1_59_0.tar.bz2 https://soft.vpser.net/web/php/composer/composer.phar

    SHELL學(xué)習(xí)

    系統(tǒng)信息

    內(nèi)存大小

    [ `free -m | grep Mem | awk '{print $2}'` -le 1024 ]

    版本信息

    cat /etc/*-release

    內(nèi)存大小

    free -m | grep Mem | awk '{print $2}'

    Swap 大小

    free -m | grep Swap | awk '{print $2}'

    磁盤大小

    df -h

    openssl 版本

    openssl version

    centos 版本

    echo "$(python2 -c 'import platform; print platform.linux_distribution()[1]')"lsb_release -rs

    系統(tǒng)類型, 區(qū)分安裝工具

    if grep -Eqi "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; thenDISTRO='CentOS'PM='yum' elif grep -Eqi "Red Hat Enterprise Linux" /etc/issue || grep -Eq "Red Hat Enterprise Linux" /etc/*-release; thenDISTRO='RHEL'PM='yum' elif grep -Eqi "Aliyun" /etc/issue || grep -Eq "Aliyun" /etc/*-release; thenDISTRO='Aliyun'PM='yum' elif grep -Eqi "Fedora" /etc/issue || grep -Eq "Fedora" /etc/*-release; thenDISTRO='Fedora'PM='yum' elif grep -Eqi "Amazon Linux" /etc/issue || grep -Eq "Amazon Linux" /etc/*-release; thenDISTRO='Amazon'PM='yum' elif grep -Eqi "Debian" /etc/issue || grep -Eq "Debian" /etc/*-release; thenDISTRO='Debian'PM='apt' elif grep -Eqi "Ubuntu" /etc/issue || grep -Eq "Ubuntu" /etc/*-release; thenDISTRO='Ubuntu'PM='apt' elif grep -Eqi "Raspbian" /etc/issue || grep -Eq "Raspbian" /etc/*-release; thenDISTRO='Raspbian'PM='apt' elif grep -Eqi "Deepin" /etc/issue || grep -Eq "Deepin" /etc/*-release; thenDISTRO='Deepin'PM='apt' elif grep -Eqi "Mint" /etc/issue || grep -Eq "Mint" /etc/*-release; thenDISTRO='Mint'PM='apt' elif grep -Eqi "Kali" /etc/issue || grep -Eq "Kali" /etc/*-release; thenDISTRO='Kali'PM='apt' elseDISTRO='unknow' fi

    RHEL 版本

    判斷是否是版本 7.*

    [ grep -Eqi "release 7." /etc/redhat-release ]

    系統(tǒng)位數(shù)

    # 64位的系統(tǒng)中int類型還是4字節(jié)的,但是long已變成了8字節(jié) if [[ `getconf WORD_BIT` = '32' && `getconf LONG_BIT` = '64' ]] ; thenIs_64bit='y' elseIs_64bit='n' fi

    判斷系統(tǒng)架構(gòu)是否為 arm

    if uname -m | grep -Eqi "arm|aarch64"; thenIs_ARM='y' fi

    地理位置

    curl -sSk --connect-timeout 30 -m 60 https://ip.vpser.net/country

    系統(tǒng)管理

    設(shè)置時區(qū)

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    創(chuàng)建Swap分區(qū)

    DD_Count=1024 echo "Add Swap file..." dd if=/dev/zero of=/var/swapfile bs=1M count=${DD_Count} chmod 0600 /var/swapfile echo "Enable Swap..." /sbin/mkswap /var/swapfile /sbin/swapon /var/swapfile if [ $? -eq 0 ]; then[ `grep -L '/var/swapfile' '/etc/fstab'` ] && echo "/var/swapfile swap swap defaults 0 0" >>/etc/fstab/sbin/swapon -s elserm -f /var/swapfileecho "Add Swap Failed!" fi

    禁止 selinux

    if [ -s /etc/selinux/config ]; thensed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config fi

    設(shè)置虛擬內(nèi)存使用大小

    ulimit -v unlimited

    配置庫路徑

    if [ `grep -L "/lib" '/etc/ld.so.conf'` ]; thenecho "/lib" >> /etc/ld.so.conf fiif [ `grep -L '/usr/lib' '/etc/ld.so.conf'` ]; thenecho "/usr/lib" >> /etc/ld.so.conf##echo "/usr/lib/openssl/engines" >> /etc/ld.so.conf fiif [ -d "/usr/lib64" ] && [ `grep -L '/usr/lib64' '/etc/ld.so.conf'` ]; thenecho "/usr/lib64" >> /etc/ld.so.conf##echo "/usr/lib64/openssl/engines" >> /etc/ld.so.conf fiif [ `grep -L '/usr/local/lib' '/etc/ld.so.conf'` ]; thenecho "/usr/local/lib" >> /etc/ld.so.conf fi

    配置文件描述符數(shù)量和進(jìn)程數(shù)量

    cat >>/etc/security/limits.conf<<eof * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 eof echo "fs.file-max=65535" >> /etc/sysctl.conf

    自啟管理

    # 開啟 chkconfig --add lnmp chkconfig lnmp on# 關(guān)閉 chkconfig lnmp off chkconfig --del lnmp

    進(jìn)程和命令

    判斷進(jìn)程是否存在

    if ps aux | grep "yum" | grep -qv "grep"; then# 判斷命令是否存在if command -v killall >/dev/null 2>&1; then# 關(guān)閉程序killall yumelse# 關(guān)閉程序kill `pidof yum`fi fi

    關(guān)閉程序

    kill `pidof yum` killall yum

    語法

    變量為 6789 或者等于 10

    [[ "${DBSelect}" =~ ^[6789]|10$ ]]

    隨機(jī)值

    echo "lnmp.org##$RANDOM"

    判斷目錄是否存在, 存在刪除

    [[ -d "${DirName}" ]] && rm -rf ${DirName}

    動態(tài)變量名

    eval echo "${DISTRO} \${${DISTRO}_Version}"

    局部數(shù)組變量聲明

    local -a

    最佳實踐

    選擇 yes 或者 no

    case "${InstallInnodb}" in [yY][eE][sS]|[yY])echo "${InstallInnodb}";; [nN][oO]|[nN])echo "${InstallInnodb}";; *)echo "${InstallInnodb}" esac

    刪除前置0, 默認(rèn)值為 0

    echo ${version[0]:=0} | sed 's/^0*//'

    字符串分割

    version=1.2.3.4 OLDIFS=${IFS} && IFS=. && version=(${version}) && IFS=${OLDIFS}

    值排序比較

    local -a sorted=($(printf "%s\n%s" "${v1}" "${v2}" | sort )) if [ "${v1}" == "${sorted[0]}" ]; then echo -1; else echo 1; fi

    工具類

    字體

    Color_Text() {echo -e " \e[0;$2m$1\e[0m" }Echo_Red() {echo $(Color_Text "$1" "31") }Echo_Green() {echo $(Color_Text "$1" "32") }Echo_Yellow() {echo $(Color_Text "$1" "33") }Echo_Blue() {echo $(Color_Text "$1" "34") }

    按鍵繼續(xù)

    if [ -z ${LNMP_Auto} ]; thenecho ""Echo_Green "Press any key to install...or Press Ctrl+c to cancel"OLDCONFIG=`stty -g`stty -icanon -echo min 1 time 0dd count=1 2>/dev/nullstty ${OLDCONFIG} fi

    判斷文件是否存在, 不存在則下載

    Download_Files() {local URL=$1local FileName=$2if [ -s "${FileName}" ]; thenecho "${FileName} [found]"elseecho "Notice: ${FileName} not found!!!download now..."wget -c --progress=bar:force --prefer-family=IPv4 --no-check-certificate ${URL}fi }

    編譯

    Make_Install() {# 嘗試多進(jìn)程編譯make -j `grep 'processor' /proc/cpuinfo | wc -l`if [ $? -ne 0 ]; thenmakefimake install }

    解壓

    Tar_Cd() {local FileName=$1local DirName=$2cd ${cur_dir}/src[[ -d "${DirName}" ]] && rm -rf ${DirName}echo "Uncompress ${FileName}..."tar zxf ${FileName}if [ -n "${DirName}" ]; thenecho "cd ${DirName}..."cd ${DirName}fi }

    隨機(jī) Secret

    sed -i 's/LNMPORG/LNMP.org_0'$RANDOM`date '+%s'`$RANDOM'9_VPSer.net/g' config.inc.php

    倒計時

    Sleep_Sec() {seconds=$1while [ "${seconds}" -ge "0" ];doecho -ne "\r \r"echo -n ${seconds}seconds=$(($seconds - 1))sleep 1doneecho -ne "\r" }

    死循環(huán)讀取字符串

    while :;doread -p "Enter website root directory: " website_rootif [ -d "${website_root}" ]; then# TODO: somethingbreakelseecho "${website_root} is not directory or not exist!"fi done

    提示

    clear echo "+-------------------------------------------------------------------+" echo "| Remove PHP disable functions for LNMP, Written by Licess |" echo "+-------------------------------------------------------------------+" echo "| A tool to remove PHP disable_functions for LNMP |" echo "+-------------------------------------------------------------------+" echo "| For more information please visit https://lnmp.org |" echo "+-------------------------------------------------------------------+" echo "| Usage: ./remove_disable_function.sh |" echo "+-------------------------------------------------------------------+"

    網(wǎng)絡(luò)

    判斷 host 是否包含 127.0.0.1

    if grep -Eqi '^127.0.0.1[[:space:]]*localhost' /etc/hosts; thenecho "Hosts: ok." else## 添加 localhost 環(huán)路到配置文件echo "127.0.0.1 localhost.localdomain localhost" >> /etc/hosts fi

    判斷 dns 是否正確

    pingresult=`ping -c1 lnmp.org 2>&1` echo "${pingresult}" if echo "${pingresult}" | grep -q "unknown host"; thenecho "DNS...fail"echo "Writing nameserver to /etc/resolv.conf ..."echo -e "nameserver 208.67.220.220\nnameserver 114.114.114.114" > /etc/resolv.conf elseecho "DNS...ok" fi

    自定義臨時 dns 服務(wù)器

    echo -e "nameserver 208.67.220.220\nnameserver 114.114.114.114" > /etc/resolv.conf

    其他

    阻止使用別名

    \cp a b

    批量創(chuàng)建目錄

    mkdir -p /usr/local/php/{etc,conf.d}

    管道增加額外參數(shù)

    curl -sS --connect-timeout 30 -m 60 https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

    工具類

    版本號對比

    #!/bin/bash # -*- tab-width: 2; encoding: utf-8 -*-## @file version_compare ## Compare [semantic] versions in Bash, comparable to PHP's version_compare function. # ------------------------------------------------------------------ ## @author Mark Carver <mark.carver@me.com> ## @copyright MIT ## @version 1.0.0 ## @see http://php.net/manual/en/function.version-compare.phpAPP_NAME=$(basename ${0}) APP_VERSION="1.0.0"# Version compare function version_compare () {# Default to a failed comparison result.local -i result=1;# Ensure there are two versions to compare.[ $# -lt 2 ] || [ -z "${1}" ] || [ -z "${2}" ] && echo "${FUNCNAME[0]} requires a minimum of two arguments to compare versions." &>/dev/stderr && return ${result}# Determine the operation to perform, if any.local op="${3}"# Convert passed versions into values for comparison.local v1=$(version_compare_convert ${1})local v2=$(version_compare_convert ${2})# Immediately return when comparing version equality (which doesn't require sorting).if [ -z "${op}" ]; then[ "${v1}" == "${v2}" ] && echo 0 && return;elseif [ "${op}" == "!=" ] || [ "${op}" == "<>" ] || [ "${op}" == "ne" ]; thenif [ "${v1}" != "${v2}" ]; then let result=0; fi;return ${result};elif [ "${op}" == "=" ] || [ "${op}" == "==" ] || [ "${op}" == "eq" ]; thenif [ "${v1}" == "${v2}" ]; then let result=0; fi;return ${result};elif [ "${op}" == "le" ] || [ "${op}" == "<=" ] || [ "${op}" == "ge" ] || [ "${op}" == ">=" ] && [ "${v1}" == "${v2}" ]; thenif [ "${v1}" == "${v2}" ]; then let result=0; fi;return ${result};fifi# If we get to this point, the versions should be different.# Immediately return if they're the same.[ "${v1}" == "${v2}" ] && return ${result}local sort='sort'# If only one version has a pre-release label, reverse sorting so# the version without one can take precedence.[[ "${v1}" == *"-"* ]] && [[ "${v2}" != *"-"* ]] || [[ "${v2}" == *"-"* ]] && [[ "${v1}" != *"-"* ]] && sort="${sort} -r"# Sort the versions.local -a sorted=($(printf "%s\n%s" "${v1}" "${v2}" | ${sort}))# No operator passed, indicate which direction the comparison leans.if [ -z "${op}" ]; thenif [ "${v1}" == "${sorted[0]}" ]; then echo -1; else echo 1; fireturnficase "${op}" in"<" | "lt" | "<=" | "le") if [ "${v1}" == "${sorted[0]}" ]; then let result=0; fi;;">" | "gt" | ">=" | "ge") if [ "${v1}" == "${sorted[1]}" ]; then let result=0; fi;;esacreturn ${result} }# Converts a version string to an integer that is used for comparison purposes. function version_compare_convert () {local version="${@}"# Remove any build meta information as it should not be used per semver spec.version="${version%+*}"# Extract any pre-release label.local prerelease[[ "${version}" = *"-"* ]] && prerelease=${version##*-}[ -n "${prerelease}" ] && prerelease="-${prerelease}"version="${version%%-*}"# Separate version (minus pre-release label) into an array using periods as the separator.local OLDIFS=${IFS} && local IFS=. && version=(${version%-*}) && IFS=${OLDIFS}# Unfortunately, we must use sed to strip of leading zeros here.local major=$(echo ${version[0]:=0} | sed 's/^0*//')local minor=$(echo ${version[1]:=0} | sed 's/^0*//')local patch=$(echo ${version[2]:=0} | sed 's/^0*//')local build=$(echo ${version[3]:=0} | sed 's/^0*//')# Combine the version parts and pad everything with zeros, except major.printf "%s%04d%04d%04d%s\n" "${major}" "${minor}" "${patch}" "${build}" "${prerelease}" }# Color Support # See: http://unix.stackexchange.com/a/10065 if test -t 1; thenncolors=$(tput colors)if test -n "$ncolors" && test $ncolors -ge 8; thenbold="$(tput bold)" && underline="$(tput smul)" && standout="$(tput smso)" && normal="$(tput sgr0)"black="$(tput setaf 0)" && red="$(tput setaf 1)" && green="$(tput setaf 2)" && yellow="$(tput setaf 3)"blue="$(tput setaf 4)" && magenta="$(tput setaf 5)" && cyan="$(tput setaf 6)" && white="$(tput setaf 7)"fi fifunction version_compare_usage {echo "${bold}${APP_NAME} (${APP_VERSION})${normal}"echo "Compare [semantic] versions in Bash, comparable to PHP's version_compare function."echoecho " - When ${cyan}<operator>${normal} is NOT provided, ${APP_NAME} will output (print to /dev/stdout):"echo " -1: ${cyan}<version1>${normal} is lower than ${cyan}<version2>${normal}"echo " 0: ${cyan}<version1>${normal} and ${cyan}<version2>${normal} are equal"echo " 1: ${cyan}<version2>${normal} is lower than ${cyan}<version1>${normal}"echo }# Do not continue if sourced. [[ ${0} != "$BASH_SOURCE" ]] && return# Process options. while getopts ":hV" opt; docase $opt inh) version_compare_usage && exit;;V) echo "${APP_VERSION}" && exit;;\?|*) echo "${red}${APP_NAME}: illegal option: -- ${OPTARG}${normal}" >&2 && echo && version_compare_usage && exit 64;;esac done shift $((OPTIND-1)) # Remove parsed options.# Allow script to be invoked as a CLI "command" by proxying arguments to the internal function. [ $# -gt 0 ] && version_compare ${@}

    配置

    lnmp.conf

    # 下載地址 Download_Mirror='https://soft.vpser.net'# 檢查鏡像 Check_Mirror# 數(shù)據(jù)庫 DBSelect DB_Root_Password InstallInnodb# php PHPSelect # 不安裝-1 SelectMalloc # 自動安裝 LNMP_Auto

    選項

    db

  • Install MySQL 5.1.73
  • Install MySQL 5.5.62 (Default)
  • Install MySQL 5.6.44
  • Install MySQL 5.7.26
  • Install MySQL 8.0.13
  • Install MariaDB 5.5.63
  • Install MariaDB 10.0.38
  • Install MariaDB 10.1.40
  • Install MariaDB 10.2.24
  • Install MariaDB 10.3.15
  • DO NOT Install MySQL/MariaDB
  • php

  • Install PHP 5.2.17
  • Install PHP 5.3.29
  • Install PHP 5.4.45
  • Install PHP 5.5.38
  • Install PHP 5.6.40 (Default)
  • Install PHP 7.0.33
  • Install PHP 7.1.30
  • Install PHP 7.2.19
  • Install PHP 7.3.6
  • 總結(jié)

    以上是生活随笔為你收集整理的LNMP 一键安装脚本阅读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。