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