- 解压缩文件
- 解压缩到指定路径
- 解压缩文件
- 解压缩到指定路径
- 查看编码集 发现不是utf8
- 刷新权限(可选)
- 加法运算
each expr $a + $b - 减法运算
echo expr $a - $b - 乘法运算,注意号前面需要反斜杠
echo expr $a $b - 除法运算
echo $a / $b
关系运算符 - 需求1: 判断 a 是否 100
- 需求2: 判断 a 是否等于 b
- 需求3: 判断 a 与 b 比较
- 需求2: 遍历 1~100
- 需求3: 遍历 1~100之间的奇数
- 需求4: 遍历 根目录 下的内容
- !/bin/bash
- [ i + 1]
if [ $i -eq 10 ]; then
break
fi
done
continue
跳出循环继续下一次循环
#!/bin/bash">!/bin/bash
i=0;
while true; do
sleep 1
echo [ i + 1]
if [ $i -eq 10 ]; then
break
fi
done
continue
跳出循环继续下一次循环
#!/bin/bash - 需求: 打印 1~30, 注意 跳过3的倍数
1.EL和JSTL
EL表达式
1.概念
EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中输出脚本的编写
2.使用格式
${EL表达式内容}
EL表达式的作用:
- 从域对象中查找指定的数据。
- 内置对象使用
- 执行运算符
EL从四个域中获得某个值: ${key}
- 同样是依次从pageContext域,request域,session域,application域中 获取属性,在某个域中获取后将不在向后寻找
- 其中,若只想获得request域中的值:${requestScope.key}
- 其中,若只想获得session域中的值:${sessionScope.key}
- 其中,若只想获得application域中的值:${applicatioScope.key}
```3.获取数据
通过EL表达式,获得普通数据
格式:${key}
举例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
取出request域中的数据
${requestScope.name}取出session域中的数据
${sessionScope.name}取出servletContext域中的数据
${applicationScope.name}
按照域的从小到大依次搜索域数据
${name}
```
<h1>取出User的数据</h1>
${user.username}==${user.age}
<h1>取出strList的数据</h1>
${strList[0]}==${strList[1]}
<h1>取出userList的数据</h1>
${userList[0].username}==${userList[0].age}<br/>
${userList[1].username}==${userList[1].age}<br/>
<h1>取出userMap的数据</h1>
${userMap.user1.username}==${userMap.user1.age}<br/>
${userMap.user2.username}==${userMap.user2.age}<br/>
${userMap['user1'].username}==${userMap['user1'].age}<br/>
${userMap['user2'].username}==${userMap['user2'].age}<br/>
requestScope:获取request域属性,相当于request.getAttribute(“xxx”)
sessionScope:获取session域属性,相当于session.getAttribute(“xxx”)
applicationScope:获取application域属性,相当于application.getAttribute(“xxx”)
param:对应参数,它是一个Map,其中key是参数,value是参数值,适用于单值的参数,相当于request.getParameter(“xxx”)
paramValues:对应参数,她是一个Map,其中key是参数,value是多个参数值,适用于多值的参数,相当于request.getParameterValues(“xxx”)
header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值的请求头,相当于request.getHeader(“xxx”)
headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值的请求头,相当于request.getHeaders(“xxx”)
initParam:获取web.xml中内的参数,${ initParam.xxx},xxx就是标签内的值,进而得到中的值
cookie:用于获取cookie,Map
pageContext:可以获取JSP九大内置对象,相当于使用该对象调用getxxx()方法,例如pageContext.getRequest()可以写为${pageContext.request)
5.EL执行运算符
常用运算符
1. 算数运算符 + - * / %
- 逻辑运算符 && || !
- 比较运算符 > < >= <=
- Null运算符 empty
- 三元运算符
举例
<%@ page import="java.util.ArrayList" %>
<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
<%
request.setAttribute("str",null);
request.setAttribute("list",new ArrayList<>());
%>
${empty str}<br>
${empty list}<br>
${str == null? "数据为空":str}<br>
</body>
core:核心标签库,我们学习的重点;
fmt:格式化标签库,只需要学习两个标签即可;
sql:数据库标签库,不需要学习了,它过时了;
xml:xml标签库,不需要学习了,它过时了。
2.使用
1.导入jar包
-javax.servlet.jsp.jstl.jar
-jstl-impl.jar
2.使用taglib指令在jsp页面导入要使用的jstl标签库
-<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core“ %>
3.在jsp书写”<c:”,看到如下提示,说明安装成功:
3.core标签库常用标签:
(1)out和set标签
(2)remove标签
(3)url标签:该标签会在需要重写URL时添加。
(4)if标签:
(5)choose标签
choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。
当所有when标签的test都为false时,才会执行otherwise标签的内容。
(6)forEach标签
forEach当前就是循环标签了,forEach标签有多种两种使用方式:
使用循环变量,指定开始和结束值,类似for(int i = 1; i <= 10; i++) {};
循环遍历集合,类似for(Object o : 集合);
(7)fmt标签库常用标签:
fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字。
格式化时间:
格式化数字:
2.Filter和Listener
1.Filter 过滤器
1.概念
Filter称为过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web服务器所管理的资源(JSP,Servlet,静态图片或静态html文件)进行拦截,从而实现一些特殊的功能。
Filter就是过滤从客户端向服务器发送的请求。对客户端访问的资源过滤,符合条件放行,不符合条件不放行
2.执行
3.实现
通过API描述可知:
- 我们创建一个过滤器的话需要实现Filter这个接口
- doFilter方法执行过滤器的功能
编写步骤
- 编写一个类实现Filter接口
- 实现接口中尚未实现的方法(着重实现doFilter方法)
- 在web.xml中进行配置或注解方式配置 (目的是配置要对哪些资源进行过滤)
- 在doFilter方法中书写过滤任务代码,调用FilterChain.doFilter方法放行,访问servlet
- 浏览器访问index.jsp页面,查看过滤器的执行效果
注意事项
过滤器doFilter方法默认拦截请求,如果需要经过过滤器之后,可以继续访问资源,要使用filterChain放行
public class FilterDemo1 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("每次请求的路径被过滤器拦截的时候,都会执行过滤器的doFilter方法");
//下行代码用来实现过滤放行,去执行后面的Filter或目标资源Servlet、JSP
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
MyFilter1
com.MyFilter1
MyFilter1
/*
@WebFilter(urlPatterns = “/*”)
public class MyFilter1 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("执行MyFilter1的filter......");
//下行代码用来实现过滤放行,去执行后面的Filter或目标资源Servlet、JSP
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
4.Filter 的API介绍
init(FilterConfig):
- 描述:
- Filter对象创建候,立即执行init方法
- 参数:
- FilterConfig是Filter的配置对象,该对象可以获得ServletConfig对象
destory():
- FilterConfig是Filter的配置对象,该对象可以获得ServletConfig对象
- 描述:
- Filter对象销毁前执行destory方法
doFilter(ServletRequest, ServletResponse, FilterChain):
- Filter对象销毁前执行destory方法
- 描述:
- filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法
- 参数:
- ServletRequest / ServletResponse:每次在执行doFilter方法时 web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。
该request与该response就是在访问目标资源的service方法时的request和response。 - FilterChain:过滤器链对象,通过该对象的doFilter方法可以放行该请求
5.过滤器链FilterChain
FilterChain过滤器链:在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称为是一个过滤器链。
- ServletRequest / ServletResponse:每次在执行doFilter方法时 web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。
Web服务器根据Filter在web.xml文件中的注册顺序(mapping的配置顺序)决定先调用那个Filter。依次调用后面的过滤器,如果没有下一个过滤器,调用目标资源
- web.xml配置的Filter的执行顺序取决于filter-mapping的顺序
- 注解配置的filter的执行顺序取决于filter的类名称的字母排序
6.拦截方式dispatcher的配置
但是我们在访问资源的时候,并不是每次都是直接访问,有时是以转发的方式访问的,这就需要我们要让过滤器可以区分不同的访问资源的方式,有不同的拦截方式。
dispatcher:访问的方式 - REQUEST:默认值,代表直接访问某个资源时执行filter
- FORWARD:转发时才执行filter
@WebFilter(urlPatterns = "/*",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
public class MyFilter1 implements Filter {
//…
}
2.Listener监听器
1.概念
监听器就是一个实现了特定接口的Java类,这个Java类用于监听另一个Java类的方法调用或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即被执行。
2.术语
- 事件源:指的是被监听对象。
- 例如,(汽车)
- 监听器:指的是监听的对象。
- 例如,(报警器)
- 事件源和监听器绑定:在事件源上绑定监听器。
- 例如,(在汽车上安装报警器)
事件:指的是事件源对象的改变
- 例如,(踹了汽车一脚)——主要功能获得事件源对象。
3.监听器分类
- 一类:监听三个域对象的创建和销毁的监听器(三个)
- 例如,(踹了汽车一脚)——主要功能获得事件源对象。
二类:监听三个域对象的属性变更(属性添加、移除、替换)的监听器(三个)
- 三类:监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听(两个)
4.ServletContextListener监听器
ServletContextListener监听器作用: - 用于监听ServletContext域对象的创建与销毁的监听器
ServletContext域的生命周期:
- 何时创建:在服务器启动的时候,为每个web应用创建单独的ServletContext对象。
- 何时销毁:在服务器关闭的时候,或者项目从web服务器中移除的时候。
- 作用范围:整个web应用
ServletContextListener监听器企业开发用途:
- 加载框架的配置文件:
- Spring框架提供了一个核心监听器ContextLoaderListener。
举例:
/**
ServletContext监听器
事件源:ServletContext
监听器:MyMyServletContextListener
事件源和监听器绑定:通过web.xml配置方式绑定
*/
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext对象创建");
ServletContext context = sce.getServletContext();
System.out.println(context);
Object source = sce.getSource();
System.out.println(source);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext对象销毁");
}
}
com.listener.MyServletContextListener
注解方式:
/*
ServletContext监听器
事件源:ServletContext
监听器:MyMyServletContextListener
事件源和监听器绑定:通过注解配置方式绑定
/
@WebListener
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println(“ServletContext对象创建的了………”);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext对象销毁的了.........");
}
}
创建: tomcat服务器启动的时候, tomcat就会给每一个应用application 项目创建一个ServletContext对象
销毁: tomcat服务器正常停止的时候, 会在销毁的前一秒执行contextDestroryed
5.HttpSessionListener监听器
1.概念
HttpSessionListener监听器作用:
- 用来监听HttpSession域对象的创建和销毁。
HttpSessionListener域的生命周期:
- 何时创建:
- 服务器端第一次调用getSession()方法时候。
何时销毁:
- 非正常关闭服务器(正常关闭服务器session会被序列化)。
- Session过期(默认过期时间30分钟)。
- 手动调用session.invalidate()方法。
2.举例
/**
监听HttpSession的创建和销毁的监听器
*/
public class MyHttpSessionListener implements HttpSessionListener{
@Override
// 监听HttpSession的创建
public void sessionCreated(HttpSessionEvent se) {
System.out.println(“HttpSession对象被创建了…”);
}
@Override
// 监听HttpSession的销毁
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println(“HttpSession对象被销毁了…”);
}
}
com.listener.MyHttpSessionListener
session什么时候创建: 1.访问Servlet的时候会创建吗?
2.访问jsp页面的时候会不会创建
Servlet不会
Servlet中只有执行 request.getSession()
jsp会
因为在jsp页面中有内置对象session
内置对象Servlet : 里面初始化的时候就执行了 session = request.getSession();
session什么时候销毁:
配置web.xml的时候 session-timeout 1
6.监听request的创建与销毁的ServletRequestListener
创建
只要有请求: 不管请求什么资源都会创建request对象
销毁
只要有响应,请求对象就会销毁
7.监听web上下文属性的增加、删除、属性值变化的ServletContextAttributeListener
HttpSessionContexctAttributeListener
RequestAttributeListener
3.Linux系统概述和编程基础
1.linux基本命令
1)常使用快捷键
1) tab键:命令或者路径提示及补全;
- ctrl+c:放弃当前输入,终止当前任务或程序;
- ctrl+l:清屏;
- ctrl + insert:复制;
- 鼠标右键:粘贴;
- alt+c :断开连接 / ctrl + shfit + R 重新连接
- alt+1/2/3/4/5… :切换会话窗口
- 上下键:查找执行行过的命令,或者是history命令
2.常用命令
cd 切换目录
cd .. 切换到上级目录
cd - 后退到上一次所在目录
cd ~ 跳到home目录
pwd 展示当前目录
ls 查看目录 ( ll )
a(all) 功能: 所有
h(human) 功能: 人性化的显示(单位: K,G等)
R 树结构显示某文件夹下的所有文件
touch 创建文件
touch a.txt b.txt c.txt
mkdir 要创建的目录
-p 可以递归创建目录
mkdir -p aa/bb/cc
rmdir 删除目录
如果该目录中存在文件或其他目录是该命令是不能删除的.
rm [-参数] 文件/目录
-f force (强制)
-r recursive (递归)
注意: rm删除的时候非常危险,因为权限太大的话,所有文件都能删除
cp 复制文件/目录
cp source dest (功能描述:复制source文件到dest)
-r recursive (递归)
mv 移动 文件 或 目录, 也可以给 文件或目录重命名
(1)mv oldNameFile newNameFile (功能描述:重命名)
(2)mv /temp/movefile /targetFolder (功能描述:递归移动文件)
cat [选项] 要查看的文件
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-E :将结尾的断行行字节 $ 显示出来;
-n :列出行号,连同空白行也会有行号,与 -b 的选项不不同;
-T :将 [tab] 按键以 ^I 显示出来;
-v :列出一些看不出来的特殊字符
-A :相当于 -vET 的整合选项,可列列出一些特殊字符而不不是空白而已;
more 要查看的文件
空格键 (space):代表向下翻一页;
Enter:代表向下翻『一行』;
q代表立刻离开 more ,不再显示该文件内容。
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
less 要查看的文件
空格键 :向下翻动一页;
[pagedown]:向下翻动一页;
[pageup] :向上翻动一页;
/字符串 :向下搜寻『字符串』的功能;n:向下查找;N:向上查找;
q :离开 less 这个程序;
head 查看文件内容,只看头几行
head 文件名 :查看前10行
head -n 3 文件名 :查看文件的前3行
head -c 3 文件名 :查看文件的前3个字符
tail 查看文件内容,只看尾巴几行行
(1)tail -n 10 文件 (功能描述:查看文件头(从末尾开始数)10行行内容,10可以是任意行行数)
(2)tail -f 文件 (功能描述:实时追踪该文档的所有更更新)
> 重定向输出
cat /etc/password > a.txt
特点清空原有内容
>> 重定向输出追加
cat /etc/password >> a.txt
在原有内容后追加
管道符号| 的作用是: 将一个命令的输出作为另一个命令的输入.
ls —help | more 分页查看帮助信息
ps -ef | grep java 查找java进程
逻辑控制&&
./startup.sh && tail -100f catalina.out
history 查看历史命令
2.打包解包
打包
tar 打包命令格式
tar -cvf 打包名.tar 被打包的目录
tar -cvf 打包名.tar 被打包的文件1 被打包的文件2 被打包的文件3
c 生成档案文件, 创建打包文件
v 报告进度
f 指定档案的文件名称, f后面一定是 .tar 文件, 所以必须放到左后
解包
tar 解包命令格式
tar -xvf 打包名.tar
tar -xvf 打包名.tar -C 解包路径位置
x extract (提取) 解包
C (大写C) 默认保存到当前目录, 通过-C 更改解压目录, 注意: 解压目录必须存在
gzip压缩和解压缩
# 压缩文件
tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录
解压缩文件
tar -zxvf 打包文件.tar.gz
解压缩到指定路径
tar -zxvf 打包文件.tar.gz -C 目录路径
z 使用gzip压缩和解压缩
bzip2 格式 压缩 和 解压缩
# 压缩文件
tar -jcvf 打包压缩文件名.tar.bz2 被压缩的文件/目录
解压缩文件
tar -jxvf 打包文件.tar.bz2
解压缩到指定路径
tar -jxvf 打包文件.tar.bz2 -C 目录路径
要安装bzip2的包
yum install -y bzip2
j 使用bzip2压缩和解压缩
3.日期时间
显示的是字符串串描述的时间
(1)date (功能描述:显示当前时间)
(2)date +%Y (功能描述:显示当前年年份)
(3)date +%m (功能描述:显示当前月份)
(4)date +%d (功能描述:显示当前是哪一天)
(5)date +%Y%m%d … (功能描述:显示当前年年月日各种格式 )
(6)date “+%Y-%m-%d %H:%M:%S” 或者单引号也可以 (功能描述:显示年⽉日时分秒)
设置系统时间
date -s 字符串时间
[root@hadoop106 /]# date -s “2020-06-20 20:52:18”
cal查看日历
cal [选项] (功能描述:不加选项,显示本月日历)
[root@linux121 /]# cal
[root@linux121 /]# cal -3
[root@linux121 /]# cal 2020
4.搜索查找
find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。
基本格式:find path [options]
按照文件名查找
(1)find /etc -name yum.conf #在/etc目录下文件yum.conf
(2)find /etc -name ‘yum’ #使用通配符(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘yum’的文件
(3)find . -name ‘yum‘ #表示当前目录下查找文件名开头是字符串‘yum’的文件
按照文件特征查找
(1)find / -atime -2 # 查找在系统中最后48小时访问的文件 (Access Time,文件读取访问时间)
(2)find / -empty # 查找在系统中为空的文件或者文件夹
(3)find / -group susan # 查找在系统中属于group为susan的文件
(4)find / -mtime -1 #查找在系统中最后24小时里修改过的文件 (modify time)
(5)find / -user susan #查找在系统中属于susan这个用户的文件
(6)find / -size +10000c #查找出大于10000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)
(7)find / -size -1000k #查找出小于1000KB的文件
grep 过滤查找
基本格式:grep [options] 范围
主要参数:
[options]主要参数:
-c:只输出匹配行的计数。
-i:不区分大小写
-n:显示匹配行及行号。
-w:显示整个单词
-r:递归查询
ps -ef | grep java
jps
查找正在运行的java进程
5.vi编辑器
如果vim命令不能使用需要安装:
yum -y install vim-enhanced
编辑模式
命令模式按下:i、o、a进入编辑模式:
i:光标不动
o:另起一行
a:光标到下一个字符
按ESC退出编辑模式,进入命令模式
底行模式
命令模式下,按‘:’或者‘/’进入底行模式,可以输入命令
1)退出vim:(重点重点重点)
:q 未编辑时退出vim
:q! 编辑后,退出并且不保存
:wq 编辑后,退出且保存
:x 编译后保存
2)设置行号(了解) 底行模式
:set nu 显示行号
:set nonu 不显示行号
3)替换文本(了解)
:s/old/new/ 用new替换old,替换当前行的第一个匹配
:s/old/new/g 用new替换old,替换当前行的所有匹配
:%s/old/new/ 用new替换old,替换所有行的第一个匹配
:%s/old/new/g 用new替换old,替换整个文件的所有匹配
命令模式/一般模式
p(pause) 将之前dd或yy的数据粘贴到光标位置
yy 复制光标所在行
5yy 复制光标及下面共5行
dd 剪切当前行
5dd 剪切光标及下面共5行
撤销上次操作(扩展---一般模式下)
u 撤销上一次操作(ctrl + z windows操作)
ctrl + r 恢复上一次被撤销的操作 (ctrl + y windows操作)
6.用户及用户组
useradd 添加新用户
格式: useradd 用户名 (功能描述:添加新用户)
[root@linux121 ~]# useradd hadoop
passwd 设置用户密码
格式: passwd 用户名 (功能描述:设置用户密码)
[root@linux121 ~]# passwd hadoop
id 判断用户是否存在
格式: id 用户名
[root@linux121 ~]#id hadoop
su 切换用户
su 用户名称 (功能描述:切换用户,只能获得用户的执行行权限,不能获得环境变量)
su - 用户名称 (功能描述:切换到用户并获得该用户的环境变量及执行权限)
[root@linux121 ~]#su hadoop
[root@linux121 ~]#su - hadoop
userdel 删除用户
(1)userdel 用户名 (功能描述:删除用户但保存用户主目录)
(2)userdel -r 用户名 (功能描述:用户和用户主目录,都删除)
(1)删除用户但保存用户主目录
[root@linux121 ~]#userdel hadoop
(2)删除用户和用户主目录,都删除
[root@linux121 ~]#userdel -r hadoop
查看登录用户信息
基本用法:
(1)whoami (功能描述:显示自身用户名称)
(2)who am i (功能描述:显示登录用户的用户名)
(3)who (功能描述:看当前有哪些用户登录到了了本台机器器上)
sudo命令
允许系统管理员让普通用户执行一些或者全部的root命令的一个工具
#不切换root用户,也可以完成添加用户的功能
sudo useradd lisi
sudo passwd lisi
groupadd 新增组
基本语法
groupadd 组名
[root@linux121 ~]#groupadd hadoop
groupdel删除组
基本语法:
groupdel 组名
[root@linux121 ~]# groupdel hadoop
groupmod修改组
基本用法:
groupmod -n 新组名 老组名
修改hadoop组名称为hadoop1
[root@linux121 hadoop]# groupmod -n hadoop1 hadoop
cat /etc/group 查看创建了哪些组
usermod修改用户
基本用法:
usermod -g 用户组 用户名
将用户hadoop加入mygroup用户组
[root@linux121 ~]#usermod -g mygroup hadoop
7.文件权限
文件权限
每一段中的内容都是一样的,分别限定:读(r=4)、写(w=2)、执行(x=1)
rwx 7 具备所有权限(421)
rw- 6 具备读写权限(420)
r-x 5 具备读和执行权限(401)
r— 4 具备只读权限(400)
-wx 3 具备写和执行权限(021)
-w- 2 具备写权限(020)
—x 1 具备执行权限(001)
—- 0 000
chmod 修改文件权限
chmod 777 1.txt
chmod u=rwx,g=rx,o=rx 1.txt
chown改变所有者
基本用法:
chown 最终用户 (功能描述:改变文件或者目录的所有者)
文件所有者修改为hadoop用户
chown hadoop test1.txt
chgrp改变所属组
基本用法:
chgrp 最终用户组 (功能描述:改变文件或者目录的所属组)
修改test1.txt为hadoop组
[root@linux121 test]# chgrp hadoop test1.txt
8.系统管理与进程管理
ps 进程是正在执行的一个程序或命令
基本用法:
ps -aux (功能描述:查看系统中所有进程)
a 显示终端上的所有进程, 包括其他用户的进程
u 显示进程的详细状态
x 显示没有控制终端的进程
ps -ef
top查看系统状态
基本用法:
top [选项]
(1)选项:
-d 秒数:指定top命令每隔几秒更新。默认是3秒。
-i:使top不显示任何闲置或者僵死进程。
-p:通过指定监控进程ID来仅仅监控某个进程的状态。
( 2)操作选项,即在执行top命令之后,与top命令进行交互:
P: 以CPU使用率排序,默认就是此项
M:以内存的使用率排序
N: 以PID排序
q: 退出top
kill终止进程
基本语法:
kill -9 pid进程号
选项
-9 表示强迫进程立即停止
netstat显示网络统计信息
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况
安装命令
yum install net-tools
选项:
NETSTAT [-a] [-b] [-e] [-n] [-o] [-p proto] [-r] [-s] [-v] [interval]
-a 显示所有连接和监听端口。
-e 显示以太网统计信息。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和
广播的数量
-n 以数字形式显示地址和端口号。
-o 显示与每个连接相关的所属进程 ID 。
-p proto 显示 proto 指定的协议的连接;proto 可以是下列协议之一: TCP 、UDP 、TCPv6 或 UDPv6 。
查看端口22的使用情况
[root@linux121 hadoop-2.7.2]# netstat -anp | grep 22
4.开发环境搭建和Shell编程
1.软件安装
rpm
RPM 是Red-Hat Package Manager(RPM软件包管理器)的缩写
通过 rpm命令 实现对软件 的安装、查询、卸载
实现:
- 第一步: rpm包 的查询命令
查询已安装的rpm列表
rpm -qa | grep rpm包
查询软件包信息
rpm -qi 软件全包名
查看一个rpm包中的文件安装到那里去了
rpm -ql 软件全包名
查看指定文件归属于那个软件包
rpm -qf 文件的全路径
- 第二步: rpm包 的 卸载
# 2 卸载
rpm -e rpm全包名
rpm -e —nodeps rpm全包名
- 第三步: rpm包 的 安装
# 3 安装
rpm -ivh rpm包的全路径
yum
- Yum(全称为 Yellow dog Updater, Modified)本质上 也是一个 软件包管理器。
- 特点: 基于 RPM 包管理,能够从指定的服务器 自动下载、 自动安装、 自动处理依赖性关系
安装httpd
安装
yum -y install httpd
启动
service httpd start
测试
http://192.168.80.100:80
关闭防火墙
systemctl stop firewalld
安装jdk
1.查看以前是不是安装了openjdk
rpm -qa | grep java
2.卸载openjdk
rpm -e —nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686
rpm -e —nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.i686
rpm -e —nodeps tzdata-java-2013g-1.el6.noarch
参数:
-e erase package(uninstall) 移除包(卸载)
—nodeps do not verify package dependencies 不要验证包依赖关系
3.安装jdk
(1)、切换到root用户并进入usr目录: cd /usr
(2)、在usr目录下创建java文件夹: mkdir java
(3)、将jdk-8u81-linux-x64.tar.gz拷贝或上传到java目录下(也可以用工具)
(4)、进入/usr/java文件夹下:cd /usr/java/
(5)、修改权限,参数“jdk-7u71-linux-x64.tar.gz”为你自己上传的jdk安装文件 chmod 755 jdk-7u71-linux-x64.tar.gz
(6)、解压:tar –zxvf jdk-7u71-linux-x64.tar.gz
4.配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_141/
export CLASSPATH=.:{JAVA_HOME}/lib/dt.jar:PATH:${JAVA_HOME}/bin
重新编译环境变量
source /etc/profile
安装tomcat
1、创建安装目录:mkdir /usr/tomcat
2、给apache-tomcat-7.0.57.tar.gz 文件权限
3、解压tomcat压缩文件:tar -zxvf apache-tomcat-7.0.57.tar.gz -C /user/tomcat
注意,这里也可以只打开tomcat所需端口:8080
4、启动tomcat:
进入tomcat的bin目录:cd /usr/tomcat/apache-tomcat-7.0.57/bin/
启动tomcat web服务器:./startup.sh
访问:192.168.80.100:8080
5、停止tomcat ./shutdown.sh
6、查看tomcat日志信息:
ps -ef | grep tomcat
找到pid
jps 找到pid
kill -9 pid
./startup.sh && tail -200f ../logs/catalina.out
安装mysql
1.查看yum源仓库
ll /etc/yum.repos.d/
2.下载rpm包
wget -P /usr/software http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
3.rpm方式安装mysql
cd /usr/software
rpm -ivh mysql-community-release-el6-5.noarch.rpm
4.yum安装mysql
yum -y install mysql-community-server
5.启动mysql
service mysqld start
如果出现:serivce: command not found
安装service
yum install initscripts
6.修改密码
# 设置密码
/usr/bin/mysqladmin -u root password ‘123’
7.修改字符集
# 进入mysql
mysql -uroot -p123
查看编码集 发现不是utf8
show variables like ‘characterset%’;
修改字符集
# 修改mysql 软件的编码集
[root@Hadoop-NN-01 ~]# vi /etc/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
[root@Hadoop-NN-01 ~]# service mysqld restart
8.配置远程连接
# 给root授权:既可以本地访问, 也可以远程访问
grant all privileges on . to ‘root’@’%’ identified by ‘123’ with grant option;
刷新权限(可选)
flush privileges;
2.补充内容
1.克隆操作
vm克隆
配置克隆后机器
网络配置文件ifcfg-ens33的ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
重启网卡
systemctl restart network
检查ip地址是否更变
ip addr
查看主机名
hostnamectl
更改主机名
hostnamectl set-hostname xxx
重启
reboot
2.关闭防火墙
1.查看防火墙
systemctl status firewalld
2.设置防火墙停用状态
systemctl stop firewalld
3.设置防火墙功能失效,开机自动关闭
systemctl disable firewalld
3.免密登录 ssh 安全外壳协议
免密登录的思路
分别的在centos7-1 centos7-2 centos7-3中配置主机名和ip的映射关系
vi /etc/hosts
免密登录步骤
第一步:在三台机器器执行行以下命令,生成公钥与私钥
第二步:将centos7-2和centos7-3的公钥拷贝到centos7-1
第三步:再将centos7-1的公钥分发给centos7-2和centos7-3
第一步: ssh-keygen -t rsa 在centos7-1和centos7-2和centos7-3上面都要执行,产生公钥和私钥
第二步:在centos7-1 ,centos7-2和centos7-3上执行:
ssh-copy-id centos7-1 将公钥拷贝到centos7-1上面去
第三步:
scp authorized_keys centos7-2:$PWD
scp authorized_keys centos7-3:$PWD
对称加密 + 非对称加密(公钥 私钥)
ssh centos7-2
4.时间同步
通过命名和时钟服务器同步时间:
ntpdate us.pool.ntp.org
定时任务时间同步
1.编辑定时任务
crontab -e
2.设置定时规则
*/1 * * * * /usr/sbin/ntpdate us.pool.ntp.org;
自动生成规则网站: https://cron.qqe2.com/
3.shell
1.作用
shell脚本是一个特殊的应用程序,它介于操作系统和系统内核之间,充当一个命令解释器的角色。负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果
2.编写shell
#!/bin/bash
echo ‘hello lagou’
!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
3.变量
规则
注意 : 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。
同时,变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
定义及使用
your_name="tom"
echo $your_name
echo ${your_name}
只读变量
readonly 变量名
username=tom
readonly username
username=jack 报错 /bin/sh: NAME: This variable is read only.
删除变量
unset variable_name
unset命令不能删除只读变量
4.字符串
单引号
skill=’java’
str=’I am goot at $skill’
echo $str
输出结果: I am goot at $skill
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行)
双引号
skill='java'
str=”I am goot at $skill”
echo $str
输出结果:I am goot at java
- 双引号里可以有变量
- 双引号里可以出现转义字符
获取长度
skill=’java’
echo ${skill} # 输出结果: java
echo ${#skill} # 输出结果: 4
提取字符串
skill=’java’
echo ${skill} # 输出结果: java
echo str” o`
5.运算符
算数运算符
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b]是错误的,
必须写成[ $a == $b ]
#!/bin/bash
a=4
b=20
加法运算
each expr $a + $b
减法运算
echo expr $a - $b
乘法运算,注意号前面需要反斜杠
echo expr $a $b
除法运算
echo $a / $b
关系运算符
6.流程控制
if语句
格式1:
if condition
then
command1
command2
…
commandN
fi
格式2:
if condition
then
command1
command2
…
commandN
else
command
fi
[root@hadoop01 export]# cat if_test.sh
#!/bin/bash
a=20
b=10
需求1: 判断 a 是否 100
if [ a 大于 100”
fi
需求2: 判断 a 是否等于 b
if [ $a -eq a 等于 a 不等于 $b”
fi
需求3: 判断 a 与 b 比较
if [ $a -lt a 小于 $b”
elif [ $a -eq a 等于 a 大于 $b”
fi
for循环
格式:
for variable in (list); do
command
command
…
done
# 需求1: 遍历 1~5
for i in 1 2 3 4 5; do
echo $i;
done
需求2: 遍历 1~100
for i in {1..100}; do
echo $i
done
需求3: 遍历 1~100之间的奇数
for i in {1..100..2}; do
echo $i
done
需求4: 遍历 根目录 下的内容
for f in ls /
; do
echo $f
done
while循环
格式:
while condition; do
command
done
计算 1~100 的和
!/bin/bash
sum=0
i=1
while [ [ sum + i]
i=$[ i + 1 ]
done
echo $sum
case语句
格式:
case 值 in
模式1)
command1
command2
…
commandN
;;
模式2)
command1
command2
…
commandN
;;
esac
练习:
echo ‘输入 1 到 4 之间的数字:’
read aNum
case $aNum in
1) echo ‘你选择了 1’
;;
2) echo ‘你选择了 2’
;;
3) echo ‘你选择了 3’
;;
4) echo ‘你选择了 4’
;;
*) echo ‘你没有输入 1 到 4 之间的数字’
;;
esac
break
break命令允许跳出所有循环(终止执行后面的所有循环)。
需求: 执行死循环 每隔1秒打印当前时间, 执行10次停止
!/bin/bash
i=0;
while true; do
sleep 1
echo [ i + 1]
if [ $i -eq 10 ]; then
break
fi
done
continue
跳出循环继续下一次循环
#!/bin/bash
需求: 打印 1~30, 注意 跳过3的倍数
for i in {1..30}; do
if test $[ i % 3 ] -eq 0; then
continue
fi
echo $i
done
7.函数
1.定义函数
[ function ] funname()
{
action;
[return int;]
}
2.快速入门
- 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后
跟数值n(0-255)格式:
[ function ] funname()
{
action;
[return int;]
}
#!/bin/bash
demoFun(){
echo “这是我的第一个 shell 函数!”
}
echo “——-函数开始执行——-“
demoFun
echo “——-函数执行完毕——-“
3.参数传递
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 n 的形式来获取参数的值,例如,1表示第一个参数,$2表示第二个参数..
#!/bin/bash
funWithParam(){
echo “第一个参数为 $1 !”
echo “第二个参数为 $2 !”
echo “第十个参数为 $10 !”
echo “第十个参数为 ${10} !”
echo “第十一个参数为 ${11} !”
echo “参数总数有 $# 个!”
echo “作为一个字符串输出所有参数 $* !”
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73