日志标签 Linux
Linux下的通用打开命令
4月12日
在Mac下的终端里可以输入open来打开任意类型的文件,linux下是否也有类似的命令呢?
经查,发现有三个命令可以实现类似效果:
- see
see通过查找在mailcap文件中设定的文件类型和应用程序映射来打开文件。系统配置文件在/etc/mailcap,用户可以自定义配置文件到~/.mailcap。
通过see调用GUI程序以后要等待程序结束才可以继续输入命令。
- xdg-open
xdg-open使用的配置文件不详。调用程序后终端仍可继续输入命令而不必等待程序结束。
- gnome-open
gnome-open使用GNOME文件管理来打开文件。一般和Nautilus中设定的文件关联一致。
测试
我的系统为Ubuntu 11.04。
打开pdf文件,see调用了Okular打开,而xdg-open和gnome-open调用了evince。
打开jpeg文件,see调用了feh,而xdg-open和gnome-open调用了eye of gnome。
打开html文件,三者都调用了x-www-browser,这里是google-chrome。
打开utf-8编码的txt(后缀为txt),see调用了less,xdg-open和gnome-open调用了gedit。
打开utf-8编码的txt(无后缀),see不识别:
Warning: unknown mime-type for "test_utf-8" -- using "application/octet-stream"
Error: no "view" mailcap rules found for type "application/octet-stream"而xdg-open和gnome-open处乱不惊,gedit依旧。
打开cp936编码的txt,see误以为二进制文件,强制打开后失败,退出码1:
$ see test_gbk.txt
"/tmp/file1tdJGh" may be a binary file. See it anyway?
Warning: program returned non-zero exit code #1xdg-open和gnome-open表现的很淡定,继续gedit之。
总结
see的配置文件mailcap超级复杂,要自定义恐怕要费不少时间,而xdg-open/gnome-open由于和Nautilus保持一致,这样就很和谐,很方便。并且xdg-open/gnome-open在输入命令后不必等待程序结束就可以继续输入,比see要实用。
参考自:http://zh-cn.w3support.net/index.php?db=so&id=264395
Vim 复制粘贴探秘
12月8日
Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情。每当学会了vim的一个新功能,就会很大地提高工作效率。有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim的强大。而这样何尝不是一件好事呢,只要有的学习,就有的提高。
最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了。仔细研究了以下,原来是自动缩进的缘故,于是做如下设置: 阅读全部内容 »
UNetbootin 让Linux安装更简单
9月9日
一般 Linux 的安装采用光盘的安装方式,上周在客户部署就遇到服务器没有光驱的情形,临时四处去借,好狼狈。
光盘安装还可能遇到一个问题就是:由于硬件太新而光盘内核太旧导致无法识别硬件,安装失败。
用网络安装是个好方法,但一个是部署麻烦,还有引入DHCP服务器可能会和用户网络中已有的DHCP冲突。
UNetbootin 提供了另一种解决方案:U盘启动。
U盘启动不是什么新鲜话题,但偶然发现的 UNetbootin 项目,让 U 盘启动 Linux 安装如此简单。
- 提供图形化界面,点点鼠标就搞定 Linux 启动 U 盘
- 虽然本身不提供多启动U盘制作,但可以很容易手工编辑启动菜单,实现多启动U盘
- Debian和Ubuntu的启动支持网络启动,还支持从U盘中的 ISO 镜像执行安装
如果U盘太小,不能放下太多的ISO镜像,那么就用网络安装。如果能架设一个 Debian/Ubuntu 的软件包缓存服务器,网络安装的效率可以达到或超过光盘安装。
nVidia 显卡在 Debian sarge 最新 linux 内核中的驱动
7月30日
我的笔记本安装的是 Debian sarge,上次升级内核到 linux 2.6.32-5, nVidia 的驱动就一直没有跑起来,今天下班后,仔细研究了一下。
先说一下 nouveau 和 nVidia 驱动的历史
Linux 和 Windows 相比,让用户觉得上手比较难,一个很重要的原因就是驱动不易安装。
- Windows 本身内置了大量的设备驱动
- 因为 Windows 的普及,硬件厂商首选是开发针对 Windows 的设备驱动
- 再有一个就是 Windows 升级比较缓慢,Windows XP 的历史都快10年了,硬件厂商的支持难度要小
就 nVidia 显卡来说,其实 Linux 的支持也是满不错的:
- Linux 内置了 nv 驱动:xserver-xorg-video-nv 。对 2D 支持尚可,3D 则是完全的不支持
- nVidia 官方曾经发布过开源的驱动 nvidia-glx 但不久就宣布不再支持。现在 nVidia 提供非开源的 Linux 驱动,在官网提供下载链接: http://www.nvidia.com/object/unix.html
- 因为 nVidia 官方的驱动和 Linux 操作系统的开放版权向背,各个 Linux 发行版都没有将 nVidia 官方的驱动集成到发行版中,造成用户安装 Linux 不能像 Windows 那样下载拆包即装的硬件驱动,只能使用功能较弱的内置驱动。
为了发挥显卡的最大功效,使用 3D 桌面或者运行 Google Earth 之类软件,我是这样安装 nVidia 驱动的:
- 首先在 Linux 中要安装 gcc,g++ 等软件开发环境,因为编译硬件驱动需要。
- 下载 nVidia 驱动。见官方驱动下载网页:http://www.nvidia.com/object/unix.html
- 启动 Linux 到文本控制台。如果进入了 X Window,需要杀掉 X,进入控制台界面。
- 运行从 nVidia 下载的软件包,按照界面一步一步操作,即可编译出内核模组和 Xorg 的设备驱动
- 编辑 /etc/X11/xorg.conf 设置: Driver “nvidia”
- 如果 Linux 升级?需要重新执行上面的步骤。
是不是太繁琐了?谁让你频繁升级呢? :-D
好消息是 Nouveau 来了,你看其中有字母 n 和 v,猜出来了么?这是 nVidia 在 Linux 下新的开源驱动名称。Nouveau 是通过针对 nVidia 显卡驱动反向工程,实现的 nVidia 开源显卡驱动,目标是提供完全的 3D 驱动支持。较 Linux 之前提供的 nv 驱动大大的前进了,甚至有一天会盖过官方的驱动。
阅读全部内容 »
Debian 文件偷换
7月9日
Debian “文件偷换”?在我们对开源软件定制的时候,用到了很多“偷换”的技术实现 Linux 的定制。当然群英汇大部分应用属于彻底的定制开发,采用软件包重新发布的形式提供服务。但是也有少部分的软件,例如 Apache2,PHP5,shorewall,只是对这些软件包自身的配置文件进行定制修改,这时如果采用软件包重新发布就显得非常笨拙和多此一举。采用配置文件“偷换”,起到事半功倍的效果。
为什么要文件“偷换”,而不是“光明正大”的覆盖呢?
- Debian 会检查文件包的文件冲突,不允许两个不同的软件包(A 和 B)安装相同的文件。
如果新安装的软件包(B)提供的文件已经由其它的软件包(A)安装过了,则拒绝安装新的软件包(B)。 - 如果新的软件包(B)在 POSTINST脚本(安装后自动执行的脚本)中,以拷贝文件的方式覆盖其它软件包(A)提供的文件,当然是可以的。但是,如果软件包A 有了新的版本,升级软件包A,会导致软件包B的定制文件被软件包A新的文件所覆盖。
Debian 本身提供的 dpkg-divert 提供了光明正大的文件“偷换”功能:
- 软件包 A 安装,配置文件保存在 /etc/a/file 中。
- 软件包 B 安装,执行 dpkg-divert 命令,声明将原来 /etc/a/file 移动到其它位置 /etc/other/place
- 软件包 B 自己的配置文件 /etc/b/file 链接到 /etc/a/file
- 软件包 A 升级的时候,会发现自己的配置文件 /etc/a/file 被指定到新位置 /etc/other/place,会将新的配置文件保存到 /etc/other/place 中。
Debian 文件偷换有两个常见的模式。
- 模式1:文件链接方式:
- 软件包 A 提供配置文件 /etc/file
- 软件包 B 提供配置文件 /etc/file.ossxp
- 软件包 B 的 postinst 脚本执行 dpkg-divert
- 将 /etc/file 重命名为 /etc/file.ossxp-orig
- 将 /etc/file.ossxp 链接为 /etc/file
- 模式2:文件移动方式
- 软件包 A 提供配置文件 /etc/fileA
- 软件包 B 提供配置文件 /etc/fileB。注意该配置文件不能是 /etc/fileA(第三模式)。
- 软件包 B 的 POSTINST 脚本执行 dpkg-divert,将 /etc/fileA 移动到 /usr/share/B/etc-fileA 中
在之前的一篇博客《群英汇部分应用的 /etc/init.d/ 下脚本名称改变》中曾经提到用 Debian Config Package 软件 和 CDBS 脚本,可以非常简单的实现上述两种文件偷换模式。而且根本无须编程,只是修改配置而已。
但是简单是有代价的。我们被限制在这两种“文件偷换”的模式中,而这两种模式都只在特定的场合可行,也就是说在特定情况下,都有副作用。当我们需要第三种模式的时候,就无法实现了,需要在彻底了解文件偷换机制后,脱离 CDBS ,手工编程实现。这两种模式有什么问题,以及怎么实现第三条道路呢?
阅读全部内容 »
logcheck, fail2ban 的副作用
6月28日
今天客户遇到的问题,让我们看到了 logcheck与 fail2ban 的副作用,采取适当的配置,可以减少副作用的发生。
logcheck 工具周期性(每个小时)读取系统日志,检查日志中可能的安全风险,并将相关信息发送给管理员。fail2ban 也是检查相应的日志文件,检查服务滥用情况(如暴力口令破解),并自动采取相关措施(针对IP地址暂停服务)。
今天客户的机器发生CPU占用过高的情况,经过检查发现(虽然不是直接原因) logcheck 和 fail2ban 导致了CPU高占用率。
- 客户的服务器还提供用户SSH登录和执行运算等工作
- 有一个用户写的程序,频繁的发送日志,在一天之内,就在 /var/log/messages 中写了 12G 的数据,而且还在不停的写
- logcheck 和 fail2ban 等日志检查程序,在处理如此之大的日志文件时,造成 CPU 占用过高
- 此外,还(曾经)出现内存耗尽的情况(总共64G物理内存)
停止 fail2ban 服务进程,杀掉正在执行的 logcheck 进程,CPU 占用量降为正常水平。
最根本的是用户自己的应用不要频繁的发送日志,后台进程运行将 debug 信息输出到空设备(/dev/null)。还有,为了防止类似情况的发生,还要解决 logchec 和 fail2ban 因庞大日志导致的性能降低问题:
- logcheck 只跟踪 /var/log/auth.log 日志,不要跟踪 /var/log/syslog 和其它有可能因为意外导致奇大无比的日志
编辑 /etc/logcheck/logcheck.logfiles 文件,设定跟踪的日志文件 - fail2ban,关闭跟踪 /var/log/messages 文件的事件。当然最好修改相关应用,日志存放在独立的文件而非 /var/log/messages 中。
Apt 级联缓存以及 apt-cacher-ng 的一个 Bug
4月13日
今天在配置 APT 级联代理时遇到了麻烦,最终定位了 apt-cacher-ng 的一个 Bug。关于群英汇是如何使用 apt 代理服务器有效的进行软件升级管理以及级联代理应该如何设置,本文做了简要的描述。
Linux下C语言的调试
4月5日
调试是每个程序员都会面临的问题. 如何提高程序员的调试效率, 更好更快地定位程序中的问题从而加快程序开发的进度, 是大家共同面对的问题. 可能Windows用户顺口就会说出:用VC呗 :-) , 它提供了设置断点, 单步跟踪等的图形界面, 使调试起来直观易用. 但Linux用户可能要生闷气了 O:-) : 难道我们Linux程序员就只能使用原始的调试方法, 在代码中加入printf信息吗?难道Linux下就没有好的C语言调试工具吗?
当然不是了. GNU早就组织开发了一套C语言编译器(Gcc)和调试工具(Gdb). Gdb虽然没有图形化的友好界面, 但是它强大的功能也足以与微软的VC工具相媲美, 给Linux程序员带来了福音. 下面通过一个简单的例子, 演示一下Gdb的使用流程:
群英汇部分应用的 /etc/init.d/ 下脚本名称改变
3月9日
更新:2010/7/10日,改进了部分系统定制包的打包机制,/etc/init.d/ 下的脚本恢复原来的名字。可以参考博客《Debian 文件偷换》。
群英汇最近对 ossxp-ntp, ossxp-apache2, ossxp-secure-fw-shorewall 作了升级,升级后,可能会感到不适应。
- 原来在 /etc/init.d 下的脚本是: /etc/init.d/ntp, /etc/init.d/apache2, /etc/init.d/shorewall
- 此次修改之后,脚本改为:/etc/init.d/ossxp-ntp, /etc/init.d/ossxp-apache2, /etc/init.d/ossxp-secure-fw-shorewall
这是为什么呢?
Debian 最新版本的 sysv-rc 包,提供了对 /etc/init.d/ 下脚本启动优化的功能,会根据启动脚本的对服务的依赖关系,自动建立启动顺序,而不是像以前那样完全凭借软件包维护者手工设定序号确定服务加载顺序。
让服务的加载更加合理,让启动的速度更快。
可 sysv-rc 包和群英汇调整 /etc/init.d/ 下脚本名称有什么关系呢?

最新评论