Other articles


  1. 抛砖:使用脚本添加、删除挂载的思路

    写这个日志的主要目的是想抛砖引玉得到更好的解决方案,为了准确描述我的需求只好废话比较多地讲一下具体的需求了:-)

    最近有一个需求,需要限制某个用于察看线上日志的log用户的权限,要让权限要尽可能小但是又能看到日志文件。这样的需求很明显需要用chroot来完成。但是细想起来有一个日志目录访问问题。

    假设目录所在文件夹是/var/logs,为了保证log用户能访问到这个文件夹,至少需要chroot环境中包含这个目录。如果直接这么做,log用户的chroot环境就与日志所在文件夹混在一起,不方便维护。我想到的解决方案是使用mount将目录bind到另一个文件夹下,然后在这个文件夹上级目录创建chroot环境。

    例如:log用户的chroot环境处于/home/log中,那么使用mount --bind /var/logs /home/log/home/log。这样就可以让log用户进入chroot环境后看到日志,而又可以分开维护chroot文件夹和日志文件夹。

    继续顺着这个思路往下走,就遇到了这篇日志的主要问题:如何使用脚本添加、删除挂载。

    最终目的是尽可能自动化地进行chroot环境的创建及删除,所以同样地也要做到挂载的自动创建及删除。在挂载方面需要自动化完成以下目的:

    1. 执行创建chroot脚本后,挂载相应目录并将挂载信息写入fstab
    2. 执行清理chroot脚本后,卸载对应目录并删掉fstab中的挂载信息

    第一条相对简单,在创建chroot脚本里直接写相应的mount语句并加入echo XXX >>/etc/fstab就可以。

    第二条是我遇到的难点 ...

    read more

    There are comments.

  2. Bash里使用getopts解析非选项参数

    getopts是一个Bash built-in,可以用它来实现与getopt(3)一致的参数解析功能。

    注意它和getopt(1)的区别。getopt是一个单独的命令,而getopts是bash内置命令。

    关于option与argument的区别,我这里实在给不出准确的定义,只能根据自己的理解试着解释一下。

    argument是通常所说的命令行参数,在C语言里就是argv数组,根据参数出现的顺序从argv[1]开始依次递增(argv[0]里是被执行的程序本身的程序名)。在Bash里,$0表示脚本的名称,$1开始往后是各个argument。

    option有点混乱。我的理解是:一个Option是以-(hyphen-minus character)或--开头的字符串,它后面有可选的argument,如果有则只有一个。也就是说,一个option由一个或两个argument组成

    根据上面的描述命令行参数(Arguments)可以分为3类(抱歉我这里会用比较山寨的方法来描述这三类,如果有对应的标准名称,请留言指出)

    • Option with an ...
    read more

    There are comments.

  3. Mac字幕自动下载器

    射手影音最近做了一件很有争议的事情:将SPlayerX摆上了Mac AppStore。SPlayerX是一个Fork自MPleryX的影音播放器。这次射手为了完全规避GPL协议的限制,将字幕下载部分功能用二进制可执行程序方式释出,以fork运行的方式调用这个名为sscl的二进制文件下载字幕。

    姑且不论其将二进制文件与GPL协议软件捆绑发行是否违反GPL协议以及GPL协议软件与Mac AppStore的协议是否有冲突via。射手这次的做法恰好为所有Mac用户送上了sscl这个大礼,可以使用这个工具自动匹配本地硬盘的视频文件。

    原来的设想是用AppleScript写一个脚本,并在Finder里自动监控特定目录,这样每当某目录下有新视频文件添加时就会自动下载字幕。但是我对AppleScript实在不熟悉,加上相关参考资料太少,遂作罢用bash写了一个脚本。如果有AppleScript高手,请改写之:-)

    果然抛砖引玉,请参考利用Hazel让Mac自动下载电影字幕更加自动化进行字幕下载操作:-)

    sscl的字幕下载目的目录是固定的,所以脚本里就直接Hardcode进去了。

    注意: 射手影音并没有为sscl单独设置一个license,我只能根据SPlayerX本身免费下载认为它是freeware。提取该文件单独运行引起的版权上的争议不在本文讨论范围内。 本文中提到的find、mktemp为GNU findutils和GNU coreutils里的版本,请通过MacPort或其他Port系统安装之后再执行

    功能描述 执行脚本时,在预设的目录内查找mkv和avi文件,过滤掉某些0day release里的sample文件。 对于每个文件,如果不存在对应的.chn.srt字幕文件,就调用sscl进行下载并复制到电影文件所在文件夹。

    使用方法

    1. 下载sscl文件。该文件可以从SPlayer Mercurial源里获取,地址是 ...
    read more

    There are comments.

  4. 简单脚本检查portage安装的包是否有文件丢失

    昨天开机fsck报错,正常fsck修复后丢了好多文件,导致现在系统各种不正常,ssh登录不上

    写了个脚本检查丢失的文件:

    #!/bin/bash
    for package in `eix -cI --only-names`
    do
        for file in `equery f $package`
        do
            FILE=`basename $file`
            if [ ! -e $file ] && [ "x${FILE:0:6}" != "x.keep_" ]
            then
                echo $package;
                break;
            fi
        done
    done
    

    嗯,希望能帮助到其他人.

    read more

    There are comments.

  5. 自动解压0day资源脚本

    这个脚本是以前在管理学校ftp的时候用的,当然自己在下载学校ftp资源的时候也常用这个脚本。

    使用脚本要保证系统内存在rar命令。将脚本保存为dr,加上可执行权限后放到系统路径内可用

    脚本能处理以下情况:

    1. 文件夹内压缩包以r00、r01结尾
    2. 文件夹内压缩包以part01.rar、part02.rar结尾
    3. 文件夹内包含多个子文件夹,以CD1、CD2命名

    脚本能处理绝大多数0day的电影资源,但是没有经过严格测试。从我的使用来讲,至少90%以上的电影0day资源能顺利解压~ 代码以CC by-nc-sa释出

    #!/bin/bash
    # by yegle@yegle.net
    # released under CC by-nc-sa
    function unrar(){
    if test -e *01.[Rr][Aa][Rr]
    then
        rar x *01.[Rr][Aa][Rr] && rm *[0-9 ...
    read more

    There are comments.

Page 1 / 1

blogroll

social