论坛: UNIX系统 标题: 给想学Linux(UNIX)的朋友的一点建议 复制本贴地址    
作者: NetDemon [netdemon]    ADMIN   登录
现在好多的人开始接触电脑的时候,见到的应该是Windows98
说实话,98 已经是一个很人性化,封装的很好的一个系统了
一个对电脑一窍不通的人都能很快的使用它。这样很多人对
"电脑"的印象和那些和我一样一开始接触的是DOS人是绝然不
同的。在DOS时代,如果你对电脑的基础知识不懂的话是玩不
动它的,不像现在好多人CPU是什么都不知道,却能够是Flash
高手,倾倒MM无数。如果你是这样的人,你要学Linux,你有一
段回头路要走,为什么,看下去

我们先看看MS操作系统的发展,他有两套内核

MSDOS--->DOS+Win3.2-->Win9X    \
                                --->WinXP  
WindowsNT3.1---NT4.0-->Win2000 /

他的发展是从DOS这个纯字符界面的系统发展到一个由字符界面
的内核加上一个图像界面的应用程序(Win3.2)再到结合把两个
合为一体的Win95,到现在再并上一开始就是图形界面的NT成为
WindowsXP,他未来的野心就是并上internet成为 .net

现在我们来看Linux,Linux只是个内核!这点很重要,你必须
理解这一点。
只有一个内核是不能构成一个操作系统的。现在的linux操作系统
如redhat,蓝点,红旗等,都是用这么一个内核,加上其它的
应用程序(包括X)构成的。任何一个叫做操作系统的东西都是
这样子构成的:内核+用户界面+一般应用程序。

现在我就拿MS的系统和linux的系统的互相对应来让大家更多的
认识Linux

如果你装过DOS,那你一定知道安装完成之后整个硬盘是这样
根目录下有
io.sys msdos.sys command.com config.sys autoexec.bat
共5个文件,以及C:\dos这个目录,很简单。其中
io.sys和msdos.sys就是系统的内核,command.com是用户界面(shell),
config.sys和autoexec.bat是配置文件,C:\DOS目录下面的是一般应用程序
系统启动时首先装入io.sys,再根据配置文件的设置装入msdos.sys和
command.com,然后就出现提示符,现在你就能输入命令了。如
copy c:\aaa.txt d:\aaa.txt 来拷贝文件。也你能够使用C:\dos目录下的
一些应用程序来完成工作,如用edit编辑文件,用Qbasic写basic程序。
接下去你安装了一个叫做Foxpro2.6的程序,这个程序可以让你做一些
数据库方面的工作,然后你在安装了一个叫做windows3.2中文版的程序
,这个程序可厉害了,你现在不用在命令行下打命令了,可以用鼠标来
操作了,打开文件管理器,打开C 再打开另一个窗口D,用鼠标一拉
就能完成copy c:\aaa.txt d:\aaa.txt这个命令,你只是动了几次食指
和现在在windows98下没什么两样。

OK ,goto linux

安装好linux之后
根目录下有boot,bin,sbin,etc,usr/bin,等几个目录
boot下有vmlinuz这个文件,这个就是内核,就是目前世界上最厉害的黑客
linus带头写的那个东东。
bin下有sh,这个就是shell(==command.com,用户界面)
因为UNIX系统是没有内部命令这个说法的,准确地说
/bin+/sbin == Command.com
而/etc == config.sys + msdos.sys
剩下/usr/bin == c:\dos
当然。因为Linux比Dos庞大得多,所以,reahat和红旗或者有不同的安排方法,
各种目录下的东西并不规则。
linux的启动同样是装载vmlinuxz,然后装载sh(或者其他的shell,如bash),
出来提示符。现在你同样能输入命令了。如
cp /aaa.txt /tmp/aaa.txt。同样可以用vi编辑文件,用gcc编译程序
接下去你安装了一个叫做MySQL的程序,这个程序可以让你做一些
数据库方面的工作,然后你再安装了一个叫做kde4.0的程序,这个程序可厉害
了,你现在不用在命令行下打命令了,可以用鼠标来操作了,打开文件管理器,
打开/ 再打开另一个窗口/tmp,用鼠标一拉就能完成cp /aaa.txt /tmp/aaa.txt
这个命令,你只是动了几次食指和现在在windows98下没什么两样。

看到这里希望你明白我为什么说你在走回头路,
因为目前的Linux操作系统==MS的Win3.2
但MS系统已经走过了9X,现在是XP了,整整落后了两代。当然,这是从用户界面
上来说的,但也恰恰是很多人装个Linux之后就是在X的kde上搞东搞西,而其它的什
么都搞不起来,为什么搞不起来因为你没搞过DOS,你根本就不知道系统还可以
有这样的搞法。你一开始接触的就是98,电脑给你的感觉就是用鼠标来操作的
东西,你认为同样是操作系统,Linux也应该是这样的东西。你根本就没有想过
你一直以为你在玩的是Linux,但实际上你玩的只不过是一个运行在Linux系统上
的程序而已。
因此很多人装完搞了几天说,靠,Linux不过如此。这话可以说对也可以说不对
Linux嘛,你都还没见到是什么样子,你有什么资格说它怎样呢?
但kde嘛,就真的确实不过如此,你用过98吧,现在你去用用3.2看看,你有什么
感觉?从稳定性来说,我不拿98比了,拿95,如果同样的工作,95一天崩溃1次
的话,那X会崩溃10次,如果是2000的话,2000一天崩溃1次,X会崩溃100次。
和3.2是差不多的。但为什么还是会听说比如某些好莱坞的电影特技是在Linux上
完成的呢?为了出席一次重要宴会,你可以去买一套名牌西装,也可以去订做一
套,订做的当然更加合身更加好看,但价格也更贵,工作量也更大
名牌西装==Windows系统
定做西装==Linux系统+修改系统内核+修改X代码+修改kde代码+专门写的特技软件
你现在装的那套西装是街边货,也就是reahat服装厂为了适应全世界所有人的身材
批量生产的东东。
明白了吧?
如果你明白,那你也就明白了Linux比Window好的一个方面了,我也就不用废话

那么为什么Linux往往会和黑客撤上关系呢?
记得我看过一本书这么写,"Linux是由一个叫linus的黑客及互联网上很多的黑客
共同编写而成"。所以,一个由黑客写成的系统怎么会和黑客没有关系呢?
当然这个“黑客”的定义和现在很多中国人心中的"黑客"的定义是绝然不同的
前者是几乎从未入侵过其他系统,而后者是入侵过就是了。

如果你是一个美术工作者,你也是几乎除了睡觉就在用电脑,你时时都开着photoShop
在那里搞啊搞,在美术这个行业,你也算得上是这个行业里的高手了。但你根本就
不关心你所做的,电脑里面到底是怎么帮你完成的。电脑不过是你创作的一个工具。
就像音乐是很多人喜欢听的,但你根本不关心你所听到的音乐,她从原来歌星嘴里
发出来到被你来欣赏,她到底是怎么个回事。但对一HIFI发烧友而言,她关心的就
只是这些。现在回到我刚刚说到了copy命令,对于一个黑客而言,她根本不关心aaa.txt
这个文件里面的内容,她关心的是从C:\aaa.txt到d:\aaa.txt这个过程中,电脑它到底
干了什么?现在我问一下正在看这个帖子的人:把一个文件从一个地方拷贝到另一个
地方这个事情你肯定是做过的对吧?但当你这样做的时候,你是否有想过电脑内部它
是怎样来完成你的这个操作的呢?如果你的回答是:哎呀,我倒真的从未想过耶~~
那么,你根本没有黑客的天分,你还是到轻松一刻混比较有前途。
寻根问底是黑客的天性,在这点上,Linux可以满足,但windows不能,
你在dos上按下copy C:\aaa.txt d:\aaa.txt。复制的任务是完成了,但电脑作了什么你知道么?
你只能根据你的经验的积累,大概的判断系统怎么完成,在你没看过copy的源代码之前
你根本没法确定你的判断是否正确的。但UNIX上cp的源代码基本上是随手就能拿到。
TCP/ip方面,linxu可以让你一杆子捅到内核中去,但windows你只能捅到winsock
apache和系统的具体交流你可以一清二楚,但IIS和系统的交流你却不可能知道
Linux和黑客的关系是在这里,和入侵是一点关系都没有的。很多远程漏洞的攻击程序
是要在unix系统上编译的这没错,但是那些程序本来的意义就是举个例子让你看好过说,
你看得懂的话,改一改在Win上同样可以编译。

UNIX和Windows相比有太多的优点,也有太多值得你去弄的地方,只是我说不出来
就像你深爱一个人的时候,你根本没法说出你爱他什么,她有什么地方值得你去爱

但,Windows不是垃圾,绝对不是,作为一个工具来使用,她比UNIX好上几百倍
似乎你现在都该明白为何很多远程漏洞的攻击程序是以unix的习惯写的,因为能够
发现这个漏洞,说明他对系统相当的熟悉,而且是UNIX让他对系统相当的熟悉,
他不自觉地就是用了UNIX的那一套,不过,它的这些代码却很大的可能是用UltraEdit
在windows系统下敲的。


好像跑题了,我说要给想学Linux(UNIX)的朋友的一点建议,但却说了这样的话,
但我觉得没有跑题,我希望你看到这里已经能够知道我要给你的建议是什么了。


1.根据你目前的水平,确定Linux对你的意义有多大。
2.确定你玩的是Linux而不是X
3.把X系统卸了,剩下的空间装上源代码
4.不要用rpm -i的方式安装程序,用自己编译的方法
5.找个合用的telnet软件,我推荐SecureCRT.
6.如果你只有一台电脑,安装Vmware.用这个方式来接触UNIX
7.再看一下帖子,自己再一次体会我帖子中暗藏的建议
8.在学习Linux的过程中的,把被linux玩的经验记下来
9.在玩linux的过程中,把linux怎么被你玩的趣事记下来
10.把你记下来的东西发表到20CN 论坛的UNIX版中来



地主 发表时间: 09/18 04:34

回复: sd44 [sd44]   论坛用户   登录
为斑竹的热心感动ing
一直很羡慕不用x的高手,呵呵
不过不用x如何浏览网页呢?这点一直搞不明白
如何玩起RTCW和quake3?(呵呵,别笑,linux下加载显卡驱动后,的确比win跑的快,外加稳定)
斑竹在命令模式下用什么做中文处理呢?
炎黄中文?zhcon? 
一个简捷的xwindow也可以起到很好的效果哦
偶用windowmaker,256MB DDR,三个小时后,内存占用仍为130多mb
其间mozilla,QUAKE3,RTCW,爽,哈哈哈哈哈

前进,前进,争取有朝一日可以真正的去研究源代码


B1层 发表时间: 09/18 06:53

回复: 偃月狂刀 [top]   论坛用户   登录
其实,通过LINUX最想了解的就是系统,就如你说的COPY的时候,系统到底做了什么~!我用过现在大部分的WINDOWS  3。2的版本还没见过~!听你说来,好象是很有道理的,你的LINUX的文章我也看了一些了!LINUX就是内核加上编译工具或是应用程序,不同的LINUX只是对内核以外的东西有不同装载~!我想的是,做为一个初学者,我们怎么才可以达到对某些东西的编译~!书上也许有些方法,老大要是有空的话,说说当年的往事,让我们知道学UNIX 或LINUX有个什么样的过程~!

 
  我们学校的老师都不会LINUX~!

B2层 发表时间: 09/18 09:58

回复: 夜光 [tucd]   论坛用户   登录
你没见过windows 3.2?我见过,我还玩过windows 3.1,记得我第一次买电脑的时候是一台AMD的486机子,540M硬盘,8M内存,那时候装的就是msdos 6.22+windows 3.1,那时候8M内存就要我2400大洋啊。
虽然在linux字符界面也可以上网浏览网页,不过只是一些字符而已,感觉很差啦。

[此贴被 夜光(tucd) 在 9月18日14时56分 编辑过]

B3层 发表时间: 9/18 14:20

回复: zeeno [zeeno]   论坛用户   登录
我喜爱Linux的目的是它有着UNIX的稳定,优秀的够用的一针见血的系统API,还有SourceForge的那么多代码.我想了解计算机的一切,我要写出满意的程序.计算机是什么?我想让它做什么它就做什么的金属和硅


[此贴被 zeeno(zeeno) 在 9月18日14时25分 编辑过]

B4层 发表时间: 9/18 14:50

回复: 乏味 [hbxym]   论坛用户   登录
我想学LINUX就是感觉以后的LINUX可能要超过WINDOWS



B5层 发表时间: 09/20 17:39

回复: syshunter [syshunter]   版主   登录
虽然我大部分时间都在LINUX下玩,但是我想说:LINUX永远也不可能代替WINDOWS,不用说大家也知道为什么。

B6层 发表时间: 09/20 17:48

回复: taisen [taisen]   论坛用户   登录
老大,有时间能不能说说你当年是怎么学的?我学了几天就不知道学什么了

B7层 发表时间: 09/20 18:50

回复: freewindy [freewindy]   论坛用户   登录
嘿  要学UNIX  先把文件权限搞清楚

老大  什么时候再些点UNIX的教程啊

B8层 发表时间: 09/20 23:05

回复: kandy [kandy]   论坛用户   登录
听君一席话,胜读十年书

B9层 发表时间: 09/21 08:18

回复: e4gle [e4gle]   论坛用户   登录
文章不错,纠正一点,不要过多的把linux和dos来比,因为dos根本就不是保护模式的操作系统,没有0级,3级的概念,linux是一个现代的操作系统,至于字符界面和x界面,个人认为最好从字符界面入手,因为linux的x界面还很不成熟

B10层 发表时间: 09/22 13:10

回复: 神手圣 [gut2404]   论坛用户   登录
老大果真是老大,一语胜天字!

B11层 发表时间: 09/22 16:38

回复: NetDemon [netdemon]   ADMIN   登录
考虑到读者的水平,从普通用户层上说,我认为这样的比较是恰当的
从技术的角度看,这样的比较那是很不公平也很荒谬的,
Linux与Win的比较(技术上)别人说得太多了,懒得跟人家后腿
针对这篇文章,你如果把0级,3级改成3级,5级那可就更为妙不可言了
我说到底也是希望大家能够接着从字符界面下手,多数人首先接触的是
X这是无可否认的,但关键要人家把从X到字符界面的"失望"变成当初你我
从DOS到Win31的激动,这是大多数初学者很难过的一个关,也是我写这个贴的原因

B12层 发表时间: 09/23 07:13

回复: zeeno [zeeno]   论坛用户   登录
CPU频率低的时代
DOS是最好的工业实时监控程序的平台
也有可取之处

用一段汇编就能把DOS弄的天翻地覆
让我了解了操作系统和硬件之间的关系


B13层 发表时间: 09/23 07:41

回复: cxl50 [cxl50]   论坛用户   登录
LINUX是外星异物,如何和地球的WIN相容,作为地球人都知道的LINUX是我要研究的方向,但红旗和XP如何共存???

B14层 发表时间: 09/26 23:58

回复: TomyChen [tomychen]   论坛用户   登录
偃月狂刀 ,给你一个简单的copy源代码,有错的地方,高手指点.
代码:

/*一些废话,这段根本就是垃圾代码,别笑就是了,不过copy的工作原理大概就是这样了,说得不对的,大家多多指正:(*/
#include ......省了
#define PERMS 0666
#define BUFSIZE 1024

main (int argc,char *agv[])
{
int src_fd,target_fd,num;
char iobuffer[BUFSIZE];
if (argc!=3
{
fputs("usage:copy src target",stdrr);
exit(1);
}
if ((src_fd=open(*argv+1),O_RDONLY,DUMMY))==-1)
{
fputs("Src file open error",stderr);
exit(2);
}
if(target_fd=open(*(argv+2),O_WRONLY|O_CREAT,PERMS))==-1)
{
fputs("Create target file error",stderr);
exit(3);
}
while((num=read(scr_fd,iobuffer,BUFSIZE))>0)
if (write(target_fd,iobuffer,num)!=num)
{
fputs("Target file write error",stderr);
exit(4);
}
close(src_fd);
close(target_fd);
exit(0);
}




B15层 发表时间: 10/19 17:09

回复: NetDemon [netdemon]   ADMIN   登录
原装正版copy
代码:

#include <sys/param.h>
#include <sys/stat.h>

#include <err.h>
#include <errno.h>
#include <fts.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "extern.h"

#define STRIP_TRAILING_SLASH(p) { \
        while ((p).p_end > (p).p_path + 1 && (p).p_end[-1] == '/') \
                *--(p).p_end = 0; \
}

PATH_T to = { to.p_path, "", "" };

int Rflag, iflag, pflag, rflag, fflag, vflag;

enum op { FILE_TO_FILE, FILE_TO_DIR, DIR_TO_DNE };

int copy __P((char *[], enum op, int));
int mastercmp __P((const FTSENT **, const FTSENT **));

int
main(argc, argv)
int argc;
char *argv[];
{
struct stat to_stat, tmp_stat;
enum op type;
int Hflag, Lflag, Pflag, ch, fts_options, r;
char *target;

Hflag = Lflag = Pflag = 0;
while ((ch = getopt(argc, argv, "HLPRfiprv")) != -1)
switch (ch) {
case 'H':
Hflag = 1;
Lflag = Pflag = 0;
break;
case 'L':
Lflag = 1;
Hflag = Pflag = 0;
break;
case 'P':
Pflag = 1;
Hflag = Lflag = 0;
break;
case 'R':
Rflag = 1;
break;
case 'f':
fflag = 1;
iflag = 0;
break;
case 'i':
iflag = 1;
fflag = 0;
break;
case 'p':
pflag = 1;
break;
case 'r':
rflag = 1;
break;
case 'v':
vflag = 1;
break;
default:
usage();
break;
}
argc -= optind;
argv += optind;

if (argc < 2)
usage();

fts_options = FTS_NOCHDIR | FTS_PHYSICAL;
if (rflag) {
if (Rflag)
errx(1,
    "the -R and -r options may not be specified together.");
if (Hflag || Lflag || Pflag)
errx(1,
"the -H, -L, and -P options may not be specified with the -r option.");
fts_options &= ~FTS_PHYSICAL;
fts_options |= FTS_LOGICAL;
}
if (Rflag) {
if (Hflag)
fts_options |= FTS_COMFOLLOW;
if (Lflag) {
fts_options &= ~FTS_PHYSICAL;
fts_options |= FTS_LOGICAL;
}
} else {
fts_options &= ~FTS_PHYSICAL;
fts_options |= FTS_LOGICAL;
}

/* Save the target base in "to". */
target = argv[--argc];
if (strlcpy(to.p_path, target, sizeof(to.p_path)) >= sizeof(to.p_path))
errx(1, "%s: name too long", target);
to.p_end = to.p_path + strlen(to.p_path);
        if (to.p_path == to.p_end) {
*to.p_end++ = '.';
*to.p_end = 0;
}
        STRIP_TRAILING_SLASH(to);
to.target_end = to.p_end;

/* Set end of argument list for fts(3). */
argv[argc] = NULL;

/*
 * Cp has two distinct cases:
 *
 * cp [-R] source target
 * cp [-R] source1 ... sourceN directory
 *
 * In both cases, source can be either a file or a directory.
 *
 * In (1), the target becomes a copy of the source. That is, if the
 * source is a file, the target will be a file, and likewise for
 * directories.
 *
 * In (2), the real target is not directory, but "directory/source".
 */
r = stat(to.p_path, &to_stat);
if (r == -1 && errno != ENOENT)
err(1, "%s", to.p_path);
if (r == -1 || !S_ISDIR(to_stat.st_mode)) {
/*
 * Case (1).  Target is not a directory.
 */
if (argc > 1) {
usage();
exit(1);
}
/*
 * Need to detect the case:
 * cp -R dir foo
 * Where dir is a directory and foo does not exist, where
 * we want pathname concatenations turned on but not for
 * the initial mkdir().
 */
if (r == -1) {
if (rflag || (Rflag && (Lflag || Hflag)))
stat(*argv, &tmp_stat);
else
lstat(*argv, &tmp_stat);

if (S_ISDIR(tmp_stat.st_mode) && (Rflag || rflag))
type = DIR_TO_DNE;
else
type = FILE_TO_FILE;
} else
type = FILE_TO_FILE;
} else
/*
 * Case (2).  Target is a directory.
 */
type = FILE_TO_DIR;

exit (copy(argv, type, fts_options));
}

int
copy(argv, type, fts_options)
char *argv[];
enum op type;
int fts_options;
{
struct stat to_stat;
FTS *ftsp;
FTSENT *curr;
int base = 0, dne, badcp, nlen, rval;
char *p, *target_mid;
mode_t mask, mode;

/*
 * Keep an inverted copy of the umask, for use in correcting
 * permissions on created directories when not using -p.
 */
mask = ~umask(0777);
umask(~mask);

if ((ftsp = fts_open(argv, fts_options, mastercmp)) == NULL)
err(1, NULL);
for (badcp = rval = 0; (curr = fts_read(ftsp)) != NULL; badcp = 0) {
switch (curr->fts_info) {
case FTS_NS:
case FTS_DNR:
case FTS_ERR:
warnx("%s: %s",
    curr->fts_path, strerror(curr->fts_errno));
badcp = rval = 1;
continue;
case FTS_DC: /* Warn, continue. */
warnx("%s: directory causes a cycle", curr->fts_path);
badcp = rval = 1;
continue;
}

/*
 * If we are in case (2) or (3) above, we need to append the
                 * source name to the target name.
                 */
if (type != FILE_TO_FILE) {
/*
 * Need to remember the roots of traversals to create
 * correct pathnames.  If there's a directory being
 * copied to a non-existent directory, e.g.
 * cp -R a/dir noexist
 * the resulting path name should be noexist/foo, not
 * noexist/dir/foo (where foo is a file in dir), which
 * is the case where the target exists.
 *
 * Also, check for "..".  This is for correct path
 * concatenation for paths ending in "..", e.g.
 * cp -R .. /tmp
 * Paths ending in ".." are changed to ".".  This is
 * tricky, but seems the easiest way to fix the problem.
 *
 * XXX
 * Since the first level MUST be FTS_ROOTLEVEL, base
 * is always initialized.
 */
if (curr->fts_level == FTS_ROOTLEVEL) {
if (type != DIR_TO_DNE) {
p = strrchr(curr->fts_path, '/');
base = (p == NULL) ? 0 :
    (int)(p - curr->fts_path + 1);

if (!strcmp(&curr->fts_path[base],
    ".."))
base += 1;
} else
base = curr->fts_pathlen;
}

p = &curr->fts_path[base];
nlen = curr->fts_pathlen - base;
target_mid = to.target_end;
if (*p != '/' && target_mid[-1] != '/')
*target_mid++ = '/';
*target_mid = 0;
if (target_mid - to.p_path + nlen >= PATH_MAX) {
warnx("%s%s: name too long (not copied)",
    to.p_path, p);
badcp = rval = 1;
continue;
}
(void)strncat(target_mid, p, nlen);
to.p_end = target_mid + nlen;
*to.p_end = 0;
STRIP_TRAILING_SLASH(to);
}

if (curr->fts_info == FTS_DP) {
/*
 * We are nearly finished with this directory.  If we
 * didn't actually copy it, or otherwise don't need to
 * change its attributes, then we are done.
 */
if (!curr->fts_number)
continue;
/*
 * If -p is in effect, set all the attributes.
 * Otherwise, set the correct permissions, limited
 * by the umask.  Optimise by avoiding a chmod()
 * if possible (which is usually the case if we
 * made the directory).  Note that mkdir() does not
 * honour setuid, setgid and sticky bits, but we
 * normally want to preserve them on directories.
 */
if (pflag)
rval = setfile(curr->fts_statp, 0);
else {
mode = curr->fts_statp->st_mode;
if ((mode & (S_ISUID | S_ISGID | S_ISTXT)) ||
    ((mode | S_IRWXU) & mask) != (mode & mask))
if (chmod(to.p_path, mode & mask) != 0){
warn("chmod: %s", to.p_path);
rval = 1;
}
}
continue;
}

/* Not an error but need to remember it happened */
if (stat(to.p_path, &to_stat) == -1)
dne = 1;
else {
if (to_stat.st_dev == curr->fts_statp->st_dev &&
    to_stat.st_ino == curr->fts_statp->st_ino) {
warnx("%s and %s are identical (not copied).",
    to.p_path, curr->fts_path);
badcp = rval = 1;
if (S_ISDIR(curr->fts_statp->st_mode))
(void)fts_set(ftsp, curr, FTS_SKIP);
continue;
}
if (!S_ISDIR(curr->fts_statp->st_mode) &&
    S_ISDIR(to_stat.st_mode)) {
warnx("cannot overwrite directory %s with non-directory %s",
    to.p_path, curr->fts_path);
badcp = rval = 1;
continue;
}
dne = 0;
}

switch (curr->fts_statp->st_mode & S_IFMT) {
case S_IFLNK:
if (copy_link(curr, !dne))
badcp = rval = 1;
break;
case S_IFDIR:
if (!Rflag && !rflag) {
warnx("%s is a directory (not copied).",
    curr->fts_path);
(void)fts_set(ftsp, curr, FTS_SKIP);
badcp = rval = 1;
break;
}
/*
 * If the directory doesn't exist, create the new
 * one with the from file mode plus owner RWX bits,
 * modified by the umask.  Trade-off between being
 * able to write the directory (if from directory is
 * 555) and not causing a permissions race.  If the
 * umask blocks owner writes, we fail..
 */
if (dne) {
if (mkdir(to.p_path,
    curr->fts_statp->st_mode | S_IRWXU) < 0)
err(1, "%s", to.p_path);
} else if (!S_ISDIR(to_stat.st_mode)) {
errno = ENOTDIR;
err(1, "%s", to.p_path);
}
/*
 * Arrange to correct directory attributes later
 * (in the post-order phase) if this is a new
 * directory, or if the -p flag is in effect.
 */
curr->fts_number = pflag || dne;
break;
case S_IFBLK:
case S_IFCHR:
if (Rflag) {
if (copy_special(curr->fts_statp, !dne))
badcp = rval = 1;
} else {
if (copy_file(curr, dne))
badcp = rval = 1;
}
break;
case S_IFIFO:
if (Rflag) {
if (copy_fifo(curr->fts_statp, !dne))
badcp = rval = 1;
} else {
if (copy_file(curr, dne))
badcp = rval = 1;
}
break;
default:
if (copy_file(curr, dne))
badcp = rval = 1;
break;
}
if (vflag && !badcp)
(void)printf("%s -> %s\n", curr->fts_path, to.p_path);
}
if (errno)
err(1, "fts_read");
return (rval);
}

int
mastercmp(a, b)
const FTSENT **a, **b;
{
int a_info, b_info;

a_info = (*a)->fts_info;
if (a_info == FTS_ERR || a_info == FTS_NS || a_info == FTS_DNR)
return (0);
b_info = (*b)->fts_info;
if (b_info == FTS_ERR || b_info == FTS_NS || b_info == FTS_DNR)
return (0);
if (a_info == FTS_D)
return (-1);
if (b_info == FTS_D)
return (1);
return (0);
}



B16层 发表时间: 10/24 05:29

回复: syshunter [syshunter]   版主   登录
晕`哦,这两天我一直在看UNIX系统调用方面的东西,本来觉得看的小有成就了,哪知道被NETDEMON这个代码一贴,打击不小哟,哈哈。

B17层 发表时间: 10/24 11:30

回复: 夕阳 [cimsxiyang]   版主   登录
“系统调用和系统实现”这二者根本就不是一个层次的嘛。


B18层 发表时间: 10/24 11:43

回复: syshunter [syshunter]   版主   登录
不是这么说的,很多还是有联系的,多深入点,学的就牢固点

B19层 发表时间: 10/24 14:24

回复: 狂舞西风 [jkm]   论坛用户   登录
好文章!!!

B20层 发表时间: 10/28 09:17

回复: 好好先生 [dinghj]   论坛用户   登录
好!

B21层 发表时间: 10/28 11:34

回复: CrazyKnife [top]   论坛用户   登录
 TomyChen
谢谢了哈~~!

看了两 个源码。回去又看C的书。看来看去还是迷糊~!

还在看呢~~!晕啊~~````````这是真的晕啊~`````
不过,有点收获哦~!:)


[此贴被 CrazyKnife(top) 在 10月29日11时46分 编辑过]

B22层 发表时间: 10/29 11:44

回复: 精灵 [jingling]   论坛用户   登录
LAO  DA  WO  YAO  FENG  LE 

B23层 发表时间: 10/31 03:04

回复: BearKing [bking]   版主   登录
呵呵,老大不是说把被linux玩的过程记下来么?我和朋友就被它完疼了。
记得当初刚接触linux的时候,用的是redhat。我和朋友们全都装了。我第一个装,装好后,启动到图形界面下玩了玩,紧接着朋友也装好了。可无论如何也进不了图形界面,启动后就到字符界面下去了。回想一下,原来在安装过程中忘了选择图形界面。无语,习惯性的拿出了对付win98的方法(重装)!就这样糊里糊涂的玩了有一星期的Linux。终于有人受不了了。PQmagic删掉了Linux的分区。正当他还在一如即望的等待蓝天白云时,GRUP替代了一切。无赖,只好format。过了不久,另一位朋友也忍不住了,打算干掉Linux。可还是同样受到了GRUP的折磨。这次有点经验了,估计是Linux在引导区做了手脚。先用DiskMan备份引导区。然后在删,结果失败,正当他打算还原引导区时,才发现原来刚刚备份在C盘里(nowC盘已over).气愤至极,终于Fdisk!最后轮到我了,看看见两者的后果,我真不敢去惹Linux,只好装了个win98,双系统玩玩了。在不经意中发现原来的linux引单菜单不见了,取而代之的是蓝天白云!哈哈,终于有让我干掉Linux的动力了。删掉linux,重装win98。OK,搞定。真是高兴呀!!!!


[此贴被 BearKing(bking) 在 05月24日04时02分 编辑过]

B24层 发表时间: 05/24 04:36

回复: 姬晓风 [jixiaofeng]   论坛用户   登录
好文章,对我是一个启发。

B25层 发表时间: 05/24 17:10

回复: xiean [xiean]   论坛用户   登录
[quota]
文章不错,纠正一点,不要过多的把linux和dos来比,因为dos根本就不是保护模式的操作系统,没有0级,3级的概念,linux是一个现代的操作系统,至于字符界面和x界面,个人认为最好从字符界面入手,因为linux的x界面还很不成熟 
[/quota]

what's mean?

runlevel 0, 3?

sorry....i can't type chinese now...


[此贴被 邪·安(xiean) 在 05月28日14时52分 编辑过]

B26层 发表时间: 05/28 14:05

回复: 十一月 [svlie]   论坛用户   登录
我现在正在学习Linux,你们写的文章对我有很大启发。看来我要多多的去感受程序运行的过程

B27层 发表时间: 10/25 03:40

回复: agan [ganhuilu]   论坛用户   登录
感触好^^^^^^^好版主啊


B28层 发表时间: 11/02 22:46

回复: 魔地 [modfree]   论坛用户   登录
哈哈, ????????

B29层 发表时间: 05-11-17 21:57

回复: andyjean [andyjean]   论坛用户   登录
我也在学习linux,路漫漫其修远兮哟!!!!

B30层 发表时间: 05-12-05 21:44

回复: 中国人 [liuxing20]   论坛用户   登录
作为linux的学习者,在适当的时候还是需要受受打击,这样才知道自己知道的远远不够.
看了文章后,感觉不是我们在玩系统,是系统在玩我们....

B31层 发表时间: 06-01-03 16:20

回复: [ranyixian]   论坛用户   登录
我也在学,不过我才开始,我才去买了一本书,家里没电脑,只有办公室有,我只能先学理论,再来看大家的贴子了.




B32层 发表时间: 06-01-22 10:01

回复: 死水 [illuse]   论坛用户   登录
先把c和汇编学好,再来学linux。


B33层 发表时间: 06-02-27 22:17

回复: air [airxmg]   论坛用户   登录
我要学习UNIX,多谢!

B34层 发表时间: 06-03-07 22:05

回复: 触动 [liuqh8509]   论坛用户   登录
值得说几句的主题,从有电脑行业开始到现在。
中国缺少了很多年的技术和想法。
你们都是有想法的人,也希望你们能带动一帮人跟着玩转这个行业。
其实做什么行业没关系,只是我觉得现在那帮年轻人都去玩电脑游戏,玩也没什么。可是他们全沉迷进去了。希望黑客能对他们有些启发。因为你们专业,也因为你们身上有相似的地方。

B35层 发表时间: 06-04-04 00:45

论坛: UNIX系统

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号