大数据入门
Linux和 Windows区别
Windows Linux
费用 收费且很贵 Linux免费或少许费用
Centos下载地址
Linux目录结构
阿里镜像 https://opsx.alibaba.com/mirror
网易镜像 http://mirrors.163.com/
清华镜像 https://mirrors.tuna.tsinghua.edu.cn/
Linux目录结构简介
目录结构 说明
/bin 是Binary的缩写,这个目录存放着最经常使用的命令
/sbin s就是Super User的意思,这里存放的系统管理员使用的系统管理程序
/home 存放普通用户的主目录,在Linux中每个用户都有自己的一个目录,一般该目录是以用户的账户命名
/root 该目录为系统管理员,也称作超级权限者的用户主目录
/lib 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里面的DLL文件。几乎所有的应用程序都需要用到这些共享库
/etc 所有的系统管理所需要的配置文件和子目录
/usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录
/boot 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件,自己的安装别放这里
/proc 这个目录是一个虚拟目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息
/srv Servic的缩写,该目录存放一些服务启动之后需要提取的数据
/sys 这是Linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs
/tmp 这个目录是用来存放一些临时文件的
/dev 类似于Windows的设备管理器,把所有的硬件用文件的形式存储
/media Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下面
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统,我们可以将外部存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了
/opt 这是给主机额外安装软件所摆放的目录。比如你安装一个MySQL数据则就可以放到这个目录下。默认是空的。
/var 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括日志文件
/selinux Selinux是一种安全自系统,它能控制程序只访问特定文件
/lost+found 这个目录一般情况下空的,当系统非法关机后,这里就存放了一些文件
VI/VIM语法
yy 复制光标当前一行
y数字y 复制一段(从第几行到第几行)
p 箭头移动到目的行粘贴
u 撤销上一步
dd 删除光标当前行
d数字d 删除光标(含)后多少行
x 删除一个字母,相当于del,向后删
X 删除一个字母,相当于Backspace,向前删
yw 复制一个词
dw 删除一个词
shift+^ 移动到行头
shift+$ 移动到行尾
gg或者1+G 移动到页头
G 移动到页尾
数字+G(先输入数字,在按G) 行
i 当前光标前
a 当前光标后
o 当前光标行的下一行
I 光标所在行最前
A 光标所在行最后
O 当前光标行的上一行
Linux命令
指令模式
:w 保存
:q 退出
:! 强制执行
/ 要查找的词 n 查找下一个,N 往上查找
? 要查找的词 n是查找上一个,N是往下查找
:set nu 显示行号
:set nonu 关闭行号
ZZ(shift+zz) 没有修改文件直接退出,如果修改了文件保存后退出
常用基本命令
NAME 命令的名称和单行描述
SYNOPSIS 怎样使用命令
DESCRIPTION 命令功能的深入讨论
EXAMPLES 怎样使用命令的例子
SEE ALSO 相关主题(通常是手册页)
快捷键
ctrl + c 停止进程
ctrl+l 清屏;彻底清屏是:reset
ctrl + q 退出
善于用tab键 提示(更重要的是可以防止敲错)
上下键 查找执行过的命令
ctrl +alt linux和Windows之间切换
用户组管理命令
新增 groupadd 组名
删除 groupdel 组名
修改 groupmod -n 新组名 老组名
Shell概述
编程语言分类
(1)编译型语言:
程序在执行之前需要个专门的编译过程,把程序编译成为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依养编译器,跨平台性差些。如C、C++
(2)解释型语言:
程序不需要编译,程序在运行时由解释器翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。比如Python/javaScript/Shell等都是解释型语言。
Shell脚本入门
简单来说脚本就是将需要执行的命令保存到文本中,按照顺序执行,它是解释型的,不需要编译
脚本必须以#!/bin/bash或者#!/bin/env bash开头(指定解析器)
什么时候需要定义变量?
1,如果某个内容需要多次使用,并且在代码中重复出现,在代码修改内容的时候,仅仅需要修改变量的值。
2,在代码运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,
就可以直接使用这个变量。
自定义变量
1.基本语法
(1)定义变量:变量名=变量值
(2)撤销变量:unset 变量名
(3)声明静态变量:readonly变量,注意:不能unset
2.变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
2,特殊变量:$n
基本语法
$n (功能描述:n为数字,$0代表该脚本名称,$1-
9
代
表
第
一
到
第
九
个
参
数
,
十
以
上
的
参
数
,
十
以
上
的
参
数
需
要
用
大
括
号
包
含
,
如
9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如
9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
3,特殊变量:$#
$# (功能描述:获取所有输入参数个数,常用于循环)
4,特殊变量:
∗
、
*、
∗、@
1.基本语法
∗
(
功
能
描
述
:
这
个
变
量
代
表
命
令
行
中
所
有
的
参
数
,
* (功能描述:这个变量代表命令行中所有的参数,
∗(功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@
(
功
能
描
述
:
这
个
变
量
也
代
表
命
令
行
中
所
有
的
参
数
,
不
过
@ (功能描述:这个变量也代表命令行中所有的参数,不过
@(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
5,特殊变量:$?
1.基本语法
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
Shell 中的数组
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
方式2: arr=(value1 value2 value3) (这种方式带值)
注意:往数组里添加值,数组的长度自动增长
案例实操
#!/bin/bash
my_array=(A B “C” D)
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组
读取数组元素值的一般格式是:
$ echo {array_name[index]}
获取数组中的所有元素
使用@ 或 * 可以获取数组中的所有元素,例如:
#!/bin/bash
echo "数组的元素为: ${my_array[]}"
echo “数组的元素为: ${my_array[@]}”
遍历数组
案例实操
#!/bin/bash
arr=(1 2 3 4 5 6 7)
for i in ${arr[]}
do
echo $i
done
运算符
基本语法
(1)“
(
(
运
算
式
)
)
”
或
“
((运算式))”或“
((运算式))”或“[运算式]” + , - , *, /, % 加,减,乘,除,取余
(2)expr + , - , *, /, % 加,减,乘,除,取余
注意:expr运算符间要有空格
案例实操:
(1)计算3+2的值
[jinghang@hadoop101 datas]$ expr 2 + 3
5
(2)计算3-2的值
[jinghang@hadoop101 datas]$ expr 3 - 2
1
(3)计算(2+3)X4的值
(a)expr一步完成计算
[jinghang@hadoop101 datas]$ expr expr 2 + 3
* 4
20
(b)采用KaTeX parse error: Expected 'EOF', got '#' at position 35: …adoop101 datas]#̲ S=[(2+3)*4]
[jinghang@hadoop101 datas]# echo $S
(4)支持小数运算
[jinghang@hadoop101 datas]# echo $(echo “scale=1;
a
+
a+
a+b” | bc)
条件判断
基本语法
[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ jinghang ]返回true,[] 返回false。
2. 常用判断条件
(1)两个整数之间比较
= 字符串比较
-lt 小于(less than) -le 小于等于(less equal)
-eq 等于(equal) -gt 大于(greater than)
-ge 大于等于(greater equal) -ne 不等于(Not equal)
(2)按照文件权限进行判断
-r 有读的权限(read) -w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件(file)
-e 文件存在(existence) -d 文件存在并是一个目录(directory)
流程控制(重点)
基本语法
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格
2.案例实操
(1)输入一个数字,如果是1,则输出banzhang zhen shuai,如果是2,则输出cls zhen mei,如果是其它,什么也不输出。
[jinghang@hadoop101 datas]$ touch if.sh
[jinghang@hadoop101 datas]$ vim if.sh
#!/bin/bash
if [ $1 -eq “1” ]
then
echo “banzhang zhen shuai”
elif [
1
−
e
q
"
2
"
]
t
h
e
n
e
c
h
o
"
c
l
s
z
h
e
n
m
e
i
"
f
i
[
j
i
n
g
h
a
n
g
@
h
a
d
o
o
p
101
d
a
t
a
s
]
1 -eq "2" ] then echo "cls zhen mei" fi [jinghang@hadoop101 datas]
1−eq"2"]thenecho"clszhenmei"fi[jinghang@hadoop101datas] chmod 777 if.sh
[jinghang@hadoop101 datas]$ ./if.sh 1
banzhang zhen shuai
case 语句
1.基本语法
case
变
量
名
i
n
"
值
1
"
)
如
果
变
量
的
值
等
于
值
1
,
则
执
行
程
序
1
;
;
"
值
2
"
)
如
果
变
量
的
值
等
于
值
2
,
则
执
行
程
序
2
;
;
…
省
略
其
他
分
支
…
∗
)
如
果
变
量
的
值
都
不
是
以
上
的
值
,
则
执
行
此
程
序
;
;
e
s
a
c
注
意
事
项
:
1
)
c
a
s
e
行
尾
必
须
为
单
词
“
i
n
”
,
每
一
个
模
式
匹
配
必
须
以
右
括
号
“
)
”
结
束
。
2
)
双
分
号
“
;
;
”
表
示
命
令
序
列
结
束
,
相
当
于
j
a
v
a
中
的
b
r
e
a
k
。
3
)
最
后
的
“
∗
)
”
表
示
默
认
模
式
,
相
当
于
j
a
v
a
中
的
d
e
f
a
u
l
t
。
案
例
实
操
(
1
)
输
入
一
个
数
字
,
如
果
是
1
,
则
输
出
b
a
n
z
h
a
n
g
,
如
果
是
2
,
则
输
出
c
l
s
,
如
果
是
其
它
,
输
出
r
e
n
y
a
o
。
[
j
i
n
g
h
a
n
g
@
h
a
d
o
o
p
101
d
a
t
a
s
]
变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; …省略其他分支… *) 如果变量的值都不是以上的值,则执行此程序 ;; esac 注意事项: 1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。 2)双分号“;;”表示命令序列结束,相当于java中的break。 3)最后的“*)”表示默认模式,相当于java中的default。 案例实操 (1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。 [jinghang@hadoop101 datas]
变量名in"值1")如果变量的值等于值1,则执行程序1;;"值2")如果变量的值等于值2,则执行程序2;;…省略其他分支…∗)如果变量的值都不是以上的值,则执行此程序;;esac注意事项:1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。2)双分号“;;”表示命令序列结束,相当于java中的break。3)最后的“∗)”表示默认模式,相当于java中的default。案例实操(1)输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。[jinghang@hadoop101datas] touch case.sh
[jinghang@hadoop101 datas]$ vim case.sh
!/bin/bash
case $1 in
“1”)
echo “banzhang”
;;
“2”)
echo “cls”
;;
*)
echo “renyao”
;;
esac
[jinghang@hadoop101 datas]$ chmod 777 case.sh
[jinghang@hadoop101 datas]$ ./case.sh 1
1
for 循环
1.基本语法1
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
2.案例实操
(1)从1加到100
[jinghang@hadoop101 datas]$ touch for1.sh
[jinghang@hadoop101 datas]$ vim for1.sh
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s=
[
[
[s+$i]
done
echo $s
[jinghang@hadoop101 datas]$ chmod 777 for1.sh
[jinghang@hadoop101 datas]$ ./for1.sh
“5050”
while 循环
1.基本语法
while [ 条件判断式 ]
do
程序
done
2.案例实操
(1)从1加到100
[jinghang@hadoop101 datas]$ touch while.sh
[jinghang@hadoop101 datas]$ vim while.sh
#!/bin/bash
s=0
i=1
while [
i
−
l
e
100
]
d
o
s
=
i -le 100 ] do s=
i−le100]dos=[
s
+
s+
s+i]
i=
[
[
[i+1]
done
echo
s
[
j
i
n
g
h
a
n
g
@
h
a
d
o
o
p
101
d
a
t
a
s
]
s [jinghang@hadoop101 datas]
s[jinghang@hadoop101datas] chmod 777 while.sh
[jinghang@hadoop101 datas]$ ./while.sh
5050