zoukankan      html  css  js  c++  java
  • 【汇总】centos常用命令、使用技巧



    一、序章

    1.1 一些概念

    • 字段分隔符

             IFS是shell脚本中的一个重要概念,在处理文本数据时,它是相当有用的。IFS可以是White Space(空白键)、Tab( 表格键)、Enter( 回车键)中的一个或几个。
             IFS(Internal Field Seperator)在Linux的shell中预设的分隔符,用来把command line分解成word(字段)。
             IFS的设置方法很简单,和普通变量设置方法类似:
             IFS=":"
             建议设置IFS前保存原IFS的值,在使用后及时恢复。



    1.2 shell常用快捷键

    按键 解释
    上下方向键 输入栏填充历史命令
    tab键 自动补全命令、文件名
    ctrl+w 删除前一个单词【单词首字母(符)到光标处】,在shell中以空格分隔单词,在vi中以符号分隔
    ctrl+u 删除一行(行首到光标处)

    获取命令帮助,首选 man cmd 次选 cmd -h cmd --help



    1.3 shell特殊符号

    符号 作用
    转义字符,比如在行尾使用可以转义回车为换行,可以起下一行继续使用命令
    命令中使用可以转义空格,不必使用单双引号声明字符串参数
    ; 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行
    分隔路径?待考证
    && 上一条命令成功后才执行下一条命令
    & 后台运行,不像Windows是同时执行命令
    | 管道
    || 上一条命令失败后才执行下一条命令
    > [cmd] > [file] 重定向,覆盖,空格严格要求
    >> [cmd] >> [file] 重定向,追加,空格严格要求
    ~ 用户home目录
    cd - 返回上一个操作目录,-等同于 $OLDPWD 但是 - 只能在cd中使用,在其它命令中使用会被视为命令选项
    ! 上一条命令,!^ !$ !* 上一条命令第一个、最后一个、所有参数
    !:n上一条命令的第n个参数
    !s 打印并执行最近一条以s开头的命令
    使用较少,感觉!s用法比较实用
    若要使用!作为逻辑非,有时需要转义
    $ 脚本中使用较多
    $$ Shell本身的PID(ProcessID)
    $! Shell最后运行的后台Process的PID
    $? 最后运行的命令的结束代码(返回值)
    $- 使用Set命令设定的Flag一览
    $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
    $@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $# 添加到Shell的参数个数
    $0 Shell本身的文件名
    $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…
    单引号'和双引号" 相同:都是为了解决命令中间有空格的问题
    区别:单引号将剥夺其中的所有字符的特殊含义,而双引号中的$(参数替换)和`(命令替换)以及!(上一条命令)等具有特殊含义



    1.4 获取上一条命令的内容

    有时我们写命令时会想获取上一条命令的输出,简单的我们可以使用管道,如果下一条命令无法从管道接收数据,我们可以使用xargs配合

    但是有时我们想将上一条命令的输出处理后再使用,那么管道不太合适

    有两种办法,效果都一样

    • `command` 反引号,执行命令,返回结果

    • $(command) 执行命令,返回结果,和上面不一样的是,此方法支持嵌套

    • $? 特殊变量,但是这个只是返回值,大多为0或1,无法获得命令行输出



    二、常用命令

    2.1 防火墙

    centos7防火墙是firewall

    基本设置:https://www.cnblogs.com/heqiuyong/p/10460150.html

    # 查看防火墙规则
    firewall-cmd --list-all 
    # 查看防火墙所有开放的端口
    firewall-cmd --zone=public --list-ports
    # 查看防火墙状态
    firewall-cmd --state
    systemctl status firewalld.service
    
    # 开放端口
    firewall-cmd --zone=public --add-port=5672/tcp --permanent   # 开放5672端口
    firewall-cmd --zone=public --remove-port=5672/tcp --permanent  #关闭5672端口
    firewall-cmd --reload   # 配置立即生效
    

    开放端口(段)给指定IP(段)。如开放给局域网192.168.1.1-192.168.1.255。https://www.cnblogs.com/xiaohanlin/p/11641273.html

    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080-8081" accept'
    # 192.168.1.0表示网段,/24表示子网掩码二进制中连续1的个数,所以/24即255.255.255.0
    # 局域网(也可称为“私网”或“Lan侧”)通常情况都使用私有IP地址:
    # A类:10.0.0.0-10.255.255.255
    # B类:172.16.0.0-172.31.255.255
    # C类:192.168.0.0-192.168.255.255
    # 所以表示方式为
    # 10.0.0.0/8
    # 172.16.0.0/16
    # 192.168.0.0/16
    
    # 删除上述规则:
    firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="8080" accept'
    # 查看rich-rule规则:
    firewall-cmd --permanent --list-rich-rule
    

    开放服务,服务是端口和/或协议入口的组合。区域是定义的网络连接的可信等级,此外永久、端口转发参见:https://www.jianshu.com/p/90ed497f49cf

    # 获取所有支持的服务
    firewall-cmd --get-services
    # 查看开放的服务
    firewall-cmd --list-services
    # 向默认区域添加开放的服务
    firewall-cmd --add-service=
    # 删除开放的服务
    firewall-cmd --remove-service=
    

    端口流量转发。端口可以映射到另一台主机的同一端口,也可以是同一主机或另一主机的不同端口。端口号可以是一个单独的端口 或者是端口范围 - 。协议可以为 tcp 或udp 。

    firewall-cmd --permanent [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
    # 例
    firewall-cmd --add-forward-port='port=80:proto=tcp:toport=10050'
    firewall-cmd --add-forward-port='proto=80:proto=tcp:toaddr=192.168.0.1:toport=8080'
    # 移除规则add改remove
    



    2.2 进程和端口

    # 查看监听的端口
    netstat -lnpt
    # 检查端口被哪个进程占用
    netstat -lnpt |grep 5672
    # 查看进程的详细信息
    ps 6832
    # 中止进程
    kill -9 6832
    
    # 查找进程,前三列是UID、PID、PPID,最后一列是CMD
    ps -ef|grep
    # 杀死相关进程
    ps -ef|grep ${0}|grep -v grep|cut -c 9-15|xargs kill -9
    # ps -e 显示所有进程 ; -f : 全格式 ; grep -v grep 结果中去掉含grep的一行,即搜索命令这个进程 ; cut -c 剪切指定字符,这里是提取进程号
    # xargs 结合管道使用,将前面的值作为 kill -9 的参数
    



    2.3 后台运行

    当我们在终端运行程序时,程序不停,就会一直占用终端。如果关闭终端则程序也会停止

    将程序放到后台运行,可以释放终端,也不用担心程序会终止

    # 格式 nohup [cmd] [重定向] &
    # 实例
    nohup command > myLog.log 2>&1 &      # 返回进程PID
    # > myout.file将日志输出到文件
    # 2>&1,将标准错误输出重定向到标准输出,少了这条命令,错误信息不会被输出到日志中,而是打印到屏幕上
    # 1前有&表示重定向的目标不是一个文件,而是一个文件描述符 https://zhuanlan.zhihu.com/p/47765176
    # 关闭后台进程只能找出PID然后kill -9
    

    实际由nohup和&构成

    &:后台运行,但当用户退出(挂起)的时候,命令自动也跟着退出

    nohup: 即no hang up,不挂断的运行

    nohup命令可以将日志输入到文件中,如果不指定输出文件,默认输出到当前目录下的nohup.out文件,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

    其它后台运行的方法:

    我们知道 ctrl+c 能结束当前进程。将当前进程 暂停 并放到后台是命令 CTRL+Z ,可暂停多个进程,终端退出进程退出

    jobs # 查看后台进程
    # 也可以查看nohub运行的后台进程,注意:jobs只在当前shell有效,一旦关闭终端,再重开jobs无法查找出之前nohub运行的后台进程

    fg #将后台任务切换到前台执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出

    bg #将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出

    screen也可以实现后台运行,需要下载



    2.4 文件查看

    命令 解释 常用选项
    cat 输出文件内容 -n 显示行号
    head 输出文件前几行 -[numb] 输出多少行
    tail 输出文件后几行 -[numb] 输出多少行
    wc 统计文件字数 -l 行数;-w 字数;-c 字节数
    grep 查找文件内容,输出匹配的行
    more 浏览内容
    less 浏览内容

    我们可以用管道组合几个命令来实现更多功能,比如查看文件第10和11行 cat a.txt|head -11|tail -2 ,这存在一个小问题,就是大家搜文件习惯用cat开头,其实没必要,tail、grep都能接文件路径,没必要以cat开头

    查看文件中间几行的最优解:sed -n '[numb],[numb]p' [文件名] ,记得第二数字后接字母p

    详说grep这个强大的命令

    grep选项 解释
    -n 显示行号
    -i 忽略大小写地匹配
    -v [string] 反选,也可以理解为去掉某行
    -G 启用基本正则表达
    -E 启用扩展正则表达,grep -E也可以缩写为egrep
    -A [numb] 额外显示每个匹配行之前[numb]行
    -B [numb] 额外显示每个匹配行之后[numb]行
    -C [numb] 额外显示每个匹配行之前之后[numb]行

    more和less

    单论浏览内容的话,cat是最拉跨的,全部输出

    more能翻页浏览,空格往下,b键往上,= 显示当前行号

    less功能最为强大,能用pageup、down键上下翻页,支持vi的 / ?搜索,支持 G 跳行,= 显示行号



    2.5 文件编辑 vi/vim sed

    1) vi/vim

    我们知道vi编辑文件时有三种工作模式

    汇总一些好用的命令,命令模式和底行命令模式

    按键 解释
    u 撤销
    . 恢复
    yy 复制行
    dd 删除行
    p 粘贴
    ctrl+r 重复上一个动作
    ~ 更改大小写
    :set nu 显示所有行号
    :set nonu 取消显示所有行号
    nG 移动到行号是n的一行
    G 移动到当前文件的最后一行
    /[string] 向后搜索
    ?[string] 向前搜索
    n 重复之前的搜索
    N 反向重复之前的搜索
    :set {list|nolist} 显示和取消显示换行等特殊字符
    :set fileformat={unix|dos} 将文件格式转成unix或dos格式

    最后说说vi的特殊字符怎么输入

    • Q:为什么需要输入特殊字符?

      A:可能是脚本中需要用到

    • Q:vi中有哪些特殊字符?

      A:输入 :help digraph-table 可以查看,如果是centos7,乱码,可以发现打开的是.gz格式的帮助文档,我们直接find搜索出这个gz文件,再gunzip解压即可查看

    char  digraph	hex	dec	official name ~
    ^@	NU	0x00	  0	NULL (NUL)
    ^A	SH	0x01	  1	START OF HEADING (SOH)
    ^B	SX	0x02	  2	START OF TEXT (STX)
    ^C	EX	0x03	  3	END OF TEXT (ETX)
    

                 第一列为特殊字符,第二列为双拼,第三列为十六进制表示, 第四列为十进制表示,第五列为该字符的官方名称。

                 一些不能显示的功能按键会以^加字符显示在vi中,并有高亮颜色,直接输是没法生效的

    • Q:如何输入特殊字符?

      A:一是在 i 输入模式下,ctrl+v就会出现高亮的^,按住不放再输字符即可。

            二是在 i 输入模式下,ctrl+v就会出现高亮的^,松开后,再输入十进制数即可,注意十进制数如果不满3位,需要在前面补零

            三是 ctrl+k 再加双拼,但是博主 centos7 没成功过

            上述字符和十进制数都需要查表

    2) sed命令

    sed命令可以操作文本,默认情况下,sed会读取文本并根据动作进行操作,结果会输出在控制台,不会修改文件,使用 -i 选项可以修改文件

    -n 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令(p动作)来完成输出

    sed的动作如下

    动作 说明 使用
    a 新增,在指定行的下一行,一般不用引号 sed -i 4a ew line file.txt
    4代表第四行,a代表新增
    第一个反斜杠区分动作和动作参数,其实也可以用4a new line
    "4a new line" 甚至 "4anew line",这都是作为一个参数给sed,最好分隔动作和字符串便于阅读
    i 插入,在指定行的上一行 同上
    s 替换 s/pattern/replacement/flags 除了/也可以用 # % 等符号作分隔
    每一行都会进行一次匹配和替换,默认启用正则,因为有正则符号,所以一般用引号
    常用flags:g,表示所有匹配的都进行替换,默认只替换每行的第一个匹配
    n,数字,表示从第几个匹配才开始替换,也可和g一起使用,如2g
    用数字模式指定区间 指定动作在哪行执行 2代表第二行;2,4代表第二到第四行,包括第四行;2,$表示第二行到最后一行;3~2表示从第三行开始,每后两行,即每隔一行,即3和后面的奇数行;1~1表示从第一行开始,每后一行,即整个文件
    用文本模式指定区间 指定动作在哪行执行 sed '/123/ihello' 1.txt
    在包含123的行之前插入hello,如果有多行包含123,则包含123的每一行之前都会插入hello
    ! 反选 行 可能需要转义!
    p 会打印与替换命令中指定的模式匹配的行,此标记通常与 -n 选项一起使用 sed -n 5,$p file.txt 打印第五行到最后一行



    2.6 其它杂项

    • echo字符转义

      echo -e " " ,-e开启字符转义

    • cp强制覆盖

      cp -rf [src] [dest] 反斜杠是直接使用cp命令,而非~/.bashrc中的-i别名



    三、使用技巧

    3.1 自定义快捷指令

    即重命名命令,编辑用户家目录下的 .bashrc 文件,添加,例如

    alias tr='tree --dirsfirst -Cpu -L 2'

    运行 source .bashrc 生效

    使用时还可以继续追加选项,如 tr -t,就等于 tree --dirsfirst -Cpu -L 2 -t


  • 相关阅读:
    Graphics竖排打印字体
    VC GetDlgItem
    C# FontStyle
    VC弹出"选择文件"和"选择文件夹"对话框(转)
    VC获取应用程序路径
    SqlServer延时函数
    volatile修饰变量
    外部命令和内部命令
    curl命令简单使用
    close_socket断开连接的方式
  • 原文地址:https://www.cnblogs.com/yunmuq/p/14772943.html
Copyright © 2011-2022 走看看