QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9247|回复: 45

Linux长篇学习日记-PDF精心排版-每日更新- 诚请指正

[复制链接]
发表于 2006-7-15 16:07:19 | 显示全部楼层 |阅读模式
第一次使用的linux是redhat 6.x , 断断续续的都不知道多少年了,现在终于有时间下定决心学下去了,从2006年07月14日起,每日更新。

      由于没有老师,没有方向,凭一腔热情与执着,因此也有些苦恼。

      在下水平一般,旨在交流,诚请指正。
____________________

主要内容:

    《我是这样学习和使用Fedora Core 5 的》,从安装及后找资料学习到使用中遇到的问题,96%以上原创,都是自己对所学的一种理解。


  目前更新至:2006年07月19日
____________________

全文下载地址:

    http://www.gisde.com/download/linux/LinuxNote.pdf


阅读说明:

    本文使用WPS Office 2005专业版创建,保存为:PDF格式,可使用:

foxitreader或Adobe Acrobat Reader阅读
发表于 2006-7-15 16:13:24 | 显示全部楼层
支持一下。
回复

使用道具 举报

发表于 2006-7-15 16:53:26 | 显示全部楼层
鼓励原创
回复

使用道具 举报

发表于 2006-7-15 18:10:21 | 显示全部楼层
贵在坚持,希望真的能成为网志哦
回复

使用道具 举报

发表于 2006-7-15 22:03:48 | 显示全部楼层
希望看到更新
回复

使用道具 举报

发表于 2006-7-16 09:47:26 | 显示全部楼层
支持。。。学习了。。。

希望LZ继续写下去~~
回复

使用道具 举报

 楼主| 发表于 2006-7-16 10:08:50 | 显示全部楼层
当然得坚持下去,而且越学越喜欢,呵呵。
回复

使用道具 举报

 楼主| 发表于 2006-7-16 10:18:22 | 显示全部楼层
[2006年07月15日]关键字:

          部分常用命令    GCC



[2006年07月15日]    内容:


一、常用命令[更多参数可查阅man xxx,查阅结速输入“q”退出]

1、ls显示文件及目录,如:ls例出当前目录下的文件和目录;又如:ls -l,使一行只输出一个文件的详细信息

2、du列出当前目录及其子目录的大小

3、df查看系统分区信息

4、compress压缩文件的一种方式,后缀名为“.Z”

权限管理命令

5、chmod 改变文件权限
      字母表示:用户类型 权根 文件名1  文件名2    如:chmod ugo +r filename1 filename2 表对属主、组成员、其它增加读权限。又如:chmod go -wx filename1 filename2 .... 表示:g和o用户 取消 w(写)和x(执行)权限。
       数籽表示:chmod 730 filename1 filename 表示:属主有(4,2,1)读写执行权,g(组用户)有xw权

6、chown改变用户主人
       chown newowner(新属主) filename
                   -R参数,表应用于目录及其子目录。

7、chgrp改变用户组
       chgrp newgroup(新用户组) filename1 filename2...
                   -R参数,表应用于目录及其子目录。
      
8、umask设置系统默认权限。

文件操作命令

9、cp命令  如:cp oldfile newfile 或 cp oldfile1 oldfile2 directory,  -R参数,表应用于目录及其子目录。另:-a参数可使文件在copy的时候尽量保留源文件的属性和结构。

10、mv命令 如mv oldfile ../newfile -u参数将不覆盖比源文件新的文件。

11、mkdir,创建一个新的目录。如:mkdir /home/gisde/note/newdirctory -p选项将确定目录是否存在,若不存在则自动生成。

12、rmdir,删除空目, -p可删除多级空目录。

13、rm,删除文件,-i,给出提示,问是否要删除。

14、alias rm=rm -i ,alias这个命令是用来定义别名的,如这样后,输入rm就等 于rm -i。

文件浏览命令

15、cat命令,类似于DOS中的type,如:cat class.txt work.txt




二、GCC编译一个简单的程序:

关键词: GCC                                          

目录:
GCC rules
开始...
预编译
编译
汇编
连接
另外两个重要选项
调试
小结
站点链接


摘要:

要想读懂本文,你需要对C语言有基本的了解,本文将介绍如何使用gcc编译器。首先,我们介绍如何在命令行方式下使用编译器编译简单的C源代码。然后,我们简要介绍一下编译器究竟作了那些工作,以及如何控制编译过程。我们也简要介绍了调试器的使用方法。

GCC rules
你能想象使用封闭源代码的私有编译器编译自由软件吗?你怎么知道编译器在你的可执行文件中加入了什么?可能会加入各种后门和木马。Ken Thompson是一个著名的黑客,他编写了一个编译器,当编译器编译自己时,就在'login'程序中留下后门和永久的木马。请到 这里阅读他对这个杰作的描述。幸运的是,我们有了gcc。当你进行 configure; make; make install 时, gcc在幕后做了很多繁重的工作。如何才能让gcc为我们工作呢?我们将开始编写一个纸牌游戏,不过我们只是为了演示编译器的功能,所以尽可能地精简了代码。我们将从头开始一步一步地做,以便理解编译过程,了解为了制作可执行文件需要做些什么,按什么顺序做。我们将看看如何编译C程序,以及如何使用编译选项让gcc按照我们的要求工作。步骤(以及所用工具)如下: 预编译 (gcc -E), 编译 (gcc), 汇编 (as),和 连接 (ld)。


开始...
首先,我们应该知道如何调用编译器。实际上,这很简单。我们将从那个著名的第一个C程序开始。(各位老前辈,请原谅我)。


#include <stdio.h>

int main()

{
  printf("Hello World!\n");
}


把这个文件保存为 game.c。 你可以在命令行下编译它:

gcc game.c

在默认情况下,C编译器将生成一个名为 a.out 的可执行文件。你可以键入如下命令运行它:
a.out

Hello World


每一次编译程序时,新的 a.out 将覆盖原来的程序。你无法知道是哪个程序创建了 a.out。我们可以通过使用 -o 编译选项,告诉 gcc我们想把可执行文件叫什么名字。我们将把这个程序叫做 game,我们可以使用任何名字,因为C没有Java那样的命名限制。
gcc -o game game.c


game
Hello World

到现在为止,我们离一个有用的程序还差得很远。如果你觉得沮丧,你可以想一想我们已经编译并运行了一个程序。因为我们将一点一点为这个程序添加功能,所以我们必须保证让它能够运行。似乎每个刚开始学编程的程序员都想一下子编一个1000行的程序,然后一次修改所有的错误。没有人,我是说没有人,能做到这个。你应该先编一个可以运行的小程序,修改它,然后再次让它运行。这可以限制你一次修改的错误数量。另外,你知道刚才做了哪些修改使程序无法运行,因此你知道应该把注意力放在哪里。这可以防止这样的情况出现:你认为你编写的东西应该能够工作,它也能通过编译,但它就是不能运行。请切记,能够通过编译的程序并不意味着它是正确的。

下一步为我们的游戏编写一个头文件。头文件把数据类型和函数声明集中到了一处。这可以保证数据结构定义的一致性,以便程序的每一部分都能以同样的方式看待一切事情。

#ifndef DECK_H
#define DECK_H

#define DECKSIZE 52

typedef struct deck_t
{
  int card[DECKSIZE];
  /* number of cards used */
  int dealt;
}deck_t;

#endif /* DECK_H */

把这个文件保存为 deck.h。只能编译 .c 文件,所以我们必须修改 game.c。在game.c的第2行,写上 #include "deck.h"。在第5行写上 deck_t deck;。为了保证我们没有搞错,把它重新编译一次。

gcc -o game game.c


如果没有错误,就没有问题。如果编译不能通过,那么就修改它直到能通过为止。


预编译
编译器是怎么知道 deck_t 类型是什么的呢?因为在预编译期间,它实际上把"deck.h"文件复制到了"game.c"文件中。源代码中的预编译指示以"#"为前缀。你可以通过在gcc后加上 -E 选项来调用预编译器。


gcc -E -o game_precompile.txt game.c
wc -l game_precompile.txt
  3199 game_precompile.txt

几乎有3200行的输出!其中大多数来自 stdio.h 包含文件,但是如果你查看这个文件的话,我们的声明也在那里。如果你不用 -o 选项指定输出文件名的话,它就输出到控制台。预编译过程通过完成三个主要任务给了代码很大的灵活性。
把"include"的文件拷贝到要编译的源文件中。
用实际值替代"define"的文本。
在调用宏的地方进行宏替换。
这就使你能够在整个源文件中使用符号常量(即用DECKSIZE表示一付牌中的纸牌数量),而符号常量是在一个地方定义的,如果它的值发生了变化,所有使用符号常量的地方都能自动更新。在实践中,你几乎不需要单独使用 -E 选项,而是让它把输出传送给编译器。


编译
作为一个中间步骤,gcc把你的代码翻译成汇编语言。它一定要这样做,它必须通过分析你的代码搞清楚你究竟想要做什么。如果你犯了语法错误,它就会告诉你,这样编译就失败了。人们有时会把这一步误解为整个过程。但是,实际上还有许多工作要gcc去做呢。


汇编
as 把汇编语言代码转换为目标代码。事实上目标代码并不能在CPU上运行,但它离完成已经很近了。编译器选项 -c 把 .c 文件转换为以 .o 为扩展名的目标文件。 如果我们运行

gcc -c game.c

我们就自动创建了一个名为game.o的文件。这里我们碰到了一个重要的问题。我们可以用任意一个 .c 文件创建一个目标文件。正如我们在下面所看到的,在连接步骤中我们可以把这些目标文件组合成可执行文件。让我们继续介绍我们的例子。因为我们正在编写一个纸牌游戏,我们已经把一付牌定义为 deck_t,我们将编写一个洗牌函数。这个函数接受一个指向deck类型的指针,并把一付随机的牌装入deck类型。它使用'drawn' 数组跟踪记录那些牌已经用过了。这个具有DECKSIZE个元素的数组可以防止我们重复使用一张牌。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "deck.h"

static time_t seed = 0;

void shuffle(deck_t *pdeck)
{
  /* Keeps track of what numbers have been used */
  int drawn[DECKSIZE] = {0};
  int i;

  /* One time initialization of rand */
  if(0 == seed)
  {
    seed = time(NULL);
    srand(seed);
  }
  for(i = 0; i < DECKSIZE; i++)
  {
    int value = -1;
    do
    {
      value = rand() % DECKSIZE;
    }
    while(drawn[value] != 0);

    /* mark value as used */
    drawn[value] = 1;

    /* debug statement */
    printf("%i\n", value);
    pdeck->card = value;
  }
  pdeck->dealt = 0;
  return;
}

把这个文件保存为 shuffle.c。我们在这个代码中加入了一条调试语句,以便运行时,能输出所产生的牌号。这并没有为我们的程序添加功能,但是现在到了关键时刻,我们看看究竟发生了什么。因为我们的游戏还在初级阶段,我们没有别的办法确定我们的函数是否实现了我们要求的功能。使用那条printf语句,我们就能准确地知道现在究竟发生了什么,以便在开始下一阶段之前我们知道牌已经洗好了。在我们对它的工作感到满意之后,我们可以把那一行语句从代码中删掉。这种调试程序的技术看起来很粗糙,但它使用最少的语句完成了调试任务。以后我们再介绍更复杂的调试器。

请注意两个问题。
我们用传址方式传递参数,你可以从'&'(取地址)操作符看出来。这把变量的机器地址传递给了函数,因此函数自己就能改变变量的值。也可以使用全局变量编写程序,但是应该尽量少使用全局变量。指针是C的一个重要组成部分,你应该充分地理解它。
我们在一个新的 .c 文件中使用函数调用。操作系统总是寻找名为'main'的函数,并从那里开始执行。 shuffle.c 中没有'main'函数,因此不能编译为独立的可执行文件。我们必须把它与另一个具有'main'函数并调用'shuffle'的程序组合起来。
运行命令


gcc -c shuffle.c

并确定它创建了一个名为 shuffle.o 的新文件。编辑game.c文件,在第7行,在 deck_t类型的变量 deck 声明之后,加上下面这一行:
shuffle(&deck);

现在,如果我们还象以前一样创建可执行文件,我们就会得到一个错误
gcc -o game game.c

/tmp/ccmiHnJX.o: In function `main':
/tmp/ccmiHnJX.o(.text+0xf): undefined reference to `shuffle'
collect2: ld returned 1 exit status

编译成功了,因为我们的语法是正确的。但是连接步骤却失败了,因为我们没有告诉编译器'shuffle'函数在哪里。那么,到底什么是连接?我们怎样告诉编译器到哪里寻找这个函数呢?


连接
连接器ld,使用下面的命令,接受前面由 as 创建的目标文件并把它转换为可执行文件


gcc -o game game.o shuffle.o

这将把两个目标文件组合起来并创建可执行文件 game。

连接器从shuffle.o目标文件中找到 shuffle 函数,并把它包括进可执行文件。目标文件的真正好处在于,如果我们想再次使用那个函数,我们所要做的就是包含"deck.h" 文件并把 shuffle.o 目标文件连接到新的可执行文件中。

象这样的代码重用是经常发生的。虽然我们并没有编写前面作为调试语句调用的 printf 函数,连接器却能从我们用 #include <stdlib.h> 语句包含的文件中找到它的声明,并把存储在C库(/lib/libc.so.6)中的目标代码连接进来。这种方式使我们可以使用已能正确工作的其他人的函数,只关心我们所要解决的问题。这就是为什么头文件中一般只含有数据和函数声明,而没有函数体。一般,你可以为连接器创建目标文件或函数库,以便连接进可执行文件。我们的代码可能产生问题,因为在头文件中我们没有放入任何函数声明。为了确保一切顺利,我们还能做什么呢?


另外两个重要选项
-Wall 选项可以打开所有类型的语法警告,以便帮助我们确定代码是正确的,并且尽可能实现可移植性。当我们使用这个选项编译我们的代码时,我们将看到下述警告:

game.c:9: warning: implicit declaration of function `shuffle'

这让我们知道还有一些工作要做。我们需要在头文件中加入一行代码,以便告诉编译器有关 shuffle 函数的一切,让它可以做必要的检查。听起来象是一种狡辩,但这样做可以把函数的定义与实现分离开来,使我们能在任何地方使用我们的函数,只要包含新的头文件并把它连接到我们的目标文件中就可以了。下面我们就把这一行加入deck.h中。
void shuffle(deck_t *pdeck);

这就可以消除那个警告信息了。

另一个常用编译器选项是优化选项 -O# (即 -O2)。这是告诉编译器你需要什么级别的优化。编译器具有一整套技巧可以使你的代码运行得更快一点。对于象我们这种小程序,你可能注意不到差别,但对于大型程序来说,它可以大幅度提高运行速度。你会经常碰到它,所以你应该知道它的意思。


调试
我们都知道,代码通过了编译并不意味着它按我们得要求工作了。你可以使用下面的命令验证是否所有的号码都被使用了

game | sort - n | less

并且检查有没有遗漏。如果有问题我们该怎么办?我们如何才能深入底层查找错误呢?

你可以使用调试器检查你的代码。大多数发行版都提供著名的调试器:gdb。如果那些众多的命令行选项让你感到无所适从,那么你可以使用KDE提供的一个很好的前端工具 KDbg。还有一些其它的前端工具,它们都很相似。要开始调试,你可以选择 File->Executable 然后找到你的 game 程序。当你按下F5键或选择 Execution->从菜单运行时,你可以在另一个窗口中看到输出。怎么回事?在那个窗口中我们什么也看不到。不要担心,KDbg没有出问题。问题在于我们在可执行文件中没有加入任何调试信息,所以KDbg不能告诉我们内部发生了什么。编译器选项 -g 可以把必要的调试信息加入目标文件。你必须用这个选项编译目标文件(扩展名为.o),所以命令行成了:
gcc -g -c shuffle.c game.c
gcc -g -o game game.o shuffle.o

这就把钩子放入了可执行文件,使gdb和KDbg能指出运行情况。调试是一种很重要的技术,很值得你花时间学习如何使用。调试器帮助程序员的方法是它能在源代码中设置“断点”。现在你可以用右键单击调用 shuffle 函数的那行代码,试着设置断点。那一行边上会出现一个红色的小圆圈。现在当你按下F5键时,程序就会在那一行停止执行。按F8可以跳入shuffle函数。呵,我们现在可以看到 shuffle.c 中的代码了!我们可以控制程序一步一步地执行,并看到究竟发生了什么事。如果你把光标暂停在局部变量上,你将能看到变量的内容。太好了。这比那条 printf 语句好多了,是不是?


小结
本文大体介绍了编译和调试C程序的方法。我们讨论了编译器走过的步骤,以及为了让编译器做这些工作应该给gcc传递哪些选项。我们简述了有关连接共享函数库的问题,最后介绍了调试器。真正了解你所从事的工作还需要付出许多努力,但我希望本文能让你正确地起步。你可以在 gcc、 as 和 ld的 man 和 info page中找到更多的信息。

自己编写代码可以让你学到更多的东西。作为练习你可以以本文的纸牌游戏为基础,编写一个21点游戏。那时你可以学学如何使用调试器。使用GUI的KDbg开始可以更容易一些。如果你每次只加入一点点功能,那么很快就能完成。切记,一定要保持程序一直能运行!

要想编写一个完整的游戏,你需要下面这些内容:

一个纸牌玩家的定义(即,你可以把deck_t定义为player_t)。
一个给指定玩家发一定数量牌的函数。记住在纸牌中要增加“已发牌”的数量,以便能知道还有那些牌可发。还要记住玩家手中还有多少牌。
一些与用户的交互,问问玩家是否还要另一张牌。
一个能打印玩家手中的牌的函数。 card 等于value % 13 (得数为0到12),suit 等于 value / 13 (得数为0到3)。
一个能确定玩家手中的value的函数。Ace的value为零并且可以等于1或11。King的value为12并且可以等于10。
回复

使用道具 举报

发表于 2006-7-17 09:58:51 | 显示全部楼层
标记,贵在坚持。
回复

使用道具 举报

 楼主| 发表于 2006-7-17 11:39:21 | 显示全部楼层
谢谢公社能为我提供这个空间,不过,从这几天写的日记来看,效果不是很好,就一些随记,是一种很对不起观众的行为。但由于我对Linux本身了解不多,待学到一定水平后,我就把它彻底整理一下。当然,以后在写随记的时候也多注意一下,谢谢大家支持。


[2006年07月16日]关键字:

          部分常用命令   


[2006年07月16日]    内容:

文件浏览命令

15、cat命令,类似于DOS中的type,如:cat class.txt work.txt即可查看class.txt & work.txt的内容。有趣的是,当我输入cat * ,没想到[gisde@localhost ~]$提示符变成了:[±␋⎽␍␊@┌⎺␌▒┌␤⎺⎽├ D␊␉┤±]$,不知道这是一个什么BUG,呵呵。


16、file * 即可查看当前目录下的所有文件或文件夹的类型; file music picture 即可查看music和picture类型了。

17、head -3 file1 file2,可以只查看file1 and file2的前3行。

         who | head -3 ,可显示并没有三个用户。

18、tail -3 file1 file2,可以查看文件file1和file2的倒数三行。

19、more 可显示当前文件中的内容,但它与cat的不同之处是,more解决了不用在用户想查看的内容前停止这个问题。

20、less 它比more好在,它解决了more命令不能向前翻页的问题。

21、adduser gisde 新建(添加)一个名为“gisde“的帐户。

22、at 命令,可以设置在某一时间执行某些队列。如:at -f myplan 3pm dec2 将在12月2日下午3时执行mypal文件中的作业。

23、cal 2 1998 显示1998年2月的日历。

24、fg 或 bg ,fg为把被挂起的文件激活并在前台运行,而bg为至后台挂起。

25、find 命令,查找功能。如:find /home -name *.txt -print

26、gzip命令, gzip -c(解缩结果标准输出) 或 -d(解压缩) filename

27、halt命令,only root,关机指令。

28、hostname ,only root,修改主机名。

29、kill -s(发送指定信号KILL) KILL 2875(接受消息的进程号)

30、login/logout 登录/注销

31、make 类编译程序。

32、man 命令名,可查看相关命名的详细信息。

33、mount/umount ,加载一个文件系统。卸载某个文件系统。

34、netstat,可用来查看网络连接(TCP或UDP)的情况。很详细,但看后感觉茫然,好多端口开起的,不知道是做什么用。以后再看吧。

35、passwd 修改用户的密码。

36、pwd ,查看当前位置。

37、reset,重设用户屏幕,类似于windows的刷新。

38、set ,显示和修改环境变量,如:set 变量名=变量值。

39、shutdown [-r]或[-h] now,[-r为重启],[-h为关机]

40、sort,可对文件按小写字母、数字大小、日期时间等 进行排序。

41、su 用户名[或-表示root] ,用来虚拟成另一个用户。

42、top,可用来查占用CPU最大进程。

43、unzip,可对用pkzip压缩的文件进行解压缩,想应该用得不多吧,我发现Fedora Core 5这文面做行还不错嘛。

44、who 可以用来查看当前登陆的用户

45、which , 可查某个命令所在的详细路径。
回复

使用道具 举报

发表于 2006-7-17 11:43:48 | 显示全部楼层
cat什么东西都做,甚至可以把文本输出为音频,当然,仅仅是编码层面的转换,所以产生莫名其妙的乱码适合正常的,不爽reset就是了
回复

使用道具 举报

发表于 2006-7-17 11:53:32 | 显示全部楼层
对我学点基础,蛮好的贴子
回复

使用道具 举报

发表于 2006-7-17 19:13:04 | 显示全部楼层
不错不错,挺详细的
回复

使用道具 举报

 楼主| 发表于 2006-7-17 22:14:57 | 显示全部楼层
[2006年07月17日]关键字

          一些小问题     linux的文件组织结构。

打开目录的方式:

Fedora Core 5使用了类似win95时的文件视图类型。当双击以后会以一个新的窗口来显示。相对来说,我更喜欢只在一个窗口里操作的方式。找了一下,发现:编辑>文件首选项>行为>选中“总是在浏览器窗口中打开”即可。

以前遇到一个问题,不知道怎么从文本方式(类DOS界面)进入X Window 界面。呵呵,为了启动X,用户首先要登录,然后startx即可。

如果开机的时候,界面就为文本方式的话,我可做以下修改,让开机自动进入X Window

/sbin/telinit 5 (测试一下看是否可以看到XDM登录屏幕,试用一下,如果1、可以的话;2、不可以的话)

vi(或其它文本编辑器) etc/inittab (文件etc/inittab是用来决定系统默认运行级别以及其他事情的)

修改其中的id:3:initdefault:为id:5:initdefault(因为启动XDM需要5的运行级别)

如果不能正常 运行XDM,(我想一般应该都可以,实在不行的话设置XF86Config配置,细节baidu一下就是了。

内核这东西看了一下相关文章,目前暂时还不怎么感兴趣,但记住了一个命令: uname -r 可以查看当前内核版本,如我的Fedora Core 5o 为:2.6.15-1.2054_FC5 。

在我的资料上,还有一些关于配置什么声卡、显卡、打印机、修补、升级内核之类的东西,暂时有不上,走马观花般的过了一遍而以。

但对于Linux的文件组织结构,相信用过几年MFC编程的人对Windows的了解与自信,但我第一次使用Linux的时候真的感觉是一片茫然。我的C、D、E、F盘呢?都是9几年的事了,但关键是我一直不知道哪个文件夹代表什么意思,而且也没深入了解,因此对linux感觉很陌生。


我cd / 后 ls -a了一下:
[gisde@localhost /]$ ls -a
.          bin   etc   lost+found  mnt  proc  selinux  tmp
..         boot  home  media       net  root  srv      usr
.autofsck  dev   lib   misc        opt  sbin  sys      var
[gisde@localhost /]$

按顺序,今天我知道了:

1、bin和sbin这两个目录通常用来存放一些二进制程序。

        如bin下有:bash()、ls、mount、hostname等 常用命令。

        而sbin则是因为随着系统的中可执行二进制程序越来越多,就把一些root专用的程序放在这里面了,如有:mkfs(创建文件系统)、lilo(引导系统程离)、init(系统初始化程序)、shutdown(关闭系统)等 。

2、etc,整个系统管理所需要的配置文件和信息都在这里面,有很多文件和文件夹,内容也比较多,感觉类似于Windows的注册表:

       /etc/passwd,包含 所有的用户信息,为系统设置口令用的。我试着用 more /etc/passwd出现:
                             .......                       
           halt:7:0:halt:/sbin:/sbin/halt
                              .......
                             其中,halt即为用户名
                x(表密码经MD5或DES加密并保存至:etc/shadow内,如为*则表示用户无法登陆)
                                          7:0,即UID和GID中文意思分别为用户ID和用户级ID,通常100以前的用户ID供系统使用。root的UID为0
                /sbin为用户的主目录。
                /sbin/halt为登录shell(login shell)
                                          
                              最后还有一句:gisde:500:500:gisde.com:/home/gisde:/bin/bash,我想应该可以看得懂了吧。
                                          
         /etc/fstab包含 所有系统启动时自动加载的文件系统。
                          
                              我使用[gisde@localhost etc]$ more /etc/fstab发现它与redhat时期有儿一样,但还是可以看懂。

         /etc/profile ,profile为root用户专用的。如果一般用户想修改可以到自己的$ home/.profile或$home/.cshrc下修改。

         /etc/hosts ,这个文件设定了用户访问的IP地址和相应的主机名有别名的列表。   
                                我用cat /etc/hosts发现:
              # Do not remove the following line, or various programs
              # that require network functionality will fail.
              127.0.0.1               localhost.localdomain localhost

                       在旧版教材上有这个/etc/lilo.conf,是设置系统的引导方式,即实现多操作系统。但Fedora Core 5上好像换位置了。

        /etc/login.access,用来控制用户注册权限的设定文件。具体什么东东,没怎么看懂,到下次复习的时候再解决吧。

        /etc/motd 是root给一般用户消处的地方,英文全称为:Message OOf The Day ,它包含系统相关的信息,如瘊定在什么时候执行什么命令,什么时候系统升级等 。通常,该文件记录了用户在注册前显示的信息。

/etc/inittab,文件用来配置系统启动文件的,前有相关描述。

/etc/services ,是一个配置所有服务程序的列表:我用 cat /etc/services了一下,没想到一大堆,目前还不知道这是不是正在运行的服务,如果是这样,还也太多了点儿嘛,怎么优化呢?暂进还不知道。

*****/etc/wtmp 以前这个文件是记录了所有用户记录的数据库,会不断增大。每隔段时间最好用root将其删除后重新touch生成一个新文件即可。但现在在Fedora Core 5里换位置了。等 会再找。

/etc/csh.cshrc 和 /etc/csh.login 特别说明:only root 才能读取,一般帐户不能读取到。  一般用户通常只注意到自己的主目录有这两个文件,即:.cshrc和.login,实际上是称执行/etc/csh.login再执行用用户主目录下的那两个文件。对应的有:.logout,即退出的时候,在.logout中输入些信息,或执行一些命令,当用户退出时就会执行。

/etc/DIR_COLORS,相信这个很容易理解吧,呵呵。

今天气温都37度了,感觉就像是被 放在蒸箱里的馒头(乡里,没空调,这个时候风扇的角色就像是烧烤时那种,越扇越热),呵呵。

下面这两个文件比较有意思:

/etc/at.deny,记录了哪些用户不能使用at 命令。
/etc/at.allow,记录了哪些用户可以使用at命令。系统通常是:每5分钟(默认)执行一次at命令。at命令先看有汉有/etc/at.allow,如果有的话,就只有被 记录了的用户才能使用at,如果没有的话,at去/etc/at.deny检查,若无的话,则所有用户可使用at。在/var/spool/cron/crontabs/root文件中,在一个记录,大意为:run at 5分钟一次。但我用了:
[root@localhost ~]# cat /var/spool/cron/crontabs/root
cat: /var/spool/cron/crontabs/root: 没有那个文件或目录。
看来Fedora Core 5里又换位置了,哎,怎么这么爱换嘛!

/etc/nologin 这个文件一般情况下是不存在的。,比如说我用shutdown的时候,说明系统要关机了,所以就要用人再登陆了。另外,比如说root只想其一个人使用这个电脑的时候,他也可以让其nologin嘛。

/etc/group 就如同/etc/passwd一样,它记录了系统中关于组的信息,相关量还是比较大,要看的话用more好些。

root可以用groupadd、groupdel或groupmod来操作这个帐户,但我可能用得比较少,暂时不看了,用的时候再说吧。

/mnt目录,mnt为:mount的缩写,是为加载文件系统用的,可参加如果使用mount命令,对/mnt会更理解些。(当年为了庆祝会用mount我第一时间就买了一个40G的移动硬盘,160的台式机移动硬盘,z1数码相机,还是rh9的时候,一试成功,还有mount安wps2005 linux版)

/tmp目录,主要是作为新建和安装程序的起点,而并非存放无用的文件。

/home目录,用来存放所有用户的主目录,但root的主目录为:/,/home目录还有ftp.httpd之类的目录,它们是提供相应的服务给用户使用。

/usr目录,用来存放所有与系统用户直接相关的程序和文件,它是Linux系统中占用空间最大的目录。

[gisde@localhost usr]$ ls
bin  games    kerberos  libexec  sbin   src  X11R6
etc  include  lib       local    share  tmp

/usr/X11R6是用来存放所有与X Windows有关的文件和程序的。它是对X Windows的第11次版本的第6次修改。

/usr/bin,用来存入系统用户所用到的大部分应程序。记得开始安装的realplay就在这里头,可执行文件的位置为:/usr/bin/realplay,但是我不知道是不是所有realplay的文件都在这里面,另外,/usr/bin里头好多文件哦,为什么不归下类呢?

/usr/sbin,用来存入root使用的系统管理程序,这些程序与/bin和/sbin文件中的程序在功能、类型上都是相同的。

/usr/doc,存放所有Linux系统的文档,对才入门的朋友还说这就是一个知识库,但大多都是鸟语,EN文好的多看下。

/usr/lib,用来存放系统的动态链接库和静态文档库,在系统安装时,它便已经安装好的。

/usr/src,用来存放系统中的源代码,如系统内核源代码就是放在/usr/src/linux下的。

/usr/man,用来存放系统的在线帮助文件。

/usr/dict,它下面的/usr/dict/words文件就是系统的词典文件,

/usr/local文件是让用户安装新软件用的。这时,我查看了一下,发现的realplay的主文件被安装在此,应此,我个人理解原来/usr/bin下的realplay只是为了方便在终端下调用而新建的。

/usr/include,存放的是为了开发和编译程序的头文件(很多都是以.h结尾的头文件)。

/var目录,用来存放经常要变动的文件,与/tmp类似,不过,它有一定的组织结构。

/var/log/,保存大量的系统信息,用户可用dmesg查看最近一次系统引导信息。到底那些文件会越来越大呢?是不是可以全部删除呢?

/var/catman,经常被清除,就象除临时文件一样。

/var/lib,正常运行时要改变的文件。

/var/local,存放安装程序的可变数据。

/var/lock,锁定文件。这样其它程序将不会试图使用该设备或文件

/var/log,各种程序的log文件,应定期清理。/var/log/wtmplog为所有的系统登录和注销;/var/log/message里布储所有核心和系统信息。

/var/run,保存到下次引导前有效的关于系统的信息文件。例如当前登录的用户信息。

/var/spool,电子邮件、新闻组、打印队列和其它队列,都有各自己子目录。

/var/tmp,允许大或时间较长的临时文件。


/boot目录,存放有关引导信息的地方,通常 LILO在引导系统时会从该文件调用有关信息。

/dev目录,保存所有设备的场所,它会根据硬件设备的不同,有很大不同。但应知道所有的硬件设备可以分两类:块设备(以1024bytes为单位进行数据传输)和字符设备(以byte为单位传输的)。在它中有两个特殊的文件。 /dev/full(读取设备时,系统产生一系列的堆字节)和/dev/null(像回收一个垃圾站,把所有的输出清空)。

/proc目录,是一个虚拟的目录。系统中启动时生成这个文件。系统每时每该的变化都 显示在/proc文件中,用户可以通过查看它来获取相关信息。/proc不暂用磁盘,它由核心在内存中产生。

/proc/1,关于进程1的信息目录,每一下进程在/proc下有一个名为其进程号的目录。(那样说,如果我想获取正在运行的系统信息,就要和/proc打交到吗?)

/proc/dma,显示当前使用的DMA通道。

/proc/devices,当前运行的核心配置的设备驱动列表

/proc/filesystems,核心配置的文件系统。

/proc/ioports,当前使用的I/O端口。

/proc/kcore,系统物理内存映象,与物理内存大小完全一样,但实际上并不占用这么多内存。

/proc/kmsg,核心输出的消息,也被 送到syslog。

/proc/ksyms,核心符号表。

/proc/loadavg,系统“平均负载”,指示系统当前的工作量

/proc/modules,当前加载的核心模块。

/proc/net,网络协议状态信息。

/proc/stat,系统的不同状态。

/proc/uptime,系统启动的时间长度。


还记得14号写的:

           4、查看系统信息

       cat /proc/cpuinfo - cpu (i.e. vendor, mhz, flags like mmx)
       cat /proc/interrupts - 中断
       cat /proc/ioports - 设备io端口
       cat /proc/meminfo - 内存信息(i.e. mem used, free, swap size)
       cat /proc/partitions - 所有设备的所有分区
       cat /proc/pci - pci设备的信息
       cat /proc/swaps - 所有swap分区的信息
       cat /proc/version - linux的版本号 相当于 uname -r

现在终于明白是这是怎么回事了,呵呵。

/lost+found目录,only root,这个文件是用来存放系统发生意外的文件的。如停电或死机时,它是在生成新文件系统时生成。


小结:能大致了解linux的文件组织结构,很是高兴。今天能Linux也算是更加深入了一些。我把这个信息用备注保存到相应的文件夹中,加之自已书写时的记忆,大致知道是怎么回事了。但还有一些文件我的资料上没有相关资料,待有机会一定要了补上。

天渐凉下来了,出去放松一下。

晚上给一个朋友发邮件,可朋友说收到的内容、标题都是乱码,我是用evolution发送的,于是我设置了默认为简体中文后,内容为中文正常了,但标题还是乱码。明天得把它解决了,呵呵。
回复

使用道具 举报

 楼主| 发表于 2006-7-18 12:37:35 | 显示全部楼层

彻底解决格式问题,方便阅读。

由于经常涉及表格、图片等方式来表达,论坛里,格式难免会有一些丢失。故将其做成了PDF格式的文件,并做了重新整理,欢迎下载整理后的阅读。

注:整理后的文件为每日更新,欢迎随时回到社区来查看最近版本,更新后的固定下载地址为(详见首帖):


http://www.gisde.com/download/linux/LinuxNote.pdf
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 14:46 , Processed in 0.067574 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表