第十一章 Liunx

一、VMware Workstation Pro15 安装

第一步: 运行安装程序,点下一步。

  
第二步: 接收许可协议,点击下一步。

     
第三步:选择安装目录和是否安装增强型键盘驱动。(增强型虚拟键盘功能只能在Windows 主机系统中使用,他可更好地处理国际键盘和带有额外按键的键盘,能优先处理原始键盘输入,所以能够绕过 Windows 按键处理和任何尚未出现在较低层的恶意软件,从而提高安全性,但是有时也会出现键盘失灵等 BUG 现象)

   
第四步:用户体验设置

      
第五步:选择快捷方式

    
第六步:点击开始安装

   
第七步: 安装完毕,输入许可证

   
  
第八步: 输入许可证密钥
VMware Workstation Pro 15 序列号:
CZ7WU-2MF01-488FZ-L6Z5T-PYAU4
CY1TH-0XZ5M-M85NY-MNXGG-ZZHU8
ZZ3EK-62W1P-H803P-4WN7T-Q7HT2
CY75U-ATW0P-H8EYZ-WDZE9-N68D6
GY7EH-DLY86-081EP-4GP59-WFRX0
UG5J2-0ME12-M89WY-NPWXX-WQH88
GA590-86Y05-4806Y-X4PEE-ZV8E0
YA18K-0WY8P-H85DY-L4NZG-X7RAD
UA5DR-2ZD4H-089FY-6YQ5T-YPRX6
ZF582-0NW5N-H8D2P-0XZEE-Z22VA
ZF582-0NW5N-H8D2P-0XZEE-Z22VA

  
  
第九步:点击完成即可

     

二、安装 CentOS 7

CentOS 的安装镜像可以从华为、阿里等平台的镜像站上下载,地址是:https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/

     
如图,有各种不同的版本,DVD 版内置了比较常用的功能,Everything 就是什么都有,Minimal 就是只有基础的功能,因为安装的时候会再次选择需要安装的组件,这里实际上是向下兼容。
镜像文件下载哪种都行,但对于生产环境来说,安装的时候最好选择最小化,以免各种组件之间存在冲突。  
下载完成后,就可以创建虚拟机了。打开 `VMWare`,点击创建新的虚拟机, 选择典型:

   
下一步,选择我们下载的 iso 文件

  
下一步,设置虚拟机的名称和位置,这里我建议你认真设置一下,因为之后虽然可以改显示的名字,但虚拟机文件的名字改起来比较麻烦。此外我们要安装多台虚拟机,整理好文件夹才能方便后期管理。

  
我给这台虚拟机起名叫 CentOS 7 Vue+Springboot,之后新建的虚拟机都可以从这台克隆出来,就不用重复安装的步骤了。
点击下一步,磁盘空间上限和存储方式都可以默认。

   
  

    
之后检查配置,勾选创建后开启此虚拟机,点击完成,系统即开始安装。进入第一个界面,可以选择直接安装或者测试媒体并安装,测试媒体并不会花费多少时间,因此可以直接回车进入。
运行一段脚本之后,即进入图形化安装界面。第一步选择语言,建议选择英语,免得之后一些组件出现适配问题。

  
点击 continue 继续,

  
点击【DATE & TIME】设置时区,

  
点击【INSTALLATION DESTINATION】,这里必须要点一下才能继续,但也可以直接按照默认配置来,虚拟机以及帮我们分好了一块 20G 的磁盘空间。

  
勾选【Automatically configure partitioning.】,然后点击【Done】;

   
点击【Begin Installation】,

  
系统和开始安装,同时这里还会提示你设置 root 密码、创建用户。至少要设置一下 root 密码才可以完成安装。

   
设置 root 账号的密码,然后点击【Done】,

    

   
root 密码如果设置的比较简单,第一次点 done 会有提示,再点一次就可以强制完成了。
出于安全考虑,强烈不推荐设置过于简单的 root 密码。
接下来,系统将会自动继续安装,完成后,按照提示重启即可。

  
出现上述界面,说明安装成功。
   

三、网络配置

此时可以 ping 一下百度或使用 nmcli (或 ip a)命令查看网络配置,发现网络并没有连通,原因是网卡还没有获取到 ip 地址。

  
虚拟机有三种网络类型,仅主机、桥接和 NAT。
- 仅主机,即虚拟机仅能连接主机,不能访问外部网络
- 桥接,即虚拟机与主机如同连接在同一个交换机(网桥)上,拥有相同的网段,虚拟机直接暴露给外部网络
- NAT,即通过网络地址转换,为虚拟机分配内网 `IP`,让虚拟机处在主机保护之下,可以上网但无法通过外部网络直接访。
  
一般情况下,VMWare 默认开启的是 NAT 模式,如有需要可以在虚拟机设置中修改。 NAT 模式的网段、网关等信息可以通过 VMWare 的编辑-虚拟网络编辑器进行查看和修改。

  
可以看到目前我的虚拟机使用的是 192.168.111.0 网段。
点击 NAT 设置,可以看到网关是 192.168.111.2。

  
这里的 VMnet8 是虚拟网卡的名称,在主机的网络适配器中也可以看到并直接配置。DHCP 默认处于开启状态,为了稳定地提供 MySQL 服务,我们需要配置静态的 IP。
  
在虚拟机终端中,我们需要编辑网络配置文件。
   
vi etc/sysconfig/network-scripts/ifcfg-ens33

   
需要设置的内容,包括将 BOOTPROTO 由 dhcp 修改为 static,将 ONBOOT 由 no 修改为 yes,以及新增 IP 地址(属于 VMnet8 的子网)、子网掩码、网关,完成后保存。
  
接下来,为了使用域名访问网络,还需要设置 `DNS`。创建并编辑配置文件:vi /etc/resolv.conf
  
添加 nameserver ,即 DNS 地址。

   
完成后保存,使用 service network restart 等命令重启网络服务,再测试网络,发现已经成功连通。

   

四、安装 JDK

使用 yum 安装 JDK 还是很简单的。可以先查看可以下载的版本
yum list | grep jdk

  
执行 yum install -y java-1.8.0-openjdk.x86_64,等待安装完成后,使用 java -version 命令查看版本信息,成功回显则说明安装成功。
  
  
安装目录为 usr/lib/jvm,会自动配置环境变量。
  

五、MySQL

5.1 安装 mysql
CentOS 默认使用 yum 管理软件,我们使用 yum list | grep mysql 命令查看MySQL 相关的包,发现并没有合适的 mysql-server。
  
毕竟 MySQL 现在也不是完全开源了,当然,我们还有 MariaDB,不过咱们项目既然用了 MySQL,那就继续吧。
为了能够安装 MySQL,我们需要手动去官方网站下载包含 repo 源的 rpm 文件。地址是:https://dev.mysql.com/downloads/repo/yum/
       
点击下载 Red Hat Enterprise Linux 7 对应的 rpm 包。
接下来,可以通过 WinSCP(下载地址 https://winscp.net/eng/download.php)或类似的软件传入虚拟机。以 WinSCP 为例,输入主机名(IP)以及用户名和密码建立连接。
  
在 /usr/local 下新建目录 mysql,将刚才下载的文件拖入该目录。
  
上述步骤也可以在虚拟机上通过 wget 执行,更加方便一点。
获得 rpm 之后,在虚拟机中进入其所在文件夹并安装。
  
在 /etc/yum.repos.d 目录下生成了两个 repo 文件。
  
此时再执行 yum repolist all | grep mysql,发现有了我们想要的东西。
  
可以通过 yum-config-manager 设置(需要安装 yum-utils )或编辑 /etc/yum.repos.d/mysql-community.repo,修改 enable 值即可。
  
接下来,只需要执行 yum -y install mysql-community-server 等待安装完成即可。这里虽然我们写的是 server,但 client 也会被默认安装上。
systemctl start mysqld 启动 MySQL 服务 >QDPe*Elw6t3
  
第一次启动成功后,MySQL 会生成一个临时初始 root 密码并写入日志里,我们可以通过 cat /var/log/mysqld.log | less 查看。
  
获取该密码之后,即可通过本地 root 账号登录 MySQL 执行命令 mysql -uroot -p,输入密码:pFT?OXQd;7N-(从 mysqld.log 中查询出的密码)
  
登录后,可以通过如下语句修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPass1!'
  
注意 MySQL 的密码策略比较严格,需要大写、小写、数字、符号全都有。之前我们项目配置使用了 123456,这里我们为了方便可以继续沿用这一密码,但还是那句话,在实际生产环境中,强烈不建议使用如此简单的密码,而且 Web 应用尽量不要使用 root 连接数据库,不然一旦被攻击者利用,受害面积将大大增加。
  
由于密码'123456'不符合 MySQL 的密码策略,重新设置密码为'Admin!123';当然我们也可以通过。
  
set global validate_password_policy=LOW; 修改密码强度等级为 LOW 和 set global validate_password_length=6;修改密码长度为 6 后人可以使用`123456`
  
5.2 MySQL 配置
为了让 MySQL 能被 Web 项目访问到,我们还需要进行两步操作。一是开启系统防火墙相应端口,二是在 MySQL 中对远程用户进行授权配置。
CentOS 7 默认使用 firewalld 防火墙,可以看作是 iptables 的封装。开启 MySQL 默 认 的 3306 端 口 , 可 以 直 接 使 用 firewall-cmd --permanent --add-service=mysql 或 firewall-cmd --add-port=3306/tcp --permanent。最后重启防火墙服务(systemctl restart firewalld.service)即可。此时我们可以通过宿主机使用 telnet 测试一下端口是否开放。
  
telnet 192.168.111.128(虚拟机 ip) 3306
  
可以看到成功收到回显,但此时宿主机还没有访问权限。注意这里主机的 IP 显示为 192.168.111.1,我们在宿主机的 cmd 中通过 ipconfig 查看,发现此 IP 对应的网卡是 VMnet8,也就是虚拟机在 NAT 网络模式下使用的虚拟网卡 。
  
我们继续进入 MySQL 中配置。首先新建一个用户 wjadmin
CREATE USER wjadmin IDENTIFIED BY '123456';
  
修改 mysql 数据库中的 user 表,使该用户隶属于 192.168.11.1(宿主机),修改后,该用户即可通过宿主机访问 MySQL 服务,但无法访问除 information_schema 之外的数据库。
  
USE mysql;
        UPDATE user SET host='192.168.111.1' WHERE user='wjadmin';
  
创建数据库 wj
        CREATE DATABASE wj;
  
赋予 192.168.111.1(宿主机) 上的 wjadmin 用户操作 wj 数据库**所有**数据表(wj.*)的所有权限(ALL PRIVILEGES)
GRANT ALL PRIVILEGES ON wj.* TO 'wjadmin'@'192.168.111.1' IDENTIFIED BY '123456';
  
此时我们在宿主机上使用 MySQL 客户端连接虚拟机的服务,输入账号密码,发现连接成功(如果失败,可以尝试在 mysql 中 FLUSH PRIVILEGES 刷新权限)
  

六、Linux 常用命令

6.1 cd 命令
这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径。如:
cd /root/Docements # 切换到目录/root/Docements  
cd ./path          # 切换到当前目录下的path目录中,“.”表示当前目录 
cd ../path         # 切换到上层目录中的path目录中,“..”表示上一层目录
  
6.2 ls 命令
这是一个非常有用的查看文件与目录的命令,list 之意,它的参数非常多,下面就列出一些我常用的参数吧,如下:
-l :列出长数据串,包含文件的属性与权限数据等。  
-a :列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)。  
-d :仅列出目录本身,而不是列出目录的文件数据。  
-h :将文件容量以较易读的方式(GB,kB等)列出来。  
-R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来。
     
注:这些参数也可以组合使用,下面举两个例子:
ls -l #以长数据串的形式列出当前目录下的数据文件和目录。
ls -lR #以长数据串的形式列出当前目录下的所有文件。
  
6.3 grep 命令
该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为:
grep [-acinv] [--color=auto] '查找字符串' filename
  
它的常用参数如下:
-a :将binary文件以text文件的方式查找数据 
-c :计算找到‘查找字符串’的次数 
-i :忽略大小写的区别,即把大小写视为相同 
-v :反向选择,即显示出没有‘查找字符串’内容的那一行 
  
例如:
\# 取出文件/etc/man.config中包含MANPATH的行,并把找到的关键字加上颜色 
grep --color=auto 'MANPATH' /etc/man.config 

\# 把ls -l的输出中包含字母file(不区分大小写)的内容输出 
ls -l | grep -i file
  
6.4 find 命令
find 是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:find [PATH] [option] [action]
  
\# 与时间有关的参数:
-mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件;  
-mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名;  
-mtime -n : 列出在n天之内(含n天本身)被更改过的文件名;  
-newer file : 列出比file还要新的文件名。  
  
例如:
find /root -mtime 0 # 在当前目录下查找今天之内有改动的文件。
  
\# 与用户或用户组名有关的参数:
-user name : 列出文件所有者为 name 的文件。
-group name : 列出文件所属用户组为 name 的文件。
-uid n : 列出文件所有者为用户 ID 为 n 的文件。
-gid n : 列出文件所属用户组为用户组 ID 为 n 的文件。
  
例如:
find /home/ljianhui -user ljianhui # 在目录/home/ljianhui 中找出所有者为 ljianhui 的文件。
   
\# 与文件权限及名称有关的参数:
-name filename :找出文件名为filename的文件;
-size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件;
-tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f)、设备文件(b、c)、目录(d)、连接文件(l)、socket(s)、FIFO管道文件(p); 
-perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755;
-perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示;
-perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示。
  
例如:
find / -name passwd # 查找文件名为passwd的文件。 
find . -perm 0755 # 查找当前目录中文件权限的0755的文件。 
find . -size +12k # 查找当前目录中大于12KB的文件,注意c表示byte。 
  
6.5 cp 命令
该命令用于复制文件,copy 之意,它还可以把多个文件一次性地复制到一个目录下, 它的常用参数如下:
-a :将文件的特性一起复制。
-p :连同文件的属性一起复制,而非使用默认方式,与-a 相似,常用于备份。
-i :若目标文件已经存在时,在覆盖时会先询问操作的进行。
-r :递归持续复制,用于目录的复制行为。
-u :目标文件与源文件有差异时才会复制。
    
例如 :
cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2 
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中 
  
6.6 mv 命令
该命令用于移动文件、目录或更名,move 之意,它的常用参数如下:
-f :force强制的意思,如果目标文件已经存在,不会询问而直接覆盖。 
-i :若目标文件已经存在,就会询问是否覆盖。 
-u :若目标文件已经存在,且比目标文件新,才会更新。 
  
注:该命令可以把一个文件或多个文件一次移动一个文件夹中,但是最后一个目标文件一定要是“目录”。
  
例如:
mv file1 file2 file3 dir # 把文件file1、file2、file3移动到目录dir中 
mv file1 file2 # 把文件file1重命名为file2 
  
6.7 rm 命令
该命令用于删除文件或目录,remove 之间,它的常用参数如下:
-f :就是force的意思,忽略不存在的文件,不会出现警告消息。 
-i :互动模式,在删除前会询问用户是否操作。 
-r :递归删除,最常用于目录删除,它是一个非常危险的参数。 
  
例如:
rm -i file # 删除文件file,在删除之前会询问是否进行该操作。 
rm -fr dir # 强制删除目录dir中的所有文件。 
  
6.8 ps 命令
该命令用于将某个时间点的进程运行情况选取下来并输出,process 之意,它的常用参数如下:
-A :所有的进程均显示出来。
-a :不与 terminal 有关的所有进程。
-u :有效用户的相关进程。
-x :一般与 a 参数一起使用,可列出较完整的信息。
-l :较长,较详细地将 PID 的信息列出。
  
其实我们只要记住 ps 一般使用的命令参数搭配即可,它们并不多,如下:
ps aux # 查看系统所有的进程数据。 
ps ax # 查看不与terminal有关的所有进程。 
ps -lA # 查看系统所有的进程数据。
ps axjf # 查看连同一部分进程树状态。 
  
6.9 kill 命令
该命令用于向某个工作(%jobnumber)或者是某个 PID(数字)传送一个信号,它通常与 ps 和 jobs 命令一起使用,它的基本语法如下: kill -signal PID
1:SIGHUP,启动被终止的进程。 
2:SIGINT,相当于输入ctrl+c,中断一个程序的进行。 
9:SIGKILL,强制中断一个进程的进行。 
15:SIGTERM,以正常的结束进程方式来终止进程。
17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行。 
  
例如:
\# 以正常的结束进程方式来终于第一个后台工作,可用 jobs 命令查看后台中的第一个工作进程。
kill -SIGTERM %1

\# 重新改动进程 ID 为 PID 的进程,PID 可用 ps 命令通过管道命令加上 grep 命令进行筛选获得
kill -SIGHUP PID
  
6.10 killall 命令
该命令用于向一个命令启动的进程发送一个信号,它的一般语法如下: killall [-iIe] [command name]
  
它的参数如下:
-i :交互式的意思,若需要删除时,会询问用户。 
-e :表示后面接的command name要一致,但command name不能超过15个字符。 
-I :命令名称忽略大小写。 
  
例如:
killall -SIGHUP syslogd # 重新启动 syslogd
  
6.11 file 命令
该命令用于判断接在 file 命令后的文件的基本数据,因为在 Linux 下文件的类型并不是以后缀为分的,所以这个命令对我们来说就很有用了,它的用法非常简单,基本语法如下:
file filename
  
例如:
file ./test
  
6.12 tar 命令
该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如 gzip 和 bzip 等)进行压缩和解压。它的常用参数如下:
-c :新建打包文件。
-t :查看打包文件的内容含有哪些文件名。
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中。
-j :通过bzip2的支持进行压缩/解压缩。
-z :通过gzip的支持进行压缩/解压缩。
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来。
-f filename :filename为要处理的文件。  
-C dir :指定压缩/解压缩的目录dir。
  
通常我们只需要记住下面三条命令即可:
1. 压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称。 
2. 查询:tar -jtv -f filename.tar.bz2。 
3. 解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录。 
  
注:文件名并不定要以后缀 tar.bz2 结尾,这里主要是为了说明使用的压缩程序为 bzip2
  
6.13 cat 命令
该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与 more 和 less 一起使用,从而可以一页页地查看数据。例如:
cat text | less # 查看 text 文件中的内容
  
注:这条命令也可以使用 less text 来代替。
  
6.14 chgrp 命令
该命令用于改变文件所属用户组,它的使用非常简单,它的基本用法如下:chgrp [-R] dirname/filename
-R :进行递归的持续对所有文件和子目录更改。
  
例如:
chgrp users -R ./dir # 递归地把 dir 目录下中的所有文件和子目录下所有文件的用户组修改为 users
  
6.15 chown 命令
该命令用于改变文件的所有者,与 chgrp 命令的使用方法相同,只是修改的文件属性不同,不再详述。
  
6.16 chmod 命令
该命令用于改变文件的权限,一般的用法如下:
chmod [-R] xyz 文件或目录。
  
-R:进行递归的持续更改,即连同子目录下的所有文件都会更改。同时,chmod 还可以使用 u(user)、g(group)、o(other)、a(all)和+(加入)、-(删除)、=(设置)跟 rwx 搭配来对文件的权限进行更改。
  
例如:
chmod 0755 file # 把 file 的文件权限改变为-rxwr-xr-x
chmod g+w file # 向 file 的文件权限中加入用户组可写权限。
  
6.17 vim 命令
该命令主要用于文本编辑,它接一个或多个文件名作为参数,如果文件存在就打开,如果文件不存在就以该文件名创建一个文件。vim 是一个非常好用的文本编辑器,它里面有很多非常好用的命令,在这里不再多说。
  
6.18 gcc 命令
对于一个用 Linux 开发 C 程序的人来说,这个命令就非常重要了,它用于把 C 语言的源程序文件,编译成可执行程序,由于 g++的很多参数跟它非常相似,所以这里只介绍 gcc 的参数,它的常用参数如下:
-o :output 之意,用于指定生成一个可执行文件的文件名。
-c :用于把源文件生成目标文件(.o),并阻止编译器创建一个完整的程序。
-I :增加编译时搜索头文件的路径。
-L :增加编译时搜索静态连接库的路径。
-S :把源文件生成汇编代码文件。
-lm:表示标准库的目录中名为 libm.a 的函数库。
-lpthread :连接 NPTL 实现的线程库。
-std= :用于指定把使用的 C 语言的版本。
  
例如:
\# 把源文件 test.c 按照 c99 标准编译成可执行程序 test
gcc -o test test.c -lm -std=c99
\#把源文件 test.c 转换为相应的汇编程序源文件 test.s
gcc -S test.c
  
6.19 time 命令
该命令用于测算一个命令(即程序)的执行时间。它的使用非常简单,就像平时输入命令一样,不过在命令的前面加入一个 time 即可,例如:
time ./process
time ps aux
  
在程序或命令运行结束后,在最后输出了三个时间,它们分别是:user:用户 CPU 时间,命令执行完成花费的用户 CPU 时间,即命令在用户态中执行时间总和;
system:系统 CPU 时间,命令执行完成花费的系统 CPU 时间,即命令在核心态中执行时间总和;
real:实际时间,从 command 命令行开始执行到运行终止的消逝时间;
  
注:用户 CPU 时间和系统 CPU 时间之和为 CPU 时间,即命令占用 CPU 执行的时间总和。实际时间要大于 CPU 时间,因为 Linux 是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。
  • 43
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方寸之间不太闲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值