九零不老心
发布于 2019-07-18 / 8 阅读 / 0 评论 / 0 点赞

linux实用命令合集

#性能工具(yum install -y sysstat)
    #整体性能
        uptime
            load average三值大小一般不能大于系统CPU的个数。系统有8个CPU,如load average三值长期大于8,说明CPU很繁忙,负载很高,可能会影响系统性能。
            但偶尔大于8,一般不会影响系统性能。
            如load average输出值小于CPU个数,则表示CPU有空闲时间片,比如本例中的输出,CPU是非常空闲的
    #cpu性能
        vmstat 2 30
            r--运行和等待cpu时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU
            b--在等待资源的进程数,比如正在等待I/O、或者内存交换等
            us用户进程消耗的CPU 时间百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
            sy内核进程消耗的CPU时间百分比。Sy的值较高时,说明内核消耗的CPU资源很多。根据经验,us+sy的参考值为80%,如果us+sy大于 80%说明可能存在CPU资源不足。
        sar -u 2 30
            %user列显示了用户进程消耗的CPU 时间百分比。
            %nice列显示了运行正常进程所消耗的CPU 时间百分比。
            %system列显示了系统进程消耗的CPU时间百分比。
            %iowait列显示了IO等待所占用的CPU时间百分比
            %steal列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作 。
            %idle列显示了CPU处在空闲状态的时间百分比
            在一个多CPU的系统中,如果程序使用了单线程,会出现这么一个现象,CPU的整体使用率不高,但是系统应用却响应缓慢,这可能是由于程序使用单线程的原因,单线程只使用一个CPU,导致这个CPU占用率为100%,无法处理其它请求,而其它的CPU却闲置,这就导致了整体CPU使用率不高,而应用缓慢现象的发生
    #内存性能
        free -m
            应用程序可用内存/系统物理内存>70%,表示系统内存资源非常充足,不影响系统性能;
            应用程序可用内存/系统物理内存<20%,表示系统内存资源紧缺,需要增加系统内存;
            20%<应用程序可用内存/系统物理内存<70%,表示系统内存资源基本能满足应用需求,暂时不影响系统性能
        vmstat 2 30
            swpd--切换到内存交换区的内存数量(k为单位)。如swpd值偶尔非0,不影响系统性能
            free--当前空闲的物理内存数量(k为单位)
            buff--buffers cache的内存数量,一般对块设备的读写才需要缓冲
            cache--page cached的内存数量
            一般作为文件系统cached,频繁访问的文件都会被cached,如cache值较大,说明cached的文件数较多,如果此时IO中bi比较小,说明文件系统效率比较好
            si--由磁盘调入内存,也就是内存进入内存交换区的数量。
            so--由内存调入磁盘,也就是内存交换区进入内存的数量
            si、so的值长期不为0,表示系统内存不足。需增加系统内存。
    #磁盘性能
        iostat -d 2 30
            Blk_read/s--每秒读取数据块数
            Blk_wrtn/s--每秒写入数据块数
            Blk_read--读取的所有块数
            Blk_wrtn--写入的所有块数
            如Blk_wrtn/s值很大,表示磁盘写操作频繁,考虑优化磁盘或程序,
            如Blk_read/s值很大,表示磁盘直接读操作很多,可将读取的数据放入内存
        sar -d 2 30
            await--平均每次设备I/O操作等待时间(毫秒)
            svctm--平均每次设备I/O操作的服务时间(毫秒)
            %util--一秒中有百分之几的时间用于I/O操作
            如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,
            如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢
            如%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷工作,该磁盘可能存在瓶颈。
    #网络性能
        (1)通过ping命令检测网络的连通性
        (2)通过netstat –i组合检测网络接口状况
        (3)通过netstat –r组合检测系统的路由表信息
        (4)通过sar –n组合显示系统的网络运行状态

    #性能监控命令汇总
        工具    简单介绍
        top    查看进程活动状态以及一些系统状况
        vmstat    查看系统状态、硬件和系统信息等
        iostat    查看CPU 负载,硬盘状况
        sar    综合工具,查看系统状况
        mpstat    查看多处理器状况
        netstat    查看网络状况
        iptraf    实时网络状况监测
        tcpdump    抓取网络数据包,详细分析
        mpstat    查看多处理器状况
        tcptrace    数据包分析工具
        netperf    网络带宽工具
        dstat    综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息

#网络检测工具(yum install -y bind-utils)
    #获取当前占用大量带宽的程序
        yum install nethogs -y
        nethogs em1
            #再根据端口确定进程ps | grep pid, lsof -i:port
    #端口连通性检测工具
        telnet ip port
        nc -v ip port #查看是否连通,还可以输入内容获得回显
        netstat(ss) -nltp | grep port #查看端口是否存在
    #查询域名信息
        #dns记录类型
            A记录:地址记录,用来指定域名的IPv4地址(如:8.8.8.8),如果需要将域名指向一个IP地址,就需要添加A记录。
            CNAME: 如果需要将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录。
            TXT:在这里可以填写任何东西,长度限制255。绝大多数的TXT记录是用来做SPF记录(反垃圾邮件)。
            NS:域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
            AAAA:用来指定主机名(或域名)对应的IPv6地址(例如:ff06:0:0:0:0:0:0:c3)记录。
            MX:如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。
            显性URL:从一个地址301重定向到另一个地址的时候,就需要添加显性URL记录(注:DNSPod目前只支持301重定向)。
            隐性URL:类似于显性URL,区别在于隐性URL不会改变地址栏中的域名。
            SRV:记录了哪台计算机提供了哪个服务。格式为:服务的名字、点、协议的类型,例如:_xmpp-server._tcp。
        nslookup dnsname
        dig dnsname
        dig -x 8.8.8.8
        dig +trace www.baidu.com
        host -v dnsname

#管理工具
    #网络管理工具NetworkManager包含命令行工具和文本界面工具:
        nmcli:网络管理命令行接口:NetworkManager Command-Line Interface
        nmtui:网络管理文本用户接口:NetworkManager Text-User Interface

#防火墙、路由信息
    #linux基线安全设置
        chown root:root /etc/hosts.allow && chown root:root /etc/hosts.deny && chmod 644 /etc/hosts.deny && chmod 644 /etc/hosts.allow
        chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow && chmod 0644 /etc/group && chmod 0644 /etc/passwd && chmod 0400 /etc/shadow && chmod 0400 /etc/gshadow
    #firewalld 防火墙增加端口
        firewall-cmd --permanent --zone=public --add-port=8080/tcp
        firewall-cmd --reload
        firewall-cmd --list-services
        firewall-cmd --list-all
    #route -n 详解
        Flags:总共有多个旗标,代表的意义如下:
            U (route is up):该路由是有效的;
            H (target is a host):目标是一部主机 (IP) 而非网域;
            G (use gateway):需要透过外部的主机 (gateway) 来转递封包(一般指向默认网关);
            R (reinstate route for dynamic routing):使用动态路由时,恢复路由资讯的旗标;
            D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由
            M (modified from routing daemon or redirect):路由已经被修改了;
            ! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
    #windows添加静态路由
        #查看已添加的路由
        route print 
        #添加静态路由 -p 表示永久路由,重启后不丢失
        route add 192.168.1.0 mask 255.255.255.0 -p 192.168.8.254
        #删除
        route delete 192.168.1.0 mask 255.255.255.0 -p 192.168.8.254
    #linux添加静态路由
        #查看路由表
        #route -n 
        #添加一条静态路由
        route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
        #添加默认路由
        route add default gw 192.168.0.1
        #删除一条路由
        route del -net 192.168.1.0/24 gw 192.168.0.1
        ##centos7以上
        #查看路由表
        ip route show 
        #添加一条静态路由
        ip route add 192.168.8.0/24 via 192.168.1.1
        #添加默认路由
        ip route add default via 192.168.0.1 dev eth0
        #删除一条路由
        ip route del 192.168.8.0/24
#常用命令
    #columnt
        #格式化输出
            column -t 格式化输出
    #wget命令
        #递归下载整站
            wget -r -p -np -k https://www.22vd.com
        #后台断点续传下载
            wget -c -b -t 10 -T 60 -O planet-190603.osm.pbf https://planet.openstreetmap.org/pbf/planet-190603.osm.pbf
    # curl命令(https://www.jianshu.com/p/07c4dddae43a)
        curl -k --cert guojingyi.cn.cert --key guojingyi.cn.key https://reg.guojingyi.cn
    #awk命令
        1、n个列(域)中,如果 想要显示的列较多 而不想显示的列较少
        我们如果不想一个个的print $2$3……
        可以试一试
            cat localhost.access.log | awk '{ $1=""; $5=""; print $0 }'
            cat localhost.access.log | awk '{ $1=""; $5="";$NF=""; print $0 }'
        2、另外,如果我要打印某列以后的所有列的,可以使用循环,把前N列都赋值为空:
            cat localhost.access.log | awk '{ for(i=1; i<=2; i++){ $i="" }; print $0 }'
        显示中间列
            cat localhost.access.log | awk '{ for(i=3; i<=(NF-2); i++){ $i="" }; print $0 }'
        3、其他格式
        显示倒数第二列
            cat localhost.access.log | awk '{print $(NF-1)}'
        显示连续列
            cat localhost.access.log | awk '{for(i=2; i<=5; i++)printf $i" "; print "" }'
        # cat <<EOF > /tmp/data
2011-01-13 18:47:46  WARN HogeHoge - getData 180
2011-01-13 18:47:46  WARN HogeHoge - getData 485
2011-01-13 18:47:46  WARN HogeHoge - getData 405
EOF
        # 求和
            cat /tmp/data | awk '{sum+=$1} END {print "sum="sum}'
        # 求平均值
            cat /tmp/data | awk '{sum+=$1} END {print "average="sum/NR}'
        # 求最大值
            cat /tmp/data | awk 'BEGIN {max=0} {if($1>max) max=$1 fi} END {print "max="max}'
        # 求最小值(min初始值设置一个超大数即可)
            cat /tmp/data | awk 'BEGIN {min=99999999} {if($1<min) min=$1 fi} END {print "min="min}'
        # 统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
            awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
    #sed命令 
        # https://www.cnblogs.com/ginvip/p/6376049.html
        # https://blog.csdn.net/feifei_csdn/article/details/80841442
        # https://blog.csdn.net/sunny_future/article/details/80174530
        # sed参数
            a 追加append
            i 插入insert
            d 删除delete
            s 替换substitution
            w 写入
            c 更改
        # a 行追加
            sed -i '4a this is an added line' filename
            # 在文件的每行末尾添加一个回车
                sed '/$/a\\n' filename
            # 在文件的末尾添加字符串eof
                sed '$a\eof' filename
        # i 插入
            # 找出文件 /etc/fstab 中以 UUID 开头的行,并在其上一行添加单行字符串
                sed '/^UUID/i\hello world' /etc/fstab
        # d 删除指定行
            sed -i '5d' filename
        # s 替换内容 (sed一次指定多条不同的替换命令,用";"隔开)
            sed 's/被替换的内容/替换内容/g' filename 显示替换后内容,实际不更改文件本身内容
            sed -i 's/被替换的内容/替换内容/g' filename 直接替换文件本身内容
            # 指定字符串前追加内容
                sed -i 's/^.*str/#&/g'
        # w 写入
            # 将文件 /etc/fstab 中以 UUID 开头的行指定输出(重定向)到 /tmp/fstab.txt 且不显示到屏幕
                sed -n '/^UUID/w /tmp/fstab.txt' /etc/fstab
        # c 更改
            # 将 /etc/fstab 中含有字符串 UUID 的行替换为 hello world
                sed '/UUID/c\hello world' /etc/fstab
            # 替换以某字符串开头的行,为指定内容
                sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
        # 打印包含指定字符串的行
            sed -n '/BUF/p' filename
            # 打印文件总行数
                sed -n '$=' /etc/fstab
        # 打印日志文件中出现错误信息的行号及其内容
            sed -n '/error/{=;p}'  /var/log/messages
    # split文件分割工具
        # 按照行数拆分
            # 假设文件test.txt有n多行,每2行拆分为一个文件,使用-l参数即可:
                split -l 2 test.txt
        # 规范命名
            # 使用-d参数可以用数字作为新的文件后缀:
                split -l 2 test.txt -d
                test.txt  x00  x01  x02
            # 
        # 按照大小拆分
            # 使用-b参数来按照大小来拆分,单位为字节(当然还可以使用k(千字节),m(兆)):
                split -b 10 test.txt
        # 分割成指定数量文件
            # 使用-n参数即可,比如无论大小,行数,拆分为3个文件:
                split -n 4 test.txt
                test.txt  xaa  xab  xac  xad
    #tar打包文件不包含路径
        #比如当前目录是/root下,打包/data/下的web1目录,到备份目录 /data/backup/下
        #则实现代码为:
            tar -czvf /data/backup/web1.tar.gz -C /data/ web1/
        #tar增量备份
            cd /data/websites/app_fsjj_baokangyisheng_org_cn && tar -g /data/backup/snapshot_app_fsjj_baokangyisheng_org_cn.snap --atime-preserve -czvpf /data/backup/app_fsjj_baokangyisheng_org_cn_20190729172741.tar.gz .
        #tar打包排除文件or文件夹
            tar -czvf tomcat-8010.tar.gz --exclude=tomcat-8010/logs/* --exclude=tomcat-8010/temp --exclude=tomcat-8010/webapps/* tomcat-8010
            tar -czvf tomcat-8011.tar.gz --exclude=tomcat-8011/logs/* --exclude=tomcat-8011/temp --exclude=tomcat-8011/webapps/* tomcat-8011
    #find命令
        #查找并删除
            find . -name 'del.txt' -ok rm {} \;
        #在目录中查找更改时间在n日以前的文件并删除它们
            find . -type f -mtime +14 -exec rm {} \; 
#其他查询信息
    #获取linux当前系统日期
        date +"%Y%m%d"
    #查看文件编码
        file test.txt
    #查看docker官方站点某个image的tags信息
        curl 'https://registry.hub.docker.com/v2/repositories/library/debian/tags/'|jq '."results"[]["name"]'
    #git加速
        nslookup -vc github.com 8.8.8.8 #然后将解析ip添加本地hosts