-- 虚拟机安装系统 见笔记里的截图 anaconda 系统分区: 分区信息在分区表里,在linux里,分区表是一个64字节大小的存储区域 在硬盘的最前的1-512个字节,称为MBR(master bootloader record主引导记录) 512=446+64+2 也就是447到510字节就是存放分区表 64=16+16+16+16 16个字节存放一个分区信息,所以最多只能使用4个分区 分区类型有: p(primary 主分区) e (extend 扩展分区) l (logical 逻辑扩展分区) 可以使用下面几种分法: 1,4p 这种分法,你就只能最多4个分区 2,3p+1E (1E可以再次分成N个l) 这种分法,可以超过4个分区的限制 分区到底应该怎么分才合适* 100个人有100种不同的分法 linux最少可以分几个分区* 最少可以只分一个,就是根分区 学习我个人分区建议(以500G为例): 第一分区:/boot 100M-200M 第二分区:/ 50G-100G 第三分区:swap 一般来说为你内存的2倍,如果内存特别大,swap也不用去用2倍,swap最大可以4G-8G左右就够了,在学习环境你就4G就OK 第四分区:extend 剩余的所有空间一定要全能扩展分区,否则会浪费空间 第五分区:/soft 50G左右 用于存放你在学习里的软件或者笔记 第六分区:/vm 100G或以上 用于存放你的虚拟机 不要分光所有的空间,其它的空间先留着,为了以后学习划分新的存储使用 这样分的对于学习的好处: 1,这样划分方便学习资料管理 2,假设你的系统崩了,需要重装,只重装你的根分区,其它分区文件都不会丢 ========================================================================== vmware虚拟机的基本用法 快照:装完一个新的虚拟机系统后,建议对其做一个snapshot 挂起:如果一个实验你今天做不完,想明天继续做,可以先挂机当前的状态 克隆: 选全克隆,一般不用链接克隆; 你还可以手动克隆. cp A虚拟机的目录 B虚拟机的目录,然后使用vmware虚拟机软件打开B虚拟机目录里的.vmx配置文件就可以了(这里打开它会问你是不是拷贝的,你选择是就可以了;还可能有个问题,如果A虚拟机已经被用过,它这里可能会报你的虚拟机已经被占用,解决方法:删除B虚拟机目录下的所有.lck结尾的锁文件就可以了) 为虚拟机加减设备:直接双击图形里的设备然后选择 add 或 remove去加或减 也可以使用命令的方式来加设备: 例:加一个大小为1000MB的磁盘 第一步:在虚拟机目录里创建一个新的磁盘文件,大小自定义,名字要和原来的磁盘名不冲突 # vmware-vdiskmanager -c -s 1000MB -a scsi -t 0 /root/vmware/rhel6.3-1/rhel6.3-1-000003.vmdk Creating disk '/root/vmware/rhel6.3-1/rhel6.3-1-000003.vmdk' Virtual disk creation successful. 第二步: # vim /root/vmware/rhel6.3-1/rhel6.3-1.vmx scsi0:0.present = "TRUE" scsi0:0.fileName = "rhel6.3-1-000002.vmdk" --上两行是原配置文件里的 scsi0:1.present = "TRUE" scsi0:1.fileName = "rhel6.3-1-000003.vmdk" --下两行是我复制上两行,再改一下加上去的;首先磁盘名字要和你刚创建的磁盘名一致,然后前面的编号我由0:0改成0:1 第三步: 在虚拟机管理界面,先关掉这个虚拟机,然后再open这个虚拟机,就可以看到新的硬盘了 虚拟机的网络配置: # vmware-netcfg 三种网络: 桥接:相当于和物理网络同一个交换机 hostonly:是一个虚拟的内网私网网络,他和你宿主机连接的物理网络无关 nat:可以看作是在hostonly的基础做了NAT(network address translation)规则 你现在宿主机是windows,虚拟机是linux,你住的地方有如下几种情况,你如何让linux上网; 1,有路由器 直接桥接,动态获取IP就可以了 2,拔号上网 windows拔号上网,那么虚拟机只能用nat上网;如果你会写iptables防火墙规则,可以使用hostonly再加上自己写规则做NAT也可以让linux虚拟机上网 一台宿主机上能有几个桥接,几个hostonly,几个NAT网络* 有几张物理网卡,就能几个桥接 可以有N个hostonly和N个NAT ============================================= 用户管理 操作系统的分类: 单用户单任务操作系统: DOS 单用户多任务操作系统: windows 95 windows 98 windows 2000 多用户多任务操作系统: windows 2003 server windows 2008 server linux unix 基于多用户的基础上,引出的用户的分类: 管理员 root uid=0 系统帐号 uid 1-499 65534 普通用户帐号 uid 500-65535(2.6.xxx的内核支持的uid数量为 2^32-1个) # echo $[2**32-1] 4294967295 id 命令 查看当前使用用户的用户信息和组信息 # id uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) # id test uid=500(test) gid=500(test) groups=500(test) 用户管理相关的文件 /etc/passwd /etc/shadow /etc/group /etc/gshadow --vim /etc/passwd root:x:0:0:root:/root:/bin/bash 第一列: 用户名 第二列:密码 老版本这里放的就是密码,为了安全性考虑,密码放到了/etc/shadow的第二列 x代表/etc/shadow的第二列生效,去掉x就表示此用户登录的时候没有密码 第三列:uid 用户识别ID值,系统是通过这个值来确认是哪个用户 第四列:gid 组识别ID值 第五列:描述项 comment 第六列:家目录 第七个:bash 当前用户使用的bash /bin/bash 表示此用户使用bash,用户可以登录系统,可以收邮件,可以登录FTP /sbin/nologin 表示用户不能登录系统,可以收邮件,可以登录FTP /bin/false 表示用户不能登录系统,可以收邮件,不能登录FTP cat /etc/shells /bin/sh 淘汰 /bin/bash 现在大多数支持的 /sbin/nologin /bin/tcsh /bin/csh /bin/ksh --vim /etc/shadow root:$1$.1RfCu/n$ModWntxLJRC6SpgAXSDO81:14694:0:99999:7::: 与/etc/passwd相对应 (但这里有九列) 第一列: 用户名 第二列:密码 (这里以*号开头或!开头默认是不能登陆的) 第三列:上一次修改密码的时间 linux以1970年1月1日到现在的天数来算的 第四列:修改密码后几天内不允许再修改 如果这里为5,那改过密码后5天内不能再修改 0代表不限制(只对普通用户有效) 第五列:多少天内必须要求你改 99999代表不限制 第六列:过期前几天给你一个告警信息 第七列:密码过期后还给的一个宽限天数 第8列: 这里可以写一个过期天数 这里也是以1970年1月1日到现在的天数来计算的,多用于收费系统 第九列: 保留,留着以后功能扩展 # echo $[`date +%s`/86400] 用户相关的命令 useradd usermod userdel passwd useradd 增加一个普通用户 -c comment -u uid -g gid -e 过期时间 .......... 找man # useradd -u 4294967295 user2 --不成功,报错 # useradd -u 4294967294 user2 --成功,这个数就是linux目前版本支持的最大uid数 # id user2 uid=4294967294(user2) gid=502(user2) groups=502(user2) usermod 修改一个用户信息 参数基本与useradd相同 # usermod -u 502 user2 # id user2 uid=502(user2) gid=502(user2) groups=502(user2) userdel 删除一个用户 -r 参数 连同家目录与邮件目录全删除 # userdel -r user2 passwd 修改密码 # passwd user1 Changing password for user user1. New password: BAD PASSWORD: it is WAY too short BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. 几个小实验: 1,去掉/etc/passwd里root用户第二列的x,确认登录系统不需要密码,加回x,密码不变 2,普通用户只能自己改自己的密码,还需要原密码才能改,改的密码还要一定的密码复杂度(最少8位,字母,数字,符号最好都有就没问题) 3,用一个普通用户来测试/etc/shadow里的第四列 步骤一:第四列为0,这个普通用户随时可以修改自己的密码 步骤二:把0改为2,这个普通用户改密码会报You must wait longer to change your password的错误 步骤三:可以使用date -s "20140719"这样的命令把当前时间改成3天后,再去测试,发现可以改了,验证成功;时间改回来的例子# date -s "20140716 15:12:10" 4,验证/etc/shadow里的第8列 步骤一:以测试user1用户为列,把它在shadow里的第8列改成16266(这相当于今天来说是昨天就过期了) 步骤二:先用su - test切换另一个普通用户,再用这个普通用户来su - user1切换user1,输入正确密码,但报下面的错误 $ su - user1 Password: Your account has expired; please contact your system administrator su: incorrect password ====================================================================== 组管理 vim /etc/group bin:x:1:root,bin,daemon 第一列:组名 第二列:与/etc/passwd第二列一样 第三列:gid 第四列:哪些用户属于这个组 vim /etc/gshadow bin:::root,bin,daemon 组管理的相关命令: groupadd groupdel groupmod gpasswd groupadd 增加一个组 groupdel 删除一个组 groupmod 修改组信息 gpasswd 修改组登陆密码 # groupadd group1 # groupadd group2 # useradd -g group1 user3 # useradd -G group1 user4 # useradd -G group1,group2 user5 # id user3 uid=503(user3) gid=503(group1) groups=503(group1) # id user4 uid=504(user4) gid=504(user4) groups=504(user4),503(group1) # id user5 uid=505(user5) gid=506(user5) groups=506(user5),503(group1),505(group2) ------------------------------------------------------- --关于有效组和初始组的讨论 # id user5 uid=505(user5) gid=506(user5) groups=506(user5),503(group1),505(group2) gid=那个组就是你的初始组 # su - user5 [user5@li ~]$ groups --user3用户用此命令查看 靠前的是有效组 user5 group1 group2 --那么此用户现在创建目录或者文件的属组为 有效组user5 [user5@li ~]$ touch 1 [user5@li ~]$ ll total 0 -rw-rw-r--. 1 user5 user5 0 Jul 16 16:08 1 [user5@li ~]$ newgrp group1 --这个操作其实就是登录group1组,但是因为user5也属于group1组,所以不需要密码 [user5@li ~]$ groups --现在发现group1组靠前了 group1 user5 group2 [user5@li ~]$ touch 2 [user5@li ~]$ ll --这次创建的文件,发现属组变成了group1,就也就是说user5的有效组现在是group1;但你用另一个终端root用户id user5去查看,它的gid还是user5,并没有变成group1 total 0 -rw-rw-r--. 1 user5 user5 0 Jul 16 16:08 1 -rw-r--r--. 1 user5 group1 0 Jul 16 16:10 2 [root@li ~]# groupadd group3 [root@li ~]# gpasswd group3 --另一个终端使用root用户新建一个组,给一个组密码 Changing the password for group group3 New Password: Re-enter new password: [user5@li ~]$ groups group1 user5 group2 [user5@li ~]$ newgrp group3 --你登录一个你没有加入的组,那么就需要组密码了 Password: [user5@li ~]$ groups group3 user5 group1 group2 --登录成功,现在user5有效组为group3 [user5@li ~]$ touch 3 [user5@li ~]$ ll --这次创建的文件,发现属组变成了group3 total 0 -rw-rw-r--. 1 user5 user5 0 Jul 16 16:08 1 -rw-r--r--. 1 user5 group1 0 Jul 16 16:10 2 -rw-r--r--. 1 user5 group3 0 Jul 16 16:13 3 ---------------------------------------------------------- 切换用户 su user5 非完全切换 继承上一个用户的环境变量 su - user5 完全切换 不继承上一个用户的环境变量 ---------------------------------------------------------- 建立a,b,c三个用户 要求, 1,a只属于b,c组,并且默认创建的文件的属组为c 2, b属于a,b组,并且默认创建的文件的属组为b 3,c属于a,b,c组,并且默认创建的文件的属组为a [root@li ~]# groupadd a [root@li ~]# useradd -G a b [root@li ~]# useradd -G a,b c [root@li ~]# useradd -g c -G b a [root@li ~]# usermod -g a -G a,b,c c 结果为: [root@li ~]# id a uid=508(a) gid=510(c) groups=510(c),509(b) [root@li ~]# id b uid=506(b) gid=509(b) groups=509(b),508(a) [root@li ~]# id c uid=507(c) gid=508(a) groups=508(a),509(b),510(c) ======================================================================== 用户权限 -rw------- 1 root root 1112 Mar 27 03:14 anaconda-ks.cfg rw------- 权限用九位来表示 前三位代表用户(u表示),中间三位代表组(g表示),后三位代表others(o表示) 权限有三种 r (read) 读 w (write) 写 x (execute) 执行 a表示all r 读 权限 针对目录,有r权限,就代表能对此目录有列表的功能 (就是ls列出来的功能) 针对文件,有r权限,就代表能对此文件有阅读的功能 (就是指cat一类的命令) w 写 权限 针对目录,有w权限,就代表在此目录下创建文件或者子目录 (touch,mkdir等) 针对文件,有w权限,就代表能在此文件写入内容或者修改 (> ,>>, vi 再写等) x 执行 权限 针对目录,有x权限,就代表能进入此目录 (cd) 针对文件,有x权限,就代表能执行它 (命令,可执行文件等) 1,创建一个文件test,要求它实现user1只读,user2,user3可读可写,user4,user5可读可执行 先把user2,user3加入到group1组,然后创建下面的一个文件 r--rw-r-x user1 group1 test 2,创建一个文件test,要求它实现user1只读,user2,user3可读可写,user4,user5可读可执行,user6,user7可读可写可执行,user8,user9对其没有任何权限 这样的需求,仅靠九位权限实现不了;一定要实现,可以用文件acl来做 权限的修改 # chmod a+x 1.txt # chmod g+x 1.txt # chmod a+x 1.txt # chmod a-r 1.txt chmod u-w,g+x,o+x abc --也可以一次性连写 权限用数字来表示 (r,w,x都可以用数字来表示) r 4 w 2 x 1 rwx 7 rw_ 6 r_x 5 r__ 4 _wx 3 _w_ 2 __x 1 -rw-r--r-- 这个以数字表示为644(严谨的说,不能叫它六百四十四,要叫它六四四) 每三位里r代表4,w代表2,x代表1;由三个数组成一个三位数,就是你的权限 # chmod 755 1.txt # chmod 644 1.txt chown user1.user1 1.txt --这个是改owner和group属性的 什么情况下才能删除一个文件或目录* 答:跟这个文件或目录本身的权限无关,跟你对它们的上一级目录是否有写权限有关。你对一个目录有写权限,你就可以删除这个目录里任何文件 请问下面的情况,我一个普通用户能否删除/test/abc/这个子目录 # ll -d /test drwxr-xrwx. 3 root root 12288 Jul 16 17:42 /test # ll /test drwxr-xr-x. 2 root root 4096 Jul 16 17:40 abc # ll /test/abc/ -rw-r--r--. 1 root root 0 Jul 16 17:40 1 答案:删除不了,因为如果abc是个空目录就可以,但因为删除不了abc下的1这个文件,所以造成abc也删除不了 什么情况下修改了一个文件才需要强制保存,什么情况下能够成功强制保存? 答案:如果你对一个文件没有写权限,那么修改后,要保存就会出现强制保存的选项; 虽然你对这个文件没有写权限,但如果你对文件所在的上一级目录有写权限,则可以强制保存成功,并且保存后,把文件的owner和group属性改成了你自己 如果对上一级目录没有写权限,则不可以强制保存;但也有一个例外,就是如果这个文件的owner就是你,那么你对它没有写权限,对它上级目录也没写权限,也可以强制保存成功 特殊权限位(s,t) s位叫特权位,英文的叫法有setuid,setgid,suid,sgid等 特权位s 一个可执行文件拥有s位时,当别的用户来执行这个可执行文件的话,使用的权限是此可执行文件属主或者属组的权限 只针对前三位,中间三位 对目录可以加,但是无效,因为目录不是命令,根本不能执行它 [root@li ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 Feb 17 2012 /usr/bin/passwd [root@li ~]# ll /etc/shadow ----------. 1 root root 1434 Jul 17 09:27 /etc/shadow --普通用户修改密码使用passwd能改自己的密码,但是密码是存放在/etc/shadow里,也就是说普通用户对/etc/shadow没有写的权限,但passwd可执行文件的前三位有s位,所以普通在调用passswd时是用的root的权限 小实验: 1,测试passwd命令的s位,去掉其s位,普通用户就不能自己改自己密码了,加上s位就可以了 2,/bin/touch这个命令是没有s位的,你可以尝试加上s位,然后用普通用户touch文件,观察效果。做完测试后,记得改回来也就是把s位去掉 3,普通用户能关机吗?怎么让普通用户关机 可以对关机命令加s位来让普通用户能关机,在rhel6下测试reboot,shutdown可以这样做,init不能这样做 这只是一个理论讨论,实际情况不会这么做的 ------------------------------------ 粘贴位t --只针对目录有效 特别用在/tmp目录 有t位的目录,任何用户在有权限的情况下是可以创建文件和目录,就算是有权限删除别人的文件或目录也不能删除 自己只能删除自己创建的目录,用于一些共享上传的文件服务器场合 会提示Operation not permitted --这是操作不允许,不是pemission denied s位和t位注意的地方: 用数字表示 前三位上加s 4 中间三位加s 2 后三位加t 1 chmod 1777 /tmp s位和t位大小写的区别 小写的话就表示 有x执行权限 大写的话就表示 没有x执行权限 ----------------------------------- 隐藏属性 lsattr chattr # lsattr 1.txt -------------e- 1.txt # chattr +A 1.txt --这个属性让文件的access time访问后也不会变化,节省了IO(IO优化);默认情况下rhel5,访问一次atime就会跟着变一次,rhel6下只有当atime等于或早于mtime和ctime之一时,才会访问跟着变,否则不会变。(原因我们在后面讲mount参数时再补充) # lsattr 1.txt -------A-----e- 1.txt # stat 1.txt |tail -3 --用cat命令访问这个文件,再用此命令查看access time,会发现不再变化 Access: 2014-07-17 11:12:58.589838878 +0800 Modify: 2014-07-17 11:12:58.589838878 +0800 Change: 2014-07-17 11:13:15.405701371 +0800 一个文件加了a属于,重定向覆盖以前的内容不允许,但追加内容是可以的 # lsattr 1.txt -----a-------e- 1.txt # echo 456 > 1.txt bash: 1.txt: Operation not permitted # echo 456 >> 1.txt # chattr -a 1.txt # chattr +i 1.txt --加了i属性,此文件不可被修改,重命名 ============================================