操作系统:linux

不定期更新,记录自己遇到的运维经验总结。


  • top命令 load average:三个值 分别代表 最近1分钟最近5分钟最近15分钟的平均负载

    • 通常,如果系统的负载值超过了2,就说明系统比较繁忙了。
      Linux系统管理的要点在于定义究竟到什么程度才算是高负载。这个值取决于系统的硬件配置以及系统上通常运行的程序。对某个系统来说是高负载的值可能对另一系统来说就是正常值。
    • 由于进程短期的突发性活动,出现最近1分钟的高负载值也很常见,但如果近15分钟内的平均负载都很高,就说明系统可能有问题。
  • du -sh * | sort -nr 该命令可以用于对文件大小的排序显示

    • sort -n 在排序数值时非常有用
    • sort -r 逆序,从大到小
    • du -h 清楚显示
    • du -s 显示每个输出参数的总计,即仅显示总计,只列出最后加总的值
  • tar 的压缩与解压 https://www.cnblogs.com/hester/p/10449978.html

    • tar -zxvf filename.tgz
      下载了开源软件之后,你会经常看到文件名以.tgz结尾(.tar.gz)。这些是gzip压缩过的tar文件可以用命令来解压。
    • tar -zcvf filename.tgz
      解压
  • cat /etc/passwd 第七列查看用户使用的shell

    $ cat /etc/passwd
    [...]
    moon:x:1000:1000::/home/moon:/bin/bash
  • 默认的系统shell和默认的交互shell软连接可能不同,即/etc/passwd 中的shell和/bin下sh软连接指向的shell不同,这个可能会带来某些问题。因此shell脚本首行指定shell解释器不可少

    #!/bin/bash
    [...]
  • ps -ef很常用,-H可以更清楚的显示进程间层级关系

    [moon@myserver 002shell]$ ps -efH | grep bash
    moon 3620 3619 0 13:41 pts/0 00:00:00 -bash
    moon 5419 3620 0 14:23 pts/0 00:00:00 bash
    moon 5565 5419 0 14:29 pts/0 00:00:00 grep --color=auto bash
    root 10282 10265 0 2020 pts/0 00:00:00 /bin/bash
    root 41399 41382 0 2020 ? 00:00:00 bash run.sh
    moon 105516 105515 0 Apr17 pts/2 00:00:00 /bin/bash
  • echo $BASH_SUBSHELL
    要想知道是否生成了子shell,得借助一个使用了环境变量的命令。这个命令就是echo $BASH_SUBSHELL。如果该命令返回0,就表明没有子shell。如果返回1或者其他更大的数字,就表明存在子shell。

  • jobs
    除了ps命令,你也可以使用jobs命令来显示后台作业信息。jobs命令可以显示出当前运行在后台模式中的所有用户的进程(作业)。

  • 使用后台模式,进程列表和协程,利用子shell组合任务并且执行,可以让shell的I/O不受制于终端

  • /etc/group查看组列表时,有些组并没有列出用户,这并不是说这些组没有成员。当一个用户在/etc/passwd文件中指定某个组作为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中。

  • 记住,bash shell只能处理整数。如果你只是要通过echo语句来显示这个结果,那没问题。但是,在基于数字的函数中就不行了,例如我们的数值测试条件。最后一行就说明我们不能在test命令中使用浮点值

    $ cat floating_point_test.sh
    #!/bin/bash
    # Using floating point numbers in test evaluations
      #
    value1=5.555
      #
    echo "The test value is $value1"
      #
    if [ $value1 -gt 5 ]
      then
      echo "The test value $value1 is greater than 5"
    fi
      #
    $ ./floating_point_test.sh
    The test value is 5.555
    ./floating_point_test.sh: line 8:
    [: 5.555: integer expression expected
    $
  • shell 脚本中 if 条件比较字符串时,> 和 < 需要转义符号,不然会被认成重定向

    if [ $val1 \> $val2 ]
    then
    [...]
    fi
  • shell脚本在test比较测试中,大写字母被认为是小于小写字母的。但sort命令恰好相反。当你将同样的字符串放进文件中并用sort命令排序时,小写字母会先出现。这是由各个命令使用的排序技术不同造成的。

  • 空的和未初始化的变量会对shell脚本测试造成灾难性的影响。如果不是很确定一个变量的内容,最好在将其用于数值或字符串比较之前先通过-n或-z来测试一下变量是否含有值。
    -n和-z可以检查一个变量是否含有数据。

    if [ -n $val1 ]
    if [ -z $val2 ]
    if [ -z $val3 ]
  • 一般来说,可以使用,模板文件配合shell中的sed命令对源文件进行替换,进而完成许多定制的功能。比如:对一个python文件进行修改。可以先定义一个python模板,然后每次复制python文件的模板,使用sed命令替换被复制的模板。比如:
    这是python文件模板

    #demo-template.py
    kwargs= { 'parm_a' : %parm_a%, 'parm_b': %parm_b%, 'parm_c': %parm_c%}

    这是shell指令:

    cp demo-template.py demo.py
    sed -i "/s/%parm_a%/1/g" demo.py
    sed -i "/s/%parm_b%/2/g" demo.py
    sed -i "/s/%parm_c%/3/g" demo.py

    这是替换之后的文件

    #demo.py
    kwargs= { 'parm_a' : 1, 'parm_b':2, 'parm_c':3}

    这样我们可以从外界定义一个配置文件或者自定义一个主控程序根据需要动态的修改文本内容,达到不同的效果。

  • sed命令的分隔符 反斜杠 “/” 经常出问题(比如文件内容中含有路径这样带有反斜杠的文本)。建议换成 “#”