跳到主要内容

Centos 环境配置(持续总结)

本章节收集一下配置一个centos 环境所需要的操作

  • git

  • wget

  • MiniConda(python)

  • mysql

  • ...

  • web-vscode

  • phpredisAdmin(redis web 管理工具)

基础配置

显示完整文件路径

	命令行提示符完全显示完整的工作目录名称:(推荐用法)
export PS1='[\u@\h $PWD]$ '
命令行提示符只列出最后一个目录:
export PS1='[\u@\h \W]$'
命令行提示符显示完整工作目录,当前用户目录会以 ~代替:
export PS1='[\u@\h \w]$'

命令释义

\u 显示当前用户账号
\h 显示当前主机名
\W 只显示当前路径最后一个目录
\w 显示当前绝对路径(当前用户目录会以 ~代替)
$PWD 显示当前全路径
\$ 显示命令行’$'或者’#'符号

参考资料:linux下显示完整路径,linux下显示绝对路径

vim-server

cp ~/.vimrc ~/.vimrc_bak  # bak
curl https://raw.githubusercontent.com/wklken/vim-for-server/master/vimrc > ~/.vimrc

免密码登陆

Linux下实现免密码登录(超详细)

$ ssh-keygen -t rsa # 这里生成的公钥为 id_rsa.pub
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAA...
$ ssh <username@remote_ip> # 进入远端服务器
# 初次登录没有authorized_keys,需要手动创建
$ mkdir ~/.ssh && touch ~/.ssh/authorized_keys
$ vi ~/.ssh/authorized_keys # 追加(copy)id_rsa.pub 内容
$ exit # 退出远程服务器

# updated at 2023.05.19 新版OpenSSH 不再支持ssh-rsa算法进行公钥登录
# 下面换为 ed25519 算法
$ ssh-keygen -t ed25519 -C "ppsteven@outlook.com"
$ chmod 600 id_ed25519.pub # 文件权限太高也会报错

此时再登录则无需密码 ssh <username@remote_ip>

若是发现配置了.ssh/authorized_keys 依旧登录不上,需要打印详细日志查看:ssh -vvv root@xx.xx.xx.xx

丢掉ip地址,使用别名登录服务器

ip 地址记忆也是一件麻烦的是,可以为服务器定义别名、

创建 ~/.ssh/config,为每个服务器创建别名,之后登录仅需要 ssh vps

# vim ~/.ssh/config
Host github
# connect to github by git@github.com
User git
HostName github.com
IdentityFile ~/.ssh/id_rsa

Host coding
HostName e.coding.net
User git
IdentityFile ~/.ssh/coding

Host vps # 别名
HostName 103.99.179.xxx
User root # 账号
IdentityFile ~/.ssh/id_rsa # 对应的私钥

Host remotesvr # 别名
HostName 107.2.214.xx
User root
IdentityFile ~/.ssh/id_rsa

必要软件安装

zsh

$ yum install zsh # 安装zsh
$ cat /etc/shells # 查看所有 shell
$ yum install util-linux-ng # install chsh
$ chsh -s /bin/zsh # 切换shell为zsh
$ echo $SHELL # 查看当前shell
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" # 安装oh-my-zsh

ifconfig

$ yum search ifconfig
============================== 匹配:ifconfig ============================================
net-tools.x86_64 : Basic networking tools
$ yum install net-tools.x86_64

git

$ yum install -y git 

wget

$ yum install -y wget

7z压缩

$ yum install epel-release  # 安装epel依赖
$ yum install p7zip

使用方法

7za a -t7z -r test.7z test
#a 代表添加文件/文件夹到压缩包
-t 是指定压缩类型,这里定为7z,可不指定,因为7za默认压缩类型就是7z。
-r 表示递归所有的子文件夹
7za x test.7z -r -o./
# x 代表解压缩文件,并且是按原始目录树解压(还有个参数 e 也是解压缩文件,但其会将所有文件都解压到根下,而不是自己原有的文件夹下)
# -r 表示递归解压缩所有的子文件夹
# -o 是指定解压到的目录,-o后是没有空格的,直接接目录。这一点需要注意。
# FRE COMMAND
7za test test.7z
7za x test.7z

sz, rz

服务器上传,下载文件,除了使用FTP软件外,lrzsz是一个unix通信套件提供的X,Y,和ZModem文件传输协议,是一个非常强大的文件传输工具,安装方便,使用简单。

rzsz 官网入口:http://freecode.com/projects/lrzsz/

$ yum -y install lrzsz
sz filename # 下载文件 filename
rz # 上传文件

进程树

yum -y install psmisc
pstree

MiniConda

网址

https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/

下载最新的版本,一般来说是 Miniconda-latest-Linux

$ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda-latest-Linux-x86_64.sh
$ yum -y install bzip2 # 下载解压软件
$ bash Miniconda-latest-Linux-x86_64.sh
# 添加环境变量
$ echo "export PATH=/root/miniconda2/bin:$PATH" >> .bashrc
$ source ~/.bashrc
# 检查是否成功安装
$ /root/miniconda2/bin/conda -V
conda 4.0.5

配置 Anaconda 仓库镜像源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes

设置快捷命令

alias conl="conda env list"
alias conc="conda create -n"
alias cona="source activate"
alias cond="source deactivate"
alias conr="conda remove --all -n"

新建 python 环境

# 创建新环境 base 并安装python3.6
$ conda create -n base python=3.6
# 查看当前环境
$ conl
# conda environments:
#
base /root/miniconda2/envs/base
root * /root/miniconda2
# 切换为 base 环境
$ cona base
$ which python
/root/miniconda2/envs/base/bin/python # 当前python的地址

安装必要的库

$ pip install --upgrade pip
$ pip install numpy pandas jsonpath pymysql requests datetime dateutil

参考来源:Centos7安装Miniconda及配置jupyter

shadowsocks

shadowsocks 需要利用 pip 安装

$ sudo pip install shadowsocks
  1. 创建配置文件ss.json

    # vim ss.json
    {
    "server":"*.*.*.*",
    "server_port":***,
    "local_server":"0.0.0.0", # 默认127.0.0.1
    "local_port":1081,
    "password":"*****",
    "timeout":600,
    "method":"aes-256-cfb"
    }
  2. 启动ss隧道

    # 前台方式运行
    /root/miniconda2/envs/base/bin/sslocal -c ss.json
    # 后台运行
    nohup /root/miniconda2/envs/base/bin/sslocal -c ss.json >> ss.log 1>2&

mysql

MariaDB 是由 MySQL 开发的 MySQL的替代版本。如果我们直接在 Centos 上 yum install mysql

第零步:查看系统版本号

$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

第一步:安装MySQL

需要到如下网站上去定位需要安装的版本号

https://dev.mysql.com/downloads/repo/yum/

注意:我们使用的CentOs Linux 7 选择下面的第二个

不用试图去点击右手边的 Download 按钮,因为这个会导向一个登陆界面。获取版本号后,直接用 wget 下载

$ wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

# 下载完了以后,还是可以检查一下是否正常下载
$ md5sum mysql80-community-release-fc30-1.noarch.rpm

$ rpm -ivh mysql80-community-release-fc30-1.noarch.rpm
警告:mysql80-community-release-fc30-1.noarch.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mysql80-community-release-fc30-1 ################################# [100%]

若是安装错误 repo 源了怎么办?我很不幸就干过

# 查看所有 mysql 源
$ rpm -qa|grep mysql

# 删掉安装错误的 mysql 源
$ rpm -e mysql80-community-release-fc30-1.noarch --nodeps

安装 MySQL

$ sudo yum install mysql-server

第二步:启动 mysql 服务

sudo systemctl start mysqld

该命令不会返回报错,为了进一步确认 mysql 服务确实启动

$ sudo systemctl status mysqld
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 二 2020-01-28 20:07:00 CST; 6s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 12281 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 12402 (mysqld)
Status: "Server is operational"
Tasks: 39
Memory: 616.5M
CGroup: /system.slice/mysqld.service
└─12402 /usr/sbin/mysqld

第三步:修改默认配置

首先,我们需要修改 MySQL 给我们的默认密码,这个直接从日志中获取即可

cat /var/log/mysqld.log | grep "temporary password"
2020-01-28T12:06:55.699956Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 5H(?khVdysDW

初始密码只能用于登录,但是此时你不能进行任何操作,必须修改新的密码

在修改密码之前,你需要做的是修改密码的规格(默认的规格···太严格了)

# validate_password_policy代表密码策略,默认是1:符合长度,且必须含有数字,小写或大写字母,特殊字符。设置为0判断密码的标准就基于密码的长度了。一定要先修改两个参数再修改密码
set global validate_password.policy=0;

# validate_password_length代表密码长度,最小值为4
set global validate_password.length=4;

最后,修改为合适的密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

如果我们安装的是 MySQL8.0 以上的版本,加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。为了解决兼容性问题,一般来说,我选择把加密等级调低一点。

mysql> select host,user,plugin,authentication_string from mysql.user;

最后需要修改一下,加密规则 和 远程登录

USE mysql;
UPDATE user SET host = '%' where user = 'root';

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;

参考资料: CentOS7 安装并配置MySQL8.0 How To Install MySQL on CentOS 7 centos彻底卸载mysql(不保留数据)

Redis

# 用yum 安装
$ yum install -y redis

默认是不设置密码的,我们需要在上面进行更进一步的安全策略配置。之前腾讯云上的一台服务器,由于暴露了无密码的redis接口,就中了 挖矿木马

# /etc/redis.conf
# bind:绑定主机IP,默认值为127.0.0.1
bind 127.0.0.1 # 将这一行指注释掉,可以运行远程访问。不注释,只运行本地访问,安全性很高
# daemonize:是否以后台进程运行,默认为no。Windows下不支持修改 。Linux平台下可以改为yes,这样就不用为了启动Redis而单独保留一个shell窗口。
# pidfile:如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid。Windows下不支持修改。
daemonize yes

port 6379 # 监听端口,默认为6379
timeout 300 # 超时时间,设置为300(秒)

dbfilename dump.rdb # 本地数据库文件名,默认值为dump.rdb
dir /var/lib/redis # 本地数据库存放路径,默认值为 /var/lib/redis
requirepass ABCD123 # 强烈建议设置 连接密码

appendonly yes # 是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no

# 每个配置选项前都有详细的英文注释,如有需要可自行查阅配置。

以上只是选择了我认为的一些常用的设置,参考来源:邻居小黑redis 菜鸟教程 更多的安全策略,可以借鉴 Redis服务安全加固

yum 安装下来的服务,已经帮我们创建好了服务。我们直接使用重启就可以了

$ systemctl restart redis 
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since 六 2020-03-07 13:39:44 CST; 35s ago
Main PID: 12655 (redis-server)
Tasks: 3
Memory: 1.0M
CGroup: /system.slice/redis.service
└─12655 /usr/bin/redis-server 127.0.0.1:6379
$ redis-cli
127.0.0.1:6379> get abc
(error) NOAUTH Authentication required.
# 再一次的运行 redis-cli 发现已经需要了密码
127.0.0.1:6379> auth YOURPASSWORD

docker

docker 安装其实比较麻烦的,感谢 图灵:Docker开发指南 给的安装建议,我们可以直接用别人写好的脚本。

curl https://get.docker.com > install.sh
chmod +x install.sh
cat install.sh # 感兴趣的话,可以研究一下 shell 究竟写了啥
./install.sh
# $ sh -c "$(curl -fsSL https://get.docker.com)"
# 安装完了,记得启动 docker 服务
sudo systemctl start docker
$ docker --version # 查看是否安装成功

amlalinux
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf remove podman buildah
sudo dnf install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker.service
sudo docker version

linux下 docker 加速

$ sudo touch /etc/docker/daemon.json 
# 添加国内站点
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","https://dockerhub.azk8s.cn"]
}

# 重启docker daemon
$ sudo systemctl restart docker

# 查看是否有修改成功
$ docker info
# 查看Register Mirrors的信息
Registry Mirrors:
https://registry.docker-cn.com/
http://hub-mirror.c.163.com/

docker-compose(github 安装)

有条件的话,参考 docker官方教程 这一种方法是官方推荐,但是鉴于中国墙,速度有可能非常感人

1. 从 github 上下载 docker-compose 命令
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2. 赋予可执行权限
sudo chmod +x /usr/local/bin/docker-compose
3. 验证是否安装成功
docker-compose --version

docker-compose(pip 安装)

一般容易出问题的是 pip 的版本,如果是使用了conda作为包管理的话,可能主要注意pip的版本。我一开始是使用base环境的pip作下载,然后将安装的docker-compose 软连接至 /usr/local/bin

pip install docker-compose

Nginx

How To Install Nginx on CentOS 7

sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Selenium + Chrome 环境配置

linux 是无图形化界面,selenium 需要借助图形化的工具,下面我们直接看如何配置。

参考教程:centos7安装selenium

安装selenium

pip install selenium

安装chrome-browser

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm --no-check-certificate
yum install ./google-chrome-stable_current_x86_64.rpm
# 或者直接使用yum 安装
yum install google-chrome
# 安装后,注意要查看一下 chrome 的版本号
$ google-chrome --version
Google Chrome 80.0.3987.87

下载chromedriver

建议到 淘宝镜像下载

更全一点的话,有 官方镜像

$ wget https://npm.taobao.org/mirrors/chromedriver/80.0.3987.16/chromedriver_linux64.zip
# 解压此文件,并将文件移动到/usr/bin目录下
unzip chromedriver_linx64.zip
# 移到 /usr/bin 下后,之后运行的时候就不必特意制定 chromedriver 路径了
mv chromedriver /usr/bin/

使用selenium

from selenium import webdriver
url='http://bing.com'
option = webdriver.ChromeOptions()
option.add_argument('--no-sandbox')
option.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=option)
driver.get(url)
print(driver.page_source)

JDK 安装

官网地址:下载地址 ,不过加锁了,需要登录 Oracle 账号

我下载的版本:https://download.oracle.com/otn/java/jdk/8u281-b09/89d678f2be164786b292527658ca1605/jdk-8u281-linux-x64.tar.gz?AuthParam=1613800714_03fe610a2922ab554cc9cba2b8493817

安装命令

# jdk 目录创建
mkdir -p /usr/local/java
# jdk 下载
wget https://download.oracle.com/otn/java/jdk/8u281-b09/89d678f2be164786b292527658ca1605/jdk-8u281-linux-x64.tar.gz?AuthParam=1613800714_03fe610a2922ab554cc9cba2b8493817
# 解压到 java 目录
tar -zxvf jdk-8u281-linux-x64.tar.gz\?AuthParam\=1613800714_03fe610a2922ab554cc9cba2b8493817 -C /usr/local/java

设置环境变量

# 1.编辑 /etc/profile
export JAVA_HOME=/usr/local/java/jdk1.8.0_171 # <---这里改成自己的java版本
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
# 2.使环境变量生效
$ source /etc/profile
# 3.添加软链接
ln -s /usr/local/java/jdk1.8.0_171/bin/java /usr/bin/java
# 4.添加 java 版本
java -version

Linux 云服务器搭建 FTP 服务

安装:【腾讯云教程】Linux 云服务器搭建 FTP 服务

配置安全传输协议SSL/TLS:不安全的服务器,不支持 FTP over TLS

命令总结:

# 安装 vsftpd
yum install -y vsftpd
systemctl enable vsftpd
systemctl start vsftpd
netstat -antup | grep ftp # 确认服务是否启动
# 配置 vsftpd
useradd ftpuser
passwd ftpuser
mkdir /var/ftp/test # 创建FTP文件目录
chown -R ftpuser:ftpuser /var/ftp/test
vim /etc/vsftpd/vsftpd.conf

主动模式

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
# 关键 IPV6 sockets
#listen_ipv6=YES

被动模式

local_root=/var/ftp/test
allow_writeable_chroot=YES
pasv_enable=YES
pasv_address=xxx.xx.xxx.xx #请修改为您的 Linux 云服务器公网 IP
pasv_min_port=40000
pasv_max_port=45000

创建用户列表

vim /etc/vsftpd/chroot_list  # 创建用户列表
输入用户名,一个用户名占据一行
systemctl restart vsftpd # 创建后重启

模糊搜索fzf

安装参考:fzf

sudo apt-get install fzf

如果 binding 不生效的话,fzf-ctlr-r-not-triggering-history-search-on-command-line 给出如下方案。

Bash
====

Append this line to ~/.bashrc to enable fzf keybindings for Bash:

source /usr/share/doc/fzf/examples/key-bindings.bash

Append this line to ~/.bashrc to enable fuzzy auto-completion for Bash:

source /usr/share/doc/fzf/examples/completion.bash

Zsh
===

Append this line to ~/.zshrc to enable fzf keybindings for Zsh:

source /usr/share/doc/fzf/examples/key-bindings.zsh

Append this line to ~/.zshrc to enable fuzzy auto-completion for Zsh:

source /usr/share/doc/fzf/examples/completion.zsh

Fish
====

Issue the following commands to enable fzf keybindings for Fish:

mkdir -p ~/.config/fish/functions/
echo fzf_key_bindings > ~/.config/fish/functions/fish_user_key_bindings.fish

Vim
===

The straightforward way to use fzf.vim is appending this line to your vimrc:

source /usr/share/doc/fzf/examples/fzf.vim

使用方法 CTRL+R

测试内网速度

一般用来测试内网测试(路由器,网卡)速度上线

$ iperf3 -s # 服务端运行
$ iperf3 -c 192.168.1.13 -n 50000000 # 测试速度

测试外网速度

$ pip install speedtest-cli
$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from China Mobile (223.72.68.128)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by China Telecom TianJin-5G (TianJin) [123.83 km]: 41.324 ms
Testing download speed................................................................................
Download: 95.33 Mbit/s
Testing upload speed................................................................................