前言
最近打算转战 Linux 服务器,为后续的 docker 容器化和 k8s 服务编排做准备。我在日常开发中,使用最多的是 windows server 服务器,linux 服务器使用过一些常用的命令。最近晚上修仙看视频加网上查资料,算是对 linux 熟悉了一点。
本文主要涉及内容
- ssh 无密码登录服务器
- Linux 用户和用户组管理
- rpm 包安装 、本地 yum 源搭建,阿里yum 源使用
- Mysql 安装、修改 root 密码、忘记 root 密码怎么修改
内容实践环境
- Cenos 7
- macOs Catalina 10.15.2
- 终端使用 iterm2
ssh 链接服务器
当你厌烦了一次一次输入账号和密码,那可以尝试 shh 公钥私钥登录。
# 直接输入以下命令,即可链接远程服务器
ssh mflyyou
1、生成公钥私钥
ssh-keygen -o -t rsa -b 4096
2、复制公钥远程服务器
公钥以 .pub 结尾。
# ssh-copy-id -i {公钥绝对路径} {远程服务器用户名}@{远程服务器 ip}
ssh-copy-id -i /Users/zhangpanqin/.ssh/test_local_server.pub parallels@10.211.55.8
以上命令作用是,将指定的公钥内容,拷贝到远程服务器上的指定用户(parallels)下。这样以后这个用户(parallels)就可以不用输入密码登录了。
运行上述命令,等价于将公钥内容拷贝到 /home/parallels/.ssh/authorized_keys。
windows 系统没有 ssh-copy-id,可以手动拷贝公钥的内容到 /home/parallels/.ssh/authorized_keys
3、本地电脑配置私钥验证
本地电脑下 ~/.ssh/config 添加以下内容。
Host mflyyou.com
HostName 10.211.55.8
AddKeysToAgent yes
UseKeychain yes
User parallels
IdentityFile /Users/zhangpanqin/.ssh/test_local_server
用户和用户组管理
Linux 以文件来管理系统。良好的用户管理,利于服务器安全。这块我看了视频和资料都推荐不同的程序使用不同的用户。安装程序的用户不具有管理员权限,当需要管理员权限时,使用 sudo 来提升权限使用。
用户创建
# 创建 mflyyou 用户,同时会创建 mflyyou 组
adduser mflyyou
# 修改 mflyyou 的密码,命令之后会提示你输入密码
passwd mflyyou
以上创建的用户是不具有 sudo 提升权限的能力,需要修改 /etc/sudoers
使之生效。
# 在 root 下运行,修改文件的可写性
chmod 700 /etc/sudoers
# /etc/sudoers 文件中填写 mflyyou ALL=(ALL) PASSWD:ALL
root ALL=(ALL) ALL
mflyyou ALL=(ALL) PASSWD:ALL
# 权限给了之后,修改文件 /etc/sudoers 为只读性
chmod 400 /etc/sudoers
对文件(夹)分配读写执行权限
为了避免其它用户修改当前用户的文件内容,为了安全。
需要对安装的程序的文件夹或文件划分权限。 4 读 r,2 编辑 w,1 执行 x
chmod 754 /opt/config
修改 /opt/config 所属用户、用户组、其它人的读、编辑、执行权限。 所属用户:读、编辑、执行,7 所属组:读、执行,5 其他:读,4
修改文件夹或者文件的所属用户和用户组
# 递归修改 /opt/config 的归属 admin 用户,所属 admin 组
chonw -R admin:admin /opt/config
rpm 包
linux 分为源码包和rpm 包。源码包需要我们自己编译,然后安装,自由度比较高。rpm 包是厂商编译好的二进制包,可以类比 windows .exe 包。但 rpm 包安装的时候需要处理依赖关系。因此,yum 管理 rpm 包诞生。yum 一般需要联网,有的时候,部署的服务器没有网络,我们可以通过挂载光盘或者 U 盘搭建本地 yum 源使用。
rpm 包安装的好处之一是我们不需要配置环境变量了。包已经内置处理好了。
比如我们安装 jdk ,通过官网下载 jdk rpm 包。
安装 rpm 包
# 安装 rpm 包
rpm -ivh 包全名
查询安装的 rpm 包
rpm -qa | grep 包名
卸载 rpm 包
rpm -e 包名
查询文件属于哪个 rpm 包
rpm 也提供了查询文件属于哪个包,我们可以作为判断这个文件是否木马的依据之一。
rpm -qf 系统文件名
校验 rpm 包安装之后做了哪些修改
有的时候我们安装包之后,想知道更改了哪些修改文件。rpm 也提供了能力查询。
rpm -V 包名
查询 rpm 包中的资源会安装到哪里
有的时候,我们想知道 rpm 会将包安装到哪些位置也可以做到
# 查询包安装位置
rpm -ql 包名
提取 rpm 中的文件
可能会存在这样的事情,我们把 java 这个执行文件删掉了。但又不想重新安装jdk。我们可以从对应的 rpm 个包中,导出具体的执行文件。或者对应的系统命令 ll。
# 从 rpm 包中提取丢失的文件
rpm2cpio jdk-13.0.1_linux-x64_bin.rpm |cpio -idv ./usr/java/jdk-13.0.1/bin/java
上述命令相当于解压 rpm 包,当 cpio -idv 跟某个文件的路径。即提取制定的文件。
# 相当于解压 rpm 包到当前相对路径下
rpm2cpio jdk-13.0.1_linux-x64_bin.rpm |cpio -idv
上述包没有别的依赖,操作还挺简单,当遇到以下情况: 你安装 mysql-server ,mysql-server 依赖 client 包,client 包依赖common包,还以lib 包。当你 rpm 安装的时候不停报错,然后你不停安装不存在的依赖包。想想都挺烦的,所以 yum 解放了我们的双手啊。
yum 安装
国外的 yum 源速度较慢,使用阿里云提供了yum 源镜像,速度挺快,给阿里点赞。
修改 yum 源为阿里镜像
# 备份 yum 配置文件,便于出错后可以恢复
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载阿里 yum 源
wget -O /etc/yum.repos.d/CentOS-Base.repo mirrors.aliyun.com/repo/Centos…
# 清除 包的缓存,并加载阿里镜像包缓存
yum clean all
yum makecache
只需下载指定的系统的配置就好,阿里已经帮我们配置好了。
yum 安装
# 列举所有包
yum list
# 搜索包
yum search
# 安装包, -y 免于确认是否安装
yum -y install 包名
# 升级包,一定要指定包,不然 linux 全局更新
yum -y update 包名
# 卸载包,尽量不卸载
yum -y remove 包名
搭建本地 yum 源 和安装某个程序的源。留到安装 mysql 。
Mysql 安装
Centos 7 默认不提供 Mysql 作为数据库。
1、下载官方提供的 Mysql yum 源。
缺点就是,从这个 yum 源下载的 rpm 包速度比较慢。
# 安装 yum repositoty
sudo yum localinstall https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
没有安装 mysql yum reposity 时,本地 yum 配置。
执行完命令之后,增加了 mysql 的 yum 源,但是这些资源都是国外的,下载有点慢
# 清除旧包的缓存,并加载新 yum 源缓存
yum clean all
yum makecache
查询 mysql-community-server
yum list | grep "mysql.*-community.*server"
然后安装 mysql-community-server
# 速度有点慢
yum install mysql-community-server
搭建本地 yum 源安装 Mysql
服务器下载 Mysql 的所有依赖包
创建 /mnt/local/packages
将下载的压缩包,解压缩 /mnt/local/packages
下。
生成 yum 源信息
cd /mnt/local
createrepo .
运行命令,生成 yum 源信息
在服务器中配置 yum 源
# 生成 yum 配置文件
sudo touch /etc/yum.repos.d/CentOS-local.repo
# CentOS-local.repo 的内容如下
# local-mysql 为 yum 源名称,当使用 yum list 的时候可以看到它
[local-mysql]
name=local_mysql_diy
# yum 源所在位置
baseurl=file:///mnt/local/
# 配置不检查认证
gpgcheck=0
# 使 local-mysql 这个配置生效
enabled=1
# 秘钥位置
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
刷新 yum 源
yum clean all
yum makecache
安装 Mysql
yum install mysql-community-server
启动 Mysql
# 启动 mysql
sudo systemctl enable mysqld
sudo systemctl start mysqld
# 查看 mysql 运行的状态
sudo systemctl status mysqld
# 查询初始化密码
sudo grep 'temporary password' /var/log/mysqld.log
# 为避免 navicat 不能连接 mysql,修改 /etc/my.cnf
[mysqld]
default-authentication-plugin=mysql_native_password
修改密码
# 登录 mysql
mysql -u root -p123456
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Root@2020';
mysql 创建用户
# 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
# 创建数据库
CREATE DATABASE sonar
CHARACTER SET 'utf8mb4';
# 授权
# select,insert,update,delete 对表数据操作
# 对表操作 create,alter,drop
grant select,insert,update,delete,create,alter,drop on sonar.* to 'sonar'@'%';
Mysql 8.0 忘记密码
# 编辑配置文件,
vim /etc/my.cnf
# [mysqld] 下添加 skip-grant-tables
# 重新启动 mysql
systemctl restart mysqld
# 免密码登录 mysql
mysql
# 选择数据库
use mysql;
# 查看用户信息
select host, user, authentication_string, plugin from user;
# 修改密码为空
update user set authentication_string='' where user='root';
# 退出 mysql
# 去掉 /etc/my.cnf [mysqld] 中的 skip-grant-tables
# 重新启动 mysql
systemctl restart mysqld
# 登录 mysql
# 为避免 navicat 不能连接
ALTER USER 'sonar'@'%' IDENTIFIED WITH mysql_native_password BY 'Sonar@2020';
其他命令
查看端口占用
netstat -anp|grep 8080