• linux 命令汇总


    一 grep 命令

    -i :ignore-case忽略大小写
    -c :打印匹配的行数
    -v :查找不包含匹配项的行
    -n :打印包含匹配项的行和行标
    -w :搜索整个词,而不是词中的部分字串
    -A :显示匹配行之后的N行 
    -B :显示匹配行之前的N行 
    -C :显示匹配行之前之后的N行

     二 regex 相关

    常见的转义

       忽略正则表达式中特殊字符的原有含义
    ^   匹配正则表达式的开始行
    $   匹配正则表达式的结束行
    <  从匹配正则表达式的行开始
    >  到匹配正则表达式的行结束
    [ ]  单个字符;如[A] 即A符合要求
    [ - ] 范围  [A-Z]即A,B,C一直到Z都符合要求
    .   所有的单个字符
    *   所有字符,长度可以为0 

    重复的操作的表示

    ?     最多匹配一次
    *     匹配零次或者任意多次
    +     匹配一次以上
    {n}   匹配n次
    {n,}  最少匹配n次
    {,m}  最多匹配m次
    {n,m} 匹配n到m次

     三 其他命令

    uname -a     #查看内核,处理器,操作系统等信息
    cat /proc/cpuinfo | sed -n '5p'    # 显示结果: model name    : Intel(R) Core(TM) i5-4310U CPU @ 2.00GHz
    cat /proc/meminfo | head -3   #显示结果:   MemTotal: 8080420 kB     MemFree: 2983204 kB   Buffers: 100696 kB
    df    #显示档案系统的状况,或是看所有档案系统的状况
    du   #显示目录或文件的大小
    top  #Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
    alt + F7  黏住输入框(各种响应框)
    ctrl + alt + F1 纯终端
    ctrl + alt + F7  gnome
    ps -A 查看所有运行进程
    tar -zcvf 压缩文件名.tar.gz  被压缩的文件
    tar -zxvf 压缩文件名.tar.gz  解压缩
    ctrl + u 清除当前行所有字符
    ctrl + a 移动到命令行首
    ctrl + e 移动到命令行尾 

    四 source   sh    ./ 的问题

    1 先说sh test.sh 和 ./test.sh的区别:
    (1) 如果脚本所在目录路径不在path 里面, 要执行当前目录下的可执行文件,使用全路径 ./executable-file
    (2) 如果要执行一个sh脚本,不管有没可执行的权限(chmod),都可以使用 sh file,如果file不在当前目录,也要传入全路径


    2 再说下source
    (1) source命令也称为点命令,也就是一个点符号(.),是bash的内部命令,功能是使shell读入指定的shell程序文件并依次执行文件中的所有语句
    (2) source命令通常用于重新执行刚修改的初始化文件,使之立刻生效,而不必注销并重新登录.
    (3) 用法 source filename 或 . filename


    3 source 和 sh or ./的区别
    (1) sh file 和 ./ file 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
    (2) source file 这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面

    实例:

    1.新建一个test.sh脚本,内容为:A=1
    2.然后使其可执行chmod +x test.sh
    3.运行sh test.sh后,echo $A,显示为空,因为A=1并未传回给当前shell
    4.运行./test.sh后,也是一样的效果
    5.运行source test.sh 或者 . test.sh,然后echo $A,则会显示1,说明A=1的变量在当前shell中

    五 vim  快捷键  

    操作类:

    x    删除光标所在位置字符
    i    光标前插入文本
    A    行后添加文本
    dw   删除一个单词(光标放在起始出)
    d2w  删除两个单词
    d$   从光标处删至当前行尾部
    dd   删除该行(接着光标移动到另一行输入p将之前的一行粘贴置入到此行上方)
    2dd  删除两行
    r+char 替换光标所在位置的字符

      

    移动类:

    光标在屏幕文本中的移动可以用箭头键,也可以使用 h j k l 字母键    k (上行)j(下行) h(左移) l(右移)
    w 跳到下一个单词的开始
    e 跳到单词的结束
    输入0(数字零)移动光标到行首
    gg 跳到文件的开始
    G 跳到文件的结束
    10gg 或10G 跳到第10行

    撤销类:

    输入u来撤消最后执行的命令
    输入U来撤消对整行的修改
    Ctril + R 重做被撤消的命令,也就是撤消掉撤消命令

    查找类:

    正常模式下输入 /(或者:) 字符输入要查找的字符串 回车
    n 查找所搜索的字符串
    N 逆向查找所搜索的字符串

      

    六 sed用法小结

    简介:

    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等

      

    sed使用参数

    [root@www ~]# sed [-nefr] [动作]
    选项与参数:
    -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
    -e :直接在命令列模式上进行 sed 的动作编辑;
    -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
    -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
    -i :直接修改读取的文件内容,而不是输出到终端。

    动作说明: [n1[,n2]]function
    n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

    function:
    a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!


    要删除第 3 到最后一行
     nl /etc/passwd | sed '3,$d' 

    在第二行后(亦即是加在第三行)加上『drink tea』字样!
    nl /etc/passwd | sed '2a drink tea'那如果是要在第二行前

     nl /etc/passwd | sed '2i drink tea'


    如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』
    nl /etc/passwd | sed '2a Drink tea or ......
    > drink beer ?'


    将第2-5行的内容取代成为『No 2-5 number』呢?
    nl /etc/passwd | sed '2,5c No 2-5 number'

    仅列出 /etc/passwd 文件内的第 5-7 行
    nl /etc/passwd | sed -n '5,7p'

    搜索 /etc/passwd有root关键字的行

    nl /etc/passwd | sed '/root/p'
    使用-n的时候将只打印包含模板的行

    nl /etc/passwd | sed -n '/root/p'
    删除/etc/passwd所有包含root的行,其他行输出nl /etc/passwd | sed '/root/d'

    搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:

     nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出

    nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}' 
    除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代


    先观察原始信息,利用 /sbin/ifconfig 查询 IP
    [root@www ~]# /sbin/ifconfig eth0
    eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
    inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    .....(以下省略).....


    处理得到本机ip
    (1)将 IP 前面的部分予以删除
    [root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
    192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

    (2)将 IP 后面的部分予以删除
    [root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
    192.168.1.100


    多点编辑
    nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
    sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
    [root@www ~]# sed -i 's/.$/!/g' regular_express.txt

    利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』
    [root@www ~]# sed -i '$a # This is a test' regular_express.txt由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!

    八 cat命令

    -b  对非空白行进行编号,行号从1开始
    -n  和nl命令差不多,对所有行(包括空白行)进行编号输出显示
    -E  在每行的结尾处附加$符号

    cat对于内容极大的文件来说,可以用管道 | 传送到more工具,然后一页一页地查看
    如[root@localhost ~]# cat /etc/fstab /etc/profile | more

    cat 有创建文件的功能,创建文件后,要以EOF结束;(> 改为 >> 则为追加)
    如[root@localhost ~]# cat > test << EOF  创建test文件,以EOF作为文件输入的结尾
    >test1   这是输入内容
    >test2   这是输入内容
    >EOF 退出编辑状态

    七 more

    more 是我们最常用的工具之一,最常用的就是显示输出的内容,然后根据窗口的大小进行分页显示,然后还能提示文件的百分比

    more [参数选项] [文件]

    +num   从第num行开始显示;
    -num   定义屏幕大小,为num行; 
    +/pattern   从pattern 前两行开始显示; 



    more 的动作指令:

    我们查看一个内容较大的文件时,要用到more的动作指令,比如ctrl+f(或空格键) 是向下显示一屏,ctrl+b是返回上一屏; Enter键可以向下滚动显示n行,要通过定,默认为1行;

    Enter           向下n行,需要定义,默认为1行;
    Ctrl+f          向下滚动一屏;
    空格键          向下滚动一屏;
    Ctrl+b          返回上一屏;
    =               输出当前行的行号;
    :f              输出文件名和当前行的行号;
    v               调用vi编辑器;
    !命令          调用Shell,并执行命令;
    q               退出

    八 less

    enter <-> y    向下/上滚动一行
    space <-> b    向下/上滚动一屏
    d  <-> u       向下/上滚动半屏
    h              less的帮助
    w              可以指定显示哪行开始显示,是从指定数字的下一行显示;比如指定的是6,那就从第7行显示
    g              跳到第一行
    G              跳到最后一行
    p n%           跳到n%,比如 10%,也就是说比整个文件内容的10%处开始显示
    /pattern       搜索pattern ,比如 /MAIL表示在文件中搜索MAIL单词
    v              调用vi编辑器
    q              退出less
    !command       调用SHELL,可以运行命令;比如!ls 显示当前列当前目录下的所有文件

      

    九 sort命令 

    -b   忽略每行前面开始出的空格字符。
    -c   检查文件是否已经按照顺序排序。
    -f   排序时,忽略大小写字母。
    -n   依照数值的大小排序。
    -o   <输出文件>   将排序后的结果存入指定的文件。
    -r   以相反的顺序来排序。
    -t<分隔字符>   指定排序时所用的栏位分隔字符。
    -k  选择以哪个区间进行排序。
    -u   去除重复行





     sort的-t和-k用法示例

    如果有一个文件的内容是这样:
    [rocrocket@rocrocket programming]$ cat facebook.txt
    banana:30:5.5
    apple:10:2.5
    pear:90:2.3
    orange:20:3.4

    这 个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。那么我想以水果数量来排序,也就是以第二列来排 序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。

    [rocrocket@rocrocket programming]$ sort -n -k 2 -t ':' facebook.txt
    apple:10:2.5
    orange:20:3.4
    banana:30:5.5
    pear:90:2.3

    十 awk命令

    简介

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

    入门实例

    显示/etc/passwd的账户

    #cat /etc/passwd |awk  -F ':'  '{print $1}'  
    root
    daemon
    bin
    sys

    如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

    #cat /etc/passwd |awk  -F ':'  '{print $1"	"$7}'
    root    /bin/bash
    daemon  /bin/sh
    bin     /bin/sh
    sys     /bin/sh

    如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

    cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
    name,shell
    root,/bin/bash
    daemon,/bin/sh
    bin,/bin/sh
    sys,/bin/sh
    ....
    blue,/bin/nosh

    awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

    搜索/etc/passwd有root关键字的所有行

    #awk -F: '/root/' /etc/passwd
    root:x:0:0:root:/root:/bin/bash

    这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

    搜索支持正则,例如找root开头的: awk -F: '/^root/' /etc/passwd

    搜索/etc/passwd有root关键字的所有行,并显示对应的shell

    # awk -F: '/root/{print $7}' /etc/passwd             
    /bin/bash

    awk内置变量

    awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

    ARGC               命令行参数个数
    ARGV               命令行参数排列
    ENVIRON            支持队列中系统环境变量的使用
    FILENAME           awk浏览的文件名
    FNR                浏览文件的记录数
    FS                 设置输入域分隔符,等价于命令行 -F选项
    NF                 浏览记录的域的个数
    NR                 已读的记录数
    OFS                输出域分隔符
    ORS                输出记录分隔符
    RS                 控制记录分隔符

     此外,$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。

    统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

    #awk  -F ':'  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
    filename:/etc/passwd,linenumber:1,columns:7,linecontent:root:x:0:0:root:/root:/bin/bash
    filename:/etc/passwd,linenumber:2,columns:7,linecontent:daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    filename:/etc/passwd,linenumber:3,columns:7,linecontent:bin:x:2:2:bin:/bin:/bin/sh
    filename:/etc/passwd,linenumber:4,columns:7,linecontent:sys:x:3:3:sys:/dev:/bin/sh

    使用printf替代print,可以让代码更加简洁,易读

     awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s
    ",FILENAME,NR,NF,$0)}' /etc/passwd

    看这样一个例子,文件的路径为/usr/share/man/man5/locale.alias.5.gz 问如何使用命令得到所在的文件夹,也即/usr/share/man/man5/

    十一 其他汇总

    1 跳板机全量grep

    atones -L 'grep "keyword" --color=always /home/xx/logs/access*' l-machine[1-2].cn.com | head -10

    2 socat远程调试

    socat tcp4-listen:50015,fork,range=192.168.130.126/32 tcp4:127.0.0.1:7789

    50015是机器端口,随意指定即可,别和别人重复了。 range后面的ip是调试机的ip(本机) 127.0.0.1是对应的startenv.sh里面address指定的内容

    3 java运维工具

    jvisualvm
    jsonsole
    jmap
    jstack -F -l 26042 > xxx.log
    jstat -gcutil 26042 1000 100
    jmap -heap 26042
  • 相关阅读:
    问题:Controller中Response的用法
    C#中字符串前缀@和$
    C#中Viewbag和ViewData的区别
    C#中Session和Cache的区别
    try catch捕获异常
    C#开发中,添加错误日志功能,并自定义错误页面
    数据库索引中,聚集索引和非聚集索引有何区别?
    String和StringBuilder的区别?
    C#函数,引用类型作为值参数,改变参数值后,形参也会改变.重新给实参赋值后,形参则不会改变.
    jQuery操作radio选中和取值
  • 原文地址:https://www.cnblogs.com/balfish/p/4772573.html
Copyright © 2020-2023  润新知