1.EL和JSTL
EL表达式
1.概念
EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL 出现的目的是要替代jsp页面中输出脚本的编写
2.使用格式
${EL表达式内容}
EL表达式的作用:

  1. 从域对象中查找指定的数据。
  2. 内置对象使用
  3. 执行运算符
    1. EL从四个域中获得某个值: ${key}
  • 同样是依次从pageContext域,request域,session域,application域中 获取属性,在某个域中获取后将不在向后寻找
  • 其中,若只想获得request域中的值:${requestScope.key}
  • 其中,若只想获得session域中的值:${sessionScope.key}
  • 其中,若只想获得application域中的值:${applicatioScope.key}
    1. 3.获取数据
    2. 通过EL表达式,获得普通数据
    3. 格式:${key}
    4. 举例:
    5. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    ```

    取出request域中的数据

    ${requestScope.name}

    取出session域中的数据

    ${sessionScope.name}

    取出servletContext域中的数据

    ${applicationScope.name}

按照域的从小到大依次搜索域数据

${name}

  1. ```
  2. <h1>取出User的数据</h1>
  3. ${user.username}==${user.age}
  1. <h1>取出strList的数据</h1>
  2. ${strList[0]}==${strList[1]}
  1. <h1>取出userList的数据</h1>
  2. ${userList[0].username}==${userList[0].age}<br/>
  3. ${userList[1].username}==${userList[1].age}<br/>
  1. <h1>取出userMap的数据</h1>
  2. ${userMap.user1.username}==${userMap.user1.age}<br/>
  3. ${userMap.user2.username}==${userMap.user2.age}<br/>
  4. ${userMap['user1'].username}==${userMap['user1'].age}<br/>
  5. ${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,其中key是cookie的name,value是cookie对象,例如${cookie.JSESSIONID.value }就是获取sessionId

pageContext:可以获取JSP九大内置对象,相当于使用该对象调用getxxx()方法,例如pageContext.getRequest()可以写为${pageContext.request)

  1. 5.EL执行运算符
  2. 常用运算符
  3. 1. 算数运算符 + - * / %
  1. 逻辑运算符 && || !
  2. 比较运算符 > < >= <=
  3. Null运算符 empty
  4. 三元运算符
    1. 举例
    2. <%@ page import="java.util.ArrayList" %>

<%@ page contentType=”text/html;charset=UTF-8” language=”java” %>

  1. <%
  2. request.setAttribute("str",null);
  3. request.setAttribute("list",new ArrayList<>());
  4. %>
  5. ${empty str}<br>
  6. ${empty list}<br>
  7. ${str == null? "数据为空":str}<br>
  8. </body>
  1. 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标签

  1. 2remove标签
  2. 3url标签:该标签会在需要重写URL时添加。
  3. 4if标签:
  4. 5choose标签
  5. choose标签对应Java中的if/else if/else结构。when标签的testtrue时,会执行这个when的内容。

当所有when标签的test都为false时,才会执行otherwise标签的内容。

  1. 6forEach标签
  2. forEach当前就是循环标签了,forEach标签有多种两种使用方式:

使用循环变量,指定开始和结束值,类似for(int i = 1; i <= 10; i++) {};
循环遍历集合,类似for(Object o : 集合);

  1. 7fmt标签库常用标签:
  2. fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字。
  3. 格式化时间:
  4. 格式化数字:

2.Filter和Listener
1.Filter 过滤器
1.概念
Filter称为过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web服务器所管理的资源(JSP,Servlet,静态图片或静态html文件)进行拦截,从而实现一些特殊的功能。

Filter就是过滤从客户端向服务器发送的请求。对客户端访问的资源过滤,符合条件放行,不符合条件不放行

  1. 2.执行
  2. 3.实现
  3. 通过API描述可知:
  1. 我们创建一个过滤器的话需要实现Filter这个接口
  2. doFilter方法执行过滤器的功能

编写步骤

  1. 编写一个类实现Filter接口
  2. 实现接口中尚未实现的方法(着重实现doFilter方法)
  3. 在web.xml中进行配置或注解方式配置 (目的是配置要对哪些资源进行过滤)
  4. 在doFilter方法中书写过滤任务代码,调用FilterChain.doFilter方法放行,访问servlet
  5. 浏览器访问index.jsp页面,查看过滤器的执行效果

注意事项
过滤器doFilter方法默认拦截请求,如果需要经过过滤器之后,可以继续访问资源,要使用filterChain放行

  1. public class FilterDemo1 implements Filter {
  2. @Override
  3. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  4. System.out.println("每次请求的路径被过滤器拦截的时候,都会执行过滤器的doFilter方法");
  5. //下行代码用来实现过滤放行,去执行后面的Filter或目标资源Servlet、JSP
  6. filterChain.doFilter(servletRequest,servletResponse);
  7. }
  8. @Override
  9. public void init(FilterConfig filterConfig) throws ServletException {
  10. }
  11. @Override
  12. public void destroy() {
  13. }

}

MyFilter1
com.MyFilter1

MyFilter1
/*

@WebFilter(urlPatterns = “/*”)
public class MyFilter1 implements Filter {

  1. @Override
  2. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  3. System.out.println("执行MyFilter1的filter......");
  4. //下行代码用来实现过滤放行,去执行后面的Filter或目标资源Servlet、JSP
  5. filterChain.doFilter(servletRequest,servletResponse);
  6. }
  7. @Override
  8. public void init(FilterConfig filterConfig) throws ServletException {
  9. }
  10. @Override
  11. public void destroy() {
  12. }

}
4.Filter 的API介绍
init(FilterConfig):

  • 描述:
    • Filter对象创建候,立即执行init方法
  • 参数:
    • FilterConfig是Filter的配置对象,该对象可以获得ServletConfig对象
      destory():
  • 描述:
    • Filter对象销毁前执行destory方法
      doFilter(ServletRequest, ServletResponse, FilterChain):
  • 描述:
    • filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法
  • 参数:
    • ServletRequest / ServletResponse:每次在执行doFilter方法时 web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。
      该request与该response就是在访问目标资源的service方法时的request和response。
    • FilterChain:过滤器链对象,通过该对象的doFilter方法可以放行该请求
      5.过滤器链FilterChain
      FilterChain过滤器链:在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称为是一个过滤器链。

Web服务器根据Filter在web.xml文件中的注册顺序(mapping的配置顺序)决定先调用那个Filter。依次调用后面的过滤器,如果没有下一个过滤器,调用目标资源

  1. - web.xml配置的Filter的执行顺序取决于filter-mapping的顺序
  • 注解配置的filter的执行顺序取决于filter的类名称的字母排序
    6.拦截方式dispatcher的配置
    但是我们在访问资源的时候,并不是每次都是直接访问,有时是以转发的方式访问的,这就需要我们要让过滤器可以区分不同的访问资源的方式,有不同的拦截方式。
    dispatcher:访问的方式
  • REQUEST:默认值,代表直接访问某个资源时执行filter
  • FORWARD:转发时才执行filter
    1. @WebFilter(urlPatterns = "/*",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})

public class MyFilter1 implements Filter {
//…
}
2.Listener监听器
1.概念
监听器就是一个实现了特定接口的Java类,这个Java类用于监听另一个Java类的方法调用或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即被执行。
2.术语
- 事件源:指的是被监听对象。

  • 例如,(汽车)
  • 监听器:指的是监听的对象。
    • 例如,(报警器)
  • 事件源和监听器绑定:在事件源上绑定监听器。
    • 例如,(在汽车上安装报警器)
  • 事件:指的是事件源对象的改变

    • 例如,(踹了汽车一脚)——主要功能获得事件源对象。
      1. 3.监听器分类
      2. - 一类:监听三个域对象的创建和销毁的监听器(三个)
  • 二类:监听三个域对象的属性变更(属性添加、移除、替换)的监听器(三个)

  • 三类:监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听(两个)
    4.ServletContextListener监听器
    ServletContextListener监听器作用:
  • 用于监听ServletContext域对象的创建与销毁的监听器

ServletContext域的生命周期:

  • 何时创建:在服务器启动的时候,为每个web应用创建单独的ServletContext对象。
  • 何时销毁:在服务器关闭的时候,或者项目从web服务器中移除的时候。
  • 作用范围:整个web应用

ServletContextListener监听器企业开发用途:

  • 加载框架的配置文件:
  • Spring框架提供了一个核心监听器ContextLoaderListener。
    1. 举例:
    2. /**

ServletContext监听器
事件源:ServletContext
监听器:MyMyServletContextListener
事件源和监听器绑定:通过web.xml配置方式绑定
*/
public class MyServletContextListener implements ServletContextListener{

  1. @Override
  2. public void contextInitialized(ServletContextEvent sce) {
  3. System.out.println("ServletContext对象创建");
  4. ServletContext context = sce.getServletContext();
  5. System.out.println(context);
  6. Object source = sce.getSource();
  7. System.out.println(source);
  8. }
  9. @Override
  10. public void contextDestroyed(ServletContextEvent sce) {
  11. System.out.println("ServletContext对象销毁");
  12. }

}

com.listener.MyServletContextListener

注解方式:

/*
ServletContext监听器
事件源:ServletContext
监听器:MyMyServletContextListener
事件源和监听器绑定:通过注解配置方式绑定
/
@WebListener
public class MyServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println(“ServletContext对象创建的了………”);
}

  1. @Override
  2. public void contextDestroyed(ServletContextEvent servletContextEvent) {
  3. System.out.println("ServletContext对象销毁的了.........");
  4. }

}
创建: tomcat服务器启动的时候, tomcat就会给每一个应用application 项目创建一个ServletContext对象
销毁: tomcat服务器正常停止的时候, 会在销毁的前一秒执行contextDestroryed
5.HttpSessionListener监听器
1.概念
HttpSessionListener监听器作用:

  • 用来监听HttpSession域对象的创建和销毁。

HttpSessionListener域的生命周期:

  • 何时创建:
    • 服务器端第一次调用getSession()方法时候。
  • 何时销毁:

    • 非正常关闭服务器(正常关闭服务器session会被序列化)。
    • Session过期(默认过期时间30分钟)。
    • 手动调用session.invalidate()方法。
      1. 2.举例
      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键:命令或者路径提示及补全;

  1. ctrl+c:放弃当前输入,终止当前任务或程序;
  2. ctrl+l:清屏;
  3. ctrl + insert:复制;
  4. 鼠标右键:粘贴;
  5. alt+c :断开连接 / ctrl + shfit + R 重新连接
  6. alt+1/2/3/4/5… :切换会话窗口
  7. 上下键:查找执行行过的命令,或者是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编辑器

  1. 如果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,替换整个文件的所有匹配

  1. 命令模式/一般模式
  2. p(pause) 将之前ddyy的数据粘贴到光标位置

yy 复制光标所在行

5yy 复制光标及下面共5行

dd 剪切当前行

5dd 剪切光标及下面共5行

  1. 撤销上次操作(扩展---一般模式下)
  2. 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.文件权限
文件权限

  1. 每一段中的内容都是一样的,分别限定:读(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

  1. kill终止进程
  2. 基本语法:

kill -9 pid进程号
选项
-9 表示强迫进程立即停止
netstat显示网络统计信息
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况
安装命令
yum install net-tools

  1. 选项:

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包 的查询命令

  1. 查询已安装的rpm列表
  2. rpm -qa | grep rpm
  3. 查询软件包信息
  4. rpm -qi 软件全包名
  5. 查看一个rpm包中的文件安装到那里去了
  6. rpm -ql 软件全包名
  7. 查看指定文件归属于那个软件包
  8. rpm -qf 文件的全路径
  9. - 第二步: rpm 卸载
  10. # 2 卸载

rpm -e rpm全包名
rpm -e —nodeps rpm全包名
- 第三步: rpm包 的 安装

  1. # 3 安装

rpm -ivh rpm包的全路径
yum
- Yum(全称为 Yellow dog Updater, Modified)本质上 也是一个 软件包管理器。

  • 特点: 基于 RPM 包管理,能够从指定的服务器 自动下载、 自动安装、 自动处理依赖性关系
    1. 安装httpd
    2. 安装

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

  1. 4.配置环境变量
  2. vi /etc/profile
  3. export JAVA_HOME=/usr/java/jdk1.8.0_141/

export CLASSPATH=.:java web 2 - 图2{JAVA_HOME}/lib/dt.jar:java web 2 - 图3PATH:${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日志信息:

  1. ps -ef | grep tomcat
  2. 找到pid
  3. jps 找到pid
  4. kill -9 pid
  5. ./startup.sh && tail -200f ../logs/catalina.out
  6. 安装mysql
  7. 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克隆

  1. 配置克隆后机器
  2. 网络配置文件ifcfg-ens33ip地址
  3. vi /etc/sysconfig/network-scripts/ifcfg-ens33
  4. 重启网卡
  5. systemctl restart network
  6. 检查ip地址是否更变
  7. ip addr
  8. 查看主机名
  9. hostnamectl
  10. 更改主机名
  11. hostnamectl set-hostname xxx
  12. 重启
  13. reboot
  14. 2.关闭防火墙
  15. 1.查看防火墙
  16. systemctl status firewalld
  17. 2.设置防火墙停用状态
  18. systemctl stop firewalld
  19. 3.设置防火墙功能失效,开机自动关闭
  20. systemctl disable firewalld
  21. 3.免密登录 ssh 安全外壳协议
  22. 免密登录的思路
  23. 分别的在centos7-1 centos7-2 centos7-3中配置主机名和ip的映射关系

vi /etc/hosts

  1. 免密登录步骤
  2. 第一步:在三台机器器执行行以下命令,生成公钥与私钥

第二步:将centos7-2和centos7-3的公钥拷贝到centos7-1

第三步:再将centos7-1的公钥分发给centos7-2和centos7-3

  1. 第一步: ssh-keygen -t rsa centos7-1centos7-2centos7-3上面都要执行,产生公钥和私钥
  2. 第二步:在centos7-1 ,centos7-2centos7-3上执行:
  3. ssh-copy-id centos7-1 将公钥拷贝到centos7-1上面去
  4. 第三步:
  5. scp authorized_keys centos7-2:$PWD
  6. scp authorized_keys centos7-3:$PWD
  7. 对称加密 + 非对称加密(公钥 私钥)
  8. ssh centos7-2
  9. 4.时间同步
  10. 通过命名和时钟服务器同步时间:
  11. ntpdate us.pool.ntp.org
  12. 定时任务时间同步
  13. 1.编辑定时任务
  14. crontab -e
  15. 2.设置定时规则
  16. */1 * * * * /usr/sbin/ntpdate us.pool.ntp.org;
  17. 自动生成规则网站: https://cron.qqe2.com/
  18. 3.shell
  19. 1.作用
  20. shell脚本是一个特殊的应用程序,它介于操作系统和系统内核之间,充当一个命令解释器的角色。负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果
  21. 2.编写shell
  22. #!/bin/bash

echo ‘hello lagou’
!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。
3.变量
规则
注意 : 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。

同时,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。
    1. 定义及使用
    2. 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
单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行)
    1. 双引号
    2. 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.运算符
算数运算符

  1. 注意:条件表达式要放在方括号之间,并且要有空格,例如: [$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
关系运算符

  1. 6.流程控制
  2. if语句
  3. 格式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 [ java web 2 - 图4a 大于 100”
fi

需求2: 判断 a 是否等于 b

if [ $a -eq java web 2 - 图5a 等于 java web 2 - 图6a 不等于 $b”
fi

需求3: 判断 a 与 b 比较

if [ $a -lt java web 2 - 图7a 小于 $b”
elif [ $a -eq java web 2 - 图8a 等于 java web 2 - 图9a 大于 $b”
fi

  1. for循环
  2. 格式:

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 [ java web 2 - 图10[ 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 java web 2 - 图11[ 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)
    1. 格式:
    2. [ 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