当前位置: 首页 > news >正文

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

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

1. 获取服务器IP地址

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

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

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

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

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命令获取所有网卡信息

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

#!/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

#!/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

#!/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.批量创建用户,并生成随机密码

定义要创建的用户列表

#!/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[@]}"; 
dopassword=$(generate_random_password)# 创建用户并设置密码useradd -m  -d /home/"$username" -s /bin/bash  "$username" echo "$username:$password" | chpasswd# 检查用户是否创建成功if id "$username" &>/dev/null; thenecho "User $username created successfully."echo "$username:$password" >> "$output_file"elseecho "Failed to create user $username."fi
doneecho "All users created. Credentials saved in $output_file."
定义要创建的用户文件
#!/bin/bash

定义用户名列表文件

username_list_file="usernames.txt"# 输出文件
output_file="user_credentials.txt"# 检查用户名列表文件是否存在
if [ ! -f "$username_list_file" ]; thenecho "Username list file not found!"exit 1
fi# 清空输出文件
> "$output_file"# 生成随机密码的函数
generate_random_password() {openssl rand -base64 9
}# 读取用户名列表文件并遍历每个用户
while  read -r username
dopassword=$(generate_random_password)# 创建用户并设置密码useradd -m -d /home/${username} -s /bin/bash "$username"echo  "$username:$password" |  chpasswd# 检查用户是否创建成功if id "$username" &>/dev/null; thenecho "User $username created successfully."echo "$username:$password" >> "$output_file"elseecho "Failed to create user $username."fi
done < "$username_list_file"echo "All users created. Credentials saved in $output_file."

4.批量安装软件包

ubuntu:

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

CentOS

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

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

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 eofchmod +x add_key.exp./add_key.exp

注意事项:

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

6.文件查找find

查找特定名称的文件

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

查找特定模式的文件

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的文件

结合其他命令使用

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

结合xargs并行处理

find /path/xxx -name "*.log" -type f | xargs -P 5 -I {} rm -rf {}     ##查找指定路径下.log文件,并行删除-P 5:并行执行 5 个进程。
-I {}:将 {} 替换为从 find 命令中读取的每个文件名。

结合Parallel并行处理

需要先安装parallel工具

apt-get install parallelfind /path/xx -name "*.log" -type f | parallel -j 4 rm -rf  {}  ##查找指定路径下.log文件,并行删除-j 4:并行执行 4 个进程。

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

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

date +"%Y-%m-%d %H:%M:%S"
2024-07-30 18:56:00

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

date +"%Y-%m-%d"
2024-07-30

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

date +"%H:%M:%S"
18:30:00

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Hutool中SpringUtil中的一个坑-所有路由消失
  • docker安装elasticsearch(es)最新版本
  • 3.5.3、查找和排序算法-插入类排序和选择类排序
  • Dify中语音和文字间转换问题的一种暂时注释方式
  • 大模型算法面试题(十七)
  • Django实战:开启数字化任务管理的新纪元
  • C/C++编程-算法学习-数字滤波器
  • 日常踩坑---ljmp在BIOS中的使用
  • pytest-html报告修改与汉化
  • CTF-NSSCTF[NISACTF 2022]
  • 探索PostgreSQL的GUI工具:提升数据库管理效率
  • 小阿轩yx-部署 KVM 虚拟化平台
  • Elasticsearch跨集群搜索
  • 搜维尔科技:Haption Virtuose 6D遥操作控制人形机器人操作
  • 【Linux-IMX6ULL-阻塞与非阻塞】
  •  D - 粉碎叛乱F - 其他起义
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Redis的resp协议
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • SQL 难点解决:记录的引用
  • 从零搭建Koa2 Server
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 使用 @font-face
  • 学习ES6 变量的解构赋值
  • 用Visual Studio开发以太坊智能合约
  • Java性能优化之JVM GC(垃圾回收机制)
  • mysql面试题分组并合并列
  • ​Redis 实现计数器和限速器的
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #QT(TCP网络编程-服务端)
  • (0)Nginx 功能特性
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (k8s)Kubernetes本地存储接入
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二) 初入MySQL 【数据库管理】
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (转)ABI是什么
  • (转)大型网站的系统架构
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .gitignore文件设置了忽略但不生效
  • .net 7和core版 SignalR
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 反射 Reflect
  • .net反编译的九款神器
  • .NET面试题(二)
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @Not - Empty-Null-Blank
  • @RequestBody与@ModelAttribute
  • @RequestMapping处理请求异常
  • @WebService和@WebMethod注解的用法
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [C#C++]类CLASS