首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

程序员面向 Linux 的设置 优化机器来满足需要-1

程序员面向 Linux 的设置 优化机器来满足需要-1

入门本文旨在面向中高级 Linux 用户。应该安装 Perl 5.6.0,或至少 5.005才能完成某些示例。这里将会提到 Emacs 编辑器,如果希望尝试 Emacs示例,需要安装它。还会提到 Enlightenment 窗口管理器,它需要和 Eterm终端仿真器一起安装,但大多数最近的窗口管理器和终端仿真器都具有与Enlightenment 和 Eterm 在本文环境中提供的类似的那些特性。
您应该习惯于编辑文件,进行系统修改、从源码安装 Linux软件包,并愿意使用Linux。如果您不熟悉这些任务的话,在尝试这里描述的任何操作的时候要格外小心,并且注意将每样事物进行备份。(在任何情况下这都不失为一个好的做法。)
tcsh 定制我使用 tcsh 作为主要登录 shell。很容易将示例转换成由 bash、zsh或其它 shell 使用。我使用 tcsh shell好几年了,但这并不意味着说对每个人都适合。
tcsh shell 使用一些初始化 (rc) 文件。在 UNIX 中,rc(发音为:"arcee")文件是由程序在初始化时读取的文件。rc 名字来自文件名的公共"rc" 后缀(例如,"tcshrc" 用于 tcsh shell,"exrc" 用于标准 vi编辑器)。rc 文件有时还称作 "dot" 文件,因为它们以一个点 (dot)开头,这样可以在正常的目录列表中隐藏起来。
我所进行的 tcsh shell 定制位于 .cshrc、.login 和 .logout文件中。其他人使用 .tcshrc 而不是 .cshrc,但除非您也使用 C (csh)shell(其实不应该使用它;tcsh 更好),否则没什么差异。
.login 文件是为登录 shell 执行的第一个文件:
清单 1:我的 .login 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
stty erase \^?
echo TERM = $TERM
switch ($HOST)
    case "workmachine":
        fetchmail
    breaksw
    case "homemachine":
        fortune
        echo "---"
        from | tail
        mesg y
        echo "---"
    breaksw
    default:
    breaksw
endsw




"stty erase"那一行将擦除字符设置成删除键。我比较喜欢这个设置,因为我习惯于使用删除键来向后擦除,但如果您觉得缺省值很适合您,就不必更改它。
然后,echo语句打印出当前的终端。我之所以这样做是因为可以知道是否支持 xterm能力,但这不那么重要。
后面跟着 switch 语句。它在形式上与 C switch() 语句类似(毕竟 C[csh] shell 以及稍后的 tcsh shell都沿袭了它)。根据不同的主机名,可以运行fetchmail(我在我的工作机器上每个登录 shell 中运行它,因为多个fetchmail 的副本相互之间不影响),或者在本地运行其它一些命令。
本地机器的命令如下:print afortune(试一下;非常有趣!);然后是除数("---");然后是邮箱中最后几条消息;然后打开分页面许可权;然后打印另一个除数。
命令还有一种缺省情况,应该可以随处运行。但未在我的环境中使用。
在 .login 文件之后,tcsh shell 经过 .cshrc 文件(它更喜欢使用tcshrc 文件,但如果只能使用 .cshrc 的话也只能将就了)。
中的代码是特定于 shell 的,意味着它不直接与任何其它 shell相接。一般来说,特定于 shell 的设置是使用 "set"命令设置的,而环境设置是使用 "setenv" 设置的。路径是个例外,因为tcsh shell 维护着 $PATH 和 $path 的同步,所以可以使用 set 或 setenv来设置路径。这是个人喜好的问题。      
set 和 setenv 的反操作是 unset 和 unsetenv。只有 set 或 setenv才打印出 shell 和环境设置的列表。
就我个人来看,我认为环境和 shell 设置之间的差异是 tcsh最糟糕的一个方面。我会使用其中一个,但不会同时使用它们。当前的设计强迫我同时使用它们。
清单 3:我的 .cshrc 文件,第 2 部分:环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# another switch statement
switch ($HOST)
    case "homemachine":
        # from home, I use my work machine's external network interface
    setenv CVSROOT tzz@workmachine-external:/cvsroot
        # of course, ssh is the only protocol allowed.  rsh is insecure.
    setenv CVS_RSH ssh
        # my NNTP server at home
    setenv NNTPSERVER nntp
        # give Emacs a name, for Enlightenment positioning
    alias emacs emacs -name workmachine-emacs
    breaksw
    case "homemachine-2":
        # same as homemachine
    setenv CVSROOT tzz@workmachine-external:/cvsroot
    setenv CVS_RSH ssh
        # but this is a Solaris machine, so use mailx (I could have used
    # OSTYPE instead of $HOST for generality)
    alias mail mailx
    breaksw
    default:
        # default CVS root for all machine at work.  Leave rsh as the
    # default transport.
    setenv CVSROOT tzz@workmachine:/cvsroot
    breaksw
endsw




中的环境设置主要考虑是否正确设置了 CVS 资源库根。如果使用CVS,这是自动设置事物以使所有 CVS命令可以从任何机器上使用的一种简便方法。另外,我给主要 Emacs窗口提供了一个名称,这样 Enlightenment 可以准确地找到它。      
我应该使用 $OSTYPE 而不是 $HOST,并设置单独的 switch()语句来处理 Solaris;但所有为将 mail 取别名为 mailx的语句对我来说都似乎有些多余。
要尝试下面定义的别名,只需要在提示上输入它们。"abc"别名将自己在一行上打印 "foreach?" 并等待您的输入。例如,如果输入"echo $a",然后在下一个提示上输入 "end", "echo" 命令将在 $a 中运行1 到 9,然后从 A 到 Z,然后从 a 到 z。
最后,我的 .logout 非常简单。它是在登录 shell退出时执行的一系列命令,但只在我的本地机器上。在所有其它机器上,它什么都不做。
清单 5:我的 .logout 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
switch ($HOST)
    case "homemachine":
        # save the list of subscribed newsgroups, just in case:
        # save only the first 2000 characters of each lines (the
    # .newsrc file can have very long lines), then filter out the
    # unsubscribed newsgroups, and save the output in ~/.subbed
    cut -c 1-2000 ~/.newsrc | egrep -v "!" > ~/.subbed
        # remove any dead letter files (/bin/mail generates them)
    rm ~/dead.letter
    breaksw
    default:
    breaksw
endsw



返回列表