2006-10
21

前面介绍cygwin下安装sshd时简单地提到了ssh的公钥认证。 下面将这种认证方式详细地解释一下。

阅读全文 »
2006-10
20

查看myprog(二进制文件)依赖的库文件

ldd myprog

查看myprog的符号表

nm myprog

删除myprog中的符号,减小文件大小

strip myprog

myprog的详细信息

readelf -a myprog

另外这篇文章可以在调试时作为参考。


2006-10
14

最近在用 perl 写一个Linux下的多进程守护进程,因此研究了一下Linux下的进程相关的知识。 现将心得总结一下。主要是关于进程创建和回收。

阅读全文 »
2006-10
12

前面这篇文章简单地阐述了用Perl创建守护进程(daemon)的方法。 实际上,创建一个多进程的守护进程需要注意很多事情。

阅读全文 »
2006-10
08

sshd服务是一种安全连接,它能让你访问服务器上的命令行界面。Windows本身没有提供该服务,所以我们可以通过 cygwin 来进行安装。

阅读全文 »
2006-09
28

如何在Linux下创建这样一个程序,执行之后返回shell,但程序本身驻留在内存之中继续执行?其实很简单,创建一个子进程,然后父进程结束即可。例如下面的Perl程序:

#!/usr/bin/perl
exit if fork();       # 创建子进程,然后父进程退出
while (1) { sleep 1; }       # 测试用死循环

不过需要考虑到一点,守护进程通常在系统启动时以root身份启动,但是由于安全问题,通常并不以root身份运行。这一点使用perl如何实现呢?可以使用下面的 sudo 函数。

sub sudo {
    my ($user, $group) = @_;
    my $uid = (getpwnam($user))[2];
    my $gid = (getgrnam($group))[2];
    ($(, $)) = ($gid, "$gid $gid");
    ($<, $>) = ($uid, $uid);
}

所以,一个基本的守护程序应当这样写:(sudo函数代码省略)

#!/usr/bin/perl
&sudo("myuser", "mygroup");     # myuser、mygroup为启动守护进程的用户和组
exit if fork();
while (1) { sleep 1; }

2006-09
28
信号动作解释
SIGHUP1终端线路挂断
SIGINT2Term键盘输入的中断命令,从终端输入 Ctrl-C 时发生
SIGQUIT3Core键盘输入的退出命令
SIGILL4Core错误指令
SIGABRT6Coreabort(3)发出的中止信号
SIGFPE8Core浮点数异常
SIGKILL9TermKILL信号
SIGSEGV11Core非法内存访问
SIGPIPE13Term管道断开
SIGALRM14Termalarm(2)发出的中止信号
SIGTERM15Term强制中止信号
SIGUSR130,10,16Term用户自定义信号1
SIGUSR231,12,17Term用户自定义信号2
SIGCHLD20,17,18Ign子进程中止信号
SIGCONT19,18,25Cont继续执行一个停止的进程
SIGSTOP17,19,23Stop非终端来的停止信号
SIGTSTP18,20,24Stop终端来的停止信号
SIGTTIN21,21,26Stop后台进程读终端
SIGTTOU22,22,27Stop后台进程写终端

常用的包括 SIGHUP(服务进程重起)、SIGKILL(进程结束)等。


2006-09
23

下载并安装 httpd 2.2。

$ tar xjvf httpd-2.2.3.tar.bz2
$ cd httpd-2.2.3/
$ ./configure --enable-rewrite --enable-so
$ make
$ sudo make install

下载并安装 mysql-3.23

$ sudo tar xzvf mysql-3.23.58-pc-linux-i686.tar.gz -C /usr/local/mysql
$ sudo groupadd mysql
$ sudo useradd -d /usr/sbin -s /bin/false -g mysql mysql
$ sudo chown -R mysql.mysql /usr/local/mysql
$ cd  /usr/local/mysql
$ sudo ./scripts/mysql_install_db
$ sudo cp support-files/mysql.server /etc/init.d/mysql
$ /etc/init.d/mysqld start

下载并安装 php 5.1.6。

$ sudo apt-get install flex bison libxml2-dev
$ tar xjvf php-5.1.6.tar.bz2
$ cd php-5.1.6/
$ ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-gd
                  --with-gettext --with-mysql --with-zlib-dir=/usr/lib 
                  --with-mysql=/usr/local/mysql

2006-09
22

在 /boot/grub/menu.lst 的内核命令后加上 vga=nnn (nnn为整数)参数可以使用高分辨率的命令行界面。其值如下。

640x480800x6001024x7681280x1024
8bit769771773775
15bit784787790793
16bit785788791794
24bit786789792795

2006-09
22

我们知道,在KDE中可以通过窗口管理器方便地将窗口设置为总在最前、设置出现在所有工作区等, 但是Ubuntu 6.06的Gnome中无法做到这一点。Gnome所用的窗口管理器MetaCity认为这些不是窗口管理器的任务, 因此没有实现这些功能。好在Gnome的一名开发者为我们开发了 Devil's Pie 这个程序,它能够根据预先设定的动作自动控制Gnome中的窗口。

阅读全文 »