linux常用别名、环境变量等全局运维环境初始化脚本

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 "$@"
posted @ 2025-12-01 10:14  明月心~  阅读(1)  评论(0)    收藏  举报