無標題文檔

Shell 不是 BASH,BASH 是 Shell

标题听起来像是在绕口令,不过很多兄弟都会将 BASH、CSH 和 ZSH 以及 Shell 之间的关系搞混。本人似乎又在「误人子弟」了,下面是我和 ghosTM55 兄弟 的一些聊天记录,整理如下。

ghosTM55: 自动补全是 Shell 极为有用的一项拓展功能 ,这句话有没有错?
手气不错: 应该是 BASH,Shell 是一个接口,而不是程序
ghosTM55: 好的,明白了。那么为什么有 Shell 分类这种说法呢?
手气不错: Shell 的主要功能就是封装内核和系统调用,提供统一的接口供
          用户使用。比如你编辑 /etc/passwd 更改用户默认的 shell 为
          ls,那么就显示一下当前用户目录就退出了。这是因为 ls 发送
          了 Shell 退出同样的信号(通常为 EXIT_SUCCESS)。
ghosTM55: 对
手气不错: 同时 Shell 会在幕后做很多的事情。比如你在 Shell 中输入 ls
          回车。它要做的事情首先就是在 PATH 中寻找 ls 程序。
ghosTM55: 恩
手气不错: 然后 exec() 运行 ls,等待 ls 返回,然后 shell 获得 ls 的
          退出返回值(信号),程序结束。
          这你可以看 time ls 就知道,有一个用户进程和内核进程的概念。
          大致的流程就这样,不过通常 shell 要做的事情比上述要做的事
          情要复杂得多。
ghosTM55: 那么 Shell 的种类这种讲法是不存在的?
手气不错: 这就回到上面所提到的了,shell 我个人认为是一个接口,可以有
          不同的实现(有一个叫 POSIX 标准的东西),对比 bash、csh、
          zsh 等等这些 Shell,这就像虚拟终端(Virtual Terminals)有 
          xterm、rxvt 一样。所以,引证上面的话,说终端都有半透明功能,
          这是不正确的 - 有可能就 rxvt 有这样的功能。
ghosTM55: 哦

简而言之,可以用下面的图来理解 内核 - Shell - 应用程序 - 用户 之间的的关系(图片引自 这里 )。

https://friable.rocks/_/2008_01_09/536750136.jpg

想更深入了解 Shell 机制的,可以参看 这里这里

更正:感谢寂寞烈火等兄弟的 指正 ,「应该是 BASH,Shell 是一个接口,而不是程序」这句话是 错误 的。应该是:

理论上,只要你愿意,任何一个程序都可以作为你的 Shell。- 引自 r2007 兄弟

改变控制台的字体

近日,wu qiong 兄弟问我上次的 一篇文章 中,控制台的字体是怎么设置的。我在这里详细说一下,其实使用 setfont 脚本就可以非常简单的完成这一效果。

https://friable.rocks/_/2007_11_10/1194688414.gif

前提条件是控制台已经启用了 framebuffer (启动的时候屏幕的顶端有个小企鹅)。接下来,调用的命令非常简单:

setfont -v 字体名称

就可以了。而各字体的名称,你可以在 /usr/share/kbd/consolefonts/ 下找到它们(Slackware 11.0)。Slackware 下,其实 /etc/rc.d/rc.font 文件就是专门定制控制台字体的配置文件(如果没有,可以找找 rc.font.new 等名称,更名即可)。在脚本里设置相应的字体,并将此文件设置为可运行(chmod +x /etc/rc.d/rc.font ),即可每次启动的时候自动设置成相应的字体。

本人推荐使用 term 系列字体,比如 ter-g16f.psf.gz 字体的效果就非常的好。截图中的字体则是 sc.fnt.gz 字体。下面是使用 sc.fnt.gz 字体查看 setfont 的 man 的效果( 在这里 可以查看大图)。

https://friable.rocks/_/2008_01_05/281199310.jpg

更详细的文档信息可以参考 这里这里(Debian 系统)

最后,很多的兄弟不知道控制台下面如何截图, fbgrab 程序 就可以做到。但是编译 fbgrab 需要 splint 工具 (它是代码检查工具,通常也用不到)。 在这里 提供已经编译好的静态链接版本(Slackware 11.0 下编译,bzip2 压缩)。

支持中文 ID3 的 Mp3blaster

从 LinuxToy 上面看见关于 Mp3blaster 的介绍 ,但是有很多兄弟反应他不支持中文 ID3。由于这个问题我以前也碰到过,而且是已经解决了的,下面说说我的解决的办法。

包路径下有个 src/id3parse.cc 文件,里面有一个函数如下:

/* tampers with 's' to replace non-printable chars with dots. */
void
convert_to_sane_string(char *s)
{
    unsigned int
        cnt = strlen(s),
        i;

    for (i = 0; i < cnt; i++)
    {
        if (s[i] < (char)32)
            s[i] = '.';
    }
}

它的主要问题就是 strlen 不支持多字符集(比如中文),所以都将中文转换成了 '.'(点) 。而本身这个函数就起到一个过滤的功能,所以加上多字符集的判断(Multibyte String)我个人感觉没有必要,就直接注释掉了。

最后发现中文 ID3 就可以正常显示了(手气真的不错)。下面是一个效果图一张:

https://friable.rocks/_/2008_01_02/1768415811.jpg

最后,提供我修改后的代码 打包下载 ,感谢本部门的唐工同志提供 Linux 环境。

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章