在线代写各种 shell 小脚本:我就想看看都有哪些好玩的需求 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
calmzhu
V2EX    程序员

在线代写各种 shell 小脚本:我就想看看都有哪些好玩的需求

  •  1
     
  •   calmzh 2020-08-25 20:01:41 +08:00 6961 次点击
    这是一个创建于 1882 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不管是

    服务器管理的,
    或者各位使用 Linux 觉得需要有些功能的。。
    都行。


    免费写的玩,不要太长的。
    第 1 条附言    2020-08-25 22:48:02 +08:00
    发现好多好玩的东西。
    感觉我在钓鱼。。
    61 条回复    2020-09-17 21:34:03 +08:00
    levelworm
        1
    levelworm  
       2020-08-25 20:38:22 +08:00 via Android
    这个不错,正好在学 shell 准备拿来练手。。。
    lxk11153
        2
    lxk11153  
       2020-08-25 20:41:14 +08:00
    aheadlead
        3
    aheadlead  
       2020-08-25 20:43:57 +08:00
    求大佬:

    stdin: 输入一段字节流,保证每个字节是 [0-9A-F]。每两个字节实际上是十六进制表示的“一个字节”。输入的字节数保证是 2 的倍数。
    stdout: 求输出 binary 。

    例如:

    stdin: 68656C6C6F2C20776F726C640A
    stdout: hello, world

    今天用到了这个,实在一下子想不出,用 py 写了。。。
    calmzhu
        4
    calmzhu  
    OP
       2020-08-25 21:28:18 +08:00
    @lxk11153

    这个 properties 是不是就是纯粹 k:string = v:string 的格式?
    calmzhu
        5
    calmzhu  
    OP
       2020-08-25 21:30:35 +08:00
    @aheadlead
    #!/bin/bash

    python xxxx.py

    手动狗头。

    bash 就是杂烩。纯 bash 干不了太多。都靠各种工具。
    dorothyREN
        6
    dorothyREN  
       2020-08-25 21:30:53 +08:00
    各种花式删库,删 root
    teawithlife
        7
    teawithlife  
       2020-08-25 21:50:29 +08:00   5
    @aheadlead #3
    $ echo '68656C6C6F2C20776F726C640A' | xxd -r -p
    hello, world
    aheadlead
        8
    aheadlead  
       2020-08-25 21:55:53 +08:00
    @teawithlife #7 今天没耐心看这个 manpage 。。。原来少了个-p
    AlisaDestiny
        9
    AlisaDestiny  
       2020-08-25 21:57:18 +08:00
    @aheadlead 你这个功能 Linux 本身就有啊,echo 68656C6C6F2C20776F726C640A | xxd -r -ps
    MZRME
        10
    MZRME  
       2020-08-25 21:59:51 +08:00
    dd cc 脚本
    yuanfnadi
        11
    yuanfnadi  
       2020-08-25 22:05:06 +08:00
    把 git commit -> json
    然后再把 json -> commit
    CismonX
        12
    CismonX  
       2020-08-25 22:22:20 +08:00 via iPhone   1
    写一个 quine (执行的输出结果为程序自身的源码),要求:不能为空,不能接受任何形式的输入(包括读文件系统、读环境变量),不能调用第三方程序(比如 /usr/bin 下面那些)
    everydaystruggle
        13
    everydaystruggle  
       2020-08-25 22:40:18 +08:00
    我来说一个,求各位思路。
    经常需要运行一堆任务,每个都会调用一个 gpu 。希望用 bash 写个任务池,能保持 3 块 gpu 都有任务在跑,直到这一堆都跑完。
    每个 gpu 都跑一个任务就能。
    sarvatathagata
        14
    sarvatathagata  
       2020-08-25 22:40:29 +08:00   2
    https://cmdchallenge.com/上面的每个 challenge 每个都过掉
    mlhadoop
        15
    mlhadoop  
       2020-08-25 22:54:39 +08:00
    秒杀脚本
    期望能够在指定在某个具体时间点,尽可能快速往指定网址发送 http 请求,实现对卡券等秒杀。
    1. 要求脚本能够定时执行
    2. 能够并发调用 curl 完成对目标 site 的请求,并发数可设置
    3. 对 2 中 curl 兼容 cookie 的设置
    rrfeng
        16
    rrfeng  
       2020-08-25 23:45:27 +08:00 via Android
    @sarvatathagata
    手机解了十几个…前面题目太简单了
    rrfeng
        17
    rrfeng  
       2020-08-25 23:47:08 +08:00 via Android
    @everydaystruggle
    shell 并发控制,有点意思。
    debuggerx
        18
    debuggerx  
       2020-08-25 23:55:04 +08:00
    现状:linux 服务器开机后一般会停在登陆界面,需要手动输入帐号和密码后才能操作
    需求:希望开机后自动运行 htop,这样服务器即使断电重启后监视器也能方便地直接看到运行状态

    这个脚本我以前写过,但是忘了备份,家里那台服务器挂了以后重装还想要原来的效果,但是想不起来怎么写的开机脚本了,又不想再写一遍……
    sarvatathagata
        19
    sarvatathagata  
       2020-08-25 23:56:27 +08:00
    httplife
        20
    httplife  
       2020-08-26 07:38:36 +08:00
    计算并列出 IP 段?

    例如 sh ip.sh 192.168.0.0/19
    列出所有可用 ip ?网关?
    ivyliner
        21
    ivyliner  
       2020-08-26 08:05:30 +08:00 via Android
    @httplife ipcalc 了解一下
    Mutoo
        22
    Mutoo  
       2020-08-26 08:07:17 +08:00
    需求:对 sudo 进行 MITM 攻击。使用 sudo 时无感知,将用户输入的密码保存到 /tmp/evil.txt 里,例如

    $ sudo vi /etc/hosts
    password:
    Sorry, try again.
    password:
    $ cat /tmp/evil.txt
    wrongpassword
    correctpassword
    ivyliner
        23
    ivyliner  
       2020-08-26 08:09:31 +08:00 via Android
    @everydaystruggle xargs 了解一下, 可能是个思路
    xrds7986
        24
    xrds7986  
       2020-08-26 08:25:41 +08:00 via Android
    想封某站的 ip,需从多 dns 解析,果去除重。
    zbn
        25
    zbn  
       2020-08-26 08:32:04 +08:00
    一个别人的 bash 脚本,里面有选项 1,2,3,4,5 。接下来还有二级菜单 1,2,3,4,5 。

    怎样写个脚本能自动输入选项,去对他的脚本交互。
    httplife
        26
    httplife  
       2020-08-26 08:49:51 +08:00
    @ivyliner
    ipcalc 一般 显示 类似:
    Network: 192.168.0.0/24
    Broadcast: 192.168.0.255
    HostMin: 192.168.0.1
    HostMax: 192.168.0.254
    Hosts/Net: 254

    但 HostMin 实际是 网关,

    想要实现的是:
    网关:192.168.0.1
    可用 IP:
    192.168.0.2
    192.168.0.3
    192.168.0.4
    ....一直到最后

    最后能提供 类似
    ip addr add <可用 IP> dev eth0
    zsdroid
        27
    zsdroid  
       2020-08-26 08:57:04 +08:00
    运行下脚本,我支付宝就多一块钱。这个需求怎么样
    yuanbo6
       28
    yuanbo6  
       2020-08-26 09:33:02 +08:00
    可以考虑 tcpdump 抓包衍生出来的工具吧,最好可以后台执行然后自动分片保存,虽然我知道 nohup&的用法,也知道 tcpdump 的-C 参数怎么用,但是我懒得写脚本(手动狗头)
    lxk11153
        29
    lxk11153  
       2020-08-26 09:44:00 +08:00
    @calmzhu #4 不是我的需求,你可以和那楼主交流一下
    我的需求: /t/690956 谢谢[doge]
    kimqcn
        30
    kimqcn  
       2020-08-26 09:46:27 +08:00
    麻烦帮忙写一个简单的 oracle 客户端脚本,可以创建数据库,编辑表,增删改查。
    zhve2x4
        31
    zhve2x4  
       2020-08-26 10:05:20 +08:00
    @httplife 网关不一定是 1,我以前经常把网关设置成靠后的 ip
    stille
        32
    stille  
       2020-08-26 11:00:14 +08:00
    求帮忙写个脚本

    在当前目录下,查找该目录下,及所有多层级子目录下的 多个文件 (*.txt *.log *.zip 等),并剪切(mv)到指定目录,同时同名文件自动重命名...
    Dihambo
        33
    Dihambo  
       2020-08-26 11:03:36 +08:00 via iPhone
    超简单的一个,百度文库签到
    yorks
        34
    yorks  
       2020-08-26 11:14:31 +08:00
    find 找到出最新创建的文件( 30min 以内)
    yorks
        35
    yorks  
       2020-08-26 11:27:02 +08:00
    @yorks #34:"https://v2ex.com/t/701389#r_9420334"

    -newerXY

    ```bash
    -type f -newermt "$(date -d "30 min ago" +"%F %T")"
    ```
    Lufs
        36
    Lufs  
       2020-08-26 11:44:11 +08:00 via Android
    去除文本文件中的所有的 emoji 表情,并把结果重新写入文件。
    xurunfei
        37
    xurunfei  
       2020-08-26 11:55:37 +08:00
    properties 转 yaml 小工具,要求保留注释,有 python 的就更好了
    calmzhu
        38
    calmzhu  
    OP
       2020-08-26 12:02:00 +08:00
    @yuanfnadi
    是指 git commit log 换成 json 格式?

    @CismonX
    关注点是啥,不通过外部输入获取程序执行信息的内容,还是代码输出刚好是自身的特殊逻辑。搜到一个这种

    https://john.dev/posts/2019-02-29-quine.html


    @everydaystruggle
    任务调用的时候能指定 gpu 么。
    这样可不可行?
    1. 每个 GPU 搞个临时文件。存放当前这个 GPU 上正在云项的任务个数。
    2. 然后启动任务用同一个脚本。脚本对要执行的任务进行装饰。 启动时计数器加 1,执行完了-1.。
    3. 设致单个 GPU 允许最大进程数。启动任务时检查,选择当前计时器最低的那个 GPU,如果全满,等待。

    @sarvatathagata
    昨晚过了一阵子。。这个有多少个啊。先 mark


    @mlhadoop
    cookie 来源是啥。不考虑站点反爬虫限制的话。
    先 curl login 一下存 cookie 到文件,然后后台同时多进程 curl 指定这个 cookie 发输出
    定时执行的话,放 crontab 就行了。
    多进程,不用多线程。。


    @debuggerx
    这个不用脚本。。 现在应该都是 systemd 了,直接用 systemd unit file 注册成系统服务并且开机自动启动就可以。

    @httplife
    关注点是啥。通过掩码计算 IP 段,还是扫描局域网里面可用的 IP 地址(以 ping 为依据判断的情况下)
    然后,这个网关应该没法判断。网段内网关地址又没限制。查看本机的网关还有可能。
    @Mutoo
    有 root 权限了?


    @xrds7986
    可以这样翻译需求么
    输入是若干 DNS,输出是这些 DNS 解析后的所有 IP 然后去重。
    封 IP 的操作,在哪做,我理继是拿到 IP 列表后去网关 /防火墙之类的。


    @zbn expect 应答可以么

    @zsdroid

    同求,找到了借我一下,我只要每次转一分就好

    @lxk11153
    你这个也不是你的需求。是几乎所有 IT 人的需求。。。

    @kimqcn
    Oracle  不会。。。没接触过



    @stille
    吃个饭先。。。
    xrds7986
        39
    xrds7986  
       2020-08-26 12:18:43 +08:00
    @calmzhu 没错,就是这个意思,脚本提示我输入网址,然后通过若干 DNS 解析,IP 结果输出到一个文本。
    calmzhu
        40
    calmzhu  
    OP
       2020-08-26 12:42:00 +08:00
    @xrds7986

    可以试一下这个 shell 命令。把域名写在文本里面。dig -f 一下。然后从输出中过滤出 DNS 解析记录再提取 IP 去重
    https://paste.ubuntu.com/p/Nc4mZJRTHF/
    calmzhu
        41
    calmzhu  
    OP
       2020-8-26 13:02:27 +08:00
    @stille
    看一下这个
    https://paste.ubuntu.com/p/9QtnkSYnN3/

    先 find 找到所有符合后缀的文件。
    然目标目录中不存在的直接 mv
    存在的则跟据文件原来全路径把“/”替换成“_"重新命名,比如
    /a/b/c/d.sh --> /targetdir/_a_b_c_d.sh
    calmzhu
        42
    calmzhu  
    OP
       2020-08-26 13:14:45 +08:00
    @Dihambo
    这个先放着。百度好像有限制。我之后看看


    @Lufs Unicode 定义的那个 emoji? 查下 Unicode 里面 emoji 对应的码范围。binary 模式直接改字节应该可以


    @xurunfei
    properties 完整规范不熟悉的。我只知道基础的 string=string 这种。

    先跑一下这个命令 find . -name "*.properties" -exec grep -vE '^(\S.*=|#|$)' {} \;
    看一下,去除#开头注释行,空行,string=string 的行还有啥 内容
    lxk11153
        43
    lxk11153  
       2020-08-26 13:22:00 +08:00
    @calmzhu #38 哈,那来一个我的: 执行后能有人往 xhgxa.ml 里打钱的 [doge]
    calmzhu
        44
    calmzhu  
    OP
       2020-08-26 13:25:23 +08:00
    @lxk11153 这二维码太讨厌了,挡着我看美女背景板
    stille
        45
    stille  
       2020-08-26 15:58:17 +08:00
    @calmzhu 谢谢,可用.
    首行改为了 target_dir=$(dirname $(readlink -f $0))
    就可以在当前文件夹来执行 sh 了.
    T5eng
        46
    T5eng  
       2020-08-26 16:03:24 +08:00
    传入集群 IP 列表<10.0.0.1, 10.0.0.2, 10.0.0.3, ... >,
    通过 shell 脚本配合 Docker 或 Docker Compose 启动 zookeeper 集群和 kafka 集群.

    能做到吗?麻烦吗?
    calmzhu
        47
    calmzhu  
    OP
       2020-08-26 16:37:11 +08:00
    @T5eng
    zookeeperv 不熟。
    K8S 部署过 kafka
    但是这个重点不在 shell 啊。就是集群的安装步骤命令啊。

    然后传一下集群 IP 地址
    x97bgt
        48
    x97bgt  
       2020-08-26 20:15:03 +08:00
    跳板机的 IP 和密码都在剪贴板中,运行脚本就可以自动登录。同时在跳板机里进一步登录,进入服务器(命令也是 ssh [email protected],然后输入密码)

    这个有办法实现不?
    xcstream
        49
    xcstream  
       2020-08-26 20:17:14 +08:00
    从国内源 一键下载 python node java 等编程软件
    calmzhu
        50
    calmzhu  
    OP
       2020-08-26 20:30:05 +08:00
    @x97bgt 这个直接用 ssh config 更省事,跳转的化用 ProxyCommand


    @xcstream 这个整个操作系统做镜像吧,亲。
    x97bgt
        51
    x97bgt  
       2020-08-26 20:53:07 +08:00 via iPhone
    @calmzhu ssh config 可以监听剪贴板?关键是每次获取的的跳板机 ip 与密码都不一样,手动敲入很烦。
    calmzhu
        52
    calmzhu  
    OP
       2020-08-26 22:34:47 +08:00
    @x97bgt
    可以用 exepct 应答加 剪贴板工具。

    在 mac 测试了下。下面的脚本是可以的
    https://paste.ubuntu.com/p/TgXYp9kmmt/

    先说思路。具体实现要根据你的剪贴板格式,系统,用户名改。还有判断下可能的异常

    1. 用 pbpaste(mac) xclip(linux)等工具获得剪贴板内容。并解析出用户名密码主机地址

    2. expect 中用 spawn 启动 ssh 连接进程。然后自动应答帐户 /密码 /主机确认这些

    3.进入交互模式,也就是 ssh 命令行。
    baobao1270
        53
    baobao1270  
       2020-08-27 02:55:23 +08:00
    1 、Minecraft 服务器管理,比如封号踢人什么的
    2 、Lets Encrypt 证书跨服务器同步脚本(用 scp 命令)
    3 、云服务器 Linux DD 到 Windows Server
    qwerthhusn
        54
    qwerthhusn  
       2020-08-27 09:59:46 +08:00
    来个脚本,谢谢 https://paste.ubuntu.com/

    ./replacefile.sh <dirFrom> <dirTo>
    读取 dirFrom 下的文件( dirFrom 下面不会有文件夹,如果有直接报错,只有文件)

    然后在 dirTo 下搜索重名的文件(可能有多层目录),如果在 dirTo 下面正好匹配上且只有一个,就把这个文件替换过去,如果匹配到多个或者没有匹配到,就打印一个警告。

    示例:dirFrom/1.txt
    dirTo/a/b/c/d/1.txt ,就把 dirFrom/1.txt 覆盖到 dirTo/a/b/c/d/下面
    lllllliu
        55
    lllllliu  
       2020-08-27 11:32:29 +08:00
    打包文件加,按日期命名并发送邮件。。
    还有 MYSQL 备份脚本?
    calmzhu
        56
    calmzhu  
    OP
       2020-08-27 13:34:54 +08:00
    @baobao1270

    1. Minecraft 这个封装 api (如果有的化)吧
    2. 你都已经答了 scp 吧。
    3. dd + scp 吧。大就多 dd+scp 几次


    @qwerthhusn
    你这是要个文件夹比较工具吧。diff?


    @lllllliu
    没有细节写不了代码。
    打包文件这个,tar + date + email 几个命令串一下就可以了

    MYSQL 备份的化。不大用 mysqldump 到 sql 。大的化走 bin 文件备份
    calmzhu
        57
    calmzhu  
    OP
       2020-08-27 13:38:24 +08:00
    @qwerthhusn
    然后匹配的化。算不算路径输结构。

    比如 dirTo/a/a.txt dirTo/b/a.txt 这种是希望 dirTo 的 copy 过去,还是在 dirB 里面建一个 a/a.txt 的结构。
    dijia478
        58
    dijia478  
       2020-08-27 15:14:55 +08:00
    写个定时任务,每周去 http://117.39.29.75:8085/pricePublic/house/public/index 网站拉下来所有房价,按照每 10 平米一个区间,统计每个区间的均价。随着执行次数,最后汇总出趋势图
    stebest
        59
    stebest  
       2020-08-27 17:46:17 +08:00
    @aheadlead xxd 命令直接转
    qwerthhusn
        60
    qwerthhusn  
       2020-08-27 21:29:26 +08:00
    @calmzhu 不是文件夹比较工具,说一下情况,你就明白啥意思了
    我是 Java 开发,现在项目本地不能跑,只能放在服务器上,但是 Spring Boot 打包到上传又太久,经常需要改一点代码,更新应用,重启,有问题继续改。。。所以把应用摊开了。对于改动很小时,可以替换个 class 文件

    在本地我都是直接用 everything 搜到那个 XXXService.class YYYService.class,然后替换到 app/classes/com/example/xxx/service/XXXService.class 和 app/classes/com/example/yyy/service/XXXService.class

    现在我想直接把 XXXService.class 和 YYYService.class 放在某个固定的目录
    然后脚本自己去 app/目录找同名的文件(判断应该只有一个匹配,如果有多个肯定就不能这么搞了)然后自动将这两个文件放到指定的目录下
    asmoday320
        61
    asmoday320  
       2020-09-17 21:34:03 +08:00
    求大佬:

    在 kettle 使用 ftp 上传‘‘文件名带有中文’’的文件,文件名会直接乱码,想求一个 shell 脚本可以直接把一个文件夹内的 csv 文件全部转移到 ftp 文件夹内,能保证名称无乱码,鞋鞋~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1550 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 16:40 PVG 00:40 LAX 09:40 JFK 12:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86