前些日子,入手了一台服务器,特此记录一下它的初始配置。
正文
注:本人主机为 CentOS 7 x64 系统,以下内容均基于此环境。
安全设置
请查考 肉鸡是怎样炼成的
字符集修改
1 2 3 4 5 6
| COPYcd /etc/sysconfig/
sudo vi i18n LANG="zh_CN.utf8"
source /etc/sysconfig/i18n
|
设置 DNS
1 2 3
| COPYvi /etc/resolv.conf nameserver 114.114.114.114 nameserver 8.8.8.8
|
配置 Yum 源
1 2 3 4 5 6
| COPYcd /etc/yum.repos.d/ sudo mv CentOS-Base.repo CentOS-Base.repo_bak
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all yum makecache
|
设置时区
1 2 3 4
| COPYyum install ntp -y timedatectl set-timezone Asia/Shanghai timedatectl set-ntp yes #同步 timedatectl # 查看时区
|
软件安装
常用软件
1 2 3 4 5
| COPYyum install epel-release -y yum -y update yum clean all yum makecache yum -y install wget bind-utils net-tools lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget ncurses-devel autoconf automake zlib-devel python-devel
|
Vim
1 2 3 4
| COPYyum -y install vim curl -sLf https://spacevim.org/cn/install.sh | bash -s -- -h
vi ~/.SpaceVim.d/
|
Git
1 2 3 4 5 6 7 8
| COPYyum -y install git git config --global user.name SimonMa git config --global user.email simon@tomotoes.com git config --global http.sslverify false git config --global https.sslverify false
# 远程仓库密钥生成 ssh-keygen -t rsa -C "simon@tomotoes.com"
|
Zsh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| COPY# 安装 zsh 包 yum -y install zsh
# 切换默认 shell 为 zsh chsh -s /bin/zsh
# 重启服务器 reboot
# 安装 on my zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
vi ~/.zshrc ZSH_THEME="agnoster"
# autojump yum install autojump -y yum install autojump-zsh
# zsh-autosuggestions git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
# zsh-syntax-highlighting git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
# 配置.zshrc 文件 plugins=( git autojump zsh-autosuggestions zsh-syntax-highlighting z extract )
source ~/.zshrc
更新 upgrade_oh_my_zsh 卸载 uninstall_oh_my_zsh
|
连按两次 Tab 会列出所有的补全列表并直接开始选择,补全项可以使用 ctrl+n/p/f/b 上下左右切换
各种补全:路径补全、命令补全,命令参数补全,插件内容补全等等。触发补全只需要按一下或两下tab
键,补全项可以使用ctrl+n/p/f/b 上下左右
切换。比如你想杀掉 java 的进程,只需要输入kill java + tab 键
,如果只有一个 java 进程,zsh 会自动替换为进程的 pid,如果有多个则会出现选择项供你选择。ssh + 空格 + 两个 tab 键
,zsh 会列出所有访问过的主机和用户名进行补全;
即使你没有安装autojump
,只要输入d
,就会列出你在这个回话中访问的目录,输入前面的序号,就可以直接跳转;
可以忽略 cd 命令, 输入..
或者...
和当前目录名都可以跳转; 当然,除了上面几点,zsh 还有很多丰富的插件可以使用,这就需要继续的探索了…
命令选项补全。在 zsh 中只需要键入 tar - 就会列出所有的选项和帮助说明
命令参数补全。键入 kill 就会列出所有的进程名和对应的进程号
更智能的历史命令。在用或者方向上键查找历史命令时,zsh 支持限制查找。比如,输入 ls,然后再按方向上键,则只会查找用过的 ls 命令。而此时使用则会仍然按之前的方式查找,忽略 ls
多个终端会话共享历史记录
智能跳转,安装了 autojump 之后,zsh 会自动记录你访问过的目录,通过 j 目录名 可以直接进行目录跳转,而且目录名支持模糊匹配和自动补全,例如你访问过 hadoop-1.0.0 目录,输入 j hado 即可正确跳转。j –stat 可以看你的历史路径库。
目录浏览和跳转:输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。
在当前目录下输入 .. 或 … ,或直接输入当前目录名都可以跳转,你甚至不再需要输入 cd 命令了。在你知道路径的情况下,比如 /usr/local/bin 你可以输入 cd /u/l/b 然后按进行补全快速输入
通配符搜索:ls -l /*.sh,可以递归显示当前目录下的 shell 文件,文件少时可以代替 find。使用 / 来递归搜索
扩展环境变量,输入环境变量然后按 就可以转换成表达的值
在 .zshrc 中添加 setopt HIST_IGNORE_DUPS 可以消除重复记录,也可以利用 sort -t “;” -k 2 -u ~/.zsh_history | sort -o ~/.zsh_history 手动清除
至此,你现在的 zsh 应该具备如下几个特性:
Nodejs
1 2 3 4 5 6 7 8 9 10 11 12 13
| COPYcurl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash source ~/.bashrc
# 安装 node 的最新稳定版 nvm install stable
# 查看安装版本 nvm list
# 配置 npm config set registry https://registry.npm.taobao.org npm config set disturl https://npm.taobao.org/dist npm config set puppeteer_download_host https://npm.taobao.org/mirrors
|
Nginx
1 2 3 4 5 6 7 8 9
| COPYsudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
sudo yum install -y nginx
# 启动 Nginx sudo systemctl start nginx.service
# 将 Nginx 加入到开机启动 sudo systemctl enable nginx.service
|
命令别名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| COPYvi ~/.zshrc
alias shadow='/etc/init.d/shadowsocks' alias vi='vim'
alias ls='ls --color=auto' alias ll="ls --color -al" alias grep='grep --color=auto'
# 查看当前时间 alias now='date "+%Y-%m-%d %H:%M:%S"'
alias reboot='sudo /sbin/reboot' alias poweroff='sudo /sbin/poweroff' alias halt='sudo /sbin/halt' alias shutdown='sudo /sbin/shutdown'
# 自动创建父目录 alias mkdir='mkdir -pv'
# 解压任何文件 extract() { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) unrar e $1 ;; *.gz) gunzip $1 ;; *.tar) tar xf $1 ;; *.tbz2) tar xjf $1 ;; *.tgz) tar xzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *) echo "'$1' cannot be extracted via extract()" ;; esac else echo "'$1' is not a valid file" fi }
# 查看文件/目录大小 alias size='f(){ du -sh $1* | sort -hr; }; f'
# 开放端口 alias portopen='f(){ /sbin/iptables -I INPUT -p tcp --dport $1 -j ACCEPT; }; f' # 关闭端口 alias portclose='f(){ /sbin/iptables -I INPUT -p tcp --dport $1 -j DROP; }; f'
# 解压 alias untar='tar xvf '
alias -s html='vim' # 在命令行直接输入后缀为 html 的文件名,会在 Vim 中打开 alias -s rb='vim' # 在命令行直接输入 ruby 文件,会在 Vim 中打开 alias -s py='vim' # 在命令行直接输入 python 文件,会用 vim 中打开,以下类似 alias -s js='vim' alias -s md='vim' alias -s mjs='vim' alias -s css='vim' alias -s c='vim' alias -s java='vim' alias -s txt='vim' alias -s gz='tar -xzvf' # 在命令行直接输入后缀为 gz 的文件名,会自动解压打开 alias -s tgz='tar -xzvf' alias -s zip='unzip' alias -s bz2='tar -xjvf' alias -s json='vim' alias -s go='vim'
alias cat=ccat alias man=tldr eval "$(thefuck --alias)"
# Load zsh-syntax-highlighting. source ~/.oh-my-zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh # # Load zsh-autosuggestions. source ~/.oh-my-zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh #
# Enable autosuggestions automatically. ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=10"
# 保存 source ~/.zshrc
|
1 2 3 4 5 6 7 8 9 10 11 12
| COPY# 列出 bash 别名 alias
# 创建一个 bash shell 别名 alias name=value alias c='clear'
# 删除别名 unalias aliasname
# 如果想要使别名永久生效, 请编辑 vi ~/.zshrc
|
安装
这两天,我完成了 CentosInit
项目,一个高度自定义的 Centos 初始化脚本。
欢迎 Star
, PR
!
如果你想快速配置以上初始化措施,请执行以下命令:
通过 curl
1
| COPYsh -c "$(curl -fsSL https://tomotoes.com/Centos-init/install.sh)"
|
通过 wget
1
| COPYsh -c "$(wget https://tomotoes.com/Centos-init/install.sh -O -)"
|
基本介绍
脚本功能一共分为四大类:
初始化配置(update)
1 2 3 4 5 6 7 8 9
| COPYupdateLanguage updateTime updateLanguage updateTime updateDNS updateYumSource updateHostname updateUlimit updateCoreConfig
|
安装常用软件(install)
1 2 3 4 5 6 7 8 9 10 11 12
| COPYinstallCommonSoft installGit installVim installZsh installNode installNpmPackages installPython installPipPackages installDocker installNginx installCcat installShadowSocks
|
配置安装后的软件(config)
1 2 3 4 5 6 7
| COPYconfigVim configZsh configGit configNode configDocker configNginx configShadowSocks
|
必要的安全配置(secure)
基础项
1 2 3 4 5
| COPYdeleteOrLockUnnecessaryUsersAndGroups setPrivileges closeCtrlAltDel closeIpv6 closeSELinux
|
高阶项
1 2 3 4
| COPYupdateSSHPort useKeyLogin useIptable preventCrackingPassword
|
用户相关项
1 2 3 4
| COPYgetUserInfo addUser joinWheelGroup banRootLogin
|
单独功能安装
如果你想安装某一种功能( Update | Install | Config | Secure )
请参考以下案列:
1 2 3 4 5
| COPY# 在安装命令前设置 ONLY_UPDATE=Y 即可只安装 update 服务 ONLY_UPDATE=Y sh -c "$(curl -fsSL https://tomotoes.com/Centos-init/install.sh)"
# Install and Config ONLY_INSTALL=Y ONLY_CONFIG=Y sh -c "$(curl -fsSL https://tomotoes.com/Centos-init/install.sh)"
|
交互模式
你也设置设置交互模式,在交互模式下,可高达自定义化你想使用的功能。
每执行完一项功能,都会询问你下一步。
使用功能的方法如下:
1 2
| COPY# 在安装命令前设置 INTERACTIVE=Y INTERACTIVE=Y sh -c "$(curl -fsSL https://tomotoes.com/Centos-init/install.sh)" |