linux和shell

whatis 加其他命令=查看其他命令用法

pwd 返回当前工作目录
ls列出当前目录内容,有哪些文件
ls -l 显示详细信息 ll
ls -l -a 显示隐藏文件(以.开头)
ls -l -a -h
cd + 目录名   进文件
cd.. 返回上级目录
pwd 显示当前目录
cp复制  文件 cp a.txt   b.txt
             文件夹(目录)cp -r
less 当终端有大量内容输出时可帮助仔细查看
head  -n  2  a.txt    查看开头两行
tail  -n  2  a.txt       查看结尾两行
find  *.  +文件类型  查找同一类型文件
date  查看当前时间
cat  a.txt  连接打印文件
cat  a.txt  b.txt>c.txt  a,b合并到c
cal 打印日历
which  +命令   展示命令存放位置
whereis   
man + 命令  查看命令帮助手册
touch  修改时间戳(文件属性 修改时间和访问时间)
touch a.txt  新建空白文件
top  相当于任务管理器
rm  + 文件  删除
rm -r  删除目录
mv   a.txt  (b.txt目的地)  剪切
mv  a.txt  ./桌面/b.txt         剪切
mkdir  创建文件夹


linux 文件操作系统
最顶层目录  /

大数据常用centos

环境准备:vmware(vbox)虚拟化软件
                 关联linux7.x镜像

linux部署
linux : 
1.概述
    1.为什么要使用linux ?
        java、前端、大数据、算法 =》 app  服务器 =》 linux 
        2.
    2.linux 概述: 
        1.文件操作系统:
            层级式的文件操作系统 
            linux 最顶层目录:/ 

    3.linux版本: 
        广义 : 
            ubuntu、小红帽、centos、debian、等  基于linux 内核进行开发

        狭义:centos 
            6.x  =》 
            7.x =》  7.5
             
    4.学习linux ?
        1.环境准备:
            1.vmware (vbox) 虚拟化的软件
            2.关联 linux7.x镜像 即可 
    5.linux 内核 谁发明? 
        linux  林纳斯   =》 git 

2.部署linux 


    1.磁盘划分: 60G 
        /     => 根目录 划分多少磁盘   文件系统选择ext4
        /boot =》linux启动的时候 系统自身的资源  1g   文件系统选择ext4
        swap =》 内存不足 可以使用 磁盘充当内存  2g  4g   文件系统不做更改还是swap

    2.远程连接: 
        1.ip   =》  192.168.10.131 
            ifconfig =》 网卡 对应的ip  ens33
        2.port =》 22   1-65535
        3.username =》 root 
        4.passwd =》 123456

        xshell 

3.linux 基本操作: 
[root@sygy10 ~]# 
    root 登录机器的用户名  
        root  最高权限用户
    sygy10 登录机器的机器名 hostname 
    ~  登录机器的用户 家目录 【就是一个目录】

    家目录:
        root  =》 /root 
        xxxx  =>  /home/xxxx  

1.基本命令 

    1.pwd 当前光标所在目录的位置 
    [root@sygy10 ~]# pwd
    /root    (/root就是root的家目录)
          
    2.ls  【查看】当前光标所在目录的 下面有什么东西
    [root@sygy10 ~]# ls


        ls    显示文件夹和文件名字 
        ls -l 显示文件夹和文件名字 详细信息 
                    drwxr-xr-x. 2 root root 4096 4月  12 18:54 bigdata
               权限                用户        大小        
        ls -l -a  显示文件夹和文件名字 详细信息  显示隐藏文件【 文件或者文件夹 以.开头的文件 】 
        ls -l -a -h  显示文件大小 
        进制k,字节? 

        ls -l <=> ll 
        为什么等价?
        ll -a 
        ll -a -h  
        ll -ah
        ll -r -t  (按操作时间降序排列)
        
    命令帮助: 
        命令 --help  -help -h 

    [root@sygy10 ~]# ls --help
    用法:ls [选项]... [文件]...

    [] 可选 
    ... 可以选取多个
    uage: 
        ls [option]...[file]...
        ls [options]  [files]

    3.mkdir 创建文件夹 
    [root@sygy10 ~]# mkdir bigdata 
        1.创建串级 文件夹 
            [root@sygy10 ~]# mkdir -p  dir4/dir5/dir6
        2.创建并级文件夹
            [root@sygy10 ~]# mkdir dir1 dir2 dir3

    4.cd 切换目录
    [root@sygy10 ~]# cd bigdata
    [root@sygy10 bigdata]# pwd
    /root/bigdata

    目录: 路径 
        绝对路径:光标从根目录开始路径 
        相对路径:光标从当前目录开始的路径

    ./   当前路径
    ../  上一层级路径

    相对路径:
    [root@sygy10 ~]# cd ./bigdata/
    绝对路径:
    [root@sygy10 ~]# cd /root/bigdata/
    例如:
             ┍ A文件夹
          C -|
             ┕ B文件夹

绝对路径: C:\A文件夹

相对路径(如果你在A文件夹时): ..\B文件夹  (‘..\’向上一级意思)

    1.如何回到家目录: (三种方式)
        1.家目录的绝对路径
            cd  /root 
        2.cd 回车
        3.cd ~ 
            ~: 
                /root
                /home/xxx
    2. cd -  [回到上一次操作命令的目录]


5.创建文件(三种方式)
    1.touch xxx 
        [root@sygy10 bigdata]# touch 1.log
    2.vim / vi  xxx 
        [root@sygy10 bigdata]# vim 2.log
    3.echo "xxx" > xx.log 

    echo "xxx"  打印 
    > 创建或者 覆盖一个文件 
    >> 追加文件 

    思考: 
        如何创建一个空文件? shell 
            1.touch xxx
            2.vim / vi  xxx  
            3.echo "" > xx.log
            4. linux 有一个真正的 空文件 
                /dev/null 
                [root@sygy10 bigdata]# cat /dev/null > 7.log
            done文件是否为空文件有影响吗?

6.vim / vi 编辑文件

    vim 三种模式:
        1.命令行模式
        2.编辑模式
        3.尾行模式
    
    windows =》 1.打开文件 2.编写内容 3.退出保存

    linux :
        1.打开文件 【命令行模式】
            [root@sygy10 bigdata]# vim 1.log 
        2.编写内容 【命令行模式 -》编辑模式 】
            键盘输入 i =>insert 
        3.退出保存 
            1.【编辑模式 =》命令行模式 】
                键盘输入 esc
            2.【命令行模式 =》尾行模式 】 退出保存
                键盘输入 shift+; => :

                退出保存 :  
                    输入指令: 
                        w 保存
                        q 退出
                        !强制 

            
            补充: 
                1.命令行模式
                    1.光标移动
                        1.gg 首行
                        2.G  最后一行
                        3. num +G 指定行
                        4.shift +^ 行头
                        5.shift +$ 行尾
                    2.复制 【p】
                        1.yy  复制当前光标所在行
                        2.y num y  复制一段
                    3.撤回 u 
                    4.删除 
                        1.dd 删除当前光标所在行
                        2.d num d 删除一段
                    重点:3.dG 删除当前光标以下所有行

                        思考:
                            如何删除文件所有内容?
                3.尾行模式: 
                    1.退出保存
                        wq!
                        x  =》 wq 
                        快捷键 shift +zz 
                    2.查找想要的关键词 : 
                        :/keywords  n查找下一个 N 往上查找
                    3.显示行号:
                        :set nu 
                        :set nonu

7.查看文件 
    cat 文件所有内容 全部显示 【 文件比较小】

    more  文件的内容 是一页一页显示的  按空格 往下翻  退出 按q  ctrl +c  ctrl +z 
    less 文件的内容 是一页一页显示的  按空格 往下翻 上下键 页面一行一行翻
        vim 【编辑】

    重点:tail 实时监控文件里面最新内容 (原来的内容与显示?)
        -f 
        -F => -f +retry 
    

    日志: 
        app =》 sb an =》 log4j. => 
                hadoop =》 
                    namenode.log [100m] 

                    mv namenode.log namenode_1.log
                    touch namenode.log 


                    namenode.log 
                    namenode_1.log [生产完的日志] 
                     echo "" >  namenode.log 
    
    cat : 
        一个日志文件 hadoop_namenode.log  100m : 
                   error  ?
    
        cat anaconda.log  | grep  -A  10 error   后10行
        cat anaconda.log  | grep  -B  10 error   前10行
        cat anaconda.log  | grep  -C  10 error   前后10行

        1. | 管道符  前一个命令的结果作为下一个命令的输入
        2. grep 过滤出 关键词 所在的行 
    vim :/error 


作业: 
    1.整理 linux 笔记 
        博客


基本命令: 

1.mv + cp  
    1.mv 剪切
    2.cp  复制 

    mv  =》 文件个数 始终是1分 
    cp  =》 文件个数 始终是2分

    1.移动
        [root@sygy10 bigdata]# mv 1.log ../1.log
        [root@sygy10 bigdata]# cp ~/1.log ./

    2.改名字 
        [root@sygy10 ~]# mv 1.log 1.log_blk
        [root@sygy10 ~]# cp 1.log_blk 1.log

    标准写法:
        mv xx.log  bigdata/xx.log
        cp xx.log  bigdata/xx.log
    不标准写法: 
        mv xx.log  bigdata/
        cp xx.log  bigdata/

2.上传下载 

    1.xshell 工具 

    2.命令 
        linux 安装一个 包 :  pip
            yum install  -y  lrzsz 
        
        rz 上传
        sz 下载

    3.xshell 工具(直接把文件拖拽进来)

3.rm 删除文件 或者 文件夹 (高危命令)

    1.文件
        [root@sygy10 ~]# rm 1.log_blk
        rm:是否删除普通文件 "1.log_blk"?y

        [root@sygy10 ~]# rm -f jdk-8u212-linux-x64.tar.gz

    2.文件夹 
        [root@sygy10 ~]# rm -r bigdata/
            rm:是否进入目录"bigdata/"? y
            rm:是否删除普通文件 "bigdata/1.log"?y
            rm:是否删除目录 "bigdata/"?y
        [root@sygy10 ~]# rm -r -f dir1/ 
        rm -rf xxx [通用的写法]

4. alias (别名) 

    别名使用:
        alias ll='ls -l --color=auto'

        alias aa="cd /tmp"

        1.使用
        [root@sygy10 ~]# alias aa="cd /tmp"
            [仅仅当前会话生效]

        2.aa 命令 在任何地方都能使用?    
            1.环境变量 
                [root@sygy10 tmp]# echo $PATH
                /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
            2.环境变量 配置文件 : 
                1.全局的  [所用用户都可以使用]
                    /etc/profile

                2.个人的  【只能是当前用用户能使用,其他不能使用】 
                    ~/.bashrc 
                    ~/.bash_profile 
            
            3.生效 
                source /etc/profile
                source ~/.bashrc 
                source ~/.bash_profile 

            
            eg :  =》  1.命令 在任何地方都能使用
                [root@sygy10 ~]# vim /etc/profile
                配置了一个 aa 别名
            

            eg:  =》 2。所用用户都可以使用 aa 
                useradd zs  【创建用户】
                su - zs   【切换用户】
                [root@sygy10 tmp]# useradd zs
                [root@sygy10 tmp]# su - zs
                [zs@sygy10 ~]$ 
                [zs@sygy10 ~]$ pwd
                /home/zs
                [zs@sygy10 ~]$ aa
                [zs@sygy10 tmp]$ pwd
                /tmp
                [zs@sygy10 tmp]$

        2.个人的  【只能是当前用用户能使用,其他不能使用】 
                    vim   ~/.bashrc 
                    source   ~/.bash_profile 


5.历史命令 
    history 
        mysql =》 
            mysql  -uroot -p
    [root@sygy10 ~]# aa_zs
    [root@sygy10 tmp]# !281
         在MySQL里  mysql -uroot -p(不要在P后面输入密码,不然history之后免密会暴露,要换行输入密码)
                123456            

6.tab  自动补全的功能 
    按tab 键 按一次 自动补全 或者 过滤 
    按tab 键 按二次 过滤

7. 用户相关的命令

    1.用户、用户组 
        1.用户 
            [root@sygy10 ~]# ll /usr/sbin/user*
            -rwxr-x---. 1 root root 118192 11月  6 2016 /usr/sbin/useradd
            -rwxr-x---. 1 root root  80360 11月  6 2016 /usr/sbin/userdel
            -rwxr-x---. 1 root root 113840 11月  6 2016 /usr/sbin/usermod
        2.用户组
            [root@sygy10 ~]# ll /usr/sbin/group*
            -rwxr-x---. 1 root root 65480 11月  6 2016 /usr/sbin/groupadd
            -rwxr-x---. 1 root root 57016 11月  6 2016 /usr/sbin/groupdel
            -rwxr-x---. 1 root root 57064 11月  6 2016 /usr/sbin/groupmems
            -rwxr-x---. 1 root root 76424 11月  6 2016 /usr/sbin/groupmod

    
    3.创建用户 
        [root@sygy10 ~]# useradd xinwei
        [root@sygy10 ~]# id xinwei(查看)
        uid=1002(xinwei) gid=1002(xinwei) 组=1002(xinwei)
        用户            用户组        主组
    4.创建一个用户:(发生三件事)
        1.用户名称 xinwei
        2.创建了一个用户组 xinwei  
        3.创建了一个 家目录 :/home/xinwei

        用户 : 用户组 :
                    主组 
                    附属组

        /etc/passwd这个文件用来记录用户信息    
        1.用户信息     =》文件 记录   [root@sygy10 ~]# vim /etc/passwd
        2.用户组信息 =》 文件 记录  [root@sygy10 ~]# vim /etc/group

    5.切换用户 su  
        [root@sygy10 ~]# su - xinwei(建议用带-的)(加-的会去到要切换的用户的家目录)(加上默认执行个人的环境变量)
        [root@sygy10 ~]# su xinwei(不加-的,原本目录在哪,就切换到哪)

    
    6.样式丢失 

        如何解决: 
            1.-bash-4.2$ cd /etc/skel/
            ll  -a之后显示隐藏文件,把这些文件都转移到家目录里面样式就恢复了
            2.-bash-4.2$ cp ./.* ~(当前目录下的隐藏文件移到家目录下面 )
    
    7.用户组 
        [root@sygy10 ~]# groupadd bigdata
        [root@sygy10 ~]# usermod -a -G bigdata zs(把bigdata组加到zs用户中))
                                 参数(把谁加进去)  

        需求: 
            zs  要求 主组是 bigdata ,附属组 zs 也要
                1.[root@sygy10 ~]# usermod -g bigdata zs(-g 强行使用某个组作为新主组)
                2.[root@sygy10 ~]# usermod -a -G zs zs(-a -G 追加附属组)

    8.修改用户的密码 ;
        passwd :
            1.root /当前用户 : :
                [root@sygy10 ~]# passwd zs
             

    9.sudo  普通用户 临时 使用root的最大权限 
        (临时最大权限 sudo 里面别名alias里  ll不好使)
        1.配置文件  /etc/sudoers
            zs      ALL=(ALL)       NOPASSWD: ALL
        2. 使用 
            sudo xx


        思考:
            sudo su - xxx :
                1.命令报不报错 (不)
                2.需不需要输入密码    (不需要)

        cdh : hdfs yarn hive hbase 
            su - yarn  [切换不了]  改一下,改成是/bin/bash就可以了
            su - hive 【有点问题】
        /sbin/nologin =》 还有个提示

8.文件权限的命令

    1.权限
    -rw-r--r--. 1 root root    7 4月  13 13:53 1.log
    drwxr-xr-x. 2 root root 4096 4月  12 14:03 dir2


    drwxr-xr-x: 10字母  =》 权限 

        第一字母: 
            d: 文件夹 
            -:文件 
            l:软连接 (windows 快捷方式)

        权限:rwxr-xr-x  9个决定的  755
        第一组:rwx  =》 4+2+1 = 7  所属用户的权限
        第二组 r-x  =》 4+0+1 = 5    所属用户组的权限
        第三组 r-x =》 4+0+1 = 5    其他用户组的权限

        权限: 
            r 读权限     4
            w 写权限     2
            x 执行权限    1    执行?    
            - 没权限    0
                   
        - rw- r-- r-- =》644


    2.修改权限命令  修改文件夹时用 -R
        chmod 
            chmod 646 ./1.log
    3.chown 改变 所属者 
        [root@sygy10 tmp]# chown zs:zs 1.log


9.其他命令: 
    1.查找文件: 
        1.find  
            [root@sygy10 ~]# find / -name "*1.log*"
        2.locate 
            [root@sygy13 ~]# locate dir1
             /root/dir1

    2.系统相关的命令: 
        1.内存
            free
        2.磁盘
            df 
        3.负载 
            top
            load average: 0.00, 0.01, 0.05    各自不要超过 10 
            pid代表进程号
            Ctrl+z 退出
    3.可能遇到的问题 : 
        编辑文件 swp文件
        ll -a 检查出.xxx.swp文件
        rm -rf 删掉.xxx.swp文件        

进程+端口号 :(通过进程名字拿到程序pid,拿到pid之后可以在查看端口号)    

    yum : httpd 
    输入 yum install -y httpd 命令
    1.查看进程号:     
        1.java 代码 =》 jdk =》 jps 
        2. ps -ef | grep 程序的名字(pid)  => pid 

        root         12048            1   0 22:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
              apache     12072    12048   30 22:40 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
        启动用户    子pid     父pid
        杀死进程 kill -9  12072(pid进程号)

    2.查看端口号  port 
        netstat -nlp | grep  12048(pid)
        tcp6       0      0 :::80                   :::*                    LISTEN     12048/httpd 
                默认对外提供端口号80

        service httpd start
        ps -ef | grep http
        kill -9 $(pgrep -f httpd)
    
      
通讯的命令:(自己电脑连到机房电脑,判断自己网络和机房网络是否互通,防火墙打没打开)
    1.ping ip 
    2.telnet ip port (ping端口)    

下载 :  
    1. wget 
    2.curl 

    命令 + url (地址)

软连接 更改home目录,小盘变大盘?


tar : 
    linux 处理 归档文件的命令 

归档文件:    

普通文件:1.log  1m
归档文件:1.log.tar 1m
压缩文件:1.log.tar.gz 0.9m

1.普通 =》压缩 归档文件  
    1.log =》1.log.tar.gz

tar  -zcvf  xxx.tar.gz file...

    -cf  => 创建一个新归档 +   使用归档文件
    z  => 压缩 gz
    v  =》详细地列出处理的文件

eg: 
    [root@sygy10 ~]# tar -zcvf A.tar.gz dir1 dir2(把dir1 dir2压缩到A文件夹)

2.解压 
tar -zxvf  xxx.tar.gz
    -xf => 解压 +使用归档文件
    z  => 压缩 gz
    v  =》详细地列出处理的文件

eg:tar -zxvf A.tar.gz -C ./B/   (把A.tar.gz解压到B文件夹使用的是-C命令)默认解压到当前文件夹

百度 、谷歌 、 加一个功能 =》 github 码云  flinkcdc =》 maxwell 源码 =》 flink antrl4 sql 

shell :

    1.什么是shell ? 脚本语言  python
        1.一个编程的语言
        2.可以执行的文件
        3.文件内容 linux命令组成的

1.shell语法入门 

1.入门 
    1.文件 xxx.sh 结尾 
    2.第一行 #!/bin/bash(可写可不写)

    1.编写脚本 (创建一个shell文件)
    vim wc.sh

    2.得有执行权限【不一定】
        1.不给文件权限 
        sh xxx.sh 

        [root@sygy10 shell]# sh ./wc.sh 
        word count
        [root@sygy10 shell]# cat wc.sh 
        #!/bin/bash
        echo "word count"

        2.给文件 执行权限(常用)
        [root@sygy10 shell]# chmod 744 ./wc.sh
        [root@sygy10 shell]# ./wc.sh 
        word count

        [root@sygy10 shell]# sh ./wc.sh 
        word count

        补充:
            1.给权限
            [root@sygy10 shell]# chmod u+x ./wc.sh(u+x 自身加执行权限)
            [root@sygy10 shell]# ./wc.sh 
            word count
            [root@sygy10 shell]# ~/shell/wc.sh 
            word count
            [root@sygy10 shell]# sh ~/shell/wc.sh (平台调度时建议使用)
            word count

            2. debug (报错会有-号提示)
            1.[root@sygy10 shell]# sh -x ./wc.sh

            2.-x加在shell脚本文件中
                #!/bin/bash -x
                echo "word count"

2.定义变量 引用

    eg:
    [root@sygy10 shell]# cat variable.sh 
    name="zhangsan"
    dt1="date"
    dt2=`date`
    echo $name
    echo $dt1
    echo $dt2

    1.定义变量的方式:(变量名首字母最好大写)
        key=value
        注意: 
            1.= 前后不能有空格
            2.变量名一般都是大写的【标准】
    2.变量的种类:
        shell中变量的数据类型 =》全都是 string 
        1.静态
            k="v" k='v' k=v
        2.动态 
            k=`v` : v是变量 v系统自带的命令
    3.引用变量: 
        ${k} 

任务调度:
    shell =》 
        时间点: T+1 、h+1 20min 
            20220414  =》20220413  
                20220414 0:05
                    1.yarn资源
                    2.看你几点上班 
    crontab 命令 =》 定时调度
    开源框架:
        dophschudule 【恢复数据、重跑数据】
        xxl  【shell -》 】
        azkanban xx 
        ozzio  xx
        airflow 【费劲】
        runduck 
        自己开发

3.shell脚本 参数传递 :
    1.$n 
        $1         $2
        第一个参数     第二个参数
    [root@sygy10 shell]# cat parameter.sh 
    echo "脚本文件名: $0"
    echo "第一个参数:$1"
    echo "第二个参数:$2"
    echo "参数个数: $#"
    echo "传递的参数作为一个字符串: $*"
    echo "传递的参数作为一个字符串: $@"
    echo "脚本运行时的pid :$$"(最好加上,防止kill错进程)

    补充:
        1.传递参数 “空格” 作为符号分割
        2.参数本身带有空格 要加双引号

4.数组 
    语法格式: 
        arr=(v1 v2 ... vn)
        1.数组用()表示
        2.元素用 空格 分割 
    eg: 
        [root@sygy10 shell]# cat arr.sh 
        arr=(zs lisi ww zl)
        echo "所有元素 : ${arr[@]}"
        echo "第一个元素 : ${arr[0]}"
        echo "元素个数 : ${#arr[@]}"(个数跟 # 命令有关)


5.流程控制
    分支
    循环 
    1.分支 if  else 

    语法格式:
        if  condition;then
            业务代码
        else
            业务代码
        fi(关掉if)

condition => 条件判断语法 
    [ condition ]  (注意:前后都有空格)
    结果:
        非空 true 
        空 false 
        [ hadoop ]

        $? => 获取上一个程序运行的结果 :
                成功 0
                失败 非0的数据
        条件表达式:
            1.数值判断
                =  等于
                == 等于
                -gt 大于
                -lt 小于
                -eq 等于 
                -ge 大于等于
                -le 小于等于
                
                -ne 不等于

            2.权限判断 
                -r 
                -w 
                -x 
            3.文件判断 
                -f (判断是不是文件)
                -e (判断文件是否存在)
                -d (判断是不是文件夹)

            eg:
                [root@sygy10 shell]# cat if.sh 
                name1="zs"
                name2="lisi"

                if [ ${name1} == ${name2} ];then  注意:[空格${name1}空格==空格${name2}空格] 
                    echo "等于"
                else 
                    echo "不等于"
                fi
        if elif 语法格式:
            if condition;then
                业务代码
            elif condition;then
                业务代码    
            else
                业务代码
            fi
        
        eg:
            [root@sygy10 shell]# cat if_2.sh 
            score=$1

            if [ ${score} -gt 90 ];then
                echo "优秀"
            elif [ ${score} -ge 60 ];then
                echo "良"
            else 
                echo "不及格"
            fi

循环:
    语法格式:
        foreach:
            for el in item1 item2 ... itemn
            do 
                业务代码
            done (关掉循环)

        for i :
            语法格式 :
                for((i=0;i<size;i++))
                do 
                    业务代码
                done
        eg:
            [root@sygy10 shell]# cat for.sh 
            for x in 1 2 3 4
            do

                echo "${x}"
            done

            echo "-----------------"

            for((i=0;i<5;i++))
            do 
                echo "v is ${i}"
            done

        while:(常用)
            while condition
            do 
                业务代码
            done

        eg:
            [root@sygy10 shell]# cat while.sh 
            i=1
            while ((${i}<=5))
            do
                echo "v is ${i}"
                let i++
            done

        总结:
            条件表达式 不能用 <  > 

            while for  能用 < >  不能用 -gt 

            []  =》 条件判断
            ()  =>  数值运算 
            https://blog.csdn.net/taiyang1987912/article/details/39551385?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1


监控 服务器 
    ip hostname 
    linux01 linux02 linux03 

     df  (磁盘)
     free  (内存)

for x in 1 2 3 4(常用)
            do

                echo "${x}"
            done
         
    [root@sygy10 shell]# cat split.sh 
    str="linu01,linu02,linux03"  字符串=》数组(常用)
    arr=(${str//,/ })(把,替换成空格)

    for linux  in ${arr[@]}
    do
        echo ${linux}
    done

    Java  str.split(",")
    shell => 
        IFS变量 =》 字符串分割的效果

补充: linux 文本分析的 命令
    awk  =》 取出文本内容
    sed  =》 文本替换

awk : 
    1.获取列 
    [root@sygy10 shell]# cat 1.log | awk '{print $1}'
    a
    1
    [root@sygy10 shell]# cat 1.log | awk '{print $1,$2}'
    a b
    1 2

    2.获取行 
    [root@sygy10 shell]# cat 1.log | awk 'NR==1{print}'
    a b c
    [root@sygy10 shell]# cat 1.log | awk 'NR==2{print}'
    1 2 3
    [root@sygy10 shell]# cat 1.log | awk 'NR>1{print}'
    1 2 3
    [root@sygy10 shell]# cat 1.log | awk 'NR>=1{print}'

2.sed 
    文本替换 
    1.a 替换成 dd 

    [root@sygy10 shell]# cat 2.log 
    a a b
    1 a 3
    [root@sygy10 shell]# sed -i 's/a/dd/' 2.log  #每行 第一次遇到 a 替换成dd 
    [root@sygy10 shell]# cat 2.log 
    dd a b
    1 dd 3

    2.全局替换 
    把所有的a 都替换成 dd  
    [root@sygy10 shell]# sed -i 's/a/dd/g' 2.log

    坑: 
        [root@sygy10 shell]# sed -i 's#dd#a#g' 2.log(#号是自己定义的)

        替换文件路径:
            /path/a 

            p1="/path/a"
            p1="/path1/a1"

            sed -i 's/\/path\/a/\/path1\/a1/g' 3.log(转义)

            sed -i 's#/path/a#/path1/a1#g' 3.log

    sql => 文件 

        spark-submit   -f xxx.sql  

        hive -f "sele"
            -e 

linux模板机:
    1. ip 动态ip =》静态ip 
            1.内网
            2.学习方便 
    2.关闭防火墙 :
         1-65535
         关闭防火墙
    3.额外的安装包 :
        1.jdk =》 卸载掉 
        2.mysql =》 mysql自带的额外包【安装mysql 去掉就行】 【superset mysql自带的额外包】 


ip:
    1.win =》 vmware :
        1.子网ip  1-255
            192.168.10.0 
        2.网关 
            192.168.10.2
        
    2.linux => 静态ip 
        IPADDR=192.168.10.13
        GATEWAY=192.168.10.2
        DNS1=192.168.10.2

        [root@sygy10 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
        BOOTPROTO="static"
        ONBOOT="yes"
        IPADDR=192.168.10.10
        GATEWAY=192.168.10.2
        DNS1=192.168.10.2
        
        【重启网络或者 重启机器】
            service network restart 

关闭防火墙:
    systemctl stop firewalld
    systemctl disable firewalld

额外的安装包 :
        1.jdk =》 卸载掉 
        rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

linux =》 centos :
    1.安装软件:    
        1.yum 
        2.rpm 
        3.tar 

rpm :
    卸载:
        1.查询 java 
        rpm -qa | grep -i java

        2.卸载
        rpm -e --nodeps xxx 

克隆之后:
    1.机器的名字
        vim /etc/hostname
    2.机器的ip 
        10 -》 03
        vim /etc/sysconfig/network-scripts/ifcfg-ens33
            改ip 跟机器号对应上 


规范:
[hadoop@sygy03 ~]$ mkdir app project software shell data log

MySQL:
    1.版本:
        5.6 【少】
        5.7  【多】
        8.x    【】 
    
    2.部署平台:
        win =》 
        mac =》 
        linux =》 
            1.两种方式 
                1.rpm包 =》 部署简单  【学习使用】
                2.tar包 =》 部署复杂 【生产上用】

安装mysql: 
    1.卸载 mysql 相关的包 
    [root@sygy03 software]# rpm -qa|grep mariadb
    mariadb-libs-5.5.56-2.el7.x86_64
    [root@sygy03 software]# rpm -e --nodeps  mariadb-libs
    [root@sygy03 software]# rpm -qa|grep mariadb

    2.安装mysql 
        1.解压
    [root@sygy03 software]# tar -xvf ./mysql-8.0.21-1.el7.x86_64.rpm-bundle.tar -C ./mysql
        2.安装
        rpm :
        rpm -ivh mysql-community-common-8.0.21-1.el7.x86_64.rpm 
        rpm -ivh mysql-community-libs-8.0.21-1.el7.x86_64.rpm
        rpm -ivh mysql-community-libs-compat-8.0.21-1.el7.x86_64.rpm
        rpm -ivh mysql-community-client-8.0.21-1.el7.x86_64.rpm
        rpm -ivh mysql-community-server-8.0.21-1.el7.x86_64.rpm

        3.启动
            1.查看配置mysql
            vim /etc/my.cnf 

                日志文件:/var/log/mysqld.log
                    监控:tail -20f /var/log/mysqld.log
            2.mysql 初始化 
            mysqld --initialize --user=mysql

            临时密码:
                 root@localhost: pGj/roOO)9vw


                root
                (mdeIsSmq3s6

            3.启动mysql 
            systemctl start mysqld

            4.登录mysql 
            [root@sygy03 mysql]# mysql -uroot -p\(mdeIsSmq3s6
                                    转义
            5.修改密码 
            alter user root@localhost identified by '123456';

            6.修改任何 ip 都可以访问 mysql 
            update mysql.user set host='%' where user='root';

            7.刷新权限(只要MySQL修改系统相关的东西就需要刷新权限)
            flush privileges;


mysql 远程连接工具:
    1.dbvear =》 hive phoniex clickhouse 
    2.netcat 
    3. db 


mysql 语法:

1.聚合函数(分组函数)

group By =》 分组 
聚合函数  =》 指标统计 sum avg max min  count 

需求: 
    统计 每个部门有多少个人 ?
c查什么:
    维度 : 部门
    指标 : 人数

聚合统计逻辑: 

    聚合统计:
        group by  +聚合函数 
    group by =》 分组 
    20,<20,20,20>
    30,<30,30,30,30>
    10,<10,10,10,10>

    聚合函数  =》 指标 count  
    20,3
    30,4


2.开窗函数 
    1.聚合函数 : 多行数据 按照一定规则 进行聚合 为一行
        sum avg max 。。。 
        理论上: 聚合后的行数 <= 聚合前的行数 [看维度选取 groupby 里面的字段]

    2.需求: 
        既要显示 聚合前的数据 又要显示 聚合后的数据 ?

    eg:    
    id name  sal      dt          sal_all    
    1  zs    1000     2022-4        1000
    2  ls    2000     2022-4        2000
    3  ww    3000     2022-4        3000
    1  zs    1000     2022-5        2000
    2  ls    2000     2022-5        4000
    3  ww    3000     2022-5        6000

窗口函数: 
    窗口 + 函数 
    窗口: 函数运行时 计算的数据集的范围
    函数:运行时的函数
        1.聚合函数
        2.内置窗口函数

    语法结构:
        函数 over([partition by xxx,...]  [order by xxx,...] )

        over() :以谁进行开窗 【table】
        partition by: 以谁进行分组 【group by  column】
        order by: 以谁进行排序 【column】


窗口函数:

数据:
    服务器 每天的启动 次数 

    linux01,2022-04-15,1
    linux01,2022-04-16,5
    linux01,2022-04-17,7
    linux01,2022-04-18,2
    linux01,2022-04-19,3
    linux01,2022-04-20,10
    linux01,2022-04-21,4

统计累计问题:
    需求: 
        每个服务器每天的累计 启动次数 
name      dt       cnt  
linux01,2022-04-15,1
linux01,2022-04-16,5
linux01,2022-04-17,7
linux01,2022-04-18,2
linux01,2022-04-19,3
linux01,2022-04-20,10
linux01,2022-04-21,4

name      dt       cnt      cnt_all
linux01,2022-04-15,1        1
linux01,2022-04-16,5        6
linux01,2022-04-17,7        13
linux01,2022-04-18,2        15
linux01,2022-04-19,3        18
linux01,2022-04-20,10        28
linux01,2022-04-21,4        32

create table window01(
    name varchar(50),
    dt varchar(20),
    cnt int
);

每个服务器每天的累计 启动次数  

1.聚合函数  
    COUNT,SUM,MIN,MAX,AVG
select 
name,
dt,
cnt,
sum(cnt) over(partition by name  order by dt ) as cnt_all
from window01;

2.内置窗口函数 


窗口大小:
    select 
name,
dt,
cnt,
sum(cnt) over(partition by name  order by dt ) as sum_all,
-- sum(cnt) over(partition by name  order by dt ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW  ) as sum_all1
-- sum(cnt) over(partition by name  order by dt ROWS BETWEEN 3 PRECEDING AND CURRENT ROW ) as sum_all2
-- sum(cnt) over(partition by name  order by dt ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING ) as sum_all3
-- sum(cnt) over(partition by name  order by dt ROWS BETWEEN 3 PRECEDING AND UNBOUNDED FOLLOWING) as sum_all4
sum(cnt) over(partition by name  order by dt ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) as sum_all5

from window01;


2.内置窗口函数
    1.取值 串行 

    2.排序 
    RANK
    ROW_NUMBER
    DENSE_RANK
    CUME_DIST
    PERCENT_RANK
    NTILE

NTILE:

ntile  
    需求:
        把数据按照某个字段进行排序 ,把数据分成几分  

select 
name,
dt,
cnt,
sum(cnt) over(partition by name  order by dt ) as sum_all,
ntile(2) over(partition by name  order by dt ) as n2,
ntile(3) over(partition by name  order by dt ) as n3
from window01 ;
    把数据平均分配 指定 N个桶 ,如果不能平均分配 ,优先分配到 编号 小的里面


RANK
ROW_NUMBER
DENSE_RANK


RANK:  从1 开始 , 按照顺序 相同会重复 名次会留下 空的位置 生成组内的记录编号
ROW_NUMBER: 从1 开始 , 按照顺序 生成组内的记录编号
DENSE_RANK:从1 开始 , 按照顺序 生成组内的记录编号 相同会重复 名次不会会留下空的位置

select 
name,
dt,
cnt,
sum(cnt) over(partition by name  order by dt ) as sum_all,
RANK() over(partition by name  order by cnt desc ) as rk,
ROW_NUMBER() over(partition by name  order by cnt desc) as rw,
DENSE_RANK() over(partition by name  order by cnt desc ) as d_rk
from window01 ;

    1. 串行
        LEAD
        LAG

        1. 串行
        LEAD:窗口内 向下 第n行的值
        LAG:窗口内 向上 第n行的值
            LEAD(column,n,default)
            column => 列名 
            n =》 取 几行 
            default =》 取不到就给一个默认值

            select 
            name,
            dt,
            cnt,
            sum(cnt) over(partition by name  order by dt ) as sum_all,
            LEAD(dt,1,"9999-99-99")  over(partition by name  order by dt ) as lead_alias,
            LAG(dt,1,"9999-99-99")  over(partition by name  order by dt ) as lag_alias
            from window01 ;

    2.取值
    FIRST_VALUE
    LAST_VALUE

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值