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
/ => 根目录 划分多少磁盘
/boot =》linux启动的时候 系统自身的资源 1g
swap =》 内存不足 可以使用 磁盘充当内存 2g 4g
2.远程连接:
1.ip =》 192.168.10.134
ifconfig =》 网卡 对应的ip
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
2.ls 【查看】当前光标所在目录的 下面有什么东西
[root@sygy10 ~]# ls
ls 显示文件夹和文件名字
ls -l 显示文件夹和文件名字 详细信息
ls -l -a 显示文件夹和文件名字 详细信息 显示隐藏文件【 文件或者文件夹 以.开头的文件 】
ls -l -a -h 显示文件大小
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. 创建文件夹
[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/
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
6.vim / vi 编辑文件
vim 三种模式:
1.命令行模式
2.编辑模式
3.尾行模式
win =》 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
cat anaconda.log | grep -B 10 error
cat anaconda.log | grep -C 10 error
1. | 管道符 前一个命令的结果作为下一个命令的输入
2. grep 过滤出 关键词 所在的行
vim :/error
基本命令:
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.个人的 【只能是当前用用户能使用,其他不能使用】
~/.bashrc
~/.bash_profile
5.历史命令
history
mysql =》
mysql -uroot -p
[root@sygy10 ~]# aa_zs
[root@sygy10 tmp]# !281
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
用户 : 用户组 :
主组
附属组
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/
2.-bash-4.2$ cp ./.* ~
7.用户组
[root@sygy10 ~]# groupadd bigdata
[root@sygy10 ~]# usermod -a -G bigdata zs
需求:
zs 要求 主组是 bigdata ,附属组 zs 也要
1.[root@sygy10 ~]# usermod -g bigdata zs
2.[root@sygy10 ~]# usermod -a -G zs zs
8.修改用户的密码 ;
passwd :
1.root /当前用户 : :
[root@sygy10 ~]# passwd zs
9.sudo 普通用户 临时 使用root的最大权限
1.配置 /etc/sudoers
zs ALL=(ALL) NOPASSWD: ALL
2. 使用
sudo xx
思考:
sudo su - xxx :
1.命令报不报错
2.需不需要输入密码
cdh : hdfs yarn hive hbase
su - yarn [切换不了]
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:软连接 (win 快捷方式)
权限: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-- =》
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
locate
2.系统相关的命令:
1.内存
free
2.磁盘
df
3.负载
top
load average: 0.00, 0.01, 0.05 各自不要超过 10
3.可能遇到的问题 :
编辑文件 swp文件
进程+端口号 :
yum : httpd
1.查看进程号:
1.java 代码 =》 jdk =》 jps
2. ps -ef | grep 程序的名字(pid) => pid
2.查看端口号 port
netstat -nlp | grep pid
通讯的命令:
1.ping ip
2.telnet ip port
下载 :
1. wget
2.curl
命令 + url
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.10
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
2.mysql 初始化
mysqld --initialize --user=mysql
临时密码:
root@localhost: (mdeIsSmq3s6
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.刷新权限
flush privileges;
mysql 远程连接工具:
1.dbvear =》 hive phoniex clickhouse
2.netcat
3. db
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 dir.tar.gz dir2 dir4 jdk-8u212-linux-x64.tar.gz
2.解压
tar -zxvf xxx.tar.gz
-xf => 解压 +使用归档文件
z => 压缩 gz
v =》详细地列出处理的文件
百度 、谷歌 、 加一个功能 =》 github 码云 flinkcdc =》 maxwell 源码 =》 flink antrl4 sql
shell :
1.什么是shell ? 脚本语言 python
1.一个编程的语言
2.可以执行的文件
3.文件内容 linux命令组成的
1.shell语法入门
1.入门
1.文件 xxx.sh 结尾
2.第一行 #!/bin/bash
1.编写脚本
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
[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.
#!/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
${k}
java -classpath ./java01-1.0-SNAPSHOT.jar org.example.Test 10 20
任务调度:
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 :$$"
num1=$1
num2=$2
java -classpath ./java01-1.0-SNAPSHOT.jar org.example.Test ${num1} ${num2}
补充:
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
condition => 条件判断语法
[ condition ]
结果:
非空 true
空 false
[ hadoop ]
$? => 获取上一个程序运行的结果 :
1.成功 0
2.失败 非0的数据
条件表达式:
1.数值判断
= 等于
== 等于
-lt 小于
-eq 等于
-ge 大于等于
-le 小于等于
-gt 大于
-ne 不等于
2.权限判断
-r
-w
-x
3.文件判断
-f
-e
-d
eg:
[root@sygy10 shell]# cat if.sh
name1="zs"
name2="lisi"
if [ ${name1} == ${name2} ];then
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
[root@sygy10 shell]# cat split.sh
str="linu01,linu02,linux03"
arr=(${str//,/ })
for linux in $arr[@]
do
echo ${linux}
done
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