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

简介: 打造一款属于自己的 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[0;35m\]\u@\h:\[\e[0m\]\[\e[0;35m\]$(pwd) \[\e[0m\]\[\e[0;35m\]\t\[\e[0m\]\n\[\e[0;36m\]> \[\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
set ts=2
syntax on
set cursorline
hi CursorLine   cterm=bold ctermbg=DarkGrey ctermfg=NONE
set paste
set expandtab
set ruler
set nu显示行号
set ts=2tab键默认空格的数量
syntax on开启语法高亮
set cursorline高亮当前行
hi CursorLine cterm=bold ctermbg=DarkGrey ctermfg=NONE配置当前行的颜色
set paste粘贴模式[vim自动缩进很多时候会影响到从外部黏贴进来的文本格式,会导致格式错乱]
set expandtab以空格键代替tab键[写yaml文件很好用,因为yaml文件不支持tab键,一次敲多个空格多难受]
set ruler右下角显示当前所在的行数

清空yum缓存

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

清空历史操作

Linux:~ # history -c
  • 清空完历史操作后,关机快照,压缩当前虚拟机的数据目录做备份
目录
相关文章
|
8天前
|
Linux 网络安全 数据安全/隐私保护
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
|
6月前
|
人工智能 JavaScript Linux
CentOS操作系统之--安装nvm
nvm 作为node版本管理工具,记录安装流程
319 0
|
8天前
|
Prometheus Kubernetes 监控
云原生|kubernetes |使用Prometheus监控k8s cAdvisor篇(进阶篇--- 一)(centos操作系统)
云原生|kubernetes |使用Prometheus监控k8s cAdvisor篇(进阶篇--- 一)(centos操作系统)
556 0
|
8天前
|
存储 Ubuntu 应用服务中间件
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
26 1
|
8天前
|
安全 Linux Anolis
centos停止更新?这篇博客教会你CentOS 7转化系统为阿里龙蜥Anolis OS 7
centos停止更新?这篇博客教会你CentOS 7转化系统为阿里龙蜥Anolis OS 7
|
8天前
|
存储 安全 Linux
Centos停止更新?这篇博客教会你安装平替Centos的操作系统安装Anolis
Centos停止更新?这篇博客教会你安装平替Centos的操作系统安装Anolis
|
8天前
|
Kubernetes Linux 开发者
CentOS 停止支持后 OS 应该如何选择?
CentOS 停止支持后 OS 应该如何选择?
|
8天前
|
存储 数据挖掘 Linux
服务器数据恢复—CentOS7操作系统服务器数据恢复案例
服务器数据恢复环境: 某品牌PowerEdge R730服务器+PowerVault MD3200存储,划分若干lun,操作系统版本是centos7,EXT4文件系统。 服务器故障&分析: 服务器在运行过程中自动关机且无法启动,服务器管理员对服务器进行修复后成功启动服务器,但服务器上原来的某个分区无法挂载。管理员将无法挂载的分区进行fsck修复&挂载,查看这个分区的数据发现部分文件丢失。
|
9月前
|
Linux Anolis 开发者
CentOS 停服后如何给世界更好选择? 龙蜥操作系统从技术创新到商业变现都走了哪些路?
CentOS 停服后如何给世界更好选择? 龙蜥操作系统从技术创新到商业变现都走了哪些路?
56 0
|
8天前
|
人工智能 安全 Linux
陈左宁院士:将AI能力垂直做到操作系统里,龙蜥比CentOS的意义更大
陈左宁院士:将AI能力垂直做到操作系统里,龙蜥比CentOS的意义更大
65 0