CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本。你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级、安装新的软件包、配置特定服务和应用程序等操作。
以下事情全都做完后,就可以让 Nginx 作为 HTTP 服务,让 MariaDB 来替代 MySQL 作为数据库,建立 FTP 以及 SMB 来与他人共享文档,还有一些 Python 小工具。
使用静态 IP 地址配置网络
使用ip
命令代替ifconfig
命令。
# 安装 ifconfig
yum -y install net-tools
使用ip
命令来配置静态 IP 地址。所以,确认你首先检查了当前的 IP 地址。
ip addr show
使用 vi 编辑器打开并编辑文件/etc/sysconfig/network-scripts/ifcfg-ens33
。如果不是 root 登录的话,需要在命令前加上sudo
使用管理员身份才能进行配置更改。
cd /etc/sysconfig/network-scripts
vi ifcfg-ens33
主要是编辑以下四个地方:
IPADDR = "静态 IP 地址"
GATEWAY = "默认网关"
DNS1 = "首选 DNS"
DNS2 = "次选 DNS"
更改了ifcfg-ens33
之后,它看起来像下面的这样:
重启网络服务并检查 IP 是否和分配的一样。如果一切都顺利,用 Ping 查看网络状态。
# 重启网络服务
systemctl restart network.service
# 检查 IP
ip addr show
# Ping 外网
ping -c4 chaisw.cn
设置服务器的主机名称
更改 CentOS 服务器的主机名称。
# 查看当前分配的主机名称
echo $HOSTNAME
要设置新的主机名称,我们需要编辑/etc/hostname
文件并用想要的名称替换旧的主机名称。
# 进入 /etc 目录
cd /etc
# 编辑 hostsname
vi hostname
设置完了,注销后重启登录来确认主机名称。
# 重启系统
reboot
# 登录主机
ssh -l root -p 22 服务器IP地址
# 检查主机名称
hostname
更新或升级最小化安装的 CentOS
这样做除了更新安装已有的软件最新版本以及安全升级,不会安装任何新的软件。总的来说更新(update)和升级(upgrade)是相同的,除了事实上:升级 = 更新 + 更新时进行废弃处理
yum update && yum upgrade
安装命令行 Web 浏览器
大部分情况下,尤其是在生产环境中,我们通常用没有 GUI 的命令行安装 CentOS,在这种情况下我们必须有一个能通过终端查看网站的命令行浏览工具。为了实现这个目的,lynx
和links
都是此类著名的工具。
yum -y install lynx
yum -y install links
装好后访问网页的方法也很简单:
lynx https://chaisw.cn
links https://chaisw.cn
通用按键如下,更多操作可以 Google:
上方向键:页面上的前一个链接(用高亮度显示)
下方向键:页面上的下一个链接(用高亮度显示)
左方向键:回到上一个页面
右方向/回车键:跳转到链接指向的地址
学会使用 Systemd
CentOS 7 已经切换到 systemd,它用于替代红帽企业版 Linux 前任版本中的 SysV 和 Upstart,对系统和服务进行管理。因此系统指令也有所变化,之前用于启动、重启、停止各种服务的 service 作为向后兼容的指令还能使用,但是将来可能会消失。同时,chkconfig 也改成了 systemctl 了。这里列举了一些常用的对应于 service 和 chkconfig 的新的 systemctl 指令。
# 查看使用的版本
systemctl --version
# 使某服务自动启动(比如自启动 httpd 服务)
chkconfig --level 3 httpd on # 旧指令
systemctl enable httpd.service # 新指令
# 使某服务不自动启动
chkconfig --level 3 httpd off # 旧指令
systemctl disable httpd.service # 新指令
# 检查某服务状态
service httpd status # 旧指令
systemctl status httpd.service # 新指令
# 显示所有已启动的服务
chkconfig --list # 旧指令
systemctl list-units --type=service # 新指令
systemctl list-unit-files --type=service # 新指令
# 加入自定义服务
chkconfig --add est # 旧指令
systemctl load test.service # 新指令
# 启动某服务
service httpd start # 旧指令
systemctl start httpd.service # 新指令
# 停止某服务
service httpd stop # 旧指令
ystemctl stop httpd.service # 新指令
# 重启某服务
service httpd restart # 旧指令
systemctl restart httpd.service # 新指令
# 对于重启指令,如果服务在运行中,它将重启服务,如果服务不在运行中,它将会启动服务。
# 也可以使用 try-start 选项,它只会在服务已经在运行中的时候重启服务。
systemctl try-restart httpd.service
# 重新加载一个服务的配置文件
systemctl reload httpd.service
安装 Nginx
在 CentOS 7 中,直接使用 yum 安装 Nignx 会提示无下载源。因此,需要添加 Nginx 的下载源到 yum:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
指定了下载源后,就可以安装 Nginx 了.安装完成并不会立刻启动,需要我们手动执行命令来开启它:
yum install -y nginx
systemctl start nginx.service
# 加入开机自启动
systemctl enable nginx.service
允许其它设备访问 http 服务器,打开防火墙的对应服务和端口
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent
# 重启防火墙令其生效
firewall-cmd --reload
然后就可以使用lynx/links http://localhost
命令来查看 Nginx 的欢迎页面了。
Nginx 的默认站点根目录在/usr/share/nginx/html/
。安全起见,我们另外设置一个目录作为站点目录:
# 先将默认配置进行备份
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
# 用 vi 编辑 default.conf
vi /etc/nginx/conf.d/default.conf
# 将 /usr/share/nginx/html 改为你想指定的目录
location / {
root /usr/share/nginx/www;
index index.html index.htm;
}
# 重启 Nginx 服务令其生效
systemctl restart nginx.service
注意:新目录里至少要有一个index.html
文件作为站点主页,这样才能确保站点能够被正常访问。
安装 MariaDB & PHP
MariaDB 是 MySQL 的一个分支。在意识到 Oracle 公司可能会对 MySQL 的许可做什么后,MariaDB 从 MySQL 中分离了出来,它作为 MySQL 的”向下替代品”,包含了一些优于 MySQL 的新特性。
yum -y install mysql mysql-devel
yum -y install mariadb*
# 装好 MariaDB 后,开启并设置为开机自启动
systemctl start mariadb.service
systemctl enable mariadb.service
默认配置文件在/etc/my.cnf
,接下来要给管理员帐号设置密码
mysqladmin -u root password "你的密码"
设置好密码后,重启 MariaDB:
systemctl restart mariadb.service
在主机登录 MariaDB,输入以下指令:
mysql -u username -p -h host databasename
这里,username
指的是帐号,host
指的是主机地址(本机则可以输入为loaclhost
),databasename
为数据库实体。确认指令后,会要求输入密码,然后才能进入数据库。本机登录的话直接输入mysql -u username -p
也是可以的。
如果要允许远程访问数据库的话,还需要把防火墙的相关服务打开:
firewall-cmd --add-service=mysql --permanent
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
然后进行以下操作,开启远程访问:
# 把所有数据库的所有表的所有权限,赋值给位于所有IP地址的 root 用户,new_password 自定义
grant all privileges on *.* to 'root'@'%'identified by 'new_password';
# 以上操作会带来不安全因素,因此最好新建一个用户来进行远程登录数据库,并且只赋予部分数据库的使用权限:
# 新建用户 new_name 并使用密码 new_password
create user 'new_name'@'%' identified by 'new_password';
# 新建数据库 new_sql
create database new_sql;
# 给新用户分配使用新数据库的权限
grant all privileges on new_sql.* to 'new_name'@'%';
# 重启 MariaDB 让配置生效
systemctl restart mariadb.service
此时就可以进行远程连接了。用来远程访问数据库的工具客户端有如下推荐:Sequel Pro
,MyCli
,phpMyAdmin
,DBeaver
。
接下来用 yum 安装 php 及相关软件:
yum -y install php php-fpm php-mysql php-mbstring php-xml
# 装好后,开启 php-fpm 并设置开机自启动
systemctl start php-fpm.service
systemctl enable php-fpm.service
然后编辑 Nginx 的配置文件,前提是已经装好了 Nginx:
vi /etc/nginx/conf.d/default.conf
将配置文件中的以下代码前面的#
井号注释删掉,将root
后面的html
改为站点的绝对路径,然后将/scripts$fastcgi_script_name
替换为$document_root$fastcgi_script_name;
,最终结果如下:
location ~ \.php$ {
root /usr/share/nginx/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
以上都设置好后,重启 PHP 和 Nginx:
systemctl restart php-fpm.service
systemctl restart nginx.service
最后我们通过在站点根目录用vi phpinfo.php
新建一个文件,文件中写入以下内容:
<?php
phpinfo();
然后在浏览器输入http://你的网址/phpinfo.php
来验证 php 服务是否成功运行。
关闭 SELinux
接下来要安装的 FTP 和 Samba 服务,都有可能受到 SELinux 的影响而无法正常使用。所以可以考虑关闭 SELinux。
虽然它为 Linux 提供安全强化,但同时也让 Linux 的一些服务的安装使用变得更复杂。一旦没有正确的为某项服务配置好 SELinux 的话,那么它将很可能导致其无法正常的运行。
临时关闭或开启 SELinux,可以使用下面的命令:
# 设置 SELinux 成为 permissive 模式(关闭SELinux)
setenforce 0
# 设置 SELinux 成为 enforcing 模式(开启SELinux)
setenforce 1
也可以通过vi /etc/selinux/config
的指令来修改 SELinux 的配置文件,来永久关闭 SELinux:
# 在原配置里用井号注释掉下面两项
#SELINUX=enforcing
#SELINUXTYPE=targeted
# 然后增加下面这条即可
SELINUX=disabled
保存退出后,重启系统,然后 SELinux 就彻底关闭了。
安装 Vsftpd
yum install -y vsftpd
配置文件在/etc/vsftpd/vsftpd.conf
先把 vsftpd 的默认配置文件进行备份:
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.defaul
备份成功后,用vi vsftpd.conf
建立一个新的配置文件,写入下面的配置:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=NO
local_root=/usr/share/nginx/www/
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
为了安全起见,不使用 root 作为 ftp 帐号,新建一个专门用来 ftp 操作的帐号:
# 新建一个名为 ftper 的本地帐号,禁止登陆 shell,且不为其创建登录目录
useradd -M -s /sbin/nologin ftper
# 为建好的 ftper 帐号设置密码
passwd ftper
# 如果建错了,可以删掉重建
userdel ftper
# 指定 ftper 的 ftp 登录主目录,要和配置文件里的 local_root= 结果保持一致
usermod -d /usr/share/nginx/www ftper
# 将 ftp 登录主目录的基本组和附加组设为 ftper
chown -R ftper:ftper /usr/share/nginx/www
还得让防火墙开启 FTP 服务和 21 端口的使用:
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=21/tcp --permanent
firewall-cmd --reload
以上操作完成后,执行重启FTP服务的命令systemctl restart vsftpd.service
后,就可以远程登录 FTP 了。
安装 Samba
Samba 是在 Linux 系统上实现 SMB 协议的免费软件,由服务器及客户端程序构成。它最大的功能就是可以用于 Linux 与 windows 系统之间的文件共享和打印共享,也可以用于 Linux 与 Linux 之间的资源共享。
如果没有共享需求的话,可以跳过这部分内容。
# 直接用 yum 来安装
yum -y install samba samba-client samba-common
# 备份 Samba 的配置文件
mv /etc/samba/smb.conf /etc/samba/smb.conf.defaul
用vi /etc/samba/smb.conf
指令来新建配置,写入以下内容:
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = Chai_SMB
map to guest = bad user
log file = /var/log/samba/log.%m
max log size = 512
security = user
passdb backend = tdbsam
load printers = no
#[homes]
# comment = Home Directories
# valid users = %S, %D%w%S
# browseable = No
# read only = No
# writable = Yes
#[printers]
# comment = All Printers
# path = /var/tmp
# browseable = No
# guest ok = No
# writable = No
# printable = No
[smb]
comment = 可看不可写
path = /usr/share/nginx/smb
public = yes
writable = No
write list = smber
create mask = 0755
directory mask = 0755
然后创建共享的目录和可以写入的用户:
# 创建目录,对应配置文件里的 path= 路径
cd /usr/share/nginx
mkdir smb
# 创建一个专门用来写入 Samba 的系统帐号,但是不让其能登录 shell
useradd -M -s /sbin/nologin smber
# 将刚才创建的系统帐号设置成 Samba 用户(需要设置密码)
pdbedit -a smber
# 如果设置错了,可以删除,指令如下
pdbedit -x smber
# 将之前创建好的目录的基本组和附加组指向系统帐号
chown -R smber:smber /usr/share/nginx/smb/
# 重启 Samba 令其生效,以及设置成开机启动
systemctl restart smb nmb
systemctl enable smb nmb
# 查看运行状态
systemctl status smb nmb
以上配置的意思是,建立一个叫 smber 的用户,可以登录到名叫 Chai_SMB 的 Samber 服务器进行查看和编辑共享文档,文档名叫 smb。而默认访客(无用户名密码),也可以查看 Samber 服务器上的共享文档,但是不能做编辑修改删除操作。
为了让其它主机能顺利访问到共享文档,还需要将防火墙的 smb 相关端口打开:
firewall-cmd --add-port=137/tcp --permanent
firewall-cmd --add-port=138/tcp --permanent
firewall-cmd --add-port=139/tcp --permanent
firewall-cmd --add-port=445/tcp --permanent
firewall-cmd --add-port=901/tcp --permanent
firewall-cmd --reload
以上都搞定后,就可以访问共享文件了。
安装 GCC
GCC 即 GNU 编译器集,是一个 GNU 项目开发的支持多种编程语言的编译系统,当你需要自己编译构建软件时将会用到它。
yum -y install gcc
可以通过gcc --version
指令来查看当前安装的版本。
安装 Java
Java 是一种通用的基于类的面向对象的编程语言。如果没有任何 Java 应用需要运行,也可以不安装它。
yum -y install java
可以通过java -version
指令来查看当前安装的版本。
安装 Nmap 监视开放端口
Nmap 网络映射器用来分析网络,通过运行它可以发现网络的映射关系。
yum install -y nmap
装好后,可以使用nmap localhost
命令来列出主机中所有的开放端口以及对应使用它们的服务。
一些常用命令:
# 扫描主机并展示更多信息
nmap -v 127.0.0.1
# 扫描多个主机
nmap baidu.com qq.com chaisw.cn
# 扫描一个IP范围
nmap 192.168.0.88-99
# 使用IP地址的最后一段扫描多个主机
nmap 192.168.0.101,102,103
# 扫描整个子网
nmap 192.168.0.*
# 找出网络中在线主机
nmap -sP 192.168.0.*
# 扫描特定端口
nmap -p 80 192.168.1.88
安装 Wget
Wget 是从 web 服务器获取(下载)内容的命令行工具。
yum install -y wget
一些常用命令:
# 下载单个文件
wget http://xxx.zip
# 中断后续传分段下载文件
wget -c http://xxx.zip
# 在后台下载文件
wget -b http://xxx.zip
# 查看后台下载的进程
tail -f wget-log
# 下载多个文件(下载信息存在 .txt 中)
wget -i download-list.txt
安装 zip
yum install -y zip unzip
一些常用命令:
# 查看所在目录下面的 test.zip 里面的内容
unzip -v test.zip
# 把所在目录下面的 mydata 目录压缩为 mydata.zip
zip -r mydata.zip mydata
# 把所在目录下面的 mydata.zip 解压到 mydatabak 目录里
unzip mydata.zip -d mydatabak
# 把所在目录下面的 abc 文件夹和 123.txt 压缩成为 abc123.zip
zip -r abc123.zip abc 123.txt
# 把所在目录下面的 test.zip 直接解压到当前目录里面
unzip test.zip
# 把所在目录下面的 abc12.zip、abc23.zip、abc34.zip 同时解压到当前目录里面
unzip abc\*.zip
zip 的相关参数:
-a 将文件转成ASCII模式
-F 尝试修复损坏的压缩文件
-h 显示帮助界面
-m 将文件压缩之后,删除源文件
-n 特定字符串 不压缩具有特定字尾字符串的文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
-q 安静模式,在压缩的时候不显示指令的执行过程
-r 将指定的目录下的所有子目录以及文件一起处理
-S 包含系统文件和隐含文件(S是大写)
-t 日期 把压缩文件的最后修改日期设为指定的日期,日期格式为 mmddyyyy
upzip 的相关参数:
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
-f 更新现有的文件。
-l 显示压缩文件内所包含的文件。
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t 检查压缩文件是否正确。
-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 执行是时显示详细的信息。
-z 仅显示压缩文件的备注文字。
-a 对文本文件进行必要的字符转换。
-b 不要对文本文件进行字符转换。
-C 压缩文件中的文件名称区分大小写。
-j 不处理压缩文件中原有的目录路径。
-L 将压缩文件中的全部文件名改为小写。
-M 将输出结果送到more程序处理。
-n 解压缩时不要覆盖原有的文件。
-o 不必先询问用户,unzip执行后覆盖原有文件。
-P<密码> 使用zip的密码选项。
-q 执行时不显示任何信息。
-s 将文件名中的空白字符转换为底线字符。
-V 保留VMS的文件版本信息。
-X 解压缩时同时回存文件原来的UID/GID。
[.zip文件] 指定.zip压缩文件。
[文件] 指定要处理.zip压缩文件中的哪些文件。
-d<目录> 指定文件解压缩后所要存储的目录。
-x<文件> 指定不要处理.zip压缩文件中的哪些文件。
-Z unzip -Z等于执行zipinfo指令
安装 pip
pip 是一个以 Python 语言写成的软件包管理系统,它可以安装和管理软件包,另外不少的软件包也可以在“Python软件包索引”(英语:Python Package Index,简称PyPI)中找到。
# 检查是否有装 pip
pip list
# 没装 pip 则执行以下命令
curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
python get-pip.py
装好以后,为了让pip list
列表看起来更舒服,可以进行以下操作:
# 创建 pip 的配置文件
cd ~
mkdir .pip
用vi pip.conf
编辑加入以下内容:
[list]
format=columns
保存后重新查看 pip 列表,效果如下:
安装 speedtest-cli
speedtest 是一个使用 python 编写的命令行脚本,通过调用 speedtest.net 测试上下行的接口来完成速度测试。
安装 speedtest
pip install speedtest-cli
查看 speedtest 的用法
speedtest-cli --help
speedtest-cli 常用命令
speedtest-cli # 通过最近的测试服务器查看网速结果
speedtest-cli --list # 根据距离显示 speedtest.net 的测试服务器列表
speedtest-cli --server=123 # 指定列表中id的服务器来做测试
speedtest-cli --share # 分享网速,在 speedtest 网站上生成网速测试结果的图片
使用方式举例:
# 由近到远的列出所有在中国的测试服务器
speedtest-cli --list | grep China
# 测试主机到 3891 的速度,并生成图片分享
speedtest-cli --server=3891 --share
测试结果生成的图片如下:
如果要让代理 yum,则进行如下设置:
用vi /etc/yum.conf
打开 yum 的配置文件,然后追加以下内容:
http_proxy=http://127.0.0.1:1080
ftp_proxy=http://127.0.0.1:1080
如果要代理 wget,则进行如下设置:
用vi /etc/wgetrc
打开 wget 的配置文件,然后追加以下内容:
http_proxy=http://127.0.0.1:1080
ftp_proxy=http://127.0.0.1:1080
如果要进行当前登录帐号的全局代理,则进行如下设置:
用vi /root/.bash_profile
打开帐号 root 的配置文件,然后追加以下内容:
http_proxy=http://127.0.0.1:1080
ftp_proxy=http://127.0.0.1:1080
export http_proxy
export ftp_proxy