1、加载bios硬件信息,并获取第一个启动设备的代号 2、读取第一个启动设备的mbr到物理内存,物理内存的内容就是Boot Loader了。 3、运行Boot Loader(如grub,lilo等),初始化硬件设备,建立内存空间映射图。 4、根据Boot Loader设定的内核映像路径,系统读取内存映像,解压内核,尝试驱动所有硬件设备。 5、运行第一个程序/sbin/init。 6、执行第一个/etc/rc.d/rc.sysinit脚本程序 7、依据/etc/modules.conf装载内核模块。 8、执行不同运行级别的脚本程序 9、执行/etc/rc.d/rc.local脚本程序 10、执行/bin/login,进入等待用户登录状态。
启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。
启动第二步--读取MBR 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。 系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0x7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
启动第三步--Boot Loader Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。 Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。 我们以Grub为例来讲解吧,毕竟用lilo和spfdisk的人并不多。 系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
启动第四步--加载内核 根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“UncompressingLinux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。 系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
启动第五步--用户层init依据inittab文件来设定运行等级 内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。 其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:关机 1:单用户模式 2:无网络支持的多用户模式 3:有网络支持的多用户模式 4:保留,未使用 5:有网络支持有X-Window支持的多用户模式 6:重新引导系统,即重启
关于/etc/inittab文件的学问,其实还有很多,在后序文章中设计到的,卖个关子,敬请期待,呵呵
启动第六步--init进程执行rc.sysinit 在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的:P
启动第七步--启动内核模块 具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
启动第八步--执行不同运行级别的脚本程序 根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
启动第九步--执行/etc/rc.d/rc.local 你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
启动第十步--执行/bin/login程序,进入登录状态 此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。
/etc/sysconfig/network 该文件用来指定服务器上的网络配置信息, 包含了控制和网络有关的文件和守护程序的行为的参数 /etc/hosts IP地址和主机名的映射 包含了IP 地址和主机名之间的映射还包括主机名的别名IP,地址的设计使计算机容易识别,但对于人却很难记住它们,为了解决这个问题,创建了/etc/hosts 这个文件。下面是一个例子文件 /etc/services 包含了服务名和端口号之间的映射,不少的系统程序要使用这个文件,下面是RedHat 安装时缺省的/etc/services 中的前几行. 最左边一列是主机服务名 ,中间一列是端口号,“/ ”后面是端口类型, 可以是TCP 也可以是UDP 。任何后面的列都是前面服务的别名 /etc/host.conf 有两个文件声明系统到哪里寻找名字信息来配置 UNIX名字解析器的库。 /etc/nsswitch.conf 是由Sun 公司开发并用于管理系统中多个配置文件查找的顺序,它比/etc/host.conf 文件提供了更多的功能 /etc/resolv.conf 配置DNS 客户,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数 /etc/xinetd.conf /etc/xinetd.d/ /etc/modules.conf 该配置文件定义了各种需要在启动时加载的模块的参数信息 /etc/sysconfig/network-scripts/ifcfg-ethN 系统网络设备的配置文件保存在”/etc/sysconfig/network-scripts”目录下,ifcfg-eth0 包含第一块网卡的配置信息,ifcfg-eth1 包含第二块网卡的配置信息
现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法
如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。
(1)用文本编辑器打开/etc/profile
(2)在profile文件末尾加入: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$PATH :$JAVA_HOME/bin CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib: export JAVA_HOME export PATH export CLASSPATH
(3)重新登录
注解: a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk安装目录 b. linux下用冒号“:”来分隔路径 c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。 d. CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。 e. export是把这三个变量导出为全局变量。 f. 大小写必须严格区分。
这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。
(1)用文本编辑器打开用户目录下的.bashrc文件
(2)在.bashrc文件末尾加入: set JAVA_HOME=/usr/share/jdk1.5.0_05 export JAVA_HOME set PATH=$PATH :$JAVA_HOME/bin export PATH set CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export CLASSPATH
(3)重新登录
不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。 只需在shell终端执行下列命令: export JAVA_HOME=/usr/share/jdk1.5.0_05 export PATH=$PATH: $JAVA_HOME/bin export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
centos用户&组权限&添加删除用户问题详解
Linux操作系统是多用户多任务操作系统,包括用户账户和组账户两种 细分用户账户(普通用户账户,超级用户账户)除了用户账户以为还有组账户所谓组账户就是用户账户的集合,centos组中有两种类型,私有组和标准组,当创建一个新用户时,若没有指定他所属的组,centos就建立以个人该用户相同的私有组,此私有组中只包括用户自己。标准组可以容纳多个用户,如果要使用标准组,那创建一个新的用户时就应该指定他所属于的组,从另外一方面讲,同一个用户可以属于多个组,例如某个单位的领导组和技术组,lik是该单位的技术主管,所以他就是属于领导组和技术组。当一个用户属于多个组时,其登录后所属的组是主组,其它组为附加组。
Linux环境下的账户系统文件主要在/etc/passwd, /etc/shadow,/etc/group,和/etc/gshadow四个文件。基本含义就不多说了重点说一下,root的uid是0,从1-499是系统的标准账户,普通用户从uid 500开始。
使用命令管理账户 useradd 选项 用户名//添加新用户 usermod 选项 用户名//修改已经存在的用户 userdel -r 用户名//删除用户表示自家目录一起删除。 groupadd 选项 组名// 添加新组 groupmod 选项 组名//修改已经存在的组 groupdel 组名 //删除已经存在的特定组。 例子 useradd zhh888 //添加一个用户zh888 groupadd blog //新建一个blog组 useradd -G blog zh //表示创建一个新用户zh,同时加入blog附加组中。 useradd -d /var/ftp/pub -M ftpadmin //创建一个新用户ftpadmin,指定目录是/var/ftp/pub,不创建自家目录(-M) useradd –G root,ftp,sshd –d /home/motang motang //创建一个新用户motang,指定目录是/home/motang,同时加入root, ftp,sshd组中 usermod -G blog zh888 //表示将zh888添加到附加组blog中去。 gpasswd –d motang root //表示从root组中删除motang用户 userdel ftpadmin //表示删除ftpadmin用户 userdel -r zhh888 //表示删除zh888和/home中的目录一起删除。 groupdel blog //表示删除blog组。
口令管理及时效 创建用户之后就要给用户添加密码,设置的口令的命令式passwd passwd 选项 用户名 passwd -l 用户名账号名//禁止用户账户口令 passwd -S 用户名//表示查看用户账户口令状态 passwd -u 用户名//表示恢复用户账号 passwd -d 用户名//表示删除用户账户口令
chage 命令是保护密码的时效这样可以防止其他人猜测密码的时间。 chage 选项 用户名 参数有 -m days, -M days ,-d days, -I days ,-E date, -W days,-l 例子:#chage -m 2 -M 30 -W zhh//表示的意思是要求用户zhh两天内不能更改密码,并且口令最长存活期是30天,并且口令过期5天通知zhh
用户和组的状态查询命令 whoami //用于显示当前的用户名称。 groups 用户名//表示显示指定的用户所属的组,如果没指定用户则是当前用户所属的组。 id //表示显示当前用户的uid gid和用户所属的组列表。 su - 用户//表示转换到其他用户,如果su表示切换到自己的当前用户。 newgrp 组名//表示转换用户的当前组到指定的附加组,用户必须属于该组才能进行。
更改属主和同组人 有时候还需要更改文件的属主和所属的组。只有文件的属主有权更改其他属主和所属的组,用户可以把属于自己的文件转让给大家。改变文件属主用chown命令 chown [-R] <用户名或组><文件或目录> chown zh888 files//把文件files属主改成zh888用户。 chown zh888.zh888 files//将文件files的属主和组都改成zh888。 chown -R zh888.zh888 files//将files所有目录和子目录下的所有文件或目录的主和组都改成zh888.文件或目录>用户名或组>
设置文件的目录和目录生成掩码 用户可以使用umask命令设置文件默认的生成掩码。默认的生成掩码告诉系统创建一个文件或目录不应该赋予哪些权限。如果用户将umask命令放在环境文件.bash_profile中,就可以控制所有新建的文件和目录的访问权限。 umask [a1a2a3] a1表示的是不允许属主的权限,a2表示的是不允许同组人的权限,a3代表不允许其他人的权限。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。 umask 022//表示设置不允许同组用户和其他用户有写的权限。 umask //显示当前的默认生成掩码。 问:umask,系统显示为0022?怎么回事? 第一位数字0代表无uid;第一位数字1代表setuid;第一位数字2代表setgid;第一位数字4代表stick
特殊权限的设置 SUID SGID 和sticky-bit 除了一般权限还有特殊的权限存在,一些特殊权限存在特殊的权限,如果用户不需要特殊权限一般不要打开特殊权限,避免安全方面的问题。具体的用法可以百度和google一下。 希望自己整理出来的知识能帮助网友更好的理解centos用户&组权限&添加删除用户等问题
文件或目录的访问权限分为只读,只写和可执行三种。
有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。它可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。
每一个文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限(如下面例子 所示)。当用 ls -l 命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。
横线代表空许可(即表示不具有该权限)。r 代表只读,w 代表写,x 代表可执行。注意:这里共有 10 个位置。第 1 个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第 1 个字符是横线,表示是一个非目录的文件。如果是 d,表示是一个目录。后面的 9 个字符每三个构成一组,依次表示文件主、组用户、其他用户对该文件的访问权限
确定了一个文件的访问权限后,用户可以利用 Linux 系统提供的 chmod 命令来重新设定不同的访问权限。也可以利用 chown 命令来更改某个文件或目录的所有者
例如: -rw-r–r– 1 root root 483997 Ju1 l5 17:3l sobsrc.tgz 表示文件 sobsrc.tgz 的访问权限,说明 sobsrc.tgz 是一个普通文件;sobsrc.tgz 的属主有读写权限;与 sobsrc.tgz 属主同组的用户只有读权限;其他用户也只有读权限。 改变文件 / 目录的访问权限 chmod 命令用于改变文件或目录的访问权限,它是一条非常重要的系统命令。用户可用其控制文件或目录的访问权限。 该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 文字设定法 文字设定法的一般使用形式为:chmod [who] [+ | - | =] [mode] 文件名。其中,操作对像 who 可以是下述字母中的任一个或者为各字母的组合: u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组 ID 的所有用户。 o 表示“其他(others)用户”。 a 表示“所有(all)用户”。其为系统默认值。 操作符号可以是:
如果在一个命令行中可给出多个权限方式,其间用逗号隔开。下例给出了使用该设定法的例子: chmod a+x test1 设定文件 test1 的属性为:文件属主(u)增加执行权限 ; 与文件属主同组用户(g)增加执行权限;其他用户(o)增加执行权限。所有(all)用户都增加执行权限
chmod ug+w,o-x test2 设定文件 test2 的属性为:文件属主(u)增加写权限 ; 与文件属主同组用户(g)增加写权限;其他用户(o)删除执行权限
chmod u+s test3 可执行文件 test3 添加 s 权限,使得执行该文件的用户暂时具有该文件拥有者的权限。当其他用户执行 test3 这个程序时,他的身份将由于这个程序而暂时变成该 test3 程序的拥有者(由于 chmod 命令中使用了 s 选项),所以他就能够读取 test3.c 文件(虽然这个文件被设定为其他人不具备任何权限),这就是 s 的功能。在整个系统中特别是 root 本身,最好不要过多地设置这种类型的文件(除非必要),这样可以保障系统的安全,避免因为某些程序的 bug 而使系统遭到入侵
数字设定法 数字设定法是与文字设定法功能等价的设定方法,只不过比文字设定法更加简便。数字表示的属性的含义为:0 表示没有权限,1 表示可执行权限,2 表示可写权限,4 表示可读权限,然后将其相加。所以数字属性的格式应为 3 个从 0 到 7 的八进制数,其顺序是(u)、(g)、(o)。其他的与文字设定法基本一致。 如果想让某个文件的属主有“读 / 写”二种权限,须要把 4(可读)+2(可写)=6(读 / 写)。 数字设定法的一般形式为:chmod [mode] 文件名。下面给出使用该数字设定法的例子:
chmod 644 test1 文件 test1 的属性为:文件属主(u)拥有读、写权限 ; 与文件属主同组人用户(g)拥有读权限;其他人(o)拥有读权限
chmod 750 test2 设定文件 test2 的属性为:文件属主(u)增加可读 / 可写 / 可执行权限 ; 与文件主同组人(g)可读 / 可执行权;其他人(o)没有任何权限 更改文件 / 目录的所有权 chown该命令用来更改某个文件或目录的属主和属组。举个例子,root 用户把自己的一个文件拷贝给用户 xu,为了让用户 xu 能够存取这个文件,root 用户应该把这个文件的属主设为 xu,否则,用户 xu 无法存取这个文件。 该命令的使用形式为:chown [ 选项 ] 用户或组 文件。 Chown 的功能是将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户 ID。组可以是组名或组 ID。文件是以空格分开的要改变权限的文件列表,支持通配符。该命令的选项为: -R:递归地改变指定目录及其下面的所有子目录和文件的拥有者。 -v:显示 chown 命令所做的工作。
chown super test1 chown super.super ./test_dir/ 文件 test1 的所有者改为 super,把目录 ./test_dir 及其下面的所有文件和子目录的属主改成 super,属组改成 super
通过前面的介绍我们知道,Linux 系统中的每一个文件都有一个所有者,表示该文件是谁创建的。同时,该文件还有一个组编号,表示该文件所属的组,一般为文件所有者所属的组。并且,在一般情况下,我们也可以通过设定对文件的权限来控制对其的相关操作。 在此情况中,如果是一个可执行文件,那么在执行时,一般该文件只拥有调用该文件的用户具有的权限。而 setuid/setgid 则可以来改变这种设置: • setuid:设置使文件在执行阶段具有文件所有者的权限。典型的文件是 /usr/bin/passwd。如果一般用户执行该文件,则在执行过程中,该文件可以获得 root 权限,从而可以更改用户的密码 • setgid:该权限只对目录有效。目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。 • sticky bit:该位可以理解为防删除位。一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件。则可以对文件使用 sticky bit 位。设置该位后,即便用户对目录具有写权限,也不能删除该文件。 在前面我们讨论了通过文字设定和数字设定的方法来设定文件 / 目录的访问权限问题,同样的道理,下面我们通过这两种方法来介绍如何操作这些标志。操作这些标志与操作文件权限的命令是一样的,都是使用 chmod 命令来进行:
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
setuid与setgid讲解 看一下系统中用到它的地方,以/etc/passwd和/usr/bin/passwd为例: 分析一下,/etc/passwd的权限为 -rw-r–r– 也就是说:该文件的所有者拥有读写的权限,而用户组成员和其它成员只有查看的权限。我们知道,在系统中我们要修改一个用户的密码,root用户和普通用户均可以用/usr/bin/passwd someuser这个命令来修改这个/etc/passwd这个文件,root用户本身拥有对/etc/passwd的写权限,无可厚非;那普通用户呢,这里就用到了setuid,setuid的作用是“让执行该命令的用户以该命令拥有者的权限去执行”,就是普通用户执行passwd时会拥有root的权限,这样就可以修改/etc/passwd这个文件了。它的标志为:s,会出现在x的地方,例:-rwsr-xr-x 。而setgid的意思和它是一样的,即让执行文件的用户以该文件所属组的权限去执行。
ll /etc/passwd /usr/bin/passwd
-rw-r–r– 1 root root 2005 Apr 23 01:25 /etc/passwd -rwsr-xr-x 1 root root 23420 Aug 11 2010 /usr/bin/passwd
stick bit(粘滞位) 看一下系统中用到它的地方,以/tmp为例: 我们知道/tmp是系统的临时文件目录,所有的用户在该目录下拥有所有的权限,也就是说在该目录下可以任意创建、修改、删除文件,那如果用户A在该目录下创建了一个文件,用户B将该文件删除了,这种情况我们是不能允许的。为了达到该目的,就出现了stick bit(粘滞位)的概念。它是针对目录来说的,如果该目录设置了stick bit(粘滞位),则该目录下的文件除了该文件的创建者和root用户可以删除和修改/tmp目录下的stuff,别的用户均不能动别人的,这就是粘滞位的作用
ll -d /tmp
drwxrwxrwt 13 root root 4096 Apr 23 02:06 /tmp
文字设定法 chmod u+s filename:为文件 filename 加上 setuid 标志。 chmod g+s dirname:为目录 dirname 目录加上 setgid 标志。 chmod o+t filename:为文件 filename 加上 sticky 标志。 数字设定法 对一般文件通过三组八进制数字来置标志,如 444、777、644 等。如果设置这些特殊标志,则在这组数字之前外加一组八进制数字, 第一位数字0代表无uid;第一位数字1代表setuid;第一位数字2代表setgid;第一位数字4代表stick,如 4666、4777 等。这一组八进制数字三位的意义如下: • setuid 位:如果该位为 1,显示为“S”,则表示设置 setuid,其显示在原来的 x 标志位上; • setgid 位:如果该位为 1,显示为“S”,则表示设置 setgid,其显示在原来的 x 标志位上; • sticky 位:如果该位为 1,显示为“T”,则表示设置 sticky,其显示在原来的 x 标志位上。
chmod 4775 xxx # 设置setuid权限 chmod 2775 xxx # 设置setgid权限 chmod 1775 xxx # 设置stick bit权限,针对目录 设置完这些标志后,可以用 ls – l 命令来查看。如果有这些标志,则会在原来的执行标志位置上显示。如下所示: r-srw-r–:表示有 setuid 标志; rwxrwsrw-:表示有 setgid 标志; rwxrw-rwt:表示有 sticky 标志。 如果本来在该位上有 x,则这些特殊标志显示为小写字母(s,s,t)。否则,显示为大写字母(S,S,T)。 另外非常值得读者注意的是,虽然 setuid/setgid 机制非常方便实用,但是由于提升了执行者的权限,因而不可避免地存在许多安全隐患和风险,所以作者并不太赞成广大读者广泛使用,并且,在实际的系统管理过程中,我们还经常需要找出设置有这些标志的文件,并对他们进行检查和清理,那么,一般我们可以使用如下命令来对系统中的具有特殊标志的文件进行寻找:
find -perm +6000 – type f – exec ls – ld {}\; > setuid.txt&
在JDK下创建文件:vi jstatd.all.policy,文件内容如下: grant codebase”file:${java.home}/../lib/tools.jar”{ permission java.security.AllPermission; };
执行jstatd -J-Djava.security.policy=all.policy,这样默认端口是1099。也可以使用其他端口,如设置端口2020,执行如下脚本 jstatd -J-Djava.security.policy=jstatd.all.policy -p 2020
注意:端口使用情况可以通过netstat –aon | grep 1099进行查看 不用visualVM,使用客户端本机的jps试试看,得到结果 命令: jps 192.168.128.128 返回结果: Error communicating with remote host: Connection refused to host: 127.0.0.1; nested exception is: java.net.ConnectException: Connection refused: connect linux系统使用/etc/hosts文件中localhost解析ip为127.0.0.1,当客户端向服务器Lookup时,服务端就会把解析出来的地址发给客户端,让客户端再根据这个地址去连接,客户端收到127.0.0.1这个地址,也使用/etc/hosts文件中localhost解析ip去连接,实际连接的是自己本身。 把服务器的IP改为了它的真实IP 192.168.128.128,也就是/etc/hosts文件修改,这是我的NAT的VM centos虚拟机。
采集算法 通过/proc/stat文件采集并计算CPU总使用率或者单个核使用率。以cpu0为例,算法如下:
cat /proc/stat | grep ‘cpu0’得到cpu0的信息 |
再次cat /proc/stat | grep ‘cpu0’ 得到cpu的信息 |
cat /proc/stat | grep -E "cpu\b" | awk -v total=0 '{$1="";for(i=2;i<=NF;i++){total+=$i};used=$2+$3+$4+$7+$8 }END{print total,used}'
)
sleep 30
b=(cat /proc/stat | grep -E "cpu\b" | awk -v total=0 '{$1="";for(i=2;i<=NF;i++){total+=$i};used=$2+$3+$4+$7+$8 }END{print total,used}'
)
cpu_usage=(((${b[1]}-${a[1]})*100/(${b[0]}-${a[0]})))采集算法:
读取/proc/loadavg得到机器的1/5/15分钟平均负载,再乘以100。
shell代码:
cpuload=(cat /proc/loadavg | awk '{print $1,$2,$3}'
)
load1=${cpuload[0]}
load5=${cpuload[1]}
load15=${cpuload[2]}
应用程序使用内存 采集算法: 读取/proc/meminfo文件,(MemTotal – MemFree – Buffers – Cached)/1024得到应用程序使用内存数。 shell代码: awk ‘/MemTotal/{total=$2}/MemFree/{free=$2}/Buffers/{buffers=$2}/^Cached/{cached=$2}END{print (total-free-buffers-cached)/1024}’ /proc/meminfo
采集算法: 读取/proc/meminfo文件,MemTotal – MemFree得到MEM使用量。 shell代码: awk ‘/MemTotal/{total=$2}/MemFree/{free=$2}END{print (total-free)/1024}’ /proc/meminfo
采集算法: 通过/proc/meminfo文件,SwapTotal – SwapFree得到SWAP使用大小。 shell代码: awk ‘/SwapTotal/{total=$2}/SwapFree/{free=$2}END{print (total-free)/1024}’ /proc/meminfo
disk IO
1、IN:平均每秒把数据从硬盘读到物理内存的数据量
采集算法:
读取/proc/vmstat文件得出最近240秒内pgpgin的增量,把pgpgin的增量再除以240得到每秒的平均增量。
相当于vmstat 240命令bi一列的输出。
shell代码:
a=awk '/pgpgin/{print $2}' /proc/vmstat
sleep 240
b=awk '/pgpgin/{print $2}' /proc/vmstat
ioin=$(((b-a)/240))
2、OUT:平均每秒把数据从物理内存写到硬盘的数据量
采集算法:
读取/proc/vmstat文件得出最近240秒内pgpgout的增量,把pgpgout的增量再除以240得到每秒的平均增量。
相当于vmstat 240命令bo一列的输出。
shell代码:
a=awk '/pgpgout/{print $2}' /proc/vmstat
sleep 240
b=awk '/pgpgout/{print $2}' /proc/vmstat
ioout=$(((b-a)/240))
以http://www.centos.bz/为例,eth0是内网,eth1外网,获取60秒的流量。
机器网卡的平均每秒流量
采集算法:
读取/proc/net/dev文件,得到60秒内发送和接收的字节数(KB),然后乘以8,再除以60,得到每秒的平均流量。
shell代码:
traffic_be=(awk 'BEGIN{ORS=" "}/eth0/{print $2,$10}/eth1/{print $2,$10}' /proc/net/dev
)
sleep 60
traffic_af=(awk 'BEGIN{ORS=" "}/eth0/{print $2,$10}/eth1/{print $2,$10}' /proc/net/dev
)
eth0_in=$(( (${traffic_af[0]}-${traffic_be[0]})/60 ))
eth0_out=$(( (${traffic_af[1]}-${traffic_be[1]})/60 ))
eth1_in=$(( (${traffic_af[2]}-${traffic_be[2]})/60 ))
eth1_out=$(( (${traffic_af[3]}-${traffic_be[3]})/60 ))
采集算法:
读取/proc/net/dev文件,得到60秒内发送和接收的包量,然后除以60,得到每秒的平均包量。
shell代码:
packet_be=(awk 'BEGIN{ORS=" "}/eth0/{print $3,$11}/eth1/{print $3,$11}' /proc/net/dev
)
sleep 60
packet_af=(awk 'BEGIN{ORS=" "}/eth0/{print $3,$11}/eth1/{print $3,$11}' /proc/net/dev
)
eth0_in=$(( (${packet_af[0]}-${packet_be[0]})/60 ))
eth0_out=$(( (${packet_af[1]}- ${packet_be[1]})/60 ))
eth1_in=$(( (${packet_af[2]}- ${packet_be[2]})/60 ))
eth1_out=$(( (${packet_af[3]}- ${packet_be[3]})/60 ))
date 显示系统日期 cal 2007 显示2007年的日历表 date 041217002007.00 设置日期和时间 - 月日时分年.秒 clock -w 将时间修改保存到 BIOS
CAMS 在安装过程中会自动添加相关的服务,在安装的最后过程中,会提示用户是否启动服务(使服务生效)。需要注意的是:一个服务被添加后,并不表示该服务在系统启动过程中会自动运行,仅表示可以使用service 命令来启动、停止服务。
添加服务 添加服务的步骤为: (1) 将该服务的脚本文件拷入“/etc/rc.d/init.d” 文件夹下,保证其状态为“可执行”; (2) 使用chkconfig 命令将服务添加到服务列表中: chkconfig –add camsd (注意有两个“ -”) 将服务添加以后, 该服务即可以使用service 来启动/停止了。
删除服务 如果要删除某项服务 将上述命令的“add” 改为“del” 即可: chkconfig –del camsd (注意有两个 “-”)
设置服务自动运行 Linux 运行有7 种运行级别,分别使用0-6 来表示,控制台界面运行级别为3,图形界面运行级别为5 ,要使某服务在系统启动时自动运,行使用chkconfig将该服务添加到相应级别的自启动服务列表中即可。 chkconfig –level 35 camsd on (注意有两个 “-”) 上面的命令将 camsd 服务添加到级别为3、 5 的自启动服务列表中;而下面的命令则将服务camsd 从级别为3、 5 的自启动服务列表中删除: chkconfig –level 35 camsd off (注意有两个 “-”) 如果需要查看某项服务的自启动状态信息, 使用如下命令即可: chkconfig –list camsd (注意有两个 “-”)
1) 生成认证文件 ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa
2) 相互导入公钥到其他datanode节点认证文件,其他节点就可以访问 scp ~/.ssh/ id_dsa.pub hadoop@192.168.1.113:/home/hadoop/.ssh/authorized_keys
3) 导入公钥到本机认证文件及更改访问权限,本地都可以使用ssh localhost cat ~/.ssh/id_dsa.pub » ~/.ssh/authorized_keys chmod go-w /home/hadoop/.ssh chmod 600 .ssh/authorized_keys
4) 验证是否能够无密码登陆到datanode节点 ssh 192.168.1.113 ssh localhost
在/etc/sudoers文件下,增加如下一行脚本,代表用户拥有root组权限的,都可以使用sudo前缀安装软件。 %root ALL=(ALL) ALL
centos系统中使用下面命令 yum -y remove httpd
查看本机关于IPTABLES的设置情况 iptables -L –n 做了WEB服务器,开启80端口 iptables -A INPUT -p tcp –dport 80 -j ACCEPT iptables -A OUTPUT -p tcp –sport 80 -j ACCEPT
© 2015 Morly Tang. All Rights Reserved.
版权归属:寂寞的男人