I am LAZY bones?
AN ancient AND boring SITE

分类: 'CLI软件' 的归档

试试OpenClaw

这次南美之行,去了半个月,发现AI圈又有了一些新的变化。有只龙虾,从ClawBot改名成了OpenClaw,似乎挺火的。。。

回来也有几天了,想跟上大家的步伐,于是也决定尝试一下。

安装的体验倒是非常好,按着官网来,给配上大模型的key(我用的是anthropic/claude-sonnet-4-5)、链接WhatsApp、开一些skills,就能用了。。

我只暂且试了下读取日历的功能,但就发现磕磕绊绊的,不是很顺利的样子。虽然最终是读取成功了。

点击查看全文 »

嗯,我还是喜欢下载mp3

老朋友应该知道,很久很久以前,由于喜欢下载mp3,我写过一个下载器,叫 gmbox,当时还是从Google music下载的,用户还不少。

后面 Google music 都退出中国了,gmbox肯定也不能用了。再后来各种在线的流媒体也非常丰富了,加上播客等其他内容也都兴起了,我自己也都不怎么听离线的mp3了。

这次又想下载mp3,是因为坐飞机。由于近期坐飞机会比较频繁,算了下,2个月得坐14趟飞机,累积飞行80+个小时。同时,希望在坐飞机的时候可以看看电纸书,那播客就会过度消耗我的注意力了,还是听听老歌比较合适。于是,就有了这个标题。

研究了下,国内的网易、酷狗等,应该也是可以下载的,但看起来API比较复杂。于是我把目光又投向了 YouTube music,对,我还是喜欢逮着Google家薅,哈哈!

之前在YouTube music就发现了一些不错的歌单,特别适合我这种要求不高的无脑批量下载。于是请出 yt-dlp,让GPT写了一行shell,原码率下载mp3,如果有视频则忽略视频只保留音频,就像这样就比较完美的解决我的问题了:

点击查看全文 »

记一下这个bash的http server

很久之前找到的小脚本,比较方便,可以基于此,自己在里面写各种逻辑,比如之前我是给改成做30x的跳转(根据输出参数,跳转到不同url),还是很合适的。
最近又想用,发现几乎找不到了,很多收藏的链接都已经失效了,于是觉得还是应该在自己能把控的地方记录下,把代码帖这个里吧,这个的效果和 python 的 SimpleHTTPServer 有点类似。
注意,这个脚本没有任何安全性可言,可以通过..访问到上级目录,也可能通过执行任意指令,所以最好别长期开着。这只是个例子,处理逻辑自己改。

另外,也可以看看几年前的这篇

一个dump DVD到mp4的脚本

注意:此脚本只是一个对我来说刚刚够用的脚本,并不是一个通用的方案,如果你的源DVD里有多语言、多字幕之类的,很可能需要修改参数才能正常运行,另外输出文件的码率、画面长宽、声音采样率等,也需要按实际情况修改。

给儿子买了12张巧虎的DVD,但是这年头,已经很少见DVD播放器了,电视机都是直接插U盘的,所以打算把DVD里的内容dump到U盘里(mp4格式),再进行播放。我的盘是按故事分段的,所以我也按段分成不同的mp4文件,一个盘的内容放在一个目录里。

用到的几个命令:

  • lsdvd命令可以取得DVD的标题、语言、字幕、分段等信息。
  • mencoder是个强大得一塌糊涂的视频/音频编码工具。
  • eject命令可以弹出光盘,放在脚本最后最合适了。

上脚本:

突然又觉得这事儿挺折腾的,呵呵,而且不知道这样做(自己dump、自己看)算不算侵犯版权呢?

其实,文件也可以truncate

现在觉得,时间的流逝速度和年龄确实是成正比的。也就是说,年纪越大,就会觉得空闲时间越来越少了~
因此,本blog都大半个月没更新了,呵呵。也不能老这么沉寂下去,今天来写点东西。

熟悉数据库的朋友们都知道,大多数数据库都有个truncate指令:truncate table xxx可以把xxx表里的所有数据都删掉,但是保留表结构。其实,在有任何数据库之前,UNIX系统里就有了truncate这个命令了,当然后面的*nix里都保留了这个。可以想像,系统里的truncate命令的操作对象肯定是文件,而且此命令不仅能把文件的数据删成0字节,还可以缩减(甚至扩大)文件至指定的大小(通过 -s 选项指定文件大小值),这对于那种日志头部有些不想删除的关键信息,但后面的部分又很多很杂的情况下很有用。对于普通的日志文件,我们要清理的时候通常可以执行 > log 来清除文件的内容(这样,log文件会变成0字节),但是如果清理的同时想保留原始日志的前面4K的信息,不用truncate就会很麻烦了。

truncate的用法还是通过实战来解释吧,如下:

这里还可以看到一个“奇怪”的现象,本来已经缩至4字节的文件,把它扩展成1M以后,ls 和 wc 的结果显示大小确实是1M,但是 du 的结果却发现大小还是4字节。这也是要注意的地方之一,这种文件称为“空洞文件”,也就是说,文件的部分内容并没有实际存在于硬盘上(即没有分配对应的inode),只是“声称”有1M的大小而已。对于不存在于硬盘上的那部分字节,如果去读的话,也是不会报错的,会读到全0的数据。
这也从另一个方面反映出ls等命令默认显示的是文件“声称”的大小,而du (disk use)默认显示的是真正的磁盘占用。这里是我以前的另外一个例子。

Common Internet File System

Common Internet File System 是samba的一部分,用于取代 smbfs 来挂载windows的共享文件夹,cifs比smbfs应用更广。
要使用 Common Internet File System 需要linux内核开启 cifs 支持。具体是要打开 File systems —> Network File Systems —> CIFS support (advanced network filesystem, SMBFS successor) 这个选项。如果是模块的话,使用前确保加载了。
然后,挂载共享文件夹,可以用mount命令的 -t cifs 选项来调用 mount.cifs。具体是:

当然,没有域的话,也可以省略域。如果要指定其他mount的选项也是可以的,比如指定uid和gid之类的,这里就不多说了。

另外,如果gnome-base/gvfs开启了samba支持的话,也可以在nautilus的地址栏里直接输入 smb://机器名或IP/远程/目录/ 来打开远程目录,有密码时会弹出对话框输入。
这两种方法各有各的好处。

cryptsetup – 分区加密工具

cryptsetup是linux下的一个分区加密工具,和之前介绍过的eCryptfs不同的是:eCryptfs是文件系统级别的加密,而cryptsetup是分区级别的,比文件系统级别工作在更底层的位置,是在经过加密的块设备上,再创建文件系统,再挂载使用。这应该是纯软件能达到的最底层的加密了吧。
我折腾这玩意,是因为上篇文章说到,我要把/home的数据备份到另一个硬盘,而那个硬盘的物理安全性并不能得到充分地保证,所以只有通过加密来确保数据的安全了。如果当年陈老师也用这玩意的话,想必不会捅出这么大的篓子,呵呵。

废话不说,简单说说安装和使用的方法。
如果你是用ubuntu这类发行版的话,安装部分就很简单了,基本就是直接安装cryptsetup这个包,就完事了。
但是如果你和我一样也是用自己编译内核的发行版,比如gentoo的话,使用中可能会出现以下错误:

/proc/misc: No entry for device-mapper found
Is device-mapper driver missing from kernel?
Failure to communicate with kernel device-mapper driver.
Cannot initialize device-mapper. Is dm_mod kernel module loaded?
Command failed with code 22: Cannot initialize device-mapper. Is dm_mod kernel module loaded?

这时候你不要急着去安装 device-mapper ,因为现在 device-mapper 已经并入到更强大的 lvm2 里面了,所以你要确保装了 lvm2 和在内核选项里选择了CONFIG_DM_CRYPT,如下:

另外,还建议选取大文件支持的CONFIG_LBDAF和CONFIG_CRYPTO_AES两个内核选项,我这边不选取前者,会无法打开加密分区(虽然说LBDAF是2T+的单文件支持,而我的硬盘一共只有80G);后者是一个内核里的加密算法API,我们就用这个算法来加密(也可以用其他的算法)。

说说怎么使用:
建立一个加密的分区,很简单,执行下面的命令:

我的外接硬盘在 /dev/sdb1 ,因为这个命令会摧毁这个分区的所有数据,所以程序会让你确认,输入大写的YES,回车,就会让你输入两次密码,输完就搞定了。
话外音:其实cryptsetup不仅支持用密码加密,还支持用文件来加密,可以是任意类型的文件,不过解密的时候,要确保文件一个字节都不差,用这个特性可以方便地构建解密U盘。

好了,加密完分区以后,要使用的话,可以这样:

其中最后的“back”,可以是任意字符串,程序会提示输入之前设置的密码,输对密码以后,文件系统里就会多出一个 /dev/mapper/back ,接下来就可以像使用 /dev/sdXX 一样地使用这个 /dev/mapper/back 了。
比如,建立一个ext4文件系统,挂载,复制文件之类:

使用完以后,可以这样显式地关闭加密分区:

看看如果别人偷你加密后的硬盘,想挂载看你的艳照时,会怎么样?哈哈:

PS: 现在ubuntu的易用性确实越来越好了,ubuntu里插入加密的硬盘后会自动判断,并直接弹出输入密码的窗口,输完自动挂载分区。

linux下的“虚拟光驱”

每当有人问我“你的linux下有没有类似‘虚拟光驱’的软件呢?”的时候,我就会轻轻一笑,自豪地说“别把事情想得太复杂,linux下根本就不用什么另外的软件,就能虚拟光驱了。”,然后那人一般就会似懂非懂地说一句:“哦。。这样啊~”
下面,就来介绍几个虚拟光驱相关的命令:
把物理光盘做成iso镜像,下面几个命令几乎等效,假设设备是/dev/cdrom:

其中,用mkisofs还可以把一个文件夹模拟成iso:

如果要使用iso文件的话,就更简单了,可以mount到任意目录下:

注意以上某些命令可能需要root权限。

不过,还有个终极问题没有解决,我手头有一张《浙江省汽车驾驶人理科考试智能》的光盘,估计是用了什么防拷贝技术,使用以上方法都无法正确生成ISO文件,也无法全部复制里面的内容,具体操作过程如下:

有谁知道这种变态的光盘怎么搞定吗?

a2p──将awk程序转成perl

呵呵,不管你觉得有没有必要,反正,就是有这样的工具了,而且还是perl包自带的哦(看来perl确实有点怪异,哈哈)。
别的不说了,拿个小程序演示下,下面的awk程序是用来统计当前登录系统的人数的,其实就是 who | wc -l

然后这样:

哈哈,确实能执行哦,再让我们来看看转出来的perl程序,格式都还蛮工整的呢:

想学perl的同学可以折腾折腾。

exif──查看JPEG文件里的附加信息

不知道什么是EXIF的可以看这里(中文)和这里(英文),简单一句话,EXIF就是存在JPG文件里的一些额外信息。
现在的数码相机拍出来的图片里,绝大多数都存有拍摄时间、快门、焦距、光圈等很多信息,稍微好点的还有GPS定位的拍摄地点呢。
在GUI下,eog等图片查看软件,都可以通过右键的“属性”菜单查看具体的EXIF信息。其实在CLI下,也是有办法提起这些信息的。这个程序的名字就叫 exif 。
安装基本靠源,就不介绍了,使用也是超简单:

下一步就是找个写EXIF信息功能强一点的CLI软件,exif虽然也能写,但是好像只能逐字段挨个写,这个就不太方便了。
最终我要实现的就是:压缩照片,但是保留EXIF信息,哈哈。

========20100211 19:30:00 update========
哈哈,是我把convert想得太简单了,其实convert本身就会保留EXIF的,根本无须我多操心~