shell中的使用map

定义

shell中map必须申明才能使用

1
declare -A userIds

初始化

1
2
3
4
5
# 方式一,item项目中间不需要逗号
userIds=(['bar']="1" ['foo']="2")
# 方式二
userIds['bar']="1"
userIds['foo']="2"

输出

1
2
3
4
5
6
7
8
9
10
# 输出value
echo "${userIds[*]}"
# 或者
echo "${userIds[@]}"
# 1 2
# 输出key
echo "${!userIds[*]}"
# 或者
echo "${!userIds[@]}"
# bar foo

循环

1
2
3
4
5
6
7
8
9
# 输出key
for key in "${!userIds[@]}"; do
echo $key
echo ${userIds[$key]}
done
# 输出value
for value in "${userIds[@]}"; do
echo $value
done

@换成*效果一样

linux编译安装gcc

下载指定版本http://ftp.gnu.org/gnu/gcc/

1
wget http://ftp.gnu.org/gnu/gcc/gcc-8.1.0/gcc-8.1.0.tar.xz

解压

1
2
tar -xvf gcc-8.1.0.tar.xz
cd gcc-8.1.0

编译

1
2
3
4
5
6
7
8
9
# 安装依赖
./contrib/download_prerequisites
# 编译目录
mkdir build
cd build
# 配置,安装到/usr/local/gcc目录
../configure --prefix=/usr/local/gcc --enable-languages=c,c++ --disable-multilib
# make
make && make install

2cup+8g大概用了4个小时

加软链接

1
2
3
4
5
6
# 如果有老的版本先备份
sudo mv /usr/bin/gcc /usr/bin/gcc_bak
sudo ln -s /usr/local/gcc/gcc /usr/bin/gcc
# 如果有老的版本先备份
sudo mv /usr/bin/g++ /usr/bin/g++_bak
sudo ln -s /usr/local/gcc/g++ /usr/bin/g++

验证是否安装成功

1
gcc --version

centos7升级gcc.md

centos7默认安装的gcc版本是4.8.5,升级为最新版本

安装centos-release-scl

1
sudo yum install centos-release-scl

查看可安装的devtoolset版本

1
sudo yum search devtoolset

安装对应的版本

1
2
sudo yum install devtoolset-8-gcc
sudo yum install devtoolset-8-gcc-c++

安装devtoolset之后的目录是/opt/rh/devtoolset-8

激活

1
sudo source /opt/rh/devtoolset-8/enable

替换centos是老版本

1
2
3
4
5
6
# 替换gcc
sudo mv /usr/bin/gcc /usr/bin/gcc_bak
sudo ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
# 替换g++
sudo mv /usr/bin/g++ /usr/bin/g++_bak
sudo ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++

centos7编译安装python3

安装编译依赖

1
yum install zlib zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

找到要安装的对应版本https://www.python.org/downloads/source/

下载

1
wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz

解压

1
tar -xvf Python-3.9.10.tar.xz

编译

1
2
3
4
5
6
# 进入解压后的目录
cd Python-3.9.10
# 配置安装目录/usr/local/python3
./configure prefix=/usr/local/python3
# 编译
make && make install

成功之后会生成/usr/local/python3目录

可能的问题:

  • gcc版本太低,需要重新安装高版本的gcc

替换自带的python

1
2
3
4
5
6
# 原python位置
which python
# 备份
mv /bin/python /bin/python_bak
# 重新链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python

替换自带的pip

1
2
3
4
5
6
# 原pip位置
which pip
# 备份
mv /bin/pip /bin/pip_bak
# 重新链接
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

linux安装golang

下载golang指定版本https://studygolang.com/dl

1
2
3
4
5
6
# 下载
wget https://studygolang.com/dl/golang/go1.17.7.linux-amd64.tar.gz
# 解压
tar -xvf go1.17.7.linux-amd64.tar.gz
# 统一放/usr/local
sudo mv go/ /usr/local/

设置环境变量

.bashrc文件中添加

1
2
export GOROOT=/usr/local/go
export PATH=$PATH:/usr/local/go/bin

激活环境变量

1
source ~/.bashrc

测试安装结果

1
go env

centos安装jenkins遇到的问题

官方网站https://pkg.jenkins.io/redhat-stable/,按着步骤来

第一步

1
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

不成功,提示错误是

1
2
3
4
5
Resolving pkg.jenkins.io (pkg.jenkins.io)... 151.101.74.133, 2a04:4e42:1a::645
Connecting to pkg.jenkins.io (pkg.jenkins.io)|151.101.74.133|:443... connected.
ERROR: cannot verify pkg.jenkins.io's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
To connect to pkg.jenkins.io insecurely, use `--no-check-certificate'.

加上--no-check-certificate再试

1
2
3
sudo wget --no-check-certificate -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
// jenkins.repo会添加到/etc/yum.repos.d/中
cat /etc/yum.repos.d/jenkins.repo

第二步

1
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

不成功,提示错误

1
Peer reports incompatible or unsupported protocol version.

需要升级curl包,后再执行

1
yum update -y nss curl libcurl 

安装java

java已安装,跳过

1
2
yum install epel-release
yum install java-1.8.0-openjdk-devel

安装jenkins

1
yum install jenkins

不成功,提示

1
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.

查找applydeltarpm的包

1
yum provides '*/applydeltarpm'
1
2
3
4
5
6
7
Loaded plugins: langpacks                                                                                                                                                                                                                                                                                                                                     
updates/7/x86_64/filelists_db
webtatic/x86_64/filelists_db
deltarpm-3.6-3.el7.x86_64 : Create deltas between rpms
Repo : base
Matched from:
Filename : /usr/bin/applydeltarpm

安装deltarpm

1
yum install -y deltarpm

golang设置GOROOT报错

升级了go到1.17.7后,goland打开项目设置GOROOT设置不了,提示:

1
The selected directory is not a valid home for Go SDK

解决方法:

找到go安装目录

1
2
go env | grep GOROOT
# set GOROOT=D:\Go

找到D:\Go\src\runtime\internal\sys\zversion.go文件,添加

1
2
# 指定版本
const TheVersion = `go1.17.7`

重启goland,设置下拉里就出现go1.17.7的选项了

git遇到pull出现403问题

git拉代码失败,不提示输入账号密码,出现The requested URL returned error: 403

解决方法,清除密码缓存

1
2
3
git config --local --unset credential.helper
git config --global --unset credential.helper
git config --system --unset credential.helper

之后就可以重新输入账号密码拉代码了

windows子系统目录位置

方式一

打开我的电脑,在地址栏输入\\wsl$,确定之后就看到所有的子系统了

方式二

安装的地址路径为

1
2
3
C:\Users\用户\AppData\Local\Packages\对应的子系统\LocalState
# 例如
C:\Users\用户\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

windows家庭版安装hyper-v

新建bat文件hyper-v.bat,内容为

1
2
3
4
5
6
7
8
9
pushd "%~dp0"

dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt

for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"

del hyper-v.txt

Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

以管理员身份执行hyper-v.bat,然后等待安装,需要确认的都选择y