linux的strace命令(详解)

 本文详细讲述linux下的strace命令的用法。


strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用。
  strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。
  下面记录几个常用 option .
  1 -f -F选项告诉strace同时跟踪fork和vfork出来的进程
  2 -o xxx.txt 输出到某个文件。
  3 -e execve 只记录 execve 这类系统调用
  —————————————————
  进程无法启动,软件运行速度突然变慢,程序的”SegmentFault”等等都是让每个Unix系统用户头痛的问题,
  本文通过三个实际案例演示如何使用truss、strace和ltrace这三个常用的调试工具来快速诊断软件的”疑难杂症”。
  
  
  truss和strace用来跟踪一个进程的系统调用或信号产生的情况,而 ltrace用来跟踪进程调用库函数的情况。truss是早期为System V R4开发的调试程序,包括Aix、FreeBSD在内的大部分Unix系统都自带了这个工具;
  而strace最初是为SunOS系统编写的,ltrace最早出现在GNU/DebianLinux中。
  这两个工具现在也已被移植到了大部分Unix系统中,大多数Linux发行版都自带了strace和ltrace,而FreeBSD也可通过Ports安装它们。
  
  你不仅可以从命令行调试一个新开始的程序,也可以把truss、strace或ltrace绑定到一个已有的PID上来调试一个正在运行的程序。三个调试工具的基本使用方法大体相同,下面仅介绍三者共有,而且是最常用的三个命令行参数:
  
  -f :除了跟踪当前进程外,还跟踪其子进程。
  -o file :将输出信息写到文件file中,而不是显示到标准错误输出(stderr)。
  -p pid :绑定到一个由pid对应的正在运行的进程。此参数常用来调试后台进程。
  
   使用上述三个参数基本上就可以完成大多数调试任务了,下面举几个命令行例子:
  truss -o ls.truss ls -al: 跟踪ls -al的运行,将输出信息写到文件/tmp/ls.truss中。
  strace -f -o vim.strace vim: 跟踪vim及其子进程的运行,将输出信息写到文件vim.strace。
  ltrace -p 234: 跟踪一个pid为234的已经在运行的进程。
  
   三个调试工具的输出结果格式也很相似,以strace为例:
  
  brk(0) = 0×8062aa8
  brk(0×8063000) = 0×8063000
  mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0×92f) = 0×40016000
  
  每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。 truss、strace和ltrace的工作原理大同小异,都是使用ptrace系统调用跟踪调试运行中的进程,详细原理不在本文讨论范围内,有兴趣可以参考它们的源代码。
  举两个实例演示如何利用这三个调试工具诊断软件的”疑难杂症”:
  
  案例一:运行clint出现Segment Fault错误
  
  操作系统:FreeBSD-5.2.1-release
  clint是一个C++静态源代码分析工具,通过Ports安装好之后,运行:
  
  # clint foo.cpp
  Segmentation fault (core dumped)
   在Unix系统中遇见”Segmentation Fault”就像在MS Windows中弹出”非法操作”对话框一样令人讨厌。OK,我们用truss给clint”把把脉”:
  
  # truss -f -o clint.truss clint
  Segmentation fault (core dumped)
  # tail clint.truss
   739: read(0×6,0×806f000,0×1000) = 4096 (0×1000)
   739: fstat(6,0xbfbfe4d0) = 0 (0×0)
   739: fcntl(0×6,0×3,0×0) = 4 (0×4)
   739: fcntl(0×6,0×4,0×0) = 0 (0×0)
   739: close(6) = 0 (0×0)
   739: stat(“/root/.clint/plugins”,0xbfbfe680) ERR#2 ‘No such file or directory’
  SIGNAL 11
  SIGNAL 11
  Process stopped because of: 16
  process exit, rval = 139
  我们用truss跟踪clint的系统调用执行情况,并把结果输出到文件clint.truss,然后用tail查看最后几行。
   注意看clint执行的最后一条系统调用(倒数第五行):stat(“/root/.clint/plugins”,0xbfbfe680) ERR#2 ‘No such file or directory’,问题就出在这里:clint找不到目录”/root/.clint/plugins”,从而引发了段错误。怎样解决?很简单: mkdir -p /root/.clint/plugins,不过这次运行clint还是会”Segmentation Fault”9。继续用truss跟踪,发现clint还需要这个目录”/root/.clint/plugins/python”,建好这个目录后 clint终于能够正常运行了。
  
  案例二:vim启动速度明显变慢
  
  操作系统:FreeBSD-5.2.1-release
   vim版本为6.2.154,从命令行运行vim后,要等待近半分钟才能进入编辑界面,而且没有任何错误输出。仔细检查了.vimrc和所有的vim脚 本都没有错误配置,在网上也找不到类似问题的解决办法,难不成要hacking source code?没有必要,用truss就能找到问题所在:
  
  # truss -f -D -o vim.truss vim
  
  这里-D参数的作用是:在每行输出前加上相对时间戳,即每执行一条系统调用所耗费的时间。我们只要关注哪些系统调用耗费的时间比较长就可以了,用less仔细查看输出文件vim.truss,很快就找到了疑点:
  
  735: 0.000021511 socket(0×2,0×1,0×0) = 4 (0×4)
  735: 0.000014248 setsockopt(0×4,0×6,0×1,0xbfbfe3c8,0×4) = 0 (0×0)
  735: 0.000013688 setsockopt(0×4,0xffff,0×8,0xbfbfe2ec,0×4) = 0 (0×0)
  735: 0.000203657 connect(0×4,{ AF_INET 10.57.18.27:6000 },16) ERR#61 ‘Connection refused’
  735: 0.000017042 close(4) = 0 (0×0)
  735: 1.009366553 nanosleep(0xbfbfe468,0xbfbfe460) = 0 (0×0)
  735: 0.000019556 socket(0×2,0×1,0×0) = 4 (0×4)
  735: 0.000013409 setsockopt(0×4,0×6,0×1,0xbfbfe3c8,0×4) = 0 (0×0)
  735: 0.000013130 setsockopt(0×4,0xffff,0×8,0xbfbfe2ec,0×4) = 0 (0×0)
  735: 0.000272102 connect(0×4,{ AF_INET 10.57.18.27:6000 },16) ERR#61 ‘Connection refused’
  735: 0.000015924 close(4) = 0 (0×0)
  735: 1.009338338 nanosleep(0xbfbfe468,0xbfbfe460) = 0 (0×0)
  
   vim试图连接10.57.18.27这台主机的6000端口(第四行的connect()),连接失败后,睡眠一秒钟继续重试(第6行的 nanosleep())。以上片断循环出现了十几次,每次都要耗费一秒多钟的时间,这就是vim明显变慢的原因。可是,你肯定会纳闷:”vim怎么会无 缘无故连接其它计算机的6000端口呢?”。问得好,那么请你回想一下6000是什么服务的端口?没错,就是X Server。看来vim是要把输出定向到一个远程X Server,那么Shell中肯定定义了DISPLAY变量,查看.cshrc,果然有这么一行:setenv DISPLAY ${REMOTEHOST}:0,把它注释掉,再重新登录,问题就解决了。
  
  
  案例三:用调试工具掌握软件的工作原理
  
  操作系统:Red Hat Linux 9.0
   用调试工具实时跟踪软件的运行情况不仅是诊断软件”疑难杂症”的有效的手段,也可帮助我们理清软件的”脉络”,即快速掌握软件的运行流程和工作原理,不 失为一种学习源代码的辅助方法。下面这个案例展现了如何使用strace通过跟踪别的软件来”触发灵感”,从而解决软件开发中的难题的。
  大家都知道,在进程内打开一个文件,都有唯一一个文件描述符(fd:file descriptor)与这个文件对应。而本人在开发一个软件过程中遇到这样一个问题:
   已知一个fd,如何获取这个fd所对应文件的完整路径?不管是Linux、FreeBSD或是其它Unix系统都没有提供这样的API,怎么办呢?我们 换个角度思考:Unix下有没有什么软件可以获取进程打开了哪些文件?如果你经验足够丰富,很容易想到lsof,使用它既可以知道进程打开了哪些文件,也 可以了解一个文件被哪个进程打开。好,我们用一个小程序来试验一下lsof,看它是如何获取进程打开了哪些文件。lsof: 显示进程打开的文件。
  
  /* testlsof.c */
  #include #include #include #include #include
  int main(void)
  {
   open(“/tmp/foo”, O_CREAT|O_RDONLY); /* 打开文件/tmp/foo */
   sleep(1200); /* 睡眠1200秒,以便进行后续操作 */
   return 0;
  }
  
  将testlsof放入后台运行,其pid为3125。命令lsof -p 3125查看进程3125打开了哪些文件,我们用strace跟踪lsof的运行,输出结果保存在lsof.strace中:
  
  # gcc testlsof.c -o testlsof
  # ./testlsof &
  [1] 3125
  # strace -o lsof.strace lsof -p 3125
  
  我们以”/tmp/foo”为关键字搜索输出文件lsof.strace,结果只有一条:
  
  
  # grep ‘/tmp/foo’ lsof.strace
  readlink(“/proc/3125/fd/3″, “/tmp/foo”, 4096) = 8
  
   原来lsof巧妙的利用了/proc/nnnn/fd/目录(nnnn为pid):Linux内核会为每一个进程在/proc/建立一个以其pid为名 的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd。目标离我们很近了。好,我们到/proc/3125/fd/看个究 竟:
  
  # cd /proc/3125/fd/
  # ls -l
  total 0
  lrwx—— 1 root root 64 Nov 5 09:50 0 -> /dev/pts/0
  lrwx—— 1 root root 64 Nov 5 09:50 1 -> /dev/pts/0
  lrwx—— 1 root root 64 Nov 5 09:50 2 -> /dev/pts/0
  lr-x—— 1 root root 64 Nov 5 09:50 3 -> /tmp/foo
  # readlink /proc/3125/fd/3
  /tmp/foo
  
  答案已经很明显了:/proc/nnnn/fd/目录下的每一个fd文件都是符号链接,而此链接就指向被该进程打开的一个文件。我们只要用readlink()系统调用就可以获取某个fd对应的文件了,代码如下:
  
  
  #include #include #include #include #include #include
  int get_pathname_from_fd(int fd, char pathname[], int n)
  {
   char buf[1024];
   pid_t pid;
   bzero(buf, 1024);
   pid = getpid();
   snprintf(buf, 1024, “/proc/%i/fd/%i”, pid, fd);
   return readlink(buf, pathname, n);
  }
  int main(void)
  {
   int fd;
   char pathname[4096];
   bzero(pathname, 4096);
   fd = open(“/tmp/foo”, O_CREAT|O_RDONLY);
   get_pathname_from_fd(fd, pathname, 4096);
   printf(“fd=%d; pathname=%sn”, fd, pathname);
   return 0;
  }
  
   出于安全方面的考虑,在FreeBSD 5 之后系统默认已经不再自动装载proc文件系统,因此,要想使用truss或strace跟踪程序,你必须手工装载proc文件系统:mount -t procfs proc /proc;或者在/etc/fstab中加上一行:
  
  proc /proc procfs rw 0 0

2008年11月14日 | 归档于 Linux命令
标签:

Linux的tee命令

tee命令是非常有用的linux命令

功能说明:读取标准输入的数据,并将其内容输出成文件。

语  法:tee [-ai][--help][--version][文件...]

补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

参  数:
 -a或–append  附加到既有文件的后面,而非覆盖它. 
 -i-i或–ignore-interrupts  忽略中断信号。 
 –help  在线帮助。 
 –version  显示版本信息。

2008年11月3日 | 归档于 Linux命令
标签:

Linux的sleep命令

sleep,顾名思义,其实在linux下,sleep也是“睡觉”的意思,可以把当前执行动作延迟指定的时间。

  名称 : sleep
  
  使用权限 : 所有使用者
  
  使用方式 : sleep [--help] [--version] number[smhd]
  
  说明 : sleep 可以用来将目前动作延迟一段时间
  
  参数说明 :
  
  –help : 显示辅助讯息
  –version : 显示版本编号
  number : 时间长度,后面可接 s、m、h 或 d
  其中 s 为秒,m 为 分钟,h 为小时,d 为日数
  
  例子 :
  显示目前时间后延迟 1 分钟,之后再次显示时间 :
   date;sleep 1m;date

2008年11月3日 | 归档于 Linux命令
标签:

解决/usr/bin/ld: cannot find -lmysqlclient错误

类似/usr/bin/ld: cannot find -xxxx的错误有很多, 首先我们可以最简单的判断一下:

这类情况一般是由于缺乏某某库文件, 又或者可能是由于已存在的库问题版本不对造成的

一般都是解决的办法就是安装缺乏的devel包就可以解决, 当然还有其他的未知因素, 我们看一个实例:

我在一台装centos5.2 x86_64的系统上配置php环境, 提示这个错误

“/usr/bin/ld: cannot find -lmysqlclient”

于是我安装了

#  yum -y install mysql-devel

结果提示依旧, 我根据提示查看config.log

    /usr/bin/ld: skipping incompatible /usr/local/mysql/lib/libmysqlclient.so when searching for -lmysqlclient
    /usr/bin/ld: skipping incompatible /usr/local/mysql/lib/libmysqlclient.a when searching for -lmysqlclient
    /usr/bin/ld: cannot find -lmysqlclient

她还是去找/usr/local/mysql/lib/libmysqlclient.so, 我来把这个错的换成对了, 刚才装了mysql-devel, 那么在/usr/lib64下就多了一个mysql的目录

# cd /usr/local/mysql
# mv lib lib.bak
# ln -s /usr/lib64/mysql /usr/local/mysql/lib (给他做个软链接)

然后再次编译安装php, 一切正常!

2008年10月28日 | 归档于 web构架
标签:

CentOS 5.2编译最新内核2.6.27

编译内核首先去www.kernel.com上下载最新的kernel代码
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.tar.gz
# tar zxvf linux-2.6.27.tar.gz -C /usr/src
# cd /usr/src/linux-2.6.27
# make menuconfig
现在出现一个字符界面,主要是去掉诸如wireless等服务器根本用不着的功能。
弄完了,保存,退出。
# make (可能要很长时间)
# make modules_install
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.27-yourname (注意:目录i386是根据你的系统类型, 如果是64位系统, 那就很可能是x86_64)
# cp System.map /boot/System.map-2.6.27-yourname
# mkinitrd /boot/initrd-2.6.27-yourname.img   2.6.27
# vi /etc/grub.conf
在GRUB选择刚刚编译的内核,


<blockquote>
title CentOS (2.6.27-yourname)
        root (hd0,0)
        kernel /vmlinuz-2.6.27-yournamero root=LABEL=/
        initrd /initrd-2.6.27-yourname.img
title CentOS (2.6.18-92.1.13.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-92.1.13.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-92.1.13.el5.img</blockquote>


 


# reboot
完毕! 祝你好运

2008年10月27日 | 归档于 Linux教程
标签:

mysqladmin: 用于管理MySQL服务器的客户端

目前mysql可以说是大行其道, 而mysqladmin作为管理MySQL服务器的客户端, 使用他来管理mysql, 以及观测mysql的状态, 显得尤为有用, 本文就详述mysqladmin的使用方法


mysqladmin:用于管理MySQL服务器的客户端


mysqladmin是一个执行管理操作的客户程序。可以用它来检查服务器的配置和当前的状态,创建并删除数据库等等。


这样调用mysqladmin

shell> mysqladmin [options] command [command-options] [command [command-options]] …

mysqladmin支持下面的命令:


·         create db_name


创建一个名为db_name的新数据库。


·         debug


告诉服务器向错误日志写入调试信息。


·         drop db_name


删除名为db_nam的数据库和所有表。


·         extended-status


显示服务器状态变量及其值。


·         flush-hosts


刷新主机缓存中的所有信息。


·         flush-logs


刷新所有日志。


·         flush-privileges


重载授权表(类似reload)


·         flush-status


清除状态变量。


·         flush-tables


刷新所有表。


·         flush-threads


刷新线程缓存。


·         kill id,id,…


杀掉服务器线程。


·         old-password new-password


类似password但使用旧的(pre-4.1)密码哈希格式保存 密码。


·         password new-password


设置一个新密码。将用mysqladmin连接服务器使用的 账户的密码更改为new-password


如果new-password包含空格或其它命令解释符的特殊字符,需要用引号将它引起来。在Windows中,一定要使用双引号而不要用单引号;单引号不会从 密码中剥离出来,而是解释为密码的一部分。例如:


shell> mysqladmin password “my new password”


·         ping


检查服务器是否仍活动。如果服务器在运行mysqladmin返回状态0,如果不运行返回1。即使出现错误例如Access denied也为0,因为这说明服务器在运行但拒绝了连接,与服务器不在运行不同。


·         processlist


显示活动服务器线程的列表。类似SHOW PROCESSLIST语句的输出。如果给出了–verbose选项,输出类似SHOW FULL PROCESSLIST


·         reload


重载授权表。


·         refresh


刷新所有表并关闭和打开日志文件。


·         shutdown


停止服务器。


·         start-slave


开始从服务器上的复制。


·         status


显示短服务器状态消息。


·         stop-slave


停止从服务器上的复制。


·         variables


显示服务器系统变量及其值。


·         version


显示服务器的版本信息。


所有命令可以简化为任何唯一的前缀。例如:

shell> mysqladmin proc stat
+—-+——-+———–+—-+———+——+——-+——————+
| Id | User  | Host      | db | Command | Time | State | Info             |
+—-+——-+———–+—-+———+——+——-+——————+
| 51 | monty | localhost |    | Query   | 0    |       | show processlist |
+—-+——-+———–+—-+———+——+——-+——————+
Uptime: 1473624  Threads: 1  Questions: 39487  
Slow queries: 0  Opens: 541  Flush tables: 1  
Open tables: 19  Queries per second avg: 0.0268
 

mysqladmin status命令的结果显示下面的值:


·         Uptime


MySQL服务器已经运行的秒数。


·         Threads


活动线程(客户)的数目。


·         Questions


服务器启动以来客户的问题(查询)数目。


·         Slow queries


执行时间超过long_query_time秒的查询的数量。


·         Opens


服务器已经打开的数据库表的数量。


·         Flush tables


服务器已经执行的flush …refreshreload命令的数量。


·         Open tables


目前打开的表的数量。


·         Memory in use


mysqld代码直接分配的内存数量。只有用–with–debug=full编译了MySQL该值才显示。


·         Maximum memory used


mysqld代码直接分配的最大内存数量。只有用–with–debug=full编译了MySQL该值才显示。


如果当使用Unix套接字文件连接本地服务器时执行mysqladmin shutdownmysqladmin将等待直到服务器的进程ID文件被删除,以确保服务器正确停止。


mysqladmin支持下面的选项:


·         —help-


显示帮助消息并退出。


·         –character-sets-dir=path


字符集的安装目录。


·         –compress-C


压缩客户和服务器之间发送的所有信息(如果二者均支持压缩)。


·         –count=num-c num


迭代数目。该选项只有结合–sleep (-i)才能工作。


·         —debug[=debug_options]-# [debug_options]


写调试日志。debug_options字符串通常为‘d:t:o,file_name。 默认为‘d:t:o,/tmp/mysqladmin.trace’


·         –default-character-set=charset


使用charsetas作为默认字符集。


·         –force-f


不再为drop database命令进行确认。对于多个命令,即使出现错误也继续。


·         –host=host_name-h host_name


连接给定主机上的MySQL服务器。


·         –password[=password]-p[password]


连接服务器使用的密码。如果使用短选项形式(-p),该选项和 密码之间不能有空格。如果你在命令行中在–password-p选项后面省略 密码值,将提示你输入密码。


·         –port=port_num-P port_num


用于连接的TCP/IP端口号。


·         –protocol={TCP | SOCKET | PIPE | MEMORY}


使用的连接协议。


·         –relative-r


当带-I使用时显示当前和前面值的差别。目前,该选项只用于extended-status命令。


·         –silent-s


如果不能建立与服务器的连接则以沉默方式退出。


·         –sleep=delay-i delay


每睡眠delay秒后执行一次命令。


·         –socket=path-S path


用于连接的套接字文件。


·         –user=user_name-u user_name


当连接服务器时使用的MySQL用户名。


·         –verbose-v


冗长模式。打印出程序操作的详细信息。


·         –version-V


显示版本信息并退出。


·         –vertical-E


垂直打印输出。类似于–relative,但垂直打印输出。


·         –wait[=count]-w[count]


如果连接不能建立,等待并重试而不是放弃。如果给出一个选项值,则指示重试的次数。默认是一次。


也可以使用var_name=value选项设置下面的变量:


·         connect_timeout


连接超时之前的最大秒数。默认值为43200(12小时)


·         shutdown_timeout


等候关闭的最大秒数。默认值为3600(1小时)


也可以使用–set-variable=var_name=value-O var_name=value语法来设置变量。然而,现在不赞成该语法,并且不再使用。

2008年10月18日 | 归档于 Linux教程, web构架
标签:

关于20号微软黑屏措施的一点想法

本文系转载, 原文地址: http://www.hao32.com/blog/240.html

其实一点也不想写这个关于”微软黑屏”的日志, 但是看到搜索量如此之大, 不测试下实在心里难受.

就当是一篇垃圾日志吧, 我非写不可.

很多网友出台了关于应对这个措施的办法, 可以说是消息满天飞, 大家似乎都在紧张的等待…

我唯一想说的就是: 你不会不用盗版!! 真想骂一句

一个正版的windows xp home版本也不算贵吧, 如果是使用本本的同学相信你买本本的时候应该送了一个windows xp home吧, 正版的, 你重装系统换一个盗版的windows xp professional, 你以为professional就就真的professional了, 先反问下你自己,你够professional吗? 家庭版里哪个功能满足不了你的需求了??

不过话说回来, 从商业的角度来看, 微软真是有一手, 你不得不佩服微软的眼光是多么长远.

早期微软为了把windows打入中国市场, 采取了一种特殊的策略, 就是对盗版睁一只眼, 闭一只眼, 这样的话, 就产生了诸如 番茄花园, 深度,什么什么电脑公司ghost版等好多windows 盗版的版本, 他们对windows进行了一系列的针对中国人的美化和优化, 反而大行其道, 不过前一段时间番茄花园的累累被抓, 大家也都看到了, 不管怎么说, 先表示遗憾一下, 怎么说累累也是我的朋友. 这不能不说是微软纵容的后果!!

相比于多年以前, 中国的物价飞涨, 虽然工资涨幅大大低于cpi, 不过上千块钱的确不算是什么大事了, 也就是说, 中国人有大量的人群是可以买起windows了, 这个时候微软发狠, 虽然大大出乎多数人的意料, 但是也也势必是微软的一个有利的决策, 这么多年对盗版纵容产生的经济损失, 事实上可以从现在开始收回了, 我们不能指责微软什么, 那是他们的程序员书写的系统, 而且还挺好用的, 别人收费是理所当然的事情!

因此对于那些在网上针对微软谩骂的网友, 我其实内心是一种反感和鄙夷的!

关键是有大量的免费系统可供大家使用! 你不会用Ubuntu啊! 多好的系统, 你没有刻录机刻录关盘, 只要到Ubuntu官方网站填写个申请表, 人家免费给你邮寄! 而且这个系统做的比windows vista都玄, 你有什么理由不用!

要不就花钱购买微软正版, 别这么多废话!

2008年10月17日 | 归档于 Linux教程
标签:

linux操作系统

世界上并存着很多操作系统,其中最为著名的有windows,linux,unix等多种操作系统,而且还存在着大量不同的发行版, 本来详细讲述Linux操作系统。

Linux 是一套 Unix-like 的操作系统,是 Unix 的一种,它控制整个系统基本服务的核心程序 (kernel) 是由 Linus
带头开发出来的,「Linux」这个名称便是以「Linus’s unix」来命名,Linus 选择用「大众公有版权」
(GPL)的方式来发行这份程序,这个版权允许任何人以任何形式复制与散布 Linux 的原始程序,换句话说,Linux
实际上是「免费的」,使用者在网络上就可以抓到 Linux 的原始程序代码,随心所欲的复制与更改 Linux 的原始程序,在因特网的日渐盛行以及
Linux 开放自由的版权之下,吸引了无数计算机高手投入开发、改善 Linux 的核心程序,使得 Linux
的功能日见强大,所以今日我们可以在网络上免费下载 Linux 使用,或者花很少的一点费用就可以取得 Linux 光盘,这都是因为 Linux
是 GPL 版权的缘故。

除了核心程序以外,一个操作系统还需要其它的系统程序跟应用程序才有实用性,Linux 系统中常用的系统程序大部份是美国自由软件基金会
(Free Software Foundation) 开发出来的软件,而且也有不少机构或个人为 Linux
开发应用程序,这些程序一样大多都是自由软件,任何人都可以免费的在网络上取得,不过自行去取得这些程序再一一安装非常不便,于是有些公司或团体就会去搜
集、整合 Linux
上的程序,把「核心-系统程序-应用程序」总合起来构成一个完整的操作系统,让一般使用者可以简便的安装完整个系统,这就是所谓的「安装软件
包」(distribution),我们一般讲的 Linux 系统便是针对这些安装软件包而言,同样是 Linux
系统,却分成不同公司、机构整合出来的不同安装软件包,这就是大家常常在网络上看到 Linux 有那么多「种」的原因。

Linux 具有 Unix 系统的程序接口跟操作方式,也继承了 Unix 稳定有效率的特点。网络上安装 Linux
的主机连续运做一年以上而不曾当机、不必关机是稀松平常的事,不过 Linux 却不象一般 Unix
要负担庞大的版权费用,也不需要在专属的昂贵硬件上才可以使用;Linux 可以在一般的 i386 PC
上执行,效能又高,自然而然的接收了过去几十年来在 Unix 上累积的程序资源跟使用者,加上 GPL 的版权允许大家自由散布 Linux
的原始码,并针对自己的需求修改程序,使得 Linux 在目前已经成为非常受人欢迎的一个多人多任务、免费、稳定、效率高、可以在包括
i386、Sparc、Alpha、Mips、PPC 等众多不同计算机系统平台上执行的操作系统。

Linux支持多种硬件装置,诸如x86、Motorola 68k、Digital Alpha、Sparc、Mips、Motorola
PowerPC和ARM等等。由于程序代码公开,硬件厂商无须多付额外的版权费用,便得以替自行生产的硬件装置开发适用于Linux的驱动程序,提高产品
销售率。


体方面,如X,为窗口系统的工业标准;另外,由理察·史托曼主导的Emacs,提供窗口版和文字版的文书编辑环境,功能复杂强大,有一套完整的在线说明档
案;而众人合作开发的SpreadSheet,是窗口版的电子表格,任何熟稔Lotus
1-2-3的人,看到这样丰硕的成果,都会有莫名的感动的。当然,最为人称道的,是Linux的网络能力,不论是SLIP、PPP、NetBEUI、
DDP、X.25还是ISDN等等,Linux都有相应的软件供应;而稳定的服务器功能,适用于架设Intranet和Internet。

一般用户受益于GNU GPL和LGPL的保护,可以不同的管道取得完整的Linux,故而Linux可以是「免费的(gratis)」。相对于Unix昂贵的版权费用,Linux称得上是物美价廉。

除此以外,Linux还具有如下的特色∶

· 具备多人多任务∶这表示Linux可以在同一段时间内服务许多人各别的需求。形象一点讲,你可以一边听铁达尼号的原声CD,一边编辑文书,一边又在打印档案,还可以随时玩X版的俄罗斯方块。

· 支持多CPU∶这绝对不是NT的专利,Linux也支持这种硬件架构,代表着更快速的运算和革命性的算法即将成为时代的主流。

·
RAM保护模式∶程序(processes)之间不会互相干扰,保证系统能常久运作无误。根据许多人下载系统评量程序(benchmarks)以测试
Linux的执行效能,结果发现单单是配备486CPU的PC,效能便足堪媲美升阳(Sun)或是迪吉多的中级工作站了。

· 动态加载程序∶当程序加载RAM执行时,Linux仅将磁盘中相关的程序模块加载,有效地提升了执行的速率和RAM的管理。

· 动态连结共享程序馆∶这表示执行档的大小大量地减少,有助于节省磁盘空间。

· 支持多种档案系统∶如Minix、Xenix、System V等等著名的操作系统。将来NT的NTFS也会列入支持的。

· 看得见DOS∶这是所谓的透明化(transparency);把DOS的FAT档案系统视为特殊的远程档案系统,不需任何特别的指令便可以灵活运用,就如同一个在Linux底下存在的目录一样。

Linux的发展

近几年的发展,已使得Linux成为微软、升阳的另一大敌手。Linux挟其价格低廉、品质良好与稳定的竞争优势,正无形无影地扩散至众多以PC
为主的工作
平台上。早期因缺乏商业性应用软件,单凭学术味道浓厚的工具程序,是无法打入一般商家的主流操作系统的。然而,今日的Linux已非吴下阿蒙,KDE、
Gimp、Gnome等计划相继地开展,为X提供了更多图形接口的桌面操作环境和应用软件。

约1993年左右,Linux首先以发行软
体(distribution)的型态出现。这是一群完整的软件,包含安装程序、核心、应用软件、X、驱动程序等的软件包,经由Internet下载至磁
盘片进行安装。那时的安装程序简陋,难以成功地安装妥当,接口亲和力不足和硬件支持不良是最大的障碍。

后来出现了光驱,光盘片的传播媒体也应运而生,现今Linux厂商所制作的发行软件也都是以此为主要的发行媒介。国内常见的有Red
Hat、Slackware和Debian这三种。其中以Debian算是至今仍维持非商业型态的重量级发行软件了,FSF曾经以基金援助过其初阶段的发
展。任何人都可以从Debian的FTP站上下载整套的发行软件。当然,象Red Hat这样的商业组织,Red
Hat发行软件一样也可以从FTP站上下载,不过如果花一点小钱买光盘片的话,就可以得到额外的技术支持和有用的说明档案。

要得到这些光盘片,最简单的方法便是买有关Linux的书籍,不论中文版或是英文版的书本,书背面都会附上一片载有该公司或组织所制作的发行软件。一般书内多会有专章讲解安装和设定的过程,读者可善加利用。不同的发行软件有不同的安装机制,然而都是Linux。

对国内用户而言,最关切的莫过于Linux中文技术的发展情况了。X窗口系统已有稳定的中文版问世,各种中文输入法和中文仿真窗口也已进入成熟的阶段,相信未来会朝向应用软件中文化的层面发展,使X的操作环境符合国内用户的需求。

Linux的应用

没有商业活动,就没有Linux;没有信息自由的自觉,更不可能有Linux。

Linux除了是优良的软件开发平台之外,也是工作、家居的好伙伴。有人说∶「有了Linux,就等于有了阿拉神灯。」此言不假矣。又有人说∶「到现在还没有移植到Linux的软件,肯定是一点价值也没有的。」这话也不差呀。

Linux的发展证实了信息会愈来愈便宜的趋势;因为便宜,市场便无限扩张。商业活动也转向为以服务为导向的型态。最直接的案例便是ISP的应用。

Linux可以用来架设ISP!

Linux Journal的发行人SSC(Specialized System
Consultants)便是以Linux做为网络拨接服务平台的。要成为ISP业者,需要有连接至因特网的能力,多序列阜拨接服务(如
Cycades、Maxspeed、Gtek等公司所提供的软件系统),PPP和SLIP的服务,Usenet新闻群组(如INN),邮件递送(如
sendmail),网页服务器(如Apache),备份功能(如tar、cpio)等等的应用软件。由此观察,主要的控制成本会落在因特网的通讯租费
上,投资Linux的费用是非常低的。

本文摘录自「 Official CLE 0.8 — 中文 Linux 延伸软件包使用指南

大力发展linux软件事业,有助于我国自主软件的开发,保护国家信息安全,并且在国际竞争中赢得一点份额

关于更多linux的详情, 可以参阅: http://baike.baidu.com/view/1634.htm

2008年10月16日 | 归档于 Linux教程
标签:

Ubuntu中的快捷键

快捷键常用个人总结

最常用
win+n切换背景颜色风格
alt+tab=不用说了。
win+tab若开3D效果了切换
ctrl+alt+backspace=相当于强制注销
ctrl+alt+del=调出关机菜单
ctrl+alt+l=锁定桌面

ctrl+alt+d=最小化gnome所有窗口
ctrl+alt+f2=linux终端用户(alt + f7返回xwindows,alt+ <- 或-> 进行终端切换)
ctrl+alt+ <- 或-> =切换桌面

终端快捷键
tab=补全
ctrl+a=开始位置
ctrl+e=最后位置
ctrl+k=删除此处至末尾所有内容
ctrl+u=删除此处至开始所有内容
ctrl+d=删除当前字母

阅读全文…

2008年10月14日 | 归档于 Ubuntu
标签: ,

ubuntu安装GCC

gcc在ubuntu下的正确安装过程

整个过程我自己装过,可以的,具体参考了几个网页,有的忘记了,其中一个是 http://wiki.ubuntu.org.cn/Qref/Gutsy

确保系统已联入互联网

打开终端,“应用程序 – 附件 – 终端”

修改并更新你的更新服务器列表,输入命令 sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup

sudo gedit /etc/apt/sources.list 注意:下面在打开的窗口中,把你看到的内容全部删掉,访问我们推荐的源7.10页面。在那里里请选择一组对于你来说速度最快的更新服务器列表。粘贴到你所看到的窗口中。

对电信网通用户,推荐将欧洲官方源服务器粘贴到最后

Archive.ubuntu.com更新服务器
deb http://archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-proposed main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ gutsy-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ gutsy-security main
restricted universe multiverse deb-src
http://archive.ubuntu.com/ubuntu/ gutsy-updates main restricted
universe multiverse deb-src http://archive.ubuntu.com/ubuntu/
gutsy-proposed main restricted universe multiverse deb-src
http://archive.ubuntu.com/ubuntu/ gutsy-backports main restricted
universe multiverse

推荐大家加入ubuntu-cn源(网通访问偏慢)
deb http://archive.ubuntu.org.cn/ubuntu-cn/ gutsy main restricted universe multiverse

4.刷新软件包列表
sudo apt-get update

装基本开发环境:
sudo apt-get install build-essential gcc make

装编辑器:
sudo apt-get install vim emacs

装基本开发库
sudo apt-get install libc6 libc6-dev

装manpage, 装了之后可以直接用 man printf 查阅printf的详细用法

sudo apt-get install manpages-dev

我按照这个步骤,装成功了,并运行了一个小程序,helloworld ,可以的。

后面的安装都是在线的,所以一定要联网,大概总共有60MB左右吧,还没有全部升级软件,那样更大。

2008年10月14日 | 归档于 Ubuntu
标签: