2011年1月26日星期三

转:makefile编写

MakeFile的编写
1.最原始的编写方法:
  例如 file1.c:
        #include <stdio.h>
              #include "file2.h"
              int main()
              {
                     printf("print file\n");
                     File2Print();
                     return 0;
              }
    file2.h //省略
    file2.c //省略
=== makefile 开始 ===
A: B
(tab)<command>
(tab)<command>
              helloworld:file1.o file2.o //helloworld依赖file1.o file2.o两个目标文件。
                     gcc file1.o file2.o -o helloworld
              file1.o:file1.c file2.h   //file1.o依赖file1.c和file2.h两个文件
                     gcc -c file1.c -o file1.o
               file2.o:file2.c file2.h
                     gcc -c file2.c -o file2.o
              clean:
                     rm -rf *.o helloworld
       === makefile 结束 ===
2.原始方法的改进
       === makefile 开始 ===
              OBJS = file1.o file2.o
              CC = gcc
              CFLAGS = -Wall -O -g //警告,编译优化,编译debug版
              helloworld : $(OBJS)
                     $(CC) $(OBJS) -o helloworld
              file1.o : file1.c file2.h
                     $(CC) $(CFLAGS) -c file1.c -o file1.o
              file2.o : file2.c file2.h
                     $(CC) $(CFLAGS) -c file2.c -o file2.o
              clean:
                     rm -rf *.o helloworld
=== makefile 结束 ===
3.使用默认变量写
       === makefile 开始 ===
              CC = gcc
              XX = g++
              CFLAGS = -Wall -O –g
              TARGET = ./helloworld
              %.o: %.c
                     $(CC) $(CFLAGS) -c $< -o $@
              %.o:%.cpp
                     $(XX) $(CFLAGS) -c $< -o $@
              SOURCES = $(wildcard *.c *.cpp)
              OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))
              $(TARGET) : $(OBJS)
                     $(XX) $(OBJS) -o $(TARGET)
                     chmod a+x $(TARGET)
clean:
       rm -rf *.o helloworld
=== makefile 结束 ===
函数1:wildcard
       产生一个所有以 '.c' 结尾的文件的列表。
       SOURCES = $(wildcard *.c *.cpp)表示产生一个所有以 .c,.cpp结尾的文件的列表,然后存入变量 SOURCES 里。
函数2:patsubst
       匹配替换,有三个参数。第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要被处理的由空格分隔的列表。
OBJS = $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCES)))表示把文件列表中所有的.c,.cpp字符变成.o,形成一个新的文件列表,然后存入OBJS变量中。
%.o: %.c
       $(CC) $(CFLAGS) -c $< -o $@
%.o:%.cpp
       $(XX) $(CFLAGS) -c $< -o $@
       这几句命令表示把所有的.c,.cpp编译成.o文件。
       这里有三个比较有用的内部变量。$@ 扩展成当前规则的目的文件名, $< 扩展成依靠       列表中的第一个依靠文件,而 $^ 扩展成整个依靠的列表(除掉了里面所有重 复的文件名)。
       chmod a+x $(TARGET)表示把helloworld强制变成可执行文件。
       到这里,我想你已经能够编写一个比较简单也比较通用的Makefile文件了,上面所有的例子都假定所有的文件都在同一个目录下,不包括子目录。
       那么文件不在一个目录可以吗?
       怎么编写Makefile生成静态库?
       你还想更上一层楼吗?

2011年1月1日星期六

2011

  2010刚刚翻过去,很多人对过去的这一年做了总结,我也写一个吧。
  回顾这一年,很多原本打算做的事情都没有完成,不过总体来说是成长的一年。
  很幸运的在这一年发表了一篇文章,让自己在接下来的时间相对于其他同学,压力要小很多,搞笑点儿说,如果学分修够,我就可以提前毕业了。独自一人跨洋去巴塞罗那参加了EMCL PKDD的会议,做了文章的报告。一路上遇到很多热心的人,让我本来忐忑的心感到了些许温暖。
  对自己的未来做了一个小的规划,放弃了出国读博的想法,觉得自己还是喜欢在实践中提高,不希望自己以后只做纯理论研究。于是,不再将重心放在读论文,也开始着手进行编程的练习。进步的很慢,确实需要一个过程,我需要坚持。
  对家人,对朋友,对实验室,都有了一些新的认识和理解,一点点的内化和成长。
  2011年,是有一些展望的。希望自己能稳重些,不要再孩子气了。希望自己能大气些,难得糊涂。希望自己更努力些,为了梦想去努力奋斗。以前总是给自己定很多量化的任务,而且很多。这一次,依然量化,但不多。推荐系统+算法,是接下来9个月的主旋律。

2010年12月26日星期日

vim关闭缓冲区

在下载了好多插件把个vim搞地乱七八糟的时候,终于安装了一个纯净版的vim,没有任何插件,用他来编辑文件,但是用vim的时候,打开多个文件,使用:close命令关闭的时候,总是提示我E444错误,说这是最后个窗口不能关闭,

而我这时明明是打开多个文件的,怎么能是最后一个窗口哪,郁闷了,使用:ls命令看了一个明明有好几个文件正在编辑嘛,怎么能说我是最后一个窗口哪,

没办法找到vim手册,看到了如下这一段话,实际上我打开的是缓冲区,哈哈,我想要关闭的也是缓冲区,而close命令关闭的是窗口,所以才会出现e444错误,哈哈,放在这里纪念一下.

*22.4* 缓冲区列表


Vim 编辑器使用术语 "缓冲区" 来描述编辑当中的文件。实际上,缓冲区是你编辑的文件
的副本。你修改完缓冲区,就把缓冲区的内容写进文件。缓冲区不仅存放文件内容,而且
还存放着全部标记,设定,以及其它跟被编辑文件相关的东西。


隐 藏 的 缓 冲 区

假设你在编辑文件 one.txt,同时又要编辑文件 two.txt。你本来可以简单地用 ":edit
two.txt" 来办到,但由于你已经修改了 one.txt,那样做就没用了。而你又不想在此时
就把 one.txt 存盘。Vim 可以为你解决这个问题:

        :hide edit two.txt

缓冲区 "one.txt" 从屏幕消失,但 Vim 仍然知道你在编辑这个缓冲区,因而保留着它修
改过的文本。这样的缓冲区称为隐藏的缓冲区: 缓冲区存放着文本,但你看不见它。
   命令 ":hide" 的参数是另一个命令。它使得那个命令表现得就像 'hidden' 选项已被
设定。你也可以不用 ":hide" 命令而设定 'hidden' 选项。其作用是当离开任何缓冲区
时,该缓冲区变成隐藏。
   小心!当你的隐藏的缓冲区已经改动,千万不要在所有缓冲区存盘之前就退出 Vim。


非 激 活 缓 冲 区

   一个缓冲区一经使用,Vim 就记住了一些有关该缓冲区的信息。即使它既不显示在窗
口内,又非隐藏缓冲区,它也仍然在缓冲区列表上。这样的缓冲区称为非激活缓冲区。一
般而言,

   激活         显示在窗口内,并加载文本
   隐藏         不显示在窗口内,但加载文本
   非激活       不显示在窗口内,不加载文本

非激活缓冲区不会被遗忘,因为 Vim 保存着关于它们的信息,如标记等。而且记住文件
名有个好处,你可以调阅你编辑过的文件名,再次编辑它们。


缓 冲 区 列 表

你可以用这个命令查看缓冲区列表:

        :buffers

另一个作用相当的命令,虽然意思不那么明白,但键入时省事多了:

        :ls

其输出可能像这样:

1 #h "help.txt"                      line 62
2 %a+ "usr_21.txt"                    line 1
3     "usr_toc.txt"                   line 1

第一栏存放缓冲区号。你可以利用它来编辑文件,而不用键入文件名,参见下文。
   紧随缓冲区号的是些标志位。然后是文件名,以及光标最后一次停留的行号。
   可能出现的标志位有以下这些 (自左至右):

        u       列表外缓冲区 |unlisted-buffer|。
         %      当前缓冲区。
         #      轮换缓冲区。
          a     激活缓冲区,缓冲区被加载且显示。
          h     隐藏缓冲区,缓冲区被加载但不显示。
           =    只读缓冲区。
           -    不可改缓冲区, 'modifiable' 选项不置位。
            +   已修改缓冲区。


编 辑 缓 冲 区

你可以通过指定其缓冲区号来编辑一个缓冲区,而不必键入文件名:

        :buffer 2

但获知缓冲区号的唯一途径是查阅缓冲区列表。如果不用缓冲区号,你可以用文件名,或
其部分:

        :buffer help

Vim 将为你键入的文件名找到最佳匹配。如果只有一个缓冲区与之匹配,该缓冲区就被选
用。在这个例子中,被选中的就是 "help.txt"。
   要在新窗口中打开一个缓冲区:

        :sbuffer 3

这方法也适用于文件名。


使 用 缓 冲 区 列 表

你可以用这些命令在缓冲区列表间移动:

        :bnext          编辑下一个缓冲区
        :bprevious      编辑前一个缓冲区
        :bfirst         编辑第一个缓冲区
        :blast          编辑最后一个缓冲区

要从缓冲区列表上删除一个缓冲区,用这个命令:

        :bdelete 3

同样,这命令也适用文件名。
   如果你删除了一个激活的缓冲区 (显示在窗口中的缓冲区),你也就关闭了该窗口。如
果你删除了当前缓冲区,你也就关闭了当前窗口。如果它是最后一个窗口,Vim 将找一个
缓冲区来编辑。你无法什么也不编辑!

        备注:
        即使用 ":bdelete" 命令删除了缓冲区以后,Vim 依然记得它。这个缓冲区实际
        上成了 "列表外" 缓冲区,它不再出现在 ":buffers" 命令所报告的列表中。不
        过 ":buffers!" 命令仍会列出 "列表外" 缓冲区 (没错,Vim 无所不能)。要让
        Vim 彻底忘记一个缓冲区,用 ":bwipe" 命令。另见 'buflisted' 选项。

转:vim 多文件编辑 / 缓冲区命令

多文件编辑 / 缓冲区命令vim下每一个打开的文件对应一个缓冲区(buffer)。
多文件编辑会有两种情形,一种是在进入 vim 前所用的参数就是多个文件(这种情形称为 argument list)。另一种情形是进入 vim 后另外再开其它的文件(称为 buffer list)。不过都可以统称为buffer。

5.1 打开文件
vi flname1 flname2… flnameN
将多个文件调入缓冲,是 argument list。
:e filename
这是在进入 vim 后,在不离开 vim 的情形下再开其它文件,只要您要编辑的档案是在目前目录,Tab 补全键还是可以使用。是buffer list。
注意::e 或者:new 或者:split 后边可以跟目录,这样就可以在目录下慢慢找要打开的文件了
5.2 缓冲区跳转
:n 编辑下一个文件。
:2n 编辑下二个文件。
:N 编辑前一个文件。注意,这种用法只能用于 argument list 的情形。
:rew 回到首文件
:args 查看当前编辑缓冲文件状态
:e# 或 Ctrl-^ 编辑前一个档案,用于两文件互相编辑时相当好用。这种用法不管是 argument list 或buffer list 档案间皆可使用。 使用Ctrl-^ 命令更便捷,但如终端类型不正确该功能将无效。
用:ls来显示缓冲区中的文件,编号后边有#的代表是前一个文件,可以通过:e#来进入,有%a的代表是当前文件,什么也没有的可以通过:bn来进入,这里的n代表文件编号。
:b文件名或编号 移至该文件。
在 :ls 中就会出示各文件的编号,这个编号在未离开 vim 前是不会变的。这个指令 elvis 也是可以使用。当然 :e#编号 也是可以的,这样的用法则是所有 vi clone 都通用了。
在 buffers 中,减号 - 表示这个 buffer 并未载入,不过,不必担心,载入相当快速的。加号 + 表示这个 buffer 已经修改过了。
:bn buffer next。这里的n代表字母n
:bl buffer last。
以上两个指令 elvis 不适用。
如果您是使用 vim 的 GUI,那就在菜单上就会有 Buffers 这个选项,可以很容易的知道及移动各buffer 间。

5.3 移除缓冲区
:bd(elete) buffer 在未离开 vim 前是不会移除的,可使用这个指令移除。其实移除它干什么呢?vim是您在叫用时才会载入的,因此这些 buffers 并不是像 cache 一般要占内存的。
5.4 重新编辑
放弃一修改过的文件,重新编辑。
(1)使用命令 :q!强行退出后再vi flname重新进入。
(2)使用命令 :e!强行重编辑更便捷。这样也是会打开文件,但会放弃目前编辑文件的改变,否则如果文件已有变动,vim 预设是不让您随便离开的。:e! 后不接什么的话,代表舍弃一切修改,重新载入编辑中文件。

5.5 其他命令
:files 或 :buffers 或 :ls 会列出目前 buffer 中的所有文件。
在 elvis 中可使用 :b 来叫出 buffers。
:f 或 Ctrl-g 显示目前编辑的文件名、是否经过修改及目前光标所在之位置。
:f 文件名 改变编辑中的文件名。(file)
:r 文件名 在光标所在处插入一个文件的内容。(read)
:35 r 文件名 将文件插入至 35 行之后。
gf 这是 vim 的特殊打开文件的方法,会打开光标所在处的 word 为名的文件,当然,这个文件要在当前目录内,否则会创建新文件。

2010年12月24日星期五

vim 改装成IDE编程环境

1. whereis vim 找到vim的安装路径
#whereis vim
vim: /usr/bin/vim /usr/bin/vim.tiny /usr/bin/vim.basic /etc/vim /usr/share/vim /usr/share/man/man1/vim.1.gz

2.中文帮助手册的安装
安装方法:  
在下面的网站下载中文帮助的文件包:
http://vimcdoc.sf.net       (English)
http://vcd.gro.clinux.org    (中文)
下载 vimcdoc-1.8.0.tar.gz
解压后其中有个doc文件夹, 将其中的内容全部复制到/usr/share/vim/vim/vim72/doc
注意:
a. 如果无法显示中文, 在~/.vimrc中增加下面这句试试:
   set helplang=cn
b. 帮助文件的文本是utf-8编码的, 如果想用vim直接查看, 需要在~/.vimrc中设置:
   set encoding=utf-8

3 vim常用的命令

建议先看看帮助手册中的下面章节, 其中有关tags文件的部分你可以先跳过, 在后面的章节中会讲到, 到时候你在回来看看, 就觉得很简单了:
:help usr_29
:help usr_30
下面是我常用的一些命令, 放在这里供我备忘:
% 跳转到配对的括号去
[[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
gD 跳转到局部变量的定义处
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
mx 设置书签,x只能是a-z的26个字母
`x 跳转到书签处("`"是1左边的键)
> 增加缩进,"x>"表示增加以下x行的缩进
< 减少缩进,"x<"表示减少以下x行的缩进

5. 程序中跳来跳去,ctag的使用
tags文件是由ctags程序产生的一个索引文件, ctags程序其是叫"Exuberant Ctags", 是Unix上面ctags程序的替代品, 并且比它功能强大, 是大多数Linux发行版上默认的ctags程序. 那么tags文件是做什么用的呢? 如果你在读程序时看了一个函数调用, 或者一个变量, 或者一个宏等等, 你想知道它们的定义在哪儿, 怎么办呢? 用grep? 那会搜出很多不相干的地方. 现在流行用是的<C-]>, 谁用谁知道呀, 当光标在某个函数或变量上时, 按下"Ctrl+]", 光标会自动跳转到其定义处
在这个网站: http://ctags.sourceforge.net, 下载一个类似 ctags-5.6.tar.gz 的文件下来
用下面的命令解压安装:
$ tar -xzvf ctags-5.8.tar.gz
$ cd ctags-5.8
$./configure
$ make
# make install   // 需要root权限

然后去你的源码目录, 如果你的源码是多层的目录, 就去最上层的目录, 在该目录下运行命令: ctags -R
我现在以 vim71 的源码目录做演示
$ cd /home/wooin/vim71
$ ctags -R
此时在/home/wooin/vim71目录下会生成一个 tags 文件, 现在用vim打开 /home/wooin/vim71/src/main.c
$ vim /home/wooin/vim71/src/main.c
再在vim中运行命令:
:set tags=/home/wooin/vim71/tags
该命令将tags文件加入到vim中来, 你也可以将这句话放到~/.vimrc中去, 如果你经常在这个工程编程的话.
如果此时你还想再跳回刚才的位置, 你还可以按<C-T>, 这样又跳回到setmouse()函数被调用的地方了, 变量, 结构, 宏, 等等, 都可以的,

此时在回头学习一下第3节中说的vim手册吧
:help usr_29

不过还有一个小瑕疵, 你修改程序后, 比如增加了函数定义, 删除了变量定义, tags文件不能自动rebuild, 你必须手动再运行一下命令:
$ ctags -R
使tags文件更新一下, 不过让人感到欣慰的是vim不用重新启动, 正在编写的程序也不用退出, 马上就可以又正确使用<C-]>和<C-T>了.
6.TagList功能:高效地浏览源码, 其功能就像vc中的workpace, 那里面列出了当前文件中的所有宏,全局变量, 函数名等.
安装方法:

1),下载:http://vim-taglist.sourceforge.net/download.html

2), 解压下载文件,将plugin/taglist.vim 拷贝到 $HOME/.vimrc/plugin/taglist.vim

doc/taglist.txt         拷贝到 $HOME/.vimrc/doc/taglist.txt

3),配置.vimrc文件,加入下面几行配置

    ” 设置TList
    let Tlist_Use_LEFT_Window=1
    let Tlist_File_Fold_Auto_Close=1
    let Tlist_Show_One_File=1
    let Tlist_GainFocus_On_ToggleOpen=1
    let Tlist_Exit_OnlyWindow=1
    let g:winManagerWindowLayout=’FileExplorer’
    nmap tl :Tlist<cr>

4),使用:打开一个代码文件,输入tl 即可看到该文件的代码结构
7.文件浏览器和窗口管理器 -- 插件: WinManager
1)下载地址 http://www.vim.org/scripts/script.php?script_id=95
2)下载的winmanager.zip解压到/usr/share/ vim下,
winmanager.zip解压后,plugin下的文件放入 vim/vim72/plugin下
doc下的文件放入/vim/vim72/doc下
3)现在在你的~/.vimrc中增加下面两句
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle<cr>
其中左上边是netrw窗口, 左下边是TagList窗口, 当再次输入"wm"命令时这两个窗口又关闭了      





linux下复制一个文件夹里的所有内容到另一个文件夹

sudo cp -a ~/Desktop/fonts/* /usr/share/fonts/zh_CN

linux下各文件夹的作用

inux下的文件结构,看看每个文件夹都是干吗用的
/bin 二进制可执行命令
/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公用的临时文件存储点
/root 系统管理员的主目录(呵呵,特权阶级)
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
/lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:
/usr/x11r6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库
通常情况下,根文件系统所占空间一般应该比较小,因为其中的绝大部分文件都不需要
经常改动,而且包括严格的文件和一个小的不经常改变的文件系统不容易损坏。
除了可能的一个叫/ v m l i n u z标准的系统引导映像之外,根目录一般不含任何文件。所有
其他文件在根文件系统的子目录中。
1. /bin目录
/ b i n目录包含了引导启动所需的命令或普通用户可能用的命令(可能在引导启动后)。这些
命令都是二进制文件的可执行程序( b i n是b i n a r y - -二进制的简称),多是系统中重要的系统文件。
2. /sbin目录
/ s b i n目录类似/bin ,也用于存储二进制文件。因为其中的大部分文件多是系统管理员使
用的基本的系统程序,所以虽然普通用户必要且允许时可以使用,但一般不给普通用户使用。
3. /etc目录
/ e t c目录存放着各种系统配置文件,其中包括了用户信息文件/ e t c / p a s s w d,系统初始化文
件/ e t c / r c等。l i n u x正是*这些文件才得以正常地运行。
4. /root目录
/root 目录是超级用户的目录。
5. /lib目录
/ l i b目录是根文件系统上的程序所需的共享库,存放了根文件系统程序运行所需的共享文
件。这些文件包含了可被许多程序共享的代码,以避免每个程序都包含有相同的子程序的副
本,故可以使得可执行文件变得更小,节省空间。
6. /lib/modules 目录
/lib/modules 目录包含系统核心可加载各种模块,尤其是那些在恢复损坏的系统时重新引
导系统所需的模块(例如网络和文件系统驱动)。
7. /dev目录
/ d e v目录存放了设备文件,即设备驱动程序,用户通过这些文件访问外部设备。比如,用
户可以通过访问/ d e v / m o u s e来访问鼠标的输入,就像访问其他文件一样。
8. /tmp目录
/tmp 目录存放程序在运行时产生的信息和数据。但在引导启动后,运行的程序最好使用
/ v a r / t m p来代替/tmp ,因为前者可能拥有一个更大的磁盘空间。
9. /boot目录
/ b o o t目录存放引导加载器(bootstrap loader)使用的文件,如l i l o,核心映像也经常放在这里,
而不是放在根目录中。但是如果有许多核心映像,这个目录就可能变得很大,这时使用单独的
文件系统会更好一些。还有一点要注意的是,要确保核心映像必须在i d e硬盘的前1 0 2 4柱面内。
10. /mnt目录
/ m n t目录是系统管理员临时安装( m o u n t )文件系统的安装点。程序并不自动支持安装到
/mnt 。/mnt 下面可以分为许多子目录,例如/mnt/dosa 可能是使用m s d o s文件系统的软驱,
而/mnt/exta 可能是使用e x t 2文件系统的软驱,/mnt/cdrom 光驱等等。
11. /proc, /usr,/var,/home目录
其他文件系统的安装点。
下面详细介绍;
/etc文件系统
/etc 目录包含各种系统配置文件,下面说明其中的一些。其他的你应该知道它们属于哪个
程序,并阅读该程序的m a n页。许多网络配置文件也在/etc 中。
1. /etc/rc或/etc/rc.d或/etc/rc?.d
启动、或改变运行级时运行的脚本或脚本的目录。
2. /etc/passwd
用户数据库,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其
他信息。
3. /etc/fdprm
软盘参数表,用以说明不同的软盘格式。可用setfdprm 进行设置。更多的信息见s e t f d p r m
的帮助页。
4. /etc/fstab
指定启动时需要自动安装的文件系统列表。也包括用swapon -a启用的s w a p区的信息。
5. /etc/group
类似/etc/passwd ,但说明的不是用户信息而是组的信息。包括组的各种数据。
6. /etc/inittab
init 的配置文件。
7. /etc/issue
包括用户在登录提示符前的输出信息。通常包括系统的一段短说明或欢迎信息。具体内
容由系统管理员确定。
8. /etc/magic
“f i l e”的配置文件。包含不同文件格式的说明,“f i l e”基于它猜测文件类型。
9. /etc/motd
m o t d是message of the day的缩写,用户成功登录后自动输出。内容由系统管理员确定。
常用于通告信息,如计划关机时间的警告等。
10. /etc/mtab
当前安装的文件系统列表。由脚本( s c r i t p )初始化,并由mount 命令自动更新。当需要一
个当前安装的文件系统的列表时使用(例如df 命令)。
11. /etc/shadow
在安装了影子( s h a d o w )口令软件的系统上的影子口令文件。影子口令文件将/ e t c / p a s s w d
文件中的加密口令移动到/ e t c / s h a d o w中,而后者只对超级用户( r o o t )可读。这使破译口令更困
难,以此增加系统的安全性。
12. /etc/login.defs
l o g i n命令的配置文件。
13. /etc/printcap
类似/etc/termcap ,但针对打印机。语法不同。
14. /etc/profile 、/ e t c / c s h . l o g i n、/etc/csh.cshrc
登录或启动时b o u r n e或c shells执行的文件。这允许系统管理员为所有用户建立全局缺省环境。
15. /etc/securetty
确认安全终端,即哪个终端允许超级用户( r o o t )登录。一般只列出虚拟控制台,这样就不
可能(至少很困难)通过调制解调器( m o d e m )或网络闯入系统并得到超级用户特权。
16. /etc/shells
列出可以使用的s h e l l。chsh 命令允许用户在本文件指定范围内改变登录的s h e l l。提供一
台机器f t p服务的服务进程ftpd 检查用户s h e l l是否列在/etc/shells 文件中,如果不是,将不允
许该用户登录。
17. /etc/termcap
终端性能数据库。说明不同的终端用什么“转义序列”控制。写程序时不直接输出转义
序列(这样只能工作于特定品牌的终端),而是从/etc/termcap 中查找要做的工作的正确序列。
这样,多数的程序可以在多数终端上运行。
/dev文件系统
/dev 目录包括所有设备的设备文件。设备文件用特定的约定命名,这在设备列表中说明。
设备文件在安装时由系统产生,以后可以用/dev/makedev 描述。/ d e v / m a k e d e v.local 是
系统管理员为本地设备文件(或连接)写的描述文稿(即如一些非标准设备驱动不是标准
makedev 的一部分)。下面简要介绍/ d e v下一些常用文件。
1. /dev/console
系统控制台,也就是直接和系统连接的监视器。
2. /dev/hd
i d e硬盘驱动程序接口。如: / d e v / h d a指的是第一个硬盘, h a d 1则是指/ d e v / h d a的第一个
分区。如系统中有其他的硬盘,则依次为/ d e v / h d b、/ d e v / h d c、. . . . . .;如有多个分区则依次为
h d a 1、h d a 2 . . . . . .
3. /dev/sd
s c s i磁盘驱动程序接口。如有系统有s c s i硬盘,就不会访问/ d e v / h a d,而会访问/ d e v / s d a。
4. /dev/fd
软驱设备驱动程序。如: / d e v / f d 0指系统的第一个软盘,也就是通常所说的a:盘,
/ d e v / f d 1指第二个软盘,. . . . . .而/ d e v / f d 1 h 1 4 4 0则表示访问驱动器1中的4 . 5高密盘。
5. /dev/st
s c s i磁带驱动器驱动程序。
6. /dev/tty
提供虚拟控制台支持。如: / d e v / t t y 1指的是系统的第一个虚拟控制台, / d e v / t t y 2则是系统
的第二个虚拟控制台。
7. /dev/pty
提供远程登陆伪终端支持。在进行te l n e t登录时就要用到/ d e v / p t y设备。
8. /dev/ttys
计算机串行接口,对于d o s来说就是“ c o m 1”口。
9. /dev/cua
计算机串行接口,与调制解调器一起使用的设备。
10. /dev/null
“黑洞”,所有写入该设备的信息都将消失。例如:当想要将屏幕上的输出信息隐藏起来
时,只要将输出信息输入到/ d e v / n u l l中即可。
/usr文件系统
/usr 是个很重要的目录,通常这一文件系统很大,因为所有程序安装在这里。/usr 里的
所有文件一般来自l i n u x发行版( d i s t r i b u t i o n );本地安装的程序和其他东西在/usr/local 下,因为这样可以在升级新版系统或新发行版时无须重新安装全部程序。/usr 目录下的许多内容是
可选的,但这些功能会使用户使用系统更加有效。/ u s r可容纳许多大型的软件包和它们的配置
文件。下面列出一些重要的目录(一些不太重要的目录被省略了)。
1. /usr/x11r6
包含x wi n d o w系统的所有可执行程序、配置文件和支持文件。为简化x的开发和安装,
x的文件没有集成到系统中。x wi n d o w系统是一个功能强大的图形环境,提供了大量的图形
工具程序。用户如果对microsoft wi n d o w s或m a c h i n t o s h比较熟悉的话,就不会对x wi n d o w系统感到束手无策了。
2. /usr/x386
类似/ u s r / x 11r6 ,但是是专门给x 11 release 5的。
3. /usr/bin
集中了几乎所有用户命令,是系统的软件库。另有些命令在/bin 或/usr/local/bin 中。
4. /usr/sbin
包括了根文件系统不必要的系统管理命令,例如多数服务程序。
5. /usr/man、/ u s r / i n f o、/ u s r / d o c
这些目录包含所有手册页、g n u信息文档和各种其他文档文件。每个联机手册的“节”
都有两个子目录。例如: / u s r / m a n / m a n 1中包含联机手册第一节的源码(没有格式化的原始文
件),/ u s r / m a n / c a t 1包含第一节已格式化的内容。l联机手册分为以下九节:内部命令、系统调
用、库函数、设备、文件格式、游戏、宏软件包、系统管理和核心程序。
6. /usr/include
包含了c语言的头文件,这些文件多以. h结尾,用来描述c语言程序中用到的数据结构、
子过程和常量。为了保持一致性,这实际上应该放在/usr/lib 下,但习惯上一直沿用了这个名
字。
7. /usr/lib
包含了程序或子系统的不变的数据文件,包括一些s i t e - w i d e配置文件。名字l i b来源于库
(library); 编程的原始库也存在/usr/lib 里。当编译程序时,程序便会和其中的库进行连接。也
有许多程序把配置文件存入其中。
8. /usr/local
本地安装的软件和其他文件放在这里。这与/ u s r很相似。用户可能会在这发现一些比较大
的软件包,如t e x、e m a c s等。
/var文件系统
/var 包含系统一般运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化
或扩充的。原来/ v a r目录中有些内容是在/ u s r中的,但为了保持/ u s r目录的相对稳定,就把那
些需要经常改变的目录放到/ v a r中了。每个系统是特定的,即不通过网络与其他计算机共享。
下面列出一些重要的目录(一些不太重要的目录省略了)。
1. /var/catman
包括了格式化过的帮助( m a n )页。帮助页的源文件一般存在/ u s r / m a n / m a n中;有些m a n页
可能有预格式化的版本,存在/ u s r / m a n / c a t中。而其他的m a n页在第一次看时都需要格式化,
格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了。
(/var/catman 经常被清除,就像清除临时目录一样。)
2. /var/lib
存放系统正常运行时要改变的文件。
3. /var/local
存放/usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。注意,如果必要,
即使本地安装的程序也会使用其他/var 目录,例如/var/lock 。
4. /var/lock
锁定文件。许多程序遵循在/var/lock 中产生一个锁定文件的约定,以用来支持他们正在
使用某个特定的设备或文件。其他程序注意到这个锁定文件时,就不会再使用这个设备或文
件。
5. /var/log
各种程序的日志( l o g )文件,尤其是login (/var/log/wtmp log纪录所有到系统的登录和注
销) 和syslog (/var/log/messages 纪录存储所有核心和系统程序信息)。/var/log 里的文件经常不
确定地增长,应该定期清除。
6. /var/run
保存在下一次系统引导前有效的关于系统的信息文件。例如, /var/run/utmp 包含当前登
录的用户的信息。
7. /var/spool
放置“假脱机( s p o o l )”程序的目录,如m a i l、n e w s、打印队列和其他队列工作的目录。每
个不同的s p o o l在/var/spool 下有自己的子目录,例如,用户的邮箱就存放在/var/spool/mail 中。
8. /var/tmp
比/tmp 允许更大的或需要存在较长时间的临时文件。
注意系统管理员可能不允许/var/tmp 有很旧的文件。
/proc文件系统
/proc 文件系统是一个伪的文件系统,就是说它是一个实际上不存在的目录,因而这是一
个非常特殊的目录。它并不存在于某个磁盘上,而是由核心在内存中产生。这个目录用于提
供关于系统的信息。下面说明一些最重要的文件和目录(/proc 文件系统在proc man页中有更详
细的说明)。
1. /proc/x
关于进程x的信息目录,这一x是这一进程的标识号。每个进程在/proc 下有一个名为自
己进程号的目录。
2. /proc/cpuinfo
存放处理器( c p u )的信息,如c p u的类型、制造商、型号和性能等。
3. /proc/devices
当前运行的核心配置的设备驱动的列表。
4. /proc/dma
显示当前使用的d m a通道。
5. /proc/filesystems
核心配置的文件系统信息。
6. /proc/interrupts
显示被占用的中断信息和占用者的信息,以及被占用的数量。
7. /proc/ioports
当前使用的i / o端口。
8. /proc/kcore
系统物理内存映像。与物理内存大小完全一样,然而实际上没有占用这么多内存;它仅
仅是在程序访问它时才被创建。(注意:除非你把它拷贝到什么地方,否则/proc 下没有任何
东西占用任何磁盘空间。)
9. /proc/kmsg
核心输出的消息。也会被送到s y s l o g。
10. /proc/ksyms
核心符号表。
11. /proc/loadavg
系统“平均负载”; 3个没有意义的指示器指出系统当前的工作量。
12. /proc/meminfo
各种存储器使用信息,包括物理内存和交换分区( s w a p )。
13. /proc/modules
存放当前加载了哪些核心模块信息。
14. /proc/net
网络协议状态信息。
15. /proc/self
存放到查看/proc 的程序的进程目录的符号连接。当2个进程查看/proc 时,这将会是不同
的连接。这主要便于程序得到它自己的进程目录。
16. /proc/stat
系统的不同状态,例如,系统启动后页面发生错误的次数。
17. /proc/uptime
系统启动的时间长度。
18. /proc/version
核心版本。
复制自:http://www.cnblogs.com/amboyna/archive/2008/02/16/1070474.html