打造一款属于自己的CentOS操作系统

声明

  • 此操作仅仅只是适合个人学习使用,在vmware中建立虚拟机后,将虚拟机文件压缩打包,只需vmware版本兼容,即可在其他电脑上的vmware中操作和使用

关闭selinux以及firewalld

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

修改终端前缀显示

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

修改默认网卡名称为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
  • 为了将selinux=disabled生效,以及网卡名称生效,此时需要重启CentOS

替换yum源

  • CentOS安装完成后,默认的yum源是官方的,国外服务器在国内会比较慢,因此将yum源改为国内的,以此来提高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

安装常用工具

"安装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

优化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

配置回收站

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

迎宾显示

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

优化vim

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

清空yum缓存

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

清空历史操作

Linux:~ # history -c
  • 清空完历史操作后,关机快照,压缩当前虚拟机的数据目录做备份

猜你喜欢

转载自blog.csdn.net/u010383467/article/details/113086766