精华内容
下载资源
问答
  • 过滤器是一个程序,它从标准输入读取数据,在...下面是 Linux 上的一些有用的文件或者文本过滤器。 1、 awk 命令 awk 是一个卓越的模式扫描和处理语言,它可被用于在 Linux 下构造有用的过滤器。你可以通过阅读我

    过滤器是一个程序,它从标准输入读取数据,在数据上执行操作,然后把结果写到标准输出。

    因此,它可以用来以强大的方式处理信息,例如重新结构化输出以生成有用的报告,修改文件里面的文本,以及其他很多系统管理任务。

    Linux 上 12 个高效的文本过滤命令

    下面是 Linux 上的一些有用的文件或者文本过滤器。

    1、 awk 命令

    awk 是一个卓越的模式扫描和处理语言,它可被用于在 Linux 下构造有用的过滤器。你可以通过阅读我们的 awk 系列 1 到 13 部分 来开始使用它。

    另外,也可以通过阅读 awk 的 man 手册来获取更多的信息和使用选项。

    $ man awk
    
    2、 sed 命令

    sed 是一款过滤和转换文本的强大的流编辑器。我们已经写了两篇关于 sed 的有用的文章,你可以通过这儿来了解:

    sed 的 man 手册已经添加控制选项和说明:

    $ man sed
    
    3、 grep、 egrep、 fgrep、 rgrep 命令行

    这些过滤器输出匹配指定模式的行。它们从一个文件或者标准输入读取行,并且输出所有匹配的行,默认输出到标准输出。

    注意:主程序是 grep,这些变体与使用特定的选项的 grep 相同,如下所示(为了向后兼容性,它们依旧在使用):

    $ egrep = grep -E
    $ fgrep = grep -F
    $ rgrep = grep -r  
    

    下面是一些基本的 grep 命令:

    tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
    aaronkilik:x:1001:1001::/home/aaronkilik:
    tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
    aaronkilik:x:1001:1001::/home/aaronkilik:
    

    Linux 下的 grep、 egrep 和 fgrep 的差异?中,你可以了解更多。

    4、 head 命令

    head 用于显示文件前面的部分,默认情况下它输出前 10 行。你可以使用 -n 标志来指定显示的行数:

    tecmint@TecMint ~ $ head /var/log/auth.log  
    Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
    Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
    Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
    Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
    Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
    Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
    Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
    Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
    Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
    Jan  2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)
    tecmint@TecMint ~ $ head  -n 5 /var/log/auth.log  
    Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
    Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
    Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
    Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
    Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
    

    学习如何 使用带有 tail 和 cat 命令的 head 命令,以便在 Linux 下更有效的使用。

    5、 tail 命令

    tail 输出一个文件的后面的部分(默认 10 行)。使用 -n 选项来指定显示的行数。

    下面的命令将会输出指定文件的最后 5 行:

    tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
    Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
    

    另外,tail 有一个特殊的选项 -f ,可以 实时查看一个文件的变化 (尤其是日志文件)。

    下面的命令将会使你能够监控指定文件的变化:

    tecmint@TecMint ~ $ tail -f /var/log/auth.log
    Jan  6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
    Jan  6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
    Jan  6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
    Jan  6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
    Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
    Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
    Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
    

    阅读 tail 的 man 手册,获取使用选项和说明的完整内容:

    $ man tail
    
    6、 sort 命令

    sort 用于将文本文件或标准输入的行进行排序。

    下面是一个名为 domain.list 的文件的内容:

    tecmint@TecMint ~ $ cat domains.list
    tecmint.com
    tecmint.com
    news.tecmint.com
    news.tecmint.com
    linuxsay.com
    linuxsay.com
    windowsmint.com
    windowsmint.com
    

    你可以像这样运行一个简单的 sort 命令 来排序文件内容:

    tecmint@TecMint ~ $ sort domains.list
    linuxsay.com
    linuxsay.com
    news.tecmint.com
    news.tecmint.com
    tecmint.com
    tecmint.com
    windowsmint.com
    windowsmint.com
    

    你可以有多种方式来使用 sort 命令,请参阅以下一些关于 sort 命令的有用的文章。

    7、 uniq 命令

    uniq 命令用于报告或者忽略重复行,它从标准输入过滤行,并且把结果写到标准输出。

    在对一个输入流运行 sort 之后,你可以使用 uniq 删除重复行,如下例所示。

    为了显示行出现的数目,使用 -c 选项,要在对比时忽略大小写的差异,使用 -i 选项:

    tecmint@TecMint ~ $ cat domains.list
    tecmint.com
    tecmint.com
    news.tecmint.com
    news.tecmint.com
    linuxsay.com
    linuxsay.com
    windowsmint.com
    tecmint@TecMint ~ $ sort domains.list | uniq -c 
    2 linuxsay.com
    2 news.tecmint.com
    2 tecmint.com
    1 windowsmint.com 
    

    通过阅读 uniq 的 man 手册来获取进一步的使用信息和选项:

    $ man uniq
    
    8、 fmt 命令行

    fmt 是一款简单的优化的文本格式化器,它重新格式化指定文件的段落,并且打印结果到标准输出。

    以下是从文件 domain-list.txt 提取的内容:

    1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com
    

    为了把上面的内容重新格式化成一个标准的清单,运行下面的命令,使用 -w 选项定义最大行宽度:

    tecmint@TecMint ~ $ cat domain-list.txt 
    1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com
    tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
    1.tecmint.com 
    2.news.tecmint.com 
    3.linuxsay.com 
    4.windowsmint.com
    
    9、 pr 命令

    pr 命令转换文本文件或者标准输入之后打印出来。例如在 Debian 系统上,你可以像下面这样显示所有的安装包:

    $ dpkg -l
    

    为了将要打印的列表在页面和列中组织好,使用以下命令。

    tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20  
    2017-01-06 13:19                                                  Page 1
    Desired=Unknown/Install ii  adduser             ii  apg
    | Status=Not/Inst/Conf- ii  adwaita-icon-theme  ii  app-install-data
    |/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
    ||/ Name                ii  alsa-base               ii  apt
    +++-=================== ii  alsa-utils            ii  apt-clone
    ii  accountsservice     ii  anacron               ii  apt-transport-https
    ii  acl                 ii  apache2               ii  apt-utils
    ii  acpi-support        ii  apache2-bin           ii  apt-xapian-index
    ii  acpid               ii  apache2-data          ii  aptdaemon
    ii  add-apt-key         ii  apache2-utils         ii  aptdaemon-data
    2017-01-06 13:19                                                  Page 2
    ii  aptitude            ii  avahi-daemon          ii  bind9-host
    ii  aptitude-common     ii  avahi-utils           ii  binfmt-support
    ii  apturl              ii  aview                   ii  binutils
    ii  apturl-common       ii  banshee               ii  bison
    ii  archdetect-deb      ii  baobab                ii  blt
    ii  aspell              ii  base-files            ii  blueberry
    ii  aspell-en           ii  base-passwd           ii  bluetooth
    ii  at-spi2-core        ii  bash                    ii  bluez
    ii  attr                ii  bash-completion     ii  bluez-cups
    ii  avahi-autoipd       ii  bc                      ii  bluez-obexd
    .....
    

    其中,使用的标志如下:

    • --column 定义在输出中创建的列数。
    • -l 指定页面的长度(默认是 66 行)。
    10、 tr 命令行

    这个命令从标准输入转换或者删除字符,然后输出结果到标准输出。

    使用 tr 的语法如下:

    $ tr options set1 set2
    

    看一下下面的例子,在第一个命令,set1( [:upper:] ) 代表指定输入字符的大小写(都是大写字符)。 set2([:lower:]) 代表期望结果字符的大小写。第二个例子意思相似,转义字符 /n 表示在新的一行打印输出:

    tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
    www.tecmint.com
    tecmint@TecMint ~ $ echo "news.tecmint.com" | tr [:lower:] [:upper:]
    NEWS.TECMINT.COM
    
    11、 more 命令

    more 命令是一个有用的文件过滤器,最初为查看证书而建。它一页页显示文件内容,用户可以通过按回车来显示更多的信息。

    你可以像这样使用它来显示大文件:

    tecmint@TecMint ~ $ dmesg | more
    [    0.000000] Initializing cgroup subsys cpuset
    [    0.000000] Initializing cgroup subsys cpu
    [    0.000000] Initializing cgroup subsys cpuacct
    [    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
    4.4.6)
    [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
    [    0.000000] KERNEL supported cpus:
    [    0.000000]   Intel GenuineIntel
    [    0.000000]   AMD AuthenticAMD
    [    0.000000]   Centaur CentaurHauls
    [    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
    [    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
    [    0.000000] x86/fpu: Using 'eager' FPU context switches.
    [    0.000000] e820: BIOS-provided physical RAM map:
    [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
    [    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
    [    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
    [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
    [    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
    [    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
    --More--
    
    12、 less 命令

    less 是和上面的 more 命令相反的一个命令,但是它提供了额外的特性,而且对于大文件,它会更快些。

    按照 more 命令相同的方式使用它:

    tecmint@TecMint ~ $ dmesg | less
    [    0.000000] Initializing cgroup subsys cpuset
    [    0.000000] Initializing cgroup subsys cpu
    [    0.000000] Initializing cgroup subsys cpuacct
    [    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
    4.4.6)
    [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
    [    0.000000] KERNEL supported cpus:
    [    0.000000]   Intel GenuineIntel
    [    0.000000]   AMD AuthenticAMD
    [    0.000000]   Centaur CentaurHauls
    [    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
    [    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
    [    0.000000] x86/fpu: Using 'eager' FPU context switches.
    [    0.000000] e820: BIOS-provided physical RAM map:
    [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
    [    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
    [    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
    [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
    [    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
    [    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
    :
    

    学习为什么 Linux 下进行有效的文件浏览, ‘less’ 比 ‘more’ 命令更快

    基本上就这些了,如果你还知道其他本文没有提供的 Linux 下有用的文本过滤命令行工具,可以在下面的评论部分通知我们。


    via: http://www.tecmint.com/linux-file-operations-commands/

    作者:Aaron Kili 译者:yangmingming 校对:jasminepeng

    本文由 LCTT 原创编译,Linux中国 荣誉推出



    本文转载自:http://www.linuxprobe.com/linux-filter-cmd.html

    免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/


    展开全文
  • eBPF用于Linux防火墙数据包过滤

    千次阅读 2019-11-03 17:25:21
    自基于Netfilter的iptables取代ipchains之后,Linux防火墙技术貌似一直停留在iptables,虽然近年来nftables被宣称有取代iptables之势,但事实上并无起色。 无论是晚期ipchains,还是iptables,或者nftables,其底层...

    自基于Netfilter的iptables取代ipchains之后,Linux防火墙技术貌似一直停留在iptables,虽然近年来nftables被宣称有取代iptables之势,但事实上并无起色。

    无论是晚期ipchains,还是iptables,或者nftables,其底层基础均是Netfilter,一个精心设计的五点HOOKs框架,在软件意义上,这个设计非常棒,但是涉及到单机性能问题,总是退让三分。

    这让人不得开心颜,于是很多人花大量的时间精力投入到了防火墙优化中,当然,包括我自己在内。


    如今,新一代的Linux防火墙技术出现了!是的,它就是基于eBPF的bpfilter!

    eBPF是一个非常古老但最近才大行其道的技术,Linux内核中被埋下了越来越多的eBPF调用点,bpfilter正是基于这些非固定的,不断增多的HOOK点来其作用的,这和Netfilter固定的HOOK非常不同。

    比如,XDP就是一个eBPF调用点。它位于网络协议栈的最底层,网卡层面,这里做数据包过滤非常高效,并且可以依托硬件特性将数据包过滤行为offload到硬件中,很棒的主意。

    看起来非常令人遗憾的是,BPF(伯克利包过滤器)从名字上看虽然本身就是一个包过滤器,但是对于Linux系统而言,在包过滤领域,BPF除了用于抓包之外,在其它方面很少其关键作用。

    不过,现在它的时代来了。事情正在起变化。

    目前Linux内核中,XDP,TC,Socket是TCP/IP网络协议栈中三个关键的eBPF程序的调用点,可以想象,这种eBPF调用点会越来越多,它不像Netfilter那样是固定的5个或者说几个HOOK点。

    所谓的eBPF调用点理解起来非常简单,就是在这些点上,内核会调用通过用户态灌进来的eBPF字节码,目前在网络协议栈领域最常用的eBPF调用点就是XDP了。

    好了,大致框架就是以上这些,下面是试一试的时间。

    为了让这一切run起来,我们要解决几个问题:

    • 如何编写eBPF过滤程序。
    • 如何编译eBPF过滤程序。
    • 如何将编译好的eBPF字节码灌进XDP。

    目前,bpfilter的POC已经完美回到了上面的问题,详见:
    https://lwn.net/Articles/747504/
    https://www.netronome.com/blog/bpf-ebpf-xdp-and-bpfilter-what-are-these-things-and-what-do-they-mean-enterprise/
    很棒的一个点就是,为了让iptables平滑过渡,bpfilter准备了一个非常trick的机制,可以将配置下发下来的iptables规则JIT编译成eBPF字节码到XDP。

    然而这些都是宏观的东西,下面我来演示一下Step by Step的微观细节,我要解决一个实际问题,即:

    • 禁止enp0s3所有数据包。

    如何编写eBPF程序呢?很容易,下面的C代码便是:

    #include <linux/bpf.h>
    
    #define __section(NAME)	\
    	__attribute__((section(NAME), used))
    
    __section("prog")
    int drop_all(struct xdp_md *ctx)
    {
    	return XDP_DROP;
    }
    
    char __license[] __section("license") = "GPL";
    

    如何编译它呢?

    root@zhaoya-VirtualBox:~/xdp# clang -Wall -target bpf -c simple.c -o simple.o
    

    如何使能它到enp0s3呢?

    root@zhaoya-VirtualBox:~/xdp# ip link set dev enp0s3 xdp obj simple.o
    

    作为骨灰级的Netfilter,iproute2玩家,我是一直跟随着最新进展,iproute2真的牛X到不行。

    很多年前我玩Cisco ACL就知道,Cisco的做法是将ACL规则优化编译加载到网卡,如今Linux的eBPF字节码在XDP运行,也是一样的路子。

    循序渐进,下面的例子稍微有点难度,需要自己来解析数据包,禁止所有的TCP数据包:

    #include <linux/bpf.h>
    #include <linux/in.h>
    #include <linux/if_ether.h>
    #include <linux/ip.h>
    
    #define __section(NAME) __attribute__((section(NAME), used))
    
    __section("prog")
    int drop_tcp(struct xdp_md *ctx)
    {
    	int ipsize = 0;
    
    	void *data = (void *)(long)ctx->data;
    	struct iphdr *ip;
    
    	ip = data + sizeof(struct ethhdr);
    
    	if (ip->protocol == IPPROTO_TCP) {
    		return XDP_DROP;
    	}
    
    	return XDP_PASS;
    }
    
    char _license[] __section("license") = "GPL";
    

    难道我们为了编写一条数据包过滤规则都要写个C程序吗?很多人并不具备编程能力,或者仅仅是不精通C,看起来根本没有必要必须写一个C程序。

    好在有很多的前端可以帮我们生成字节码。

    事实上我们常用的tcpdump就有这样的功能,当我们用-d,-dd执行tcpdump时,打印出来的就是过滤程序:

    root@zhaoya-VirtualBox:~/xdp# tcpdump -i enp0s3 dst 11.22.33.44 -d
    (000) ldh      [12]
    (001) jeq      #0x800           jt 2	jf 4
    (002) ld       [30]
    (003) jeq      #0xb16212c       jt 8	jf 9
    (004) jeq      #0x806           jt 6	jf 5
    (005) jeq      #0x8035          jt 6	jf 9
    (006) ld       [38]
    (007) jeq      #0xb16212c       jt 8	jf 9
    (008) ret      #262144
    (009) ret      #0
    root@zhaoya-VirtualBox:~/xdp# tcpdump -i enp0s3 dst 11.22.33.44 -dd
    { 0x28, 0, 0, 0x0000000c },
    { 0x15, 0, 2, 0x00000800 },
    { 0x20, 0, 0, 0x0000001e },
    { 0x15, 4, 5, 0x0b16212c },
    { 0x15, 1, 0, 0x00000806 },
    { 0x15, 0, 3, 0x00008035 },
    { 0x20, 0, 0, 0x00000026 },
    { 0x15, 0, 1, 0x0b16212c },
    { 0x6, 0, 0, 0x00040000 },
    { 0x6, 0, 0, 0x00000000 },
    root@zhaoya-VirtualBox:~/xdp#
    

    唉,又要搬家,这种日子持续了将近5年,终于快要结束了。作于两趟搬运之间的间隙,腰酸背痛!


    浙江温江皮鞋湿,下雨进水不会胖。

    展开全文
  • 半年来,Linux 高效的完成了我所有的工作。 Hi! 我们先来看看很关键的一种计算机软件叫做“操作系统”(名词解释略 :P)。GNU/Linux 是一个操作系统,如果你不知道它是怎样一个系统,可以参考 http://www.kernel.org. ...

    半年来,Linux 高效的完成了我所有的工作。

    Hi! 我们先来看看很关键的一种计算机软件叫做“操作系统”(名词解释略 :P)。GNU/Linux 是一个操作系统,如果你不知道它是怎样一个系统,可以参考 http://www.kernel.org.

    由于 GNU/Linux 这个词太长,下面如果没有特别指明,“Linux”就是指“GNU/Linux”。由于某种我不明白的稀奇古怪的法律原因,Linux 不能叫做 UNIX。我只是一个无名小卒,所以可能没有人无聊到想找我打官司,所以我可以随便提到一些专有名词,而不用声明“foo是bar公司的商标”。我可以说:Linux 实质上是 UNIX,而且是最有生命力,最有前途的 UNIX。以后我用在 Linux 身上的说法同样适用于其它 UNIX,反之也成立。

    我与 Linux 的故事

    这是我写过的最长的一段个人历史,因为我对 Linux 实在非常有感情。不喜欢看别人历史的人快跳过这节哦!

    1997年,我进入计算机系学习一学期后,和别人合伙买了一个电脑,装了一个 Windows95 系统。可是 Windows95 太不稳定了,正常使用时一天死机3次不算多,况且我是那种顽劣分子,到了我手里,如果两个小时内 Windows 没有死机是很不正常的,合伙的同学都怕了我 :) 我很委屈,我认为这不是我的错,一个操作系统不应该是这样脆弱。我不喜欢那样小心翼翼的使用计算机,我喜欢可摔可打的结实的东西(就像滑板:)。我告诉老师我想要一种不死机的系统,老师说:“你应该使用 UNIX。” 可是 UNIX 似乎是非常昂贵的东西,而且是臭名昭著的“对用户不友好”(据同学说),所以我虽然得到了 SCO UNIX,但是一直没能安装。

    后来我偶然的在一个书店的角落里发现一本上了灰的书:“个人电脑上的 UNIX: Linux”(好像是这个名字吧)。那是书店里唯一的一本有关 Linux 的书籍(想想今天书店里汗牛塞屋的 Linux 书籍:),里面讲了一些 Slackware Linux 的安装,使用等东西。我浏览了一遍之后,发现这个系统是免费的,而且可以在PC上安装,所以非常感兴趣,把这本无人问津的书买了(咳,看那个书店老板笑的 :)

    然后我就开始寻找书中所说的 Slackware,它说要40多张软盘哪!结果没能在软件商店找到。两个月之后我居然在电脑城发现了 Slackware 的光盘,我立即把它买了回去。(卖软件的人说:“总算卖出去了”。) 我顶住合伙人的强烈反对,硬是把硬盘分了一块出来,照书里的方法把 Slackware 安上了,光盘安装出其意料的简单。为了避免别人不方便,我没有在mbr安装lilo,每次都从软盘启动机器。从此我就算是一个 Linux 用户了。其实这时我只当了半年的 Windows 用户。

    但是我那时候并不是很理解 Linux,我认为它只是没有钱买商业 UNIX 的人的一种无奈的选择。后来 Linux 网络功能越来越强,很多网站开始使用Linux,可是我认为 Linux 只能作为网络服务器或者程序开发平台,而不能用于普通用户。用 Linux 吧,我不知道怎么在 Linux 下放影片,不知道怎么舒舒服服的浏览网页。用 Windows 吧,我不知道怎么在 Windows 下舒舒服服的写程序,Turbo C, VC++ 的工作方式显然是不适合我的。所以很多时候我在 Windows 和 Linux 之间切换,我觉得很不方便。但是 Linux 的操作方式实在很高效,我甚至在 Windows 下安装 cygwin

    此处省略20000字……

    半年前由于我对 LaTeX 的深入掌握,我移植了 gbkfonts 给 Linux,而且发现了很好的中文输入法 XSIM 和 SCIM,所以我不再依赖 Word,而能够用 Linux 处理大部分事情了。所以我有一个月没有用 win2000, 后来我把除了 C: 以外的 Windows 分区都删掉给了 Linux,仍然没有启动 win2000。后来有一天偶然需要看一个word文档,启动win2000,可是不知道怎么它就崩溃了(难道因为我删了两个分区?),然后我干脆把 C: 也格成了 ext3,这样 Windows 就从我机器上消失了,Linux 成为了我机器上的统治者。那个 word 文档,我后来让同学帮我转成了 PDF 给我看 :)

    我相信我能用 Linux 解决电脑上的所有问题,所以遇到问题时就想办法用 Linux 解决,结果半年下来,我顺利的完成了各种工作。包括日常的网络,编程,科研和论文,presentation,娱乐……

    现在我已经几乎忘记了 Windows,不是因为歧视它,只不过因为它已经对我没有什么用处,所以不要以为我想引起“宗教战争”哈,操作系统的不同不应该成为人们争执的原因。实际上我很乐意帮助爸爸解决有关 Windows 的问题,隔壁的微软研究院的王益也是我的好朋友。我以后的讨论不再涉及 Windows 的优劣的事情,我知道 Linux 能做的很多事情 Windows 也能做,但是不用提醒我啦,因为我实在对操作系统的底层不感兴趣。

    自由软件的重要性

    我非常高兴能够完全使用 Linux 工作。虽然 Linux 和它的朋友们在很多方面已经超过了商业 UNIX,它们在某些方面还不如某些商业 UNIX,但是可以预见,Linux 这样的自由软件在将来一定会一统天下。因为“自由”对于人们来说是非常重要的,越来越多的人意识到了这一点,他们志愿的投入到 Linux 程序的开发中来。很多大公司,IBM, SGI, HP…… 也都开始支持 Linux. 所以 Linux 的发展会越来越快。Linux 没有任何历史包袱,通过学习其它系统的优点,Linux 的程序会越来越完美。

    纵观历史上造成重大影响的程序,几乎都是自由开放的软件。TeX, Linux, Xwindow, Perl ... 而商业程序的命运总是在一瞬间灰飞烟灭,被人们遗忘得不留任何痕迹。看看商业的 UNIX,四分五裂,各不兼容,给用户造成很多麻烦。商业的 MACSYMA,它的公司竟然可以在一瞬间消失,让所有用户失去支持。这是我们不希望看到的。

    自由软件为什么会有如此大的威力呢?首先,你会发现,自由软件的适应性比商业软件大的多。因为只要有人需要某种有益的功能,就有人把这种功能加入到程序里。FVWM 浩如烟海的功能就是这样的结果。自由软件往往很容易跟其它系统的程序相处,它们在不同系统上的编译安装一般没有问题,因为这是由很多种系统的用户共同开发而成的,首先就考虑到了可移植性。而商业UNIX程序往往不能很容易的在不同的系统安装,甚至在开发时使用的那种系统上安装都需要花很大功夫。不提供源码直接导致了这种不方便。曾经有一个日本软件公司的工作人员在我们实验室抓了整整一天后脑勺,才把一个Solaris的商业软件装好 :p

    自由软件的全部或者部分能够被随意的利用,改进,再次发行。你可以修改你发现的bug或者加入你自己需要的功能,或者移植给其它系统。如果你不是一个程序员,那你可以请人来做这个工作。比如你报告一个bug,很快就有人解决这个问题,你提出一个新的想法,有些感兴趣的程序员就可以帮你实现。比如,我就曾经修改了 XSIM 的代码,改正了它在屏幕保护时状态窗口不消失的问题。我移植了 gbkfonts 的代码给 Linux 和 Solaris,我就能在这些系统生成 TeX 的中文字体。我修改了 dvipdfmx 的代码,让它可以嵌入某些通常不能嵌入的字体。用户能够自己改进程序,再次发行,这样软件的功能就会越来越强大,衍生出来的软件会使更多的人受益。商业软件没有这个优点,如果出了问题,你不能很快的得到帮助,bug 不能很快的得到修改,即使修改了bug,更新的版本很可能还得要你掏钱,谁还愿意报告bug呢?至于你想要的特殊的功能,想都不要想啦!那些软件公司根本不可能考虑你个人的需要。

    自由软件具有强大的生命力,这是由它的开放性决定的。一个自由软件,哪怕只剩一个人喜欢,他都可以自己来维护这个程序的生存,适应自己的需要。说不定以后还会有更多的人对这个程序产生兴趣。MAXIMA 就是这样一个例子。Schelter 博士由于自己的兴趣,默默无闻的维护 MAXIMA 直到他生命的最后一刻,他拯救了 MACSYMA — 世界上最优秀的计算机代数系统。

    自由软件有良好的社会作用。它的一切工作原理都是公开的,这体现了尊重科学,不为名利,信息公开,共同进步的良好学术风尚,这对于科学研究工作是非常重要的。它能够被随意的拷贝给需要它的人们去用,这体现了人们互相帮助的美德,一个理解自由软件思想的人会更加关爱社会,乐于助人,对于改善整个社会风气都有很大的好处。

    用 Linux 完成你在电脑上的所有工作

    Linux 能完成我所有的工作,但是不一定能完成你所有的工作。以下这些仅供参考。在你有信心完全使用 Linux 之前,不要删掉你的 Windows。不要说我没有警告过你哈。

    很多人在某些事情上已经离不开 Linux,但是他却没有找到可靠的 Linux 程序来完成某些其它操作系统能完成的某些简单的事情。比如很多人抱怨 Linux 下的 Mozilla mail, evolution 损坏他们刚写好要发出去的 email。 有些人认为他专业上的程序只有商业 UNIX 和 Windows 才有。比如有些人为了使用 Mathematica 而使用 Windows,他说 Linux 下没有 Mathematica 程序,商业 UNIX 又买不起。其实完全可以用 Linux 来完成这些事情。

    首先,Mozilla mail, evolution 虽然是 Linux 可以用的程序,但是由于历史太短,它们还没有稳定下来,有很多 bug。如果你需要可靠稳定,而不想费时间帮助 debug,你完全可以用 Mutt 这样的强大可靠的工具来发送你的 email。Mutt 比起 Mozilla mail, evolution 都要强大的多,但是它显然是某些“专家”才能使用的工具,普通用户还是只能用 Mozilla mail 或者 evolution。所以很感谢 Mozilla mail 和 evolution 的使用者,没有你们,这两个软件可能就不能得到用户的反馈和改进了。别怕!什么专家啊,吓你的 :) 我为你准备了一个不需要成为专家就能使用 Mutt 的入门文档,看这里

    第二,其实有Linux 下的 Mathematica,你自己去 wolfram.com 看看吧,800 多美元就能买到。由于 Linux 性能良好,很多科学家,工程师开始使用 Linux, 所以商业的科学工程程序,比如 Matlab, Mathematica, AutoCAD, Design Compiler, HSpice ……很多都移植给了 Linux。当然它们可能不是免费的,但是它们值那个价钱(也许吧)。如果你喜欢自由软件,很多商业程序有对应的自由软件,比如你可以用 MAXIMA 来代替 Mathematica,用 octave 代替 Matlab ……而且你可能会发现它们很多时候比它们对应的商业程序好!

    用惯了 Windows 的人可能会发现,Windows 下有些东西在 Linux 下没有很相似的,或者你找到很多类似的,但是它们每一个比起 Windows 的那个程序都要差很多,那么原因有两种可能性:

    1. 有一个完全类似的程序,但是由于它乍一看不漂亮,被你忽略了。

      用惯了 Windows 的用户最容易出现这种情况,因为 Windows 的程序看起来都是相当漂亮的。所以大部分人看到像 Mutt, FVWM 这样的程序根本就不会考虑用它们,而另外去找一些像 Windows 程序的程序来用。

      你错了。有些程序虽然看起来很漂亮,但是它们是一些初学编程的人写的。现在由于 Gtk, Qt 的诞生,Linux 下开发图形界面程序极其简单,很多初中生甚至小学生都可以随手编出一些漂亮不中用的程序(我以前也写过:)。如果你在这样的程序中间挑来挑去,永远也找不到你满意的。当然也有一流的程序用 Gtk 和 Qt,比如 GVIM 就可以用 Gtk 作为图形界面,我还知道 Synopsys 一些程序用了 Qt。

      我曾经也犯过这样的错误,从外表区分一切。结果优秀的 FVWM, lftp, Mutt, wget 都被我忽略过。当我被别的不稳定的程序惹恼了,找回它们的时候,就像发现了新大陆 :)

      我第一次看到 FVWM 觉得它只不过是一个有很厚很难看边框的东西,可是现在,我的同学看到我的 FVWM 都说:“哇!真漂亮。” 你甚至可以让 FVWM 比 Windows XP 还漂亮。某些初次见面没有迷住你的程序,很有可能让你二见钟情,以至于伴你终生哟。这就是所谓的魅力吧 :)

    2. 有另一种完全不同的方式可以达到相同的目的,甚至更好。

      很多人很关心 Open Office, Star Office, AbiWord, ... 他们多么盼望有一天某一个 Linux 程序能够完全兼容的打开一个复杂的 doc 文档。但是你不需要再等了,鼓起勇气,你今天就能得到一个比 Office 的 Word 和 PowerPoint 更好的东西。

      你看看那些高水平的学术杂志,论文,那些大学教授的网页,那些漂亮的幻灯片,它们是什么做的?原来 UNIX 用户早就有非常方便的 troff, LaTeX, SGML, XML 等东西可以处理文档,而且它们比起 Word 都要方便的多。

      很多教授留着 Windows 在硬盘上的原因无非是为了用 PowerPoint。我见过一个教授,他的 Windows 笔记本电脑上除了 PowerPoint 什么都没有。有一天演示的时候,他指着堆乱字符说:“对不起,这是一个公式……怎么每次都是这样……” 其实有比 PowerPoint 好很多的东西可以制造幻灯片,你可以用最简单的方法制造世界一流效果的论文和幻灯片,可以包含漂亮的数学公式。你待会儿可以看看我的TeX网页

    下面我介绍一些使用 Linux 的经验。

    使用配置文件定制程序行为

    很多人喜欢用鼠标点菜单来配置程序,可是,鼠标虽然是很好的工具,但是它的表达能力是有限的。你不可能光用鼠标就让电脑完全明白你的意思,它毕竟只有3个按钮。看看我的MetaPost页你就能体会到鼠标的这一弱点。所以我们虽然很喜欢鼠标,但是却不能完全依赖它。

    看看优秀的 UNIX 程序,XFree86, FVWM, VIM, Emacs, proftpd, Mutt, wget, tin, ... 没有一个不是用配置文件来设置选项的。为什么这些程序没有方便的菜单可以用来配置?难道它们的设计者就那么低能,连个图形配置界面也写不出来?

    当然不是。因为图形界面配置方式的能力是极其有限的,而配置文件里的符号的表达能力却是无限的。用图形界面配置这些程序的话,如果你想达到配置文件的效果,你需要成百上千的菜单,checkbox, radio button, ... 到时候你根本没办法找到你需要修改的地方了!

    配置文件其实比菜单方便。你在配置文件里可以完全发挥编辑器的强大功能。你可以任意搜索到你需要的配置选项。配置文件的语法都有很多相似之处,一般就是一些命令,设置一些变量,参数,…… 一旦用会了一个,其它的也就容易理解了。

    你有没有发现有些菜单配置的程序,连IP地址都会被分开在4个文本框里,你不能一次性把外面的IP地址拷贝进去,也不能拷贝出来,也不能整体删除,多麻烦。要是以太网物理地址,那岂不是要分成6个文本框!不知道这种程序的设计者是怎么想的,竟然还有很多人模仿这种方式。

    配置文件对程序设计者有较高要求。你发现了吗,写一个使用配置文件的程序要比写一个菜单配置的程序难度大。有些程序的配置文件里,有命令,有变量,有正则表达式,…… 它们的顺序可以是任意的。你想想的设计难度有多大。而一个菜单配置的程序,所有的选项都被设计者固定下来了,你只有那么几个选择,它的设计难度要低的多。比如那种把IP地址分成4个文本框的程序,只不过是为了避免写代码去验证用户输入的IP的合法性,因为这样你就不可能输入 12344.343#2344.430 这样非法的 IP,但是这给了用户很多不方便。

    请用 Xwindow

    计算机界门派之分很多。很有特点的就是 CLI(命令行界面) 和 GUI(图形用户界面) 了。CLI 的狂热份子声称永远不用 X。我上次在实验室看到一个同学用一个 SecureCRT 登录到 Sun 机器,然后用一个 vanilla vi 编辑程序,我建议他启动一个 GVIM 过来显示在 Exceed 上可以有语法加亮。但是他坚决反对,说:“高手不用X。你想想,要是我在一个很慢的网络连接怎么用 X?而且好多服务器没有装 X 程序。”

    但是我们实验室的网速可够快,Windows 机器都有 Exceed 啊,而且 Sun 机器有全套 X 客户程序包括 GVIM。他说他是 CLI 的坚决拥护者,但是他却在用 SecureCRT 这种 GUI 程序,他后来打开了好几个 SecureCRT,每次从文本框输入地址,用户名和密码,从下拉菜单选择 "SSH2",然后点击“Connnect”。他还不断的夸SecureCRT是“网络管理员投票选出的最受欢迎的登录方式”。

    他其实不懂 Xwindow 的原理,没有明白 Xwindow 的好处,或者是他被 Gnome 和 KDE 那样不稳定的 "Xwindow" 给弄烦了。console 方式对于网络管理员可能比较方便,有时甚至是唯一的选择。但是,对于普通人,不用 Xwindow 显然是非常不方便的,想一想你连函数曲线都不能画出来!在X的xterm, rxvt下就能完成 console 的所有功能,何乐而不为?

    其实何必分什么 GUI 和 CLI,UNIX 和 Xwindow 都是工业标准,它们从设计那天开始就有非常灵活的用法,各个程序,不管是 GUI 还是命令行的都可以互相协作。UNIX 和 X 是一家,何必搞的那么偏激,非此即彼?我就是坚定不移的“两面派”。

    理解 UNIX 的设计思想

    UNIX设计的思想就是,让每个程序都只擅长于一项专门的工作,然后让它们合作,形成一个可靠的,强大的,灵活的系统。Xwindow也继承了这种好传统。

    这恐怕就是Windows和其它操作系统望尘末及的地方了。UNIX 程序设计之统一,配合之完美,真使我难以置信!shell, grep, find, awk, sed, make, Perl, Emacs, vi, tin, Mutt, ... 它们是那么的具有一致性!你一旦学会了 sed 的正则表达式,其它程序基本上都能用了。你一旦学会了 vi 和 VIM, 你会发现它的操作是那么的有规律性,似乎vi的设计者在几十年前就已经设计好了 VIM 在今天的完美而统一的操作方式!而且vi的操作还体现在 Mutt, tin 等很多程序中。你甚至可以把 bash 设置为 vi 的输入方式来输入命令行,我就是这么做的。一个程序可以调用另外一个程序来得到数据,可以把数据交给它处理后返回来,可以在自己的窗口里“嵌入”另外一个程序。

    比如我用 Mutt 的时候,我可以用 VIM 也可以用 pico 来编辑邮件,我可以用 ImageMagick 也可以用 xv 来显示附件里的图片,我可以用 lynx 把 HTML 附件转成文本嵌入窗口中,我也可以把 HTML 附件交给 Mozilla 图形显示。我可以让 GnuPG 帮我把邮件进行数字签名和加密,我也可以用其它 PGP 程序。我想让 Postfix 而不是 sendmail 帮我发出邮件,我想让 fetchmail 帮我收邮件,转发给 postfix,然后被我自己写的Perl过滤器处理…… 这一切我都可以办到!我可以选择我最喜欢的专门的程序来完成专门的工作,然后把它们结合在一起,我也可以分别得到它们的好处。

    Linux 应用程序简介

    现在我告诉你怎样用 Linux 处理很多事情。

    半年以前我由于中文老是配置不好,一直是双系统,不时需要重起到 Win2k 来处理汉字。后来我找到了 miniChinput, XSIM 和 SCIM 输入法。这下可以处理汉字了。而且 VIM 和 Emacs 对汉字支持越来越好。我的大部分文本是用 VIM 编辑的,包括程序,信件,网页,LaTeX 论文,MetaPost 图形。

    我不用 Word 这样的程序写论文,而是用 LaTeX,因为这是世界上效果最好,最方便的论文工具,是大多数学术杂志要求的格式。幻灯都是用 ConTeXt 做的,用起来很简单,而且效果非常漂亮。你可以看看我的TeX介绍

    至于绘图,你可以用很多可视化的工具,比如 xfig,dia。但是对于我来说,任何可视化的工具都不能完成某些任务,我需要一种可以精确描述图形的语言。我找到了MetaPost。它简单又好用,而且效果是一流的,生成的 eps 可以随意缩放。我的插图,如果不是图像,都是 MetaPost 画出来的。

    我曾经抱怨 mozilla-mail 经常突然消失,损坏我好几封快要完成的信件。后来我发现 mozilla 的邮件处理程序确实是不稳定的,功能又弱,有经验的 UNIX 用户都不用这样的程序。Mutt 是一个非常稳定可靠的 UNIX 邮件处理程序,而且功能非常强大。

    我曾经为 Gnome 和 KDE 的不稳定而烦恼。现在我找到了非常强大的 FVWM。KDE,Gnome 也能和 FVWM 一起工作。虽然 Gnome 和 KDE 总体不稳定,但是某些部件程序还不错,很多 gtk, Qt 的程序也很不错,它们很多都是可以独立于这些桌面环境运行的。

    我曾经惭愧的使用着盗版的 Mathematica,后来我发现了自由的 MAXIMA,经过一段时间的学习,我发现 MAXIMA 比 Mathematica 更严密,更方便,更自然,它是更适合处理数学问题的工具。

    几点忠告

    1. 不要“玩 Linux”

      很多人用 Linux 的时候会感觉很迷茫,该用哪个发行呢?是不是我少装了什么?怎么升级这么快啊!怎么这么不稳定!每当遇到新的软件他就想试用,每当新的版本出现,他就更新,然后用鼠标在新的菜单里选择从来没见过的程序来用用。

      其实你是为了Linux而使用Linux,而没有找到正确的理由来利用 Linux。你首先要明确用电脑的目的,你用它是为了解决你的实际问题,而不是为了学习安装操作系统,不是为了测试哪个版本好用,更不是因为你硬盘太大了,你想多占点空间。

      如果你启动了电脑之后不知道应该干什么,那么最好先不要用电脑,因为你可能有更重要的事情需要做。

    2. 不用挑剔发行版本

      很多人刚开始用 Linux 的时候,总是在怀疑别的发行版本是否比自己正在用的这个好,总是怀疑自己以后时候会失去支持,不得不换用别的发行。所以很多人今天是 Redhat,明天又换成了 debian, 一会儿又是 gentoo, …… 甚至有的人在一台机器上装了两个版本的 Linux,然后比较哪一个好。

      其实你完全没有必要这样做,任何发行,只要你熟悉了,你在上面的工作方式几乎是不会受到任何影响的。你常常听说 Debian 的更新比 Redhat 快,包比 Redhat 多,但是你可以比 Debian 更新还要快,直接到你需要的程序的主站点下载源码来编译就是了。

      Debian, TurboLinux, SuSE, Redhat, Gentoo, ... 任何一个版本都是不错的。

    3. 不用跟 Windows 比较

      很多人在讨论区不断的引起 "Linux vs. Windows" 之类的讨论,甚至争的面红耳赤,这是没有必要的。因为各人的需要不同,生活的环境不同,你不可能得到一个定论。我们需要尊重别人的选择,这是你在进行任何对工具的讨论前需要提醒自己的事情。面对一些容易引起争论的东西:Word 和 TeX;Emacs 和 VIM;MAXIMA,Mathematica 和 Maple;Gnome,FVWM 和 KDE;Mutt 和 Pine …… 一定要冷静。

      你需要关心的不是你的工具是什么,而是你用它做了什么。精通 Linux 并不说明任何问题,因为它只是一个工具而已。如果你用 Windows 能很好的完成你的任务,那你就没有必要费时间去熟悉 Linux。直到有一天你发现一项任务只有 Linux 才能完成的时候再换也不迟,因为你身边的 Linux 的爱好者一定会很乐意的帮助你。

    4. 直接从源码安装程序

      很多人放着最新的源码不用,等着有人帮他做出 rpm, deb, 才能安装。我说你为什么不用源码编译,这样版本比 rpm 高的多,有很多新功能,而没有烦人的依赖关系。可是他说:“要是我用源码编译安装,卸载的时候就不方便了,会留下很多垃圾。”

      为什么程序还没有安装你就想到卸载?难道你不知道这个程序是用来做什么的?你应该改变到处找程序来试用的作法,而应该先了解一下到底那些程序有同样的功能,听听别人的意见,看看它们各有什么长处和短处,然后挑一个最适合你的程序来用。

      从源码编译安装程序,不但比你装rpm更适合自己的机器设置,而且它们一般会装到 /usr/local 目录,这样你以后如果换硬盘重装系统,也可以把以前 /usr/local 下的程序原封不动拷贝过去用。我的 /usr/local 下有 2G 之多的程序,你想要是我有一台新机器要重新安装,然后配置,得花费多少时间?实际上我曾经通过网络把它们传到一台新机器上,然后就出去吃晚饭,回来时我就得到了另一台一摸一样的 Linux 机器。

      确实要卸载 make install 的程序怎么办呢?答案是直接删掉。别以为直接删掉程序会留下垃圾,引起“系统不稳定”。(btw: 这是谁教你的啊?呵呵。) make install 无非就是把可执行程序放在 /usr/local/bin, 把某些函数库放在 /usr/local/lib,把数据文件放在 /usr/local/share 下一个它自己的目录,你把这些东西都删掉就行了,不会留下垃圾,即使真的留下一点文件没有删掉也占不了多少空间,更不可能引起系统不稳定。UNIX 就是这么简单 :)

      但是有几个程序不建议从源码安装,它们是 Mozilla, Open Office, ... 它们编译时会占用你几个G的空间和好几个小时的时间,这种花费我觉得是不值得的,因为你不能从编译得到更多好处,不如直接安装编译好的版本。

    5. 不要盲目升级

      不知道这是心理作用还是什么,有的人看到比较大的版本号,就会很想换成那个。很多人的 Redhat 本来配置的很舒服了,可是一旦 Redhat 发行新的版本,他们就会尽快下载过来,然后选择升级安装。结果很多时候把自己原来修改得很好的配置文件给冲掉了。新的软件又带来了新的问题,比如有一次我的 rxvt 升级到 2.7.8 就跟 miniChinput 冲突了,升级到 Redhat 8.0,发现 xmms 居然缺省不能放mp3了,XFree86 的 xtt 模块在 I810 上有新的 bug,会导致 Mozilla 突然退出。

      如果你已经配置好了一切,千万别再整体升级了,这会浪费你很多很多时间的,不值得。如果需要的话,你可以只把某些部件升级,比如内核,glibc, gcc, XFree86,...

    6. 使用 UNIX 的经典程序

      好的程序一般都是可以很方便的在很多种 UNIX 上移植的,bash, VIM, Emacs, Mutt, FVWM, xterm, 都是这样。如果你用这些程序,你就可以在 Sun, HP, ... 等工作站上也装上,这样你在各种机型上的工作环境就几乎完全一样了!你不需要在 Sun 上面用 CDE,在PC上又换成 KDE,在它们上面都装一个 FVWM,使用相同的配置文件,就能得到一致的界面。

      这些程序大部分都是久经考验的,是经过很多人多年开发的结果。它们功能完善,各种情况都考虑周全,绝对是你的好助手。

    7. 不要配置你不需要的东西

      如果你只想做一个像我这样的普通用户,主要目的是用 Linux 来完成自己的科研任务和日常工作,那就可以不用系统管理员或者网络管理员的标准来要求自己,因为当一个系统和网络管理员确实很辛苦。普通用户学习那些不经常用到的复杂的维护系统的工具,其实是浪费时间。

      我不是一个合格的网络管理员,我的服务器都只设置了我自己需要的功能,设置好 ssh, ftp 已经足够了,那样可以省去我很多麻烦。我从来不过度考虑“安全”,因为 Linux 缺省已经很安全了。我没有磁带机,就不用管 tar 的那些稀奇古怪的参数了,czf, xzf, ztf 已经可以满足我所有的需要。

    8. 不用忙着看内核源码

      除非你想研究操作系统,否则还是先把怎么使用 Linux 掌握好再说吧。我以前看了那么多内核源代码,写了驱动程序,结果最后发现我还是一只很多事情不能用 Linux 解决的菜鸟 :) 吸取我的教训吧,你应该首先掌握 shell,Xwindow 的使用和原理,它们可不比内核简单。

    处理日常事务的 Linux 程序和它们的配置

    下面列出我常用的一些 Linux 程序。一个列表里可能有很多,那是为了方便你来选择,我列出了比较信得过的。但其实很多只有第一个是我真正在用的,因为我不喜欢试用程序。

    我建议一些简单的使用方式,一般就一句话。

    • Shell: bash。它结合了 csh 和 ksh 的优点,并且有 readline 功能,你可以随意绑定自己的键盘,使用 emacs 或者 vi 的方式都可以帮助你高效的输入命令行。info bash 可以得到非常详细的 bash 说明书,为了高效的使用 bash,你最好看看这个。你可以按照这个说明自己写一个 .bashrc,你还可以写一个 .inputrc 来配置 readline 库,这样其它使用 readline 的程序也可以使用同样的方法输入,非常好。
    • 编辑器: VIM, Emacs。VIM 是 vi 的改进,建议先熟悉一下 VIM,因为很多其它程序比如 tin, Mutt, Firebird BBS 使用类似 VIM 的键绑定,VIM 的键帮定跟正则表达式很有关系,比如 "^" 和 "$"。在 UNIX 机器上,有时你被迫只能用 vi,而 vi 是 modal 的,如果先熟悉了 Windows 的编辑器会比较难以接受 VIM 的工作方式,所以你需要适应一下。
    • 程序开发: gcc, make, ld, Scheme48, gcl, j2sdk, Perl, Python, Tcl/Tk ... 这个的配置没什么好说的,自己用什么就去看看文档吧。
    • 文档工具:LaTeX, ConTeXt,TeXmacs。LaTeX 可以用来写论文或者简单的幻灯片,ConTeXt 可以作出非常漂亮的屏幕文档。TeXmacs 可以非常舒服的,所见即所得(WYSIWYG)的编辑文档,它比 Word,WordPro,WPS,lyx 都要 WYSIWYG,它才是真正的WYSIWYG,非常漂亮。配置方法看我的 TeX 网页
    • 绘图工具:MetaPost。这个语言太强了,以至于我只用它了。你不熟悉的话可以用 xfig, dia 来画一些流程图之类的图片。配置方法看我的 MetaPost 网页
    • 图像处理:ImageMagick。其中的 import 程序可以屏幕抓图,convert 程序可以转换图像格式,display 可以显示图片和简单编辑(缩放,换质量,转格式,简单绘图,简单虑镜)。通常我就这么点需要。如果你要更强大的图像工具可以用 Gimp, 它几乎和 Photoshop 差不多。自己man一下 import, convert 就知道怎么用了,display 显示图片后在图片上点击鼠标会有菜单,很简单的,不多说了。
    • 自动管理工具:make。我可以用make来自动编译程序,自动编译文档,自动更新插图…… 全自动,而且不会让机器重复劳动。你看看 info make,那是一份非常详细的教你怎么写 Makefile 的文档,比任何其它书籍都好。
    • 数值计算程序:Octave。这个程序基本上可以实现 Matlab 所有的数值计算功能,而且语法跟 Matlab 一样。
    • 代数计算程序:MAXIMA。这个程序基于世界上最老的计算机代数系统之一: Macsyma 系统。它是用 Common Lisp 实现的。很多现在的符号计算程序比如 Maple 都从 MAXIMA 身上学到很多东西。它现在以GPL发行,永远是一个自由软件。
    • 加密程序:GnuPG。我的 PGP 密钥就是它搞出来的。
    • 打包,压缩程序。什么都有: tar, gzip, bzip2, zip, rar, ... 对于 tar 通常你只需要知道3种参数: zxf(解包),zcf(打包), ztf(看包里有什么文件)。其它的就不多说了。
    • 虚拟光驱程序。Linux 不需要虚拟光驱程序,要看一个iso文件的内容,直接 mount 就行了。比如 mount -o loop mycd.iso /mnt/cdrom。要把光盘做成一个iso文件,用dd就行了,比如如果你的光驱是 /dev/hdb,那么: dd if=/dev/hdb of=mycd.iso 就可以做一个光盘镜像文件叫做 mycd.iso.
    • ftp 服务器:proftpd, vsftpd。proftpd 功能很强,但是我只用了最简单的一种设置。
    • WWW 服务器:apache。(我一般没有开)
    • ftp 客户程序:lftp,ncftp。它们都是文本方式操作的,但是比起图形界面的方便的多。比如 lftp 几乎具有 bash 的所有方便功能,Tab 补全,bookmark, queue, 后台下载,镜像…… Linux 也有图形界面的 ftp 客户程序,但是大多不稳定,有很多问题。这就是很多人抱怨 Linux 不如 Windows 的一个小原因。还有很多人用 Wine 模拟 Windows 的 leapftp,其实 lftp 比 leapftp 好很多,你需要的只是适应一下。它的工作方式很像 bash,所以建议你熟悉一下 bash。
    • 自动下载工具:wget。它非常稳定,有一次我下载一个程序,用 IE 和 Mozilla 下载回来的文件都是坏的,最后还是 wget 可靠的传输了数据。用它甚至可以镜像整个网站,比起 WebZip 这样的 Windows 程序强多了,而且不会因为你不付钱就在下载回来的网页里强制插入广告。info wget 可以得到完整的使用说明。
    • 虚拟终端:rxvt, xterm, gnome-terminal, mlterm, ... 这些配置都使用 Xwindow 程序的标准配置方法,在 .Xdefaults 里写一些东西。
    • X server: XFree86
    • 窗口管理器:FVWM。编译加入了 libstroke。详细使用方法见我的FVWM网页
    • 中文输入:XSIM。被我修改过以适应 FVWM 的需要。另外推荐你还可以用 SCIM。
    • email 处理:Mutt + sendmail(Postfix) + fetchmail。配置方法见我的 Mutt 网页
    • 看 PDF, PS, DJVU 文件:Acrobat Reader, xpdf, GhostScript, gv, djvu工具包和 netscape 插件。它们都是可以免费得到的。
    • 看CAJ, 超星文档。CAJviewer 好像没有 Linux 版本,不知道为什么。如果找不到PDF,PS 或 DJVU,直接去图书馆借最好,屏幕阅读伤眼睛。
    • 看网页:Mozilla, Phoenix, lynx。Mozilla-Xft 的显示效果比 IE 好很多。
    • 英汉字典:IBM智能词典,星际译王。
    • 编辑网页:我用 VIM 直接写 HTML。你如果想要图形方式的可以用其它的比如 WebSphere,screem, BlueFish,它们可以构造更复杂的网页。
    • 登录其它 UNIX, Linux 机器:openSSH, telnet。我喜欢用 openSSH 把其它机器的 X 程序通过 ssh 加密的隧道传到我机器上显示。
    • 登录 Windows2000 server 的 display service: rdesktop,...我有一天试了一下,不错。后来就没有用过了。
    • 同步程序:rsync。我用 rsync 通过 ssh 来跟某些机器同步数据,或者做自己机器上不同目录间的同步。
    • 上BBS:rxvt(或任何一种终端) + telnet + chatbot(helloooo 机器人的程序)
    • QQ, ICQ, MSN messenger: 我没有 QQ, ICQ 或 MSN。不过你可以用 Gaim, 它同时支持 QQ, ICQ 和很多其它的即时通信方式。ICQ 用户也可以用 Licq。
    • 放录像:MPlayer, RealPlayer。MPlayer 太好了,直接就可以放 VCD, DVD, divx, wma, wmv ... 用 Windows 的同学都很羡慕我,说 Windows 要放这个需要大堆插件。rm 最好还是用 realplayer 放,它也是免费的。
    • 放音乐: xmms(mp3,ogg都可以), mpg321(放mp3), ogg123(放ogg)。mpg321 不如 xmms 管理音乐文件那么方便,但是有时我还是用 mpg321 放 mp3 作为背景音乐,因为懒得开一个xmms窗口 :)
    • 游戏:我已经很久没有玩电子游戏了。不过我觉得 KDE 的那个 ksokoban(推箱子),很好玩。大型游戏比如 Quake 也有 Linux 版本。
    • 看 Word 文档或PPT。简单的就用 OpenOffice。偶然遇到太复杂的doc,ppt文档用OpenOffice打不开,就请人把它转为 PDF 或 PS(PostScript) 再给我,文档里没有特殊的格式干脆就用文本吧,何必那么麻烦。还好,我们系发通知都用文本,PDF,甚至图片。我觉得大家应该体谅贫穷的没有 Word 的用户,不要以为每个人都用盗版软件。PDF 和 PS 是世界通用的跨平台的文档交换格式,建议大家把 Word, PPT 转化成 PDF 或 PS 再给别人看。

    作者介绍:

    自我介绍

    HI! 我叫王垠。我现在清华大学计算机系攻读博士学位。我最喜欢计算机科学和滑板运动。很多对计算机感兴趣的人觉得我的经验对他们有用,所以我有空就把我喜欢的有关计算机和滑板的东西放在这里。另外还有很多其它好玩的东西。

    我喜欢计算机科学,这就是为什么我上计算机系。我喜欢研究数学方面的东西,特别是计算几何。我会很喜欢编写有创意的程序,但是我不喜欢编制大量千篇一律的程序。除了研究这些很多人认为无聊的东西,我还喜欢很多有趣的东西。

    我很喜欢计算机科学家 D.E.Knuth,我非常欣赏他为自己喜爱的事情献身的精神。他给了我很大鼓舞,使我对计算机科学充满了好奇和喜爱。

    我很喜欢体育运动。我最喜欢的是滑板,它不仅是我的运动,我的生活方式,而且是我的交通工具之一。

    我踩着滑板去上课,踩着滑板去实验室,踩着滑板去食堂,踩着滑板上街买东西,…… 不过我的技术确实不是很好,因为我比较胖(不过我正在减肥 :p )。我会做 ollie, manual, nose manual, pop shovit,hangten wheelie,……

    我的 ollie 只能跳上3个台阶,不过也能让过路的人们鼓掌了。玩滑板时,让我最高兴的事情是有女孩对我尖叫(尽管她们有时是被我的“危险动作”吓的 :p),有小孩跟着我跑,有老人好奇的问我“它怎么能飞起来呢”…… 他们对我微笑,我也对他们微笑,这是多么和谐的韵律,它让我感觉到快乐,也让大家感受到快乐。我爱这项运动,我爱这些善良的人们,我爱游泳馆门口的台阶,我爱综合体育馆脚下的小台,我爱围绕着我的树木和花草,我爱我身边的一切!

    我一直想练会一个滑板动作叫 kickflip,但是我真的比较笨啦,练习好久了,还是不会,不过我会继续努力的。

    我的板子已经改朝换代很多次了。从最开头的 Powell K56,Element Wray, ... 到现在的 Birdhouse Santos,…… 但是轮子和桥一直没有换,因为我技术不够损坏它们。我的朋友 Tim Cognan 从澳大利亚给我寄来一套 Bones Black Swiss 轴承,我非常喜欢,它们很快!!

    我还喜欢很多其它运动,我最擅长的是踢毽子,我最多能踢 2000 个左右,不过现在我很少有耐心踢这么多,因为那需要长时间高度集中注意力。我还喜欢网球,足球,长跑等。

    实际上,我喜欢的东西太多了,而时间是永远不够用的。以至于我恨不得我有分身术。但是我没有…… 所以在一段时间我只能从事其中某一些。我参加了科考协会的“魔鬼训练”,希望以后能去爬雪山。最近一段时间我在学习街舞,跟朋友们一起跳舞真是快乐。说不定某一天我能学会 break dance :)

    我非常喜欢音乐。我最喜欢的乐队是 Backstreet Boys,我最喜欢 As Long As You Love me,All I Have,Get Down 等。我也很喜欢 U2 的 Beautiful Day, I Will Follow; Spice Girls 的 Wannabe,Stop; Eagles 的 Hotel California; Axelle Red 的 Faire Des Mamours。 我非常喜欢 Cats 音乐剧,我会唱其中一些,比如 Memory。 跳街舞的朋友们给我一些 Eminem 和其它人的 Hip-Hop 说唱音乐我也很喜欢。

    我喜欢 Kenny G 的一些经典的萨克斯音乐,但是我不喜欢他改编的那些。我最喜欢吉他的声音,非常动听,我有一些 Angelos 的作品。在这些方面我是唯感觉者了,有人告诉我这些人都不是大师,但是我确实觉得挺好听的。其它大师的作品我从来没听过,呵呵。

    没事的时候我可以写字,因为用键盘以来,我的字越写越差了。“字如其人”,对吧…… 所以我还是想把字写好,这样我会变得帅一点 :p

    我在学习法语,这是非常美丽的语言。我刚开始学,觉得挺难,我很难读通一篇文章,但是我很喜欢法语,我会努力学习的。

    暂时就写这些。Au revoir!

    展开全文
  • Linux内核防火墙的包过滤机制

    千次阅读 2010-07-16 16:42:00
    作为内核网络协议的一个扩展集,Netfilter可以在内核内部高效地进行包过滤、网络地址转换(NAT)和包重组。对于网络安全防护来讲,主要用到的是Netfilter的包过滤功能,本节也将就这一主题展开描述。 1. Linux...

    Linux网络安全防护

    从Linux Kernel 2.4开始,新的网络包过滤框架Netfilter/Iptables替代了原来的Ipchains/Ipfwadm系统,成为Linux系统新一代的内核级防火墙。作为内核网络协议的一个扩展集,Netfilter可以在内核内部高效地进行包过滤、网络地址转换(NAT)和包重组。对于网络安全防护来讲,主要用到的是Netfilter的包过滤功能,本节也将就这一主题展开描述。

    1.  Linux内核防火墙的包过滤机制

    通过包过滤机制,Netfilter可以按要求禁止网络包对本地服务器的访问及本地对外的访问,或者对经过本地转发的信息包进行过滤以保护系统,防止未经允许的网络访问本地服务。图15-2展示了Netfilter的包过滤机制。

     
    图15-2  Netfilter的包过滤机制

    可以看出,Netfilter/Iptables防火墙的包过滤机制中实现了对以下3类访问方式的过滤,在Netfilter/Iptables中称它们为过滤链(chain)。

    INPUT链:用于过滤来自外部系统、目的地为本机的信息包。例如,服务器中通过Apache Httpd来实现Web网站服务器,当外部系统尝试访问本地Httpd所在的端口80时,会触发INPUT链中的规则。

    OUTPUT链:用于过滤从系统内部发出的对外访问的信息包。例如,本地用户对外发送电子邮件时,要求通过SMTP协议,也就是端口25来向外部邮件服务器发送信息,此时就会触发OUTPUT链中的规则。

    FORWARD链:用于过滤要求进行转发的信息包,只有当/proc/sys/net/ipv4/ip_forward为"1"时才有效,也就是只对路由功能生效。例如,禁止某个IP通过本机路由访问到其他网段。

    由于Netfilter/Iptables中的所有操作都通过iptables这一命令来实现的,因此业界当前也普遍使用Iptables作为Netfilter的代名词,代表Linux中的防火墙机制。

    2  Iptables端口过滤实例(1)

    1. 清空控制规则

    操作实例:

    方法1

     
    1. [root@server1 ~]# iptables -t filter -F  
    2. [root@server1 ~]# iptables -t nat -F  
    3. [root@server1 ~]# iptables -t mangle -F 

    方法2

     
    1. [root@server1 ~]# /etc/init.d/iptables stop 

    操作分解(方法1):

    -t filter:对过滤表进行操作,用于常规的网络地址及端口过滤。

    -t nat:对网络地址转换表进行操作,用于网络连接共享、端口映射等操作。

    -t mangle:对mangel表进行操作,用于改变包的TOS等特性的操作。

    -F:清空列表中的所有规则。

    全句解释(方法1):

    通过Iptables命令清空filter、nat及mangle表中的规则,也就是清空Iptables中的所有规则。

    全句解释(方法2):

    在Red Hat Enterprise Linux中可以通过对Iptables服务进行stop操作来达到清空Iptables规则的效果,但是这并不会真正地清除规则,当Iptables应用启动的时候仍然会读取/etc/sysconfig/iptables文件,重新载入已记录的规则。

    2. 基于访问源的控制

    操作实例:

     
    1. [root@server1 ~]# iptables -t filter -A INPUT -s 192.168.101.202 -j DROP 

    操作分解:

    -t filter:使用过滤(表)功能对网络行为进行控制处理。

    -A INPUT:表示对INPUT链进行规则追加操作。

    -s 192.168.101.202:表示针对访问来源IP地址为192.168.101.202的信息包进行处理。

    -j DROP:丢弃(不向访问来源返回任何信息)符合规则的信息包。

    全句解释:

    使用Iptables在过滤列表的INPUT链中追加规则,一旦发现从外部要求访问本机网络服务且源IP地址为192.168.101.202的信息包,就马上将其丢弃。

    3. 基于访问目标的控制

    操作示例:

     
    1. [root@server1 ~]# iptables -A OUTPUT -d 
      192.168.101.250 -p tcp --dport 80 -j REJECT 

    操作分解:

    -t filter:此处没有使用-t filter,但同样会对filter进行操作,因为filter是Iptables默认操作的链表。

    -A OUTPUT:表示对OUTPUT链进行规则追加操作。

    -d 192.168.101.250:表示针对访问目标为192.168.101.250的信息包进行处理。

    -p tcp -dport 80:表示针对访问目标协议为TCP,且端口为80的信息包进行处理。

    -j REJECT:拒绝(向访问源发送拒绝请求信息)符合规则的信息包。

    全句解释:

    使用Iptables在过滤列表的OUTPUT链中追加规则,一旦发现从本地要求访问外部网络服务且访问协议为TCP目标IP为192.168.101.250、端口为80的信息包,就马上将其拒绝。

    4. 同时过滤多个端口

    操作实例:

     
    1. [root@server1 ~]# iptables -A INPUT -i eth0 
      -p udp --dport 137:139 -j REJECT  
    2. [root@server1 ~]# iptables -I INPUT 2 -i eth1 
      -p udp -m multiport --dports 80,443 -j APPECT 

    操作分解:

    -i eth0:表示针对从eth0网卡进入的信息包进行操作。

    -p udp --dport 137:139:表示针对访问目标协议为UDP且端口为137-139的信息包进行处理。

    -I INPUT 2:在INPUT链的第2行进行规则插入操作。

    -p tcp -m multiport --dports 80,443:表示针对访问目标协议为TCP且端口为80或443的信息包进行处理。

    -j APPECT:允许符合规则的信息包通过。

    全句解释:

    第1句:使用Iptables在过滤列表的INPUT链中追加规则,一旦发现通过eth0网卡接口从外部要求访问本机网络服务且访问协议为UDP、目标访问端口为137-139的信息包,就马上将其拒绝。

    第2句:使用Iptables在过滤列表的INPUT链的第2行插入规则,一旦发现通过eth

     

    展开全文
  • 当时Linux 2.2系列内核刚发布不久,2.2.x中全新的IPChains代替了从BSD中移植来的ipfw,在性能和配置方面得到了各方的好评,因此我们初步决定采用Linux系统配置IPChains来作为新的包过滤防火墙。  此外,还有IP...
  • linux 比Windows更高效

    千次阅读 2012-11-04 14:56:01
    Linux比windows更适合工作和娱乐(转帖)   ...xiaoyuanmcu发布于 2012-11-03 | 212次阅读 字号: 大 ...Linux 高效的完成了我所有的工作。 GNU/Linux 不是每个人都想用的。如果你只需要处理一般的
  • Linux下Libpcap源码分析和包过滤机制

    千次阅读 2012-09-21 16:39:53
    Libpcap可以在绝大多数类unix平台下工作,本文分析了libpcap在linux 下的源代码实现,其中重点是linux的底层包捕获机制和过滤器设置方式,同时也简要的讨论了 libpcap使用的包过滤机制 BPF。 网络监控 绝 大多数的...
  • linux中grep命令数据过滤和筛选

    千次阅读 2020-07-05 23:08:25
    Linux世界中有句古老的说法“一切皆文件”,而且很多配置文件是纯文本文件,工作中,我们时常需要对大量的服务器进行配置的修改,如果以手动方式在海量的数据中进行查找匹配并最终完成修改,则其效率极低。...
  • Linux实现路由器和包过滤防火墙

    千次阅读 2005-11-30 15:50:00
    Linux实现路由器和包过滤防火墙 【路由器和防火墙】 路由器是一种广泛运用在IP网段之间的设备,市场上有许多现成的产品。在应用中,我们经常将路由器跨接在广域网和局域网之间,大多数的路由器产品也就是基于这种...
  • Linux下无论如何都是要用到shell命令的,在Shell的实际使用中,有编程经验的很容易上手,但稍微有难度的是shell里面的那些个符号,各种特殊的符号在我们编写Shell脚本的时候如果能够用的好,往往能给我们起到...
  • 常用的高效linux命令

    2010-05-05 13:45:00
    做1G文件 dd if=/dev/zero of=/home/1g.img bs=1G count=1 ...-i 之后可作为过滤条件 lsof -i tcp@alarm.im.alisoft.com   vim 过滤c++类函数 grep -rni CIMCheckVersion:: IMCheckV*.cpp
  • 一。内容过滤防火墙系统简介1。1 技术背景(方法,软件)所采用的技术:1.1.1 模块编程 也...1.1.2 防火墙技术 作为一个内容过滤防火墙系统,具有防火墙功能可以说是必不可少的(虽然本程序主要功能是对内容进行过滤
  • linux下的高效代码搜索工具grep-ack

    千次阅读 2018-04-27 09:43:57
    这些命令在linux上的适用频率是相当高的,尤其是你用vim做为IDE的话(当然这是说在不知道ack之前)。 ack功能划分 在记忆的时候大体上可以分为这几个部分: Searching代码搜索 Search output搜索结果处理 File ...
  • lsm是linux可加载的安全模块,它非常简单,这个机制又一次体现了linux内核的高度可定制特性,它的效率很高,不会带来很大的开销,这一切归功于内核考虑的周到以及内核架构的高级 如果你了解linux的netfilter,你是否...
  • (转)为Linux服务器部署高效防毒软件

    千次阅读 2008-03-09 15:06:00
    作为一个操作系统,Linux对病毒的抵抗能力是人所共知的。这主要得力于其优秀的技术设计,这不仅使它的作业系统难以宕机,而且也使其难以被滥用。首先,Linux早期的使用者一般都是专业人士,就算是今天,虽然其使用者...
  • Linux 命令有许多强大的功能:从简单的磁盘操作、文件存取,到进行复杂的多媒体图像和流媒体文件的制作,都离不开命令行。 在 Linux 的学习中,新手都会遇到这么一个问题:自己对系统的每个命令都很熟悉,但是在...
  • linux下的高效代码搜索工具-ack

    万次阅读 2014-03-04 16:46:55
    没错,它可以查找文件,以省去你要不断的结合find和grep的麻烦,虽然在linux的思想是一个工具做好一件事。 ack-grep -f hello.py # 查找全匹配文件 ack-grep -g hello.py$ # 查找正则匹配文件 ack-grep -g hello ...
  • Linux 就该这么学

    万次阅读 多人点赞 2018-08-14 00:44:41
    本书源自日均阅读量近万次火爆的线上同名课程,口碑与影响力俱佳,旨在打造简单易学且实用性强的轻量级 Linux 入门教程。 本书基于红帽 RHEL 系统编写,且内容通用于 CentOS、Fedora 等系统。本书共分为20章,内容...
  • linux 基础

    千次阅读 多人点赞 2019-05-08 09:37:17
    linux 基础linux 系统的文件1. 文件与文件夹2.Linux系统文件目录结构/Bin:/dev:/boot :/etc :/etc/xinetd.d/ :/home :/lib:/media:/mnt:/opt:/root:/sbin :/srv:/tmp:Linux 的基本指令1. 指令与选项二、基础...
  • Linux运维常见面试题汇总

    万次阅读 多人点赞 2016-10-19 09:01:08
    Linux面试题 一、填空题 1. 在Linux 系统 中,以文件方式访问设备 。 2. Linux 内核引导时,从文件/etc/fstab中读取要加载的文件系统 。 3. Linux 文件系统中每个文件用indoe节点来标识。 4. 全部磁盘块由...
  • Linux正则表达式

    千次阅读 2018-08-15 20:06:48
    什么是正则表达式? 简单的说,正则表达式...linux的正则表达式,最常应用正则表达式的命令就是grep、egrpe、sed、awk,换句话说linux三剑客要想能工作的更高效,那一定离不开正则表达式的配合。 正则表达式和我...
  • 00. 目录 ...tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,197
精华内容 12,878
关键字:

linux高效过滤

linux 订阅