linux报告
❶ linux进程通信实验报告
一、实验目的:
进一步认识并发(并行)执行的概念,区别顺序执行和并发(并行)执行。
分析进程争用临界资源的现象,学习解决进程排斥的方法。
二、实验环境:
一台至少具有256MB内存的计算机,并安装Red Hat Linux 9的Linux操作系统。
三、实验内容:
1. 预备知识
fork函数调用:创建一个新进程。
getpid函数调用:获得一个进程的pid。
lockf系统的调用:在进程同步控制中为进程加锁。
2. 编写一段程序(程序名为fork1.c),使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。
(1)进入Linux操作系统。
(2)打开终端。进入vi编译器。
(3)输入源程序代码。
(4)按Esc键,进入命令模式后,输入“: wq文件名”就可以运行该程序了。
❷ 如何查看linux系统警告日志
1、打开WDCP服务管理系统登录界面,输入用户名和密码,点击登录。
6、在操作日志中,可以看到进行的操作,必要时可以找回误删的数据。
❸ 操作系统管理Linux 系统进程实验报告
什么是进程
比如:windows上安装的QQ,我们会将其称为QQ程序,那么当QQ运行之后,在任务管理器中,我们可以看到QQ程序在运行着,此时,我们称其为:QQ进程。
言简意赅总结:当我们运行一个程序,那么我们将该程序叫进程
注意:
1.当程序运行为进程后,系统会为该进程分配内存,以及运行的身份和权限。
2.在进程运行的过程中,服务器上回有各种状态来表示当前进程的指标信息。
进程是已启动的可执行程序的运行实例,进程有以下组成部分:
分配内存, 已分配内存的地址空间
安全属性, 进程的运行身份和权限
进程代码, 运行一个或多个的线程
进程状态, 进程运行后的多种状态
静态程序, 二进制文件, 静态/bin/ls, /usr/sbin/sshd
动态进程, 程序运行的过程, 有生命周期及运行状态
进程的运行环境,包括以下几个部分:
局部和全局变量
当前的调度上下文
分配给进程使用的系统资源,例如文件描述符、网络端口等
给进程分配对应的pid,ppid
程序和进程的区别
1.程序是数据和指令的集合,是一个静态的概念,比如/bin/ls、/bin/cp等二进制文件,同事程序可以长期存在系统中。
2.进程是一个程序的运行过程,是一个动态概念,进程是存在生命周期概念的,也就是说进程会随着程序的终止而销毁,不会永远在系统中存在。
进程的生命周期
程序运行时进程的状态关系:
1.当父进程接收到任务调度时,会通过fork派生子进程来处理,那么子进程会集成父进程的衣钵。
2.子进程在处理任务代码时,父进程会进入等待的状态...
3.如果子进程在处理任务过程中,父进程退出了,子进程没有退出,那么这些子进程就没有父进程来管理了,就变成了僵尸进程。
4.每个进程都会有自己的PID号,(process id)子进程则PPID
❹ 如何linux内核报告问题
Linux Kernel BUG:soft lockup CPU#1 stuck分析
1.线上内核bug日志
kernel: Deltaway too big! 18428729675200069867 ts=18446743954022816244 write stamp =18014278822746377
kernel:------------[ cut here ]------------
kernel:WARNING: at kernel/trace/ring_buffer.c:1988 rb_reserve_next_event+0x2ce/0x370()(Not tainted)
kernel:Hardware name: ProLiant DL360 G7
kernel:Moles linked in: fuse ipv6 power_meter bnx2 sg microcode serio_raw iTCO_wdtiTCO_vendor_support hpilo hpwdt i7core_edac edac_core shpchp ext4 mbcache jbd2sd_mod crc_t10dif hpsa radeon ttm drm_kms_helper drm i2c_algo_bit i2c_coredm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]
kernel: Pid:5483, comm: master Not tainted 2.6.32-220.el6.x86_64 #1
kernel: CallTrace:
kernel:[<ffffffff81069b77>] ? warn_slowpath_common+0x87/0xc0
kernel:[<ffffffff81069bca>] ? warn_slowpath_null+0x1a/0x20
kernel:[<ffffffff810ea8ae>] ? rb_reserve_next_event+0x2ce/0x370
kernel:[<ffffffff810eab02>] ? ring_buffer_lock_reserve+0xa2/0x160
kernel:[<ffffffff810ec97c>] ? trace_buffer_lock_reserve+0x2c/0x70
kernel:[<ffffffff810ecb16>] ? trace_current_buffer_lock_reserve+0x16/0x20
kernel:[<ffffffff8107ae1e>] ? ftrace_raw_event_hrtimer_cancel+0x4e/0xb0
kernel:[<ffffffff81095e7a>] ? hrtimer_try_to_cancel+0xba/0xd0
kernel:[<ffffffff8106f634>] ? do_setitimer+0xd4/0x220
kernel:[<ffffffff8106f88a>] ? alarm_setitimer+0x3a/0x60
kernel:[<ffffffff8107c27e>] ? sys_alarm+0xe/0x20
kernel:[<ffffffff8100b308>] ? tracesys+0xd9/0xde
kernel: ---[end trace 4d0a1ef2e62cb1a2 ]---
abrt-mp-oops: Reported 1 kernel oopses to Abrt
kernel: BUG: softlockup - CPU#11 stuck for 4278190091s! [qmgr:5492]
kernel:Moles linked in: fuse ipv6 power_meter bnx2 sg microcode serio_raw iTCO_wdtiTCO_vendor_support hpilo hpwdt i7core_edac edac_core shpchp ext4 mbcache jbd2sd_mod crc_t10dif hpsa radeon ttm drm_kms_helper drm i2c_algo_bit i2c_coredm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]
kernel: CPU 11
kernel:Moles linked in: fuse ipv6 power_meter bnx2 sg microcode serio_raw iTCO_wdtiTCO_vendor_support hpilo hpwdt i7core_edac edac_core shpchp ext4 mbcache jbd2sd_mod crc_t10dif hpsa radeon ttm drm_kms_helper drm i2c_algo_bit i2c_coredm_mirror dm_region_hash dm_log dm_mod [last unloaded: scsi_wait_scan]
kernel:
kernel: Pid:5492, comm: qmgr Tainted: G W ---------------- 2.6.32-220.el6.x86_64 #1 HPProLiant DL360 G7
kernel: RIP:0010:[<ffffffff8106f730>] [<ffffffff8106f730>]do_setitimer+0x1d0/0x220
kernel: RSP:0018:ffff88080a661ef8 EFLAGS: 00000286
kernel: RAX:ffff88080b175a08 RBX: ffff88080a661f18 RCX: 0000000000000000
kernel: RDX:0000000000000000 RSI: 0000000000000082 RDI: ffff88080c8c4c40
kernel: RBP:ffffffff8100bc0e R08: 0000000000000000 R09: 0099d7270e01c3f1
kernel: R10:0000000000000000 R11: 0000000000000246 R12: ffffffff810ef9a3
kernel: R13:ffff88080a661e88 R14: 0000000000000000 R15: ffff88080a65a544
kernel: FS:00007f10b245f7c0(0000) GS:ffff88083c4a0000(0000) knlGS:0000000000000000
kernel: CS:0010 DS: 0000 ES: 0000 CR0: 000000008005003b
kernel: CR2:00007ff955977380 CR3: 000000100a80b000 CR4: 00000000000006e0
kernel: DR0:0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
kernel: DR3:0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
kernel:Process qmgr (pid: 5492, threadinfo ffff88080a660000, task ffff880809577500)
kernel: Stack:
kernel:00007f10b323def0 00007f10b248ead0 00007f10b26d0f78 00007f10b248ede0
kernel:<0> ffff88080a661f68 ffffffff8106f88a 0000000000000000 0000000000000000
kernel:<0> 000000000000014c 00000000000f423d 0000000000000000 0000000000000000
kernel: CallTrace:
kernel:[<ffffffff8106f88a>] ? alarm_setitimer+0x3a/0x60
kernel:[<ffffffff8107c27e>] ? sys_alarm+0xe/0x20
kernel:[<ffffffff8100b308>] ? tracesys+0xd9/0xde
kernel: Code:89 ef e8 74 66 02 00 83 3d 15 69 b5 00 00 75 37 49 8b 84 24 70 07 00 00 48 0508 08 00 00 66 ff 00 66 66 90 fb 66 0f 1f 44 00 00 <31> c0 e9 64 fe ff ff49 8b 84 24 68 07 00 00 48 c7 80 d0 00 00
kernel: CallTrace:
kernel:[<ffffffff8106f769>] ? do_setitimer+0x209/0x220
kernel:[<ffffffff8106f88a>] ? alarm_setitimer+0x3a/0x60
kernel:[<ffffffff8107c27e>] ? sys_alarm+0xe/0x20
kernel:[<ffffffff8100b308>] ? tracesys+0xd9/0xde
abrt-mp-oops: Reported 1 kernel oopses to Abrt
2.内核软死锁(soft lockup)bug原因分析
Soft lockup名称解释:所谓,soft lockup就是说,这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。
Linux内核对于每一个cpu都有一个监控进程,在技术界这个叫做watchdog(看门狗)。通过ps –ef | grep watchdog能够看见,进程名称大概是watchdog/X(数字:cpu逻辑编号1/2/3/4之类的)。这个进程或者线程每一秒钟运行一次,否则会睡眠和待机。这个进程运行会收集每一个cpu运行时使用数据的时间并且存放到属于每个cpu自己的内核数据结构。在内核中有很多特定的中断函数。这些中断函数会调用soft lockup计数,他会使用当前的时间戳与特定(对应的)cpu的内核数据结构中保存的时间对比,如果发现当前的时间戳比对应cpu保存的时间大于设定的阀值,他就假设监测进程或看门狗线程在一个相当可观的时间还没有执。Cpu软锁为什么会产生,是怎么产生的?如果linux内核是经过精心设计安排的CPU调度访问,那么怎么会产生cpu软死锁?那么只能说由于用户开发的或者第三方软件引入,看我们服务器内核panic的原因就是qmgr进程引起。因为每一个无限的循环都会一直有一个cpu的执行流程(qmgr进程示一个后台邮件的消息队列服务进程),并且拥有一定的优先级。Cpu调度器调度一个驱动程序来运行,如果这个驱动程序有问题并且没有被检测到,那么这个驱动程序将会暂用cpu的很长时间。根据前面的描述,看门狗进程会抓住(catch)这一点并且抛出一个软死锁(soft lockup)错误。软死锁会挂起cpu使你的系统不可用。
如果是用户空间的进程或线程引起的问题backtrace是不会有内容的,如果内核线程那么在soft lockup消息中会显示出backtrace信息。
3.根据linux内核源码分析错误
根据我们第一部分内核抛出的错误信息和call trace(linux内核的跟踪子系统)来分析产生的具体原因。
首先根据我们的centos版本安装相应的linux内核源码,具体步骤如下:
(1)下载源码的rpm包kernel-2.6.32-220.17.1.el6.src.rpm
(2)安装相应的依赖库,命令:yuminstall rpm-build redhat-rpm-config asciidoc newt-devel
(3)安装源码包:rpm -ikernel-2.6.32-220.17.1.el6.src.rpm
(4)进入建立源码的目录:cd~/rpmbuild/SPECS
(5)建立生成源码目录:rpmbuild-bp --target=`uname -m` kernel.spec
下面开始真正的根据内核bug日志分析源码:
(1)第一阶段内核错误日志分析(时间在Dec 4 14:03:34这个阶段的日志输出代码分析,其实这部分代码不会导致cpu软死锁,主要是第二阶段错误日志显示导致cpu软死锁)
我们首先通过日志定位到相关源代码:看下面日志:Dec 4 14:03:34 BP-YZH-1-xxxx kernel: WARNING: atkernel/trace/ring_buffer.c:1988 rb_reserve_next_event+0x2ce/0x370() (Not tainted)
根据日志内容我们可以很容易的定位到kernel/trace/ring_buffer.c这个文件的1988行代码如下:WARN_ON(1)。
先简单解释一下WARN_ON的作用:WARN_ON只是打印出当前栈信息,不会panic。所以会看到后面有一大堆的栈信息。这个宏定义如下:
#ifndef WARN_ON
#defineWARN_ON(condition) ({ \
int __ret_warn_on = !!(condition); \
if (unlikely(__ret_warn_on)) \
__WARN(); \
unlikely(__ret_warn_on); \
})
#endif
这个宏很简单保证传递进来的条件值为0或者1(两次逻辑非操作的结果),然后使用分支预测技术(保证执行概率大的分支紧邻上面的指令)判断是否需要调用__WARN()宏定义。如果满足条件执行了__WARN()宏定义也接着执行一条空指令;。上面调用WARN_ON宏是传递的1,所以会执行__WARN()。下面继续看一下__WARN()宏定义如下:
#define __WARN() warn_slowpath_null(__FILE__,__LINE__)
从接下来的call trace信息中我们也确实发现调用了warn_slowpath_null这个函数。通过在linux内核源代码中搜索这个函数的实现,发现在panic.c(内核恐慌时的相关功能实现)中实现如下:
voidwarn_slowpath_null(const char *file, int line)
{
warn_slowpath_common(file, line,__builtin_return_address(0),
TAINT_WARN, NULL);
}
EXPORT_SYMBOL(warn_slowpath_null);//都出这个符号,让其他模块可以使用这个函数
同样的我们看到了warn_slowpath_common这个函数,而在call trace当中这个函数在warn_slowpath_null函数之前打印出来,再次印证了这个流程是正确的。同样在panic.c这个文件中我发现了warn_slowpath_common这个函数的实现如下:
static voidwarn_slowpath_common(const char *file, int line, void *caller,
unsigned taint, struct slowpath_args *args)
{
const char *board;
printk(KERN_WARNING "------------[ cut here]------------\n");
printk(KERN_WARNING "WARNING: at %s:%d %pS()(%s)\n",
file, line, caller, print_tainted());
board = dmi_get_system_info(DMI_PRODUCT_NAME);//得到dmi系统信息
if (board)
printk(KERN_WARNING "Hardware name:%s\n", board);//通过我们的日志信息可以发现我们硬件名称是ProLiant DL360 G7
if (args)
vprintk(args->fmt, args->args);
print_moles();//打印系统模块信息
mp_stack();//mp信息输出(call trace开始)
print_oops_end_marker();//打印oops结束
add_taint(taint);
}
分析这个函数的实现不难发现我们的很多日志信息从这里开始输出,包括打印一些系统信息,就不继续深入分析了(请看代码注释,里面调用相关函数打印对应信息,通过我分析这些函数的实现和我们的日志信息完全能够对应,其中mp_stack是与cpu体系结构相关的,我们的服务器应该是属于x86体系)。这里在继续分析一下mp_stack函数的实现,因为这个是与cpu体系结构相关的,而且这个函数直接反应出导致内核panic的相关进程。这个函数实现如下:
/*
* The architecture-independent mp_stackgenerator
*/
void mp_stack(void)
{
unsigned long stack;
printk("Pid: %d, comm: %.20s %s %s %.*s\n",
current->pid, current->comm,print_tainted(),
init_utsname()->release,
(int
❺ linux网络配置实验报告
http://wenku..com/view/bb2754a20029bd64783e2cf0.html
❻ 操作系统Linux实验报告3张妮
1) 启动vmware虚拟机2) 单击“文件—>新建?虚拟机”,出现“安装虚拟机向导”对话框,单击“下一步”,选“典型”;
3)“客户机操作系统”选择安装Linux,版本选“RedHat Linux”,单击“下一步”;
4) 在“虚拟机名称”处:输入“LINUX”, 创建指定位置(不要选择在C盘)的磁盘映像文件linux.vmx单击“下一步”,出现“网络连接” 设置界面,选择“使用桥接网络” 单击下一步;
5) 磁盘容量为8G, 单击“完成”;
6)编辑虚拟机设置:
双击设备栏“CD-ROM”,选择“使用ISO镜像”;指定镜像文件路径,例如: D:\RedHatLinux_ISOFiles\RedHatLinux9_i386_disc1.iso ;
Floppy设备栏取消“打开电源时连接“
7) 配置步骤完成,启动系统。
❼ 求份LINUX实习报告不足和收获
4.1学习所得
我归纳的一下:其中用户管理重点学习passwd、shadow、group 3个文件和useradd、passwd、groupadd、usermod 4个关键性命令;创建文件系统命令touch、安装文件系统命令、、df还有find命令;以及rpm的使用等;其中,在软件包安装部分遇到问题,自己不能完成包安装。后来自己在网上查阅了一些资料和多练习才安装成功,另外我觉得本次实习的实践性很强,必须要自己亲手操作一边,在问题和解决问题的循环中才能真正完成本次实习任务。本次实习内容较多,对于有些知识我还比较生疏,没能熟练使用。在下来的学习中加强实践练习,夯实系统管理的具体知识,提升上机操作能力。
对于我个人而言,我对这门课程不太感兴趣。所以在实习过程中我充分利用自己的实习时间,反复的去练习实习项目,在练习中发现问题和解决问题,这样不断的提升自己的学习能力,在结合一些有趣的实验和部分同学进行讨论。非常感谢实习导师们在实习过程中对我们的指导,此次实习我觉得自己收获很多,对我以后的学习和工作有非常大的帮助,在以后的学习中我会更加努力的去学习和加深自己的专业知识。实习有很多的好处,它的好处有验证自己是否真的掌握了这些知识,以及对那些知识的不清楚,在实习中去完善自己的不足,加强和巩固自己的不足,在实践中去验证理论,用理论去解决实践中遇到的问题。
4.2经验教训
经过几天的实习我的长进了很多,我学会了在linux系统下如何进行DNS域名系统配置与管理,对DNS服务器有了更深刻了解,通过两周的实训操作,对常见服务器的搭建与配置管理有了深刻的体会与了解。这次实训不仅让我们在理论上对linux有了全新的认识,在实践能力上也得到了提高,对linux的许多知识加以巩固加深,明白了作为一名新时期的人一定要做到学以致用。实训期间,遇到不懂的问题就问同学,通过同学耐心讲解,克服了许多难题,使我懂得了团结就是力量。在成长的道路上,我们要不断学习,不断进步,使自己得到提升。这次实训对于我们以后学习、找工作也是受益匪浅的。相信这些宝贵的经验会成为我们今后成功的重要基石。,让我弥补了自己许多的不足。其实成功只离你仅有几步之遥,以前有许多的东西都没有学的很扎实,但是经过这一周的实习让我的知识又重新上了一个台阶,在这次实习中我学到了很多的东西,从中自己也在一步的探索中,看到自己一点一滴的变化。在一周的实训中遇到了不少的问题,如果在linux中配置dns的时候马虎,不细心,就会导致启用失败。而dns服务器配置问题也值得我们去理解,去实践,琢磨了很久,才琢磨透彻。
4.3实习体会
通过本次的实习,我知道了“有心人天不负”,我们只有对什么都注意观察、分析、总结、归纳、提炼,才能使自己的工作做出成绩。只有做一个有心人,才能捕捉到每一个细小变化,作出迅速反应,捕捉住每一条信息。“世上无难事,就怕有心人”,做有心人,勤于思考,才能改进我们的工作方法。“学为中,弃为下,悟为上”。勤于思考,才能领悟,才能提高,才能做得更好。
要想在短暂的实习时间内,尽可能多的学一些东西,这就需要跟老师和同学有很好的沟通,加深彼此的了解,刚到培训基地,老师并不了解你的能力,不清楚你会做哪些工作,不清楚你想了解什么样的知识,所以跟老师建立起很好的沟通是很必要的。
在信息时代,学习是不断地汲取新信息,获得事业进步的动力。作为一名青年学子更应该把学习作为保持工作积极性的重要途径。只有将理论付诸于实践才能实现理论自身的价值,也只有将理论付诸于实践才能使理论得以检验。同样,一个人的价值也是通过实践活动来实现的,也只有通过实践才能锻炼人的品质,彰显人的意志。必须在实际的工作和生活中潜心体会,并自觉的进行这种角色的转换。
这一周的实习,使我对linux有了很深的定义,自己在学习中出现的各种问题,也让我重新审视了自己,并完善自己在学习中的不当方法,学会自己去探索发现,让自己也变得善于动脑,善于思考,不倚仗他人。
学以致用,是人生最大的收获。我会进一步的认识并扩展专业知识,增长见识,不断充实自己,使自己不断的吸收养分,各方面得到充分的提高。为以后出身社会,打下坚实的基础。每一日你所付出的代价都比前一日高,因为你的生命又消短了一天,所以每一日你都要更积极。今天太宝贵,不应该为酸苦的忧虑和辛涩的悔恨所销蚀,抬起下巴,抓住今天,它不再回来。人要走进知识宝库,是一辈子的事情,不可能一蹴而就。因此我们要学习的东西太多了。
❽ 关于Linux的实训报告
Linux
实
训
报
告
班级:网络081
姓名:徐娣娣
学号:5号
实训内容:
1、 文本方式安装RedLinux系统,并设置成默认情况下从文本模式启动,启动时等待5秒钟。
2、 建立目录:
3、 把文件file复制到/tmp/jxgcxy目录下,并重新命名为temp,修改权限为:所有者读、写、执行,同组用读、写,其他人读。删除目录wl。
4、 把/etc/shadow文件中的最后10行复制到test.c文件中。
5、 添加用户test,限定用户test在/home分区下,只能使用最多20MB磁盘空间。
6、 某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:(1)在下午4:50删除/abc目录下的全部目录和全部文件。(2)每周五下午的5:00将/home/test目录下的所有文件归档并压缩为/backup目录中的test-data.tar.gz文件。
7、 实现磁盘配额。添加十个用户:test1~test10,对test1用户进行限制,硬块限制1000,I节点硬限制100,软限制50,并设置限制时间为3天,把test1用户的配额设置复制给其他9个用户。
8、 新建一个用户jxgcxy,指定该用户的主目录为/tmp/jxgcxy,用户编号为550,组编号为580,用到的shell为bash,将用户test1改名成为user1,并修改它的主目录为/home/user1。将test2设为root组,并该帐户的有效期限设为1个月,查看相应文件是否设置成功。
9、 用ps和top命令查看进程,比较两种方法的优缺点,并非别记录显示结果中各部分的含义以及top中多处时间刷新一次,将ftp的优先级设为-5,将用户test的优先级设为-5。
10、 在linux系统上安装VNC服务器,在windows系统上安装VNC客户端软件,通过客户端软件操作linux系统。
11、 设计一个shell程序,在/userdate目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者在组的权限为:读、执行。
短暂的实习生活在忙忙碌碌中度过了,虽然极其短暂但也给予我好多的感触,我也终于明白了学校为何要采取这种实训活动,不只是为了加强知识的补充,也是为了把以前学到的知识总结起来,以及复习以前所学的知识。