linux常用别名、环境变量等全局运维环境初始化脚本
创建脚本文件 setup_global_aliases.sh
vi setup_global_aliases.sh
# 输入文件内容
![image]()
使用方法
# 1. 保存脚本并赋予执行权限
chmod +x setup_global_aliases.sh
# 2. 执行配置(需要root权限)
./setup_global_aliases.sh
# 3. 使配置立即生效
source /etc/profile
# 4. 验证配置
ll
java -version
echo $JAVA_HOME
sysinfo
文件内容
#!/bin/bash
# 全局运维环境初始化脚本
# 适用于麒麟V10系统 - 配置所有用户的alias和环境变量
set -e
echo "正在配置全局运维环境..."
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查root权限
check_root() {
if [ "$(id -u)" -ne 0 ]; then
log_error "此脚本需要root权限执行"
exit 1
fi
}
# 备份文件
backup_file() {
local file=$1
if [ -f "$file" ]; then
local backup="${file}.bak.$(date +%Y%m%d_%H%M%S)"
cp "$file" "$backup"
log_info "已备份: $file → $backup"
fi
}
# 创建全局alias配置
setup_global_aliases() {
local alias_file="/etc/profile.d/global-aliases.sh"
log_info "创建全局alias配置..."
backup_file "$alias_file"
cat > "$alias_file" << 'EOF'
#!/bin/bash
# =============================================================================
# 全局运维Alias配置
# 适用于所有用户 - 由运维初始化脚本自动生成
# =============================================================================
# 仅为bash shell设置alias
if [ -n "$BASH" ]; then
# 安全相关alias
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# 列表显示alias
alias ll='ls -lht --time-style=+"%Y-%m-%d %H:%M:%S" --color=auto'
alias la='ls -lhta --time-style=+"%Y-%m-%d %H:%M:%S" --color=auto'
alias l='ls -CF --color=auto'
alias ls='ls --color=auto'
alias lh='ls -lh --time-style=+"%Y-%m-%d %H:%M:%S" --color=auto'
alias lt='ls -lhtr --time-style=+"%Y-%m-%d %H:%M:%S" --color=auto'
# 系统信息alias
alias df='df -hT'
alias du='du -h'
alias free='free -h'
alias psg='ps -ef | grep -v grep | grep'
alias psmem='ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
alias pscpu='ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head'
# 网络相关alias
alias ports='netstat -tulanp'
alias myip='curl -s ipinfo.io/ip'
alias ping='ping -c 5'
alias listen='netstat -tulanp | grep LISTEN'
# 进程管理alias
alias k9='kill -9'
alias pstop='ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -20'
# 文件操作alias
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias diff='diff --color=auto'
alias mkdir='mkdir -p'
alias wget='wget -c'
# 历史命令alias
alias h='history'
alias hg='history | grep'
# 时间日期alias
alias now='date "+%Y-%m-%d %H:%M:%S"'
alias today='date "+%Y%m%d"'
alias datetime='date "+%Y%m%d_%H%M%S"'
# 磁盘空间alias
alias diskspace='du -S | sort -n -r | more'
alias folders='du -h --max-depth=1 | sort -hr'
# 压缩解压alias
alias untar='tar -zxvf'
alias tarball='tar -zcvf'
# 权限相关alias
alias chx='chmod +x'
# 麒麟系统特定alias
alias service-status='systemctl list-units --type=service --state=running'
alias service-failed='systemctl list-units --type=service --state=failed'
alias journal-logs='journalctl -xe'
# 清屏alias
alias cls='clear'
# 目录快捷方式
alias cds='cd /data/server/ 2>/dev/null || true'
alias cdl='cd /var/log/'
alias cdetc='cd /etc/'
alias cddata='cd /data/'
# 实用函数
findin() {
find . -type f -name "*$2*" -exec grep -l "$1" {} \;
}
dirsize() {
du -sh ${1:-*} | sort -hr
}
# 系统信息函数
sysinfo() {
echo "=== 系统信息 ==="
echo "主机名: $(hostname)"
echo "系统: $(cat /etc/kylin-release 2>/dev/null || cat /etc/redhat-release 2>/dev/null || uname -s)"
echo "内核: $(uname -r)"
echo "架构: $(uname -m)"
echo "负载: $(uptime | awk -F'load average:' '{print $2}')"
echo "内存: $(free -h | awk '/^Mem:/ {print $3"/"$2}')"
echo "磁盘: $(df -h / | awk 'NR==2 {print $3"/"$2 " ("$5")"}')"
}
fi
EOF
chmod 644 "$alias_file"
log_info "全局alias配置完成: $alias_file"
}
# 创建全局环境变量配置
setup_global_env() {
local env_file="/etc/profile.d/global-env.sh"
log_info "创建全局环境变量配置..."
backup_file "$env_file"
cat > "$env_file" << 'EOF'
#!/bin/bash
# =============================================================================
# 全局环境变量配置
# 适用于所有用户 - 由运维初始化脚本自动生成
# =============================================================================
# Java环境配置
if [ -d "/opt/java/jdk-17.0.2" ]; then
export JAVA_HOME=/opt/java/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
elif [ -d "/usr/lib/jvm/java-11-openjdk" ]; then
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
fi
# 自定义路径
export SERVER_HOME=/data/server
export LOG_HOME=/var/log
# 添加到PATH
export PATH=$SERVER_HOME/bin:$PATH
# 语言设置
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
# 历史命令设置
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
export HISTCONTROL=ignoredups:erasedups
# 默认编辑器
export EDITOR=vim
# 设置默认路径(仅对登录shell生效)
if [ -d "/data/server" ] && [ -n "$PS1" ]; then
cd /data/server/ 2>/dev/null || true
fi
EOF
chmod 644 "$env_file"
log_info "全局环境变量配置完成: $env_file"
}
# 创建必要的目录结构
create_directories() {
log_info "创建必要的目录结构..."
local dirs=(
"/data/server"
"/data/logs"
"/opt/java"
)
for dir in "${dirs[@]}"; do
if [ ! -d "$dir" ]; then
mkdir -p "$dir"
log_info "创建目录: $dir"
else
log_info "目录已存在: $dir"
fi
done
# 设置权限
chmod 755 /data /data/server /data/logs
}
# 为现有用户创建个人配置
setup_existing_users() {
log_info "为现有用户创建个人配置..."
# 为/home目录下的所有用户配置
for user_home in /home/*; do
if [ -d "$user_home" ] && [ -f "$user_home/.bashrc" ]; then
local user=$(basename "$user_home")
log_info "配置用户: $user"
# 确保用户的.bashrc加载全局配置
if ! grep -q "全局配置" "$user_home/.bashrc" 2>/dev/null; then
cat >> "$user_home/.bashrc" << 'EOF'
# =============================================================================
# 全局配置 - 由运维初始化脚本添加
# =============================================================================
# 系统全局配置已在 /etc/profile.d/ 中设置
EOF
fi
fi
done
# 配置root用户
if [ -f "/root/.bashrc" ]; then
if ! grep -q "全局配置" "/root/.bashrc" 2>/dev/null; then
cat >> "/root/.bashrc" << 'EOF'
# =============================================================================
# 全局配置 - 由运维初始化脚本添加
# =============================================================================
# 系统全局配置已在 /etc/profile.d/ 中设置
EOF
fi
log_info "配置root用户完成"
fi
}
# 验证配置
verify_setup() {
log_info "验证配置..."
# 检查文件是否存在
local files=(
"/etc/profile.d/global-aliases.sh"
"/etc/profile.d/global-env.sh"
)
for file in "${files[@]}"; do
if [ -f "$file" ]; then
log_info "✓ 文件存在: $file"
# 检查语法
if bash -n "$file" 2>/dev/null; then
log_info "✓ 语法正确: $file"
else
log_error "✗ 语法错误: $file"
return 1
fi
else
log_error "✗ 文件不存在: $file"
return 1
fi
done
# 测试目录
if [ -d "/data/server" ]; then
log_info "✓ 目录存在: /data/server"
else
log_error "✗ 目录不存在: /data/server"
return 1
fi
log_info "配置验证完成"
}
# 显示使用说明
show_usage() {
cat << EOF
使用方法:
$0 [选项]
选项:
-h, --help 显示此帮助信息
-v, --verify 仅验证现有配置
示例:
$0 执行完整配置
$0 --verify 仅验证配置
EOF
}
# 主函数
main() {
local verify_only=false
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
show_usage
exit 0
;;
-v|--verify)
verify_only=true
shift
;;
*)
log_error "未知参数: $1"
show_usage
exit 1
;;
esac
done
if [ "$verify_only" = true ]; then
verify_setup
exit 0
fi
# 检查权限
check_root
log_info "开始全局运维环境初始化..."
# 执行配置步骤
create_directories
setup_global_aliases
setup_global_env
setup_existing_users
verify_setup
log_info "=================================================="
log_info "全局运维环境初始化完成!"
log_info "=================================================="
log_info "配置内容:"
log_info " • 全局alias: /etc/profile.d/global-aliases.sh"
log_info " • 环境变量: /etc/profile.d/global-env.sh"
log_info " • 目录结构: /data/server/, /opt/java/ 等"
log_info ""
log_info "使配置生效:"
log_info " 1. 重新登录系统"
log_info " 2. 或执行: source /etc/profile"
log_info ""
log_info "验证命令:"
log_info " ll # 查看文件列表"
log_info " java -version # 检查Java"
log_info " echo \$JAVA_HOME # 检查Java路径"
log_info " sysinfo # 查看系统信息"
log_info "=================================================="
}
# 脚本入口
main "$@"