• 运行维护-Linux操作系统


       
        Linux
    查看当前用户:whoami
    查看所有用户:cat /etc/passwd
    查看用户所属组:id
    查看当前系统是否为虚拟机:systemd-detect-virt
    查看linux发行版本:cat /etc/redhat-release 
    查看系统内核版本:cat /proc/version
    查看系统详细信息:uname -a
    本机进程列表:ps -ef
    对外已开启端口服务:netstat -anp
    查看iptables规则:iptables -nvL
    查看selinux开启状态:getenforce
    查看用户历史命令:
    cat ~/.bash_history
    cat ~/.nano_history
    cat ~/.atftp_history
    cat ~/.mysql_history
    cat ~/.php_history
    查询已安装软件:rpm -qa
    查看所有用户计划任务:ls /var/spool/cron/
    
    
    
    1、开启防火墙systemctl start firewalld
    
    2、开放指定端口firewall-cmd --zone=public --add-port=1935/tcp --permanent
    
    命令含义:
    
    --zone #作用域
    
    --add-port=1935/tcp #添加端口,格式为:端口/通讯协议
    
    --permanent #永久生效,没有此参数重启后失效
    
    3、重启防火墙firewall-cmd --reload
    
    4、查看端口号netstat -ntlp //查看当前所有tcp端口·
    
    netstat -ntulp |grep 1935 //查看所有1935端口使用情况
    
    
    cat  /etc/centos-release
    
    firewall-cmd --state
    systemctl status firewalld.service
    
    
    
    先掌握下systemctl+firewall命令
    
    描述 命令 
    查看firewall状态 systemctl status firewalld.service 
    启动firewall systemctl start firewalld 
    停止firewall systemctl stop firewalld 
    开机启动firewall systemctl enable firewalld 
    开机禁止firewall systemctl disable firewalld 
    
    额外学习下systemctl命令^_^ 
    查看服务是否开机启动 systemctl is-enabled firewalld.service 
    查看已启动的服务列表 systemctl list-unit-files|grep enabled 
    查看启动失败的服务列表 systemctl --failed
    
    其次掌握firewall-cmd命令
    
    描述 命令 
    查看firewall全部信息 firewall-cmd --list-all 
    查看已开放的端口 firewall-cmd --list-ports 
    更新防火墙规则 firewall-cmd --reload 
    开放端口 firewall-cmd --zone=public --add-port=3000/tcp --permanent 
    关闭端口 firewall-cmd --zone=public --remove-port=3000/tcp --permanent
    
    最终执行步骤:
    
    首先查看firewall是否已开启: systemctl status firewalld.service
    开放端口(开放后需要更新规则才能生效):  firewall-cmd --zone=public --add-port=3000/tcp --permanent
    更新防火墙规则: firewall-cmd --reload
    
    
    
    开启  防火墙 
    systemctl start firewalld.service
    
    
    4、开启8080端口,输入命令:
    
    firewall-cmd --zone=public --add-port=1/tcp --permanent
    让我们来解释一下上一个命令:
    –zone=public:表示作用域为公共的;
    –add-port=8080/tcp:添加tcp协议的端口8080;
    –permanent:永久生效,如果没有此参数,则只能维持当前服务生命周期内,重新启动后失效;
    
    5、输入命令重启防火墙;
    
    systemctl restart firewalld.service
    
    6、输入命令重新载入配置;
    
    firewall-cmd --reload 
    
    
    
    用root用户登录
    增加用户
    [root@localhost ~]# adduser root220
    为新用户设置密码
    [root@localhost~]# passwd root220
    Changing password for user prefma.
    New password:             # 输入密码
    Retype new password:      # 再次输入密码
    passwd: all authentication tokens updated successfully.
    二. 为新用户授权
    个人用户的权限只可以在本home下有完整权限,其他目录需要别人授权。经常需要root用户的权限,可以通过修改sudoers文件来赋予权限。
    新创建的用户并不能使用sudo命令,需要给他添加授权。
    
    查找sudoers文件路径并赋予权限
    [root@localhost~]# whereis sudoers                     # 查找sudoers文件路径
    sudoers: /etc/sudoers /etc/sudoers.d /usr/share/man/man5/sudoers.5.gz
    [root@localhost~]# ls -l /etc/sudoers                  # 查看权限
    -r--r----- 1 root root 3938 Sep  6  2017 /etc/sudoers  # 只有读权限
    [root@localhost~]# chmod -v u+w /etc/sudoers           # 赋予读写权限
    mode of ‘/etc/sudoers’ changed from 0440 (r--r-----) to 0640 (rw-r-----)
    修改sudoers文件
    [root@localhost~]# vim /etc/sudoers
    找到root ALL=(ALL) ALL的位置,在其下方添加新用户信息
    
    ## Allow root to run any commands anywhere
    root       ALL=(ALL)      ALL
    root220    ALL=(ALL)      ALL #这个是新用户
    收回权限
    [root@localhost~]# chmod -v u-w /etc/sudoers
    mode of ‘/etc/sudoers’ changed from 0640 (rw-r-----) to 0440 (r--r-----)
    三. 增加ssh端口
    修改配置文件/etc/ssh/sshd_config
    [root@localhost ~]# vim /etc/ssh/sshd_config
    修改如下配置,增加220端口
    
    #Port 22
    #AddressFamily any
    #ListenAddress 0.0.0.0
    ListenAddress 0.0.0.0:220
    ListenAddress 0.0.0.0:22
    #ListenAddress ::
    关闭SELinux,切记!关闭后不要让服务器暴露在外网中,可以搜索SELinux的作用
    # 临时关闭
    [root@localhost ~]# setenforce 0
    # 永久关闭
    [root@localhost ~]# vim /etc/selinux/config
    # 修改配置
    SELINUX=disabled
    然后重启sshd
    [root@localhost ~]# systemctl restart sshd
    检查是否成功
    [root@BIGDATAFS03 ~]# netstat -ntlp | grep sshd
    tcp    0    0 0.0.0.0:220    0.0.0.0:*    LISTEN    232428/sshd 
    可以用shell工具连了
     
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160

    打印

    • 设置 输出字体 背景颜色 为 绿色

      echo -e "\e[1;42m aming \e[0m"
    
    • 1

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    切换目录:

    cd
                cd 目录
                cd 目录/目录
                cd ..  :上一级目录
                cd /   :根目录
                cd ~   :回家
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    创建目录和删除目录

            mkdir 创建
                mkdir 目录名
                mkdir -p a/b/c
            rmdir 删除
                rmdir 目录名:只能删除一个空目录
                mkdir -m 1777 : 在创建目录的同时设定权限
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    展示目录下文件列表(以后使用ll即可)

            ls
            ls:展示的能看见的文件(和目录)的名称
            ls -a:展示所有的文件的名称
                文件前面有"."代表的是隐藏文件
            ls -l:显示文件的详细信息
                简写的方式: ll(★)
            ll -h:友好的显示
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    浏览文件

            cat:显示文件的所有内容
                cat 文件名
            more:分页显示
                空格:下一页
                回车:下一行
            less:分页显示
                可以通过PgUp PgDn 翻页查看
            tail(★★)
                查看一个文件的后面的内容
                tail -显示后几行 文件名
                tail -f 文件名
                    动态的查看
                    例如:
                        tail -f catalina.xxx.log
                    通过 ctrl+c 结束滚动查看
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    文件的操作

    创建一个文件
                touch 文件名        创建一个空白的文件
    
    • 1
    复制文件
                cp 文件 目录/文件名
                    例如:
                        cp 1.txt 2.txt
                        cp 1.txt 1/1.txt
    
    • 1
    • 2
    • 3
    • 4
    移动文件(重命名)
                mv 文件 目录/文件名
                mv 文件名 新文件名
    
    • 1
    • 2
    删除文件 rm
                rm 文件名:带询问删除
                rm -f 文件名:不带询问删除
                rm -r 目录:带询问的递归删除
                rm -rf 目录:不带询问的递归删除(谨慎使用)
    
    • 1
    • 2
    • 3
    • 4
    -r 就是向下递归,不管有多少级目录,一并删除
    -f 就是直接强行删除,不作任何提示的意思
    
    删除文件夹实例:
    rm -rf /var/log/httpd/access
    将会删除/var/log/httpd/access目录以及其下所有文件、文件夹
    
    删除文件使用实例:
    rm -f /var/log/httpd/access.log
    将会强制删除/var/log/httpd/access.log这个文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
          tar:打包或解压 一个文件或者目录(★★)
                常用的组合
                    -cvf :打包一个文件或者目录
                    -zcvf:打包并压缩一个文件或者目录 压缩的格式:gzip
                    -xvf:解压或者打开一个tar文件
                格式:
                    tar 参数 文件名 要打包|解压的文件目录
    
          例如:
                    将当前目录下的所有文件打包成test1.tar
                        tar -cvf test1.tar ./*
                    将当前目录下的所有文件打包并压缩成test2.tar.gz
                        tar -zcvf test2.tar.gz ./*
                    将test1.tar解压到当前目录
                        tar -xvf test1.tar
                    将test1.tar解压到b目录
                        tar -xvf test1.tar -C b
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    grep:查找符合条件的字符串(★)

        grep 字符串
    pwd:显示当前的工作目录
    wget:下载资料
        wget 资源路径
    
    • 1
    • 2
    • 3
    • 4

    vi和vim编辑器(理解中了解)

    编辑普通文件
    三种模式:命令行、插入、底行模式。
    切换到命令行模式:按Esc键;
    切换到插入模式:按 i 、o、a键;
        i 在当前位置生前插入
        I 在当前行首插入
        a 在当前位置后插入
        A 在当前行尾插入
        o 在当前行之后插入一行
        O 在当前行之前插入一行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    退出编辑Esc :q!
    保存Esc :wq
    切换到底行模式:按 :(冒号);

    管道 | ★
    重要的一个概念,其作用是将一个命令的输出用作另一个命令的输入
    例如:
    在ifconfig的结果里查找 192.168字符串
    ifconfig | grep 192.168
    以后常用
    查找和java相关的进程
    ps -ef | grep java
    查找和3306相关的信息
    ps -ef | grep 3306

    系统管理命令
    date 显示或设置系统时间
    date 显示当前系统时间
    date -s “2014-01-01 10:10:10“ 设置系统时间

    clear 清屏
    ctrl+l

    ps 正在运行的某个进程的状态
    
    • 1

    ps –ef 查看所有进程
    ★ps –ef | grep ssh 查找某一进程
    ps aux|grep WorkerMan

    linux上进程有5种状态:

    1. 运行(正在运行或在运行队列中等待)
    2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
    3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
    4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
    5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
    
    
    
    1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
    2)ps -A 显示所有程序。
    3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    4)ps -e 此参数的效果和指定"A"参数相同。
    5)ps e 列出程序时,显示每个程序所使用的环境变量。
    6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
    7)ps -H 显示树状结构,表示程序间的相互关系。
    8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
    9)ps s 采用程序信号的格式显示程序状况。
    10)ps S 列出程序时,包括已中断的子程序资料。
    11)ps -t <终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
    12)ps u   以用户为主的格式来显示程序状况。 用户以及其他详细信息
    13)ps x   显示所有程序,不以终端机来区分。 显示没有控制终端的进程
    14)ps -l 較長,較詳細的顯示該PID的信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
     # ps -lA |more
    F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
    4 S 0 1 0 0 76 0 - 1193 109952 ? 00:00:03 init
    1 S 0 2 1 0 -40 - - 0 migrat ? 00:00:03 migration/0
    1 S 0 3 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/0
    1 S 0 4 1 0 -40 - - 0 migrat ? 00:00:02 migration/1
    1 S 0 5 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/1
    1 S 0 6 1 0 -40 - - 0 migrat ? 00:00:02 migration/2
    1 S 0 7 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/2
     
    相關信息的意義:
    F 進程的標誌(flag),4表示用戶為超級用戶
    S 進程的狀態(stat),各STAT的意義見下文
    PID 進程的ID
    C CPU使用資源的百分比
    PRI priority(優先級)的縮寫,
    NI Nice值,
    ADDR 核心功能,指出該進程在內存的那一部分,如果是運行的進程,一般都是“-”
    SZ 用掉的內存的大小
    WCHAN 當前進程是否正在運行,若為“-”表示正在運行
    TTY 登陸者的終端位置
    TIME 用掉的CPU的時間
    CMD 所執行的指令
     
    # ps aux |more
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.0 4772 564 ? S Sep22 0:03 init [3]
    root 2 0.0 0.0 0 0 ? S Sep22 0:03 [migration/0]
    root 3 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/0]
    root 4 0.0 0.0 0 0 ? S Sep22 0:02 [migration/1]
    root 5 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/1]
    root 6 0.0 0.0 0 0 ? Ss+ Sep22 0:02 [migration/2]
    root 7 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/2]
    root 8 0.0 0.0 0 0 ? S Sep22 0:00 [migration/3]
    root 9 0.0 0.0 0 0 ? SN Sep22 0:00 [ksoftirqd/3]
    root 10 0.0 0.0 0 0 ? S< Sep22 0:00 [migration/4]
    上述各位解释:
    USER 进程的属主;
    PID 进程的ID;
    PPID 父进程;
    %CPU 进程占用的CPU百分比;
    %MEM 占用内存的百分比;
    NI 进程的NICE值,数值大,表示较少占用CPU时间;
    VSZ 进程使用的虚拟內存量(KB);
    RSS 该进程占用的固定內存量(KB)(驻留中页的数量);
    TTY 该进程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。
    若为pts/0等,则表示由网络连接主机进程
    WCHAN 当前进程是否正在進行,若为-表示正在進行;
    START 該進程被觸發启动时间;
    TIME 該进程實際使用CPU運行的时间;
    COMMAND 命令的名称和参数;
    STAT狀態位常見的狀態字符
    D 无法中断的休眠状态(通常 IO 的进程);
    R 正在运行可中在队列中可过行的;
    S 处于休眠状态;
    T 停止或被追踪;
    W 进入内存交换 (从内核2.6开始无效);
    X 死掉的进程 (基本很少見);
    Z 僵尸进程;
    < 优先级高的进程
    N 优先级较低的进程
    L 有些页被锁进内存;
    s 进程的领导者(在它之下有子进程);
    l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
    + 位于后台的进程组
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    kill 杀掉某一进程

    kill 2868 杀掉2868编号的进程
    ★kill -9 2868 强制杀死进程

    -ps、grep和kill联合使用杀掉进程
    例如要杀掉hello这个进程,使用下面这个命令就能直接实现
    ps -ef |grep hello |awk ‘{print $2}’|xargs kill -9
    这里是输出ps -ef |grep hello 结果的第二列的内容
    然后通过xargs传递给kill -9,其实第二列内容就是hello的进程号!

    	附录:
    	1,awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
    	数据可以来自标准输入、一个或多个文件,或其它命令的输出。
    	它支持用户自定义函数和动态正则表达式等先进功能,
    	是linux/unix下的一个强大编程工具。
    	它在命令行中使用,但更多是作为脚本来使用。
    	awk的处理文本和数据的方式是这样的,
    	它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
    	如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。
    	awk分别代表其作者姓氏的第一个字母。
    	因为它的作者是三个人,
    	分别是Alfred Aho、Brian Kernighan、Peter Weinberger。
    	gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
    	2. xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
    	它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理。
    	通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据。
    	xargs的默认命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。
    	xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    网络管理

    ifconfig:查看所有的网络设置
        ifconfig 网卡名称 down :禁用网卡
        ifconfig 网卡名称 up :启用网卡
    
    ping:和window中一样
        通过ctrl+c取消
    
    netstat 查看网络端口。
        netstat -an | grep 3306 查询3306端口占用情况
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    重启命令:

    1、reboot
    2、shutdown -r now 立刻重启(root用户使用)
    3、shutdown -r 10 过10分钟自动重启(root用户使用)
    4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用)
    如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启

    关机命令:

    1、halt 立刻关机
      2、poweroff 立刻关机
      3、shutdown -h now 立刻关机(root用户使用)
      4、shutdown -h 10 10分钟后自动关机

    网络配置:

     1、vi ifcfg-eth0
     2、DEVICE = eth0
          ONBOOT = yes
          NM_CONTROLLED = yes
          BOOTPROTO = static
          IPADDR = 192.168.153.124
          NETMASK = 255.255.255.128
          GATRWAY = 192.168.153.126
          DNS1 = 114.114.114.114
    3、service network restart
         systemctl restart network.service  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    systemctl

    启动并加入开机启动

    $ sudo systemctl start docker
    $ sudo systemctl enable docker

    shell bash 开发

    $0 取得脚本名称(包含路径)

    $n
    传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $#
    传递给脚本或函数的参数个数。

    $*
    传递给脚本或函数的所有参数。

    $@
    传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。

    $?
    上个命令的退出状态,或函数的返回值。

    $$
    当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID 即pid

    -lt 即 less than,小于,

    shell脚本执行过程中 把第一个字符串作为脚本名称(或程序名称)处理,
    第二、第三.都作为参数处理.

    shell会将这些参数默认的赋给变量 1 2 3 .
    所以当你echo $1 $2的时候看到的就是参数变量的值.

    解答一下KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲的问题:这里#是计算输入参数的个数

    @ 代 表 所 有 输 入 的 参 数 ; @ 代表所有输入的参数; @* 同上

    • 基本结构化命令if-then语句格式:
    if  command
    then
        command
    fi
    
    • 1
    • 2
    • 3
    • 4

    bash shell的if语句会运行if后面的那个命令。
    如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。
    如果该命令的退出状态码是其他值,then部分的命令就不会被执行。
    fi语句用来表示if-then语句到此结束。

    #! /bin/bash
    if pwd
    then
       echo "it worked one"
       echo "可以执行多条命令"
    fi 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    while [ -n “$1” ]
    -n str, 字符串不为null,长度大于零

    ( ) 中 放 的 是 命 令 , 相 当 于 ‘ ‘ , 例 如 t o d a y d a t e = ( )中放的是命令,相当于` `, 例如todaydate= ()todaydate=(date +%Y%m%d)意思是执行date命令,返回执行结果给变量todaydate,
    也可以写为todaydate=date +%Y%m%d

    ${ }中放的是变量,例如echo $ { PATH}取PATH变量的值并打印,也可以不加括号比如$PATH。

    在shell脚本中,exit -1 相当于jiava中的return 命令。会直接退出shell脚本,而不只是退出if判断和循环而已

    case语句适用于需要进行多重分支的应用情况。

        case分支语句的格式如下:
    
    • 1
      case $变量名 in
    
                    模式1)
    
                命令序列1
    
                ;;
    
                    模式2)
    
                命令序列2
    
             ;; 
    
                    *)
    
                默认执行的命令序列     ;; 
    
                esac 
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
        case语句结构特点如下:
    
        case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。
    
        双分号“;;”表示命令序列结束。
    
        匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
    
        最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    while read line

    循环中的重定向
    或许你应该在其他脚本中见过下面的这种写法:

    while read line
    do
           …
    done < file
    
    • 1
    • 2
    • 3
    • 4

    刚开始看到这种结构时,
    很难理解< file是如何与循环配合在一起工作的。

    因为循环内有很多条命令,而我们之前接触的重定向都是为一条命令工作的。
    这里有一个原则,这个原则掌握好了,这个问题就很简单了:

    对循环重定向的输入可适用于循环中的所有需要从标准输入读取数据的命令;
    对循环重定向的输出可适用于循环中的所有需要向标准输出写入数据的命令;
    当在循环内部显式地使用输入或输出重定向,内部重定向覆盖外部重定向。

    上面的while结构中,read命令是需要从标准输入中读取数据的。
    我们来详细了解一下read命令的用法吧,这个命令是shell脚本中使用频率最高的命令之一。

    read
    先来看一下read的命令语法:

    
    read arg1 arg2 arg3 arg4 …
    
    • 1
    • 2

    read是一个用来赋值的命令,它需要从标准输入获得值,
    然后把这些值按位置依次赋值给变量arg1、arg2、arg3、arg4…,输入的时候以空格作为字段分隔符。

    read的一个最大特性是可以在脚本中产生交互,因为它从标准输入读取数据。
    read之所以很常用,

    一是因为我们经常需要赋值,二是因为它可以交互,三是read能够一次给多个变量赋值。

    $ read host ip name
    linux 10.0.0.1 licong
    $ echo $host $ip $name
    linux 10.0.0.1 licong
    $
    可以看到,linux、10.0.0.1、licong分别被赋值给了变量host、ip和name。再看:
    $ read host ip
    linux 10.0.0.1 licong
    $ echo $host
    linux
    $ echo $ip
    10.0.0.1 licong
    $
    当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;
    当输入字段比变量数少时,多余的变量将是空值,你可以自己试试。

    现在我们再来看
    while read line
    do

    done < file
    read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理;
    然后循环处理file的第二行、第三行。。。一直到file的最后一行。

    还记得while根据其后的命令退出状态来判断是否执行循环体吗?是的,read命令也有退出状态,当它从文件file中读到内容时,退出状态为0,循环继续惊醒;

    当read从文件中读完最后一行后,下次便没有内容可读了,此时read的退出状态为非0,所以循环才会退出。
    另一种也很常见的用法:
    command | while read line
    do

    done
    如果你还记得管道的用法,这个结构应该不难理解吧。
    command命令的输出作为read循环的输入,这种结构长用于处理超过一行的输出,当然awk也很擅长做这种事。

    awk

    su sudo

    列出所有端口

     netstat -ntlp
    
    • 1
    lsof -i tcp:80
    lsof -i:端口号
    
    • 1
    • 2

    修改密码

    passwd

    uname

    uname -r 命令查看你当前的内核版本

    查看操作系统 版本 3.

    1.uname -a
    2.cat /proc/version
    3.cat /etc/redhat-release

    yum

    Yum(全称为 Yellow dog Updater, Modified)
    在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。
    基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,
    并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

    显示已经安装的软件包

    yum list installed

    查看所有安装的软件包 rpm-qa

    rpm -qa | grep docker

    查找可以安装的软件包 (以 tomcat 为例)

    yum list tomcat

    安装软件包 (以 tomcat 为例)

    yum install tomcat

    卸载软件包 (以 tomcat 为例)

    yum remove tomcat

    列出软件包的依赖 (以 tomcat 为例)

    yum deplist tomcat

    -y 自动应答yes

    在安装软件的时候,会有中断,让用户选择是否要继续

    info 显示软件包的描述信息和概要信息

    以 tomcat 为例

    yum info tomcat

    升级软件包

    升级所有的软件包

    yum update

    升级某一个软件包 ,以升级 tomcat 为例

    yum update tomcat

    检查可更新的程序

    yum check-update

  • 相关阅读:
    Clickhouse监控_使用Prometheus+Grafana来监控Clickhouse服务和性能指标
    接口测试文档
    uniapp 条件编译 APP 、 H5 、 小程序
    微服务系统设计——API 网关服务设计
    python程序编写
    【滴滴出行安全应急响应平台DSRC2倍积分卡】
    STM32 CAN快速配置(HAL库版本)
    JAVA-分页查询
    Gartner 发布 2022 年人工智能技术成熟度曲线:复合 AI、决策智能快速发展,因果 AI 是热点
    Python爬虫教程12:从b站获取神仙姐姐的视频弹幕内容
  • 原文地址:https://blog.csdn.net/qq_33608000/article/details/125581030