美文网首页springcloudspringboot走走停停
关于Linux常用命令的一些实战经验-备忘

关于Linux常用命令的一些实战经验-备忘

作者: 一个忙来无聊的人 | 来源:发表于2019-08-21 20:59 被阅读0次

    作为一个Java学者,记性不好那就好好的记录一些

    Java jar包命令 请将下描述 xxx 替换为jar包名字

    1、启动jar包 : java -jar xxx.jar
    说明:一个界面 启动启动jar包,需要安装jdk环境,也可以直接在windows上面通过 win+r 命令行启动,随用随关,界面开启服务启动,界面关闭服务停止,也可以使用 ctrl + C 退出程序运行
    2、单界面启动多个jar包 (端口不能一样): java -jar xxx.jar &
    说明: 此命令可以让Java程序在后台运行, 单个窗口也能同时启动多个Java服务,但是当窗口关闭时,程序依旧停止
    3、Linux下后台运行jar包: nohup java -jar xxx.jar &
    说明:nohup 不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
    4、加目录运行jar包 nohup java -jar /appdata/system-jar/xxx.jar &
    其他也是类似

    查询Java程序及端口占用等

    • 0、查询所有已用端口 netstat -tulnp
    • 1、查询端口占用
      netstat -nlp |grep : 端口号 如 netstat -nlp |grep :8080
    • 2、查询程序启动状况
      ps -ef | grep hello-world.jar 或者
      ps aux | grep hello-world.jar 或者
      ps auxf | grep hello-world.jar
      查询指定jar包时请将 hello-world 替换为你的jar包名字
      PS:上面的两个命令也可不全拼,也就是可以 “ ps -ef | grep hello-wo ” " ps aux|grep hello-w ”
      这样分别是查询所有hello-wo开头,以hello-w开头程序运行情况
    • 3、查询所有Java进程情况
      ps -ef | grep java

    JVM 进程关闭命令 kill

    通过前面 ps -ef | grep xxx 或 ps auxf | grep 查询进程号
    如下命令所示

    [root]# ps -ef | grep java
    root     22766  8447  0 19:34 pts/1    00:00:12 java -jar demo-0.0.1-SNAPSHOT.jar
    root     23845 22419  0 19:55 pts/2    00:00:00 grep --color=auto java
    

    1、强制终止程序(不推荐): kill -9 [pid] 如上案例 kill -9 22766
    2、终止全部进程 kill -9 -1
    3、杀死指定进程 kill -6 [pid] 如上案例 : kill -9 22766
    4、杀死所有的进程: killall 程序名 或者 pkill 程序名 如: killall demo
    5、杀死指定进程: kill -15 [pid] 会有一定延迟
    上述kill 命令在分布式情况下可能导致未知异常出现,如在下单时,调用支付系统支付,未接收到返回参数系统终止运行,导致订单状态依旧为未支付,实际已经支付。
    6、比较优雅保险的杀死进程参考如下代码
    链接 :https://mp.weixin.qq.com/s/-pftYmw4oBBn_GO011_hOA

    第一步,应用进程启动的时候,初始化Signal实例,它的代码示例如下:
    Signal sig = new Signal(getOSSignalType());
    其中Signal构造函数的参数为String字符串,也就上文介绍的信号量名称。
    第二步,根据操作系统的名称来获取对应的信号名称,代码如下:
    private String getOSSignalType(){
           return System.getProperties().getProperty("os.name").
                     toLowerCase().startsWith("win") ? "INT" : "USR2";
    }
    判断是否是windows操作系统,如果是则选择SIGINT,接收Ctrl+C中断的指令;否则选择USR2信号,接收SIGUSR2(等价于kill -12 pid)指令。
    
    第三步,将实例化之后的SignalHandler注册到JVM的Signal,一旦JVM进程接收到kill -12 或者 Ctrl+C则回调handle接口,代码示例如下:
    
    Signal.handle(sig, shutdownHandler);
    其中shutdownHandler实现了SignalHandler接口的handle(Signal sgin)方法,代码示例如下:
    
    public class ShutdownHandler implements SignalHandler {
        /**
         * 处理信号
         *
         * @param signal 信号
         */
        public void handle(Signal signal) {
        }
    }
    第四步,在接收到信号回调的handle接口中,初始化JVM的ShutdownHook线程,并将其注册到Runtime中,示例代码如下:
    private void registerShutdownHook(){
            Thread t = new Thread(new ShutdownHook(), "ShutdownHook-Thread");
            Runtime.getRuntime().addShutdownHook(t);
    }
    第五步,接收到进程退出信号后,在回调的handle接口中执行虚拟机的退出操作,示例代码如下:
    Runtime.getRuntime().exit(0);
    JVM退出时,底层会自动检测用户是否注册了ShutdownHook任务,如果有,则会自动执行注册钩子的Run方法,应用只需要在ShutdownHook中执行扫尾工作即可,示例代码如下:
    class ShutdownHook implements Runnable{
            @Override
            public void run() {
                    System.out.println("ShutdownHook execute start...");
                    try {
                       TimeUnit.SECONDS.sleep(10);//模拟应用进程退出前的处理操作
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("ShutdownHook execute end...");
                    }
    }
    通过以上的几个步骤,我们可以轻松实现JVM的安全退出,另外,通常安全退出需要有超时控制机制,例如30S,如果到达超时时间仍然没有完成退出,则由停机脚本直接调用kill -9强制退出
    
    

    查询日志相关命令

    1、cat 查看一个文件
    -E: 显示行结束符$
    -n: 对显示出的每一行进行编号
    -A:显示所有控制符
    -b:非空行编号
    -s:压缩连续的空行成一行
    -T:显示制表符
    eg: cat tmp.log
    2、more 分页查看文件
    文件内容较多时,用more命令查看,空格键下翻,b键上翻,Q退出
    eg: more tmp.log
    3、head 显示前十行内容
    eg: head tmp.log
    获取前多少字节 head -c字节数据 tmp.log
    获取前12个字节 eg : head -c12 tmp.log

    4、 tail 命令 重点

    tail tmp.log 获取后10行数据
    tail -f tmp.log 动态的获取文件数据
    tail -222f tmp.log 动态获取文件数据,并展示222行 。行数可以指定

    5、vi 命令

    vi tmp.log 打开指定文件
    输入 i 进入文件编辑 ESC 退出文件编辑
    输入 :wq 保存并退出 输入 :!q 强制退出

    vi 编辑状态下
    " / 字段名称" 回车 查询指定字段位置 -- 注意为英文状态
    N 下一个 shift +n 上一个


    命令.png
    查找显示.png

    6、编辑配置文件类 vim 与vi类似 展示效果不一样

    grep 命令

    grep 命令参考 :https://www.linuxidc.com/Linux/2017-05/143549.htm
    grep:作用:文本搜索工具,根据用户指定的模式,对目标文件逐行进行匹配检查,打印匹配到的行
    模式:由正则表达式的元字符及文本字符所编写出的过滤条件
    -v:取反 显示不能被匹配到的行
    -i:忽略字符的大小写
    -n:显示行号
    -c:显示统计到的行数,等同于wc -l
    -o:仅显示匹配到的字符串
    -q:静默输出(不输出任何信息) 只关心命令的执行结果 不关心输出结果
    -A #:后#行
    -B #:前#行
    -C #:前后#行 查看日志 搜索关键字排查错误的时候
    -e:指定多个条件,条件是或的关系
    -w 匹配整个单词
    -E === egrep 支持扩展的正则表达式
    -F === fgrep 不支持正则表达式
    显示出/etc/passwd下root的前后两行(第一个root为第一行,所以没有前两行)
    [root@linuxidc ~]# grep -C 2 'root' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    --
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    基本正则表达式
    字符匹配:
    .:匹配任意单个字符
    []:匹配指定范围内的任意单个字符 ——> 如:[abc] a | b | c
    [^]:匹配指定范围外的任意单个字符 ——> 如:[^abc] 除abc之外的字符
    [:alnum:] 数字和字符
    [:alpha:] 英文大小写字符 a-z A-Z
    [:lower:] 小写字母
    [:upper:] 大写字母
    [:space:] 专门匹配空格
    匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数
    :匹配其前面的字符任意次 0-无穷
    [root@linuxidc ~]# grep "r
    " /etc//passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    .*:任意长度的任意字符出现任意次

    [root@linuxidc ~]# grep "gdm.*" /etc/passwd
    gdm:x:42:42::/var/lib/gdm:/sbin/nologin
    ?:匹配前面的字符出现0次或者1次 (其前面的字符是可有可无的)
    +:匹配前面的字符至少1次
    {m,}:匹配前的字符至少出现m次
    {m,n}:匹配前面的字符出现至少m次至多n次
    {0,n}:匹配前面的字符最多出现n
    {m,}:匹配前的字符至少出现m次
    位置锚定:用来定位字符出现的位置
    ^锚定行首(用于模式最左侧)
    [root@linuxidc ~]# grep "^root" /etc//passwd
    root:x:0:0:root:/root:/bin/bash
    锚定行尾(用于模式最右侧) [root@linuxidc ~]# grep "bash" /etc//passwd
    root:x:0:0:root:/root:/bin/bash
    zhouao:x:500:500:zhouao:/home/zhouao:/bin/bash
    openstack:x:3000:3000::/home/openstack:/bin/bash
    ^:匹配空行 ^[[:space:]]*:空行或包含空白字符的行
    单词:非特殊字符组成的连续字符(字符串)都称为单词
    \b \b:匹配词首和词尾
    [root@linuxidc ~]# grep '\broot' /etc//passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    < >:匹配词首和词尾
    例如:找出/etc/passwd下以/bin/bash结尾的行

    [root@linuxidc ~]# grep "bash>" /etc//passwd
    root:x:0:0:root:/root:/bin/bash
    zhouao:x:500:500:zhouao:/home/zhouao:/bin/bash
    openstack:x:3000:3000::/home/openstack:/bin/bash
    分组及引用
    ():将一个或多个字符捆在一起,当做一个整体进行处理

    分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中
    \1:模式从左侧起,第一个括号以及与之匹配的右括号之间的模式所匹配到的字符
    \2:模式从左侧起,第二个括号以及与之匹配的右括号之间的模式所匹配到的字符
    \3:模式从左侧起,第三个括号以及与之匹配的右括号之间的模式所匹配到的字符
    [root@linuxidc ~]# grep "r..t" /etc//passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    [root@linuxidc ~]# grep "^(r..)t.*\1" /etc//passwd
    root:x:0:0:root:/root:/bin/bash

    TOP 命令

    1、查询指定进程信息,需要进程pid top -p [pid]
    2、 查询系统性能top 命令

    top命令.png
    解释说明:
    a、系统运行时间及平均复制
    top - 09:29:56 up 7 days, 23:18,  1 user,  load average: 0.01, 0.04, 0.05
    

    当前时间 09:29:56
    系统运行时间7 days, 23:18(未重启过)
    用户数量 1 user
    最近5分钟,10分钟,15分钟平均负载

    b、任务--进程

    Tasks:  65 total,   1 running,  64 sleeping,   0 stopped,   0 zombie
    

    总共有65个进程,一个运行中,64个休眠, 停止状态0个,zombie(僵尸)状态0个

    c、CPU状态

    %Cpu(s):  1.3 us,  0.7 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    

    1.3 us -- 用户空间占用CPU的百分比为 1.%
    0.7 sy -- 内核空间占用CPU的百分比为 0.7 %
    0.0 ni — 改变过优先级的进程占用CPU的百分比 0%
    98.0 id --空闲CPU的百分比 98%
    0.0 wa -- IO等待占用CPU的百分比
    0.0 hi -- 硬中断(Hardware IRQ)占用CPU的百分比0%
    0.0 si -- 软中断(Software Interrupts)占用CPU的百分比 0%
    0.0 st -- 当前VM中的cpu cycle被虚拟化偷走的比例 0%

    d、内存

    KiB Mem :  1016164 total,   143328 free,   258936 used,   613900 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.   587032 avail Mem 
    

    第一行 物理内存使用
    1016164 total -- 物理内存总量 1G
    143328 free -- 空闲内存总量 143M
    258936 used -- 使用中的内存总量 258M
    613900 buff/cache -- 缓存的内存总量 613 M
    第二行 虚拟内存使用 -- swap 交换分区
    0 total -- 交换区总量
    0 free -- 使用的交换区总量
    0 used -- 空闲交换区总量
    587032 avail Mem -- 缓冲的交换区总量

    上述使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
    如果出于习惯去计算可用内存数,这里有个近似的计算公式:第一行的free + 第一行的buffers + 第二行的cached,按这个公式此台服务器的可用内存: 143328 + 613900 + 587032 = 1344260 -- 1.3G

    e 、各进程的状态监控

    PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                                                      
     1972 root      20   0  180196  49360  22636 S  6.2  4.9  69:03.47 consul                                                                                                                                                                       
        1 root      20   0   51468   3732   2512 S  0.0  0.4   1:18.38 systemd                                                                                                                                                                      
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                                                     
        3 root      20   0       0      0      0 S  0.0  0.0   0:01.02 ksoftirqd/0                                                                                                                                                                  
        5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                                                                                                                                 
        6 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/u2:0                                                                                                                                                                 
        7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                                                                                                                                  
        8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                                                                                                                                       
        9 root      20   0       0      0      0 S  0.0  0.0   1:57.84 rcu_sched                                                                                                                                                                    
       10 root      rt   0       0      0      0 S  0.0  0.0   0:03.13 watchdog/0                                                                                                                                                                   
       12 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                                                                                                                                                                    
       13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                                                                                                                                        
       14 root      20   0       0      0      0 S  0.0  0.0   0:00.15 khungtaskd                                                                                                                                                                   
       15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                                                                                                                                                                    
       16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                                                                                                                                                                  
       17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                                                                                                                       
       18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                                                                                                                                                                      
       19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md      
    

    PID:进程ID,进程的唯一标识符
    USER:进程所有者的实际用户名。
    PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。
    NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级
    VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR:SHR是进程使用的共享内存。共享内存大小,单位kb
    S:这个是进程的状态。它有以下不同的值:
    D - 不可中断的睡眠态。
    R – 运行态
    S – 睡眠态
    T – 被跟踪或已停止
    Z – 僵尸态
    %CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
    %MEM:进程使用的可用物理内存百分比。
    TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
    COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

    其他的一些杂项命令

    1、查询当前路径 pwd

    [root]# pwd 
    /appdata/jar
    

    2、查询列表 ls 查询详情 ll

    [root@xxx jar]# ls
    demo-0.0.1-SNAPSHOT.jar  nohup.out  null
    
    [root@xxx jar]# ll
    total 27920
    -rw-r--r-- 1 root root 28577372 Aug 21 19:30 demo-0.0.1-SNAPSHOT.jar
    -rw------- 1 root root     2866 Aug 21 19:34 nohup.out
    -rw-r--r-- 1 root root     7896 Aug 21 19:54 null
    

    3、上传 “rz” , 下载 "sz xxx"
    下载demo : [root@xxx jar]# sz demo-0.0.1-SNAPSHOT.jar
    4、查找目录:find /(查找范围) -name '查找关键字' -type d
    5、查找文件:find /(查找范围) -name 查找关键字 -print

    相关文章

      网友评论

        本文标题:关于Linux常用命令的一些实战经验-备忘

        本文链接:https://www.haomeiwen.com/subject/nhabsctx.html