Create your own CentOS operating system

statement

  • This operation is only suitable for personal learning and use. After the vmwarevirtual machine is created in, the virtual machine file is compressed and packaged, vmware版本兼容and it can be operated and used in vmware on other computers.

Close selinux and firewalld

[root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@localhost ~]# systemctl disable firewalld --now

Modify terminal prefix display

[root@localhost ~]# vi /etc/profile
export PS1='\[\e[1;31m\]\h:\w \$ \[\e[0m\]'
[root@localhost ~]# source /etc/profile

Modify the default network card name to eth0

localhost:~ # cp /etc/sysconfig/network-scripts/ifcfg-ens33{,.bak}
"先备份当前的网卡配置文件,方便失败的时候回滚"
localhost:~ # sed -i 's/ens33/eth0/g' /etc/sysconfig/network-scripts/ifcfg-ens33
localhost:~ # grep eth0 /etc/sysconfig/network-scripts/ifcfg-ens33
NAME="eth0"
DEVICE="eth0"
localhost:~ # mv /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-eth0
"CentOS7采用grub2引导,需要修改grub2文件"
localhost:~ # grep GRUB_CMDLINE_LINUX /etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
localhost:~ # sed -i 's#^GRUB_CMDLINE_LINUX=.*#GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"#' /etc/default/grub
localhost:~ # grub2-mkconfig -o /boot/grub2/grub.cfg
  • In order to make selinux=disabled take effect and the network card name take effect, you need to restart CentOS at this time

Replace yum source

  • After the CentOS installation is complete, the default yum source is official, and foreign servers will be slower in China, so change the yum source to domestic to improve the installation speed of yum
"备份原来的repo文件"
localhost:~ # mkdir /etc/yum.repos.d/bak
localhost:~ # mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
"这里使用的是阿里的centos源"
localhost:~ # curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
"创建本地元数据"
localhost:~ # yum makecache

Install common tools

"安装epel源"
localhost:~ # yum -y install epel-release
"epel提供的yum并行下载插件"
localhost:~ # yum -y install yum-axelget
"终端命令补全工具,退出终端重新连接后,才会生效"
localhost:~ # yum -y install bash-completion
"最小化安装默认不带vim和wget"
localhost:~ # yum -y install vim wget net-tools
"免交互expect"
localhost:~ # yum -y install expect
"源码包安装软件常用的gcc环境,以及辅助工具make、cmake"
localhost:~ # yum -y install gcc gcc-c++ make cmake
"常用的解压软件"
localhost:~ # yum -y install p7zip unzip unar
"git版本控制器"
localhost:~ # yum -y install git
"树形查看目录结构工具"
localhost:~ # yum -y install tree
"python系列"
localhost:~ # yum -y install python-devel python3 pip3 pip
"jdk"
localhost:~ # tar xf jdk-8u281-linux-x64.tar.gz -C /usr/local/
localhost:~ # vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_281
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
localhost:~ # source /etc/profile
-bash: HISTTIMEFORMAT: readonly variable
localhost:~ # java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)
"node.js"
localhost:~ # cd /usr/local/
localhost:/usr/local # wget https://npm.taobao.org/mirrors/node/v14.15.4/node-v14.15.4-linux-x64.tar.xz
localhost:/usr/local # tar xf node-v14.15.4-linux-x64.tar.xz
localhost:~ # ln -s /usr/local/node-v14.15.4-linux-x64/bin/node /usr/bin/node
localhost:~ # node -v
v14.15.4
"时间同步服务器"
localhost:~ # yum -y install chrony.x86_64
"docker"
localhost:~ # cat > /etc/yum.repos.d/docker.repo <<EOF
[docker-ce]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/
gpgcheck=0
enable=1
EOF
localhost:~ # yum repolist
localhost:~ # yum -y install docker docker-compose.noarch
"打开yum缓存,可以不打开"
Linux:~ # sed -i 's/keepcache=.*/keepcache=1/' /etc/yum.conf

Optimize history

localhost:~ # cat > /etc/profile.d/history.sh <<EOF
#!/bin/bash
export HISTFILE=$HOME/.bash_history
export HISTSIZE=1200
export HISTFILESIZE=1200
export HISTCONTROL=ignoredups
export HISTCONTROL=erasedups
export HISTTIMEFORMAT="`whoami` %F %T "
shopt -s histappend
PROMPT_COMMAND="history -a"
typeset -r HISTTIMEFORMAT
EOF
localhost:~ # source /etc/profile.d/history.sh

Configure Recycle Bin

localhost:~ # cat << 'eof' >> /etc/profile.d/trash.sh
####### trash #######
mkdir -p ~/.trash          # 路径可以自己创建和命名,不受限制,修改路径名后,记得修改下面三个函数里面的路径
alias rm=trash             # 将rm别名成trash,调用trash函数
alias ur=undelfile         # 使用别名定义一个ur命令,调用undelfile函数,作用是还原文件

function undelfile(){
    
          # 通过$@将ur后面的参数逐一传给mv移动到当前目录下
  mv -i ~/.trash/$@ ./     # mv -i 当目标文件存在时,提示是否覆盖
}

function trash(){
    
              # 在终端输入的rm命令,会通过别名alias调用trash函数,再通过$@将rm后面的参数逐一传给mv移动到.trash目录下
  mv $@ ~/.trash/
}

function cleartrash(){
    
         # 在终端输入 cleartreash ,就会调用这里的函数,输入'y 或 Y',就会清空.trash目录下的内容
    read -p "clear sure?[n]" confirm
    [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf ~/.trash/*    # /bin/rm 不受别名的限制,会直接删除文件
}
####### trash end #######
eof
localhost:~ # source /etc/profile.d/trash.sh

Welcome display

localhost:~ # cat << 'eof' > /etc/profile.d/ssh-login-info.sh
#!/bin/sh
# 输出一个图像
echo -e "\033[1;35m
██████╗   ██████╗
██╔══██╗  ██╔══██╗
██████╔╝  ██║  ██║
██╔══██╗  ██║  ██║
██████╔╝  ██████╔╝
╚═════╝   ╚═════╝\033[0m"

# 获取系统运行的时间(uptime命令看到的时间单位是分钟,/proc/uptime里面看到的时间单位是秒,需要做换算)
upSeconds="$(cut -d. -f1 /proc/uptime)"
secs=$((${upSeconds}%60))
mins=$((${upSeconds}/60%60))
hours=$((${upSeconds}/3600%24))
days=$((${upSeconds}/86400))
UPTIME_INFO=$(printf "%d days, %02dh %02dm %02ds" "$days" "$hours" "$mins" "$secs")
# 判断linux发行版
if [ -f /etc/redhat-release ] ; then
    PRETTY_NAME=$(< /etc/redhat-release)

elif [ -f /etc/debian_version ]; then
   DIST_VER=$(</etc/debian_version)
   PRETTY_NAME="$(grep PRETTY_NAME /etc/os-release | sed -e 's/PRETTY_NAME=//g' -e 's/"//g') ($DIST_VER)"

else
    PRETTY_NAME=$(cat /etc/*-release | grep "PRETTY_NAME" | sed -e 's/PRETTY_NAME=//g' -e 's/"//g')
fi
# 判断当前操作系统是否是虚拟机或容器
if [[ -d "/system/app/" && -d "/system/priv-app" ]]; then
    model="$(getprop ro.product.brand) $(getprop ro.product.model)"

elif [[ -f /sys/devices/virtual/dmi/id/product_name ||
        -f /sys/devices/virtual/dmi/id/product_version ]]; then
    model="$(< /sys/devices/virtual/dmi/id/product_name)"
    model+=" $(< /sys/devices/virtual/dmi/id/product_version)"

elif [[ -f /sys/firmware/devicetree/base/model ]]; then
    model="$(< /sys/firmware/devicetree/base/model)"

elif [[ -f /tmp/sysinfo/model ]]; then
    model="$(< /tmp/sysinfo/model)"
fi

MODEL_INFO=${model}                   # 获取操作系统所在的硬件环境
KERNEL=$(uname -srmo)                 # 获取内核版本
USER_NUM=$(who -u | wc -l)            # 获取连接终端的用户数量
RUNNING=$(ps ax | wc -l | tr -d " ")  # 获取运行的进程数量

# 获取磁盘信息:磁盘总量以及使用率
totaldisk=$(df -h -x devtmpfs -x tmpfs -x debugfs -x aufs -x overlay --total 2>/dev/null | tail -1)
disktotal=$(awk '{print $2}' <<< "${totaldisk}")
diskused=$(awk '{print $3}' <<< "${totaldisk}")
diskusedper=$(awk '{print $5}' <<< "${totaldisk}")
DISK_INFO="\033[0;33m${diskused}\033[0m of \033[1;34m${disktotal}\033[0m disk space used (\033[0;33m${diskusedper}\033[0m)"

# 获取CPU信息:cpu型号、核心数、逻辑数、
cpu=$(awk -F':' '/^model name/ {print $2}' /proc/cpuinfo | uniq | sed -e 's/^[ \t]*//')
cpun=$(grep -c '^processor' /proc/cpuinfo)
cpuc=$(grep '^cpu cores' /proc/cpuinfo | tail -1 | awk '{print $4}')
cpup=$(grep '^physical id' /proc/cpuinfo | wc -l)
CPU_INFO="${cpu} ${cpup}P ${cpuc}C ${cpun}L"

# 获取系统负载情况:1分钟、5分钟、15分钟
read one five fifteen rest < /proc/loadavg
LOADAVG_INFO="\033[0;33m${one}\033[0m / ${five} / ${fifteen} with \033[1;34m$(( cpun*cpuc ))\033[0m core(s) at \033[1;34m$(grep '^cpu MHz' /proc/cpuinfo | tail -1 | awk '{print $4}')\033 MHz"

# 获取内存信息:内存总量以及使用率
MEM_INFO="$(cat /proc/meminfo | awk '/MemTotal:/{
      
      total=$2/1024/1024;next} /MemAvailable:/{
      
      use=total-$2/1024/1024; printf("\033[0;33m%.2fGiB\033[0m of \033[1;34m%.2fGiB\033[0m RAM used (\033[0;33m%.2f%\033[0m)",use,total,(use/total)*100);}')"

# 获取服务器IP地址
# extranet_ip=" and $(curl -s ip.cip.cc)"
IP_INFO="$(ip a | grep glo | awk '{print $2}' | head -1 | cut -f1 -d/)${extranet_ip:-}"

# 远程连接后,将一下信息输出到终端
echo -e "
 \033[0;1;31mInformation as of\033[0m..: \033[1;34m$(date +"%Y-%m-%d %T")\033[0m

 \033[0;1;31mProduct\033[0m............: ${MODEL_INFO}
 \033[0;1;31mOS\033[0m.................: ${PRETTY_NAME}
 \033[0;1;31mKernel\033[0m.............: ${KERNEL}
 \033[0;1;31mCPU\033[0m................: ${CPU_INFO}

 \033[0;1;31mHostname\033[0m...........: \033[1;31m$(hostnamectl | grep 'Static hostname' | awk -F ': ' '{
    
    print $2}')\033[0m
 \033[0;1;31mIP Addresses\033[0m.......: \033[1;31m${IP_INFO}\033[0m

 \033[0;1;31mUptime\033[0m.............: \033[0;33m${UPTIME_INFO}\033[0m
 \033[0;1;31mMemory\033[0m.............: ${MEM_INFO}
 \033[0;1;31mLoad Averages\033[0m......: ${LOADAVG_INFO}
 \033[0;1;31mDisk Usage\033[0m.........: ${DISK_INFO}

 \033[0;1;31mUsers online\033[0m.......: \033[1;34m${USER_NUM}\033[0m
 \033[0;1;31mRunning Processes\033[0m..: \033[1;34m${RUNNING}\033[0m
"
eof
localhost:~ # chmod +x /etc/profile.d/ssh-login-info.sh

Optimize vim

localhost:~ # vim /etc/vimrc
set nu          #vim内自动显示行数
set ts=4        #vim内tab的宽度
set sw=4        #vim内统一缩进为4
syntax on       #vim语法高亮显示

Clear yum cache

"减少磁盘的空间占用"
Linux:~ # yum clean all

Clear history operation

Linux:~ # history -c
  • After clearing the history operation, shut down the snapshot, compress the data directory of the current virtual machine for backup

Guess you like

Origin blog.csdn.net/u010383467/article/details/113086766