Linux 常用命令

Linux 常用命令




linux 常用命令 实用命令


1. yum 命令
    # yum repolist            \\ 查看已启动的仓库
    # yum info httpd           \\ 查看是否有httpd 安装包可以安装
    # rm -rf /var/run/yum.pid   \\ 强制关掉yum进程
    # yum list all               \\ 显示可用安装包
    # yum clean all               \\ 清除缓存
    # yum makecache                \\ 建立缓存
    # yum install epel-release      \\ 安装epel源
    # yum install hping3             \\ 快速ping的工具 模拟DDOS # hping 192.168.10.14 --fast # hping3 -h 帮助命令 在epel源
    # yum install bash-completion     \\ 自动 补全命令 插件
    # yum install lrzsz                \\ 拖动文件 
        rz  上传
        sz a.txt 下载
    # yum install dos2unix          \\ 在windows上编辑的脚本换行符不一样 需要转换成unix格式
        dos2unix a.txt               \\ 转换成 unix格式

        关于 Linux 与 Windows 文件格式
            vim 修改文件格式
                :set ff                 \\ 查看文件格式
                :set ff=unix             \\ 修改文件格式 unix
            文件为dos格式 linux 会报错 bin/bash^M: bad interpreter: No such file or directory


2 rpm 命令
    # rpm -qa | grep nginx            \\ 查看系统所有的rpm包
    # rpm -qf /etc/nginx/nginx.conf    \\ 查看系统中一个已知的文件属于哪个rpm包
        # which grep                    \\ 查询某一命令由哪个安装包提供 配合上面命令使用
    # rpm -ql nginx                      \\ 查询已安装的软件包的相关文件的安装路径          
    # rpm -qi nginx                       \\ 查询一个已安装软件包的信息
    # rpm -qc nginx                        \\ 查看已安装软件的配置文件
    # rpm -qd nginx                         \\ 查看已安装软件的文档的安装位置
    # rpm -qR nginx                          \\ 查看已安装软件所依赖的软件包及文件


3. 文件查询 切割等操作
    # grep 'Client' a.txt           \\ 查找有Client 所在的行
    # grep -A 1000 'Aug  8' a.txt    \\ 查找 Aug  8 所在的行 及下面1000行
    # grep -e'Aug 12' -e 'Aug 13'     \\ 删除 Aug 12 或 Aug 13
    # grep -v '61.31.168.61' a.txt     \\ -v反向
    # cut -d' ' -f 2-4,8,9 a.txt        \\ 以空格为分隔符 切割 保留第23489字段
    # sed 's/^ *//' a.txt                \\ 删除字段前面的所有空格
    # sort -t ' ' -k3,3 -u -n a.txt       \\ 以空格为分隔符 以第3字段到第3字段为重复标准 排序 -u去重复 -n以数字大小进行排序
    # grep Client messages | grep 'Aug  8' | cut -d' ' -f3,4,9 -u -n   \\ 筛选系统日志需要的字段


4. xshell中设置
    ❶. xshell linux 不能使用 删除键  属性 键盘 勾选 两个 ASCII
    ❷. xshell vim   不能使用 小键盘  属性 vty  设为普通
    ❸. xshell 连接 使用 vim 退出 后屏幕仍然显示 属性 终端 改为 xterm
        或  # vim ~/.bashrc             \\ 编辑 文件 
                export TERM=xterm        \\ 末尾 添加
            # source ~/.bashrc            \\ 使source生效 也可重新连接


5. vim 中常用命令
    ❶. vim 中 按到 ctrl+z 退出了  命令行输入   fg  返回
    ❷. vim 中 提示有文件打开 使用 ls -a 删除以.开头的+要打开的文件名的文件
    ❸. rx                     更改字符       rx    将当前光标下的字符更改为x(x为任意字符)
    ❹. ~                      更改当前光标下的字符的大小写
    ❺. D 或 d$                删除当前光标 后面的所有字符
    ❻. :%s/a/b/g              将整个文件的所有a替换为b
    ❼. %s/^[[:space:]]//g     删除行首的空格
    ❽. 删除空白                ^v 块选择 jk移动  d  删除  可以删除 空白
    ❾. 整段缩进                ^v 块选择或者shift +v按一下   jk移动 shift + >   向右移动
    ❿. 加#注释                 ^v 块选择 --> jk移动 --> shift + i --> shift + # --> esc
    ❿. set nu       显示行号
    ❿. set nonu     关闭行号


6. 关于查看系统配置等命令
    # systemctl list-unit-files    \\ 查看所有服务的状态
    # systemctl is-enabled httpd    \\ 查看某一服务是否开机启动
    # systemctl daemon-reload        \\ 重载 systemctl 配置
    # cat /etc/centos-release         \\ 查看centos 系统版本
    # uname -a                         \\ 查看系统内核版本
    # df -hl                \\ 查看磁盘 总用量
    # df -hT                 \\ -T 列出文件系统的类型
    # free -m                 \\ 查看剩余内存
    # who -a                   \\ 查看最近用户登录
    # top
    # netstat -tnlp               \\ 查询 所有端口号 对应的进程   命令由net-tools提供
    # hostname Teo                 \\ 临时设置主机名
    # hostnamectl set-hostname Teo  \\ 永久设置主机名 
    # hostnamectl                    \\ 查询系统相关信息及版本
    # uptime                          \\ 查看系统负载 5分钟 10分钟 15分钟
    # cat /etc/passwd                  \\ 查看系统有哪些用户
    # userdel -r haha                   \\ 删除用户 连同家目录
    # w                                  \\ 看谁在线
    # last | head                         \\ 最后的登录的时间
    # pkill -KILL -t pts/0                 \\ 杀掉终端


7. nginx相关命令
    # usr/local/nginx/sbin/nginx -v       \\ 显示Nginx的版本信息
    # usr/local/nginx/sbin/nginx -V        \\ 显示Nginx的版本信息 及 编译安装时的参数
    # usr/local/nginx/sbin/nginx -t         \\ 仅测试配置文件是否有错
    # usr/local/nginx/sbin/nginx -s quit     \\ 优雅停止nginx 先关闭端口 停止接受 处理完当前请求 才停止nginx


8. 常用 目录 配置文件
    ❶. /etc/sysconfig/network-scripts/ens33     \\ 网络属性配置文件
    ❷. /etc/yum.repos.d/                         \\ yum 仓库 配置文件
    ❸. /etc/sysconfig/selinux                     \\ selinux 配置文件 修改需要reboot才生效
    ❹. /etc/ssh/sshd_config                        \\ ssh 配置文件 # systemctl restart sshd 修改端口需要重启服务
    ❺. /etc/profile                                 \\ 历史记录配置文件
           shopt -s histappend                       \\ 改为追加形式
           HISTSIZE="3000"                            \\ 默认保留1000条


9. 查看各软件版本
    # mysql -V                         \\ 查看 Mariadb 版本
    # httpd -v                          \\ 查看 Apache 版本
    # zabbix_server -V                   \\ 查看 Zabbix 服务器版本
    # zabbix_agentd -V                    \\ 查看 Zabbix 客户端版本
    # /usr/local/nginx/sbin/nginx -V       \\ 查看 Nginx 版本及编译的信息


10. 关闭selinux
   # vim /etc/sysconfig/selinux
       SELINUX=disabled            \\ 永久关闭 需要重启
   # getenforce                     \\ 查询状态
   # setenforce 0                    \\ 临时关闭


11 更改系统语言
    # echo $LANG              \\ 查看当前操作系统的语言
        中文: zh_CN.UTF-8
        英文: en_US.UTF-8
    # export LANG=en_US.UTF-8    \\ 临时更改默认语言,当前立即生效 重启失效
    # vim /etc/locale.conf        \\ 此为centos7 如果是centos6 使用vim /etc/sysconfig/i18n
        LANG=“en_US.UTF-8”
    # source /etc/locale.conf       \\ 立即生效


12 设置开机启动 几种方法
    1 修改开机启动文件:/etc/rc.local(或者/etc/rc.d/rc.local)
        # vim /etc/rc.d/rc.local             \\ 把要执行的命令 写到最后即可 最好不用 启动的时候容易出错
        # chmod +x /etc/rc.d/rc.local         \\ 需要给执行权限  默认是没有的 /etc/rc.local 只是软连接而已
    2 将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下  系统启动后就会自动执行该目录下的所有shell脚本。
        # /etc/profile.d/aaa.sh                 \\ 把要执行的命令 写到 脚本即可
            /usr/local/tg/bin/telegram-cli -k /usr/local/tg/tg-server.pub -WDCRE -P 8890 -d &>/dev/null &
    3 通过chkconfig命令设置                        \\ 未测试
        # 1.将(脚本)启动文件移动到 /etc/init.d/或者/etc/rc.d/init.d/目录下。(前者是后者的软连接)
        mv  /www/wwwroot/test.sh /etc/rc.d/init.d

        # 2.启动文件前面务必添加如下三行代码,否侧会提示chkconfig不支持。
        #!/bin/sh                          告诉系统使用的shell,所以的shell脚本都是这样
        #chkconfig: 35 20 80               分别代表运行级别,启动优先权,关闭优先权,此行代码必须
        #description: http server          自己随便发挥!!!,此行代码必须
        /bin/echo $(/bin/date +%F_%T) >> /tmp/test.log

        # 3.增加脚本的可执行权限
        chmod +x  /etc/rc.d/init.d/test.sh

        # 4.添加脚本到开机自动启动项目中。添加到chkconfig,开机自启动。
        [root@localhost ~]# cd /etc/rc.d/init.d
        [root@localhost ~]# chkconfig --add test.sh
        [root@localhost ~]# chkconfig test.sh on

        # 5.关闭开机启动 
        [root@localhost ~]# chkconfig test.sh off

        # 6.从chkconfig管理中删除test.sh
        [root@localhost ~]# chkconfig --del test.sh

        # 7.查看chkconfig管理
        [root@localhost ~]# chkconfig --list test.sh


13. 使用光盘/U盘当做本地yum仓库
    # cd /etc/yum.repos.d
    # mkdir bak
    # mv ./*.repo bak
    # mount /dev/cdrom /mnt              \\ 挂载光盘至某目录 如/mnt
    # vim /etc/yum.repos.d/lo.repo        \\ 创建配置文件
        [baselo]
        name=CentOS 7 Release 7.1.1503
        baseurl=file:///mnt                 \\ cdrom 下面有 repodata目录 所以指向
        gpgcheck=0
        enabled=1
    # yum clean all
    # yum repolist


14. 网卡配置
    # vim /etc/sysconfig/network-scripts/ifcfg-ens33
        TYPE="Ethernet"     \\ 接口类型 常见的有Ethernet以太网 Bridge桥接
        PROXY_METHOD="none"
        BROWSER_ONLY="no"
        BOOTPROTO="static"    \\ 激活此设备时使用的地址配置协议,常用dhcp,static,none,bootp;
        IPADDR=192.168.10.10   \\ ip地址
        NETMASK=255.255.255.0   \\ 子网掩码
        GATEWAY=192.168.10.254   \\ 网关
        DNS1=8.8.8.8              \\ DNS
        DEFROUTE="yes"
        IPV4_FAILURE_FATAL="no"
        IPV6INIT="yes"
        IPV6_AUTOCONF="yes"
        IPV6_DEFROUTE="yes"
        IPV6_FAILURE_FATAL="no"
        IPV6_ADDR_GEN_MODE="stable-privacy"
        NAME="ens33"
        UUID="e9f80c94-a517-42a1-a465-1611e83849ec" \\ 设备的唯一标识
        DEVICE="ens33"                               \\ 此配置文件应用到的设备
        ONBOOT="yes"                                  \\ 在系统引导时是否激活此设备
    # systemctl restart network
    
    网卡配置多个ip地址
        方法01: 永久配置ip
            # cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:0}
            # vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
                NAME="ens33:0"          \\ 这些为必改项目
                DEVICE="ens33:0"         \\ 需删除UUID"          \\ 这些为必改项目

        方法02: 永久配置ip
            # vim /etc/sysconfig/network-scripts/ifcfg-ens33       \\ 配置多ip
                IPADDR1=192.168.10.17
                PREFIX1=24

                IPADDR2=192.168.10.18
                PREFIX2=24
            # ip addr

        方法03: 临时配置ip
            # ifconfig ens33:1 192.168.10.16/24        \\ 添加 第二个ip
            # ip addr add 192.168.10.21/24 dev ens33:1  \\ 添加 第二个ip

            # ifconfig ens33:1  192.168.10.16/24 dwon     \\ 删除
            # ip addr del 192.168.10.16/24 dev ens33:1     \\ 删除

    虚拟机 添加 网卡后 没有配置文件 需要创建
        # cd /etc/sysconfig/network-scripts/
        # mv ifcfg-ens33 ifcfg-ens37
        # vim ifcfg-ens37
            NAME=ens37                \\ 改名
            DEVICE=ens37               \\ 改名
            #UUID=                      \\ 删除 UUID
        # systemctl restart network
        # ifconfig

    临时修改 网卡ip
        # ifconfig ens33 192.168.10.16/24 up    \\ 修改网卡的ip地址为 192.168.10.16


15. 解决VMware Workstation 两台 windowns 之间网络不通的问题
    控制面板 --> 系统与安全 --> windows defender 防火墙 --> 高级设置 --> 公用配置文件 
    --> windows defender 防火墙属性 --> 公用配置文件 --> 入站连接 --> 允许


16. umount命令 及 fuser命令
    umount卸载磁盘时报错,提示target is busy
    使用umount -f强制卸载依然报错
    解决方法:使用fuser  -mv -k  /mnt 先杀死使用该目录的所有进程,然后在执行卸载操作
    -m  后跟一个目录、文件或者设备名,列出使用该文件的进程PID
    -v 显示详细信息
    -k 杀死使用指定文件的所有进程
    关于fuser的介绍:
    fuser 可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、或者网络端口,并给出程序进程的详细信息.
    fuser只把PID输出到标准输出,其他的都输出到标准错误输出
    查看那些程序使用tcp的80端口: 
    fuser -v -n tcp 80 


17. Linux 硬盘 安装
    ❶. 使用UltraISO制作USB启动盘
        a 文件-->打开-->选择要安装的镜像
        b 启动-->写入硬盘映象
        c 选择U盘-->写入方式一般为USB-HDD+ 点击写入
    ❷. 在 Install CentOS 7 上按e 
        把hd:与quiet之间的字符都删除,变成下面这样,其实就添加了/dev/sdb4,sdb4就是U盘的分区号 之后 按 Ctrl+ x重启
            vmlinuz initrd=ini trd.img inst.stage2=hd:/dev/sdb4 queit
        如果启动不了 可以等到有命令行出现
            # ls
            # cd dev
            # ls             \\ 可以查看到U盘的盘符是哪一个 回去再添加上就可以了


18. 关于交换分区
    释放 交换分区中的内存
        # free -m          \\ 查看交换分区内存大小
        # swapon -s         \\ 查看 交换分区挂载目录
        # swapoff /dev/dm-1  \\ 停止交换分区 会释放交换分区 到内存中 主要内存要有足够的空间 需要几分钟停止
        # swapon -a           \\ 挂载交换分区
        # free -m

    添加交换分区
        # dd if=/dev/zero of=/swapfile bs=8M count=256  \\ 创建 swap分区为2G 内存不够用时可用此分区做为内存使用
        # mkswap /swapfile       \\ 格式化交换分区 bs=bytes:同时设置读入/输出的块大小为bytes个字节 
                                  \\ count=blocks:仅拷贝blocks个块,块大小等于ibs/bs指定的字节数
        # swapon /swapfile         \\ 启用/挂载 交换分区 # swapoff /swapfile 关闭 交换分区后可用rm删除
        # swapon -s                 \\ 查看
        # vim /etc/fstab             \\ 开机自动 挂载 可使用 df -h 挂载的盘符
            /swapfile    swap     swap    defaults        0 0


19. 查看 nginx httpd mysql php 编译参数
    # nginx -V                                     \\ 查看 nginx 编译参数 及 版本
    # cat /usr/local/apache2/build/config.nice      \\ 查看 apache 编译参数
    # httpd -v                                       \\ 查看 apache 版本
    # /usr/local/php/bin/php -i | grep configure      \\ 查看 php 编译参数
    # php -v                                           \\ 查看 php 版本
    # mysql -v                                          \\ 查看mysql 版本
        status;                                          \\ 进入数据库查看mysql 版本       
        /s;                                               \\ 进入数据库查看mysql 版本  
    # cat /usr/local/mysql/bin/mysqlbug | grep configure   \\ 查看mysql 编译参数


20. 常用源地址
    ❶. http://rpmfind.net/       \\ 很不错的一个rpm 包下载的地方 几乎所有rpm包都可以下到
    ❷. https://sourceforge.net    \\ 开源软件下载
    ❸. 163的源:
           # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
    ❹. 阿里云的源:
           # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    ❺. epel的源
           # rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    接口网址: 
            https://www.free-api.com                       \\ 各种接口网址
            https://api.btstu.cn/                           \\ 好用的免费接口网址
            https://v1.alapi.cn/api/icp?domain=baidu.com     \\ 查询 备案 接口
            result=$(whois $line | grep "No match"|wc -l)     \\ 查询 注册 接口
            https://johnvansickle.com/ffmpeg/                  \\ ffmpeg 官网
            

21. 常见错误解决
    重启虚拟机后,再次重启nginx会报错: nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
        # vim /usr/local/nginx/conf/nginx.conf         \\ 修改 nginx.conf 文件,指定 pid文件 所在目录
           pid    /usr/local/nginx/logs/nginx.pid;
        # mkdir /usr/local/nginx/logs


22. 忘记root密码  修改root密码
    ❶.centos7
        单用户模式
            重启开机esc按e进入
            在LANG=en_US.UFT-8后面添加init=/bin/sh     ro改为rw,在rhgb前
            Ctrl+x
            # touch /.autorelabel         \\ selinux开启 需执行命令
            # passwd root
            # exec /sbin/init               \\  重启
        救援模式
            光盘启动 选择 Troubleshooting --> Rescue a installed system --> 1 --> 回车
            # chroot /mnt/sysimage            \\ 切换系统环境 为根用户环境
            # passwd
            # exec /sbin/init
    ❷.centos6
        单用户模式
            重启开机按e 选择 kernel选项
            /init 1            \\在后面键入 进入单用户模式
            回到 kernel 按 b 重启
            # vi /etc/passwd
                光标出删除root后面的x   用x键删除
        救援模式
            光盘启动 选择 Rescue installed system
                网卡选择否 其他一路是
            # vi /mnt/sysimage/etc/passwd
                光标出删除root后面的x   用x键删


23. Windows 一些常用信息
    ❶. 修改华为AC6005-8 无线密码 http://192.168.251.1
        配置 --> AP配置 --> 模板管理 --> 无线业务 --> 安全模板
    ❷. netstat -ano   windows查看 某一程序 的 网络连接
    ❸. win2012r 显示 桌面 计算机 图标
        ①. 在搜索框中输入 icon 
        ②. 运行 --> rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
    ❹. Sublime Text 调中文
        Crrl + Shift + p --> install --> Package Control: Install Package --> 
        chinese --> ChineseLocalizations --> Help --> Language-> 简体中文


24. grep 命令
    引号 会先处理一遍 在交给grep

    单引号:  
    可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。单引号''是全引用,被单引号括起的
    内容不管是常量还是变量者不会发生替换。
     
    双引号:
    把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。双引号""是部分引用,被
    双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。

    不加引号:
    不会将含有空格的字符串视为一个整体输出, 如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串
    中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。

    grep "\\\\" file 与  grep '\\' file     相同
        第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找
        第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找

    egrep = grep -E   支持扩展元字符的正则形式
    fgrep  不支持正则表达式

    状态码
        0 找到 
        1 没找到
        2 文件不存在

        grep 也可以是扩展元字符 在这些元字符前面加 \ 

    gerp 里面的特殊 符号

        \w 所有字母与数字          称为 字符   等同[a-zA-Z0-9]
        \W 所有字母与数字之外的字符 称为 非字符 等同[^a-zA-Z0-9]
        \b 词边界                 等同于 \< \> 词首词首定位符   '\blove\b'  不重要

    grep 用法

        grep 选项 '内容' 路径

        -r -R   递归 针对目录    后面要跟目录
        -l      只列出匹配行坐在的文件名
        -v      取反 Invert
        -i      忽略大小写

        --exclude-dir=/data    排除 /data 目录
        -E      egrep 支持扩展元字符匹配
        -o      只打印出来 找到的内容

        -c      显示成功匹配的行数
        -n      显示 相对的行
        -q      不显示到标准输出 quit
        -s      禁止显示文件不存在或文件不可读的错误信息
        -B2     查看上面两行
        -A2     查看下面两行
        -C2     查看上下两行

    grep用法举例
        # grep -rl --exclude-dir={proc,boot,sys} 'root' /        \\ 在根目录中查找root  注意 除去文件夹的写法不要写路径       
        # sed 's/root/teooo/g' `grep --exclude-dir={proc,sys,boot} -lr 'root' /`     \\ grep 配合 sed 实现 搜索替换
        # find /data -name '*.sh' | xargs grep "root"                                 \\ 找到文件后 xargs传递给 grep
                                                       \\ xargs 会把 前面的命令整理 成 路径 以空格 隔开的形式 传递给 grep
        # ls | xargs grep "send"
        # grep 'send' `ls`
        # grep 'send' `cat a.txt`
        # ll | grep '^d    列出目录
        # grep 'love' d*   以d开始的所有文件
        # grep --help | grep '\-v'      此 - 要加转移 因为 grep 会认为 -v是选项
        # grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}'    过滤ip
        # ifconfig | grep -E -o '([0-9]{1,3}\.){3}[0-9]{1,3}' | sed -n '1p'   提取本机ip


25. sed 命令
    sed Stream EDitor 行编辑器 默认不编辑源文件 仅对模式空间中的数据做处理 逐行处理 处理结束后 显示出来
    模式空间: sed命令读取数据 会存储到内存空间即sed模式空间

    # sed 选项 "定址命令" 文件

        1. 选项
            -i : 直接修改源文件
            -r : 表示使用扩展正则表达式   默认 支持基本正则表达式  或者加 \

            -n : 只显示符合条件的行    静默模式 不在默认显示模式空间中的内容
            -e : 后面可接多个文件

        2. 地址定址
                5     第5行
                $     最后一行          
                1,5   从1到5行
                1,+2  第一行 及 以后两行
                /RE/  正则匹配 需要放到双斜线中       做模式匹配  过滤特定的行
                    \# #   亦可以写成这样 可以加任意字符或数字
                    \x x

                /RE1/,/RE2/   第一次被正则1匹配到的开始,被第2次匹配到的结束,这中间的所有行

        3. 命令

            s:  s///修饰符  s###  s@@@ 替换 将前面正则匹配到的字符串 替换成其他字符串
                修饰符
                    g :  全局替换
                    i :  忽略字符大小写
            c:  替换整行              \\ sed '/^SELINUX=enforcing/cSELINUX=disabled' /etc/selinux/config
            d:  删除符合条件的行
            n:  处理下一行              \\  sed -r '/^aaa/{n;s/sbin/uuu/}'
            !  在命令前面的叹号 表示取反
            &   符号 是 调用 前面 匹配到的所有东西sed 's/.*/#&/'   所有行首 加#
            ;   可以 分开 两部分  \\ sed '1d;s/aaa/bbb/g'    相当于 -e
            { } 如果有多个命令可以使用 {;}隔开
                sed '3{h;d}'
                sed '3{d;}'          下面三个一样
                sed '3{d}'
                sed '3d'
            \t  制表符
            h:  把命令放到暂存空间   覆盖  默认的情况下暂存空间有一个 空行 只有一个 回车符
            H:  把命令放到暂存空间   追加
            g:  把暂存空间所有的内容从暂存空间取出 覆盖
            G:  把暂存空间所有的内容从暂存空间取出 追加
            p:  显示符合条件的行       \\ 本身模式空间里面有 在显示 就是 2条
            a:  \string                \\ 在指定的行后面追加新行 内容为string
                \n 换行符 可以用于换行
            i:  \string                  \\ 在指定的行前面追加新行 内容为string
            r FILE: 将指定的文件及内容添加至 符合条件的行 的下面 可用于文件合并
            w FILE: 将指定范围内的内容另存至指定的文件中
            \L: 是转换全部 &匹配到的 为小写  直到遇到 \E 为止
            \U: 是转换全部 &匹配到的 为大写  直到遇到 \E 为止
        
    sed 实例
        # sed '/11111/i\55555' test.txt                   i 插入上一行 查找11111的行  在上方插入 55555
        # sed '/22222/a\55555' test.txt                   a 插入下一行 查找22222的行 在下方插入 55555

        # sed -i 's/^[[:space:]]*//g'  ./grub2.cfg        删除/etc/grub2.cfg文件中行首的空白字符
        # sed 's/id:3/id:5/g' ./inittab                   替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5
        # sed '/^$/d' inittab                             删除/etc/inittab文件中 空白行     删除空行
            # sed '/^[ ]*$/d' ./inittab                   删除空行 及 全是空格的行    [ ]*有0个或多个空格
            # sed '/^[[:space:]]/d' ./inittab             删除以空格开始的行.
            # sed '/^\s/d' ./inittab                      删除以空格开始的行.
            # sed '/^[ ]/d' ./inittab                     删除以空格开始的行.

            # sed '/^[ \t]*$/d' aa.sh          删除空行  \t是制表符

                空格  [[:space:]]
                      [ ]
                      \s
        # sed 's/^#//g' ./inittab               删除 /etc/inittab文件中 开头的#号
        # sed 's/^#\s*//g' ./inittab            删除 /etc/inittab文件中 开头的#号 及 后面的空格有0个或多个空格 同时删除
        # sed 's/^\s\s*#//' ./inittab           删除 /etc/inittab文件中 空格开头的 后跟#  删除 空白字符及#号

        # sed 's/.*/#&/' ./inittab              所有行首 加#
        # sed 's/^\s*[^#\t].*$/#&/' ./inittab   不是以#号开头的 加#

        # echo "/etc/fstab" |sed -r 's#(^/.*/)([^/]+/?)#\1#'   取目录名
        # echo "/etc/fstab" |sed -r 's#(^/.*/)([^/]+/?)#\2#'   取基名

        # sed '2,20s/^#*/#/' aa.sh              没有注释的加注释
        # sed 's/^[ \t#]*/#/g' aa.sh            把没有注释的加注释 或者 前面有空格的 删除空格 加注释

        # sed "1d" ./passwd                     删除 第一行
        # sed "$d" ./passwd                     删除 最后一行
        # sed '$G' ./passwdn                    最后一行下面 加上空白行
        # sed '2r /etc/issue' ./passwd          将/etc/issue 此文件的内容 添加到 第二行的下面
        # sed '$r /etc/issue' ./passwd          将/etc/issue 此文件的内容 添加到 最后一行
        # sed '1,2r /etc/issue' ./passwd        在第一行和第二行后面都添加
        # sed "1,3d" ./passwd                   删除 前三行
        # sed -n '1,2p' ./passwd                仅仅显示 前两行
        # sed "1,+2d" ./passwd                  删除 第一行 及 以后两行
        # sed 's/^ *//' ./passwd                删除行首空格
        # sed 's/ *$//' ./passwd                删除行尾空格
        # sed "/root/d" ./passwd
        # sed '/^\//d' ./passwd                    删除以 \ 开头的行   /需要转义符
        # sed '/^root/a\#hello' ./passwd           查找以root开头的行 添加一行 内容为#hello  \可以省略
        # sed '/^root/a\# hello\n# hi' ./passwd     \n为换行符 添加两行
        # sed 's/spool/teooo/g' ./passwdn          把所有的 spool 替换成teooo
        # sed 's/^\//#/' ./passwdn                 查找以 \ 开头的行 替换成 #  默认替换每一行的第一次 被匹配到的
        # sed 's/\//#/' ./passwdn                  查找 \ 替换成 #  默认替换每一行的第一次 被匹配到的
        # sed 's/\//#/g' ./passwdn                 把所有的 \ 都替换成 #
        # sed 's/sp..l/&er/g' ./passwd             查找所有 sp..l 的字符串 替换成 sp..ler 
        # sed 's/\(sp..l\)/\1er/g' ./passwdn       \(   \) 为后项引用  \1 调用后项引用 查找所有sp..l 的字符串 替换成 sp..ler
        # sed 's/s\(...l\)/S\1/g' ./passwdn        只使用前面引用的 一部分时 只能使用 后项引用 ... 不能使用&.
        # history | sed 's/[[:space:]]//g'         把history 所有的空格 删除  [[:space:]] 替换成 啥也没有
        # history | sed 's/^[[:space:]]*//g'       把行首的空白字符    * 所有空白字符
        # sed '$a'"$teo" aa.txt                    在最后一行添加 teo的变量 可以使用 两种引号 各有需求
        # sed "\$a$teo" aa.txt                     或转义
        # sed -i 's/[A-Z]/\L&/g' a.txt             把所有大写字母 换成 小写字母
        # sed -i 's/[a-z]/\U&/g' a.txt             把所有小写字母 换成 大写字母


26. awk 命令

    awk 'BEGIN{print 1/2} {print "ok"} END{print "__________"}' ./passwd
    处理顺序 
        1. 处理BEGIN 在读文件之前处理
        2. 处理 行处理 处理每一行
        3. 处理 END 在行处理结束 处理

        -F"[ :\t]"

    内部变量
        $0:    $0保存当前记录的内容              
        NR:    显示行号 总的记录    多个文件         
        FNR:   显示行号 当前文件的  单个文件 
        NF:    当前行有多少个字段                
            # awk -F':' '{print FNR,$0,NF}' passwd
        $NF:   最后一个字段
            # awk -F':' '{print $NF}' passwd
        FS:    输入字段分隔符   默认空格或制表符
            # awd 'BEGIN{FS=":"} {print $1,$2}' passwd
            # awk -F"[ :\t]" '{print $1,$2,$3,$4,$5}' aa.txt     指定多个 分隔符  空格 冒号 制表符

        OFS:   输出字段分隔符               \\ , 默认调用OFS 默认为空格
            # awk 'BEGIN{FS=":";OFS="---"} {print $1,$2}' passwd

        RS   输入 记录分隔符  把冒号 换成 回车         默认每一条为一个记录
        ORS  输出 记录分隔符  把回车 换成 冒号
            # awk 'BEGIN{RS=":"} {print $0}' passwd
            # awk 'BEGIN{RS=" "} {print $0}' aa.txt         一行 拆分成多行
            # awk 'BEGIN{ORS=" "}{print $0}' bb.txt         多行 合并为一行

        # awk 'BEGIN{FS=":";OFS="----"}{print NR,FNR,NF,$NF,$3,$0}' passwd

    print
        print 后面引号"" 是要打印出来的 
        \n 换行
 
        printf 可以打印格式

    / /  正则
    ~    匹配
    !~  不匹配
        # awk -F":" '$4~/teo/' passwd
        # awk -F":" '$NF!~/bash$/' passwd

    关系运算符
        
        运算符
        <          小于          x<y
        <=         小于或等于     x<=y
        ==         等于          x==y
        !=         不等于        x!=y
        >=         大于等于      x>=y
        >          大于          x>y

        # awk -F":" '$3==0' passwd            \\ 此0位数字
        # awk -F":" '$3=="0"' passwd           \\ 此0为字符串
        # awk -F":" '$3<10' passwd
        # awk -F":" '$0~/teo/' passwd

    条件表达式
        if(){}
        awk '{if($3=0){print $0}}' aa.txt

        # awk -F":" '$3<5{print $0}' passwd                        \\ 如果第三列小于5  打印满足条件的
        # awk -F":" '{ if($3<5) {print $0} }' passwd                \\ 标准写法 空格在里面没有意义
        # awk -F":" '{if($3>300) {print $3} else{print $1}}' passwd
        # awk -F":" '{if($3==0){++i}else{++j}} END{print "管理员 "i;print "普通用户 "j}' passwd


    awk的循环
        while
            while(){}
            awk '{while(i<10){print i;i++}}'

            # awk 'BEGIN{i=0;while(i<=10){print i;i++}}'     \\ 打印1-10
            # awk 'BEGIN{RS=" "} {print $0}' aa.txt           \\ 把空格转换成回车 效果同下
            # awk '{i=1;while(i<=9){print $i;i++}}' aa.txt     \\ 可以打印 以空格 分割的 所有字段
            # awk '{i=1;while(i<=NF){print $i;i++}}' aa.txt     \\ 分别打印每行的 每列

            aa.txt
                www.baidu.com google.com ssyy.com
                hao123.com gogo.com
                www.aa.com

        for
            for(){}
            for(i=1;i<=5;i++){print i}

            # awk 'BEGIN{for(i=1;i<=10;i++){print i}}'     \\ 打印1-1
            # awk '{for(i=1;i<=NF;i++){print $i}}' aa       \\ 可以打印 以空格 分割的 所有字段

        引入外部变量 i=5
            方法1: 在awk 外面为 双引号的情况下使用
                \"$i\"          在外部变量 加 双引号 并且 转义         可以用在函数里面
            方法2: 在awk 外面为 单引号的情况下使用
                "'"$i"'"        在外部变量 依次加 双引号 单引号 双引号  可用在函数里面
                '''$i'''        在外部变量 依次加 单引号 单引号 单引号  可以用在函数外面
            方法3
                -v i="5" print i    使用-v i="5"    带入

    awk 实例
        # awk '/root/' passwd                        匹配到root行 输出到屏幕
        # awk -F":" '{print $1}' passwd              每一行的 第一个字段 以:分割
        # awk -F":" '/root/{print $1}' passwd        满足条件行的 第一个字段 正则
        # awk -F":" '/root/{print $1,$3}' passwd     1和3
        # df | grep '/' | awk '$4>1000000{print $4}' 
        # date | awk '{print "Month:",$2"\n""Year:",$NF}'


27. cut 命令
    # cut -d ':' -f 1,2 /etc/passwd
        -d                      \\ 指定分隔符
        -f 1,2,3                 \\ 需要的列
        -f 1-4,6,7
        --complement -f 2          \\ 去掉 第2列
        --output-delimiter=' '      \\ 指定输出分隔符为空格    默认输出分隔符 与 输入分隔符同一个 


28. uniq 命令                          \\ 可检查文本文件中 连续 重复 出现的行
    # cat a.txt | uniq                  \\ 去掉 连续 重复的行
    # cat a.txt | uniq -c                \\ -c 显示 每行出现的次数
    # cat a.txt | sort | uniq             \\ 一般先排序 在去重复
    # cat a.txt | uniq -cd                 \\ 
        -c 在每列旁边显示该行重复出现的次数
        -d 仅显示重复出现的行
        -u 仅显示出一次的行


29. ps 命令  查看系统进程
    # ps aux   可以查看系统中所有的进程
    # ps -le   可以查看系统中所有的进程 而且还能看到进程的父进程的 PID 和进程优先级
    # ps -l    只能看到当前 Shell 产生的进程
    # ps -ef   可以查看系统中所有的进程
         a:   显示一个终端的所有进程 除会话引线外
         u:   显示进程的归属用户及内存的使用情况
         x:   显示没有控制终端的进程
        -l:   长格式显示更加详细的信息
        -e:   显示所有进程
        -f:   显示程序间的关系
    # ps -ef | grep "shadowsocksr" | grep -v grep | awk '{print $2}' | xargs kill -9 \\ 查找程序pid 并杀掉

    # ps -ef | grep "shadowsocksr" | grep -v grep | awk '{print $2}'                   \\ 查找程序的 pid
    # cd /proc/2107
    # ls -ail          \\ 已知pid 查看 程序的目录

30. 后台命令
    nohup 命令 和 & 的区别
        # sh a.sh &         将任务放到后台 即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失
        # nohup sh a.sh     将任务放到后台 关闭标准输入,前台不再能够接收任何输入(标准输入) 重定向标准输出和标准
                            错误到当前目录下的nohup.out文件 即使关闭xshell退出当前session依然继续运行
        # nohup sh a.sh &   将任务放到后台 但是依然可以使用标准输入 前台能够接收任何输入 重定向标准输出和标准错误
                            到当前目录下的nohup.out文件 即使关闭xshell退出当前session依然继续运行
        # nohup a.sh &      后台执行此脚本 test.sh的打印信息会输出到当前目录下的nohup.out中
        # nohup a.sh > /data/nohup.out 2>&1 &       指定输出到output文件

    jobs 命令 可以用来查看当前终端放入后台的工作
        # jobs -l            \\ 列出当前终端后台进程的 PID 号
            [1]- 109422 Running                 tail -f /var/log/messages &
            [2]+ 109808 Running                 tail -f /var/log/messages-20201023 &
                Running 状态为运行
                Stopped 状态为停止
                "+"号代表最近一个放入后台的工作  当前任务
                "-"号代表倒数第二个放入后台的工作

        # ctrl + z     可以将一个正在前台执行的命令放到后台 并且暂停
        # bg 1         将一个在后台暂停的命令,变成继续执行 1 为jobs-l中的[1]命令的序号
        # fg 1         将后台中的命令调至前台继续运行 可以用在vim中 ^z 调入后台 fg返回
        # kill %1      杀死 1 的进程

        # ls ./* > /dev/null 2>&1      把错误和信息都扔进黑洞
            /dev/null  黑洞
            2>&1       1 表示标准输出 2表示标准错误 >重定向      把错误重定向到输出


31. wc 命令 统计指定文件中的字节数、字数、行数 并将统计结果显示输出 如果没有给出文件名 则从标准输入读取
    # wc -l
        -c 统计字节数
        -l 统计行数
        -m 统计字符数 这个标志不能与 -c 一起使用
        -w 统计字数 一个字被定义为由空白 跳格或换行字符分隔的字符串
        -L 打印最长行的长度
        -help 显示帮助信息
    # ls -l | grep "^-" | wc -l  查看当前文件下 文件的数量
        ^ 行首牟定
        - 为文件的标识
        d 为文件夹的标识
    # ls -lR | grep "^-" | wc -l  查看文件夹下包括子文件夹 所有的文件数量 
        R 递归
    # ls | wc -l  显示在标准输出的 所有文件及文件夹的数量


32. tar 命令
    # tar zcvf aa.tar.gz aa/      \\ 打 压缩包 
    # tar zxvf aa.tar.gz           \\ 解 aa.tar.gz
    # xz -d  aa.tar.xz              \\ 解 aa.tar.xz
    # uzip aa.zip                    \\ 解 aa.zip
    # tar jxvf aa.tar.bz2             \\ 解 aa.tar.bz2  需要 yum install lbzip2
    # tar -zcvf aaa.tar.gz aaa  --exclude=aaa/backups        \\ 除了某个目录  目录后面没有/ 不能是绝对路径 要在父目录
    # tar -zcvf home.tar.gz   /home --exclude=/home/logs   --exclude=/home/www/afish.php

    gzip 压缩
        # gzip -d a.gz     \\ 解压
        # gunzip -f a.gz    \\ 解压
        
    unzip 命令              
        # unzip aaa.zip           \\ 将aaa.zip解压到当前文件下
        # unzip -o aaa.zip         \\ -o 直接覆盖
        # unzip -n aaa.zip -d /tmp  \\ 将aaa.zip解压到/tmp目录下,并且不要覆盖已有文件
        # unzip -o aaa.zip -d /tmp   \\ 将aaat.zip解压到/tmp目录下,并且覆盖已有文件
        # unzip -v aaa.zip            \\ 查看aaazip内容,但不解压


33. nload 命令                       \\ 查看网络流量 
    # yum install nload
    # nload                           \\ 回车 切换 网卡
        Incoming 上半部分 也就是进入网卡的流量,
        Outgoing 下半部分 也就是从这块网卡出去的流量,
            Curr 当前流量
            Avg 平均流量
            Min 最小流量
            Max 最大流量
            Ttl 总和流量
    # nload eth1      \\ 切换网卡 


34. iftop 命令         实时流量监控工具
    # yum install iftop
    # iftop
        <= =>这两个左右箭头,表示的是流量的方向。
        TX:    发送流量
        RX:    接收流量
        TOTAL: 总流量
        Cumm:  运行iftop到目前时间的总流量
        peak:  流量峰值
        rates: 分别表示过去 2s 10s 40s 的平均流量
    # iftop -i eth1     切换网卡

        t: 按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;
        S: 按S切换是否显示本机的端口信息;
        D: 按D切换是否显示远端目标主机的端口信息;
        p: 按小p切换是否显示端口信息;
        P: 按大P切换暂停/继续显示;
        q: 按q退出监控。

        h: 按h切换是否显示帮助;
        n: 按n切换显示本机的IP或主机名;
        s: 按s切换是否显示本机的host信息;
        d: 按d切换是否显示远端目标主机的host信息;
        N: 按N切换显示端口号或端口服务名称;
        b: 按b切换是否显示平均流量图形条;
        B: 按B切换计算2秒或10秒或40秒内的平均流量;
        T: 按T切换是否显示每个连接的总流量;
        l: 按l打开屏幕过滤功能,输入要过滤的字符,比如ip,按回车后,屏幕就只显示这个IP相关的流量信息;
        L: 按L切换显示画面上边的刻度;刻度不同,流量图形条会有变化;
        j: 按j或按k可以向上或向下滚动屏幕显示的连接记录;
        1: 按1或2或3可以根据右侧显示的三列流量数据进行排序;
        <: 按<根据左边的本机名或IP排序;
        >: 按>根据远端目标主机的主机名或IP排序;
        o: 按o切换是否固定只显示当前的连接;
        f: 按f可以编辑过滤代码,这是翻译过来的说法,我还没用过这个!
        !: 按!可以使用shell命令,这个没用过!没搞明白啥命令在这好用呢!


35. rpm 命令
    # yum localinstall aaa.rpm     安装rpm包
    # rpm -ivh aaa.rpm             安装rpm包
        i:     安装
        v:     显示安装信息
        h:     显示安装进度
        --force:   即使覆盖属于其它包的文件也强迫安装 
        --nodeps:  如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
    # rpm -Uvh aaa.rpm      升级rpm包
    # rpm -e aaa.rpm        卸载rpm包
    # rpm -q nginx          查询一个包是否被安装
    # rpm -qi nginx         得到被安装的包的信息 
    # rpm -ql nginx         列出该包中有哪些文件 
    # rpm -qf nginx.conf    列出服务器上的一个文件属于哪一个RPM包 
    # rpm -qa               列出所有被安装的rpm包
    # rpm2cpio aaa.rpm | cpio -div     解压rpm包


36. date 命令
    # date +"%Y-%m-%d-%H-%M-%S"
        %Y 年份(以四位数来表示)
        %m 月份(以01-12来表示)
        %d 日期(以01-31来表示)
        %H 小时(以00-23来表示)
        %M 分钟(以00-59来表示)
        %S 秒(以本地的惯用法来表示)

    修改时间与时区
        # ntpdate 0.asia.pool.ntp.org     \\ 网络同步时间 如不好使 可手动修改
        # date -R                          \\ 查看时间 与时区
        # date -s "2020-1-20 10:01:50"      \\ 修改时间 为
        # hwclock                            \\ 查看硬件时间
        # hwclock -w                          \\ 将软件时间写入到硬件时间 避免重启失效
        # tzselect                             \\ 修改时区 选择对应数字 Asia 亚洲 


37. find 命令
    find [路径] [选项] [操作]

      [路径]
        默认 当前路径及子目录  默认递归

      [选项]
        -name         根据文件名查找
        -iname        根据文件名查找 不区分大小写
        -size -n +n   根据文件大小查找
            # find -size 0c    等于 0字节 的文件  即空文件
            # find -size +10k  大于 10KB 的文件             -n  小于 大小为 n 的文件
            # find -size -10M  小于 10MB 的文件             +n  大于 大小为 n 的文件
        -mtime -n +n  在n天
            # find -mtime +5 -name '*.conf'   5天之前修改的文件
            # find -mtime -5 -name '*.conf'   5天以内修改的文件
        -mmin -n +n   在n分钟
            # find /etc -mmin +30             30分钟 之前修改过的文件
            # find /etc -mmin -30 -type d     30分钟 之内修改过的目录
        -type         根据文件类型查找
              f   文件       find . -type f
          d  目录        find . -type d
          c  字符设备文件   find . -type c
          b  块设备文件    find . -type b
          l  链接文件     find . -type l
          p  管道文件     find . -type p

        -prune        排除某些查找目录
        -maxdepth n   根据搜索到n级子目录

        -perm         根据文件权限查找
        -user         根据文件属主查找
        -group        根据文件属组查找
        -nogroup      查找无有效属组的文件
        -nouser       查找无有效属主的文件

    # find /etc -type f -name '*.conf' -size +10k -exec rm -f {} \;  \\ 非目录 .conf结尾 且大于 10k,然后将其删除
    # find /data/log -name '*.log' -mtime +7 -exec rm -f {} \;        \\ 更改时间在 7 天以上的删除
    # find /etc -type f -name '*.conf' -exec cp {} /root/conf/ \;      \\ 将其复制到 /root/conf 目录下
    # find ./ -type f -size +100M -exec cp {} /aaa \;                   \\ 查找超过100M的文件并移动到指定目录
    # find /data -type f -mtime +30 -exec rm -f  {} \;                   \\ 查找 /data 下 日期为30天以上的文件 删除
        -exec '命令' {} \;  对搜索到的文件执行特定的操作  {} 表示查询的结果
        -ok     和 -exec 的功能一样 只是每次操作都会给用户提示  
      -print   打印输出 默认的选项 即打印出找到的结果

        逻辑运算符 
            -a       与        默认情况查询条件之间都是 与 的关系
            -o       或
            -not | !   非

    # find /data/ -type f -name "*.txt" | xargs cp -t /tmp       \\ -t 参数指定目标目录
    # find /data/ -type f -name "*.txt" -exec cp {} /tmp \
    # cp $(find /data/ -type f -name"*.txt") /tmp                  \\ $() 存放命令结果
    # find /data/ -type f -name "*.txt" | xargs -i cp {} /tmp       \\ -i 参数指定找到的结果放到{}中

    linux 删除 大量小文件 方法
        方案一:
            # mkdir null                                       \\ 建立空目录
            # rsync --delete-before -d null/ cache/             \\ cache目录为需要删除的小文件目录  null为空目录
        方案二:
            # find null -type f -delete


待整理命令 vim中的替换
    :%s///g

    注: 
        find: ‘/run/user/1000/gvfs’: 权限不够           \\ find 查找的时候 提示权限不够
            # umount /run/user/1000/gvfs
            # rm -rf /run/user/1000/gvfs


38. cp 命令
    # cp -a aaa /var/www/                                 \\ 最常用
        -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
        -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
        -f:覆盖已经存在的目标文件而不给出提示。
        -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
        -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
        -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
        -R:同-r
        -l:不复制文件,只是生成链接文件。
    # cp -r -p aaa /var/www/                                     \\ 复制目录 -p 保留属性

    关于取消 cp 的提示覆盖
        # alias                    \\ 可以看到cp 默认为 cp -i  即使加-f也会提示是否覆盖
        # unalias cp                \\ 方法一: 去掉cp的别名 临时
        # vim ~/.bashrc              \\ 定义永久别名

        # \cp /etc/passwd ./           \\ 方法二: \临时取消别名


39. sshpass 命令
    # yum install sshpass
        -p 123456    指定明文本密码输入(安全性较差)
        -f a.txt     从文件中获取密码
        -d number:使用数字作为获取密码的文件描述符
        -e:从环境变量SSHPASS获取密码

    # sshpass -f a.txt ssh root@192.168.10.13
    # sshpass -p "123456" ssh root@192.168.10.13 "sh a.sh"       \\ 后可以接要执行的命令 命令最好放在双引号里
    # sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@192.168.10.10              \\ 忽略密码提示
    # sshpass -p 123456 scp a.sh root@192.168.10.10:/tmp
    # sshpass -p 123456 scp -o StrictHostKeyChecking=no a.sh root@192.168.10.10:/tmp      \\ 忽略密码提示
    # sshpass -p 123456 rsync -avzP ssyy99 -e 'ssh -p 65522' root@192.168.10.10:/data/     \\ rsync 推送文件夹到目标

    # export SSHPASS="123456"                 \\ 声明环境变量
    # sshpass -e ssh root@172.17.9.200         \\ -e 从环境变量中读取
    # sshpass -p 123456 scp -r -p root@47.91.219.64:/data/mysqldb/3306/Moniterdb/\{1.txt,2.txt\} ./
        \\ 把远程文件通过ssh 22端口复制到本地  {}命令展开 \转意符  ./复制到当前目录


40. ssh 命令
    -t 禁止伪终端
    -l 指定连接远程服务器登录用户名
    -o 指定配置选项
    -p 指定远程服务器上的端口

    # ssh 192.168.1.100
    # ssh -p 22 root@192.168.1.100
    # ssh root@192.168.1.100  -o stricthostkeychecking=no               \\ 首次登陆免输yes登录
    # ssh root@192.168.1.100 "ls /home/omd"
    # ssh root@192.168.1.100 "sh /data/a.sh"

    # vim /etc/ssh/ssh_config         \\ 可修改 ssh配置文件中 忽略密码提示
        StrictHostKeyChecking no
    # vim /etc/ssh/sshd_config          \\ ssh修改端口号
       Port 22
       Port 65522
    # lastb                                \\ ssh登陆失败的日志
    # last                                  \\ ssh登陆的历史

    ssh 禁用密码验证 只能使用秘钥
        # vim /etc/ssh/sshd_config
            PasswordAuthentication no          \\ 禁用密码验证
            RSAAuthentication yes               \\ 添加 启用密钥验证
            PubkeyAuthentication yes             \\ 添加
        # service sshd restart

    注. 
      ssh 登陆慢 排查
        # hostname                      \\ 获取主机名
        # ssh -v localhost.localdomain   \\ 主机名 看看到哪个地方卡住
        # ll -h /var/log/btmp             \\ 此文件保存 破解密码的记录 看看是否很大 几百M
        # rm /var/log/btmp                 \\ 删除即可 解决 debug1: Entering interactive session 卡住
        # touch /var/log/btmp

      ssh登录错误排查
        在机器上出现一个很诡异的现象,使用root ssh登录机器时,在打印了“last login”时间后就卡住了。
        需要按ctrl+c,终端才会显示bash-2.4,而只有source ~/.bashrc后,才会显示root的主目录。
        试了一下手动执行source /etc/profile,也卡住了。因此可以断定,是登录时加载/etc/profile卡住,导致的SSH登录卡住。
        试着手动执行了/etc/profile中的代码,发现运行到:
        for i in /etc/profile.d/*.sh ; do
            if [ -r "$i" ]; then
                if [ "${-#*i}" != "$-" ]; then 
                    echo $i
                    echo "1"
                    . "$i"
                else
                    echo $i
                    echo "2"
                    . "$i" >/dev/null
                fi
            fi
        done
        卡住的。这一段代码,是从/etc/profile.d/取出所有的ssh文件,并进行执行。可以看到,我在里面加入了一些打印指令。
        所以,可以清晰的看到是执行:/etc/profile.d/abrt-console-notification.sh卡住的。
        再研究/etc/profile.d/abrt-console-notification.sh文件,最终确定,是在执行:
        abrt-cli status --since="$SINCE" 2> /dev/null
        这一句时卡住的。
        使用systemctl status abrtd.service 查看abrtd服务状态,可以看到abrt的.lock文件被某个进程锁住了 kill掉该进程,问题解决
        # lsof | grep 409000000
        # kill 409000000

        1. 本机使用秘钥登录
            # ssh-keygen                         \\ 使用要设置秘钥的用户执行  生成 私钥id_rsa   公钥id_rsa.pub
            # cd ~/.ssh                           \\ 到此用户的家目录
            # cat id_rsa.pub > authorized_keys     \\ 创建验证文件
            # chmod 600 authorized_keys             \\ 必须是 600权限
            # chmod 700 ../.ssh                      \\ 必须是 700权限
            # sz id_rsa                               \\ 拷贝出来 私钥 即可登录

        2. 使用秘钥 登录其他 服务器
            # ssh-keygen                                \\ 生成私钥 公钥

            # ssh-copy-id 192.168.10.13                   \\ 推送到目标
            # ssh 192.168.10.13                            \\ 登录即可 

        3. 手动 添加 公钥到服务器
            # mkdir -p /root/.ssh
            # cd /root/.ssh
            # rz authorized_keys                               \\ 复制公钥 到需要登录的服务器
            # chmod 600 /root/.ssh/authorized_keys
            # chmod 700 /root/.ssh

        4. 其他可能用到的命令
            # ssh-keygen -P "" -f ~/.ssh/id_rsa    \\ 非交互式生成
            # chown -R teo.root /home/teo/.ssh      \\ 非root用户需要修改 权限
            # ssh-keygen -y -f ./id_rsa              \\ 如没有公钥 可以由私钥 推算出公钥 保存为 authorized_keys 文件即可


41. scp 命令
    -p:保留原文件的修改时间,访问时间和访问权限
    -q: 不显示传输进度条。
    -r: 递归复制整个目录。
    -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题
    -P:指定端口号 大写的P 
    -o: ssh中的 -o 设定ssh选项
    -i: 指定秘钥文件 此文件必须是 600权限

    # scp -r -P 65522 /data/aaaa root@192.168.10.10:/data/
    # scp -P 59157 -r -i /data/jump_guest.pem a.txt  jump_guest@192.168.10.1:/home/jump_guest/


42. head 命令
    -c 显示的字节数
    -n 显示的行数

    # head -n 5 a.txt       \\ 显示文件的前n行
    # head -n -6 a.txt       \\ 文件除了最后n行的全部内容
    # head -c 20 a.txt        \\ 显示文件前n个字节
    # head -c -32 a.txt        \\ 文件的除了最后32个字节以外的内容 


43. xargs 命令    是给命令传递参数的一个过滤器
    xargs 是给命令传递参数的一个过滤器 也是组合多个命令的一个工具 一般是和管道一起使用。
          可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
          也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
          默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白 不过通过 xargs 的处理 换行和空白将被空格取代
          是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

    # find /sbin -perm +700 | xargs ls -l
    # cat test.txt | xargs
    # cat test.txt | xargs -n3


44. tr 命令    字符串转译
    tr -dc "[:alnum:]"

    # cat /dev/urandom | tr -dc "[:alnum:]" | head -c 14 | xargs       \\ 取随机数
    # openssl rand -hex 7


45. sort 命令                            \\ 默认以字母序进行文本排序
    # cat a.txt | sort 
    # cat a.txt | sort -n -t ":" -k 2      \\ -t指定分隔符 冒号 -k 以第二列 排序
    # ps aux | sort -k 4 -gr | head -n 5    \\ 内存使用最多的 5个进程
    # cat passwd | sort -t ':' -k 3 -nr      \\ 按第三列 降序排序
    # du -h | sort -hr                        \\ 文件大小排序
        -n 依照数值的大小排序
        -u 去重 相当于 uniq
        -r 以相反的顺序来排序
        -t <分隔字符> 指定排序时所用的栏位分隔字符

        -b 忽略每行前面开始出的空格字符
        -h 使用易读性数字 例如: 2K 1G
        -d 排序时 处理英文字母、数字及空格字符外 忽略其他的字符
        -f 排序时 将小写字母视为大写字母
        -i 排序时 除了040至176之间的ASCII字符外,忽略其他的字符
        -m 将几个排序好的文件进行合并
        -M 将前面3个字母依照月份的缩写进行排序
        -o<输出文件> 将排序后的结果存入指定的文件
        -k   –key=POS1[,POS2]   排序从POS1开始,若指定POS2,则POS2结束,否则以pos1排序

        +<起始栏位>-<结束栏位> 以指定的栏位来排序 范围由起始栏位到结束栏位的前一栏位


46. stat 命令
    stat 命令用于显示文件的状态信息 stat命令的输出信息比ls命令的输出信息要更详细。
    # stat a.txt   可以查看 文件的三个时间
        Access: atime  访问时间      显示的是文件中的数据最后被访问的时间
        Modify: mtime  修改时间      显示的是文件内容被修改的最后时间
        Change: ctime  状态修改时间  显示的是文件的权限、拥有者、所属的组、链接数发生改变时的时间。当然当内容改变时也会随之改变


47. sysctl 命令
    sysctl 命令用于运行时配置内核参数 这些参数位于/proc/sys目录下 sysctl配置与显示在/proc/sys目录中的内核参
           用户只需要编辑/etc/sysctl.conf文件
    # sysctl -a                                    \\ 显示所有系统内核参数
    # sysctl -w net.ipv4.ip_forward=1               \\ 临时改变某个指定参数的值
    # sysctl -p                                      \\ 从/etc/sysctl.conf 中加载 系统参数
    # echo "net.ipv4.ip_forward=1" /etc/sysctl.conf   \\ 永久修改


48. whereis 命令   
    可查找 程序的 二进制文件 源文件 帮助手册文件 的路径
    # whereis mysql      查找 可执行文件 源代码文件 帮助文件 在文件系统中的位置
    # whereis ls


49. which 命令
    查找命令可执行文件所在的路径 有时候可能在多个路径下存在相同的命令
    该命令可用于查找当前所执行的命令到底是哪一个位置处的命令
    # which mkdir
    # which ls


50. echo 命令  
    # echo "aaaa"   标准输出
        " "  双引号  弱引用 
        ' '  单引号  强引用
        -n   不换行 默认在最后出入换行符 -n不换行
        -e   打开 \ 转义符  若字符串中出现以下字符,则特别加以处理,而不会将它当成一般
             \a 发出警告声;
             \b 删除前一个字符;
             \c 最后不加上换行符号;
             \f 换行但光标仍旧停留在原来的位置;
             \n 换行且光标移至行首;
             \r 光标移至行首,但不换行;
             \t 插入tab;
             \v 与\f相同;
             \\ 插入\字符;
             \nnn 插入nnn(八进制)所代表的ASCII字符;
             \e[1;31m  颜色的 固定写法 31为红色  31-37 可换其他前景颜色  41-47可换背景颜色
             \e[0m     恢复颜色
    # echo -e "\e[1;31maaaaa\e[0m"   \\ 加红色
    # echo -e "\e[1;31maaaaa"         \\ 文字 及 shell会都变成此颜色   
    # echo                             \\ 默认 输出一个 回车符

    使用 shell + echo 修改数据库
        # echo 'use nextcloud;delete from oc_filecache;' | mysql -unextcloud -p123456      \\ 清空表
        # echo 'use nextcloud;show tables;' | mysql -unextcloud -p123456                    \\ 显示表


51. ls 命令
    -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)
    -l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
    -r 将文件以相反次序显示(原定依英文字母次序)
    -t 将文件依建立时间之先后次序列出
    -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
    -F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
    -R 目录递归显示 若目录下有文件,则以下之文件亦皆依序列出

    # ls -A
    # ls -F
    # ls -R
    # ls -l
    # ls -l    mtime         \\ 修改时间
    # ls -lc   ctime          \\ 状态修改时间
    # ls -lu   atime           \\ 访问时间
    # ls -v image* > a.txt      \\ 可以按照 image后面的数字的大小进行排序
        image001.jpg
        image505.jpg
        image2507.jpg
        image2509.jpg


52. nslookup 命令     
    DNS查看
    # nslookup www. ssyy99.com

53. ntpdate 命令
    时间同步
    # ntpdate asia.pool.ntp.org   \\ 初始化脚本中有同步时间的命令 可使用 crontab -e 拿出来 使用


54. Centos7 重装系统 修改网卡名字 
    重装系统 第一行 按tab键 输入 net.ifnames=0 biosdevname=0  以更改网卡名称为eth0 ethX


55. Linux 与 Windows 文件格式
    vim 修改文件格式
        :set ff              \\ 查看文件格式
        :set ff=unix          \\ 修改文件格式 unix
    文件为dos格式 linux 会报错 bin/bash^M: bad interpreter: No such file or directory

56. curl 命令
    # curl http://www.ssyy99.com                                    \\ 请求网页
    # curl -I http://www.ssyy99.com                                  \\ 只请求首部信息
    # curl ifconfig.me                                                \\ 查看外网ip
    # curl ipinfo.io/ip                                                \\ linux 查看外网ip
    # curl -I -o /dev/null -s -w %{http_code} www.baidu.com             \\ 返回网页状态码
    # curl -I -m 10 -o /dev/null -s -w %{http_code}"\n"  www.baidu.com   \\ 返回网页状态码
    # curl -s https://v1.alapi.cn/api/icp?domain=baidu.com | grep "true" | wc -l    \\ 静默 模式 没有信息打印
        -m           \\ 最大传输时间
        -o            \\ 写入到文件中
        -I             \\ 请求的头部
        -s              \\ 静默输出
        \n               \\ 换行
        -w %{http_code}   \\ -w 代表自定义参数   %{http_code}代表http状态码

57. linux 释放缓存区 内存的方法
    # echo 1 > /proc/sys/vm/drop_caches     \\ 清理 页面缓存
    # echo 2 > /proc/sys/vm/drop_caches      \\ 清理 目录缓存 和inodes
    # echo 3 > /proc/sys/vm/drop_caches       \\ 清理页面缓存 目录缓存  inodes

    # sysctl -w vm.drop_caches=1      \\ 清理 页面缓存
    # sysctl -w vm.drop_caches=2       \\ 清理 目录缓存 和inode
    # sysctl -w vm.drop_caches=3        \\ 清理页面缓存 目录缓存  inodes


58. EOF 用法
    # cat <<-EOF   把eof定义的内容 重定向给 cat 执行         - 支持下面EOF不顶格
    111
    222
    333
    EOF         \\ EOF只是定义一个 开始和结束的标志 可以使用任意字母或符号

    # cat <<-EOF > /data/a.txt      \\ 把EOF 内容给cat执行 在重定向到a.txt
    aaa
    bbb
    ccc
    EOF      


59. umask 命令
    umask 可用来设定 权限掩码 
    # umask         \\ 获取当前权限掩码   创建文件默认的权限666 减去 022  为644  文件夹为默认777           
        022
    # umask 077       \\ 修改 当前shell 的umask值  当前有效  在创建文件都666 减去077 为 600

    cowsay 命令
        # yum install cowsay
        # cowsay -l              \\ 查看其它动物的名字,然后-f跟上动物名,如
        # cowsay aaaaa
        # cowsay -f eyes aaaaa


60. mysqladmin 命令
    # mysqladmin -uroot -p123456 password 123456789   \\ 修改密码   mysql 密码
    # mysqladmin -uroot -p23456 version                \\ 查看 mysql 版本
    # mysqladmin -uroot -p23456 create aaaaa            \\ 创建数据库
    # mysqladmin -uroot -p23456 drop aaaaa               \\ 删除数据库
    # mysqladmin -uroot -p23456 reload                    \\ 重新载入
    # mysqladmin -uroot -p shutdown                        \\ 关闭数据库
    # mysqlshow -uroot -p23456                              \\ 显示服务器上的所有数据库
    # mysqlshow -uroot -p23456 aaaaa                         \\ 显示数据库aaaaa中有什么表
    # mysql -uroot -p123456 -e "show databases;"   \\ 可以不连入mysql 直接执行mysql命令 可以用到脚本中 执行mysql命令


61. ulimit 命令         \\ 不完全 待续
    # ulimit -a          \\ 查看打开的多大连接数  系统默认1024
        open files                      (-n) 1024

    # lsof | wc -l          \\ 查看 当前系统打开的文件数

    # lsof -p 29495 | wc -l   \\ 查看某个进程的打开文件数量
    # cat /proc/29495/limits   \\ 查看某个进程的最大可以打开的文件数


62. mtr 网络测试工具
    mtr www.baiud.com
    其中-c的说明是:–report-cycles COUNT
    第三列 Loss: 是显示的每个对应IP的丢包率
    第四列 Last: 显示的最近一次的返回时延
    第五列 Avg : 是平均值 这个应该是发送ping包的平均时延
    第六列 Best: 是最好或者说时延最短的
    第七列 Wrst: 是最差或者说时延最常的
    第八列 StDev: 是标准偏差
    接下来接着说相关参数:
    mtr -s 用来指定ping数据包的大小
    mtr -n no-dns不对IP地址做域名解析
    mtr -a 来设置发送数据包的IP地址 这个对一个主机由多个IP地址是有用的
    mtr -i 使用这个参数来设置ICMP返回之间的要求默认是1秒
    mtr -4 IPv4
    mtr -6 IPv6


63. 关于 Centos7 /home 空间 合并到 / 根目录

    ❶. Centos7把 /home 所有空间合并到 / 根目录
        # df -h                                 \\ 查看 分区  需要保存 /home目录下 所需要的文件 否则会丢失
        # umount /home                           \\ 卸载 /home
        # fuser -m -v -i -k /home                 \\ 强制 终止 home 下的进程  如果不能卸载 使用此命令强制停止
        # vi /etc/fstab                            \\ 注释掉
            #/dev/mapper/centos-home /home                   xfs     defaults        0 0
        # fdisk -l          \\ 有 centos-home 分区
            Disk /dev/mapper/centos-home: 5821 MB... 
        # lvremove /dev/mapper/centos-home            \\ 删除 centos-home 分区   y
        # vgdisplay 
            Free  PE / Size       1390 / <5.43 GiB      \\ 有5.43G 未分配
        # lvextend -L +5G /dev/mapper/centos-root        \\ 扩展/root所在的lv 给 root 分 5G 空间
        # xfs_growfs /dev/mapper/centos-root              \\ 扩展/root空间
        # df -h 

    ❷. Centos7把 /home 部分空间  合并到 / 根目录
        # df -h                                 \\ 查看 分区  需要保存 /home目录下 所需要的文件 否则会丢失
        # umount /home                           \\ 卸载 /home
        # fuser -m -v -i -k /home                 \\ 强制 终止 home 下的进程  如果不能卸载 使用此命令强制停止
        # vi /etc/fstab                            \\ 注释掉
            #/dev/mapper/centos-home /home                   xfs     defaults        0 0
        # fdisk -l          \\ 有 centos-home 分区
            Disk /dev/mapper/centos-home: 5821 MB... 
        # lvremove /dev/mapper/centos-home            \\ 删除 centos-home 分区   y
        # vgdisplay 
            Free  PE / Size       1390 / <5.43 GiB      \\ 有5.43G 未分配
        # lvextend -L +5G /dev/mapper/centos-root        \\ 扩展/root所在的lv 给 root 分 5G 空间
        # xfs_growfs /dev/mapper/centos-root              \\ 扩展/root空间
        # df -h 
        # vgdisplay                             \\ 查询 剩余多少空间
        # lvcreate -L 167G -n home centos        \\ 重新 创建 home 目录
        # mkfs.xfs /dev/centos/home               \\ 创建文件系统
        # mount /dev/centos/home /home             \\ 挂载
        # df -h



64. netstat 命令              显示与IP、TCP、UDP和ICMP协议相关的统计数据
    -i  显示网卡列表
    -r  显示路由信息
    -a  列出所有当前的连接
    -t  tcp连接
    -u  udp连接
    -n  禁用域名解析功能
    -l  选项列出 正在监听的 端口
    -p  显示建立相关链接的程序名

    # netstat -ant            \\ 查看 所有tcp连接
    # netstat -anu             \\ 查看 所有udp连接
    # netstat -rn               \\ 查看 路由信息 相当于 route -n
    # netstat -tnlp              \\ 相当于 ss -tnlp

    # netstat -in                 \\ 查看网卡
    # netstat -c                   \\ 查看当前连接状态 实时更新
    # netstat -an | grep ESTABLISHED | wc -l                                \\ 查看nginx/apache当前并发访问数
    # netstat -tn | grep 80 | wc -l                                          \\ 查看所有80端口的tcp连接
    # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'    \\  查看Apache的并发请求数及其TCP连接状态
        ESTABLISHED  意思是建立连接。表示两台机器正在通信
        CLOSE_WAIT   对方主动关闭连接或者网络异常导致连接中断 此时我方要调用close()来使得连接正确关闭
        TIME_WAIT    我方主动调用close()断开连接...表示处理完毕  等待超时结束的请求数
        SYN_SENT     表示请求连接
        YN_RECV      表示正在等待处理的请求数

        FIN_WAIT1    释放 连接状态为 FIN_WAIT1 的状态
            # sysctl -a | grep tcp_max_orphans       \\ 记下 net.ipv4.tcp_max_orphans 的值
            # sysctl -w net.ipv4.tcp_max_orphans=0    \\ 然后等待FIN_WAIT1的消失 netstat -npt | grep 8080 反复查看
            # sysctl -w net.ipv4.tcp_max_orphans=$aa   \\ 还原 设置上面的值 3276800      -w临时改变值

    # netstat -antu | grep tcp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -10 \\ 连接最多的10个ip

    关于 TIME_WAIT 过多
        # vim /etc/sysctl.conf
            net.ipv4.tcp_syncookies = 1     \\ 开启SYN Cookies 当出现SYN等待队列溢出时 启用cookies来处理 可防范少量SYN攻击
            net.ipv4.tcp_tw_reuse = 1        \\ 表示开启重用 允许将TIME-WAIT sockets重新用于新的TCP连接
            net.ipv4.tcp_tw_recycle = 1       \\ 表示开启TCP连接中TIME-WAIT sockets的快速回收
            net.ipv4.tcp_fin_timeout           \\ 修改系默认的 TIMEOUT 时间
            net.ipv4.tcp_keepalive_time = 1200  \\ keepalive起用的时候 TCP发送keepalive消息的频度 缺省是2小时 改为20分钟
            net.ipv4.ip_local_port_range = 1024 65000   \\ 表示用于向外连接的端口范围 缺省情况下很小 32768到61000
            net.ipv4.tcp_max_syn_backlog = 8192   \\ 表示SYN队列的长度 默认为1024 可以容纳更多等待连接的网络连接数
            net.ipv4.tcp_max_tw_buckets = 5000     \\ 表示系统同时保持TIME_WAIT套接字的最大数量 如果超过这个数字 将立刻被清除


65. mv 命令
    # mv -fv ./* /data/   \\ 强制覆盖    不能移动文件夹   不需要加反斜杠  # \mv  取消-i命令
        -f 强制覆盖
        -v 显示过程
    # mv -fvb ./* /data/    \\ 覆盖前先备份文件 可以移动文件夹 会先备份文件夹 会以 文件名~ 结尾 
        -b 覆盖之前先备份


66. crontab 命令
    # crontab -e              \\ 定时任务
        * * * * * sh a.sh      \\ 每1分钟 执行
        */5 * * * * sh a.sh     \\ 每5分钟 执行
        * */1 * * * sh a.sh      \\ 每小时 执行
        5 * * * * sh a.sh         \\ 每小时的 过五分钟 执行
        1 1 * * * sh a.sh          \\ 每天 1:01 点 执行

        3,15 * * * * sh a.sh        \\ 每小时的 第3和第15分钟 执行
        3,15 8-11 * * * sh a.sh      \\ 在上午8点到11点的第3和第15分钟 执行
        3,15 8-11 */2 * * sh a.sh     \\ 每隔两天的上午8点到11点的第3和第15分钟 执行
        3,15 8-11 * * 1 sh a.sh        \\ 每个星期一的上午8点到11点的第3和第15分钟 执行
        10 1 * * 6,0 sh a.sh            \\ 每周六 周日的1:10分 执行
        0,30 18-23 * * * sh a.sh         \\ 每天18:00至23:00之间每隔30分钟 执行
        0 23 * * 6 sh a.sh                \\ 每星期六的晚上11:00 执行
        0 4 1 jan * sh a.sh                \\ 一月一号的4点 执行

        第一个 * 表示分钟,第二个表示小时,第三个表示日期,第四个表示月份,第五个表示星期
        *表示所有
        /5表示每5个单位
        1-3从1到3
        ,逗号表示离散的数字

    # trontab -l                 \\ 查看 定时任务
    # tail /var/log/cron          \\ 定时任务 日志
    # vim /var/spool/cron/root     \\ 定时任务的文件   crontab -e 就是写到这个文件里面 按用户存储


67. speedtest 命令                  \\ 下载测试 网速测试

    # wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
    # chmod a+rx speedtest.py
    # ./speedtest --share


68. openssl 命令
    # openssl x509 -enddate -noout -in fullchain.pem             \\ 检测证书到期时间
    # openssl rand -hex 7                                         \\ 随机生成16进制的字符串
    # openssl req -new -x509 -days 365 -nodes -out /data/nextcloud.crt -keyout /data/nextcloud.key  \\ 生成证书自签证书

    配置 https证书 自签
        服务端 自签
            # cd /etc/pki/CA
            # touch index.txt      \\ 创建所需要的文件
            # echo 01 > serial
            # (umask 077; openssl genrsa -out private/cakey.pem 2048)
            # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
        客户端
            # cd /usr/local/nginx/ssl
            # (umask 077; openssl genrsa -out teo1.key 2048)
            # opensll req -new -key teo2.key -out teo2.csr -days 365
        服务端 签署
            # openssl ca -in teo1.csr -out teo1.crt -days 365


69. lsof 命令           \\ 由lsof包提供
    # lsof               \\ 列出当前系统打开文件的工具
    # lsof ./a.txt
    # lsof -u root         \\ 列出某个用户打开的文件  ^为取反
    # lsof /ect/passwd      \\ 列出某个文件被哪些进程打开使用
    # lsof -c nginx          \\ 列出某个进程 访问的文件信息

    # lsof -i                  \\ 列出所有的网络链接信息
    # lsof -i TCP               \\ 列出所有TCP协议的网络连接信息
    # lsof -i :800               \\ 查看800端口的网络连接信息


70. wget 命令
    # wget -c -t 0 http://ssyy99.com/a.tar.gz
        -c 断点续传  
        -t 0 反复尝试的次数,0为不限次数

    # wget -O b.tar.gz  http://ssyy99.com/a.tar.gz   \\ -O 重命名
    # wget -b http://ssyy99.com/a.tar.gz              \\ 后台下载   # tail -f wget-log \\ 观看下载进度
    # wget -i a.txt                                    \\ -i 下载a.txt文件中的 链接
    # wget -o download.log http://ssyy99.com/a.tar.gz   \\ -o 把下载链接信息过程 写入日志

    # wget -r -np -R index.html*  https://www.ssyy99.com/down/en/ --no-check-certificate
        -r                 \\ 递归的方法 下载整个网站 指向的所有地址同样会被下载      
        -nd                 \\ 不建立目录 都下载到当前目录
        -np                  \\ 不追溯至父目录
        -nc                   \\ 不要覆盖已经存在的文件
        -l 2                   \\ 下载两层
        -Q 1M                   \\ 限速 最大下载速度 1M
        -R                       \\ 逗号分隔的要拒绝的扩展名列表 下载网页 会把 index.html下载下来所有使用-R排除
        -X                        \\ 排除目录的列表
        --no-check-certificate     \\ 不检测安全性

    # wget -m https://www.ssyy99.com/download/en --no-check-certificate \\ -m 镜像站点 会读入robots.txt并此文件规定来执行

    # wget -O- -q www.baidu.com     \\ 类似于curl的功能
        -o 将日志 写入 文件
        -O 将文档写入 FILE
        -O-  将文档写入标准输出
        -q 安静模式 (无信息输出)。


71. 查看linux硬件配置 及运行状态
    # cat /proc/meminfo                  \\ 查看内存信息
    # dmidecode | grep "Product Name"     \\ 查看机器型号
    # dmesg                                \\ 设备故障的诊断 硬件的连接或断开连接操作时 可以看到硬件的检测或者断开连接的信息
    # dmesg | grep -i eth                   \\ 查看网卡信息
    # cat /proc/version                      \\ 查看系统内核版本
    # hostnamectl                             \\ 查看系统内核版本
    # uname -a                                 \\ 查看系统内核版本
    # lscpu                                     \\ 查看cpu 型号及信息
    # cat /proc/cpuinfo                          \\ 查看cpu 型号及信息
    # cat /proc/cpuinfo | grep mode1*             \\ 查看cpu 核数
    # cat /proc/cpuinfo | grep "physical id"| sort| uniq| wc -l     \\ 查看物理cpu个数
    # cat /proc/cpuinfo | grep "processor"| wc -l                    \\ 查看逻辑CPU的个数
    # cat /proc/cpuinfo | grep "cpu cores"| uniq                      \\ 查看 cpu 核数
    # dmidecode -s system-product-name                                 \\ 查看是虚拟机 还是物理机
    # getconf LONG_BIT                    \\ 查看cpu 运行在 32位系统还是 64位系统
    # top                                  \\ 查看cpu及内存等 运行状态
    # sar 1 5                               \\ 查看cpu使用率 1秒采集5次
    # mpstat 1 5                             \\ 查看cup使用率 1秒采集5次
        %user      在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程  (usr/total)*100
        %nice      在internal时间段里,nice值为负进程的CPU时间(%)   (nice/total)*100
        %sys       在internal时间段里,内核时间(%)       (system/total)*100
        %iowait    在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100
        %irq       在internal时间段里,硬中断时间(%)     (irq/total)*100
        %soft      在internal时间段里,软中断时间(%)     (softirq/total)*100
        %idle      在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%) (idle/total)*100

    # yum install sysstat               \\ iostat包
    # iostat -k                          \\ 查看硬盘读取写入 状态
    # iostat -d -k 2 6                    \\ 查看硬盘 读取 写入
        tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。
             "一次传输"意思是"一次I/O请求"。多个逻辑请求可能会被合并为"一次I/O请求"。"一次传输"请求的大小是未知的。
        kB_read/s:每秒从设备(drive expressed)读取的数据量;
        kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
        kB_read:读取的总数据量;
        kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
    # iostat -d -x -k 1 6
        -x,该选项将用于显示和io相关的扩展数据
        -A:所有报告的总和
        -b:显示I/O和传递速率的统计信息
        -B:显示换页状态
        -d:输出每一块磁盘的使用信息
        -e:设置显示报告的结束时间
        -f:从制定的文件读取报告
        -i:设置状态信息刷新的间隔时间
        -P:报告每个CPU的状态
        -R:显示内存状态
        –u:输出cpu使用情况和统计信息
        –v:显示索引节点、文件和其他内核表的状态
        -w:显示交换分区的状态
        -x:显示给定进程的装
        -r:报告内存利用率的统计信息
    # sar -p 1 4      报告每个cpu的状态,1秒一次一共4次
    # vmstat  2 6
        r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,
          就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,
          服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。
        b 表示阻塞的进程
        swpd 虚拟内存已使用的大小,如果大于0,表示物理内存不足了 如果不是程序内存泄露的原因 该升级内存了
        free   空闲的物理内存的大小
        buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存
        cache cache直接用来记忆我们打开的文件,给文件做缓冲
        si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
        so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上
        bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte
        bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
        in 每秒CPU的中断次数,包括时间中断
        cs 每秒上下文切换次数
        us 用户CPU时间
        sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
        id  空闲 CPU时间
        wt 等待IO CPU时间。
    # uptime 
        18:16:12 up  5:45,  4 users,  load average: 0.01, 0.04, 0.05
        up 5:45: 主机已运行的时间
        4 users: 用户连接数
        load average:  5分钟 10分钟 15分钟 的cpu负载 根据cpu核数而定 1核满载为1  2核满载为2
    # uptime -s  显示 系统开始运行的日期
    # uptime -p  显示 系统运行的总时间

    # top 命令
        h 帮助
        回车、空格 刷新
        b

    # yum install virt-what
    # virt-what          \\ 可以查看 机器用的什么 虚拟化 kvm 或 vmware 或 xen

    # pidstat -d 1         \\ 查看进程 使用磁盘的情况  哪个进程使用硬盘

    # ls /dev/                             \\ 可以看到有几块硬盘 可依次查看
        sda
        sdb
    # cat /sys/block/sda/queue/rotational     \\ 返回0不可旋转为固态硬盘   返回1为可旋转机械硬盘
    # lsscsi                                   \\ 第四列 为硬盘型号可看到是否为 SSD
        [0:0:0:0]    disk    ATA      Vi550 S3 SSD     61.3  /dev/sda       \\ 固态硬盘
        [0:2:0:0]    disk    LSI      LSI              3.19  /dev/sda        \\ 机械硬盘
    # lsblk -d -o name,rota    \\ 返回0不可旋转为固态硬盘   返回1为可旋转机械硬盘
    # lsblk                     \\ 列出所有可用块设备的信息 还有依赖关系
    # lsblk -f                   \\ 查看文件系统
    # lsblk -a                    \\ 默认选项不会列出所有空设备


    关于 硬盘检测 测试硬盘
        # echo 3 > /proc/sys/vm/drop_caches                          \\ 循环执行 取平均值
        # dd if=/dev/zero of=cc bs=1M count=1024 conv=fdatasync       \\ 可用于 硬盘读取测试
            conv=fdatasync             \\ 不使用 内存
            
        # smartctl --all /dev/sda        \\ 查看硬盘信息 品牌 大小 SMART信息     虚拟的没有
            Power_On_Hours            0x0012   067   067   000    Old_age   Always       -      14798     \\ 总工作时间
            Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       4           \\ 通电次数

        # smartctl -H /dev/sda               \\ 检测硬盘 健康状态信息 
            SMART overall-health self-assessment test result: PASSED           \\ 有passed 说明正常

        # badblocks -v /dev/sda                 \\ 检测 硬盘 坏块    很慢 很慢


        hdparm 命令                  \\ 测试硬盘
            # yum install hdparm
            # hdparm -t /dev/sda           \\ 磁盘的io性能
            # hdparm -T /dev/sda            \\ 测试 内存性能


72. 关于用户的命令
    # vim /etc/group            \\ 查看群组
    # vim /etc/passwd            \\ 查看用户
    # vim /etc/sudoers            \\ sudo配置文件
    # echo "%wheel        ALL=(ALL)       NOPASSWD: ALL" >>/etc/sudoers    \\ 把wheel的群组10 给与sudo权限

    usermod命令 可用来修改用户帐号的各项设定
        # usermod -s /sbin/nologin teo           \\ 修改用户的登陆shell
        # usermod -g 10 teo                       \\ 修改群组
            -c<备注>  修改用户帐号的备注文字。
            -d登入目录>  修改用户登入时的目录。
            -e<有效期限>  修改帐号的有效期限。
            -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
            -g<群组>  修改用户所属的群组。
            -G<群组>  修改用户所属的附加群组。
            -l<帐号名称>  修改用户帐号名称。
            -L  锁定用户密码,使密码无效。
            -s<shell>  修改用户登入后所使用的shell。
            -u<uid>  修改用户ID。
            -U  解除密码锁定。

    /etc/profile      系统级     登陆的时候执行的文件
    /etc/bashrc

    ~/.bash_profile   用户级     登陆的时候执行
    ~/.bashrc

    ~/.bash_logout     用户级    退出的时候执行
    ~/.bash_history

    用户登陆的shell会执行
        /etc/profile
        /etc/bashrc
        ~/.bash_profile
        ~/.bashrc

    不能登陆的shell会执行
        /etc/bashrc
        ~/.bashrc


    查看所有用户
        # cat /etc/passwd

    查看所有用户组
        # cat /etc/group

    删除用户
        # userdel -r user1              \\ 删除 加目录及邮件文件

        # rm -rf /home/user1              \\ 如果没有执行 -r 则需要手动删除一下两个目录
        # rm -rf /var/spoool/mail/user1
        # id user1

    删除用户
        # useradd user1                    \\ 没有密码不能登录 默认为lock状态
        # passwd user1 

    sudo 权限
        # visudo                               \\ 编辑的事此文件  /etc/sudoers
            root    ALL= (ALL)    ALL           \\ 在行此行后添加
            teo     ALL= (ALL)    ALL            \\ 给 teo 用户sudo权限
            startalk     ALL= (ALL)    ALL
            postgres     ALL= (ALL)    ALL

        # vim /etc/sudoers      \\ 设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令  wheel 组 gid 为10
            echo "%wheel        ALL=(ALL)       NOPASSWD: ALL" >>/etc/sudoers      \\ 把 wheel 设置 sudo 组  

    ssh 设置指定的登录用户
        # vim /etc/ssh/sshd_config         \\ 只允许root teo1 登录
            Allowusers root teo1
        # systemctl restart sshd

    更改默认shell
        # echo $SHELL                  \\ 查看 当前使用的shell
        # zsh                           \\ shell 的一种
        # chsh -l                        \\ 查看所有可以使用的shell
        # chsh -s /usr/bin/bash           \\ 更改默认 shell


73. firewall 命令                                                \\ 防火墙
    # firewall-cmd --reload                                       \\ 重载防火墙规则 每次修改要使用 此命令重新加载
    # firewall-cmd --list-all                                      \\ 查看防火墙规则
    # firewall-cmd --state                                          \\ 查看防火墙运行状态
    # firewall-cmd --permanent --zone=public --add-port=9999/tcp     \\ 添加 9999端口 放行
    # firewall-cmd --permanent --remove-port=9527/tcp   删除          \\ 删除 9527端口
    # firewall-cmd --permanent --add-port=9527/tcp                     \\ 添加 端口  宝塔里面可以看到

    # firewall-cmd --permanent --add-rich-rule="rule family="ipv4"  port protocol="tcp" port="59157" accept"   \\ 放行端口  宝塔可使用此命令
    # firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="18.162.228.120" port protocol="tcp" port="59157" accept"  \\ 限定源ip
    # firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="43.243.95.0/24" port protocol="tcp" port="59157" accept"   \\ 限定源ip段


74. nl 命令
    # nl a.txt               \\ 加行号 显示   空白行默认不加行号
    # nl -b a a.txt           \\ 空白行也 加行号
    # nl -b a -n rz a.txt      \\ 在起那么 补上000000 默认为6位
    # nl -b a -n rz -w 3 a.txt  \\ -w 3 调整补位的0 为3位


75. fdisk 命令
    # fdisk -l        \\ 查看 所有 磁盘
    # fdisk /dev/sdb   \\ 
        m               \\ 帮助
        n                \\ 新建分区
            p             \\ 新建主分区
                +10G       \\ 分给 10G
            e               \\ 新建扩展分区
        p                    \\ 显示 当前 分区 状态
        d                     \\ 删除分区
        w                      \\ 保存退出
        q                       \\ 不保存退出
    # mkfs.ext3 /dev/sdb1        \\ 
    # mkfs.xfs /dev/sdb           \\ 使用xfs 格式化 sdb
    # mount /dev/sdb1 /data/       \\ 挂载


76. parted 命令      \\ 分区操作
    # parted -l       \\ 查看所有分区
    # parted           \\ 进入
        print devices   \\ 显示所有硬盘设备
        select /dev/sdb  \\ 选择某一硬盘
        p                 \\ 查看分区状态
        mkpart             \\ 创建分区
            start 
            end -1           \\ 到最后
        rm 4                  \\ 删除分区4


77. mkfs 命令                  \\ 格式化 建立文件系统
    # ls -l /sbin/mkfs.*        \\ 可以查看到所有支持的格式 实际就是调用这些文件
    # mkfs -V                    \\ 显示版本信息
    # mkfs.ext4 /dev/sdb4         \\ 把该设备格式化成ext4文件系统
        .vfat                      \\ vfat就是fat32
        .msdos                      \\ msdos就是fat16


78. du 命令
    # du -sh ./aaa                                 \\ 查看某目录 总大小
    # du -sh                                        \\ 查看当前 目录总大小
    # du -h                                          \\ 所有当前目录及子目录 大小
    # du -h -d1                                       \\ -d1 一层子目录
    # du --block-size=MiB --max-depth=1 | sort -n      \\ 查看 所有 目录 大小


79. ln 命令                  \\ 软连接 硬链接
    # ln -s aa aa.soft        \\ 软链接: 源文件 目标文件  删除软链接不影响源文件 删除源文件软连接不可用  类似快捷方式
        aa.soft -> aa          \\ 此符号为软连接
    # ln aa aa.hard             \\ 硬链接: 没有链接符号 i节点会和源文件一样  删除硬链接不会影响 原文件 修改会同时修改
                                 \\ 任何 文件 都可以看成 i节点的 硬链接   不可以给文件夹创建硬链接
                                  \\ 硬链接 可以做备份使用 不占用实际空间
    # ln -s /data/soft  /home/soft \\ 软链接目录 要使用绝对路径 不能使用相对路径     软链接: 源目录 目标目录 
    # ls -i                         \\ 查看文件或目录的 i节点  i节点可以理解为元数据库存储的地方 


80. chattr 命令  lsattr 命令
    chattr
        +i              \\ 对于文件 i权限 不能被删除修改等操作  对于文件夹 此文件夹下面所有的文件不能被 修改 删除 等操作
        +a               \\ 对于文件 a权限 不能被删除 只能追加内容  对于文件夹 下面所有的文件 不能被删除 可以新建 

        # chattr +i bbb    \\ 给文件夹加 i权限
        # chattr -R +i bbb  \\ 递归
        # chattr +i a.txt    \\ 给文件 加 i 权限
        # chattr -i a.txt     \\ 去除 文件的特殊属性

    lsattr
        # lsattr -a              \\ 查看当前文件夹下 所有文件的特殊权限
        # lsattr b.txt            \\ 查看单个文件的特殊权限


81. passwd 命令
    # passwd git             \\ 修改 git用户 的密码
    # passwd -S git           \\ 查看git 用户的状态 是否被锁住   如果提示 locked 则被锁定住
    # passwd -l git            \\ 锁定 git 用户   不能登录
    # passwd -u -f git          \\ 解锁 git 用户  如果设置密码 -u即可  -f为强制此用户密码为空的时候使用
    # passwd -d git              \\ 删除密码 移除 git 用户的密码 使之为空
    # awk -F ':' '{if($2=="") print $0 }' /etc/shadow   \\ 查看系统上 所有的 空密码 的用户
        -d 删除密码
        -f 强迫用户下次登录时必须修改口令
        -w 口令要到期提前警告的天数
        -k 更新只能发送在过期之后
        -l 停止账号使用
        -S 显示密码信息
        -u 启用已被停止的账户
        -x 指定口令最长存活期
        -g 修改群组密码
        指定口令最短存活期
        -i 口令过期后多少天停用账户


82. centos ntfs 支持

    方案一: 已测试可以正常使用  
        # yum install -y ntfsprogs                                              \\ epel源
        # wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz
        # tar -xzvf ntfs-3g_ntfsprogs-2017.3.23.tgz -C /usr/local/
        # cd /usr/local
        # mv ntfs-3g_ntfsprogs-2017.3.23 ntfs-3g_ntfsprogs
        # cd ntfs-3g_ntfsprogs/
        # vim configure                \\ 注释掉此行 否则会报错
            # $RM "$cfgfile" 
        # ./configure                          
        # make
        # make install
        # ln -s /usr/bin/ntfs-3g /usr/bin/ntfs
        # fdisk -l
        # ls /dev/sdb*
        # mount /dev/sdb1 /mnt         \\ 挂载
        # df -Th 

        # fdisk /dev/sdb                   \\ 如果需要重新分区 详细 参见 fdisk
        # mkfs.ntfs -k /dev/sdb1            \\ 格式化   很慢    最好不要是用此格式化 使用windows格式化

    方案二: 未测试
        # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
        # yum install ntfs-3g


83. less 命令
    # tree | less         \\ 可以把比较长的文档 给less 读取
    # cat a.txt | less
        /aaaa    向前搜索
        ?aaaa    向后搜索  都差不多
            n    查找下一个
            N    查找上一个
        f 或 ctrl + f   向前移动一屏
        b 或 ctrl + b   向后移动一屏
        d 或 crtl + d   向前移动半屏
        u 或 ctrl + u   向后移动半屏
        j   向下移动一行
        k   向上移动一行
        G   移动到最后一行
        g   移动到第一行

    # less aaa.log   \\ less 版 tail -f


84. diff 命令
    # diff a b           \\ 比较两个文件夹的不同
    # diff a.sh c.sh      \\ 比较两个文件的不同  没有返回说明相同
        a - add
        c - change
        d - delete

        3c3                   \\ c为change 表示第一个文件的第3行  和第二个文件的第3行不同  
        <                      \\ 第一个文件
        >                       \\ 第二个文件
        6a7                      \\ a 为 add 
        11,12d10                  \\ d 为 delete

    # diff a.sh c.sh -y -W 140      \\ 并排输出比较
        -y     以并列的方式显示文件的异同之处。
        -W     在使用-y参数时,指定栏宽
        -w     忽略全部的空格字符
        |      表示前后2个文件内容有不同
        <      表示后面文件比前面文件少了1行内容
        >      表示后面文件比前面文件多了1行内容

    # diff a.sh c.sh -c                   \\  上下文输出格式
        -c    上下文 输出比较
        +    比较的文件的后者比前着多一行
        -    比较的文件的后者比前着少一行
        !    比较的文件两者有差别的行

    # diff a.sh c.sh -u                       \\ 以合并的方式来显示文件内容的不同
        -u    以合并的方式来显示文件内容的不同


85. traceroute 路由追踪
    # yum install traceroute
    # traceroute www.baiud.com
    # traceroute -n www.baiud.com         \\ 直接使用IP地址  不解析主机名

    tracert -d www.baidu.com                \\ windows -d 不解析主机名


86. cal 日历命令
    # cal          \\ 显示 当期月份的 日历
    # cal -y        \\ 显示 当前年份的 所有日历
    # cal 1987       \\ 显示 指定年份的 所有日历
    # cal 12 1987     \\ 显示指定年份 指定月份 的日历
    # cal -3           \\ 显示当月 前一个月 后一个月的 日历
    # cal -j            \\ 显示在当年中的第几天 一年日期按天算 从1月1号算起
        -s               \\  显示星期天为一个星期的第一天,默认的格式 
        -m                \\ 显示星期一为一个星期的第一个天


87. du 命令                      \\ 文件和目录磁盘使用的空间
    # du -sh                      \\ 总大小
    # du -h | sort -nr | less      \\ 按照空间大小排序
    # du -h --max-depth=1           \\ 输出当前目录下 一层子目录所使用的空间
    # du -sh .[!.]* *                \\ 查看隐藏


88. killall 命令
    # yum install psmisc    \\ killall 命令的包
    # killall nginx          \\ 杀死所有nginx进程
    # killall -9 rsync        \\ 强制杀程序 粗暴 最好不用-9

    关于 杀死都有登录的 用户
        # w                     \\ 显示当前所有用户登录信息及执行的命令
        # killall -9 bash        \\ 杀掉所有的bash 前所有连接丢失了   需要重新连接并登录


89. pkill 命令
    # yum install procps-ng       \\ pkill 由 procps-ng 包提供
    # pkill rsync                  \\ 杀死程序


90. nl 命令
    # nl a.txt               \\ 加行号 显示   空白行默认不加行号
    # nl -b a a.txt           \\ 空白行也 加行号
    # nl -b a -n rz a.txt      \\ 在起那么 补上000000 默认为6位
    # nl -b a -n rz -w 3 a.txt  \\ -w 3 调整补位的0 为3位


91. sl 命令
    # yum install sl
    # sl               \\ 火车


92. route 命令

    常用 route 命令
        # route add -host 192.168.10.2 eth0             \\ 到 10.2 经过 eth0 一般指定网卡即可
        # route del -host 192.168.10.2                   \\ 删除
        # route add -net 192.168.20.0/24 ens33            \\ 添加网段
        # route del -net 192.168.30.0/24                   \\ 删除
        # route add default gw 192.168.120.240              \\ 添加 默认网关
        # route del default gw 192.168.120.240               \\ 删除 默认网关

    添加永久路由
        # vim /etc/sysconfig/network-scripts/route-ens33  \\ 跟route-网卡名字  跟网卡一个名字 走此网卡的路由
            192.168.142.200/32 via 192.168.10.254          \\ 添加单个路由   主机路由
            192.168.142.100/24 via 192.168.10.254           \\ 添加一个网段
        # systemctl restart network
        # route -n

    route 命令 详解

        Destination: 目标网段或者主机
        Gateway: 网关地址  * 表示目标是本主机所属的网络 不需要路由
        Genmask: 网络掩码
        Flags:  标记
            U — 路由是活动的
            H — 目标是一个主机
            G — 路由指向网关
            R — 恢复动态路由产生的表项
            D — 由路由的后台程序动态地安装
            M — 由路由的后台程序修改
            ! — 拒绝路由
        Metric: 路由距离 到达指定网络所需的中转数(linux 内核中没有使用)
        Ref:    路由项引用次数(linux 内核中没有使用)
        Use:    此路由项被路由软件查找的次数
        Iface:  该路由表项对应的输出接口

        主机路由: 就是到单个ip  是路由选择表中指向单个IP地址或主机名的路由记录   主机路由的 Flags 字段为 H
        网络路由: 就是到网段    是代表主机可以到达的网络 网络路由的 Flags 字段为 N
        默认路由: 当主机不能在路由表中查找到目标主机的IP地址或网络路由时 数据包就被发送到默认路由(默认网关)上 Flags字段为 G

        # route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

            add : 添加一条路由规则
            del : 删除一条路由规则
            -net : 目的地址是一个网络
            -host : 目的地址是一个主机
            target : 目的网络或主机
            netmask : 目的地址的网络掩码
            gw : 路由数据包通过的网关
            dev : 为路由指定的网络接口

        添加到主机的路由  单个路由
            # route add -host 192.168.10.2 eth0             \\ 到 10.2 经过 eth0 一般指定网卡即可
            # route del -host 192.168.10.2                   \\ 删除

            # route add -host 192.168.10.2 dev eth0                  \\ dev 可以省略 都一样
            # route add -host 192.168.10.2 gw 192.168.10.254          \\ 到10.2 经过网关10.254  一般不用指定网关
            # route add -host 192.168.10.2 gw 192.168.10.254 dev eth0  \\ 到10.2 经过eth0 发到网关 10.254  一般不用指定网关

        添加到网络的路由  网段
            # route add -net 192.168.20.0/24 ens33
            # route del -net 192.168.30.0/24                                  \\ 删除

            # route add -net 192.168.20.0 netmask 255.255.255.0 dev ens33       \\ dev可以省略而已 两个一样
            # route add -net 192.168.20.0 netmask 255.255.255.0 ens33
            # route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.20.1   \\ 指明 网关  网关要存在

        添加默认路由
            # route add default gw 192.168.120.240      \\ 添加 默认网关
            # route del default gw 192.168.120.240       \\ 删除 默认网关

        屏蔽路由
            # route add -net 192.168.20.0 netmask 255.255.255.0 reject       \\ 屏蔽一条路由
            # route del -net 192.168.20.0 netmask 255.255.255.0 reject        \\ 删除 屏蔽路由条目

        删除路由
            # route del -host 192.168.1.2 dev eth0:0
            # route del -host 10.20.30.148 gw 10.20.30.40
            # route del -net 10.20.30.40 netmask 255.255.255.248 eth0
            # route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
            # route del -net 192.168.1.0/24 eth1
            # route del default gw 192.168.1.1


93. tee 命令

    # ls | tee                     \\ tee以标准输入作为输入,标准输出和文件作为输出。
    # cat aa.txt | tee b.txt        \\ 把 aa.txt的内容 追加 b.txt   如果没有 b.txt 则创建
    # cat aa.txt | tee -a b.txt      \\ 把 aa.txt的内容 追加 b.txt   如果没有 b.txt 则创建
    # cat aa.txt | tee a.txt b.txt c.txt     \\ 列出文本文件 aa.txt 的内容 同时复制3份副本 没有a.txt 会创建 如果有会覆盖
    # cat aa.txt | tee -                      \\ 输出到标准输出两次
    # cat aa.txt | tee - -                     \\ 输出到标准输出三次

    # tee a.sh               \\ 会生成一个 a.sh 的文件 里面包含敲入的内容  ctrl + d 结束 +c 也行
    # tee -i a.sh             \\ 不接受中断信号 即 是能使用ctrl + d 结束  crtl + c 不能结束
        -a          \\ 追加
        -i           \\ 不接受中断信号
        --version     \\ 显示版本信息

    (
    cat <<'EOF'
    aaaaaaaaaaaaaaaaaaaaaaaaaa
    EOF
    ) | tee /data/a.txt               \\ 配合 EOF 写入文件

    

100. 其他命令
    # w                                                    \\ 显示当前所有用户登录信息及执行的命令
    # mkdir -pv /data/{shell,soft,www}                      \\ 建立一串目录
    # dhclient -r eth0                                       \\ 释放dhcp 获取到的ip
    # dhclient -v eth0                                        \\ 主动获取ip
    # echo "8888" | md5sum                                     \\ 查看一个字符串 md5的值  可用作 生成密码  随机数
    # echo $RANDOM                                              \\ 生成随机数字
    # echo $RANDOM|cksum |cut -c 1-2                             \\ 取两位随机数
    # route add -host 192.168.10.30 dve ens33:0                   \\ 
    # ifconfig ens33:0 192.168.10.30/32 broadcast 192.168.10.30    \\ 网卡配置多个ip地址
    # route -n                                                      \\ 查看路由表
    # route add -net 192.168.20.0/24 gw 172.16.100.9                 \\ 添加路由
    # cat -n a.txt                                                    \\ 加行号显示 空白行也加行号
    # wget --no-check-certificate  https://www.ssyy99.com/download/Moniterdb.sql.gz   \\ 下载 --no... 不检测安全性


102.关于证书

    ❶. 最新 certbot 申请证书     2021.3.1更新
        # yum install epel-release
        # yum install snapd
        # systemctl enable --now snapd.socket
        # ln -s /var/lib/snapd/snap /snap              \\ 创建/var/lib/snapd/snap和/snap之间的链接
        # snap install core                             \\ 可能需要运行两次   需要在epel源上下载
        # snap refresh core
        # snap install --classic certbot
        # ln -s /snap/bin/certbot /usr/bin/certbot

        ①. 80端口 未占用时 申请证书
            # systemctl stop nginx                              
            # certbot certonly --standalone --email  k051197@kok.work  -d b.kshenbf.com

        ②. nginx 运行时 yum安装的nginx 申请证书                   \\ 针对 yum 安装的nginx  nginx要运行80被监听
            # certbot certonly --nginx --nginx-server-root /etc/nginx --email teo@teo.com -d ssyy99.com -d www.ssyy99.com
            
        ③. nginx 运行时 编译安装的nginx 申请证书
            # ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx    \\ 针对 编译安装的nginx 需要 创建软连接
            # ln -s /usr/local/nginx/ /etc/nginx
            # certbot certonly --nginx --nginx-server-root /usr/local/nginx/conf --email teo@teo.com -d ssyy99.com

        注:
            ❶. 如有证书还未到期 先把原的证书文件夹改其他名字 在改相关配置文件执行新改的名字目录 在新生成证书 修改配置文件证书目录

            ❷. 如果 有老版本 certbot 先要卸载
                # yum remove certbot
                # rm /usr/local/bin/certbot-auto
                # rm -rf /opt/eff.org/certbot

            ❸. 提示错误 The error was: NoInstallationError("Could not find a usable 'nginx' binary. Ensure nginx exists, 
                        the binary is executable, and your PATH is set correctly.")
                        The nginx plugin is not working; there may be problems with your existing configuration.
                # which nginx                                                 \\ 查看nginx文件执行目录
                # ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx       \\ 添加软连接  在执行申请证书


    ❷.acme.sh  申请证书 

        # curl  https://get.acme.sh | sh          \\ 必须使用root 会在家目录下生成隐藏文件夹 .acme.sh 或者直接拷贝acme.sh 来此文件夹
        # alias acme.sh=~/.acme.sh/acme.sh         \\ 添加别名 方便使用
        # echo 'alias acme.sh=~/.acme.sh/acme.sh' >>/etc/profile  \\ 添加到 环境   方便使用

        基于文件验证
            # acme.sh --issue -d ssyy99.com -d www.ssyy99.com --webroot /www/wwwroot/ssyy99.cpm/ -m teo@teo.com   \\ 申请证书 指明网址目录
            # acme.sh --issue -d ssyy99.com --nginx -m teo@teo.com       \\ 基于 nginx
            # acme.sh --issue -d ssyy99.com --apache -m teo@teo.com       \\ 基于 apache
            # acme.sh  --issue -d ssyy99.com --standalone -m teo@teo.com   \\ 没有80端口监听的情况下
         
        基于 DNS 验证                                    \\ 亦可使用 域名解析商提供的 api 自动添加 txt 记录完成验证. 这里不介绍
            # acme.sh --issue --dns -d ssyy99.com        \\ 基于 dns 验证 需要在 解析 txt 记录 
            # acme.sh --renew -d ssyy99.com               \\ 解析 txt 记录 之后 在执行申请申请书

        其他命令
            # acme.sh --list                      \\ 显示已申请的证书信息
            # acme.sh --upgrade                    \\ 更新 手动更新  acme主程序
            # acme.sh --upgrade --auto-upgrade      \\ 自动更新 acme主程序   以后会自动更新
            # acme.sh --upgrade --auto-upgrade 0     \\ 关闭 自动更新

        关于 拷贝证书          \\ 最好使用此命令拷贝证书  不要是用默认的目录  证书60天会自动续签 使用命令拷贝会自动续签
            # acme.sh --installcert -d domain.com \
            --key-file /usr/local/nginx/conf/ssl/ssyy99.com.key \
            --fullchain-file /usr/local/nginx/conf/ssl/ssyy99.com.cer \
            --reloadcmd "service nginx reload"


    ❸. 使用 certbot-auto 脚本  (有可能此方法已经失效)
        # wget https://dl.eff.org/certbot-auto
        # chmod a+x certbot-auto
        # systemctl stop nginx                     \\ 需要停止nginx 使80端口不被占用    生成证书有效三个月
        # ./certbot-auto certonly --standalone --email k051535@qq.com -d baidu.com -d www.baidu.com -d ssyy99.com  
            a
            y

        注:
            ❶. 证书目录 及 相关文件
                # tree /etc/letsencrypt/live/                 \\ 查看安装的证书的目录
                    cert.pem       \\ Apache服务器端证书  
                    chain.pem       \\ Apache根证书和中继证书  
                    fullchain.pem    \\ Nginx所需要ssl_certificate文件  
                    privkey.pem       \\ 安全证书KEY文件  Nginx环境,就只需要用到fullchain.pem和privkey.pem两个证书文件

            ❷. nginx 添加证书关键配置文件
                server {
                    listen 443 ssl;
                    server_name ssyy99.com;
                    charset utf-8;
                    ssl_certificate /etc/letsencrypt/live/ssyy99.com/fullchain.pem;
                    ssl_certificate_key /etc/letsencrypt/live/ssyy99.com/privkey.pem;
                    ssl_stapling on;
                    ssl_session_timeout 5m;
                    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
                    ssl_prefer_server_ciphers on;
                }

            ❸. certbot-auto其他命令
                ./certbot-auto certificates          \\ 查看SSL证书的过期时间
                ./certbot-auto renew --force-renew    \\ 强制更新证书命令

            ❹. 续期
                # ./certbot-auto renew                  \\ 自动续期 需要停止nginx 80  443端口不能被占用
                # crontab -e                             \\ 亦可以加到 定时任务 自动续期
                    * * 1 * * systemctl stop nginx;/data/shell/certbot-auto renew --no-self-upgrade;systemctl start nginx

    ❹. 使用 certbot 申请 通配符域名证书 需要DNS验证  (有可能此方法已经失效)
        # yum install epel*
        # yum install certbot
        # certbot --version
        # certbot -d ssyy99.com -d *.ssyy99.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory certonly --agree-tos --register-unsafely-without-email
            Press Enter to Continue                                           \\ 第一个 回车 同意  直接按  根据提示解析DNS
                _acme-challenge  iLS0NjcdP3RR1KphB6xbbVnKS_NS2uMW-xdDRzz85OM   \\ 根据提示  需要DNS解析
                # host -t txt _acme-challenge.ssyy99.com                        \\ 可开其他机器测试 可测试DNS是否成功

            Press Enter to Continue                                    \\ 第二个 回车 需要 DNS 解析测试完在按
                   /etc/letsencrypt/live/ssyy99.com/fullchain.pem       \\ 证书地址 
                   /etc/letsencrypt/live/ssyy99.com/privkey.pem

    ❺. 使用 freessl.org 免费证书申请流程
        https://freessl.org
            证书类型 RSA
            验证类型 文件验证
            CSR生成  浏览器生成

        添加到nginx文件验证                       \\ 对于DNS验证 添加 @ tet 记录即可
                location / {                      \\ 对于强制跳转的加如下代码  在80端口下添加注释掉原来的rewrite
                    rewrite ^/(.*) https://$server_name$1 permanent;
                }
                location /.well-known/pki-validation {       \\ 对于不是强制跳转 加以下代码即可
                    charset utf-8;
                    alias /data/;                              \\ godaddy.html 或要验证的文件 复制到此目录下
                    sendfile on;
                    autoindex on;
                    autoindex_exact_size off;
                    autoindex_localtime on;
                }
            # /usr/local/sbin/nginx -t
            # /usr/local/sbin/nginx -s reload          \\     证书:*.crt   私钥: *.key

    ❻. 使用 godaddy 购买证书 申请证书
        # (umask 077; openssl genrsa -out www.ssyy99.com.key 2048)
        # openssl req -new -key www.ssyy99.com.key -out www.ssyy99.com.csr -days 730     \\ 拿到csr复制到godaddy官网
            CN Beijing Beijing ssyy99 OMD www.ssyy99.com ssyy99@google.com

        godaddy 验证步骤 https://sg.godaddy.com/zh/help/html-dns-7452

    ❼. Windows  IIS部署证书流程
          Linux
            # yum install openssl
            # rz cs.tskefu.com.key cs.tskefu.com.crt                      \\ 需生成 .pfx文件 密码123456即可
            # openssl pkcs12 -export -out cs.tskefu.com.pfx -inkey cs.tskefu.com.key -in cs.tskefu.com.crt

          Windows
            ① 把pfx文件复制到证书目录下 D:\zrpfx
            ② 打开IIS应用池 SERVER-02 --> 服务器证书 --> 导入
            ③ 打开www.online.com主页 --> 右键编辑绑定 --> 编辑/添加 --> 选择要使用的证书
            
        注:
            ❶ 此key文件为linux格式 否则会报错 可以使用把key复制到vim编辑另存即可


103. 宝塔

    宝塔安装
        # wget http://download.bt.cn/install/install_6.0.sh
        # chmod +x install_6.0.sh
        # ./install_6.0.sh
        # bt                                \\ 宝塔面板 命令行 文件在 /etc/init.d/bt
        # bt restart
        # bt stop
        # bt reload

    卸载
        # /etc/init.d/bt stop 
        # chkconfig --del bt
        # rm -f /etc/init.d/bt
        # rm -rf /www/server/panel 

    宝塔配置文件
        # vim www/server/panel/data/admin_path.pl     \\ 设置安全 端口
            /4084ae67
        # rm www/server/panel/data/admin_path.pl        \\ 关闭安全入口 删除此文件即可
        # vim /www/server/panel/data/port.pl             \\ 修改宝塔端口
            8888
        # cat /tmp/panelBoot.pl                            \\ 日志
        # vim /www/server/panel/tools.py                    \\ 面板配置文件

    绕过 注册页面
        1.修改配置文件
            # vim /www/server/panel/BTPanel/static/js/index.js
                if (bind_user == 'REMOVED') {                    \\ 修改此项 绕过 注册

        2. 临时 绕过注册页面
            链接后面加上/soft  /files这样即可轻松越过强制绑定

        3. 删除登录页面   前面两种在新版中已经不管用了
            # cd /www/server/panel/BTPanel/templates/default
            # mv bind.html bind.html.bak

    备份数据
        注意 PHP mysql nginx apache 版本
        sz /www/wwwroot                  \\ 网址目录
        sz /www/server/panel/vhost        \\ 网址配置文件
        sz /www/server/panel/data          \\ 主要备份default.db  宝塔面板数据文件
        # ./mysql_bak.sh                    \\ 备份mysql数据库 注意mysql版本 5.5   5.7不互通   

        推送 到服务器安装rsync
            # vim /etc/rsyncd.conf
                uid  = www
                gid  = www
                port = 63873
                use chroot  = no
                max connections = 10
                hosts allow = 192.168.10.10
                lock file = /var/run/rsync.lock
                log file  = /var/log/rsyncd.log
                ignore errors
                [cp_web]
                path = /data/www
                read only = no

            # groupadd www
            # useradd -g www www
            # chown -R www.www /data/wwwroot
            # rsync --daemon
            # ss -tnl 
            # pkill rsync 
            # iptables -A INPUT 4 -p tcp --dport 63873 -j ACCEPT 

            # rsync -avzP --port=63873 /www/wwwroot/ www@192.168.10.11::cp_web         \\ 推送到目标
        
    还原数据
        rz /www/wwwroot                        \\ 网址目录
        rz /www/server/panel/vhost              \\ 网址配置文件
        rz /www/server/panel/data/default.db     \\ 使用Navicat修改宝塔数据库 此文件存放宝塔面板的信息
        # ./mysql_re.sh                           \\ 还原mysql数据 注意测试

    修改面板数据
        使用navicat 导出sites domain databases表格
        sites  表格k列设置id 
        domain 表格G列设置id I列=VLOOKUP(B2,sites.xlsx!$A$2:$K$153,11,1) 替换id 和pid列 删除G I 列保存
        databases 表格J列设置id L列=VLOOKUP(B2,sites.xlsx!$A$2:$K$153,11,1 ) 替换id和pid列 删除J L列保存
        sites  替换id列 删除k列保存

    宝塔数据面板 sqlite数据库  /www/server/panel/data/default.db
        sites      网站 
            domain    网站-->域名管理的端口  pid要与sites表的 id 对应
        firewall   安全           
        databases  数据库
        users      登陆密码
        crontab    计划任务
     
    宝塔 问题
        1. 一些网站会提示 php短标签(short_open_tag)功能才能运行!
            # vim /www/server/php/56/etc/php.ini
                short_open_tag = Off


104. 苹果包做分发 做下载链接
    1. 包需要先做签名 具体在此不论述
    2. 配置苹果包下载地址 必须为ssl https://m.ssyy99.com/ssyy99.com.ipa
    3. 创建plist文件 路径为 https://m.ssyy99.com/ssyy99.plist 格式如下
    4. 下载路径为 itms-services://?action=download-manifest&url=https://m.ssyy99.com/ssyy99.plist


    # vim ssyy99.plist
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
        <plist version="1.0">
        <dict>
            <key>items</key>
            <array>
                <dict>
                    <key>assets</key>
                    <array>
                        <dict>
                            <key>kind</key>
                            <string>software-package</string>
                            <key>url</key>
                            <string>https://m.ssyy99.com/ssyy99.ipa</string>
                        </dict>
                    </array>
                    <key>metadata</key>
                    <dict>
                        <key>bundle-identifier</key>
                        <string>com.youmi.shangpin</string>
                        <key>bundle-version</key>
                        <string>1.0</string>
                        <key>kind</key>
                        <string>software</string>
                        <key>title</key>
                        <string>ssyy99</string>
                    </dict>
                </dict>
            </array>
        </dict>
        </plist>


注:
    plist文件详解
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
        <plist version="1.0">
        <dict>
            <key>items</key>
            <array>
                <dict>
                    <key>assets</key>
                    <array>
                        <dict>
                            <key>kind</key>
                            <string>software-package</string>
                            <key>url</key>
                            <string>https://sss/ss/ss.ipa</string>      ipa包下载地址
                        </dict>
                        <dict>
                            <key>kind</key>
                            <string>display-image</string>
                            <key>url</key>
                            <string>https://sss/ss/icon.png</string>    这里是APP图标
                        </dict>
                        <dict>
                            <key>kind</key>
                            <string>full-size-image</string>
                            <key>url</key>
                            <string>https://sss/ss/ss.png</string>      这里是APP图标
                        </dict>
                    </array>
                    <key>metadata</key>
                    <dict>
                        <key>bundle-identifier</key>
                        <string>sss</string>              IPA打包包名
                        <key>bundle-version</key>
                        <string>1.0</string>              APP版本
                        <key>kind</key>
                        <string>software</string>
                        <key>title</key>
                        <string>ss</string>               APP名字
                    </dict>
                </dict>
            </array>
        </dict>
        </plist>

    完整访问路径:  itms-services://?action=download-manifest&url=https://xxx/manifest.plist

    js代码跳转: window.location.href = “itms-services://?action=download-manifest&url=https://域名/manifest.plist”;


105. linux 使用 其他邮箱 SMTPS 465 端口 发送邮件                      \\ 可做成脚本

    # mkdir -p /root/.certs/                                           \\ 创建证书   证书随便即可
    # echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
    # certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
    # certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
    # certutil -L -d /root/.certs
    # certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu"  -d ./ -i qq.crt    \\ 信任证书

    # vim /etc/mail.rc                        \\ 追加即可
        set smtp="smtps://smtp.qq.com:465"
        set smtp-auth=login
        set smtp-auth-user="aaaaaaaaa@qq.com"    \\ 换成你的邮箱
        set smtp-auth-password="123456"           \\ 换成你的邮箱第三方登录密码
        set ssl-verify=ignore 
        #set nss-config-dir=/etc/pki/nssdb
        set nss-config-dir=/root/.certs

    # echo 123456 | mail -v -r "228444347@qq.com" -s "hello world" 228444347@qq.com \\ 发送邮件 一定要带-r参数 -v调试


106. 关于 百度统计 及 网页代码 跳转

        百度统计代码 类似 下面的形式 加到网页即可
            <script>
            var _hmt = _hmt || [];
            (function() {
              var hm = document.createElement("script");
              hm.src = "https://hm.baidu.com/hm.js?def0d57de38ea6e5180ad67193da61e9";
              var s = document.getElementsByTagName("script")[0]; 
              s.parentNode.insertBefore(hm, s);
            })();
            </script>

        # vim index.html               \\ 使用nginx root 指向此index.html 即可 跳转
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
                <title>美女都让狗咬了</title>
                <meta http-equiv="keywords" content="美女,都让,狗,咬了,linux,">
                <link rel="shortcut icon" href="./icon.png"/>
                <meta name=”Description” Content=”linux技术博客”>
            </head>
            <script>
                var _hmt = _hmt || [];
                (function() {
                    var hm = document.createElement("script");
                    hm.src = "https://hm.baidu.com/hm.js?ff6f1626d0efb1cdbe7c261b62beeafe";
                    var s = document.getElementsByTagName("script")[0];
                    s.parentNode.insertBefore(hm, s);
                })();
            </script>
            <script>
                var url="https://www.ssyy99.com"; var str1=document.title;  document.write('<meta id="viewport" name="viewport" content="user-scalable=no,width=device-width, initial-scale=1.0" />'); document.write('<style>html,body{width:100%;height:100%;overflow:hidden; clear:both;}</style>'); document.write('<div style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:2147483647;">'); document.write('<iframe src=" '+url+'" frameborder="0" style="border:0;width: 100%; text-align: center; border: medium none; height:100%;max-height: 4000px;"></iframe>'); document.write('</div>');
            </script>
            <script>
                !function () {
                    var devices = ["iPhone","Android","Windows Phone"]
                    var ua = window.navigator.userAgent
                    for (var i = 0; i < devices.length; i++) {
                    if (ua.indexOf(devices[i]) != -1) {
                    window.location.href = 'https://m.ssyy99.com'
                    }
                }
            }()
            </script>
            <body>
            </body>
            </html>








Teo

You must be logged in to post a comment