什么是epel?如何安装epel-release?

什么是EPEL?

EPEL的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。

为什么要用EPEL?

RHEL以及他的衍生发行版如CentOS Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安全稳定是重点,官方的rpm repository提供的rpm包也不够丰富,EPEL恰恰可以解决这两方面的问题。

简单来说

如果某个软件在yum库里面找不到的话,就可以考虑安装epel-release,epel-release可以扩充yum库。

如何安装epel-release?

yum install epel-release

CentOS8安装图形界面后,怎样修改为默认命令行启动?

问题提出

  1. 安装了CentOS8图形界面版后,每次系统启动时间太长,而且如果VMWare里面安装了多台虚拟机,图形界面的CentOS耗费的内存太多(据我测试,不分配2G内存系统都卡到爆)。
  2. 关键的问题是:现在对Linux命令行已经不那么恐惧了,感觉自己在命令行下完全可以操作CentOS8了。哇哈哈哈!
  3. 所以希望CentOS8启动的时候直接以命令行形式启动:提高启动速度、降低内存占用。这样VMWare同时开10个CentOS8也不成问题了。

解决方法

图形界面->命令行:

  1. 在图形界面任何界面按ctrl+alt+f3,这时就会切换到命令行界面。
  2. 在命令行里输入systemctl set-default multi-user.target,这样下次启动就会默认以命令行启动了。

命令行->图形界面:

  1. 在命令行界面按ctrl+alt+f1,这时就会切换到图形界面。
  2. 在命令行里输入systemctl set-default graphical.target,这样下次启动就会默认以图形界面启动了。

CentOS 8下安装Apache+PHP+MySQL环境

安装PHP和Apache

在CentOS 8中,安装PHP和Apache是非常简单的,只需要一句话:

yum install php

在安装PHP的时候,会默认将httpd(Apache)安装好。
file

配置Apache

1. 修改httpd.conf配置

编辑/etc/httpd/conf/httpd.conf文件,将AllowOverride的对应值改为all。
file

2. 放行80端口

firewall-cmd --permanent --zone=public --add-port=80/tcp

3. 重启apache和防火墙

systemctl restart httpd
systemctl restart firewalld

4. 测试

在/var/www/html下新建index.php里面写上phpinfo()测试一下:
file

安装MySQL

有关MySQL安装请参考:http://www.moonlightgate.com/archives/173

CentOS Mini与相关命令安装

CentOS8 Mini常见问题

如果安装CentOS8图形界面版本,没有2G内存根本跑不动。这在我们本机使用VMWare做集群测试的时候是非常不方便的。
所以我们经常选择CentOS Mini版本安装,而Mini版本里面会缺失很多必要的功能和命令,比如连ifconfig都没有。
在CentOS8 Mini中,我们经常需要自行安装需要的功能。

找不到make命令

yum install gcc automake autoconf libtool make
yum install gcc-c++

找不到ifconfig命令

yum install net-tools

找不到wget命令

yum install wget

找不到vim命令

yum install vim

找不到network

CentOS8中,network命令已经被nmcli取代,所以需要NetworkManager工具:

yum install NetworkManager //注意大小写

在CentOS8中配置JDK13、Tomcat9、MySQL5.6环境

准备和前提

1. 通过fileZilla和服务器建立连接。

连接方法参考:http://www.moonlightgate.com/archives/170

2. 安装JDK

2.1 安装思路。

JDK在Linux下的安装思路和在Windows下的安装思路类似:
A. 安装软件。其实就是上传文件和解压文件。
B. 配置两个环境变量:JAVA_HOME、BIN目录。

2.2 上传、解压、移动。

a. 压缩包jdk-13.0.1_linux-x64_bin.tar.gz上传到/usr/local/tmp目录
b. 解压压缩包

tar zxvf jdk-13.0.1_linux-x64_bin.tar.gz

c. 解压后的目录移动到/usr/local/jdk13

mv jdk-13.0.1 /usr/local/jdk13

2.3 配置环境变量。

vim /etc/profile

在文件中找到export部分,注释export行并增加以下内容:

#export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export JAVA_HOME=/usr/local/jdk13
export PATH=$JAVA_HOME/bin:$PATH

export的作用是增加新的或修改已经存在的环境变量。
如果是修改已经存在的环境变量,需要注意在环境变量末尾加:$变量名。记住是冒号:(在Windows中是分号;)。

2.4 解析profile文件或重启服务器。

解析命令如下:

source /etc/profile

如果不解析,则配置不生效。

2.5 JDK安装完毕,测试一下。

file

3. 安装Tomcat

3.1 上传、解压、移动

a. 压缩包apache-tomcat-9.0.30.tar.gz上传到/usr/local/tmp目录
b. 解压压缩包

tar zxvf apache-tomcat-9.0.30.tar.gz

c. 解压后的目录移动到/usr/local/apache-tomcat-9

mv apache-tomcat-9.0.30 /usr/local/apache-tomcat-9

3.2 配置环境变量

vim /etc/profile

在文件中找到export部分,在上面的基础上修改为下面内容:

#export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
export JAVA_HOME=/usr/local/jdk13
export PATH=$JAVA_HOME/bin:$PATH

export TOMCAT_HOME=/usr/local/apache-tomcat-9
export CATALINA_HOME=/usr/local/apache-tomcat-9

4.3 解析profile文件或重启服务器。

解析命令如下:

source /etc/profile

如果不解析,则配置不生效。

4.4 Tomcat安装完毕,启动Tomcat。

file
注意:绿色的以.sh结尾的文件,是Linux中的可执行文件。运行.sh文件的命令为
./XXX.sh

4.5 配置防火墙,访问Tomcat。

方法A:直接停掉防火墙

systemctl stop firewalld

方法B:在firewalld里面放行8080端口

运行以下命令:

firewall-cmd --zone=public --add-port=8080/tcp --permanent

这条命令运行完成后,会将8080端口放行的内容添加到 /etc/firewalld/zones/public.xml中:
file
注意:在CentOS7之前的版本中,放行端口号是通过配置iptables完成的。
然后重启防火墙:

firewall-cmd --reload

4.6 大功告成,测试一下

file

4. 安装MySQL

4.1 上传、解压、移动

a. 压缩包mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz上传到/usr/local/tmp目录
b. 解压压缩包

tar zxvf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz

c. 解压后的目录移动到/usr/local/mysql

mv mysql-5.6.46-linux-glibc2.12-x86_64 /usr/local/mysql

4.2 创建mysql专用用户组和用户,给mysql文件夹赋权

a. 创建用户组(groupadd 用户组名)

groupadd mysql

b. 创建用户(useradd -r用户名称 -g用户组名称)

useradd -r -g mysql mysql

c. 保证命令行当前在/usr/local/mysql中,为mysql目录赋权(注意最后的.前面有个空格)

[root@localhost mysql]# chgrp -R mysql .
[root@localhost mysql]# chown -R mysql .

4.3 注册MySQL服务

a. 确保/etc/my.cnf不存在,如果存在删除。
b. 保证命令行当前在/usr/local/mysql中,执行如下命令初始化数据库。

./scripts/mysql_install_db --user=mysql

运行完成后,会在/usr/local/mysql/support-files下自动生成一个my-default.cnf文件。
c. 复制上面的my-default.cnf文件到/etc/my.cnf

cp my-default.cnf /etc/my.cnf

d. 复制MySQL启动文件到自启动文件夹/etc/rc.d/init.d/下

cp mysql.server /etc/rc.d/init.d/mysql

注:mysql为service名称,其实可以按照个人爱好随便写。

4.4 启动MySQL

service mysql start

此时,如果在命令行里面输入mysql命令,还是无法使用的,原因是mysql命令文件目前位于/usr/local/mysql/bin文件夹下,想要直接在命令行里面使用mysql命令,mysql命令必须出现在/usr/bin/文件夹下。
这时只需要按照如下方法添加软连接即可:

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

4.5 使用mysql命令报错解决

使用mysql命令时,可能会报如下错误:

mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

使用如下命令通过yum安装libncurses即可:

yum install libncurses*

4.6 修改MySQL的root用户密码

第一步:进入mysql数据库

use mysql

第二步:更新root用户的密码为111111

update user set  password = password("111111") where User = "root"

第三步:刷新权限使设定生效

flush privileges;

4.7 大功告成,本地测试一下:

file

4.8 配置以可以进行远程连接

截止到4.7,还是只能本机访问的,如果需要远程访问,还需要做如下配置。
第一步:赋予root用户远程连接权限。

grant all privileges on *.* to root@'%' identified by '111111' with grant option;
flush privileges;

第二步:开启3306端口。

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

这时候,通过MySQL客户端就可以访问MySQL数据库啦。

XShell连接Linux(CentOS8)服务器方法

前言

过程

1. 本机安装XShell

自行下载XShell安装包,安装到本地。

2. 打开XShell,新建会话

file

  • 名称:随意,主要起标识作用
  • 协议:使用默认的SSH
  • 主机:查看要连接的服务器IP地址
  • 端口号:使用默认的22(默认情况下,Linux只开放22端口)

3. 连接

file

4. VMWare NAT模式下无法连接的问题

将下面位置的√选上就好了。
file

CentOS目录结构及常用Linux命令汇总

第一部分:说明

  • 个人总结,随着时间推移不断补充。
  • 如果不是专业的服务器维护工程师,掌握以下这些命令行就可以满足你与服务器进行各种数据交换的需要了(部署项目代码等)。
  • 以下命令在CentOS 8下亲测有效。

第二部分:目录结构

etc

存放系统配置的目录。配置环境变量、服务等。

home

除了root以外,其它用户都在home下有以用户名作为文件夹名称的目录。用户只对自己的文件夹有访问权限。

root

root用户的单独文件夹。用的比较少。

usr和opt

  • usr类似Windows中的C://Program Files
  • opt类似D盘自己指定的安装目录

如果使用usr作为程序目录,则可以在usr/local下新建tmp文件夹,所有安装文件压缩包都上传到tmp目录下。

bin和sbin

bin存放所有用户都能使用的命令文件比如:ls,cat、cd等。
sbin存放只有root管理员可以使用的命令文件比如:fdisk、shutdown、mount

dev

设备文件夹。比如挂载光驱,Windows操作系统下的硬盘等。

srv

服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内。

第三部分:文件夹权限

Linux中的文件属性说明有10位:

  • 第1位:代表当前文件类型。
    • - 文件
    • d 文件夹
    • l 软连接
  • 第2-4位:分别对应当前用户的“读、写、执行”权限。
    • r 可读
    • w 可写
    • x 可执行
    • - 无该权限
  • 第5-7位:当前组的其它用户的“读、写、执行”权限。
  • 第8-10位:非当前组用户的“读、写、执行”权限。

第四部分:命令汇总

1. 理解:~和/,#和$

file
命令行进入后默认显示:
[leon@localhost ~]$
命令格式如下:
[当前用户@当前主机 当前目录]用户权限
当前目录,有三种情况:

  • ~:当前用户的home目录
  • /:root用户的根目录
  • XXX:当前进入的某个目录名称
    用户权限,有两种情况:
  • $:普通用户登陆
  • #:root用户登陆

2. 常用命令。

2.1 pwd

打印工作目录,显示当前文件夹全路径。当前工作目录比较深的时候,想知道当前所在位置时用这个命令。

2.2 cd

进入某个目录。
cd XXX:进入XXX目录
cd ..:回到上级目录
cd /:回到根目录
这里需要注意,和windows不同的是,Linux下cd后面如果跟".."的话,也需要在".."前加空格。

2.3 mkdir

创建新文件夹。
mkdir tmp:在当前目录下创建一个空的tmp目录。

2.4 ls,dir,ll

file
ls:列出目录(Linux命令,有着色)
dir:列出目录(Windows命令,无着色)
ll:列出目录详情
-a 属性,列出隐藏文件。Linux中,以.开头的文件是隐藏文件。

2.5 vi,vim

vi XXX:编辑文件XXX(无着色)
vim XXX:编辑文件XXX(vi高级版,有着色)
如果文件不存在就创建这个XXX文件。

2.6 vi和vim指令

i键:进入编辑模式
Esc键:退出编辑模式
:wq 保存编辑并退出
:q 文件没有编辑的情况下退出
:q! 强制退出,如果编辑了则不会保存编辑的内容。

2.7 cat、more、less、most、head、tail、tailf

cat:查看某文件的全部内容
more和less和most:分屏查看某文件的内容
file
head [-n]:查看文件前n行,默认查看文件前10行。
tail [-n]:查看文件末n行,默认查看文件末10行。
tailf [-n]:当该文件被编辑时,动态查看文件末n行,默认查看文件末10行。比如查看动态日志。

2.8 touch

touch demo.java 新建空文件demo.java

2.9 echo

echo "hello" >> demo.xml
将字符串hello添加到demo.xml末尾
echo "helloworld" > demo.xml
将字符串helloworld覆盖demo.xml文件内容

2.10 ifconfig

类似于Windows中的ipconfig,查看网卡信息。

2.11 reboot

重启机器

2.12 加压缩:tar zxvf 文件名

比如:tar zxvf apachetomcat.tar.gz
z:文件是否具有gzip(.tar.gz,.tgz)属性
x:释放文件,拆包
v:解压缩过程中显示文件
f:指定被处理的文件名

2.13 压缩:tar zcvf 打包后文件名.tar.gz /要打包的文件(夹)路径

比如:
tar zcvf backup.tar.gz /bin

tar cvf backup.tar /bin
z:以gzip(.tar.gz)方式压缩
c:打包
v:压缩过程中显示文件
f:指定被处理的文件名
说明:当时用winrar解压tar.gz文件时,我们会发现,文件往往需要解压两次,第一次解压为tar文件,解压tar文件后才会是打包的文件。其实,使用tar命令时,如果不加z,那么tar的作用仅仅是打包,如果加了z,则是在打包基础上再使用gzip压缩一遍。所以tar.gz的文件实际上是经过“打包”和“压缩”两道工序的产物,这和我们平时使用windows下rar打包压缩一次完成的理念稍微有点不同

2.14 复制命令:cp和cp -r

cp 源文件路径 新文件路径
cp -r 源文件夹路径 新文件夹路径

2.15 剪切(重命名):mv

mv 源文件路径 新文件路径
mv 源文件名 新文件名

2.16 删除:rm

rm 文件名,删除文件
rm -f 文件名,强制删除文件
rm -r 文件夹名,删除文件夹
rm -rf 文件夹名,强制删除文件夹

2.17 clear

清空当前屏幕内容
快捷键Ctrl+l

2.18 ip add和dhclient

ip add查看本地ip地址
dhcclient 获取ip地址
dhclient -r释放ip地址

3.19 systemctl

systemctl start 服务名,开启某个服务
systemctl stop 服务名,停止某个服务
systemctl status 服务名,某个服务当前状态
systemctl restart 服务名,重启某个服务
systemctl enable 服务名,将某个服务添加为自启动
比如,查看当前防火墙服务的状态:
systemctl status firewalld

3.20 grep和find

grep 关键字 文件名:在文件中查找关键字
find 路径 -name 文件名:在指定路径查找指定文件

3.21 ps,top和kill

ps -ef:查看所有进程的最后状态信息(静态)
ps -ef|grep XXX:查看与XXX相关的进程
top:查看所有进程的动态信息
kill -9 进程PID:结束进程

3.22 groupadd,useradd,passwd

groupadd 组名
useradd -g 组名 用户名
passwd 用户名

3.23 su

su 用户名:切换到某用户,如果切换到root,直接su

3.24 chmod

  • 更改文件权限9位标识法
    chmod u=rwx,g=rwx,o=rwx abc.sh
    使abc.sh文件所有组的所有用户可:读写运行
  • 更改文件权限3位标识法
    chomod 666 abc.sh
    有关9位标识法和3位标识法请参考:http://www.moonlightgate.com/archives/217

3.25 firewall-cmd

  • 查看当前开放的端口信息
    firewall-cmd --list-all
  • 永久开放某端口号(比如8066)
    firewall-cmd --zone=public --add-port=8066/tcp --permanent
    firewall-cmd --reload

3.26 apt-get,aptitude,yum,dnf

都是包安装程序命令:
dnf > yum > aptitude > apt-get

3.27 curl

返回网址对应的html信息:

curl http://www.baidu.com

3.28 make

Linux下,源码的安装一般由3个步骤组成:
配置(configure)、编译(make)、安装(make install)

  • ./configure:运行目录下的configure文件,作用是检测系统配置,生成makefile文件,以便你可以用make和make install来编译和安装程序。
  • make:进入文件目录下,如果有makefile文件,就运行make命令,这个过程是进行文件的编译。
  • make install:编译完成后,make install命令用来安装。

重要的./configure --prefix=路径:

  • ./configure --prefix=路径:作用是编译的时候用来指定程序存放路径。
  • 如果在make前不指定prefix,则可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share。
  • 卸载这个程序的时候,要么在原来的make目录下用一次make uninstall(前提是make文件指定过uninstall),要么去上述目录里面把相关的文件一个个手工删掉。
  • 指定prefix,直接删掉一个文件夹就够了。

使用make前需先安装gcc和g++

yum install gcc automake autoconf libtool make
yum install gcc-c++

VMWare Workstation下安装CentOS 8详细说明

第一步:安装VMWare Workstation

安装完打开软件,显示如下界面:
file

第二步:下载CentOS ISO

从CentOS官网上下载ISO文件到本地。
我下载后的文件名是:CentOS-8-x86_64-1905-dvd1.iso

第三步:在VMWare WorkStation中创建虚拟机。

分步操作截图及解释如下:

1. 创建新的虚拟机

file

2. 使用:自定义(高级)

file

3. 无需修改,直接下一步

file

4. 选择ISO,然后下一步

file

5. 设定Linux账户信息

file
全名:主机名称(可以理解为上图Windows系统中的计算机全名)。
用户名:可以使用小写字母、数字和破折号,但不要在用户名中以破折号作为起始字符。请勿使用 root 作为名称。
密码:用户名和root用户的密码。
file

6. 设定虚拟机名称

file
虚拟机名称:这个是为虚拟机取得名字,方便日后在VMWare WorkStation中区分。这个名字最终会显示在WorkStation左侧的列表中。
位置:默认是C盘,我选择放在F盘。

7. 普通应用一个处理器就够了

file

8. 普通应用一个G的内存就够了

file

9. 使用网络地址转换(NAT)

file
三种连接方式的解释如下:
- 桥接网络(bridged)
在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。
假设你的PC机在当前局域网里面的IP地址是192.168.0.104,那么安装后的虚拟机IP地址就是192.168.0.XXX
- 网络地址转换(NAT)
使用NAT模式可以实现在虚拟系统里访问互联网,但虚拟系统只能和主机通信,而无法和主机本局域网中的其他真实主机进行通讯。相当于虚拟主机和当前主机组件了新的虚拟局域网。
比如,当前主机在局域网中的IP地址是192.168.0.104,那么使用NAT后,当前主机和虚拟主机将会以新的IP段,比如192.168.10.XXX的虚拟地址进行通信。
- 仅主机模式网络(host-only)
在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式。在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。
提示:在host-only模式下,虚拟系统和宿主机器系统是可以相互通信的,相当于这两台机器通过双绞线互连。

10. 下一步

file

11. 下一步

file

12. 下一步

file

13. 设定硬盘空间大小,其实10G足够了。

file

14. 选择和第六步相同的位置方便管理

file

15. 点击完成。开始安装过程。

file

报错1:

file
vmci是一个宿主机和虚拟机之间的交换层,可以帮助虚拟机更快地调用硬件资源,但是win10对其支持不完善,个别机器会报错,解决方法如下:
file
查找到 vmci0.present="TRUE",将TURE更改为FALSE,保存即可。

报错2:

file
主要原因是虚拟机自动加载两个CD。解决方法如下:
在设置里把CD/DVD(IDE)autoinst.iso取消启动时连接,只启用CD/DVD2(IDE)就好了。
file

第四步:在虚拟机中安装CentOS8

1. 选择安装过程中使用的语言。

file

2. 点击有黄叹号的地方。

file

3. 啥也不用干,点击完成。

file

4. 开始安装

file

5. 安装过程中点击【根密码】设置root密码

这时你可能会晕了,为什么又要设root密码?而且还提示没有创建用户呢?刚刚在上面不是为root设密码而且创建了个leon用户吗?
注意:上面那步是快捷安装时才适用的,而CentOS8由于版本比较新,不适用与快捷安装,所以之前的设定相当于没用。如果装CentOS6.5,上面的设置就会生效了。
file

6. 然后就是漫长的等待,最后重启即可进入系统进行配置了。

file

7. 点击接受许可证,大功告成了!

file

对于程序员而言是否需要学习Linux?有需要学些什么?

什么是Linux?

Linux的详细由来自己去百度吧。
我对Linux的理解很简单:Linux是专门为服务器设计的操作系统。

程序员是否需要学Linux?

我觉得主要是看你的工作性质。
如果你是纯开发人员,不涉及服务器运维、负载均衡等工作的话,其实不学Linux也无所谓。

Linux学些什么?

作为程序员,如果作为知识扩充或者希望扩大自己的技术接触面的话。学习下Linux还是很有用的,那么具体学些什么呢?

  1. 学习Linux的世界观。
    用“世界观”这个词有些大,但其实很贴切。在Windows中,没人会在纯DOS下完成所有工作,而在Linux中,很有可能所有工作都是在小黑窗下完成的。所以,学习Linux最重要的一点就是要习惯Linux的世界观,习惯在小黑窗下(命令行)下完成所有工作。
  2. Linux的常用指令。
    比如:ls,cd,mkdir,vim这些常用命令。一开始不用死记硬背,用的时候百度下其实就可以了,慢慢的就都会记熟了。
  3. Linux的目录结构。
    每个文件件的作用,平时怎么使用这些文件夹。
  4. 用相关Windows软件和Linux服务器做数据传输。
    在Windows上通过FTP客户端,XShell等和Linux做数据传输。
  5. 常用的Linux环境配置和部署。
    视你的工作情景,学会在Linux上配置PHP环境、JAVA环境,并学会如何部署相关的程序。

以上这些可能你会觉得有些多,其实真正学的话,半天时间足够了。

程序员平时需要在Linux环境下做开发吗?

我个人认为是不需要的。
很多程序员喜欢耍酷,喜欢在Linux做开发。根据我个人经验,这么做除了酷之外,没啥实际意义。因为Windows下的IDE和辅助工具比Linux好的太多了。
你需要做的就是需要使用Linux的时候可以通过命令行完成基本的工作,让别人知道你也可以使用Linux,这其实已经很酷了!
记住,Linux是为服务器设计的操作系统,不是为PC机,所以不要钻牛角尖。