V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
calmzhu
V2EX  ›  程序员

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

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

    服务器管理的,
    或者各位使用 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   2020-08-25 21:28:18 +08:00
    @lxk11153

    这个 properties 是不是就是纯粹 k:string = v:string 的格式?
    calmzhu
        5
    calmzhu   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   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   2020-08-26 12:42:00 +08:00
    @xrds7986

    可以试一下这个 shell 命令。把域名写在文本里面。dig -f 一下。然后从输出中过滤出 DNS 解析记录再提取 IP 去重
    https://paste.ubuntu.com/p/Nc4mZJRTHF/
    calmzhu
        41
    calmzhu   2020-08-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   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   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   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   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   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   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   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   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1307 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:13 · PVG 02:13 · LAX 10:13 · JFK 13:13
    ♥ Do have faith in what you're doing.