hechao的Linux系统分析考试重点.doc_第1页
hechao的Linux系统分析考试重点.doc_第2页
hechao的Linux系统分析考试重点.doc_第3页
hechao的Linux系统分析考试重点.doc_第4页
hechao的Linux系统分析考试重点.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

shell命令:1、/etc/passwd用户账号文件 修改密码:passwd * /etc/shadow用户口令文件2、 useradd useradd 选项 用户名(在 /etc/passwd 文件中增添了一行记录)-g用于添加用户账号时指定该用户的私有组。如不指定”-g”参数,useradd命 令将自动建立与用户账号同名的组作为该账号的私有组。 useradd g 组名 用户名-D 用于显示或设置useradd命令所使用的默认值 useradd D -g group-b base-s shell-f inactive-e expire 显示:useradd -D 修改:useradd -D -s /bin/tsch3、userdel命令用于删除指定的用户账号。其使用的语法格式为: userdel -r用户账号需要补充说明的是userdel命令可删除用户账号与相关的文件。若不加参数,则仅删除用户账号,而不删除相关文件。其中参数”-f”是用来删除用户登入目录以及目录中所有文件。 4、usermod命令可用来修改用户帐号的各种属性,包括用户主目录、私有组、登录、shell等内容。Usermod的命令格式如下:usermod -LU-c -d -e -f -g (1)-G -l -s -u 用户帐号修改用户名,把用户名”liuyidan”改名为”lyd”,使用的命令是:# usermod l lyd liuyidan(2)锁定”lyd”用户,使其不能登录。命令如下:# usermod L lyd(3)解锁”lyd”用户账号,使其可以登录。命令如下:# usermod U lyd5、groupadd命令可指定群组名称来建立新的群组账号。该组账号的ID值必须是惟一的,且数值不可为负。预设的最小值不得小于500,且每增加一个组账号ID值逐次增加。ID值0499是保留给系统账号使用。该指令使用的语法格式为:groupadd -r group其中”-r”参数是用来建立系统账号。系统账号的ID值不能大于500。下面举例说明该命令的使用方法:# groupadd lbgroup/建立组账号lbgroup# grep lbgroup /etc/group/查询group文件lbgroup组是否建立#groupadd r syslbgroup/建立系统组账号# grep lbgroup /etc/group/查询group文件syslbgroup组是否建立 6、groupmod命令用来更改群组识别码或名称。该命令的语法格式为:groupmod -g -n 群组名称命令中所使用的参数说明如下:-g 设置欲使用的群组识别码。-o 重复使用群组识别码。-n 设置欲使用的群组名称。 groupmod g 503 lbgroup7、groupdel命令用于删除指定的组账号,若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。该命令的语法格式为:groupdel 群组名称8、passwd useradd命令增加时,还需使用passwd命令为每一位新增加的用户设置口令;用户以后还可以随时用passwd命令改变自己的口令。该命令的一般格式为: passwd 用户名其中用户名为需要修改口令的用户名。只有超级用户可以使用”passwd 用户名”修改其他用户的口令,普通用户只能用不带参数的passwd命令修改自己的口令。 9、chmod 命令用法chmod命令是非常重要的,用于改变文件或目录的访问权限rwxchmod who + | - | = mode 文件名 who:u g o achmod g+r,o+r examplecnmod 554 example10、 ps命令常用用法(方便查看系统进程)使用方式:ps options -help说明:显示瞬间行程 (process) 的动态-A 列出所有的进程-w 显示加宽可以显示较多的资讯-au 显示较详细的资讯-aux 显示所有包含其他使用者的行程11、 ls 列出指定目录下的文件名,cat 显示文件内容 显示指定工作目录中所包含的内容的指令是ls,要说明的是ls命令列出文件的名字,而不是文件的内容。该命令的使用方式如下:ls 选项 文件目录列表 ls命令中的常用选项如下:ls -l命令以长格式的形式查看当前目录下所有文件,包括隐藏的ls -a命令显示当前目录下的文件夹和文件(包括隐藏的)12、grep 选项 匹配字符串 文件列表主要参数:c:只输出匹配行的计数。I:不区分大 小写(只适用于单字符)。h:查询多文件时不显示文件名。l:查询多文件时只输出包含匹配字符的文件名。n:显示匹配行及 行号。s:不显示不存在或无匹配文本的错误信息。v:显示不包含匹配文本的所有行。$ grep test d*/显示所有以d开头的文件中包含 test的行。$ grep test aa bb cc/显示在aa,bb,cc文件中匹配test的行。grep three filegrep t filegrep -v t file;找不找不以”t”开头的字符串 grep -c t file;找以”t”开头的字符串所在的行数grep -n t file;找以”t”开头的字符串所在的行数,并给出行号grep tf file; 找以t或f开头的字符串13、rpm,RPM由RedHat公司开发的软件包安装和管理程序常用命令组合:ivh:安装显示安装进度-install-verbose-hashUvh:升级软件包-Update;qpl:列出RPM软件包内的文件信息Query Package list;qpi:列出RPM软件包的描述信息Query Package install package(s);qf:查找指定文件属于哪个RPM软件包Query File;Va:校验所有的RPM软件包,查找丢失的文件View Lost;e:删除包rpm -q samba /查询程序是否安装rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm /按路径安装并显示进度rpm -ivh -relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm /指定安装目录rpm -ivh -test gaim-1.3.0-1.fc4.i386.rpm /用来检查依赖关系;并不是真正的安装;rpm -Uvh -oldpackage gaim-1.3.0-1.fc4.i386.rpm /新版本降级为旧版本rpm -qa | grep httpd搜索指定rpm包是否安装-all搜索*httpd*rpm -ql httpd搜索rpm包-list所有文件安装目录rpm -qpi Linux-1.4-6.i368.rpm查看rpm包-query-package-install package信息rpm -qpf Linux-1.4-6.i368.rpm查看rpm包-filerpm -qpR file.rpm查看包依赖关系rpm2cpio file.rpm |cpio -div 抽出文件rpm -ivh file.rpm 安装新的rpm-install-verbose-hashrpm -Uvh file.rpm 升级一个rpm-upgraderpm -e file.rpm 删除一个rpm包-eraserm命令可从文件系统中删除文件及整个目录。rm命令所使用的命令格式如下rm 选项 文件列表文件列表:希望删除的用空格分隔的文件列表,可以包括目录名-r删除文件列表中指定的目录,若不用此标志则不删除目录-f指定强行删除模式。-V在删除前回显文件名。14、 grep/egrep/fgrep grep是很常见也很常用的命令,它的主要功能是进行字符串数据的比较,然后符合用户需求的字符串打印出来,但是主意,grep在数据中查找一个字符串时,是以”整行”为单位进行数据筛选的。egrep命令等同于grep -E,利用此命令可以使用扩展的正则表达式对文本进行搜索,并把符合用户需求的字符串打印出来。fgrep命令等同于grep -F,它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。15、service start、restart、stop启动、停止、重启一个服务的shell命令的/etc/service的用法,一种是可以使用service脚本来调度,如:service 服务名 start service 服务名 stopservice 服务名 restart一种是直接执行某个服务自己的管理脚本,以smb服务为例/etc/init.d/smb start/etc/init.d/smb stop/etc/init.d/smb restart16、前后台进程与作业有关的命令1.把任务放到后台用 & 和 Ctrl+z 如 sleep 100 &;2.让后台任务从停止状态转为运行状态用 bg %N(N为后台编号,不是PID)sleep 100 z 此时任务是暂停执行状态bg %1 转为运行状态3.把后台任务调回到前台用 fg %N 4.查看后台执行的所有任务用jobs 终止后台程序 kill %N类似abcdefd.0-9的匹配模式(字符串)的用法. 在Linux系统中有以下基本的通配符: ?:表示该位置可以是一个任意的单个字符。:表示该位置可以是若干个任意字符。 方括号charset:可替代charset集中的任何单个字符比如:如果需要显示nic-1.png,nic-2.png,nic-3.png,nic-4.png,nic-5.png,只须要在终端的命令提示符后输入: ls nic-1-5.png 2、 ps,top,孤儿进程和程序,僵尸进程和程序,fork(),Vfork(),pthread_create()ps 命令可报告进程状态:使用带有 -ef 选项的 ps,返回系统中所有用户的所有进程的完整列表。一般将此 ps 命令的结果传送到 grep 中,则该结果更易于查看。例如:$ps -ef | grep oracletop实时地提供进程信息,可以查看最活跃的进程。它还拥有交互式的状态,允许用户输入命令,如 n 后面跟有 5 或 10 等数字。其结果是指示 top 显示 5 或 10 个最活跃的进程。Top 持续运行,直到您按 q 退出 top 为止。 -d : 后面可接秒数就是整个进程界面更新的秒数,默认为5 top -d 0.09 -b : 以批次的方式执行top top -b ; top -b -n 10 -p : 指定某些个PID进行查看检测 top -p 4360,4358孤儿进程:因父亲进程先退出而导致一个子进程被inin进程收养的进程僵尸进程:进程已退出,但它的父亲进程还没有回收内核资源的进程fork() 函数创建进程,此函数没有参数,若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID,类型为pid_t,;若执行失败,在父进程中返回-1 Vfork() 子函数调用vfork创建子进程,会产生一个新的子进程,但是vfork创建的子进程与父进程共享数据段,而且由vfork创建的子进程将先于父进程运行。vfork() 虚拟态下产生进程 ; kfork() 内核态下产生进程int pthread_create( pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void *), void *arg );/创建线程,成功返回0;否则返回错误的编号int pthread_exit( void *retval );/线程自己调用该函数结束进程int pthread_join(pthread *thread,void *thread_return);/调用该函数的线程将挂起,等待指定的线程结束,成功结束线程为0,否则为错误编码。一般是创建得快的线程等待慢的线程(pthread_join()线程同步的第一个方法:这个方法是让”线程创建者”等待所有”被创建线程”运行结束, 所使用的函数是:int pthread_join( pthread_t th, void *thread_return );线程同步的第二个方法:互斥量(数据类型是pthread_mutex_t)的使用,代码如下:pthread_mutex_t myMutex = PTHREAD_MUTEX_INITIALIZER互斥量用于对一段共享代码的独占(排斥别的程序使用)使用的情形, 这一段代码称为临界区. 用完后,再解除互斥。线程同步的第三个方法:条件变量的使用基本概念:当一个变量的值满足某个条件时,触发线程A去唤醒睡眠的线程B。建立条件变量的方法如下pthread_cond_t recoveryCond = PTHREAD_COND_INITIALIZER;它还需要一个与之相关的互斥量,例如:pthread_mutex_t recoveryMutex = PTHREAD_MUTEX_INITIALIZER;semaphore, mutex,critical_section,buzz 锁/spin_lock,等的数据结构和主要操作函数(1)信号量(semaphore):系统给我们提供了另外一种同步机制,信号灯,Semaphore信号量的定义:struct semaphore spinlock_t lock; #lock应该是这个信号量的自旋锁unsigned int count; #count表示的是这个信号量的计数器struct list_head wait_list; #wait_list顾名思义应该是等待链表了;在linux中,信号量用上述结构体表示,我们可以通过该结构体定义一个信号量信号量的初始化:可用void sema_init(struct semaphore *sem, int val);直接创建,其中val为信号量初值。(2) 信号量的原子操作:所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位在include/asm/atomic.h中定义了一系列原子操作,包括原子读、原子写、原子加等等,大多是直接用汇编语句来实现的p操作:down()* void down(struct semaphore *sem); /用来获取信号量,如果信号量值大于或等于0,获取信号量,否则进入睡眠状态,睡眠状态不可唤醒* void down_interruptible(struct semephore *sem); /用来获取信号量,如果信号量大于或等于0,获取信号量,否则进入睡眠状态,等待信号量被释放后,激活该程。* void down_trylock(struct semaphore *sem); /试图获取信号量,如果信号量已被其他进程获取,则立刻返回非零值,调用者不会睡眠v操作:up()* void up(struct semaphore *sem); /释放信号量,并唤醒等待该资源进程队列的第一个进程down()操作可以理解为申请资源,up()操作可以理解为释放资源,因此,信号量实际表示的是资源的数量以及是否有进程正在等待。在semaphore结构中,count相当于资源计数,为正数或0时表示可用资源数,-1则表示没有空闲资源且有等待进程。而等待进程的数量并不关心。这种设计主要是考虑与信号量的原语相一致,当某个进程执行up()函数释放资源,点亮信号灯时,如果count恢复到0,则表示尚有进程在等待该资源,因此执行唤醒操作。(3)mutex在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性。每个对象都对应于一个可称为 互斥锁 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。首先介绍一下互斥锁所使用的数据结构:struct mutex atomic_t count; /引用计数器1: 锁可以利用小于等于0:该锁已被获取,需要等待spinlock_t wait_lock; / 自旋锁类型,保证多cpu下,对等待队列访问是安全的。struct list_head wait_list; /等待队列,如果该锁被获取,任务将挂在此队列上,等待调度。;int pthread_mutex_lock(pthread_mutex_t *mutex)加锁int pthread_mutex_unlock(pthread_mutex_t *mutex)解锁int pthread_mutex_trylock(pthread_mutex_t *mutex)测试加锁不论哪种类型的锁,都不可能被两个不同的线程同时得到,而必须等待解锁四、critical_section(RTL_CRITICAL_SECTION):每个线程中访问临界资源的那段程序称为临界区struct RTL_CRITICAL_SECTIONPRTL_CRITICAL_SECTION_DEBUG DebugInfo;LONG LockCount; LONG RecursionCount;HANDLE OwningThread; HANDLE LockSemaphore;ULONG_PTR SpinCount; ;5、 buzz 锁/上面提到的mutex互斥锁仅仅是锁中的一种。互斥锁被锁定时进入休眠,而系统还能正常运转,但有很多时候,锁应该不仅仅互斥访问,甚至应该让系统挂起,直至锁成功,也就是说在锁操作中自旋,这就是Linux中的spinlock机制Buzz 锁又称”自旋锁”,是用来保护数据和代码段 的一种最原始方法。利用 Buzz 锁,在某个时刻只允许一个进程访问临界区内的代码。从实现上来说,自旋锁比较简单,主要分为两部分, 一部分是中断处理,一部分是自旋处理,最基础的部分在 spin_lock_string和spin_unlock_string这两段汇编代 码中:spin_lock_string对 锁原子减1,循环检查锁值,直到锁值大于0;而 spin_unlock_string则是对锁赋值1。 spin_lock_string用于构成spin_lock()函数, spin_unlock_string用于构成spin_unlock()函数。 spin_lock()/spin_unlock()构成了自旋锁机制的基 础对共享资源在上下文环境中的使用方法:使用信号量static DECLARE_MUTEX(nf_sockopt_mutex);int nf_register_sockopt(struct nf_sockopt_ops *reg).if (down_interruptible(&nf_sockopt_mutex) != 0)return -EINTR;.out:up(&nf_sockopt_mutex);return ret;等待队列(消息队列)某个进程等待该资源时被添加到该等待队列中消息队列(进程间的通信)提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。Linux的消息队列(queue)实质上是一个链表, 它有消息队列标识符(queue ID). msgget创建一个新队列或打开一个存在的队列; msgsnd向队列末端添加一条新消息; msgrcv从队列中取消息, 取消息是不一定遵循先进先出的, 也可以按消息的类型字段取消息.每个消息队列都有一个msqid_ds结构与其关联:在Linux 2.4内核中也有相应的技术实现,包括信号量、自旋锁、原子操作和等待队列,其中原子操作和等待队列又是实现信号量的底层生产者消费者问题:生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。哲学家就餐问题:产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。解决死锁的三个方法:1. 死锁的预防:静态预防采用资源的静态分配方法,而死锁的避免则采用资源的动态分配方法2. 死锁的避免:有序资源分配法和银行家算法3死锁的检测:考查某一时刻系统状态是否合理进程状态和迁移图:(1)TASK_RUNNING(运行态):进程是可执行的;或者正在执行,或者在运行队列中等待执行。(2)TASK_INTERRUPTIBLE(可中断睡眠态):进程被阻塞,等待某些条件的完成。一旦完成这些条件,内核就会将该进程的状态设置为运行态。(3)TASK_UNINTERRUPTIBLE(不可中断睡眠态):进程被阻塞,等待某些条件的完成。与可中断睡眠态不同的是,该状态进程不可被信号唤醒。(4)TASK_ZOMBIE(僵死态):该进程已经结束,但是其父进程还没有将其回收。(5)TASK_STOP(终止态):进程停止执行。通常进程在收到SIGSTOP、SIGTTIN、SIGTTOU等信号的时候会进入该状态。Linux 采用 Buddy 算法有效分配和释放物理页块free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。sync是一个linux同步命令,含义为迫使缓冲块数据立即写盘并更新超级块。其中包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。使用原理:在linux系统中,为了加快数据的读取速度,默认情况下,某些数据将不会直接写入硬盘,而是先暂存内存中,如果一个数据被重复写,这样速度一定快,但存在一个问题,万一重新启动,或者是关机,或者是不正常断电的情况下,由于数据还没来得及存入硬盘,会造成数据更新不正常,这时需要命令sync进行数据的写入,即#sync,在内存中尚未更新的的数据会写入硬盘中。当然正常情况下,关闭系统时会自动进行内存数据于硬盘数据的同步检测,保证硬盘数据在关闭系统时是最新的。使用场合:1.在关机或者开机之前最好多执行这个几次,以确保数据写入硬盘。2.挂载时,需要很长时间的操作动作(比如,cp 大文件,检测文件),在这个动作之后接sync。3.卸载U盘或其他存储设备,需要很长时间,使用sync。1、对于每一个进程而言,内核为其单独分配了一个内存区域,这个区域存储的是内核栈和该进程所对应的一个小型进程描述符thread_info结构(可以用来描述僵尸进程)2、PID是进程ID,PPID是父进程ID3、exec函数fork函数创建子进程后,子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程完全由新程序代换,而新进程则从其main函数开始执行。因为调用exec并不创建新进程,所以前后的进程ID并未改变。Exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈段。有六种不同的exec函数可供使用,他们常常被统称为exec函数。这些exec函数都是UNIX进程控制原语。用fork可以创建新进程,用exec可以执行新的程序。Exit函数和两个wait函数处理终止和等待终止。这些是我们需要的基本的进程控制原语。说是exec系统调用,实际上在Linux中,并不存在一个exec()的函数形式,exec指的是一组函数,一共有6个,分别是:#include extern char *environ;int execl(const char *path, const char *arg, .);int execlp(const char *file, const

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论