概述
IP地址配置
1.setup工具
vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
service network restart
2.修改虚拟机连接方式为桥接
3.编辑—虚拟网络编辑器—vmnet0--桥接到有线网卡
4.UUID错误(针对复制镜像生效)
vi/etc/sysconfig/network-scripts/ifcfg-eth0 删除MAC地址行
rm –rf/etc/udev/rules.d/70-persistent-net.rules 删除网卡和MAC地址绑定文件
重启系统
软件包安装
软件包分类:源码包、二进制包(脚本安装包)
源码包的编译:
vimhello.c
#include <stdio.h>
intmain (void)
{
printf (“hello worldn”);
}
rpm–ivh /mnt/cdrom/Packages/gcc-4.4.6-4.el6.i686.rpm
gcc–c hello.c
gcc–o hello hello.o
./hello #执行hello文件
源码包的优点:
开源,如果有足够的能力,可以修改源代码
可以自由选择所需的功能
软件是编译安装 ,所以更加适合自己的系统,更加稳定也效率更高
卸载方便
源码包的缺点:
安装过程步骤较多,尤其是安装较大的软件集合时,容易出现拼写错误
编译过程时间较长,安装比二进制安装时间长
因为是编译安装,安装过程中一旦报错新手很难解决
二进制包分类:DPKG包(Debian开发),RPM包(Red Hat开发)
RPM包优点:
包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
安装速度比源码包安装快的多
RPM包的缺点:
经过编译,不再可以看到源代码
功能选择不如源代码灵活
依赖性。
RPM包的依赖性:树形依赖、环形依赖(同时安装)、模块依赖(www.rpmfind.net)
关于源码包和二进制包的选择:一般要求稳定的,给客户用的访问量大的服务安装用源码包;给系统自己本身使用的,邮件之类的服务安装用二进制包。
rpm包的命名:httpd-2.2.15-15.el6.centos.1.i686.rpm
httpd 软件包名
2.2.15 软件版本
15 软件发布的次数
el6 软件发行商
i686 适合的硬件平台(x86_64只适合64位CPU安装,noarch没有硬件限制)
rpm rpm包的扩展名
RPM包的默认安装位置
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文档保存位置
包全名:操作未安装的rpm包
包名:操作已安装的rpm包
rpm –ivh 包全名(注意路径)
-i install安装
-v 显示更详细信息(verbose)
-h 显示安装进度(hash)
--nodeps 不检测依赖性安装
--replacefiles 替换文件安装,某个文件已经存在
--replacepkgs 替换软件包安装,软件包已经安装
--force 强制安装,为--replacefiles和--replacepkgs的综合
--test 测试安装,不会实际安装,只检测依赖性
--prefix 指定安装路径,rpm包一般采用默认路径
服务启动:service 服务名 start/stop/restart/status
/etc/rc.d/init.d/服务名 start
rpm –Uvh 包全名 #升级安装(upgrade)
rpm –Fvh 包全名 #升级安装,未安装过,则不安装(freshen)
rpm –e 包名 #卸载
rpm –q 包名 #查询包是否安装
rpm –qa | grep httpd #显示所有安装包
rpm –qi 包名 #查询包的信息
rpm –qip 包全名 #查询没有安装的包的信息
rpm –ql 包名 #查询包中文件的安装位置
rpm –qf 系统文件名 #查询系统文件属于哪个包
rpm –qR 包名 #查询软件包所依赖的软件包
rpm –qRp 包全名 #查询没有安装的包的依赖性
rpm –V 包名 #校验安装的某个包是否被修改
rpm –Va #校验本机已经安装的所有软件包
rpm –Vf 系统文件名 #校验某个系统文件是否被修改
S #文件大小是否改变
M #文件的类型或权限是否被改变
5 #文件MD5校验和是否改变(可看成文件内容)
D #设备的主从代码是否改变
L #文件路径是否改变
U #文件的所有者是否改变
G #文件的所属组是否改变
T #文件的修改时间是否改变
c #配置文件(config file)
d #普通文件(documentation)
g #鬼文件(ghost file)
l #授权文件(licensefile)
r #描述文件(read me)
数字证书,为原厂公钥文件
/mnt/cdrom/RPM-GPG-KEY-CentOS-6 #光盘中数字证书位置
/etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-6 #系统中数字证书位置
rpm --import /etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-6 #导入数字证书
rpm –qa | grep gpg-pubkey #查询已安装的证书
备份:find 备份目录或文件–print | cpio –ocvB >指定目录生成.cpio文件
-o #copy-out模式,备份
-v #显示过程
-c #使用较新的portable format存储方式
-B #设定输出块为5120bytes,而不是模式的512butes
还原:cpio –idvcu <指定目录生成的.cpio文件
-i #copy-in模式,还原
-d #还原时自动新建目录
-u #自动使用较新的文件覆盖较旧的文件
备份时使用绝对路径,恢复的数据会直接回到原来的绝对路径;备份时使用相对路径,数据会恢复到当前路径。
复制模式:find 备份目录或文件–print | cpio –p 指定目录
提取RPM包中文件:rpm2cpio 包全名 | cpio –idv . 文件绝对路径
rpm2cpio #将rpm包转换为cpio格式的命令
.是一种格式,不能省略
dir与ls有相同的作用。
搭建光盘yum源
cd/etc/yum.repos.d/
mvCentOS-Base.repo CentOS-Base.repo.bak
mount/dev/sr0 /mnt/cdrom
vi/etc/yum.repos.d/CentOS-Media.repo
baseurl=file:///mnt/cdrom/ #指定yum源位置
enabled=1 #yum源文件生效
[base] #容器名称,一定要放在[]中
name #容器说明,可以自己随便写
mirrorlist #镜像站点,这个可以注释掉
baseurl #yum源服务地址
enabled #此容器是否生效,enable=1为生效,enable=0为不生效
gpgcheck #RPM的数字证书是否生效
gpgkey #数字证书的公钥文件保存位置
yum –y install 包名 #安装
yum –y remove 包名 #卸载(不建议用)
yum –y update 包名 #升级
yum list #查询所有可以安装的包
yum list 包名 #查询yum源服务器中是否包含某个软件包
yum search 关键字 #搜索yum源服务器上所有和关键字相关的包
yum info 包名 #查询指定软件包的信息
yum组管理命令
yumgrouplist #列出所有可用的软件组列表
yumgroupinfo 软件组名 #列出软件组中包含的软件
yumgroupinstall软件组名 #安装指定软件组
yumgroupremove 软件组名 #卸载指定软件组
源码包安装
解压
cd 解压目录
查看安装文档 INSTALL README
编译前准备 ./configure--prefix /usr/local/目录名
检测系统环境,定义功能选项。把检测结果和定义的选项写入Makefile
编译make(出错后makeclean)
编译安装make install
启动 /usr/local/目录名
源码包可以链接到service下,不建议用
删除:直接删除安装目录
RPM包一般为系统自带,源码包在官网下载
给客户端,公网访问的服务不建议改端口。ssh可以改端口。
echo $LANG 查看语言支持
LANG=en_US 临时修改语言支持
diff 选项 old new > *.patch #生成补丁
-a 将任何文档当做文本文档处理
-b 忽略空格造成的不同
-B 忽略空白行造成的不同
-I 忽略大小写造成的不同
-N 当比较两个目录时,如果某个文件只在一个目录中,则在另一个目录中视作空文件
-r 当比较目录时,递归比较子目录
-u 使用统一的输出格式
patch –pn < 补丁文件 #打入补丁
n为数字,若生成补丁用相对路径,n为0;若生成补丁用绝对路径,n为文件夹距离
脚本安装程序 ./setup.sh #要确保perl已经安装
安装脚本执行时注意:SSL不要启用
函数库分类
静态函数库:直接整合在程序中,以“*.a”结尾
动态函数库:需调用,以“*.so”结尾
ldd –v 可执行文件名 #安装函数库
ldd 可执行文件名(/bin/ls) #查看调用的函数库
cp *.so /usr/lib/ #把函数库拷贝入/usr/lib目录(函数库没正常安装时才需手工操作)
vi /etc/ld.so.conf #修改函数库配置文件
ldconfig #从/etc/ld.so.conf中把函数库读入缓存
ldconfig –p #列出系统缓存中所有识别的函数库
du -sh 目录名 #统计目录大小
用户和用户组管理
/etc/passwd 用户信息文件
root:x:0:0:root:/root:/bin/bash
用户名:密码标识:UID:GID:用户说明:用户家目录:登录shell
密码标识x代表有密码,用户正常。若用户没有密码只能本地登录。
UID为0是超级用户,1-499为系统用户(伪用户),500-65535为普通用户。
普通用户变成超级用户只需把用户UID改为0
登录shell为/bin/bsah,/sbin/nologin为不能登录伪用户。
数据库用户与系统用户完全不同。
/etc/shadow 影子文件
root:68cducdbofehrwq:15575:0:99999:7:::
用户名:加密密码:密码最近更改时间:两次密码修改的间隔时间:密码有效期:密码修改到期前的警告天数:密码过期后的宽限天数:密码失效时间:保留
密码由MD5(128位加密)变为SHA512加密,在加密密码前加入“!”或“*”可以让密码值暂时失效,达到暂时禁止用户登录的效果。所有伪用户的密码都是“!!”或“*”。
密码最近更改时间为时间戳,以1970年1月1日为标准时间。时间戳为0,第一次登录必须修改密码。
时间戳转日期:date –d “1970-01-01 16659 days”
日期转时间戳:echo $(($(date --date=”2015/08/12” +%s)/86400+1))
两次密码的修改间隔时间和密码有效期是与密码最近更改时间相比。
密码有效期为0,不能登录
密码修改到期前的警告天数和密码过期后的宽限天数是和密码有效期相比。
密码失效时间同样要写成时间戳。如果超过了失效时间,即使密码没有过期,用户也不能登录。时间为0,不能登录。
/etc/group 组信息文件
root:x:0:root
组名:组密码位:GID:附加组是此组的用户
初始组:每个用户初始组只能有一个,一般是和用户名相同的组作为初始组。
附加组:每个用户可以属于多个附加组。
/etc/gshadow
用户组设定了组管理员和组密码,组密码保存在这个文件中。
用户的家目录,root为/root,普通用户一般为/home/用户名
用户邮箱目录在/var/spool/mail中
用户模板目录/etc/skel/,新建用户包含的初始文件所在位置。
手工删除用户需修改6个文件
/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,/home/user1,/var/spool/mail/user1
useradd 选项 用户名 #添加用户
-u数字 指定UID
-g组名 指定初始组,一般不要指定
-G组名 指定附加组
-c组名 添加说明
-d目录 手工指定家目录,不需事先建立
-sshell /bin/bash
useradd添加用户时参考的默认值文件为/etc/default/useradd和/etc/login.defs
/etc/default/useradd
GROUP=100 建立用户的默认组,目前采用私有用户组机制
HOME=/home 用户的家目录默认位置
INACTIVE=-1 密码过期后的宽限天数,-1代表永不失效
EXPIRE= 密码失效时间,默认永久有效
SHELL=/bin/bash 用户的默认shell
SKEL=/etc/skel 定义用户模板目录位置
CREATE_MALL_SPOOL=yes 默认给新建用户创建邮箱
/etc/login.defs
MAIL_DIR /var/spool/mail 新建用户的默认邮箱位置
PASS_MAX_DAYS 99999 密码的有效期
PASS_MIN_DAYS 0 两次密码的修改间隔时间
PASS_MIN_LEN 5 密码的最小长度,登录验证已被PAM模块取代
PASS_WARN_AGE 7 密码到期前的警告天数
UID_MIN 500/UID_MAX 60000 用户的UID范围
GID_MIN500/GID_MAX 60000 用户的GID范围
CREATE_HOME yes 建立用户自动建立家目录
UMASK 077 用户家目录的默认权限为700
USERGROUPS_ENAB yes userdel删除用户时默认删除初始组
ENCRYPT_METHOD SHA512 用户密码使用SHA512散列模式加密
usermod –u –G –c –d –s 用户名 #修改用户信息
-L 锁定用户
-U 解锁
-l新名 旧名 用户改名
usermod –G 组名 用户名 #把用户加入组
userdel –r 用户名 #连带家目录一起删除用户
passwd 选项 用户名 #设定用户密码
passwd不跟用户名为修改当前用户密码
-S 查询用户密码的密码状态
-l 锁定用户密码,用户不允许登录
-u 解锁
--stdin 允许管道符输入密码 echo “1234”| passwd --stdin user2
groupadd 组名 #添加组
groupdel 组名 #删除组(没有用户的初始组为此组)
gpasswd –a 用户名 组名 #把用户加入组
gpasswd –d 用户名 组名 #把用户从组中删除
chage –d 0 用户名 #一登录就需修改用户密码
id 用户名 #显示用户的UID,初始组,附加组
su – 用户名 #连带环境变量一起切换用户身份
env #查看环境变量
newgrp 组名 #修改所有者创建文件的有效组(所属组)
selinux可以限制root的权限
df –h #查看系统分区
dumpe2fs –h /dev/sda3 #查询指定分区详细文件系统信息
-h 仅显示超级块中信息,而不显示磁盘块组的详细信息
mount –o remount, acl / #重新挂载根分区,并加入ACL权限,手工开启分区的ACL权限
vi /etc/fstab #永久开启ACL权限,需修改配置文件
mount –o remount / #重新挂载文件系统或重启系统,使修改生效
getfacl 文件名 #查询文件的ACL权限
setfacl –m u:用户名:权限 文件名 #设定ACL权限
setfacl –m d:u: 用户名:权限 文件名 #设定ACL默认权限,只能是目录
如果给目录赋予ACL权限,以上两条命令都要输入
setfacl –x u:用户名 文件名 #删除指定ACL权限
setfacl –b 文件名 #删除所有ACL权限
setfacl –k 文件名 #删除默认ACL权限
setfacl –m g:组名:权限 –R 文件名 #递归设定
setfacl –m m:rwx 文件名 #设定最大有效权限mask
sudo授权,给普通用户赋予部分管理员权限(如重启服务器等)
/sbin/, /usr/sbin/目录下命令只有超级用户才能使用。
root/%wheel ALL=(ALL) ALL
用户名/组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
用户名/组名:代表root给哪个用户或用户组赋予命令,注意组名前加“%”
用户可以用指定的命令管理指定IP地址的服务器。如果写ALL,代表可以管理任何主机,如果写固定IP,代表用户可以管理指定的服务器。如果是一台独立的服务器,这里写ALL和服务器的IP地址,作用是一样的。而写入网段,只有对NIS服务这样用户和密码集中管理的服务器才有意义。如果写本机的IP地址,不代表只允许本机的用户使用指定命令,而代表指定的用户可以从任何IP地址来管理当前服务器。
可使用身份:就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份,这个字段可以省略。
授权命令:代表root把什么命令授权给普通用户,需要给哪个命令授权,写入命令名即可,一定要写成绝对路径。
visudo #修改配置文件进行授权
sudo –l #查看可用的授权
aa ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd“ ”, !/usr/bin/passwd root
#赋予aa改密码权限,取消对root的密码修改(授权aa新建用户)
SetUID的含义:
只有可以执行的二进制程序才能设定SUID权限;
命令执行者要对该程序拥有x(执行)权限;
命令执行者在执行该程序时获得该程序文件属主的身份;
SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
SUID是系统为解决某些普通用户权限不足的问题,如果取消SUID权限,普通用户就不能修改自己的密码了。
SUID比较危险,应注意:
关键目录应严格控制写权限,比如“/”“usr”等;
用户的密码设置要严格遵守密码三原则;
对系统中默认应该具有SUID权限的文件作一列表,定时检查有没有之外的文件被设置SUID权限。
检测SUID的脚本
#!/bin/bash
find/ -perm -4000 –o –perm -2000 > /tmp/setuid.check
#搜索系统中所有拥有SUID和SGID的文件,并保存到临时目录中
fori in $(cat /tmp/setuid.check)
#做循环,每次循环取出临时文件中的文件名
do
grep$i /root/suid.list > /dev/null
#比对这个文件名是否在模板文件中
if[“$?” !=”0”]
#如果在,不报错
then
echo“$i isn’t in listfile!” >> /root/suid_log_$(date+%F)
#如果文件名不在模板文件中,则报错,并把报错报错到日志中
fi
done
rm –rf /tmp/setuid.check
SetGID即可以针对文件生效,也可以针对目录生效。
SGID针对文件含义;
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行者在执行程序的时候,组身份升级为该程序文件的属组
SGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。
SGID针对目录的含义:
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
Sticky BIT黏着位,简称SBIT,仅对目录有效。
普通用户对该目录拥有w和x权限;
如果没有黏着位,因为普通用户拥有写权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了黏着位,除了root可以删除所有文件,普通用户就算拥有写权限,也只能删除自己建立的文件,不能删除其他用户建立的文件。
特殊权限的表示方法:
SUID 4 u+s
SGID 2 g+s
SBIT 1 o+t
chattr [+-=] [选项] 文件或目录名 #修改文件系统属性权限
+:增加权限 -:删除权限 =:等于某权限
i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除。
e:linux中绝大多数的文件都默认拥有e属性,表示该文件是使用ext文件系统进行存储的,而且不能使用“chattr –e”命令取消e属性。
lsattr 选项 文件名 #查看文件系统属性权限
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
文件系统管理
硬盘速度:500MB/s;CPU速度:2G(Hz)x8(64位)字节x8线程
硬盘是计算机发展的瓶颈
硬盘逻辑结构:扇区,磁道。
每个扇区的大小是固定的,为512byte,扇区也是磁盘的最小存储单位。
硬盘的大小=磁头数x柱面数x扇区数x每个扇区的大小
磁头数表示硬盘总共有几个磁头,也可以理解为硬盘的盘面x2;
柱面数表示硬盘每一面盘片有几条磁道;
扇区数表示每条磁道上有几个扇区。
硬盘接口:IDE,SCSI,SATA,SAS,PCI-E,PCI
对比项目 固态硬盘 机械硬盘
容量 较小 大
读写速度 极快 一般
写入次数 5000次-10万次 没有限制
工作噪音 极低 有
工作温度 极低 较高
防震 很好 怕震动
重量 低 高
价格 高 低
super block(超级块):记录整个文件系统的信息,包括block与inode的总量,已经使用的inode和block的数量,未使用的inode和block的数量,block与inode的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
date block(数据块):用来实际保存数据的,block的大小(1Kb、2Kb、4Kb)和数量在格式化后就已经决定,不能改变,除非重新格式化。每个block只能保存一个文件的数据,要是文件数据小于一个block块,那么这个block的剩余空间不能被其他文件占用;要是一个文件数据大于一个block块,则占用多个block块。Windows中磁盘碎片整理就是把一个文件占用的多个block块尽量整理到一起,这样可以加快读写速度。
inode(i节点):用来记录文件的权限,文件的所有者和属组,文件的大小,文件的状态修改时间,文件的最近一次读取时间,文件的最近一次修改时间,文件的数据真正保存的block编号。每个文件需要占用一个inode.
df –ahT
-a #显示特殊文件系统,这些文件系统几乎都是保存在内存中,占用量为0
-h #单位换算为习惯单位
-T #多出文件系统类型
du [选项] [目录或文件名]
-a #显示每个子文件的磁盘占用量,默认只统计子目录的磁盘占用量
-s 统计占用总量
-h
du与df的区别:du统计文件大小;df查看空间占用情况
lsof #查看文件
fsck –y /dev/sdb1 #自动修复文件系统
dumpe2fs /dev/sda1 #显示磁盘状态
Filesystemvolume name 卷标名
Lastmounted on 挂载点
FilesystemUUID UUID
Defaultmount options 挂载参数
Filesystemstate:clean 文件系统状态,正常
Inodecount inode总数
Blockcount 块总数
Blocksize 块大小
Inode inode的大小
stat 文件名 #查看文件的详细时间
I0Block 系统分区块大小
Links 硬链接数
modify 数据修改时间
change 状态修改时间
file 文件名 #判断文件类型
type 命令名 #判断命令类型
fdisk –l #查看系统所有硬盘及分区
必须激活一个主分区才能安装系统,默认激活第一个主分区。用“*”表示。
fdisk dev/sdb #进行磁盘分区(分区还没有分区号)
d 删除一个分区
l 显示已知的文件系统类型。82为linux swap分区,83为linux分区
m 显示帮助菜单
n 新建分区
p 显示分区列表
q 不保存退出
t 改变一个分区的系统ID
w 保存退出
a 设置可引导标记
b 编辑bsd磁盘标签
c 设置DOS操作系统兼容标记
o 建立DOS分区表
s 新建空白SUN磁盘标签
u 改变显示记录单位
v 验证分区表
x 附加功能
partprobe #强制重读所有分区文件,重新挂载分区文件内所有分区。分区没有被显示出来时可以用此命令,或者重启
mkfs –t ext4 /dev/sdb1 #格式化分区
mke2fs [选项] 分区设备文件名
-t文件系统:指定格式化成哪个文件系统
-b字节:指定block的大小
-i字节:指定“字节/inode”的比例,也就是多少个字节分配一个inode
-j:建立带有ext3日志功能的文件系统
-L卷标名:给文件系统设置卷标名,不用e2label设定了
vi /etc/fstab #修改分区自动挂载文件
/dev/sdb1 /disk1 ext4 defaults 1 2
设备文件名 挂载点 文件系统 挂载选项 是否可以被备份 是否检测磁盘fsck
备份:0不备份,1每天备份,2不定期备份
检测:0不检测,1启动时检测,2启动后检测
UUID为硬盘通用唯一识别码,可以用UUID进行挂载,而不用分区设备文件名挂载。
UUID的查询:dumpe2fs/dev/sdb5或ls –l /dev/disk/by-uuid/
mount –a #重新挂载所有内容,进行重启测试
/etc/fstab文件修复:可以进入系统,重新挂载读写权限(mount–o remount, rw /),修改配置文件,就可以正常启动。
MBR分区表:支持最大分区是2TB,最多支持4个主分区,或3个主分区1个扩展分区。
GPT分区表:支持最大18EB分区,最多支持128个分区,一个系统保留分区,127个用户自定义分区。
parted命令分区只能直接格式化成ext2文件系统。
parted /dev/sdb #进入parted交互模式
help 显示所有的命令帮助
print 显示分区表,活动设备,空闲空间,所有分区
mklabel ,mktable 创建新的磁盘卷标(分区表)
mkpart 创建一个分区
mkfs 在分区上建立文件系统
resize 修改分区大小
rm 删除分区
quit 退出
check 做一次简单的文件系统检测
cp 复制文件系统到另外一个分区
mkpartfs 创建分区,并建立文件系统
move 移动分区
name 给分区命名
rescue 修复丢失的分区
select 选择需要编辑的设备
set 改变分区标记
toggle 切换分区表的状态
unit 设置默认单位
version 显示版本
使用print可以查看分区表的信息,包括硬盘参数,硬盘大小,扇区大小,分区表类型和分区信息。分区信息共七列,分别是:
Number:分区号
Start: 分区起始位置,这里不再像fdisk用柱面表示,而是使用Byte更加直观
End: 分区结束位置
Size: 分区大小
Type: 分区类型
File system:文件系统类型,parted不能直接把分区格式化成ext4文件系统,但是可以识别
Flags: 分区的标记
修改了分区表,原有分区中的数据都会消失,而且需要重启系统才会生效。重启系统前要注意把/etc/fstab文件中的原有分区删除掉。
分区类型是标识主分区、扩展分区和逻辑分区的,这种标识只在MBR分区中使用,在GPT分区表中不再有Type类型。
如果要格式化ext4文件系统,可以退出parted交互命令,用mkfs,但格式化成ext4文件系统之后,就不能用parted命令调整大小了。
parted调整已经挂载使用的分区时,是不会影响分区中数据的,也就是说数据不会丢失。但是一定要先卸载分区,再调整分区大小,否则数据也是会出现问题的。要调整大小的分区必须已经建立了文件系统(格式化),否则也会报错。
parted中所有的操作都是立即生效,没有保存生效的概念。
分配swap分区
分区,并修改swap分区ID fdisk /dev/sdb
格式化 mkswap/dev/sdb1
使用swap分区 swapon/dev/sdb1
关闭swap分区 swapoff/dev/sdb1
自动挂载,修改配置文件 /dev/sdb1 swap swap defaults 0 0
free #查看swap分区的大小
高级文件系统管理
grep CONFIG_QUOTA/boot/config-2.6.32-279.el6.i686
#查看内核是否支持磁盘配额,一般都支持
rpm –qa | grep quota #查看系统是否安装了quota工具,默认已安装
要支持磁盘配额的分区必须开启磁盘配额功能,这个功能需手工开启。
磁盘配额分为用户配额和组配额。配额包括磁盘容量限制和文件个数限制。限制又包括软限制和硬限制。
宽限时间:如果用户的空间占用数处于软限制和硬限制之间,系统会在用户登录时警告用户磁盘将满,这个时间就是宽限时间,默认为7天。如果达到了宽限时间,用户的磁盘占用量还超过软限制,那么软限制就会升级为硬限制。
磁盘配额是限制普通用户在分区上使用磁盘空间和文件个数的,所以需要指定一个分区。针对的是普通用户,普通用户需要对分区有写的权限。
如果用户限制和组限制同时存在,那么哪个限制更小,哪个限制优先级更高。
mount –o remount,usrquota,grpquota /disk
#重新挂载/disk分区,并加入用户和用户组的磁盘配额功能
需永久生效,修改/etc/fstab文件,重新挂载分区或重启系统
quotacheck [选项] [分区名] #建立磁盘配额的配置文件
-a 扫描/etc/mtab文件中所有启用磁盘配额功能的分区。如果加入此参数,命令后面就不需要加入分区名了
-c 不管原有的配置文件,重新扫描并建立新的配置文件
-u 建立用户配额的配置文件,也就是生成aquota.user文件
-g 建立组配额的配置文件,会生成aquota.group文件
-v 显示扫描过程
-m 强制以读写的方式扫描文件系统,和-M类似,一般扫描根分区时使用
-f 强制扫描文件系统,并写入新的配置文件,一般扫描新添加的硬盘分区时使用
建立磁盘配置文件时需关闭SElinux
setenforce0 关闭SElinux setenforce 1 开启SElinux
sestatus #查看状态
配置文件/etc/selinux/config
如果自动扫描/分区建立配额配置文件时,因为/分区已经挂载成读写系统,而quotacheck需要先把分区挂载成只读分区,然后建立配置文件,最后再挂载回来,所以不能直接在/分区建立配置文件。这时就需要使用-m强制以读写方式扫描文件系统。
edquota [选项] [用户名或组名] #设置用户和组的配额限制
-u用户名:设定用户配额
-g组名:设定组配额
-t:设定宽限时间
-p:复制配额限制,如果已经设定好某个用户的配额限制,其他用户的配额限制如果和这个用户相同,那么可以直接复制配额限制,而不用都手工指定
Filesystem block soft hard inodes soft hard
/dev/sdb1 0 0 0 0 0 0
#分区名 已占用容量软限制 硬限制 已占用文件数 软限制 硬限制
已占用容量和已占用文件数不能修改。
edquota –p 源用户 –u 目标用户 #配额复制
quotaon [选项] [分区名] #启动配额
-a:依据/etc/mtab文件启动所有的配额分区,如果不加-a,后面一定要指定分区名
-u:启动用户配额
-g:启动组配额
-v:显示启动过程的信息
quotaoff [选项] [分区名] #关闭配额
-a:依据/etc/mtab文件关闭所有的配额分区,如果不加-a,后面一定要指定分区名
-u:关闭用户配额
-g:关闭组配额
quota [选项] [用户名或组名] #查询用户或用户组配额(选项都要写)
-u用户名:查询用户配额
-g组名:查询组配额
-v:显示详细信息
-s:以习惯单位显示容量大小
repquota [选项] [分区名] #查询文件系统配额(选项都要写)
-a:依据/etc/mtab文件查询配额,如果不加-a,就一定要加分区名
-u:查询用户配额
-g:查询组配额
-v:显示详细信息
-s:以习惯单位显示容量大小
dd if=/dev/zero of=/disk/testfile bs=1Mcount=60#建立testfile测试文件,指定大小60MB
setquota –u 用户名 容量软限制 容量硬限制 个数软限制 个数硬限制 分区名
#非交互设定用户磁盘配额(容量限制后不能加单位,默认为字节)
非交互设定用户磁盘配额在写脚本批量设置时更加方便。当然写脚本时也可以先建立一个模板用户,设定好磁盘配额,再进行配额复制,也是可以的。
LVM是Logical VolumeManager的简称,中文就是逻辑卷管理。
物理卷(PV,Physical Volume):就是真正的物理硬盘或分区。
卷组(VG,Volume Group):将多个物理卷合起来就组成了卷组,组成同一个卷组的物理卷可以是同一个硬盘的不同分区,也可以是不同硬盘上的不同分区。可以把卷组想象为一个逻辑硬盘。
逻辑卷(LV,Logical Volume):卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区称作逻辑卷。逻辑卷可以格式化和写入数据。可以把逻辑卷想象成分区。
物理扩展(PE,Physical Extend):PE是用来保存数据的最小单元,数据实际上都是写入PE当中,PE的大小是可以配置的,默认是4MB。PE和基本文件系统中的block数据块非常相似。
建立LVM的步骤:
首先需要把物理硬盘分成分区,当然也可以是整块物理硬盘。
然后把物理分区建立成为物理卷,也可以直接把整块硬盘都建立为物理卷。
接下来把物理卷整合成为卷组。卷组就已经可以动态的调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除。
最后就是把卷组再划分为逻辑卷,当然逻辑卷也是可以直接调整大小的。逻辑卷可以想象成分区,也需要格式化和挂载。
把物理分区建立成物理卷时,分区的ID号要改成8e。
pvcreate [设备文件名] #建立物理卷
pvscan #查看物理卷。可以看到物理卷总量,使用数量,空闲数量
pvdisplay #查看详细的物理卷状态
pvremove 设备文件名 #删除物理卷
vgcreate [选项] 卷组名 物理卷名 #建立卷组
-sPE的大小:指定PE的大小,单位可以是MB,GB等,如果不写默认PE大小是4MB
vgscan #查看系统中是否有卷组
vgdisplay #查看卷组的详细状态
vgextend 卷组名 设备文件名 #增加卷组容量
vgreduce 卷组名 设备文件名 #在卷组中删除物理卷
vgreduce –a #删除所有未使用的物理卷
vgremove 卷组名 #删除卷组
卷组删除之后,才能删除物理卷。如果有了逻辑卷,要先删除逻辑卷再删除卷组。
lvcreate [选项] [-n 逻辑卷名] 卷组名 #建立逻辑卷
-L容量:指定逻辑卷的大小,单位MB,GB,TB等
-l个数:按照PE个数指定逻辑卷大小,这个参数需要换算容量
-n逻辑卷名:指定逻辑卷名
建立完逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通分区时是一样的,逻辑卷的设备文件名是/dev/卷组名/逻辑卷名
lvscan #查看系统中是否有逻辑卷
lvdisplay #查看逻辑卷的详细信息
lvresize [选项] 逻辑卷设备文件名 #调整逻辑卷大小
-L 容量:按照容量调整大小,单位KB,MB,GB等。使用+代表增加空间,-号代表减少空间。如果直接写容量,代表设定逻辑卷大小为指定大小
-l个数:按照PE个数调整逻辑卷大小
resize2fs [选项] [设备文件名] [调整的大小] #调整分区大小
-f:强制调整
设备文件名:指定调整哪个分区的大小
调整的大小:指定把分区调整到多大,要加M,G等单位,如果不加大小,会使用整个分区
LVM的优势是不需要卸载分区,直接就能调整分区的大小。数据不会丢失
lvremove 逻辑卷设备文件名 #删除逻辑卷,要先卸载
RAID 0也叫Stripe或Striping(带区卷)。
RAID 1也叫Mirror或Mirroring(镜像卷),由两块硬盘组成。
如果先用两块硬盘组成RAID 1,再用两块硬盘组成另一个RAID 1,最后把这两个RAID 1组成RAID 0,这种RAID方法我们就称作RAID 10.那先组成RAID 0,再组成RAID 1的方法我们就称作RAID 01.
RAID 5最少需要三块硬盘组成,当然硬盘的大小也应当一致。
mdadm [模式] [RAID设备文件名] [选项]
Assemble:加入一个已经存在的阵列
Build:创建一个没有超级块的阵列
Create:创建一个阵列,每个设备具有超级块
Manage:管理阵列,如添加设备和删除损坏设备
Misc:允许单独对阵列中的设备进行操作,如停止阵列
Followor Monitor:监控RAID状态
Grow:改变RAID的容量或阵列中的数目
-s,--scan:扫描配置文件或/proc/mdstat文件,发现丢失信息
-D,--detail:查看磁盘阵列详细信息
-C,--create:建立新的磁盘阵列,就是调用Create模式
-a,--auto=yes:采用标准格式建立磁盘阵列
-n,--raid-devices=数字:使用几个硬盘或分区组成RAID
-l,--level=级别,创建RAID的级别,可以是0,1,5
-x,--spare-devices=数字:使用几个硬盘或分区组成备份设备
-a,--add 设备文件名:在已经存在的RAID中加入设备
-r,--remove 设备文件名:在已经存在的RAID中移除设备
-f,--fail 设备文件名:把某个组成RAID的设备设置为错误状态
-S,--stop:停止RAID设备
-A,--assemble:按照配置文件加载RAID
命令模式建立RAID5
mdadm --create --auto=yes /dev/md0 --level=5--raid-devices=3 --spare-devices=1 /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8 #创建/dev/md0,有等号只能用全称
mdadm –D /dev/md0 #查看新建立的/dev/md0
cat /proc/mdstat #查看RAID相关信息
mkfs –t ext4 /dev/md0 #格式化
mkdir /raid #建立挂载点
mount /dev/md0 /raid #挂载/dev/md0
mount #查看挂载是否正常
echo Device /dev/sdb[5-8] >>/etc/mdadm.conf
#建立/etc/mdadm.conf配置文件,并把组成RAID的分区设备文件名写入。如果有多个RAID,要把所有组成RAID的设备都放入配置文件,否则RAID设备重启后会丢失。比如组成RAID10,就既要把分区设备文件名放入此文件,也要把组成RAID 0的RAID 1设备文件名放入
mdadm –Ds >> /etc/mdadm.conf #查询和扫描RAID信息,并追加进/etc/mdadm.conf文件
cat /etc/mdadm.conf #查看文件内容
vi /etc/fstab #设置开机自动挂载
mdadm –S /dev/md0 #停止RAID,要先卸载
#删除RAID,要删除/etc/fstab和/etc/mdadm.conf内相关内容
mdadm –As /dev/md0 #启动RAID,要记得挂载
mdadm /dev/md0 –f /dev/sdb7 #模拟/dev/sdb7分区报错
mdadm –D /dev/md0 #查看RAID状态,备份分区已自动替换
mdadm /dev/md0 –r /dev/sdb7 #移除错误分区
mdadm /dev/md0 –a /dev/sdb9 #添加新的备份分区
shell命令解释器
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh(Bash和zsh在不同程度上支持csh的语法),通过/etc/shells文件查询Linux支持的Shell。
echo [选项] [输出内容]
-e 支持反斜线控制的字符转换
-n 取消输出后行末的换行符号(就是内容输出后不换行)
-e支持的控制字符
\ 输出本身
a 输出警告音
b 退格键,也就是向左删除键
c 取消输出行末的换行符,和-n一样
e ESCAPE键
f 换页符
n 换行符
r 回车键
t 制表符,也就是Tab键
v 垂直制表符