Skip to content

Linux

注意:需要开启虚拟化

  1. 确认 Windows 服务当中的虚拟化有没有开 - 扩展资料
  2. BIOS 设置虚拟化打开 - 问百度
  3. 如何查看虚拟化是否成功开启: LeoMoon/securable

Linux导论

Linux概述

Linux 是基于 Unix 的开源免费多用户多任务的操作系统,由于系统的稳定性安全性。几乎成为程序代码运行的最佳系统环境。

Windows的不足

  • Windows 是需要花钱去购买
  • 系统长时间运行,安装软件多了,系统越来越慢,越来越不稳定。
  • 病毒和流氓软件很多

Linux的优势

  • Linux 系统是免费,很多还是开源的。
  • 长时间运行,很稳定的
  • 几乎没有病毒和流氓软件

Linux的发展

tux

Linux 最初是由芬兰赫尔辛基大学 学生 Linus Torvalds 开发的,由于自己不满意教学中使用的 MINIX 操作系统,所以在 1990 年底由于个人爱好设计出了 Linux 系统核心。

后来发布于芬兰最大的 ftp 服务器上,用户可以免费下载,所以它的周边的程序越来越多,Linux 本身也逐渐发展壮大起来,之后 Linux 在不到三年的时间里成为了一个功能完善,稳定可靠的操作系统。

Linux的分类

用户界面支持程度
  • 图形界面版

    image-20190415192245916

  • 服务器版

    image-20190415192313520

原生程度
  • 内核版本

    20190415191717561

  • 发行版本

    20190415191858784

安装虚拟机软件并创建虚拟机 - VirtualBox

安装虚拟机软件

VirtualBox

VMWare

  • step 1

    VirtualBox-Installation-Step-1

  • step 2

    VirtualBox-Installation-Step-2

  • step 3

    VirtualBox-Installation-Step-3

  • step 4

    VirtualBox-Installation-Step-4

  • step 5

    VirtualBox-Installation-Step-5

  • step 6

    VirtualBox-Installation-Step-6

  • step 7

    VirtualBox-Installation-Step-7

  • step 8

    VirtualBox-Installation-Step-8

创建虚拟机

  • step 1

    Machine-Installation-Step-1

  • step 2

    Machine-Installation-Step-2

  • step 3

    Machine-Installation-Step-3

  • step 4

    Machine-Installation-Step-4

  • step 5

    Machine-Installation-Step-5

  • step 6

    Machine-Installation-Step-6

  • step 7

    Machine-Installation-Step-7

CentOS虚拟机配置

  • step 1

    CentOS-Configuration-Step-1

  • step 2

    CentOS-Configuration-Step-2

  • step 3

    CentOS-Configuration-Step-3

  • step 4

    CentOS-Configuration-Step-4

  • step 5

    CentOS-Configuration-Step-5

  • step 6

    CentOS-Configuration-Step-6

  • step 7

    Machine-Installation-Step-7

安装CentOS 7

  • step 1

    CentOS-Installation-Step-1

  • step 2

    CentOS-Installation-Step-2

  • step 3

    CentOS-Installation-Step-3

  • step 4

    CentOS-Installation-Step-4

  • step 5

    CentOS-Installation-Step-5

  • step 6

    CentOS-Installation-Step-6

  • step 7

    CentOS-Installation-Step-7

  • step 8

    注意

    两个网卡做同样的设置

    CentOS-Installation-Step-8

  • step 9

    注意

    两个网卡做同样的设置

    CentOS-Installation-Step-9

  • step 10

    CentOS-Installation-Step-10

  • step 11

    CentOS-Installation-Step-11

  • step 12

    CentOS-Installation-Step-12

  • step 13

    CentOS-Installation-Step-13

启动CentOS 7

  • step 1

    Machine-Installation-Step-7

  • step 2

    CentOS-Startup-Step-2

  • step 3

    CentOS-Startup-Step-3

  • step 4

    CentOS-Startup-Step-4

获取CentOS IP地址

在虚拟机登录CentOS,输入以下命令

  • ifconfig
  • ip addr

安装虚拟机软件并创建虚拟机 - VMWare

安装虚拟机软件

  • step 1

    VMWare-Installation-Step-1

  • step 2

    VMWare-Installation-Step-2

  • step 3

    VMWare-Installation-Step-3

  • step 4

    VMWare-Installation-Step-4

  • step 5

    VMWare-Installation-Step-5

  • step 6

    VMWare-Installation-Step-6

  • step 7

    VMWare-Installation-Step-7

  • step 8

    VMWare-Installation-Step-8

  • step 9

    VMWare-Installation-Step-9

  • step 10

点击许可证,将许可证粘贴至窗口

  • step 11

    VMWare-Installation-Step-11

  • step 12

双击启动虚拟机软件

VMWare-Installation-Step-12

创建虚拟机

  • step 1

    VMMachine-Installation-Step-1.jpg

  • step 2

    VMMachine-Installation-Step-2.jpg

  • step 3

    VMMachine-Installation-Step-3.jpg

  • step 4

    VMMachine-Installation-Step-4.jpg

  • step 5

    VMMachine-Installation-Step-5.jpg

  • step 6

    VMMachine-Installation-Step-6.jpg

  • step 7

    VMMachine-Installation-Step-7.jpg

  • step 8

    VMMachine-Installation-Step-8.jpg

  • step 9

    VMMachine-Installation-Step-9.jpg

CentOS虚拟机配置

  • step 1

    VM-CentOS-Configuration-Step-1.jpg

  • step 2

    VM-CentOS-Configuration-Step-2.jpg

  • step 3

    VM-CentOS-Configuration-Step-3.jpg

  • step 4

    VM-CentOS-Configuration-Step-4.jpg

  • step 5

    VM-CentOS-Configuration-Step-5.jpg

  • step 6

    VM-CentOS-Configuration-Step-6.jpg

安装CentOS 7

与VirtualBox安装方式一致,但VMWare虚拟机安装CentOS 7只需要配置一张网卡

获取CentOS IP地址

与VirtualBox获取方式一致,但VMWare虚拟机获取的IP地址只有一个。使用虚拟机软件连接时,连接的就是这个网址。

VMWare-IP

查看CentOS 版本号

cat /etc/redhat-release

使用客户端连接Linux

1567042234526

软件下载和安装

  1. 官网免费下载 https://mobaxterm.mobatek.net

1567041150123

  1. 无需安装,直接解压就可以使用

1567041016921

客户端连接服务器

  1. 点左上角的 Session 创建一个会话连接

1567042164375

  1. 在如下窗体中进行会话的设置

1567042210491

  1. 第 1 次连接,需要输入密码

1567042234526

使用客户端传输文件

1567042652103

做个快照

Linux 入门

Linux 目录结构

与 Windows 操作系统不同,Windows 中最上面是盘符。在 Linux 中没有盘符概念,最顶层是根目录/。

Linux-Path-Structure

常用目录说明
root管理员所在目录
home普通用户的主目录
bin所有的命令可执行文件所在目录
etc系统配置文件所在的目录
usrUnix Share Resource,资源目录,很多软件就安装在这个目录下

Linux命令提示符

Linux-Command-Prompt

目录操作命令【重点】

  • 【重点】cd [OPTION] [DIR]

    Change the current directory to dir, 切换当前路径

    dir

    • .

      当前目录

    • ..

      上一级目录

    • ~

      用户主目录

      上一次的目录

    操作演示

    • 切换到系统根目录

      tex
      cd /
    • 切换到该目录下 usr 目录

      tex
      cd usr
    • 切换到上一层目录

      tex
      cd ..
    • 切换到用户主目录,如果是 root 管理员,则是到 root 目录

      tex
      cd /root
      或:
      cd ~
    • 切换到上一个所在的目录

      tex
      cd -
  • 【重点】mkdir [OPTION] DIRECTORY

    Make directories, 创建目录

    操作演示

    • 进入 root 目录

      tex
      cd /root
    • 在 root 目录下创建 aaa 目录

      tex
      mkdir aaa
    • 使用.方式的相对路径,在当前目录下创建 bbb 目录

      tex
      mkdir ./bbb
    • 在 root 目录下,在 bbb 目录下创建 ccc 目录

      tex
      mkdir bbb/ccc
    • 使用..在上一级目录下创建 eee 目录

      tex
      mkdir ../eee
    • 使用绝对路径在 root 下创建目录 fff 目录

      tex
      mkdir /root/fff
  • 【重点】ls [OPTION] [FILE]

    List directory contents, 显示目录内容

    参数

    • -l

      以详细的方式显示文件和目录。ls -l可以缩写成ll

    • -a

      显示所有的文件和目录包含隐藏的文件和目录

      隐藏的文件和目录以 . 开头

    操作演示

    • 进入 root 目录,以精简形式查询当前目录下的内容

      tex
      cd ~
      ls
    • 以详细形式查询当前目录下的内容,可以缩写成 ll

      tex
      ls -l
    • 在当前目录下创建一个隐藏的目录.ccc

      tex
      mkdir .ccc
    • 以精简形式查询当前目录下的所有的内容,包含隐藏文件

      tex
      ls -a
    • 以详细形式查询当前目录下的隐藏内容,-la 和-al 都可,也可以使用 ll -a

      tex
      ls -al
      ls -la
      ll -a

第一列字母含义

字母含义
ddirectory, 目录
-文件
l链接,类似快捷方式

文件列表含义

ls-Explain

Linux配色说明

颜色说明
白色普通文件
深蓝色目录
绿色可执行文件
红色压缩包
青色链接,类似于快捷方式
橙色设备文件
  • 【重点】find <PATH> [-name PATTERN]

    search for files in a directory hierarchy, 搜索目录树上的所有文件

    参数

    • -name pattern

      指定要查询的字符串

      * 匹配多个字符

      ? 匹配 1 个字符

    • -exec utility [argument ...] ;

      True if the program named utility returns a zero value as its exit status. Optional arguments may be passed to the utility. The expression must be terminated by a semicolon (;''). If you invoke find from a shell you may need to quote the semicolon if the shell would otherwise treat it as a control operator. If the string{}'' appears anywhere in the utility name or the arguments it is replaced by the pathname of the current file. Utility will be executed from the directory from which find was executed. Utility and arguments are not subject to the further expansion of shell patterns and constructs.

    • -exec utility [argument ...] {} +

      Same as -exec, except that ``{}'' is replaced with as many pathnames as possible for each invocation of utility. This behaviour is similar to that of xargs(1).

    操作演示

    • 在/root 目录下,查询当前目录下所有的文件和目录

      tex
      cd /root
      find -name "*"
    • 查询/根目录下(包括子目录),名以 abc 开头的目录和文件

      tex
      cd /
      find -name "abc*"
    • 查询根目录即其子目录下以 cc 开头的三个字符的目录或文件

      tex
      cd /
      find -name "cc?"
    • 查询 markdown 文件,并搜索future.weaver

      tex
      find . -name '*.md' -exec grep -H -n 'future\.weaver' {} \;
    • 查询 markdown 文件,并将其中的future.weaver替换为futureweaver

      tex
      find . -name '*.md' -exec sed -i "" 's@future\.weaver@futureweaver@g' {} \;
  • mv [OPTION] SOURCE DEST

    move (rename) files, 移动、重命名文件或目录

    操作演示

    • 将 root 文件夹下的 aaa 目录改成 abc

      tex
      cd ~
      mv aaa abc
    • 使用 touch 创建一个空文件为 aaa,再使用 mv 将 aaa 文件改名为 xyz

      tex
      touch aaa
      mv aaa xyz
    • 将 root 下的 xyz,移动到系统根目录下

      tex
      mv xyz /
  • cp [OPTION] SOURCE DEST

    copy files and directories, 复制文件或目录

    参数

    • -r 递归复制目录,连同子目录一起复制,recursive

    操作演示

    • 当前是 root 目录,复制/proc/dma 文件到 root 目录下的 bbb 目录中

      tex
      cp /proc/dma ./bb
    • 将/etc 目录下所有 c 开头的文件复制到 root 目录下的 bbb 目录下

      tex
      cp -r /etc/c* /root/bbb
    • 将/etc 目录下所有 h 开头的文件和目录复制到 root 目录下的 eee 目录,连同子目录下的内容一起复制

      tex
      cp -r /etc/h* /root/eee
  • rm [OPTION] FILE

    remove files or directories, 移除文件或目录

    参数

    • -r, 递归地移除目录中的内容。recursive
    • -f, 忽略不存在的文件,并且从不向用户提示。force

    操作演示

    • 同时删除 eee 目录下的 hostname 和 hosts 文件

      tex
      rm hostname hosts
    • 进入 root 下的 bbb 目录,删除所有文件名 csh,任意扩展名的文件

      tex
      cd bbb
      rm csh.*
    • 进入 root 目录下的 eee 目录,递归删除 httpd 目录和所有子目录的文件,不进行确认,强制删除。

      tex
      cd ~/eee
      rm -rf httpd
  • 【常用】man

    an interface to the on-line reference manuals, 在线参考手册

    操作演示

    • 查看 mkdir 命令的参考手册
    • 查看 ls 命令的参考手册
  • 【常用】info

    Read documentation in info format,在线参考手册

    操作演示

    • 查看 cp 命令的参考手册
    • 查看 mv 命令的参考手册

小结

  • 切换当前路径

  • 创建目录

  • 显示目录内容

  • 搜索文件

  • 移动、重命名

  • 复制

  • 移除

  • 查询帮助文档

文件操作命令【了解】

相关命令概要

  • cat [OPTION] [FILE]

    concatenate files and print on the standard output, 显示文件内容

  • more [OPTION] FILE

    file perusal filter for crt viewing, 在显示器上阅读文件的过滤,分页显示文件

    [Enter] 逐行显示

    [Space] 逐页显示

    [Q] 退出

  • head [OPTION] [FILE]

    output the first part of files, 输出文件的开始部分

    参数

    • -n 显示指定的前 n 行,默认 10 行
  • tail [OPTION] [FILE]

    output the last part of files, 输出文件的末尾部分

    • -n 显示指定的后 n 行,默认 10 行
  • less [OPTION] [FILE]【常用】

    opposite of more, 分页或翻页显示文件内容

    参数

    • -N 显示行号

    [Ctrl + U]向上翻一页

    [PageUp]向上翻一页

    [Ctrl + D]向下翻一页

    [PageDn]向下翻一页

    [Q] 退出

  • touch [OPTION] FILE

    change file timestamps, 修改文件的时间戳,创建一个文本文件,长度是 0 个字节

操作演示

  • 将素材目录的 Demo.java 文件,上传到 root 目录下。

  • 查看当前目录下 Demo.java 文件的全部内容

    tex
    cat Demo.java
  • 分页查看当前目录下 Demo.java 文件内容,按回车键一行一行的看,按空格健一页一页的看

    tex
    more Demo.java
  • 查看当前目录下 Demo.java 文件的前 10 行内容

    tex
    head Demo.java
  • 查看当前目录下 Demo.java 文件的后 10 行内容

    tex
    tail Demo.java
  • 查看当前目录下 Demo.java 文件的前 5 行内容

    tex
    head -n 5 Demo.java
  • 查看当前目录下 Demo.java 文件的后 5 行内容

    tex
    tail -n 5 Demo.java
  • 使用 less 命令显示 Demo.java 文件,显示行号

    tex
    less -N Demo.java

小结

  • 查看文件内容,不具备分页功能

  • 查看文件内容,具备分页功能,但只能往后翻,不能往前翻

  • 显示头的内容,默认显示 10 行

  • 显示尾的内容,默认显示 10 行

  • 查看文件内容,具备分页功能

  • 创建一个新的空文本文件

vim文本编辑器【了解】

vim的三种模式

模式说明
命令模式可以移动光标、删除字符等操作,打开文件时即进入这个模式
编辑模式在此模式下可以输入字符,进行编辑等操作
底行模式可以输入命令对编辑的文件进行查找,保存,退出等操作

vim三种模式的切换

vim-Modes

vim命令

命令描述
i在光标的前面插入字符
a在光标的后面插入字符
o在光标的下一行插入字符
yy复制当前行
p如果之前已经复制了这个就可以粘贴
dd删除当前行
u撤销前面的操作undo
/字符串在内容中搜索指定的字符串 n:向后继续查找 N:向前继续查找
wq保存并退出
q!强制退出,不保存
wq!强制保存退出,用于只读文件

操作演示

  • vim Hello.java 用 vim 编辑器创建/打开 Hello.java 文件,这时进入命令模式。

  • 按 i 键,进入编辑模式,输入以下内容:

    java
    public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello!");
      }
    }
  • 按 Esc 键,进入命令模式,按冒号进入底行模式

  • 输入:wq 回车,表示存盘退出

  • 使用 cat Hello.java 查看文件的内容


  • 使用 vim 打开 Hello.java 文件,进入命令模式。

  • 将光标移动到 System.out 这一行,按 yy 复制

  • 按 3 次 p,粘贴这一行三次

    java
    public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello!");
        System.out.println("Hello!");
        System.out.println("Hello!");
        System.out.println("Hello!");
      }
    }
  • 按 dd 删除最后一行

  • 按 i 进入编辑模式

  • 再任意输入一些内容

  • 在按 Esc 进入命令,按冒号进入底行模式

  • 输入 q!回车,不存盘强行退出。

  • 使用 cat Hello.java 发现 Hello.java 没有变化

小结

  • yy

    tex
    复制当前行
  • p

    tex
    粘贴
  • dd

    tex
    删除当前行
  • u

    tex
    回退-undo
  • /字符串

    tex
    搜索字符串
  • wq

    tex
    保存并退出
  • q!

    tex
    强制退出

压缩与解压命令【重点】

压缩文件扩展名

扩展名分类
.zip或.rar在windows下两种压缩文件格式
.tar在Linux下打包文件,不一定压缩
.gz在Linux下压缩文件
.tar.gz既打包又压缩

压缩与解压命令

  • tar

    manipulate tape archives, 操作压缩文件

    参数

    • -c, --create, 压缩文件【重点】
    • -v, --verbose, 详细显示处理的文件
    • -z, --gzip, --ungzip, 用 gzip 对存档压缩或解压
    • -f, --file [HOSTNAME:], 指定存档
    • -x, --extract, --get, 从存档展开文件【重点】
    • -C, --directory DIR, 转到指定的目录
  • zip [OPTIONS] [zipfile [file ...]]

    package and compress (archive) files,压缩

    • -v 打印详细信息
  • unzip zipfile

    list, test and extract compressed files in a ZIP archive,解压

操作演示

  • 定位于 root 目录,将当前目录下的 Hello.java 和 Demo.java 文件打包成 hello.tar 文件,并显示详细信息。

    tex
    cd ~
    tar -cvf hello.tar Hello.java Demo.java
  • 将当前目录下的 Demo.* 打包并压缩成 demo.tar.gz 文件,显示详细信息。

    tex
    tar -zcvf demo.tar.gz Demo.*
  • 定位于 root 目录下,删除所有大写的 Hello 开头的文件

    tex
    rm -rf Hello*
  • 解压 hello.tar 到当前目录

    tex
    tar -xvf hello.tar
  • 释放 demo.tar.gz 文件到 abc 目录下

    tex
    tar -zxv -f demo.tar.gz -C abc
    
    mv demo.tar.gz abc
    cd abc
    tar -zxvf demo.tar.gz
  • 将当前目录下的 Demo.*打包并压缩成 demo.zip 文件,显示详细信息

    bash
    zip -v demo.zip Demo.*
  • 将当前目录下的 Demo.*删除,并从 demo.zip 解压文件

    bash
    rm -rf Demo.*
    
    unzip demo.zip

小结

.tar

只打包,不压缩

.tar.gz

压缩

  • -zxcvf

如果遇到的文件是tar.gz的话,那么使用的参数,一定是zxcvf

如果是解压的话,删除c参数,因为c参数是create,是压缩的含义

如果是压缩的话,删除x参数,因为x参数是extract,是解压的含义

  • zip

  • unzip

其它命令

  • pwd【重点】

    print name of current/working directory, 显示当前工作目录

    操作演示

    • 进入根目录,显示当前的目录
    • 进入/bin,显示当前的目录
    • 进入/usr/bin 目录,显示当前的目录
  • ps【相对重点】

    process status, 查看进程状态

    Linux进程

    • 操作系统启动的时候自动启动的进程
    • 由用户在终端上(命令行中)输入的进程

    Bash进程

    • 每个用户登录以后都会分配一个终端操作的进程
    • 这个进程是所有终端命令的父进程,不要随意终止这个进程

    ps -auxps -ef的区别

    两者输出的结果大致相同,显示风格不同

    参数

    • -a, 显示所有用户在终端上启动的进程
    • -u, 显示所有用户在终端启动的进程的详细信息
    • -x, 显示所有用户启动的所有进程
    • -e, 显示所有进程(包括用户进程和系统进程)
    • -f, 显示详细信息

    操作演示

    • 在客户端中显示当前用户通过终端启动的所有进程

      tex
      ps
    • 在 Linux 命令行窗口运行 vim Hello.txt 编辑文件,显示所有用户通过终端启动的所有进程。

      tex
      ps -a
    • 显示所有用户通过终端启动的所有进程详细信息

      tex
      ps -au
    • 显示所有用户所有进程详细信息

      ps -aux

    输出说明

列标题说明
%CPUCPU(处理器)使用百分比
%MEM真实内存使用百分比
CMD正被执行的命令的名称
COMMAND正被执行的命令的完整名称
PID进程ID
PPID父进程的进程ID
RSS内存驻留空间大小(内存管理)
START定时启动的时间
STAT状态代码(O, R, S, T, Z)
TIME积累CPU时间
TTY控制终端的完整名称(?表示没有控制终端,该进程为守护进程)
USER用户名
VSZ虚拟大小(单位为KB)
  • kill [-9] signal【相对重点】

    terminate a process, 终止进程

    参数

    • -9 强行终止

    操作演示

    • 在 Linux 命令行上使用 vim 编辑 Hello.txt 文件

      在 shell 客户端,显示所有用户通过终端启动的所有进程,并杀死 vim 这个进程。

      在 Linux 命令行可以看到进程被终止

    • 在 Linux 命令行使用 ping www.future-weaver.com

      在 shell 客户端,显示所有用户通过终端启动的所有进程,并强行杀死 ping 这个进程

      在 Linux 命令行可以看到进程被杀掉

  • grep [OPTIONS] PATTERN [FILE...]【重点】

    print lines matching a pattern, 打印匹配给定模式的行

    参数

    • -n, --line-number, 在输出的每行前面加上它所在的文件中它的行号
    • -v, --invert-match, 选择不匹配的行
    • -i, --ignore-case, 忽略大小写

    操作演示

    • 在 Demo.java 中搜索 close 字符串

      tex
      grep close Demo.java
    • 在 Demo.java 中搜索 close 字符串,并且显示行号

      tex
      grep close Demo.java -n
    • 在 Demo.java 中搜索没有 close 的行和行号

      tex
      grep close Demo.java -nv
    • 在 Demo.java 中忽略大小写搜索 insert 字符串并且显示行号

      tex
      grep insert Demo.java -ni
  • |【重点】

    管道命令/重定向命令

    语法

    命令 1 | 命令 2

    解释

    将一个命令(命令 1)的执行结果做为另一个命令(命令 2)的条件输入

    操作演示

    • 分屏显示/etc 目录所有文件的详细信息,将 ll 的输出做为 more 的输入,即分屏显示。

      tex
      ll /etc | more
    • 在 root 目录下使用 ll 显示所有文件的详细信息,再在显示结果中使用 grep 查询 Demo 字符串

      tex
      ll /root | grep Demo
    • 显示 Linux 中所有进程的详细信息,查询 ssh 的字符串

      tex
      ps -ax | grep ssh
  • >【了解】

    管道命令/重定向命令

    语法

    命令 > 文件

    将输出重定向到文件中(替换/覆盖)

    操作演示

    • 将系统中运行的所有进程信息,打印到 process.log 文件中,如果文件已存在,则覆盖

      bash
      ps -aux > process.log
  • >>【了解】

    管道命令/重定向命令

    语法

    命令 >> 文件

    将输出重定向到文件中(追加)

    操作演示

    • 将系统中运行的所有进程信息,打印到 process.log 文件中,如果文件已存在,则追加

      bash
      ps -aux >> process.log
  • &&【了解】

    obj.condition() && obj.condition2()

    逻辑控制命令

    只有在&&左边的命令成功时,&&右边的命令才会被执行。只要左边命令运行失败,后面的命令就不会被执行。

  • 【扩展】xargs [-options] [command]

    construct argument list(s) and execute utility, 将标准输入转为命令行参数。

    参数

    • -d, 更改分隔符
    • -p,打印出要执行的命令,询问用户是否要执行
    • -t, 打印出要执行的命令,直接执行

    操作演示

    • 在控制台运行以下命令,观察结果

      bash
      # 利用文本cat命令查看/etc/passwd文件,并将在查看后的结果中查询root字符串
      cat /etc/passwd | grep root
      
      # 直接使用grep在/etc/passwd中查询root字符串
      grep root /etc/passwd
      
      # 无任何输出,echo命令不接受管道传参
      echo "hello world" | echo
      
      # 将管道左侧的标准输入,转为命令行参数hello world,传给第二个echo命令。
      echo "hello world" | xargs echo
      
      # 等同于mkdir one two three。如果不加xargs就会报错,提示mkdir缺少操作参数。
      echo "one two three" | xargs mkdir
      
      # 创建文件list,三行分别为"one"、"two"、"three"
      # 查看利用xargs制作的单行mkdir命令
      cat list | xargs echo mkdir
      
      # 查看利用xargs制作的多行mkdir命令
      cat list | xargs -I {} echo mkdir {}
    • 输出a\tb\tc,使用 xargs 输出abc

      bash
      echo -e "a\tb\tc" | xargs -d "\t" echo
    • 输出one two three,使用 xargs 创建onetwothree空文件,询问用户是否执行

      bash
      echo 'one two three' | xargs -p touch
    • 输出one two three,使用 xargs 删除onetwothree,删除前输出最终命令

      bash
      echo 'one two three' | xargs -t rm
  • shutdown【了解 】

    halt, power-off or reboot the machine, 停止、关闭或重启机器

    参数

    • now, 立即关机
  • poweroff【重点】

    同shutdown now

  • reboot【重点】

    重启系统

小结

  • 显示当前工作目录

    pwd

  • 查看进程状态

    ps -aux

  • 终止进程

    kill -9

  • 打印匹配给定模式的行

    grep

  • 管道命令

    |

    >,覆盖

    >>,追加

    &&

  • 关机

    poweroff

  • 重启

    reboot

权限操作【了解】

Linux 中对每个目录和文件都做了规定,只能由满足条件的用户才能操作这个目录或文件,这个规定叫权限。

用户和组的概念

Linux-User-Group

概念解释
属主目录或文件的所有者
属组所有者所在的组
其他用户其他用户和组

权限位

File-Mode-Bit

权限字母-权限数字对照

权限字母权限数字说明
r4Read 读取
w2Write 写入
x1eXecute 执行
-0没有权限

权限范围

权限范围说明
uUser 属主
gGroup 属组
oOther 其他用户
aAll 上面所有的用户

权限操作

权限符号说明
+添加权限
=修改权限
-删除权限
  • chmod MODE FILE

    change file mode bits

    示例

    • 添加权限

      • 改变 Demo.java 的权限,给属主添加 可执行权限

        chmod u+x Demo.java

      • 改变 Demo.java 的权限,给属组添加可读可运行权限

        chmod g+rx Demo.java

      • Demo.java 的所有用户都添加可读可写可运行(所有权限)

        chmod a+rwx Demo.java

      • 属主添加可执行,其它用户添加 可写权限

        chmod u+x, o+w Demo.html

    • 修改权限

      • 属主修改为可读可写可运行,属组可写权限,其他用户可执行

        chmod u=rwx,g=w,o=x Demo.java

      • 为所有用户修改为可读可写、不可运行权限

        chmod a=rwx Demo.java

    • 删除权限

      • 所有用户不可读 不可写不可运行权限

        chmod a-rwx Demo.java

      • 属主删掉写,组删掉写权限

        chmod u-w,g-w Demo.java

  • chown [options] user [:group] file...

    change file owner and group,修改文件所有者和组别

    参数

    • -R

      递归修改目录及其下面内容的所有权

    示例

    • 将当前目录,及子目录中的所有文件,把所有者,改为 root 用户

      chown -R root:root .

  • chgrp [OPTION]... {GROUP | --reference=REF_FILE} FILE...

    Change group ownership,修改属主

小结

  • 权限范围

    • u
      • user,属主
    • g
      • group,属组
    • o
      • other,其他用户
    • a
      • all,所有用户
  • 权限字母

    • r
      • read,可读
    • w
      • write,可写
    • x
      • execute,可执行
  • 权限操作

    • 添加
    • =
      • 修改
      • 删除

任务调度命令【了解】

  • crontab [OPTION]

    maintains crontab files for individual users, 定时执行指定

    参数

    • -l, 显示当有已经设置好的定时执行的任务
    • -e, 使用 vim 编辑任务
    • -r, 删除定时任务

定时任务的配置

  • 一行写一个任务
  • 每个任务有 6 个列,前面 5 列是时间,最后 1 列是要执行的命令
格式说明

分 时 日 月 周 命令

minute表示分钟,可以是从0到59之间的任何整数。
hour表示小时,可以是从0到23之间的任何整数。
day表示日期,可以是从1到31之间的任何整数。
month表示月份,可以是从1到12之间的任何整数。
week表示星期几,可以是从0到7之间的任何整数,0或7代表星期日,1-6表示星期一到六。
command要执行的命令
特殊字符
特殊字符说明
星号(*)代表所有可能的值。
如:*,用在月上,表示每月执行;用在分上,表示每分执行
逗号(,)用逗号隔开的值指定某几个时间点。
如:1,2,5,用在小时上,表示1点,2点,5点
短横(-)表示一个整数范围。
如:2-6,用在日上,表示2号到6号
正斜杠(/)指定时间的间隔频率。
如: 0-10/2,用在小时上,表示0点到10点中每两小时执行一次。 与星号一起使用。
如: /10,用在分钟字段,表示每10分钟执行一次。
>>指定输出的文件
如: * * * * * date >> /root/mydate.log
练习

分 时 日 月 周 命令

  • 解释以下配置的含义

* * * * * command

每分钟执行

30 21 * * * command

每天 21:30 执行命令

3,15 * * * * command

每个小时的 3 分的时候,和 15 分的时候,执行

5,10 8-11 * * * command

8:05、8:10 9:05 9:10 … 分别执行

*/2 * * * * command

每偶数分钟时,执行 command

  • date

    print or set the system date and time, 打印或设置系统日期和时间

小结

crontab-Summary.png

Linux 深入

主机名配置【了解】

  • hostname

    show or set the system's host name, 显示或临时设置系统的主机名

    • hostname [HOSTNAME]

      临时设置主机名为 HOSTNAME。如果 hostname 没有任何参数,显示主机名。

  • hostnamectl set-hostname

    control the system hostname, 永久设置系统的主机名

    • hostnamectl set-hostname [HOSTNAME]

      永久设置主机名为 HOSTNAME

操作演示

  • 查看当前的主机名

    tex
    hostname
  • 设置新的主机名为 future-weaver,再查看当前的主机名

    tex
    hostname future-weaver
  • 设置新的主机名为 future-weaver,重启以后仍然有效

    tex
    hostnamectl set-hostname future-weaver

服务管理【掌握】

  • systemctl list-units *.service

    显示已经启动的所有服务

  • systemctl start crond 【常用】开启服务

  • systemctl stop crond 【常用】关闭服务

  • systemctl status crond 【常用】显示服务当前状态

  • systemctl restart crond 【常用】重启服务,先关闭服务,再开启服务

  • systemctl reload crond 重新加载服务,相当于读取新的配置

  • systemctl enable crond

    设置服务为开机自启动

  • systemctl disable crond

    取消服务开机启动

Linux常用服务

  • firewalld
  • mysqld
  • network
  • sshd
  • crond

小结

  • systemctl status mysqld

    查看服务状态

  • systemctl start mysqld

    启动服务

  • systemctl stop mysqld

    关闭服务

  • systemctl restart mysqld

    重新启动-先关闭,再启动

  • systemctl enable mysqld

    开机启动

  • systemctl disable mysqld

    取消开机启动

网络管理

  • currports【Windows 程序】

  • netstat【了解】

    Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships.

    显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组。

    参数

    • -n --numberic, 显示进程的 IP 地址和端口号
    • -t -tcp, 只显示使用 TCP 协议进程
    • -l -listening, 只显示正在网络监听的进程(默认选项)
    • -p -program, 显示程序的名字和进程的 ID
    • -r -route, 显示路由表【重点】

    操作演示

    • 显示 TCP 协议的网络连接

      tex
      netstat -t
    • 显示 TCP 协议和监听中的网络连接

      tex
      netstat -tl
    • 显示 TCP 协议和监听中的网络连接,显示 IP 地址和端口号

      tex
      netstat -tln
    • 显示 TCP 协议和监听中的网络连接,显示 IP 地址和端口号,显示程序的名字

      tex
      netstat -tlnp
    • 显示路由表【重点】

      tex
      netstat -r
    • 查看端口号占用情况

      netstat -naop | grep 端口号

curl【了解】

语法

curl [options...] <url>

参数

  • -d, 指定请求体
  • -H, 指定请求头
  • -X, 指定请求方式
  • -o, 指定响应输出位置
  • -s, 静默模式
  • -w, 指定除响应体外的其他信息

操作演示

  • 访问百度,且不展示响应体
bash
curl -o /dev/null -s \
-w '%{http_code}\n%{time_total}\n%{content_type}' \
https://www.baidu.com

wget【了解】

  • wget [options...] <url>

    下载文件

ab压测工具【了解】

Apache HTTP server benchmarking tool

安装

bash
yum -y install httpd-tools

语法

ab [options...] <url>

参数

  • -n, 请求次数
  • -c, 并发量

操作演示

  • 暴力访问百度,请求次数为 5000,并发量为 100
bash
ab -n 5000 -c 100 https://www.baidu.com/

网卡配置

设置 ip 分为 2 种类型,dhcp 和 static。

dhcp 是动态获取 ip

static 是配置静态 ip

dhcp 动态获取 ip,可能 ip 经常会发生变化,导致客户端无法连接到。静态 ip 配置后就不会发生改变,这样客户端连接服务器具有更好的安全性。

  1. 关闭网卡

    • 修改/etc/sysconfig/network-scripts/ifcfg-enp0s3,ONBOOT 参数设置为"no"

    • 运行命令systemctl restart network

    • 运行命令ping www.future-weaver.com,查看外网能否连接

    • 按原步骤,激活网卡

  2. 配置静态 IP 地址

    • 运行命令netstat -r,查看网关地址

    • 运行命令ip addr,查看网卡硬件MAC地址

      找到enp0s8,link/ether标志的xx:xx:xx:xx:xx:xx就是硬件MAC地址

    • 需要手动新建ifcfg-xxxx配置文件时,获取网卡的UUID信息

      nmcli connection show

      nmcli con

    • 修改/etc/sysconfig/network-scripts/ifcfg-enp0s8

      • 将BOOTPROTO=dhcp修改为BOOTPROTO=static
      • BOOTPROTO=static
      • 添加如下一行
      • IPADDR=192.168.56.102
      • NM_CONTROLLED=no
      • HWADDR=查到的硬件MAC地址
      • GATEWAY=192.168.56.0
      • NETMASK=255.255.255.0
    • 重启网络

      • systemctl restart network
    • 按原步骤,配置动态 ip

  3. 克隆虚拟机

    • 关闭虚拟机
    • 在 VirtualBox 操作界面,右键虚拟机,复制
    • 设置新虚拟电脑名称
    • 副本类型选择完全复制
    • 备份选择当前虚拟电脑状态
    • Mac地址设置选择为所有网卡重新生成MAC地址
    • 复制
    • 运行新虚拟机,运行nmtui命令,重新设置网卡

SSH免密登录

为什么要登录

在企业中,多台 Linux 机器是可以相互之间进行登录和退出的。用 Linux 自带的 SSH 客户端命令,可以通过输入用户名和密码的方式登录到另一台 Linux 机器中。

非对称加密【了解】

The_Imitation_Game

Public_Key_Cryptography

Public_Key_Cryptography_Case

非对称加密特点【了解】

  • 密钥成对出现(公钥、私钥)

  • 使用公钥加密,就使用私钥解密

  • 使用私钥加密,就使用公钥解密

SSH

Secure Shell 协议,安全壳协议。用于 Linux 之间加密登录一种协议

SSH两种验证机制

  • 直接输入用户名和密码的方式

    • ssh username@ip
  • 免密登录,直接登录,不需要输入用户名和密码

    tex
    如果网络中Linux服务器比较多,需要记住每台服务器的密码也是比较痛苦的事。你无需知道另一台机器上的帐号和口令,也可以登录到远程主机。我们说的SSH免密登录,就说的是这种方式
    • ssh-keygen

      生成公钥和私钥,生成的公钥和私钥在/root/.ssh 目录下。id_rsa 是私钥,id_rsa.pub 是公钥

    • ssh-copy-id

      ssh-copy-id root@192.168.56.102

      将新生成的密钥(公钥)发送到指定服务器。在服务器的/root/.ssh/autorized_keys 文件中。

    • ssh root@192.168.56.102

      不需要输入密码了

用户管理命令【了解】

  • useradd [OPTION] LOGIN

    create a new user or update default new user information, 创建一个新用户或更新默认新用户信息,创建好的用户信息在/etc/passwd文件中

    参数

    • LOGIN 指定创建的用户名

    • -m --create-home

      创建用户的同时,在/home 下创建用户的主目录[默认参数]

    • -g --gid <GROUP>

      创建用户的同时,指定用户所在的组。

      未指定组名:默认就在一个与用户同名的组中。组名与用户名相同。

    操作演示

    • 进入/home 目录,查看目录的内容

      tex
      cd /home
      ll
    • 创建用户 Jack,并且创建用户主目录

      tex
      useradd Jack
    • 再次 ll 查看/home 目录下存在 Jack 目录,默认用户 Jack 在一个叫 Jack 的组中。

      tex
      ll
    • 创建用户 Tom,把用户放在 Jack 这个组中,并且创建 Tom 主目录

      tex
      useradd Tom -g Jack
    • 通过 ll 查看/home 目录下的信息

      tex
      ll
    • 查看/etc/passwd 文件,可以看到创建的用户信息

      tex
      more /etc/passwd
  • passwd [OPTION] [username]

    update user's authentication tokens, 更新用户密码。

    注意

    • username 只有管理员才可以给指定的用户设置密码,默认为当前用户。

    操作演示

    • 设置 jack 的密码为 jack。如果提示无效的密码,忽略即可,再次输入同一个密码,修改成功。

      passwd jack
    • 设置 tom 的密码为 tom。如果提示无效的密码,忽略即可,再次输入同一个密码,修改成功。

      passwd tom
    • 退出登录 root 用户,以 jack 身份和 tom 身份登录

      exit
  • whoami

    print effective userid, 查看自己的用户名

  • su [OPTION] [username]

    run a command with subtitute user and group ID, 切换用户

    参数

    • username 指定要切换的用户名,默认为 root

    操作演示

    • 当前用户是 root,临时切换成 Jack,不用输入密码

      bash
      su jack
    • cd 进入用户主目录,pwd 显示当前的目录,观察前面的提示符

      bash
      cd ~
      pwd
    • 从 Jack 用户切换回 root,需要输入密码

      bash
      su root
    • cd 进入用户主目录,pwd 显示当前的目录

      bash
      cd ~
      pwd
    • 输入 2 次 exit 再回到 root 用户

      bash
      exit
      exit
  • userdel [OPTION] LOGIN

    delete a user account and related files, 删除用户账户和相关文件

    参数

    • LOGIN 指定删除的用户名
    • -r --remove, 删除用户的同时,也删除它的主目录

    操作演示

    • 使用 root 删除用户 Tom,同时删除 Tom 的主目录。如果 Tom 已经登录,则删除失败

      bash
      userdel tom -r
    • 在/home 目录下已经找不到 Tom 主目录了

      bash
      cd ~
      ls -al
  • usermod [OPTION] LOGIN

    modify a user account, 修改用户帐户

    参数

    • LOGIN 指定修改前的原用户名
    • -l, login NEW_LOGIN 指定修改后的新用户名

    操作演示

    • 确认 Jack 这个用户不在线,如果在线需要将 Jack 登出

    • 修改 Jack 的登录名为 Rose

      tex
      usermod -l Rose Jack
    • 修改以后在 Linux 控制台,使用 Rose 重新登录

用户组管理命令【了解】

  • groupadd [OPTION] GROUP

    create a new group, 创建一个新组。在/etc/group文件中,包含了所有创建组的信息

    操作演示

    • 添加一个新的组 china

      bash
      groupadd china
    • 查看/etc/group 文件,做为主组的用户不会显示出来。

      bash
      cat /etc/group
  • usermod [OPTION] LOGIN

    modify a user account, 修改用户帐户。一个用户只能有一个主组,可以有多个从组

    参数

    • -g, --gid GROUP

      tex
      修改用户的主组
    • -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]

      tex
      修改用户的从组(附属组),可以有多个从组

    操作演示

    • 进入/home 目录,ll 显示 home 目录的内容可以看到 Rose 是属于 Jack 这个组

      bash
      cd /home
      ls -al
    • 将 Rose 这个用户的主组 Jack 修改为 china 组

      bash
      usermod -g china rose
    • 使用 ll 显示/home 目录,查看 Rose 用户所属组名变成了 china

      bash
      cd /home
      ls -al
    • 创建两个组:Pakistan 和 Russia

      bash
      groupadd pakistan
      groupadd russia
    • 将 Rose 添加进 Pakistan 和 Russia 两个从组中,组名之间使用逗号隔开。

      bash
      usermod -G pakistan,russia rose
    • 查看/etc/group 文件,查看到 Rose 与组的关系。文件中主组看不到用户的列表。

      cat /etc/group
  • gpasswd [OPTION] GROUP

    将用户从附属组(从组)中删除

    参数

    • GROUP

      tex
      指定要删除的组名
    • -d, --delete USER

      tex
      将用户从附属组(从组)中删除

    操作演示

    • 把 Rose 从 china 这个组中删除,删除失败。

      bash
      gpasswd china -d rose
    • 把 Rose 从 Russia 这个组中删除

      bash
      gpasswd russia -d rose
    • 查看/etc/group 文件,发现 Rose 已经从 Russia 组中删除

      bash
      cat /etc/group
  • groupmod [OPTION] GROUP

    modify a group definition on the system, 修改组的名字

    参数

    • -n, --new-nameNEW_GROUP

      tex
      将组名改成新的组名

    操作演示

    • 在/home 目录下 ll 查看修改前的信息

      bash
      cd /home
      ls -al
    • 将 Rose 的主组名 china 改成 cn

      bash
      groupmod -n cn china
    • 查看/home 目录信息,发现 Rose 的组名已经改成 cn

      bash
      ls -al
  • groupdel [OPTION] GROUP

    delete a group, 删除一个组

    参数

    • GROUP

      tex
      删除指定的组

    操作演示

    • 删除 cn 组,删除失败,因为还有 Rose 把它做为主组

      bash
      groupdel cn
    • 删除 Russia 这个组

      bash
      groupdel russia
    • 删除 Pakistan 这个组

      bash
      groupdel pakistan
    • 查看/etc/group 文件,发现没有这两个组的信息了

      bash
      cat /etc/grou

软件安装命令【重点】

rpm

Red Hat Package Manager, 对linux中已经安装的软件进行管理

语法

rpm [OPTION]

参数
  • -v, --verbose

    tex
    提供更多的详细信息输出
  • -q 软件名

    tex
    查询当前系统是否安装了指定的软件
  • -a

    tex
    查询所有已经安装的软件
  • -h

    tex
    在安装的过程中显示进度条 # 50%
  • -i, --install 软件名

    tex
    安装指定的软件
  • rpm -qa

  • rpm -ivh

操作演示
  • 查看所有安装的软件

    tex
    rpm -qa
  • 查看 gcc-c++这个软件包是否安装

    tex
    rpm -q gcc-c++
  • 安装指定的软件

    tex
    rpm -ivh 软件名

配置国内镜像源

参考https://developer.aliyun.com/mirror/

备份
bash
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下载新的 CentOS-Base.repo
bash
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
生成缓存
bash
yum clean all
yum makecache

Redhat在线安装命令

在线安装命令(redhat系列发行版)

语法

yum [OPTION] [command] [package ...]

Yellowdog Updater Modified, 从指定的服务器自动下载包并且安装,可以自动处理依赖关系,一次安装所有依赖的软件包。

参数
  • -y 所有的提问都回答 yes
指令
  • install, 安装软件

  • remove, 卸载软件

操作演示
  • 安装 gcc-c++ 这个安装包,安装的提示全部回答 yes

    tex
    yum –y install gcc-c++

Debian在线安装命令

在线安装命令(debian系列发行版,包括Ubuntu)

语法

apt-get [options] [-o config=string] [-c=cfgfile] command [pkg]

参数
  • -y 所有的提问都回答 yes
指令
  • update

apt-get update是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。 2、apt-get update只是更新了apt的资源列表,没有真正的对系统执行更新。如果需要,要使用apt-get upgrade来更新。

  • upgrade

  • install pkg(s)

  • remove pkg(s)

  • clean

tinycorelinux在线安装命令

在线安装命令(tinycorelinux发行版)

语法

tce-load -wi [pkg]

搜索软件包

http://www.tinycorelinux.net/13.x/x86/tcz/

操作演示
  • 安装 vim

    tex
    tce-load -wi vim.tcz

小结

  • rpm

离线安装

-qa

查询已经安装的软件

-ivh

安装软件

  • yum

在线安装

-y 别来烦我,所有的回答全是yes

install

安装软件

remove

卸载软件

Linux服务器搭建

防火墙端口扫描

通过nmap等扫描工具,可以非常快速扫描出开放的外网端口。

JDK安装

配置Java环境

  1. 进入“/root”目录,解压 jdk 到指定目录/usr/local 下

    tex
    tar -zxvf jdk-8u291-linux-x64.tar.gz -C /usr/local/

    注:在客户端软件中按 ctrl+shift 复制,shift+insert 粘贴或鼠标右键

image-20190426210604232

查看解压后的目录,目录中有 jdk1.8.0_211 为 jdk 解压的目录

image-20190426210609837

  1. 配置 jdk 环境变量,打开/etc/profile 配置文件,将下面配置拷贝进去。export 命令用于将 shell 变量输出为环境变量。

    注:在 linux 下以冒号分隔不同的路径,而 windows 下是分号。

    注:引用变量在 linux 下是$变量名, 在 windows 下是%变量名%

  • /etc/profile

    tex
    #set java environment
    export JAVA_HOME=/usr/local/jdk1.8.0_291
    export CLASSPATH=.:$JAVA_HOME/lib
    export PATH=$JAVA_HOME/bin:$PATH
  1. 重新加载/etc/profile 配置文件,并测试

    tex
    source /etc/profile
  2. 判断 JDK 是否安装成功

    tex
    java -version
    javac -version

编写Hello World程序

  • Hello.java

    java
    public class Hello {
        public static void main(String[] args) {
            System.out.println("Hello World!!!");
        }
    }
  • 编译成字节码文件

    tex
    javac Hello.java
  • 执行 Java 程序

    tex
    java Hello

小结

  1. 将 jdk 的安装文件传输到 Linux 的/root 目录当中

  2. 解压到压缩包到:/usr/local

  3. 配置环境变量:/etc/profile

  4. 重新加载配置: source /etc/profile

MySQL安装

MySQL在线下载安装

image-20190426211357306

注:需要连接互联网,在线 mysql 的安装包,5.6 的版本大约 86M

  1. 查看 CentOS 是否自带的 MySQL,如果已经安装需要卸载。如果没有找到,则表示没有安装。

    tex
    rpm -qa | grep mysql
  2. 在线获取 CentOS7 的 mysql 的 rpm 安装文件,直接执行如下命令

    tex
    wget https://repo.mysql.com/mysql80-community-release-el7-1.noarch.rpm

    这条语句只是下载了一个rpm文件,25K大小

  3. 执行安装命令

    tex
    rpm -ivh mysql80-community-release-el7-1.noarch.rpm
  4. 得到两个配置文件,在/etc/yum.repos.d 目录下。

    • mysql-community.repo 用于指定下载哪个版本的安装包
    • mysql-community-source.repo 用于指定下载哪个版本的源码
  5. 修改 MySQL 的下载配置文件

    • vim /etc/yum.repos.d/mysql-community.repo
    # Enable to use MySQL 5.7
    [mysql57-community]
    name=MySQL 5.7 Community Server
    baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
    # 设置为1,表示下载
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    
    ...
    
    [mysql80-community]
    name=MySQL 8.0 Community Server
    baseurl=http://repo.mysq.com/yum/mysql-8.0-community/el/7/$baseurl/
    # 设置为0,表示不下载
    enabled=0
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

    A3E59B91-D7FB-44E9-B5E5-A02CBA47D2F4

  6. 在当前目录/etc/yum.repos.d 下执行下面的命令,开始在线下载:客户端,服务器端,开发的工具包。

    tex
    yum -y install mysql-community-client mysql-community-server mysql-community-devel

    这里需要比较长的时间,要从互联网上下载86M左右的内容

  7. 使用 rpm 命令,可以查询到 mysql 已经安装好的包

    tex
    rpm -qa | grep mysql

启动MySQL服务并登录

  1. 启动 mysql 的服务

    tex
    # Linux命令
    systemctl start mysqld
  2. 将 mysql 加到系统服务中并设置开机启动

    tex
    # Linux命令
    systemctl enable mysqld
  3. 登录 mysql,root 用户默认没有密码

    tex
    # Linux命令
    mysql -u root -p
    
    # 查看随机密码
    grep 'temporary password' /var/log/mysqld.log
    
    # 使用随机密码登录
    mysql -u root -p
  4. 在 mysql 中修改自己的密码

    tex
    # 查看当前的密码策略
    show variables like '%validate_password%';                    # 查看密码策略
    
    # 修改密码策略
    set global validate_password_policy=LOW;                        # 修改密码策略等级为LOW
    set global validate_password_length=4;                            # 密码的最小长度
    set global validate_password_mixed_case_count=0;      # 设置密码中至少要包含0个大写字母和小写字母
    set global validate_password_number_count=0;                 # 设置密码中至少要包含0个数字
    set global validate_password_special_char_count=0;    # 设置密码中至少要包含0个特殊字符
    
    # MySQL命令
    set password = password('新密码');

设置远程访问权限

开启mysql的远程登录权限,默认情况下mysql为安全起见,不支持远程登录mysql,所以需要设置开启,并且刷新权限缓存。

  1. 远程登录 mysql 的权限登录 mysql 后输入如下命令

    tex
    # MySQL命令
    grant all privileges on *.* to 'root'@'%' identified by '远程密码';
    flush privileges;
  2. 开放 Linux 的对外访问的端口 3306

    tex
    # Linux命令
    #开放3306端口
    /sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
    
    #开放的端口永久保存到防火墙
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    
    #重启防火墙
    systemctl restart firewalld

客户端Windows连接MySQL

在本地 Windows 系统使用 Navicat Premium 软件连接虚拟机中的 Linux 系统安装的 MySQL

小结

  1. 使用 wget 在线得到 mysql 的 rpm 文件

  2. 使用 rpm 安装上面的文件,在/etc/yum.repos.d 目录下得到两个下载的配置文件

  3. 修改下载的配置文件,指定下载的 mysql 版本为 5.6

  4. 使用 yum 下载 mysql。

  5. 安装完成以后要开启服务,并且设置开机启动。

  6. 在 mysql 中设置 root 远程访问的权限

  7. 开放防火墙 3306 端口号

Redis安装

Redis下载

http://download.redis.io/releases/redis-5.0.5.tar.gz

依赖工具安装

tex
yum -y install gcc tcl

Redis安装

  1. 将 redis-5.0.5.tar.gz 拷贝到 Linux 的 root 目录下

  2. 解压并进入目录

    tex
    tar -zxvf redis-5.0.5.tar.gz
    cd redis-5.0.5
  3. 安装 Redis

    tex
    make && make install
  4. 前端模式启动

    前端模式启动的缺点是 ssh 命令窗口关闭则 redis-server 程序结束,不推荐使用此方法

    tex
    redis-server
  5. 后端模式启动

    • 复制配置文件至系统配置目录

      tex
      mkdir /etc/redis
      cp ~/redis-5.0.5/redis.conf /etc/redis
    • 修改 redis.conf 配置文件, daemonize yes 开启后端模式

    • 以配置文件启动 redis

      tex
      redis-server /etc/redis/redis.conf

Tomcat安装与项目发布

安装步骤

  1. 解压 Tomcat 到/usr/local 下

    tex
    tar -zxvf apache-tomcat-8.5.68.tar.gz  -C /usr/local/
  2. 开放 Linux 的对外访问的端口 8080

    tex
    /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
    firewall-cmd --zone=public --add-port=8080/tcp --permanent
  3. 重启防火墙

    tex
    systemctl restart firewalld
  4. 进入 bin 目录,启动 Tomcat

    tex
    chmod +x *.sh
    
    ./startup.sh
  5. 在 Windows 下打开浏览器访问 Linux 的 8080 端口

image-20190426213219604

  1. 进入 bin 目录下,关闭服务器。关闭服务器以后,浏览器不能再访问。

    tex
    ./shutdown.sh

发布项目

  1. 将下面的项目部署到 linux 下运行

image-20190426213331563

  1. Window 系统 mysql 导出数据库脚本文件

image-20190426213440333

  1. Linux 系统 myql 导入 windows 系统数据库导出的脚本文件

    连接Linux的MySQL,创建数据库day35,在数据库上右键,选择执行SQL语句,导入数据库文件

image-20190426213518768

  1. 将 war 包部署到 tomcat 上

    先在idea中day35_ajax项目打包,根据如下配置生成war包,指定为Archive打包类型。

    File->Project Structure->Artifacts->Type:Web Application Archive

    image-20190426213630035

    进行Build当前项目生成war包

    Build->Build Artifacts->Build

    image-20190426213753849

    查看上面output输出目录

    image-20190426214048962

    修改名字为day35.war

    image-20190426214053713

    上传war文件到/usr/local/apache-tomcat-8.5.27/webapp目录下

    image-20190426214102101

    打开浏览器浏览网站

    tex
    http://192.168.56.101:8080/day35/index.html

小结

  1. 解压 tomcat

  2. 开放端口号 8080

  3. 在 bin/startup.sh 启动服务器

  4. 在 bin/shutdown.sh 关闭服务器

  5. mysql 的编码要改成 utf-8

Git安装

tex
yum remove -y git

make prefix=/usr/local/git all
make prefix=/usr/local/git install

vim /etc/profile
source /etc/profile

学习目标总结

summary-01summary-02summary-03summary-04summary-05summary-06summary-07summary-08

  • 能够独立搭建 Linux 环境
  • 能够使用 Linux 进行目录操作的命令【重点】
  • 能够使用 Linux 进行文件操作的命令【了解】
  • 能够使用 Linux 进行目录文件压缩和解压的命令【重点】
  • 能够使用 Linux 进行权限操作的命令【重点】
  • 能够使用其它常用的 Linux 命令【了解】
  • 能够使用客户端工具连接 Linux 系统【掌握】
  • 能够使用 Linux 中的网络管理命令【了解】
  • 能够使用 Linux 中 SSH 免密登录命令【掌握】
  • 能够在 Linux 系统中安装 jdk 软件【重点】
  • 能够在 Linux 系统中安装 mysql 软件【重点】
  • 能够在 Linux 系统中安装 tomcat 软件【重点】
  • 能够在 Linux 系统的 tomcat 中部署发布项目【重点】

参考资料

http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html

扩展资料

Linux运维三剑客 - grep&sed&awk

https://book.douban.com/subject/1236944/

https://book.douban.com/subject/1499476/

https://book.douban.com/subject/28486163/

https://book.douban.com/subject/1876898/

https://book.douban.com/subject/35220550/

https://www.gnu.org/software/gawk/manual

https://www.gnu.org/software/sed/manual/

https://www.grymoire.com/Unix/Sed.html

https://www.grymoire.com/Unix/Awk.html

https://developers.redhat.com/products/rhel/download

https://www.oreilly.com/library/view/learning-awk-programming/9781788391030/