六、RPM包管理命令
主要功能
- 查询RPM软件、包文件的相关信息
- 安装、升级、卸载RPM软件包
- 维护RPM数据库信息
查询RPM软件信息
查询已安装的RPM软件信息
格式:rpm -q[子选项] [软件名]
用法:结合不同的子选项 完成不同查询
-qa:查看系统中已安装的所有RPM软件包列表
-qi:查看指定软件的详细信息
-ql:查询指定软件包所安装的目录、文件列表
-qc:仅显示指定软件包安装的配置文件
-qd:仅显示指定软件包安装的文档文件
查询文件/目录属于哪个RPM软件
格式:rpm -qf 文件或目录名
查询未安装的RPM包文件
格式:rpm -qp[子选项] RPM包文件
用法:结合不同的子选项 完成不同查询
-qpi:通过.rpm包文件查看该软件的详细信息
-qpl:查看.rpm安装包内所包含的目录、文件列表
-qpc:查看.rpm安装包内包含的配置文件列表
-qpd:查看.rpm安装包内包含的文档文件列表
安装、升级、卸载RPM软件包
安装或升级RPM软件
格式:rpm [选项] RPM包文件...
用法:不同选项适用于不同情况
-i:安装一个新的rpm软件包
-U:升级某个rpm软件,若原本未装,则进行安装
-F:更新某个rpm软件,若原本未装,则放弃安装
-i 用于安装新软件包,-U 用于升级现有软件包(若未装则安装),-F 也用于升级现有软件包(若未装则不装)
卸载指定的RPM软件
格式:rpm -e 软件名
卸载软件时只需要指定软件名即可,无需指定版本号
辅助选项
--force:强制安装所指定的rpm软件包
--nodeps:安装、升级或卸载软件时,忽略依赖关系
-h:以“#”号显示安装的进度
-v:显示安装过程中的详细信息
--force 辅助选项主要应用于以下两种情况:
1)缺失某个软件包的文件时,需要进行覆盖安装以找回丢失文件
2)安装一个比现有软件版本陈旧的软件包(多为测试用途)
当安装、卸载软件包时,提示缺少依赖包无法进行时,如果仍要继续执行,应结合 --nodeps 选项而不是 --force 选项
在安装新的软件包时,通常使用”-ivh”组合选项来获得更加友好的屏幕提示信息
“warning:……NOKEY……”的警告信息是由于没有导入RedHat提供的公钥所致,但并不影响安装效果,可以忽略,如果需要导入公钥文件,可以参考如下步骤(以后从RHEL5光盘中安装软件时,就不会再出现警告提示了):
[root@localhost ~]# cd /media/cdrom
[root@localhost cdrom]# rpm --import RPM-GPG-KEY-redhat-release
解决软件包依赖关系
安装有依赖关系的多个软件时
1、被依赖的软件包需要先安装
2、同时指定多个.rpm包文件进行安装
卸载有依赖关系的多个软件时
1、依赖其他程序的软件包需要先卸载
2、同时指定多个软件名进行卸载
忽略依赖关系
结合“--nodeps”选项,但可能导致软件异常
查询util-linux软件包安装的文件:rpm -ql util-linux
查询mkdir命令是由哪个RPM软件包安装的:rpm -qf mkdir
强制卸载被其他程序依赖的软件:rpm -e softname --nodeps
当安装、卸载软件包时,提示缺少依赖包无法进行时,如果仍要继续执行,应结合 --nodeps 选项而不是 --force 选项
维护RPM数据库
当RPM数据库损坏时,需要进行数据库重建
格式:rpm --rebuilddb
rpm --initdb
当RPM数据库发生损坏,Linux系统无法自动完成修复时,可能将导致无法正常安装、卸载rpm软件包
在图形界面中管理RPM包
图形界面中的“添加/删除软件”
依赖于YUM(Yellow dog Updater,Modified)机制
调用yum命令工具进行软件更新
使用“添加/删除软件”工具的条件
能够访问互联网中的YUM源服务器
若使用默认源,需有合法的安装序列号和服务订阅号
在局域网内构建本地的YUM源服务器
参考《Linux实用技术阅读手册》第一章
YUM(Yellow dog Updater,Modified,修订版的黄狗升级器)
使用RHEL5系统光盘中的软件包可以构建自己的YUM源服务器,具体请参阅《Linux实用技术阅读手册》
讲师可在备课过程中预先构建好本地yum服务器,如果时间允许,这里可以演示“添加/删除软件”工具的操作,也可以适当扩展,对yum更新工具命令进行讲解
源代码编译概述
使用源代码安装软件的优点
获得最新的软件版本,及时修复bug
根据用户需要,灵活定制软件功能
应用场合举例
安装较新版本的应用程序时
自由软件的最新版本大都以源码的形式最先发布
当前安装的程序无法满足需要时
编译安装可由用户自行修改、定制功能
需要为应用程序添加新的功能时
用户可以重新配置、自由修改源代码,加入新的功能
Tarball 封包:
.tar.gz 和 .tar.bz2 格式居多
软件素材参考:http://sourceforge.net
完整性校验
md5sum校验工具
计算MD5校验和,并与官方提供的值相比较,判断是否一致
对于下载回来的软件包文件,如果MD5校验和与官方提供的不一致,则说明该软件包在网络传输过程中可能被非法改动过
对于校验和不一致的软件包,应尽量不要使用,以免带来病毒、木马等不安全因素
确认源代码编译环境
需安装支持 C/C++程序语言的 编译器
gcc-4.1.1-52.el5、gcc-c++-4.1.1-52.el5
make-3.81-1.1.i386 ……
源码编译安装的基本过程
解包 —— tar
解包、释放出源代码文件
配置 —— ./configure
针对当前系统、软件环境,配置好安装参数
编译 —— make
将源代码文件变为二进制的可执行程序
安装 —— make install
将编译好的程序文件复制到系统中
configure 一般是位于软件包目录中的可执行脚本文件
- 解包
习惯上将软件包释放到 /usr/src/ 目录
解包后的源代码文件位置:/usr/src/软件名-版本号/
软件包释放至哪个目录并无硬性限制,例如用户也可以释放至 /usr/local/src/ 目录或者其他目录下,编译安装结束后,源码包目录可以选择删除
释放出的软件源代码目录中,configure脚本文件将用于下一步的配置工作
- 配置
需将工作目录切换到软件源码所在目录
使用源码目录中的 configure 脚本
执行“./configure --help” 可以查看帮助
典型的配置选项:
--prefix=软件安装目录
不同的应用程序其配置参数会存在区别,因此使用“./configure --help”非常重要(“./”表示当前目录)
用户应用程序习惯上安装到“/usr/local/软件名”文件夹中
编译过程中如果出现错误,通常是由于缺少依赖软件包所致
根据软件大小不同,配置过程可能会需要不同的时间
-
编译
执行 make 命令 -
安装
执行 make install 命令
这两个步骤可以合写为一行:
make && make install
编译过程(make)通常是源码包编译过程中耗时最长的环节,对于小软件可能感觉不到
安装的过程(make install)也会消耗一些时间
“make && make inistall”操作中,“&&”符号表示只有当前一条命令执行成功以后,才会执行后边的命令
验证已编译安装完成的程序:查看安装后的软件目录、了解软件程序的使用方法
七、管理用户和文件权限
用户和组帐号概述
Linux基于用户身份对资源访问进行控制
用户帐号:
超级用户root
普通用户
程序用户
组帐号:
基本组(私有组)
附加组(公共组)
UID和GID:
UID(User Identity,用户标识号)
GID(Group Identify,组标识号)
超级用户,即root用户,类似于Windows系统中的Administrator用户,非执行管理任务时不建议使用root用户登录系统
普通用户帐号一般只在用户自己的宿主目录中有完全权限
程序用户:用于维持系统或某个程序的正常运行,一般不允许登录到系统。例如:bin、daemon、ftp、mail等
root用户的UID的固定值为0、root组帐号的GID号为固定值0
1~499的UID、GID默认保留给程序用户使用,普通用户/组使用的UID、GID号在500~60000之间
用户帐号文件 —— passwd
用于保存用户的帐号基本信息
文件位置:/etc/passwd
每一行对应一个用户的帐号记录
字段1:用户帐号的名称
字段2:用户密码字串或者密码占位符“x”
字段3:用户帐号的UID号
字段4:所属基本组帐号的GID号
字段5:用户全名
字段6:宿主目录
字段7:登录Shell信息
基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改
在早期的UNIX操作系统中,用户帐号的密码信息是保存在passwd文件中的,不法用户可以很容易的获取密码字串并进行暴力破解,因此存在一定的安全隐患
后来经改进后,将密码转存入专门的shadow文件中(见下页)并严格控制全新,而passwd文件中仅保留密码占位符“x”
用户帐号文件 —— shadow
用于保存密码字串、密码有效期等信息
文件位置:/etc/shadow
每一行对应一个用户的密码记录
字段1:用户帐号的名称
字段2:加密的密码字串信息
字段3:上次修改密码的时间
字段4:密码的最短有效天数,默认值为0
字段5:密码的最长有效天数,默认值为99999
字段6:提前多少天警告用户口令将过期,默认值为7
字段7:在密码过期之后多少天禁用此用户
字段8:帐号失效时间,默认值为空
字段9:保留字段(未使用)
默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容
上次修改密码的时间,表示从1970年01月01日(可理解为Unix系统的诞生日)算起到最近一次修改密码时间隔的天数
添加用户帐号
useradd命令
格式:useradd [选项]... 用户名
常用命令选项
-u:指定 UID 标记号
-d:指定宿主目录,缺省为 /home/用户名
-e:指定帐号失效时间
-g:指定用户的基本组名(或UID号)
-G:指定用户的附加组名(或GID号)
-M:不为用户建立并初始化宿主目录
-s:指定用户的登录Shell
最简单的用法是,不添加任何选项,只使用用户名作为useradd命令的参数,按系统默认配置建立指定的用户帐号
演示添加用户的操作,重点演示 -d、-e、-g、-G、-s 等几个选项的用法,例如:
——创建名为st02的用户帐号,并将其UID号指定为504
[root@localhost ~]# useradd -u 504 st02
[root@localhost ~]# tail -1 /etc/passwd
st02❌504:504::/home/st02:/bin/bash
——创建一个考试测试用的帐号exam01,指定属于users组,该帐号于2009-07-30失效
[root@localhost ~]# useradd -g users -e 2009-07-30 exam01
展示/etc/passwd、/etc/shadow文件中的变化
说明:使用adduser命令也可以添加用户帐号,在RHEL5系统中adduser命令实际上是useradd命令的符号链接
用户帐号的初始配置文件
文件来源
新建用户帐号时,从 /etc/skel 目录中复制而来
主要的用户初始配置文件
~/.bash_profile:用户每次登录时执行
~/.bashrc:每次进入新的Bash环境时执行
~/.bash_logout:用户每次退出登录时执行
设置/更改用户口令
passwd命令
格式:passwd [选项]... 用户名
常用命令选项
-d:清空用户的密码,使之无需密码即可登录
-l:锁定用户帐号
-S:查看用户帐号的状态(是否被锁定)
-u:解锁用户帐号
“未设置密码”的用户帐号尚未完成初始化,处于不可登录状态,这与“空密码”的情况(已经为用户设置密码,但密码字串为空)是不同的
—— “未设置密码”的用户将被禁止登录系统,而拥有“空密码”的用户是可以在本地终端登录的
普通用户也可以使用passwd命令,但只能更改自己的密码,密码要求有一定的复杂性(如不要直接使用英文单词,长度保持在6位以上),否则系统可能拒绝进行设置
被锁定的帐号也将无法登录系统
修改用户帐号的属性
usermod命令
格式:usermod [选项]... 用户名
常用命令选项
-l:更改用户帐号的登录名称
-L:锁定用户账户
-U:解锁用户账户
以下选项与useradd命令中的含义相同
-u、-d、-e、-g、-G、-s
删除用户帐号
userdel命令
格式:userdel [-r] 用户名
添加 -r 选项时,表示连用户的宿主目录一并删除
当系统中的某个用户帐号已经不再需要使用时(如该员工已经从公司离职等情况),可以使用userdel命令将该用户帐号删除
使用userdel命令需要指定帐号名称作为参数,添加“-r”选项时可以将该用户的宿主目录一并删除。
组帐号文件 —— group、gshadow
与用户帐号文件相类似
/etc/group:保存组帐号基本信息
/etc/gshadow:保存组帐号的密码信息
与组帐号相关的配置文件也有2个,分别是/etc/group、/etc/gshadow
/etc/gshadow文件的应用极少,仅作简单介绍即可
group文件内的最后一个字段中列出属于该组的用户成员(一般不包括基本组对应的用户帐号),多个成员之间以逗号“,”分隔
添加组帐号
groupadd命令
格式:groupadd [-g GID] 组帐号名
使用groupadd命令可以添加一个组帐号,需要指定GID号时,可以使用“-g”选项
添加、删除组成员
gpasswd命令
用途:设置组帐号密码(极少用)、添加/删除组成员
格式:gpasswd [选项]... 组帐号名
常用命令选项
-a:向组内添加一个用户
-d:从组内删除一个用户成员
-M:定义组成员列表,以逗号分隔
删除组帐号
groupdel命令
格式:groupdel 组帐号名
用户和组帐号查询
id命令
用途:查询用户身份标识
格式:id [用户名]
groups命令
用途:查询用户所属的组
格式:groups [用户名]
finger命令
用途:查询用户帐号的详细信息
格式:finger [-l] [用户名]
users、w 、who命令
用途:查询已登录到主机的用户信息
主要有哪两个用户帐号文件,各有什么作用?
如何锁定、解锁用户帐号?
在添加用户帐号时,如何设置其失效时间?
用户初始配置文件包括哪些,各有什么作用?
如何设置一个组的多个用户成员?
【1】/etc/passwd、/etc/shadow
【2】锁定帐号:usermod -L 用户名、passwd -l 用户名 ; 解锁帐号: usermod -U 用户名、passwd -u 用户名
【3】useradd -e YYYY-mm-dd 用户名 或者 usermod -e YYYY-mm-dd 用户名
【4】/.bash_profile、/.bashrc、~/.bash_logout
【5】gpasswd -M 用户1,用户2,用户3 组名
文件/目录的权限和归属
访问权限
读取:允许查看文件内容、显示目录列表
写入:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
可执行:允许运行程序、切换目录
归属(所有权)
属主:拥有该文件或目录的用户帐号
属组:拥有该文件或目录的组帐号
设置文件/目录的权限
chmod命令
格式1:chmod [ugoa] [+-=] [rwx] 文件或目录...
格式2:chmod nnn 文件或目录...
常用命令选项
-R:递归修改指定目录下所有文件、子目录的权限
chown命令
格式:chown 属主 文件或目录
chown :属组 文件或目录
chown 属主:属组 文件或目录
常用命令选项
-R:递归修改指定目录下所有文件、子目录的归属
需要设置文件或者目录的归属时,可以通过chown、chgrp命令进行
chown命令既可以修改属主,也可以修改属组,而chgrp命令只用于修改属组信息(因此并不常用)
使用附加权限
SET位权限
主要用途:
为可执行(有 x 权限的)文件设置,权限字符为“s”
其他用户执行该文件时,将拥有属主或属组用户的权限
SET位权限类型:
SUID:表示对属主用户增加SET位权限
SGID:表示对属组内的用户增加SET位权限
普通用户并没有权限修改“/etc/shadow”文件,那为什么可以修改自己的登录密码呢?
—— 这是因为:passwd命令程序被设置了SUID权限,普通用户在执行该命令时临时获得相当于属主用户(root)的权限
注意:不要轻易为可执行文件设置SET位权限,特别是对于那些属主、属组是root的执行程序,使用SET位权限时更应该慎重。例如,若为vim编辑器程序设置SUID权限,将导致普通用户也可以使用vim编辑器修改系统中的任何配置文件
粘滞位权限(Sticky)
主要用途:
为公共目录(例如,权限为777的)设置,权限字符为“t”
用户不能删除该目录中其他用户的文件
应用示例:/tmp、/var/tmp
设置SET位、粘滞位权限
使用权限字符
chmod ug±s 可执行文件...
chmod o±t 目录名...
使用权限数字:
chmod mnnn 可执行文件...
m为4时,对应SUID,2对应SGID,1对应粘滞位,可叠加
进程管理命令
1、kill(结束进程)
这个命令用于发送信号来结束进程。如果一个进程没有响应杀死命令,这也许就需要强制杀死,使用-9参数来执行。
注意,使用强制杀死的时候一定要小心,因为进程没有时机清理现场,也许写入文件没有完成。
如果我们不知道进程PID或者打算用名字杀死进程时候,killall就能派上用场。
格式:
kill
kill -9
killall -9 - 强制杀死所有拥有同样名字的进程
如果你使用kill,你需要知道进程ID号。pkill是类似的命令,但使用模式匹配,如进程名,进程拥有者等。
pkill <进程名>
2、ps(查看静态进程运行情况)
ps 是 Linux 中最基础的浏览系统中的进程的命令。
能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等
格式:
ps -a - 列出所有运行中/激活进程
ps -e 列出程序时,显示每个程序所使用的环境变量。
ps -f 用ASCII字符显示树状结构,表达程序间的相互关系
ps -ef | grep - 列出需要进程
ps -aux - 显示进程信息,包括无终端的(x)和针对用户(u)的进程:如USER, PID, %CPU, %MEM等
3、top(查看动态进程运行情况)
top 是一个更加有用的命令,可以监视系统中不同的进程所使用的资源。它提供实时的系统状态信息。
显示进程的数据包括 PID、进程属主、优先级、%CPU、%memory等。可以使用这些显示指示出资源使用量。
查看资源使用情况命令
1、uptime 查看cpu负载情况
2、free -m 查看内存使用情况
3、df -hl 查看磁盘使用情况
查看网络状态命令
netstat -ntlp | grep 端口 (查看某个端口是否占用)
netstat -anp (查看网络连接情况)
-a (all)显示所有选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-l 或–listening,显示监控中的服务器的Socket
-t 或–tcp 显示TCP 传输协议的连线状况
查找Linux系统的IP命令
/sbin/ifconfig
重启
shutdown -r now
shutdown -r +15 “警告:系统将于15分钟后重启”
reboot
区别:
Reboot重启不会给其他用户提示重启信息;
Shutdown 会给出重启提示信息,在多用户登录系统操作时,相对安全。
关机
shutdown -h now
halt
halt -p
su 用户名
切换用户
lsb_release -a 查看Linux系统版本
|:管道:将前面命令的屏幕输出结果作为后面命令的处理对象(输入)
:重定向输出,将前面命令的屏幕输出结果保存到">"后面的指定文件中
echo :屏幕输出内容
col:col命令用于过滤文本中的一些特殊控制字符
service sshd status
service sshd start
service sshd stop
service network restart
查看是否已安装SSH
rmp -qa|prep "ssh"
查看SSH服务是否启动
Service sshd status
Windows查看特定端口;netstat –aon|findstr 8080
Windows查看所有端口;netstat –aon
Windows查看PID对应的进程名;tasklist |findstr 8080
隐藏文件:MV 原文件 .原文件
防火墙永久
开启: chkconfig iptables on
关闭: chkconfig iptables off
即刻生效:
开启: service iptables start
关闭: service iptables stop