Linux运维高频用途脚本和命令行,持续更新......

文章是临时想到所写,尚不完善,后续会在工作中继续完善,同时欢迎各位朋友补充还有那些高频用途的,脚本或命令行已经实测可以使用,直接复制修改相关参数即可用,大家多多留言,多多交流,一起完善

1. 获取服务器IP地址

以下命令均获取IPV4地址,除指定网卡外,均输出主机所有ip地址,所以还需根据命令结果获取自己需要的IP

使用hostname命令 ; -I参数会列出主机所有ip,输出结果都是固定的;

bash 复制代码
hostname -I        

##由于输出结果是固定的,所以可以使用awk获取指定列ip,如
hostname -I     |awk '{print $1}'

使用IP命令,获取所有网卡地址:

bash 复制代码
ip -o -4 addr list | awk '{print $4}' | cut -d/ -f1   

##将所有网卡按行输出,可结合sed输出需要的行,如
ip -o -4 addr list | awk '{print $4}' | cut -d/ -f1 |sed -n 1p

使用ifconfig命令获取所有网卡信息

bash 复制代码
ifconfig | grep 'inet ' | awk '{print $2}' | sed 's/addr://'  #inet后面有空格,排除了ipv6

##所有网卡按行输出,可结合sed输出需要的行,如
ifconfig | grep 'inet ' | awk '{print $2}' | sed 's/addr://' |sed -n "1p"

2.获取随机字符串

使用openssl

bash 复制代码
#!/bin/bash
# 生成一个n字节的随机字符串
random_string=$(openssl rand -base64 12)
echo $random_string

##在这个示例中,openssl rand -base64 12 生成一个 12 字节的随机数据,并用 Base64 编码,使最终字符串长度大约为 16 个字符

n=6  生成一个8位数的随机字符串
n=9  生成一个12位数的随机字符串
n=12 生成一个16位数的随机字符串

使用/dev/urandom

bash 复制代码
#!/bin/bash
# 生成一个8个字符的随机字符串
random_string=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 8)
echo $random_string

## 在这个示例中,head /dev/urandom 读取随机数据,tr -dc A-Za-z0-9 删除所有非字母数字字符,然后 head -c 8 截取前 8 个字符。

##如果需要添加特殊符号:
random_string=$(head /dev/urandom | tr -dc A-Za-z0-9,.?_/* | head -c 8)

使用base64

bash 复制代码
#!/bin/bash
# 生成一个10位字符的随机字符串
random_string=$(base64 /dev/urandom | head -c 10)
echo $random_string

#在这个示例中,base64 /dev/urandom 对随机数据进行 Base64 编码,然后 head -c 10 截取前 10 个字符。

根据自己的需求选择合适方法

  • openssl:适用于需要高质量随机数且系统安装openssl;
  • /dev/urandom:使用于需要高质量随机数且无外部依赖场景;
  • base64:适用于生成较短的随机字符串

3.批量创建用户,并生成随机密码

定义要创建的用户列表

bash 复制代码
#!/bin/bash

# 定义要创建的用户列表(可以从文件中读取或直接在脚本中定义)
usernames=(
    "testuser1"
    "testuser2"
    "testuser3"
)

# 输出文件
output_file="user_credentials.txt"

#清空输出文件
>user_credentials.txt


# 生成随机密码的函数
generate_random_password() {
    openssl rand -base64 9
}

# 遍历每个用户
for username in "${usernames[@]}"; 
do
    password=$(generate_random_password)
    
    # 创建用户并设置密码
    useradd -m  -d /home/"$username" -s /bin/bash  "$username" 
    echo "$username:$password" | chpasswd

    # 检查用户是否创建成功
    if id "$username" &>/dev/null; then
        echo "User $username created successfully."
        echo "$username:$password" >> "$output_file"
    else
        echo "Failed to create user $username."
    fi
done

echo "All users created. Credentials saved in $output_file."
定义要创建的用户文件
#!/bin/bash

定义用户名列表文件

bash 复制代码
username_list_file="usernames.txt"

# 输出文件
output_file="user_credentials.txt"

# 检查用户名列表文件是否存在
if [ ! -f "$username_list_file" ]; then
    echo "Username list file not found!"
    exit 1
fi

# 清空输出文件
> "$output_file"

# 生成随机密码的函数
generate_random_password() {
    openssl rand -base64 9
}

# 读取用户名列表文件并遍历每个用户
while  read -r username
do
    password=$(generate_random_password)
    
    # 创建用户并设置密码
    useradd -m -d /home/${username} -s /bin/bash "$username"
    echo  "$username:$password" |  chpasswd

    # 检查用户是否创建成功
    if id "$username" &>/dev/null; then
        echo "User $username created successfully."
        echo "$username:$password" >> "$output_file"
    else
        echo "Failed to create user $username."
    fi
done < "$username_list_file"

echo "All users created. Credentials saved in $output_file."

4.批量安装软件包

ubuntu:

bash 复制代码
#!/bin/bash
# 更新包列表

sudo apt-get update
# 要安装的软件包列表
packages=(
    "curl"
    "wget"
    "vim"
    "git"
    "htop"
)
# 遍历并安装每个软件包
for package in "${packages[@]}"
do
    echo "Installing $package..."
    sudo apt install -y "$package"
done

CentOS

bash 复制代码
#!/bin/bash
# 更新包列表
sudo yum update -y
# 要安装的软件包列表
packages=(
    "curl"
    "wget"
    "vim"
    "git"
    "htop"
)
# 遍历并安装每个软件包
for package in "${packages[@]}"
do
    echo "Installing $package..."
    sudo yum install -y "$package"
done

5.expect免交互登录服务器添加公钥

bash 复制代码
vim  add_key.exp
#!/usr/bin/expect
# 配置参数
set timeout 20
set username "your_username"
set password "your_password"
set hostname "your.server.com"
set public_key_file "/xxx/.ssh/id_rsa.pub"
set remote_authorized_keys "~/.ssh/authorized_keys"
# 获取本地的公钥内容
set public_key [exec cat $public_key_file]
# 启动 SSH 会话
spawn ssh $username@$hostname
# 处理 SSH 初次连接提示(如有)
expect {
    "yes/no" { send "yes\r"; exp_continue }
    "assword:" { send "$password\r" }
}
# 创建 .ssh 目录并设置权限
expect "$ " { send "mkdir -p ~/.ssh && chmod 700 ~/.ssh\r" }
# 将公钥追加到 authorized_keys
expect "$ " { send "echo '$public_key' >> $remote_authorized_keys && chmod 600 $remote_authorized_keys\r" }
# 退出
expect "$ " { send "exit\r" }
# 完成
expect eof

chmod +x add_key.exp

./add_key.exp

注意事项:

  • 脚本是使用expect,不能使用bash 执行;
  • 执行脚本需要+x权限

6.文件查找find

查找特定名称的文件

bash 复制代码
find  /path/xxx  -name  "filename"


eg.
find  /tmp  -name  "test.txt"    ##在/tmp目录下查找名为test.txt

查找特定模式的文件

bash 复制代码
find /path/xx -name "*.log"    ##使用通配符可匹配多个

find /path/xx -iname "filename"  ##忽略大小写

find /path/x -type d -name "dirname"  ##按指定类型查找d是目录,f是文件,l是软连接

find /path/x -mtime -7    ##查找最近7天内修改的文件

find /path/x -mtime +30    ##查找超过 30 天未修改的文件

find /path/x  -atime -7  ##查找最近 7 天内访问的文件

find /path/x -size +100M   ##查找大于100M的文件

find /path/x -size -100k   ##查找小于于100k的文件

结合其他命令使用

bash 复制代码
find /path/xx  -name "*.log" -type f -delete    ##查找指定目录下所有.logw文件删除

find /path/xx -name "*.log" -type f -exec ls -lh {} \;   ##查找并显示指定录下.log文件的详细信息

结合xargs并行处理

bash 复制代码
find /path/xxx -name "*.log" -type f | xargs -P 5 -I {} rm -rf {}     ##查找指定路径下.log文件,并行删除

-P 5:并行执行 5 个进程。
-I {}:将 {} 替换为从 find 命令中读取的每个文件名。

结合Parallel并行处理

需要先安装parallel工具

bash 复制代码
apt-get install parallel

find /path/xx -name "*.log" -type f | parallel -j 4 rm -rf  {}  ##查找指定路径下.log文件,并行删除

-j 4:并行执行 4 个进程。

7.date时间的格式输出,常用语文件备份后缀

自定义格式化输出日期和时间:

bash 复制代码
date +"%Y-%m-%d %H:%M:%S"
2024-07-30 18:56:00

仅输出当前年份、月份和日期:

bash 复制代码
date +"%Y-%m-%d"
2024-07-30

输出当前时间(24小时制):

bash 复制代码
date +"%H:%M:%S"
18:30:00
相关推荐
川石课堂软件测试2 分钟前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
pk_xz1234562 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强2 小时前
Linux之sed命令详解
linux·运维·服务器
Lary_Rock4 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面6 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq6 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮7 小时前
Linux 使用中的问题
linux·运维
dsywws8 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零9 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
wclass-zhengge9 小时前
Docker篇(Docker Compose)
运维·docker·容器