打造一款属于自己的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
- 关于终端前缀显示,可以参考我的博客:花里胡哨之自定义linux终端前缀显示
修改默认网卡名称为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=2
tab键默认空格的数量
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
- 清空完历史操作后,关机快照,压缩当前虚拟机的数据目录做备份
打造一款属于自己的CentOS操作系统的更多相关文章
- 【FastDFS】如何打造一款高可用的分布式文件系统?这次我明白了!!
写在前面 前面我们学习了如何基于两台服务器搭建FastDFS环境,而往往在生产环境中,需要FastDFS做到高可用,那如何基于FastDFS打造一款高可用的分布式文件系统呢?别急,今天,我们就一起来基 ...
- 【ASP.NET程序员福利】打造一款人见人爱的ORM(一)
“很多人都不太认可以第三方ORM,因为考虑的点不够全面,没有大用户群体的ORM有保证,这点是不可否认确是事实.但是往往用户群体大的ORM又有不足之处,今天我们就来聊聊关于ORM的话题,打造 ...
- 【ASP.NET程序员福利】打造一款人见人爱的ORM(二)
上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...
- 打造一款属于自己的web服务器——开篇
JVM总结慢慢来吧,先插播一篇水文,来介绍下最近业余一直在写的一个小项目——easy-httpserver(github).适合新手学习,大神们路过即可^_^. 一.这是个什么玩意? easy-htt ...
- 如何打造一款五星级的 APP ?
移动互联网大潮来袭!据统计,2015 年平均每天有 1000 个新的应用上架,而这些应用的现状可以说是鱼龙混杂,同是每个人的眼光.品味.意识和利益都不同,因此每人眼中的应用也是不同的.在巨大的市场竞争 ...
- jquery+css3打造一款ajax分页插件
原文:[原创]jquery+css3打造一款ajax分页插件 最近公司的项目将好多分页改成了ajax的前台分页以前写的分页插件就不好用了,遂重写一个 支持IE6+,但没有动画效果如果没有硬需求,个人认 ...
- Centos操作系统在虚拟机VMware上的安装
1.下载centos操作系统,提供百度云盘链接:http://pan.baidu.com/s/1pLHOR03 2.打开上篇在VMware中新建好的空白虚拟机,将centos安装在此空白虚拟机上,步骤 ...
- 在VM虚拟机中安装Centos操作系统
首先我们要下载 Centos https://www.centos.org/ 这个是Centos官方 最新版本 7 https://www.centos.org/download/ 提供有 DVD安 ...
- Tsung CentOS 操作系统下搭建tsung性能测试环境_Part 2
CentOS 操作系统下搭建tsung性能测试环境_Part 2 by:授客 QQ:1033553122 --------------------接CentOS 操作系统下搭建tsung性能测试环境_ ...
随机推荐
- Elasticsearch安装与配置
一.下载(华为云) https://mirrors.huaweicloud.com/elasticsearch/https://mirrors.huaweicloud.com/kibana/7.6.2 ...
- 【Java】重载与重写
重载与重写 一.重载 定义 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可.同一个类.相同方法名,参数列表不同:参数个数不同,参数类型不同. Java的重载是可以包括 ...
- 同步gitlab与github
1.找到setting 2.找到左下方的developer setting 3.按标好的数字依次执行 4.填写note并勾选repo 5.在最左下方勾选 6.保存生成的新的token到其他地方,之后你 ...
- yieId详解,以及和return的区别
def foo(): print("starting...") while True: res = yield 4 print("res:",res) g = ...
- 【刷题-LeetCode】200 Number of Islands
Number of Islands Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. ...
- 面试突击17:HashMap除了死循环还有什么问题?
面试合集:https://gitee.com/mydb/interview 本篇的这个问题是一个开放性问题,HashMap 除了死循环之外,还有其他什么问题?总体来说 HashMap 的所有" ...
- ansible command和shell的区别
1.command模块不支持管道符和变量等,如果要使用这些,需要shell模块. 2.在使用ansible中的时候,默认的模块是-m command,从而模块的参数不需要填写,直接使用即可
- 前端基础之javaScript(函数)
目录 一:javaScript函数 1.函数关键字 2.格式 3.无参函数 4.有参函数 二:关键字arguments 1.能够获取函数接受的索引参数 2.关键字arguments(限制函数不能多也不 ...
- 利用JavaWeb实现课程信息添加
整体架构 :HTML+JAVABEAN+SERVLET 一.首先先简单介绍一下所需要的组件 原文地址 https://www.cnblogs.com/zll20153246/p/ ...
- 解决mybatis拦截器无法注入spring bean的问题
公司要整合rabbitmq与mybatis拦截器做一个数据同步功能. 整合过程中大部分环节都没什么问题,就是遇到了mybatis拦截器 @Intercepts(@Signature(type = Ex ...