美文网首页
Linux-Shell命令整理

Linux-Shell命令整理

作者: 榷奕 | 来源:发表于2019-07-12 22:01 被阅读0次

    (遇到不会的就往这里整理呗)
    现在想做一个shell的一键启动脚本,装环境不好做脚本,因为执行到一半可能失败。

    绝对目录和相对目录

    (1) 绝对目录

    绝对目录以/开头,上来直接就是/user 、 /root之类的这些,都是根目录下的

    (2) 相对路径

    一种写法是 yang/log,最开头没加/,直接就是文件名,这是以当前目录开头的相对路径。
    同上,./,点杠开头也是当前目录开头。
    ../是上一级目录开头的。

    创建目录

    mkdir -p xxx/xxx/xxx/xxx/xxx
    加了-p之后,同时创建这一大堆的目录。
    不加-p的话,只能创建最后一个。

    分号;等同于回车

    如果你回车了,就不用写分号,写了分号就不用回车

    if条件判断

    if[空格-n "$AUTH_pid"空格]
    shell编写if,报command not found,原因在于那两个空格,真的恶心
    然后-n,-n 的意思是not null

    变量定义

    A=1
    export B=1
    这个定义变量变态就变态在中间不能加空格,加一个空格判定你错啊。
    上面的是局部变量,下面是环境变量。

    shell脚本

    写一个脚本是真的没什么难度,顶上一行写一句

    #!/bin/sh
    

    没了,后面全是shell语句,真没了。

    case

    语法:

    case 值 in
    模式1)
        command1
        command2
        ...
        ;;
    模式2)
        command1
        command2
        ...
        ;;
    esac
    

    (1) 这里面注意的几点,首先是in后面跟的这个范围,是用
    case1)
    case2)
    这样的形式来写的,顶格写,只有一半的有括号
    (2) 每一个分支写完之后,要跟两个;;,这东西相当于其他语法里面的break了吧
    (3) 最后就是case对应了esac


    ps查进程

    ps -aux|grep hospital
    

    用这个指令查进程是最好的!

    netstat

    netstat -plt
    

    (原来是alt的,现在改成了plt,p是progress,进程,l是监听,t是tcp连接。这么写可以查到启动的所有的mysql、redis之类的,注意,这个查不到java)

    find和locate

    find  /  -name  “docker.service”
    locate  docker.service
    

    目前对于find只会一个-name也差不多了,locate直接就相当于find / -name,后面直接跟文件名的部分字段就可以了,都是自带模糊查询。

    grep

    grep  "docker"  docker.txt
    (重要) find  /  -name  "docker.service"  |  grep  log
    

    grep跟管道工作符结合在一起可能是最厉害的地方,本来应该在最后加使用文件,然后使用管道工作符变成了在最前面操作一遍,然后把操作结果直接给后面的grep当输入。
    (这里差一个|和xargs的区别)

    awk

    lsof -i:7050  |  awk  '$2>0  { print $2 }'
    

    awk主要是筛选出某一列出来,用种种条件筛除某些符合条件的行,然后再取其中的某几列。$2>0筛选行,print $2筛选列。
    awk这个不准备深入学习,真的需要切片分析做日志的时候就会去用python吧。

    sed

    sed其实是为了替换用的,不过到现在还没遇上啥替换的工作,先不看。
    用sed筛选出某几行来

    sed -n '5p' file
    
    sed -n '2,5 p' file
    
    sed -n '1~2 p' file
    
    sed -n '2~2 p' file
    

    估计会这些就够了吧。-n用来只显示符合条件的。p用于输出。

    管道和xargs -n

    管道后面除了接xargs和grep之外还不知道能接别的,就是把上一个命令的输出变成下一个命令的标准输入,但是接收标准输入的命令好像也不多。
    xargs是把标准输入变成跟用户手输差不多的形式,xargs还有好几个参数 - n 和 - p,这两个应该最有用。

    lsof -ti : 7050 | xargs -pn 1 kill -9
    

    这个-n是切割,由于输出了很多列,每一列都执行一个命令,-n 1 就是每次取一个传给后面的命令表达式。 -n这个应该是非用不可的。
    -p是每次执行之前都要输出一下给你看看,然后你敲y才会运行的,这个可用可不用,debug用吧。

    history

    history  |  grep  firewalld
    

    history可以查看当前账号之前的命令历史,甩锅用。

    who

    who只能查看不同账户的登录历史,也是甩锅用。

    telnet和ping

    有用的命令估计也就telnet IP地址 端口
    ping IP地址

    firewall和iptable

    在RHEL 7系统中,firewalld防火墙取代了iptables防火墙。其实,iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。

    换句话说,当前在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的。大家甚至可以不用完全掌握本章介绍的内容,只要在这多个防火墙管理工具中任选一款并将其学透,就足以满足日常的工作需求了。

    既然这两个都是管理防火墙的管理工具,那就学firewalld好了,这两个工具运不运行都是无所谓的,看工具后面的防火墙。

    运行、停止、禁用firewalld

    启动:# systemctl start firewalld
    查看状态:# systemctl status firewalld 或者 firewall-cmd --state
    停止:# systemctl disable firewalld
    禁用:# systemctl stop firewalld

    systemctl和service

    这两个的区别就懒得列清楚了,systemctl比service更强大,大概的作用都是去管理服务启动停用,开机启动服务这些。

    文本编辑

    Vim编辑器

    vim一开始进入的时候,命令模式不能操作,要输入i然后进入编辑模式,再按esc回到命令模式,再按:进入末行模式,
    :q退出 :w保存 :wq保存并退出

    搜索模式,进入之后按/,在后面输入要搜的东西,以及跳转的时候不能按空格,要按n(next),然后就跳到下一个。

    Cat

    cat docker.txt
    cat后面直接跟要看的文件,最好是小文件。

    工作目录切换

    cd
    pwd (当前绝对路径)
    ls (当前文件夹内容)

    Screeen

    (screen真是个神器,跟nohup发挥一样的作用,你想让程序不间断运行的时候,这个是真的好用啊!!!)

    1. screen -S yourname -> 新建一个叫yourname的session

    2. screen -ls -> 列出当前所有的session

    3. screen -r yourname -> 回到yourname这个session

    4. Ctrl-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

    5. screen -S session_name -X quit(这就是在新建那个后面加上了-X quit)

    (screen这个命令和nohup这两个是互相替代的,之所以要用nohup是因为你如果不设置成不停止,那你这个xshell一关,程序就退出了。你输完nohup &之后,前台空出来了,你还能接着做其他事情,screen也是一样的作用,只是他可以分很多个屏幕,每个屏幕里面做一件事互不干扰,不需要腾出前台这个需求。)

    nohup命令

    nohup 是 no hang up 的缩写,就是不挂断的意思。打上了nohup之后,输出到日志文件,前天正常运行;关闭窗口程序不关。
    & : 指在后台运行,输出到前台,前台用不了了;关闭窗口程序跟着关了。
    1. sh test.sh & 将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但标准输出和标准错误信息会丢失(缺少的日志的输出)

    将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。

    2. nohup sh test.sh 将sh test.sh任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使<u>关闭xshell退出当前session依然继续运行</u>。

    3. nohup sh test.sh & 将sh test.sh任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使<u>关闭xshell退出当前session依然继续运行</u>。

    nohup和&的区别

    & : 指在后台运行

    nohup : nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

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

    lsof和netstat

    lsof命令更高级一点,还能看见pid进程信息,方便清理。
    lsof = netstat + ps(ps是系统进程,其实用lsof主要就是为了看系统的进程号pid的,netstat看不了pid)
    以及lsof升级了,lsof -ti:7050,在i前面加一个t,直接就把端口筛出来了,根本就不用什么行列处理之类的。

    lsof -ti:7050
    kill -9 11111
    

    给Linux用户添加sudo权限

    sudo  adduser  yang  sudo
    

    把yang改成别的用户名,一行命令添加sudo权限。

    相关文章

      网友评论

          本文标题:Linux-Shell命令整理

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