基础命令

  • 关机 poweroff
  • 重启 reboot
  • 查看磁盘用量 df -lh
  • 查看 XXX 文件路径 rpm -ql XXX | cat -n
  • 查找文件 - 查找文件 find . | xargs grep -ri 'content'
  • 查找文件 - 只显示文件名称 find . | xargs grep -ril 'content'
  • 查看系统版本 cat /etc/redhat-release rpm -q centos-release
  • 查看实时日志 tail -f logs/catalina.out

CentOS7 防火墙开启端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 查看开放的端口
firewall-cmd --list-ports

// 开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

// 移除开放端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent

// 重启防火墙
systemctl start|stop|restart firewalld

// 使配置生效
firewall-cmd --reload

// 开机自启
systemctl enable firewalld

yum 命令

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-q 静默执行
-t 忽略错误
-R[分钟] 设置等待时间
-y 自动应答 yes
--skip-broken 忽略依赖问题
--nogpgcheck 忽略 GPG 验证

自动搜索最快镜像插件: yum install yum-fastestmirror
安装 yum 图形窗口插件: yum install yumex
查看可能批量安装的列表: yum grouplist

1 安装
yum install 全部安装
yum install package1 安装指定的安装包 package1
yum groupinsall group1 安装程序组 group1

2 更新和升级
yum update 全部更新
yum update package1 更新指定程序包 package1
yum check-update 检查可更新的程序
yum upgrade package1 升级指定程序包 package1
yum groupupdate group1 升级程序组 group1

3 查找和显示
yum info package1 显示安装包信息 package1
yum list 显示所有已经安装和可以安装的程序包
yum list package1 显示指定程序包安装情况 package1
yum groupinfo group1 显示程序组 group1 信息
yum search string 根据关键字 string 查找安装包

4 删除程序
yum remove package1 删除程序包 package1
yum groupremove group1 删除程序组 group1
yum deplist package1 查看程序 package1 依赖情况

5 清除缓存
yum clean packages 清除缓存目录下的软件包
yum clean headers 清除缓存目录下的 headers
yum clean oldheaders 清除缓存目录下旧的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的 headers

使用 yum 命令报错

CentOS 下 yum 命令出现Loaded plugins: fastestmirror

1
2
3
4
5
6
7
8
9
10
// 修改插件的配置文件 
vim /etc/yum/pluginconf.d/fastestmirror.conf
将 enabled=1 改为 enabled=0

// 修改 yum 的配置文件
vim /etc/yum.conf
将 plugins=1 改为 plugins=0

// 重启
reboot

基础环境

安装 vim

vim 是从 vi 发展出来的一个文本编辑器。

1
yum -y install vim

安装 lrzsz

lrzsz 是一款在 linux 里可代替 ftp 上传和下载的程序。

1
yum -y install lrzsz	

安装 wget

wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP 协议 下载,并可以使用 HTTP 代理。”wget” 这个名称来源于 “World Wide Web” 与 “get” 的结合。

1
yum -y install wget

安装 SSH

安装

1
yum install sshd

使用 SSH 远程登陆 linux

1
2
3
4
5
6
7
8
vim /etc/ssh/sshd_config

// 修改以下配置
PermitRootLogin yes
PasswordAuthentication yes

// 保存并退出
:wq

查看 SSH 状态

1
service sshd start|stop|status

查看是否开启 SSH

1
ps -ef | grep sshd

设置开机运行

1
2
3
chkconfig sshd on
OR
systemctl enable sshd.service

安装 Nginx

安装源

需要先把 Nginx 安装源添加到 yum 库中

1
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安装 Nginx

1
2
3
// 默认安装路径 /etc/nginx
// 默认静态文件地址:/usr/share/nginx
yum install -y nginx

启动 Nginx

1
2
3
4
5
6
/usr/sbin/nginx -c /etc/nginx/nginx.conf

systemctl start nginx
systemctl stop nginx
// 开机自启
systemctl enable nginx

查看是否可以访问

1
curl -i localhost     

JDK

测试 java 环境

1
java -version

如果需要删除已安装的 jdk 版本

1
2
3
4
5
yum remove XXX

// 例如
rpm -qa | grep jdk
yum -y remove java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64

yum 安装

  • 查看可使用 yum 命令安装的 java 版本

    1
    yum search java | grep -i --color JDK
  • 选择一个 jdk 版本进行安装

    1
    yum install java-1.8.0-openjdk-devel.x86_64

官网安装

  • 官网下载,并安装

    1
    2
    3
    4
    tar -zxvf jdk-8u101-linux-x64.tar.gz -C /usr/local/java/
    OR
    mv jdk-8u101-linux-x64.tar.gz
    tar -zxvf /usr/local/java/
  • /etc/profile 文件末尾添加

    1
    2
    3
    4
    5
    6
    vim /etc/profile

    export JAVA_HOME=/usr/local/java/jdk1.8.0_101
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
  • 使 /etc/profile 生效

    1
    source /etc/profile

安装完成

如果安装完成(yum 安装和官网安装任选其一),则可通过 java -version 查看安装好的 jdk 版本

1
2
3
4
[root@localhost /]# java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

MySQL

设置 yum 源

直接给 yum 安装 mysql 源

1
rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

手动设置

  • 获取 mysql YUM 源

    1
    wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  • 安装 MySQL 源

    1
    yum -y localinstall mysql57-community-release-el7-11.noarch.rpm 

安装 MySQL

1
yum -y install mysql-server

如果出现 requested datatype primary not available 异常,需要执行一下

1
yum clean all
  • yum 安装的 MySQL 地址: usr/local/mysql/
  • 数据库地址: var/lib/mysql
  • 配置文件: cat /etc/my.cnf

配置 MySQL

启动 MySQL 服务

1
systemctl start mysqld

设置开机启动

1
2
systemctl enable mysqld
systemctl daemon-reload

修改 root 本地登录密码

mysql 安装完成之后,在/var/log/mysqld.log 文件中给 root 生成了一个临时的默认密码。

1
2
3
grep 'temporary password' /var/log/mysqld.log
OR
vim /var/log/mysqld.log

登录

1
2
// 密码输入刚刚查询到的临时密码
mysql -u root -p

修改密码

使用临时密码登录,首选要修改密码,不然会报错。

1
2
3
4
5
6
// mysql5.7 默认密码策略要求密码必须是大小写字母数字特殊字母的组合,至少 8 位
// 修改密码为 Root@123

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123';

Query OK, 0 rows affected (0.00 sec)

创建用户并分配权限

1
2
3
4
5
6
select host,user from mysql.user;
create user muycode identified by 'Muycode@123';


GRANT ALL PRIVILEGES ON mysql.* TO 'muycode'@'%' IDENTIFIED BY 'Muycode@123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

设置允许远程登录

MySQL 默认不允许远程登录,我们需要设置下,并且防火墙开放 3306 端口;

1
2
3
4
5
6
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Root@123' WITH GRANT OPTION;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> exit;
Bye

开放防火墙端口

1
2
3
4
5
6
7
8
// 查看开放的端口
firewall-cmd --list-ports

// 开放端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

// 使配置生效
firewall-cmd --reload

配置默认编码为 utf8

修改 /etc/my.cnf 配置文件,在 [mysqld] 下添加编码配置,如下所示:

1
2
3
4
5
6
7
8
9
10
// 编辑
vim /etc/my.cnf

// 增加以下配置
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'

// 重启 msyql 服务
systemctl restart mysqld

查看下编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mysql> show variables like '%character%';

+--------------------------+----------------------------+

| Variable_name | Value |

+--------------------------+----------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

查看一下是否大小写敏感

1
2
3
4
5
6
7
8
mysql> show variables like "%case%";
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
| validate_password_mixed_case_count | 1 |
+------------------------------------+-------+

参数解释

  • lower_case_table_names = 0 区分大小写(即对表名大小写敏感)
  • lower_case_table_names = 1 不区分大小写(即对表名大小写不敏感)
  • lower_case_file_system ON 说明对文件名的大小写不敏感,OFF 表示敏感

修改方式,在 mysql 配置文件的 [mysqld] 中,添加以下代码

1
2
3
4
5
vim /etc/my.cnf

// 添加以下配置
[mysqld]
lower_case_table_names = 1

MySQL 定时备份

定时备份脚本

创建备份文件 /usr/local/mysql/bakmysql.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup

# Database info
DB_USER="root" #mysql login name
DB_PASS="Root@123" #password
DB_HOST="localhost" #db_address
DB_NAME="muycode" #db_name
DB_ZFBM="--default-character-set=utf8" #character
# DB_TABLE="exam_quest_bank" #table name

# Others vars
BIN_DIR="/usr/bin" #the mysql bin path
BCK_DIR="/home/mysql_backup" #the backup file directory
DATE=`date +%F`

#--skip-lock-tables zg backup
#$BIN_DIR/mysqldump -u $DB_USER -p$DB_PASS $DB_ZFBM $DB_NAME $DB_TABLE | gzip > $BCK_DIR/db_$DATE.sql.gz

#data beifen
#$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_ZFBM $DB_NAME | gzip > $BCK_DIR/db_$DATE.sql.gz

#sql back
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_ZFBM $DB_NAME $DB_TABLE > $BCK_DIR/db_$DATE.sql

# delete history
find $BCK_DIR -name "db_*.sql" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
#find $BCK_DIR -name "db_*.gz" -type f -mtime +3 -exec rm {} \; > /dev/null 2>&1

脚本说明

  • $BIN_DIR mysql 备份地址
  • $DB_USER 数据库用户名
  • $DB_PASS 数据库密码
  • $DB_HOST 数据库地址(IP 或者是 localhost 之类的)
  • $DB_ZFBM 字符集编码设置(这个很关键,解决导出文件中中文乱码)
  • $DB_NAME 数据库名称
  • $DB_TABLE 要备份的表名(如果只对单一表进行备份,可以加此字段,全库备份的可以省略掉)
  • $BCK_DIR/db_$DATE.sql 备份的地址和备份文件名称

脚本附加权限

1
chmod +x bakmysql.sh

验证脚本是否正确

如果脚本没问题,会在 /home/mysql_backup 生成备份文件。

1
./bakmysql.sh

定时删除备份数据库

1
find $BCK_DIR -name "db_*.sql" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

脚本说明

  • -type f 表示查找普通类型的文件,f 表示普通文件。
  • -mtime +7 按照文件的更改时间来查找文件,+3 表示文件更改时间距现在 3 天以前;如果是 -mmin +5 表示文件更改时间距现在 5 分钟以前。
  • -exec rm {} \; 表示执行一段 shell 命令,exec 选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个,最后是一个分号。
  • /dev/null 2>&1 把标准出错重定向到标准输出,然后扔到 /DEV/NULL 下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面;其中的 & 表示让该命令在后台执行。

编辑定时任务列表

1
crontab -e
1
2
# 每天早上 4:00:00 执行
00 04 * * * /bin/sh /usr/local/mysql/bakmysql.sh

crontab 配置文件格式如下

1
分 时 日 月 周  命令

查看设置的定时任务是否成功

1
crontab -l

crontab 基本命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 重启
/bin/systemctl restart crond.service

# 开启
/bin/systemctl start crond.service

# 停止
/bin/systemctl stop crond.service

# 重载
/bin/systemctl reload crond.service

# 状态
/bin/systemctl status crond.service

CentOS 整机备份

目的备份所有的目录。以 root 权限在”/“目录执行备份命令。

备份命令,打包一个备份文件centos7_backup.tgz

1
# tar cvpzf centos7_backup.tgz / --exclude=/proc --exclude=/centos7_backup.tgz --exclude=/mnt --exclude=/sys

恢复命令,把备份文件拷贝到根分区, 然后执行命令。

警告:这会把你分区里所有文件替换成压缩文档里的文件!

1
# tar xvpfz centos7_backup.tgz -C /

重新创建你剔除的目录

1
2
3
# mkdir proc
# mkdir mnt
# mkdir sys

执行以下命令再重启

1
2
# restorecon -Rv /
# reboot

Docker

CentOS 系统内核版本

Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的 CentOS 版本是否支持 Docker 。

1
$ uname -r

卸载旧版本

1
yum remove docker  docker-common docker-selinux docker-engine

安装需要的软件包

yum-util 提供 yum-config-manager 功能,另外两个是 devicemapper 驱动依赖的

1
yum install -y yum-utils device-mapper-persistent-data lvm2

设置 yum 源

1
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看仓库中 docker 版本

选择特定版本安装

1
yum list docker-ce --showduplicates | sort -r

安装 docker

1
$ yum install docker-ce  

开机启动

1
2
$ systemctl start docker
$ systemctl enable docker
1
2
3
systemctl start|stop|restart docker
service docker stop
service docker start

验证

安装是否成功(有 client 和 service 两部分表示 docker 安装启动都成功了)

1
docker version

容器自启

使用 restart policy restart policy 在使用 docker run 启动容器时通过–restart 标志指定,这个标志有多个 value 可选,不同的 value 有不同的行为,如下表所列:

Flag Description
no 不自动重启容器. (默认 value)
on-failure 容器发生 error 而退出 (容器退出状态不为 0) 重启容器
unless-stopped 在容器已经 stop 掉或 Docker stoped/restarted 的时候才重启容器
always 在容器已经 stop 掉或 Docker stoped/restarted 的时候才重启容器

举个例子:下面的命令启动一个 Redis 容器,当 Redis 容器停止后或者 Docker 被重启时,Redis 容器都会重启。

1
$ docker run -dit --restart unless-stopped redis

NTFS 类型 U 盘挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看 NTFS 类型的 U 盘,找到 U 盘
fdisk -l | grep NTFS
# 或者查看所有磁盘
fdisk -l

# 新建挂载点
mkdir /mnt/usb
# 进行 U 盘挂载
mount -t ntfs-3g /dev/sdb1 /mnt/usb

# 通过设备名取消挂载
umount -v /dev/sda1
# 或者通过挂载点
umount -v /mnt/usb

# 查看占用
fuser -m -v -i -k /mnt/usb/