Linux

目录文件结构与管理
常用指令与vim
Linux软件安装
账号与权限管理
文件系统建立与磁盘配额
LVM和RAID
启动流程与服务管理
进程管理与计划任务
服务器引导加固与修复

前言

提示:是关于红帽的Red Hat Enterprise linux里的一些操作,即使用方法

目录文件结构与管理

掌握常用目录的作用:
/bin:表示普通用户和系统用户 管理员都可以调用的指令
/sbin:系统用户和管理员可以调用的指令
/boot:系统启动引导目录 内核文件(vmlinuz)和引导加载器(bootleader)
/home:普通用户账户家目录的存放目录
/root:超级用户的家目录
/dev:存储设备文件及特殊文件
/etc:系统启动,用户权限,应用程序等配置文件的主目录
/lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64:X86_64系统上的辅助共享库文件存放位置
/media:RHEL6及之前的操作系统,外接设备默认存放路径 /media/kingston
/run:RHEL7外接设备默认存放路径 /run/media/username/kingston
/mnt:临时文件系统挂载点 建议将磁盘设备挂载到当前目录的子目录中使用
/proc:输出内核与进程信息相关的虚拟文件系统(基于内存)
/sys: 存储有关系统上的硬件信息
/tmp:临时文件存放目录,主要针对普通用户
/var/tmp:系统程序文件存放目录,主要针对系统用户
/usr:用户自定义配置目录
/var:业务数据存放目录
命令 选项 参数
ls -l /boot
查看帮助时
1.有‘+’表示需要加上才格式正确 空格属于特殊符号 需要单引标注
2.有大写字母 表示必选项 否则无法执行

[] 可选项
… 列表 date +‘%Y-%m-%d %H:%M:%S’
LOGIN 必选项
a|b|c 三选一

根据文件颜色识别文件属性
	蓝色 目录
	黑色 普通文件
	绿色 可执行文件
	红色 压缩文件
	紫色 图片或其他类型的文件
	浅蓝色 符号链接文件
	黑底黄字 设备文件
	灰色 其他文件

文件名规则
1.文件名最长255个字节
2.包括路径在内文件名称最长4096个字节
3.除了/、,其他所有字符都生效,但使用特殊字符的文件名和目录不推荐使用,有些字符需要用引号来引用它们。

释放光标 ctrl+alt
常用快捷键
Tab键:自动补齐
Ctrl+U:清空至行首
Ctrl+K:清空至行尾
Ctrl+Y:粘贴Ctrl+U或者Ctrl+K剪切的内容
Ctrl+L:清屏
Ctrl+C:取消本次命令编辑
Ctrl+A:光标移动到最前
Ctrl+E:光标移动到最后
反斜杠“\”:强制换行
Ctrl+shift+t:在已经生成的终端中打开新的终端
Ctrl+d:在终端没有字符的状态下,结束当前终端(exit)
Ctrl+shift+“+”:增大字符显示
Ctrl+“-”:缩小字符显示
Ctrl+Page UP:多终端时,向前翻页
Ctrl+Page DOWN:多终端时,向后翻页
Alt+number:根据终端位置,快速切换到数字对应的终端
Ctrl+shift+c:复制
Ctrl+shift+v:粘贴
Ctrl+S:暂停屏幕输出
Ctrl+Q:恢复屏幕输出
ls 列出目录内容
-l 以长格式形式查看文件或目录的详细信息(文件类型,权限,链接数,属主属组,文件大小,时间信息,文件名及路径)
-h 以人性化方式计算文件或目录的大小(1024)
-si 以1000为单位
-d 查看目录本身的属性,不加时查看的是目录中的子目录及子文件
-t 按照时间顺序显示
-a 查看所有文件和目录(包含隐藏和非隐藏)
-R 递归式的查询目录中的子目录及子文件
-S 从大到小排序
-block-size=M (K/M/G/T/P/E/Z/Y)以什么作为单位大小
-d */ 只列出目录
-g/-G 不显示所有者/所属组信息
-color=never 不显示颜色
-r 显示默认排序的反转顺序
-X(-sort=extension)扩展名排序,区分类型
-t 通过修改时间列出(新文件在前)
pwd 显示当前工作目录
cd 切换工作目录
cd … 回到上一级目录(当前路径的父目录)
cd - 回到上一次工作过的目录
cd directory 切换到指定目录
相对路径:只能在某个特定的环境或目录下才能执行的操作(不以“/”开始的路径)
绝对路径:在任意位置都可调用并执行的操作(以“/”开始的路径)
touch 创建文件,更新文件时间标记
-a 仅修改“读取时间” atime
-m 仅修改“修改时间” mtime
-d 同时修改atime与mtime
mkdir 创建目录
-p 递归式创建目录及子目录
rm 删除文件
-r 递归式删除文件或目录
-f 强制删除
shred /boot/grub2/grub.cfg
rmdir 删除空目录
mv 移动(mv 源文件路径 目标路径),为文件或目录重命名
-b 若存在同名文件,覆盖前备份原来的文件
-f 强制覆盖同名文件
cp 拷贝
cp 源文件 目标路径
cp时,如果目标路径没有指定,默认保存为源文件名称
如果在目标路径指定名称,则可以为复制文件重命名
同时复制多个文件时,重命名无效
复制目录可以使用“-r”选项,将目录复制到指定路径下
-b 若存在同名文件,覆盖前备份原来的文件
-f 强制覆盖同名文件
-p 保留原始文件的属性
-d 若对象为链接文件,则保留该文件的属性
-r 递归持续复制,用于目录
-i 若目标存在则询问是否覆盖
-a 相当于-pdr参数
-R 按递归方式保留原目录结构复制文件
cp -b file1 file2 (yes)备份文件是在原名称之上加‘~’构成
cat 查看文件内容
-n 查看时显示行号
cat > file 创建文本文件(按Ctrl+d,在当前目录保存文件)
cat file1 file2 > newfile(合并文件)
ln 建立链接(默认建立为硬链接,-s选项表示创建软连接)
硬链接:源文件的副本,对于系统来说,文件始终是同一个文件
每创建一次,文件的链接数都会加一,文件的节点数始终不变
当用户对任意硬链接文件操作时,所有文件同时发生变化
软链接(符号连接):源文件的快捷方式,此时创建的是新文件
软链接生成后,源文件链接数不会变化,文件将被分配一个新的节点数
当用户对软链接文件操作时,被链接的文件及硬链接文件会同时发生变化
硬链接有两点限制:
1.硬链接创建不可以跨文件系统
2.硬链接不可以为目录创建
“.” 当前目录
“…” 上一级目录
如何通过节点号获取所有相同节点号的文件信息
首先通过ls -li filename 获取”inode number“
然后创建硬连接到其他目录 ln filename /tmp/filetest
find / -inum “inode number”

常用指令与vim

常用指令与vim(vimsual interface improved)使用
指令的分类:
内部命令和外部指令
内部指令:Shell自带的命令,比如cd、history,内部指令是不可删除的(系统默认解释器为bash)
外部命令:一些软件安装后添加的命令,比如ls、cp,外部指令可根据安装包或指令的路径删除
如何使用帮助:
常见的指令帮助使用有man和help
“man+指令”可以查看指令的帮助手册
help的使用根据内部和外部,格式有差异
内部指令:“help+内部指令”
外部指令:“外部指令 -h或者–help”
关键字列表:man -k keyword
显示说明:whatis command
type
shell:终端内的指令‘翻译器’
bash:shell解释器的版本,除此之外,还有csh,tcsh,zsh等
终端:在图形化Linux配置中,给用户提供指令输入的编辑器
more 分页查看文件内容(可以查看二进制文件)
空格(或Enter)向下翻页,b向上翻页,按q结束浏览
-p 显示下一屏之前先清屏
-s 文件中连续的空白行压缩成一个空白行显示
less 逐行查看文件内容 (可以查看ASCII文件)
空格翻页查看,‘/+关键词’可以搜索,‘n’向下查找关键词‘N’向上查找关键词,按q结束浏览
head 查看文件头10行(默认)
head -n number file(head -number file)
tail 查看文件后10行(默认)
tail -n number file(tail -number file)
+n 从第几行以后开始显示
tac 与cat相同,但反向显示文件
grep 过滤文件内容
-v 取反
-n 显示关键词在文件中的行数
-i 搜索时忽略被搜索词的大小写
-AX X为数字,表示搜索时同时显示关键词后X行
-BX X为数字,表示搜索时同时显示关键词前X行
-c 只显示匹配行的数量
du 统计目录内容大小
-s 显示汇总信息
-h 以人性化方式显示大小
wc 统计文件内容
默认显示信息,依次为行数,关键词数,文件大小
-l 统计行数
-c 统计字节数
-w 统计字数
alias 命令别名建立,格式为:新指令=‘原指令 + 选项’
建立时有三种方式
1.在当前终端新建别名,只有当前终端生效,其他终端不生效,同时退出终端后失效
2.在当前用户的家目录中,找到隐藏文件bashrc(~/.bashrc),在文件中添加alias,再次登陆生效,针对的是当前用户
3.在/etc/bashrc文件中,添加alias,全局生效,所有登陆用户都可调用
alias simple=‘ls -lh /boot’
unalias 移除别名(-a)
find 按照指定条件实时查找
根据文件名查找
find /etc -name passwd
根据文件类型查找(普通文件f、目录d、块设备b、字符设备c等)
find /etc -type f
根据文件大小查找
find /etc -size -1k
因为find对管道支持比较弱,所以可以借助exec扩展选项(exec后面添加进一步处理的结果)
find /etc -size +1M -exec ls -lh {} ;
注:‘-’表示小于,‘+’表示大于,-exec通常需要和‘空格;’一起使用,格式不完整,则指令不可正确执行
-perm 匹配权限
-user 匹配所有者
-group 匹配所有组
-nouser 匹配无所有者文件
-nogroup 匹配无所有组文件
-type b/d/c/p/l/f 匹配文件类型 块设备、目录、字符设备、管道、链接文件、文本文件
转义符

whereis 尝试在标准Linux位置以及 P A T H 和 PATH和 PATHMANPATH指定的位置找到所需的程序及文件
which 搜索变量$PATH中列出的所有路径并返回命令的完整路径

gzip 与 bzip2 压缩文件
压缩时,默认压缩比为6,压缩区间为1-9,9为最高压缩比
解压缩时,对应指令为gunzip,bunzip2
file 查看文件类型
dd 按照指定大小和个数的数据块复制文件或转换文件(备份、复制,逐块复制文件,用于创建磁盘或分区映像)
dd if=/dev/zero of=testfile bs=1M count=100生成100M的文件
dd if=/dev/sda of=/tmp/mbr.hex bs=512 count=1
除了制作文件,还可以把光驱设备中的光盘制作成iso格式的镜像文件,Windows中需要借助第三方才可实现
dd if=/dev/cdrom of=RHEL-server-7.0-x86_64-dvd.iso

tar		目录打包备份
	-c  创建打包压缩的文件
	-f  将指定的文件或目录打包为文件
	-v  显示压缩或解压缩的进度
	-j  bzip2格式的文件压缩
	-z  gzip格式的文件压缩
	-J  xz格式的文件压缩
	-C  解压缩时指定解压路径,默认为当前目录
	-x  解压缩文件
	-t  查看压缩包内有哪些文件
	-p  保留原始的权限与属性
	-P  使用绝对路径来压缩

history  查看shell命令的历史记录
	-r  读出命令历史列表文件(~/.bash_history)的内容,并将它们当作当前的命令历史列表加到内存中命令历史记录的后面
	-w  将当前命令历史记录写入文件(~/.bash_history),并覆盖文件原来的内容
	-a  将当前的命令历史追加到文件(~/.bash_history)尾部
	-n [文件名] 读取文件内容,并加入到当前历史命令列表中,如果未制定文件名,history将用变量histfile的值来代替
	-c  清空命令历史记录,清理内存中的历史记录,在.bash_history中的记录不会被清除
	-d n 用于删除使用history查询的内存中的命令历史中指定的第n个命令,也就是说删除的是内存中的命令历史,与bash_history 文件无关

VIM编辑器使用
	Vim编辑器的三种工作模式:
	命令模式(默认模式):复制,粘贴,剪切,切换到其他模式
	输入模式(编辑模式):a\i\o,针对每个字符进行编辑,删除
	末行模式(扩展模式):保存,退出,保存并退出,字符替换等
	光标方向移动

命令模式:
	向下翻页:Page Down或Ctrl+F
	向上翻页:Page Up或Ctrl+B
	行内快速跳转
	跳转至行首:Home键或者“^”、数字“0”
	跳转到行尾:End键或“$”键
	行间快速跳转
	跳转到文件首行:1G或者gg
	跳转到文件末行:G
		#G 其中#代表数字,#G表示跳转到文件中的第#行
	直接输入数字+回车
		表示从当前行开始计算,跳到文件位置的累加行
	操作类型

	剪切(删除)
	删除当前光标处单个字符:x或者Del
	剪切当前行:dd
	剪切从光标处开始的#行内容:#dd #表数字
	删除当前光标前到行首所有内容:d^
	删除当前光标到行尾所有内容:d$
	
	复制
	复制当前行:yy
	复制从光标开始处的#行内容:#yy
	
	粘贴
	粘贴到当前行下:p
	粘贴到当前行上:P
	
	撤销
	取消最近一次操作:u
	反撤销:ctrl+r
	
	查找
	从上而下在文件中查找字符串“word”:/word
	从下而上在文件中查找字符串“word”:?word
	定位下一个匹配的被查找字符串:n
	定位上一个匹配的被查找字符串:N

	保存
	保存并退出当前编辑:ZZ
	shift+‘;’   :set number

输入模式:
	a:在当前光标所在位置的后面输入字符
	i:在当前光标所在位置的前面输入字符
	o:在当前光标所在位置的下面重新开启一行输入字符
	A:跳转到当前光标所在行行尾输入字符
	I:跳转到当前光标所在行行首输入字符
	O:在当前光标所在位置的上面重新开启一行输入字符
	s:删除光标后的一个字符,然后进入输入模式
	S:删除光标所在的行,然后进入输入模式

末行模式
	显示行号
	:set nu
	取消显示行号
	:set nonu
	  
	保存
	保存修改内容:‘:w’
	另存为:‘	:w /路径/文件’
	未修改退出:‘:q’
	放弃修改强制退出:‘:q!’
	保存并退出:‘:wq’

	打开新文件编辑
	:e /路径/文件
	读入文件内容到当前编辑
	:r /路径/文件 
	将当前行中查找到的第一个字符“old” 替换为“new”
	:s/old/new 
	将当前行中查找到的所有字符串“old” 替换为“new”
	:s/old/new/g
	在行号“#,#”范围内替换所有的字符串“old”为“new”
	:#,#s/old/new/g
	在整个文件范围内替换所有的字符串“old”为“new”
	:%s/old/new/g 

vim file 文件在则打开文件,不在则创建一个文件,光标在缓冲区1行1列
vim + file 文件在则打开文件,不在则创建一个文件,光标在文件最后1行1列
vim +# file 文件在则打开文件,不在则创建一个文件,光标在文件#行1列
vim +/string file 文件在则打开文件,不在则创建一个文件,光标在文件第一次出现string的行首位置
vim -r filename 在上次vim编辑发生系统崩溃时,恢复filename文件
vim !$ !$表示重复使用上一条指令的最后一个参数

替换文本文件中的字符
tr [原始字符] [目标字符]
cat testfile | tr a-z A-Z
cat testfile | tr [:lower:] [:upper:]

扩展:命令执行时的具体顺序
1.第一顺位执行用绝对路径或相对路径执行的命令
2.第二顺位执行别名
3.第三顺位执行BASH内部命令
4.第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一条指令
注意:命令别名的优先级高于命令本身,比如
alias vi=‘vim’,那么原始vi就不能使用,除非确定原命令不用,否则别名不能和系统命名重名

Linux软件安装

常见的安装方式有三种:源码包安装,rpm指令安装,yum安装
源码包安装:
下载源代码安装包文件
步骤1:tar包解压缩
	用途:解压并释放源代码包到指定的目录/usr/src/
步骤2:./configure 配置
	用途:设置安装目录、安装模块等选项(/usr/src/httpd-2.4.6/)
步骤3:make 编译
	用途:生成可执行的二进制文件Makefile
步骤4:make install 安装
	用途:复制二进制文件到系统,配置应用环境并使用应用软件
	make uninstall/make clean
进入安装目录后,找到bin目录(/usr/local/httpd/bin)
执行./httpd,开启httpd程序
监听指令为netstat
netstat是网络信息监听指令
	-l listening,获取正在监听的状态
	-n 显示端口信息
	-t TCP
	-u UDP
	-p program/PID
netstat -lntup | grep :80
打开firefox或本地用curl指令访问127.0.0.1,即可看到站点信息
需要修改主机页面,可以编辑/usr/local/httpd/htdocs/index.html
刷新firefox即可

Funny:cmatrix(黑客屏保)

rpm指令管理
针对已安装软件
rpm -qa 查询所有已安装软件的rpm包信息,列出包的版本
rpm -qi 软件名 列出已安装软件的详细信息
rpm -qc 软件名 查询包的配置文件config file
rpm -ql 软件名 ql表示列出这个包在主机生成了哪些文件和目录
根据指令搜索包的名称
which vim(which搜索指令在系统中的路径)
rpm -qf 文件/目录/指令 查看该文件是由哪个rpm包所提供
针对未安装软件
rpm -qpl 包.rpm 选项p表示package,后面需要写包的完整路径信息
qpl表示列出这个包在安装之后生成哪些文件和目录
rpm -qpi 包.rpm 查询未安装包的详细信息
安装与卸载
rpm -ivh 包.rpm
i表示安装,v表示显示安装过程及详细信息,h表示以‘#’作为进度,显示安装进度
rpm -e 包的名称
移除指定的rpm包
– nodeps 忽略依赖项
– force 强制覆盖现有文件(例:conf文件误删)
更新: rpm -U .rpm
‒ 即使没有安装以前的版本也能正常工作
Freshen: rpm - F .rpm
‒ 仅在已安装旧版本时才起作用
检测一下安全性
rpm -qp --scripts 包.rpm

yum软件管理(DNF)
(which yum;ll /usr/bin/yum
首先,仓库源需要满足两点要求
1.仓库文件必须存放在/etc/yum.repos.d/目录中
2.仓库源文件的后缀必须以‘.repo’结尾

repo文件格式:
[base]
中括号的名称为仓库源名称,通常为字母和数字
name=my new repo cdrom
name表示对yum源的描述,方便管理当前yum
baseurl=file:///mnt/cdrom
baseurl=http://10.0.0.1/packages
baseurl表示声明yum可以管理并使用的rpm包路径,可以基于本地,也可以基于网络
enabled=1
enabled表示当前仓库是否开启,1为开启,0为关闭,此项不写默认为开启
gpgcheck=0
gpgcheck表示安装rpm包时,是否基于公私钥对匹配包的安全信息,1表示开启,0表示关闭,此项不写默认为验证

yum clean all 清空缓存信息
yum list [包的名称] 列出所有[指定]包的信息
yum info 包的名称 显示包的详细信息
yum install 包的名称 安装指定的rpm包
–downloadonly linux和linux之间的包传输(早期使用wget http://),下载的文件位于/var/cache/yum/ b a s e s e a r c h / basesearch/ basesearch/releaserver(/etc/yum.conf)
yum remove 包的名称 移除指定的rpm包
yum search 关键词 根据关键词,在已发现的repo源中搜索包含关键词的rpm包
yum provides 命令 根据命令,在已发现的repo源中搜索安装指令的rpm包
yum history list/info/undo/redo number
history可以列出,查看,重装,反安装对应的包,但是是以yum指令的操作顺序为依据的,所以需要加指定的数字执行

yum module list
yum module install postgresql
yum module remove postgresql
yum module install postgresql:9.6
dns module reset postgresql

账号与权限管理

用户账户分类
超级用户:UID=0(GID的分类和GID规律与UID一致)
程序用户:RHEL5/6,UID=1-499;RHEL7,UID=1-999(1-200系统)
普通用户:RHEL5/6,UID=500-65535;RHEL7,UID=1000-60000

passwd文件
simplexue:x:500:500:www.simplexue.com:/home/simplexue:/bin/bash
字段1:用户名
字段2:密码占位符
字段3:uid
字段4:gid
字段5:用户描述信息
字段6:家目录
字段7:登录shell(用户登陆shell为/bin/bash表示当前用户可以登陆,/sbin/nologin表示当前用户不被授权登陆)

shadow文件
字段1:用户名
字段2:通过sha-512加密过得密码
字段3:最后一次修改密码距离1970年1月1日的天数间隔,密码开头为叹号时,表示密码锁定
字段4:密码最短有效期
字段5:密码最长有效期
字段6:密码过期前7天警告
字段7:账户过期后,被锁定的天数
字段8:账号失效时间距离1970年1月1日的天数间隔
字段9:未分配功能
date +%s
echo ( ( (( (((date +%s)/86400))

group文件
字段1:组名称
字段2:组密码占位符
字段3:GID
字段4:组成员

用户与组管理
whoami 显示当前shell用户
id 默认显示当前用户信息,加user后显示对应用户信息
groups 默认显示当前组信息,加user后显示对应用户组信息
finger 显示当前用户的详细信息
useradd username
1.新建用户时,系统会将/etc/skel中的目录及文件拷贝到新建用户的家目录中
2.在/var/spool/mail中,新建用户名的邮箱
3.在passwd和shadow文件中,增加用户信息
userdel [-r] username
不加-r选项,只删除passwd和shadow文件中的用户信息
加-r选项,删除passwd和shadow文件中的用户信息,同时删除用户的家目录和邮箱

usermod
对已存在的账户做属性修改
-s 修改用户的登陆shell
-L 账户锁定
-U 解锁账户
-G 附加组
-g属主
passwd密码修改
root:
1.不需要知道当前的密码
2.设置新密码时,不需要遵循密码要求(1.不能少于8个字符,2.满足复杂度要求)
普通用户:
1.需要知道当前用户密码
2.设置新密码时,必须遵循密码要求

groupadd
增加新组,组创建时可以指定组的GID等属性
groupmod
修改已创建组的属性,比如名称,GID等
groupdel
删除组,但是只能针对附加组,主组无法删除
实验一:
1.建立一个名为simplexue 的组要求id 为1234
指令:groupadd -g 1234 simplexue
2.建立一个自己名字的用户要求基本组为simplexue,uid 为10000
指令: useradd -u 10000 -g 1234 simlpexue zxh
3.建立一个名为simpleware的组,并指定为自己名字用户的附加组
指令:useradd simplexue
usermod -G simplexue zxh
4.建立一个不可登录的用户名为test ,该用户没有加家目录
指令:useradd -s /sbin/nologin -M test
5.将用户 test 用户锁定,为自己名字的用户设定密码centos
指令:usermod -L test
echo centos | passwd --stdin zxh
cut 主要用于按“列”提取文本字符
f 设置需要查看的列数
d 设置间隔符号

用户创建时,默认的属性(比如UID,GID,是否创建家目录,创建邮箱等)都是通过/etc/login.defs文件控制的,修改此文件的属性,会影响以后创建的所有用户
如果需要对现存账户的属性做修改,可以借助chage指令,修改用户的密码策略,也可通过编辑/etc/shadow
文件修改(不推荐)
比如:chage -l username,查看用户的密码策略
chage -M 90 username,将用户的密码有效期修改为90天

文件和目录的权限为rwx
针对文件:
r表示可以打开和读取文件
w表示可以对文件内容写入修改(但不能删除)
x表示文件可执行
针对目录:
r表示可以列出目录内容
w表示可以在目录中增删改查(即删除文件)
x表示可以进入目录,同时可以查看目录中文件的详细信息

rwx对应的数字为421,所以文件或目录的最大权限为777
修改文件权限的指令为chmod
u表示user,属主权限位
g表示group,属组权限位
o表示other,其他用户权限位
a表示所有,等于ugo
所以设置权限时,可以使用chmod ugo(a) +/- rwx
比如:chmod u-r file/chmod a+x file等
也可使用数字代表权限,对应的三个数字即为属主、属组、其他用户
比如:chmod 640 file

文件属性分为11个字段
第一字段为文件属性
第二至四字段为属主权限
第五至七字段为属组权限
第八至十字段为其他用户权限
第十一个字段为扩展属性,‘.’表示没有扩展属性,‘+’表示有设置ACL扩展属性
文件属性中,‘-’表示文件,‘d’表示目录,‘l’表示符号链接,‘b’表示块设备,‘c’表示特殊字符设备

修改文件的属主属组,可以使用chown和chgrp指令
chown即可单独修改属主,也可单独修改属组,也能同时修改属主属组
chgrp只能修改属组
chown 属主:属组 file/directory
chown 属主.属组 file/directory
chgrp 属组 file/directory

扩展权限控制
因为默认的属主属组只能控制一个用户和一个组,无法针对每个用户做权限控制
所以借助acl属性,完善权限控制
setfacl 设置某个文件或者目录的ACL属性
-m 设置acl,针对用户,关键词为‘u’,针对组,关键词为‘g’,设置时,权限不能为空
-x 删除设置的acl属性
-d 只针对目录设置默认的acl参数
-b 删除所有的acl属性
getfacl 获取某个文件或者目录的ACL属性
-a 显示文件acl属性
-d 显示默认的acl属性
-R 查询递归的acl属性
setfacl -m u:tom:rw- /file
setfacl -m u:jerry:- /file
setfacl -m g:IT:rw- /file
getfacl /file
移除权限(-x移除acl,移除权限时,无需指定权限,针对用户或组即可)
setfacl -x u:jerry /file
实验二:
1.在/tmp目录下建立一个名为simplexue的目录,并设定该目录权限为所有人可读可写可进入
指令:mkdir /tmp/simplexue
chmod 777 /tmp/simplexue

2.要求设定simplexue目录的属主为自己,属组为simplexue 。并使用自己名字的用户在其中建立一个名为test.txt的文件。
指令:chown zxh :simplexue /tmp/simplexue
su - zxh
touch /tmp/simplexue/test.txt
3.设定test.txt文件的权限为只有自己可读可写其他人无任何权限
指令: chmod 600 /tmp/simplexue/test.txt
4.设定test.txt文件只有natasha用户可以读写,其他用户无权限。
指令:useradd natasha
setfacl -m u:natasha:rw /text.txt
getfacl text.txt 查看一下
5.在tmp 目录中,建立一个名为root的目录,要求在root中建立的所有子文件,natasha都拥有可读可写可执行的权限。
指令:mkdir /tmp /root
setfacl -m d:u:natasha:rwx /tmp/root

SUID:针对特殊指令,做提权,不建议随意更改默认指令属性,执行者对该程序需有x可执行权限
chmod u+s 指令后,表示用户在使用指令时,借助的是管理员的身份
chmod 4755
实验SUID:ls -l /bin/passwd:查看/bin/passwd的rwx 属主为root 属组为root,属主有个s
ls -l /bin/mount:查看/bin/mount的rwx 属主为root属组为toot,属主有个s
ls -l /bin/su:查看/bin/su的rwx 属主为root属组为toot,属主有个s
which vim
ls -l /usr/bin/vim查看/bin/vim的rwx 属主为root属组为toot,属主没有s
chmod u+s /usr/bin/vim:给 /usr/bin/vim添加属主里s
ls -l /usrbin/vim查看/bin/vim的rwx 属主为root属组为toot,属主为rxs
which passwd:查看passwd 的路径
su - tom:换个终端,进入tom 用户
1 vim tom1
2 cat tom1
3 ls -l tom1
4 vim tom2
5 ls -l tom1
6 ls -l tom2
7 vim /etc/fstab
8 ls -l /etc/fstab
9 vim /etc/fstab edit file :wq!
10 cat /etc/fstab
Chmod u-s /usr/bin/vim解除属主里的s
Ls -l /usr/bin/vim 再查看/usr/bin/vim里的属主s 是否解除

SGID:主要针对目录(文件亦可),对项目开发非常重要,同组成员可以互相编辑文件
chmod g+s 目录后,组成员创建的文件或目录,属主为自己,属组自动继承父目录
chmod 2770
粘滞位:只针对目录生效,面向other用户,彼此可以看到创建的文件,但是不可以修改删除
SGID实验: mkdir /tmp/sgid在/tmp下建立sgid目录
ls -ld/tmp/sgid/ 查看/tmp下的sgid
useradd a 建立用户a
useradd b 建立用户b
groupadd sgid 建立sgid 组
usermod -G sgid a 把建立的sgid组给a 用户附加组
usermod -G sgid b 把建立的sgid组给b 用户附加组
id a查看a 用户的信息,看uid ,gid,和附加组
id b 同上
chmod 770 /tmp/sgid/改变目录的 属主,属组可写可读,其他人没有权限
chgrp sgid /tmp/sgid更改属组
ls -ld /tmp/sgid/查看sgid 的属组
su -a 进入a用户的:相同 su -b 进入b用户:
cd /tmp/sgid/ cd /tmp/sgid/
echo aaaaaa > a1 echo aaaaaa > a1
ls -lh ls -lh
chmod g+s /tmp/sgid/ 执行可以g+s 可以让a,b用户进行互相的添加的删除文件
ls -ld /tmp/sgid/
ls -ld /tmp/
su - a
cd /tmp/sgid/
echo aaaaaa > a2
ls -lh
su - b
cd /tmp/sgid/
echo aaaaaa > a2
ls -lh

chmod o+t 目录后,所有的other用户在目录中都拥有对自己文件的完全控制权限
chmod 1777
o+t实验:mkdir /ot
ls -ld /ot/
chmod 777 /ot/
ls -ld /ot/
useradd c
useradd d
su - c
cd /ot/
echo cccc > c1
ls -l
su - d
cd /ot/
ls -l
rm -rf c1
ls -l
echo dddd > d1
su - c
rm -rf d1
pwd
chmod o+t /ot/
ls -ld /ot/
su - c
echo cccc > c2
ls -l
su - d
rm -rf c2
ls -l
rm -rf c2
umask 指定当前用户在建立文件或者目录的权限默认值
-S 以符号类型的方式显示出权限

777(rwxrwxrwx)
root
dir=755=777-022
file=644=777-022-111
users
dir=775=777-002
file=664=777-002-111
实验三:1.要求为vim命令的设定suid,通过普通用户修改一个属于root用户的文件,验证能否成功
2.要求在/下建立一个名为centos的目录要求,自己同组的用户在该目录创建的文件继承该目录的属组,并修改目录权限为770.
3.要求修改/centos目录权限,目录中的文件只有建立的人才能删除。
echo 用于在终端输出字符串或变量提取后的值
Stat 查看文件的具体储存信息和实践信息等 ls -l
su - Switch user /切换用户(default root),跟密码需要身份证,整个shell及其子进程都以特权身份运行
不要频繁切换(pstree)也不要关闭终端(.swap)
sudo -用户密码需要身份验证 ,所有应用以特权身份运行
sudo (which command > 绝对路径 visudo= vim /etc/sudoers)
user1 ALL=(ALL) /user/sbin/useradd,/user/bin/passwd
configuration file :/etc/sudoers
configuration tool:visudo
user Example :/用户示例
 simple ALL=(ALL)/sbin/shutdown
  simple ALL=(root)NOPASSWD:/sbin/shutdow
   simple ALL=(root) ALL,!/bin/passwd,!/bin/passwd [A-Za-z]*,!/bin/passwd root
Group Example

文件系统建立与磁盘配额

mbr 521 446 +64(164)+2 主分区 扩展分区 逻辑分区 RFC
ls -l file /du-sh file
lsblk 列出所有可用块设备的信息
smartctl 监测磁盘健康情况
-i 显示设备的身份信息 (SN厂家等信息)
-a 显示设备的全部SMART
-x 显示设备的详细信息
-H 查看硬盘的健康状态
创建磁盘分区的步骤:
1.添加并识别硬件设备
fdisk -l 可以看到新加的设备
ls -l /dev/sdb
2.创建分区并识别分区
fdisk /dev/sdb
partprobe /dev/sdb
(rhel5和rhel7识别新分区通过partprobe 识别,rhel6识别新分区通过partx识别)
刷新后,可以查看文件是否识别新分区cat /proc/partitions
fdisk /dev/sdb时,常用的选项
n 创建新的磁盘分区
d 删除已存在的磁盘分区.
l 查看支持磁盘的分区类型
t 转换分区类型
p 查看磁盘的分区信息
w 保存修改并退出
q 不保存直接退出
3.制作文件系统
mkfs.ext4 /dev/sdb1
4.制作磁盘标签(option)
e2label /dev/sdb1 newpart
5.创建挂在点
mkdir /mnt/ext
6.将分区信息写入文件系统分区表
vim /etc/fstab
LABEL=newpart 挂在点:/mnt/ext 分区类型:ext4 defaults 0 0
第一列表示待挂载的文件系统,挂载方式可以是设备路径(/dev/sdb1),可以是LABEL,可以是UUID
第二列是挂载点,表示设备使用后,从那个接入点使用磁盘空间
第三列是文件系统类型,制作文件系统时的格式写在这个位置
第四列是挂载时的磁盘参数,默认包含可读可写等
第五列是是否对磁盘做dump备份,1表示备份,0表示不备份
第六列是是否对磁盘做fsck检查,非0的正整数代表通过fsck -a检查,0表示不检查
查看设备信息使用blkid指令
7.挂在文件系统
首先查看已存在的磁盘挂在信息
df -Th
然后执行mount -a,表示读取fstab文件,将未挂在的文件系统参数包含挂在上
sdb1上测试ln
tune2fs 用来调整和查看EXT文件系统的具体信息
xfs_info 用来查看xfs文件系统的具体信息
xfs_admin 用来调整xfs文件系统的具体信息
创建windows格式的磁盘分区,在以上操作步骤中,第2步,建好分区,按‘t’修改磁盘分区类型
windows的system ID 修改为 ‘b’
保存退出后,刷新磁盘分区,在创建挂载点,制作文件系统
swap 虚拟内存创建,在以上操作步骤中,第2部,建好分区,按 ‘t’ 修改磁盘分区类型
swap的system ID 修改为’82’
制作虚拟内存的指令为mkswap
swap在永久挂载时,没有挂载点,fstab文件格式如下
/dev/sdb3 swap swap defaulta 0 0
开启虚拟内存的指令为swapon -a ,将开启所有fstab 文件中的swap分区
关闭使用swapoff ,如果只有关闭一个分区,swapoff /dev/sdb3,关闭所有的swapoff -a
查看虚拟内存空间变化可以使用free -m
free -s 10 每10秒刷新一次使用情况
除了分区类型的SWAP还有文件类型的SWAP,分区SWAP效率差弹性高,文件类型正好相反
32位操作系统每个交换内存最大2G,同时启用的数量是32个,2G
32=64G SWAP,64位没限制

dd if=/dev/zero of=/tmp/swap bs=1M count=1024
mkswap /mnt/swap;swapon /tmp/swap;swapon -s
/tmp/fstab swap swap defaults 0 0(not UUID)
blkid/lsblk --fs /cat/proc/partitions

Mount
格式:mount - t 文件系统类型 -o [可选参数]文件系统 挂载点
功能:该命令用来把文件系统挂载到系统中
常用选项说明:
-t 文件系统类型用于指定欲挂载设备的文件系统类型,常见的类型如下
xfs RHEL7 中标准的Linux文件系统
ext4 RHEL6中标准的文件系统格式
msdos MD-DOS分区的文件系统,即FAT16
vfat Windows分区的文件系统,即FAT32
     nfs 网路文件系统
iso9660光盘的标准文件系统
ntfs Windows NT 的文件系统
auto 自动检测文件系统
-o [可选参数] 用于指定挂载文件系统时的选项,常用的可选参数及其含义如下。
a 安装/etc/fstab文件中描述的所有文件系统
auto 一般与-a选项一起由启动脚本使用,表明应该安装此设备,与此选项相对的是noauto

ro 将文件系统设置为只读模式
rw 将文件系统设置为可读、可写模式
defaults打开选项rw、suid、dev、exec、auto、nouser和async
dev 允许使用系统上的设备节点,对设备的访问完全由对磁盘上设备节点的访问权决定,这是一个安全隐患,因此对可移动文件系
统如软盘设备节点要采用nodev选项安装。
async 该选项以异步I/O方式保证程序继续执行,而不等待硬盘写操作,这可以大大加速磁盘操作,但是不可靠。
与它相对的是sync, sync的特点是速度慢但比较可靠。
exec 该选项通知内核允许程序在文件系统上运行,与它相对的是noexec,它告诉内核不允许程序在文件系统上运行,这通常用
于安全防范措施
user 允许普通用户安装和拆卸文件系统,出于安全方面的考虑,它包含nodev、noexec、nosuid等选项。所以如果suid参
数后面跟着user参数的话,suid选项将被关闭
suid 允许setuid、setgid位生效,出于安全考虑,常用nosuid
remount 该选项允许不中断mount为已经安装的文件系统改变特征
sync 不对该设备的写操作进行缓冲处理,这可以防止在非正常关机的情况下破坏文件系统,但是会降低计算机速度
quota 强制在该文件系统上进行磁盘配额限制
noauto 不在系统启动时加载该文件系统
codepage:× × ×代码页
iocharset:× × ×字符集
文件系统是一个块设备,设备的名称如下:fd0 软盘、cdrom 光盘、sda1 一般用来表示存储设备
挂载点必须是一个已经存在的目录,一般在挂载之前使用mkdir命令先创建一个新的文件系统。如果把现有的目录当作挂载点,这个目录最好为空目录,否则新安装的文件系统会暂时覆盖安装点的文件系统,该目录下原来的文件将不可读写,所以不能将文件系统挂载到根文件系统上,挂载外围设备时一般将挂载点放在/mnt下
umount/lsof + mount point
磁盘配额建立及测试验证:
EXT
1.挂载的同时需要为文件系统添加支持配额的选项
/dev/sdb1 /mnt/ext ext4 defaults,userquota,grpquota 0 0
配额限制即可通过mount指令,一次性添加,也可写入fstab,永久使用、
设备启用配额,需要将文件系统重载
umount /mnt/ext;mount -a(或mount -o remount /mnt/ext)
验证参数识别
mount | grep sdb1
2.在分区中生成配额文件quota.user和quota.group
quotacheck -augcv
-a 扫描/etc/mtab中所有启用配额的分区
-u 扫描磁盘计算用户所占用的文件数,生成aquota.user文件
-g 扫描磁盘计算组所占用的文件数,生成aquota.group文件
-c 创建配额文件aquota.user和aquota.group
-v 显示扫描过程
-m 强制以读写方式扫描文件系统,和-M类似,一般在扫描根分区使用
-f 强制扫描文件系统,并写入新的配置文件。一般在扫描新添加的硬盘分区使用
执行后,会检查所有支持磁盘配额的分区,如果分区之前有配置配额,开启又关闭,再次开启会有配置文件被更新
如果是第一次创建磁盘配额,那么会提示之前没有任何配额文件
3.为用户建立配额信息
edquota -u user1 编辑用户user1的配额
一共有六个字段
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 40960 51200 0 8 10
前三个字段表示针对文件空间限制,后三个字段表示针对文件数量限制(0表示没有限制)
第一个字段表示用户在文件系统中已占用的空间统计
第二个字段表示用户创建文件时,文件空间的警告阈值,超过数值则提示,单位KB(软限制一般为提醒,小于硬限制即可,不设置或者超过硬限制都无意义)
第三个字段表示用户的空间限制,最大使用的磁盘空间,单位KB
第四个字段表示用户已创建文件的数量统计
第五个字段表示用户在文件系统中创建文件的数量警告阈值,超过数量则提示
第六个字段表示用户创建文件的数量限制,最大创建文件数量
以上六个字段,主要针对2,3,5,6做设置
-p user1 user2 将user1的配额设置复制给user2
4.开启/关闭配额功能
quotaon/quotaoff
quotaon -a
-a 表示开启支持配额功能所有分区
切换用户,进入指定目录,做测试,同时记得修改被测试分区的文件系统权限,比如chmod 777 directory或setfacl
5.查看配额信息
查看配额信息的方式有两种。
quota -u 用户名 只查看用户的配额信息
quota -g 组名 只查看组的配额信息
repquota 设备 查看设备内的配额信息
quota -uvs username

XFS
Xfs_quota
-x:启动专家模式,在当前模式下允许对配额系统进行修改的所有管理命令可用
-c:直接调用管理指令,如limit,report等
1.挂载的同时需要文件系统添加支持配额的选项
/dev/sdb2 /mnt/xfs xfs defaults,usrquota(uquota,quota),grpquota(gquota),prjquota(不可与grpquota同时存在) 0 0
配额限制即可通过mount指令,一次性添加,也可写入fstab,永久使用
设备启用配额,需要将文件系统重载
umount /mnt/xfs;mount -a(或mount -o remount /mnt/xfs)
验证参数识别
mount | grep sdb2
2.对用户设置配额
xfs_quota -x -c “limit -u/g bsoft=60M bhard=80M isoft=8 ihard=10 username/groupname” /mountpoint
xfs_quota -x -c “report -u/gbih” /mountpoint

3.对单一目录设置配额(project)
调用project命令创建一个project 要将grpquota的参数取消 然后加入prjquota
指定专用标识符与目录的对应在 /etc/projects
echo “18:/opt/dir” >> /etc/projects
规范项目名称与标识符的对应在 /etc/projid
echo “myquotaproject:18” >> /etc/projid
初始化项目名称
xfs_quota -x -c “project -s myquotaproject”
xfs_quota -x -c “print” /opt/dir
xfs_quota -x -c “limit -p bsoft=450M bhard=500M myquotaproject” /opt/dir
xfs_quota -x -c “report -pbih” /opt/dir:查看项目详细信息

查询某个project的配额使用情况
xfs_quota -c ”quota -p 18“ /opt/dir
列出目前系统的各个文件系统,以及文件系统的 quota 挂载参数支持
xfs_quota -x -c “print”

暂时取消XFS文件系统的quota限制功能
xfs_quota -x -c “disable -up” /mountpoint:临时
xfs_quota -x -c “state” /mountpoint:查看配额开启了吗
开启的时候 需要先umount /mountpoint; mount -a
xfs_quota -x -c “enable -up” /mountpoint
如何移除project,off完全关闭配额限制,如想重开需卸载再重新挂载才能启动,如果无需执行remove,不建议使用off,一般disable即可
xfs_quota -x -c “off -up” /mountpoint:关闭
remove必须在off下才可以执行,删除配额限制
xfs_quota -x -c “remove -p” /mountpoint,打开vim /etc/fstab 把项目移除掉
umount /mountpoint;
mount -a
Mount | grep sdb2
xfs_quota -x -c “report -phb” /mountpoint

扩展:
1.配额复制:edquota -p user1(源) -u user2(目标)
2.修改宽限时间:edquota -t 空间和个数 8days
3.非交互式磁盘配额:setquota -u 用户名 softblock hardblock softinode hardinode 分区名(EXT)
xfs_quota -x -c ‘limit -u bsoft=50M bhard=80M isoft=6 ihard=8 username’ /opt/dir(XFS)

针对组配额,是同组用户共享空间,先到先得
宽限时间,当达到软限制与硬限制之间时,默认为7天宽限,100M软限,200M硬限,用户占用120M,7天中每天登陆都会提示硬盘将满的警告,如果不做处理,7天后硬限制会降至100M
df -TH
df -i查看节点信息
UUID最多可以 2的32次方,减一

LVM和RAID

LVM创建及使用
LVM底层文件系统标签为’8e’
创建逻辑卷,首先满足前面实验的7个步骤,那么在第二步,创建并转换完分区,识别后
将磁盘分区初始化物理卷,pvcreate /dev/sdb5
将初始化的物理卷加入卷组,vgcreate myvg/dev/sdb5
在已有的卷组中,创建逻辑卷,lvcreate -L 300M -n mylv myvg
vgcreate 和lvcreate时,必须指定卷组和逻辑卷名称,逻辑卷需指定大小
物理卷管理:
pvmove
将用过的物理卷移动到不同的物理卷
pvremove
删除现有的物理卷
pvresize
调整物理卷的大小
删除卷组:
vgremove
激活/取消激活逻辑卷
lvchange -a {yln}
拉伸及缩小
当卷组空间足够分配给逻辑卷时,拉伸LVM分为两步:
1.拉伸逻辑卷: 2.通知文件系统
EXT文件系统:
lvextend(lvresize)-L +300M /dev/myvg/mylv
resize2fs /dev/myvg/mylv
XFS文件系统:
lvextend -L 600M /dev/myvg/mylv
xfs_growfs /mnt/lvm
主,XFS文件系统不支持缩小

当卷组空间不够分配给逻辑卷时,拉伸LVM分为五步:
          1.新建磁盘分区或磁盘
          2.将新建磁盘或分区初始化为物理卷
          3.拉伸卷组
          4.拉伸逻辑卷
          5.通知文件系统
          fdisk /dev/sdb
创建新的磁盘分区(8e)
pvcreta /dev/sdb6
将分区初始化为物理卷
vgextend myvg /dev/sdb6
将新的物理卷空间融入卷组
后面4.5拉伸和通知文件系统的指令同上
缩小LVM分为四步:
1.将挂载的文件系统下线
umount /mnt/lvm
2.强制磁盘检查
e2fsck -f /dev/myvg/mylv
3.通知文件系统缩小
resize2fs /dev/myvg/mylv 100M
4.缩小逻辑卷
lvresize -L 100M /dev/myvg/mylv
逻辑卷快照:
-s 空间一般为原大小的15%~20%即可(空间不够可通过lvextend放大快照)
lvcreate -n mylv-snap -s -L 100M /dev/myvg/mylv
mount -o nouuid /dev/myvg/mylv-snap /mountpoint lvremove移除
移动卷:
1.加入新的物理卷(空间大于等于移动的物理卷)
2.移动物理卷 pvmove /dev/sdb1 /dev/sdb5
3.卸载物理卷 vgreduce myvg /dev/sdb1
pvremove /dev/sdb1
删除LVM
1.删除或注释磁盘挂载信息
vim /etc/fstab
2.将挂载的文件系统下线(设备下线前记得备份)
umount /mnt/lvm
3.删除逻辑卷
lvremove /dev/myvg/mylv
4.删除卷组
vgremove myvg
5.删除卷组底层的物理卷
pvremove /dev/sdb5 /dev/sdb6
6.删除磁盘分区
fdisk /dev/sdb
d->6 d->5
7.刷新磁盘分区,如果报错,在确保主机其他文件系统正常的情况下,重启主机

启动流程与服务管理

运行设置及查看
rhel6:init 3 切换为文本模式
init 5切换为图形模式
vim /etc/inittab
文件中,id后面的数字,为3时开机默认为文本模式,为5时,开机默认为图形模式
执行指令为临时设置,修改文件为永久设置
rhel7:systemctl isolate multi-user.target 切换为文本模式
systemctl isolate graphical.target 切换为图形模式
以上为临时修改模式
systemctl set-default multi-user.target 开机默认为文本模式
systemctl set-default graphical.target 开机默认为图形模式
以上为永久修改模式
systemctl:systemctl是与systemd交互的命令
获取当前运行级别的方法
rhel6:runlevel
rhel7:systemctl get-default

在引导提示符下显示target/runlevel的依赖项:
systemctl show -p “Requires” multi-user.target
systemctl show -p “Wants” multi-user.target

修改语言设置的三种方式:
1.yum install system-config-language
system-config-language
2.找到右上角用户,设置,区域和语言,修改语言
3.vim /etc/locale.conf
英文格式为LANG=en_US.UTF-8
中文格式为LANG=zh_CN.UTF-8

服务控制:
运行状态下服务控制:
rhel6:service 服务名称 服务控制
service network restart/stop/start/status
rhel7:systemctl 服务控制 服务名称
systemctl stop/start/restart/status network
开机自启动服务控制:
rhel6:chkconfig 服务名称 on/off
chkconfig vsftpd on
rhel7:systemctl enable/disable 服务名称
systemctl enable vsftpd

进程管理与计划任务

进程管理与计划任务
进程管理作用:
1.判断服务的健康状态,如CPU占用率、内存占用率(cacti或nagios)
2.查看系统中所有的进程,了解运行了哪些服务、是否有非法服务在运行
3.杀死进程,只有终止进程失效的情况下,才考虑杀死进程
ps:查看静态进程信息(部分选项不能加“-”,因为部分选项需要遵循BSD格式,所以ps aux或ps -le)
a选项表示查看所有进程信息
u选项表示显示进程所属的用户信息
x选项表示显示默认信息以外的信息
-l选项表示长格式显示当前进程的详细信息(ps -l只看当前shell产生的进程)
-e选项表示显示所有进程,与-A一致
STAT:
D:(不可中断)不可被唤醒的睡眠状态,通常用于I/O情况,kill也不能中断
S:(中断)状态处于休眠中,当某个条件形成后或者己收到信号时脱离该状态
T:(停止)进程收到停止信号后,后台暂停或进程处于出错状态
s:当前进程有多个子进程
l:当前进程可能会开启多个子进程,多线程
R:(运行)当前进程正在运行中或在运行队列中等待
+:表示这个进程在后台运行
Z:表示僵尸进程,进程已经终止,但是进程描述符依然存在,直到父进程调用系统函数后将进程释放
<:表示当前进程优先级高
N:表示当前进程优先级低
L:被锁入内存
SZ:进程占用内存空间的大小,以KB为单位
TTY:进程所在终端的终端号,桌面显示pts/0,字符显示tty1~tty6,?表示该进程不占用终端
-aux 用户列表的所有进程
-ef 命令行界面下的所有进程
top:动态查看进程活动与系统负载信息(默认每3秒刷新一次,可以按q退出)
TIME:进程从启动以来占用CPU的时间
CMD:启动该进程的命令名称
M:按M表示按照内存使用量从大到小排序
P:按P表示按照CPU使用量从大到小排序
N:按N表示按照PID排序
T:按照CPU累计运算时间排序,TIME+选项排序
k:按照PID给予某个进程一个信号,一般用于终止某个进程
r:按照PID给某个进程重设优先级
?或h:显示交互模式的帮助
-d 秒数:指定top每隔几秒更新
-n 次数:制定top命令执行的次数,一般和‘-b’合用
-b :使用批处理模式输出,把top重定向到文件中
-p :指定PID,只看某个PID进程
-u 用户名:只监听某个用户的进程

优先级的范围: 19 → -20(-20 相对优先级最高 19 相对优先级最低)
nice: 用指定的相对优先级示例启动一个任务:nice -n 10 xterm
renice:更改正在运行的任务的相对优先级。使用他们的 PID指定任务:renice -15 -p 528
sleep: 暂停进程;使进程暂停执行一段时间,其中“时间”参数以秒为单位
sleep 10;ls -l /etc/passwd
扩展:缓冲(buffer)和缓存(cache)的区别,缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中直接读取。缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能,简单说,缓存(cache)是用来加速数据从硬盘中“读取”的,而缓冲(buffer)是用来加速数据“写入”硬盘的。
uptime 显示系统的启动时间和平均负载,top的第一行
lsof 列出进程调用或打开的文件信息
-c 字符串:只列出以字符串开头的进程打开的文件
+d 目录名:列出某个目录中所有被进程调用的文件
-u 用户名:只列出某个用户的进程打开的文件
-p pid:列出某个PID进程打开的文件
pgrep:表示查看指定服务的PID(进程ID值)
-u表示查看指定程序用户的进程信息
比如:pgrep -u named named
第一个named为named用户,在passwd文件中,第二个进程名称named,可以通过
ps aux | grep named获取
pstree:以树状结构显示进程的关联信息
扩展
vmstat:监控系统资源[刷新延迟 刷新次数] 监控CPU、进程状态、内存使用、虚拟内存使用、磁盘输入/输出状态等
dmesg:显示开机时的内核检测信息
pidof:查询某个指定服务进程的PID值 pidof sshd

Ctrl+z 前台进程调入后台
Ctrl+c 结束进程
jobs 查看后台进程
fg # 将后台第#个进程在前台运行(不加数字时,jobs程序上为‘+’的程序优先被调回)
bg # 将后台第#个进程在后台运行(不加数字时,jobs程序上为‘+’的程序优先被调回)
& 直接将进程放在后台运行
kill、killall 结束进程
kill [-9] 进程PID
killall [-9] 进程名
kill -l(/usr/include/linux/singal.h)s y s target
SIG+
HUP 1 挂起
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 停止 暂停进程
TSTP 20 键盘停止(同 Ctrl + Z)
kill后面直接写数字时,表示是ps过滤出来的进程信息
kill后面加%加数字时,表示结束jobs后台进程中的对应进程
如果默认进程结束不掉,可以使用kill -9 PID强制结束进程
killall表示同时结束多个相同程序发起的进程
killall -9 xeyes
pkill mysqld(服务名称)
结束当前服务的所有进程
at 一次性定制任务
设置格式
at [HH:MM] [yyyy-mm-dd]
at>ctrl+d 结束编辑
查询与删减
atq(at -l)
atrm
at –c # 查看指定计划任务内容

crontab 任务计划,可以在指定时间重复执行
查看指令写入格式,可以通过cat /etc/crontab获取(分/时/日/月/周)
用户定义的配置文件位于 /var/spool/cron/用户名
crontab -e [-u 用户名] 编辑计划任务
crontab -l [-u 用户名] 查看计划任务
crontab -r [-u 用户名] 删除计划任务
crontab -u
date 获取或修改时间
date 月日时分年
date -d ‘+90days’
hwclock 获取或修改BIOS时间
-r 表示读取BIOS时间
-w 表示将当前时间写入BIOS
watch 根据需求执行刷新操作
-n 3表示每3秒刷新一次
• 需求描述
1.建立一个一次性计划任务,要求服务器2022年2月2日凌晨3点整重新启 动。(通过date修改时间到2点59验证效果)
date -s “2022-02-02 03:00”
at 03:00 2022-02-02
reboot
ctrl +D
at -l 查看当前的计划 atq
atrm 删除指定的计划
date 020123552022.15 更改时间为2022年2月1日23:55:15/hwclock -r读取硬件时间/hwclock -w 更改时间/date查看系统时间
At now+1minute
tar Jcf /opt/tar.etc.xz /etc

2.建立周期性计划任务,要求服务器使用root用户,在6月1号至5号以及 12月6号至10号的凌晨12点,每半个小时执行一条指令,清空/tmp临 时目录中的内容。
可以通过cat /etc/crontab获取(分/时/日/月/周):查看格式
用户定义的配置文件位于 /var/spool/cron/用户名
Crontab -e编写计划,相当于vim

	*/30     0-2    1-5   6   *     rm-rf /tmp
	*/30     0-2

3.建立周期性计划任务,要求一分钟备份一次日志,同时备份文件的名称根据时间自动变化,文件存放在/tmp。
touch file date +%Y -%m -%d%H%M.txt
Ls -l
tar Jcf /tmp/etc.tar.date+%Y%m%d%H%M%S.xz /etc/
Which tar
Vim /opt/backup.sh
Chomd a+x

服务器引导加固与修复

kernel升级
确认当前系统的内核版本:
查看当前kernel: uname -r
查看可升级kernel: yum list kernel
升级kernel:
yum update kernel(需要提供可更新yum源)
rpm -ivh kernel-3.10.0-123.1.2.el7.x86_64.rpm
yum localinstall kernel-3.10.0-123.1.2.el7.x86_64.rpm

查看已安装kernel版本:
	cat /boot/grub2/grub.cfg | grep -i 'red hat'
设置kernel启动版本:(修改后重启生效)
	grub2-set-default number
	(数字按照上面文件的顺序设置,如果有3个核心,设置区间为0-2,如果设置为3的话则循环为0)
查看设置的启动版本:
	grub2-editenv list(/boot/grub2/grubenv)
修改grub菜单的超时时间:
	vim /etc/default/grub中GRUB_TIMEOUT=10
	grub2-mkconfig -o /boot/grub2/grub.cfg

grub2-mkconfig:生成一个新的/boot/grub2/grub.cfg(选项 -o)
grub2-script-check:检查给定的文件是否有语法错误,后面加文件路径

RHEL6密码破解
	1.重启、在第一屏显示时就可以按“任意键”进入menu
	2.选择你要修改的内核按“e”(e代表edit)
	3.进入再按一次“e”,在quiet后输入“空格single或者空格1”
	4.“回车”返回上一级界面,再输入“b”,boot引导进入系统
	5.password root
	(rhel6操作 1  enter  b  passwd(getenforce enforcing setenforce 0) )
	LANG=en

RHEL7密码破解
	1.添加内核参数rd.break
	2.内核加载引导系统时,根分区为只读模式挂载,修改模式为读写
	mount -o remount,rw /sysroot
		mount | grep sysroot验证是否修改成功
	3.切换到根目录chroot /sysroot
	4.修改密码passwd root
	echo rdhat | passwd --stdin root
	5.修改SELinux的relabel模式
	touch /.autorelabel
	执行2次exit

grub2引导菜单加密
	1.通过命令grub2-mkpasswd-pbkdf2生成加密密码
	修改/etc/grub.d/00_header,在末尾追加(用户名与密码设置无关)
	cat << EOF
	set superusers="user1"
	password_pbkdf2 user1 “Encrypted Password Of User1”(引号内粘贴grub生成的密码)
	EOF
	更新配置文件以生效
	grub2-mkconfig -o /boot/grub2/grub.cfg

	2.通过grub2-setpassword来生成grub2的口令 口令存放在/boot/grub2/user.cfg中
	查看口令文件信息,默认加密算法为sha512

修复运行级别异常
	添加参数 systemd.unit=multi-user.target
	进入系统后,修改还原 systemctl set-default multi-user.target

修复grub
	故障原因
		grub.cfg文件丢失  推荐使用:mv grub.cfg grub.cfg.bak  也可执行:shred /boot/grub2/grub.cfg
	故障现象
		grub>
	解决办法
		进行手动引导
		1.set root=(hd0,msdos1) 设定根为第一个硬盘的第一个分区
		2.linux /vmlinuz-*.el7.x86_64 root=/dev/mapper/rhel-root(/dev/rhel/root) 	
			指定内核将根的位置交给文件系统(此处需要留意根分区的底层,是物理分区还是逻辑卷)
			注:如果系统分区不是LVM,boot目录没有独立创建,那么linux后面的路径格式为:
				linux /boot/vmlinuz-*.el7.x86_64 root=/dev/sda1
		3.initrd /initramfs-*.el7.x86_64.img 
			加载初始化镜像盘为硬件加载驱动(*表示核心版本和镜像版本需一致)
			注:如果系统分区不是LVM,boot目录没有独立创建,那么linux后面的路径格式为:
				initrd /boot/initramfs-*.el7.x86_64.img
		4.boot 引导进入系统

	grep -rn superusers /etc/grub.d/

grub引导故障,文件损坏或丢失
	解决办法
		在硬盘sda上安装grub2,重新覆盖原来的引导
		grub2-install /dev/sda
		让grub2自己识别不同的系统,然后按照脚本自己创建引导,并更新配置文件/boot/grub2/grub.cfg
		grub2-mkconfig -o /boot/grub2/grub.cfg

diff 文件对比
	diff 源文件 目标文件                                                                            
	--brief 确认两个文件是否不同
	c 描述文件具体有哪些不同

救援模式管理
	关闭虚拟机,编辑虚拟机设置,选中光驱,勾选启动时链接,同时,在开启前点击进入虚拟机时
	打开固件,将CD或网卡调至最上面,F10保存退出

	选continue,继续,根分区被挂载到了/mnt/sysimages路径下

修复grub2-误删/boot/grub2/*
	rm -rf /boot/grub2/
	在救援模式下
	chroot /mnt/sysimage 
	grub2-install /dev/sda 
	grub2-mkconfig -o /boot/grub2/grub.cfg
修复grub2 – 引导破坏故障
	rm -rf /boot/grub2/
	dd if=/dev/zero of=/dev/sda bs=1 count=446
	在救援模式下
	chroot /mnt/sysimage 
	grub2-install /dev/sda 
	grub2-mkconfig -o /boot/grub2/grub.cfg
修复 /boot/ 下所有文件被删除故障
	rm -rf /boot/*
	在救援模式下
	chroot /mnt/sysimage 
	mount /dev/sr0 /mnt 
	grub2-install /dev/sda
	rpm -ivh /mnt/Packages/kernel-3.10.0-514.el7.x86_64.rpm –-force
	grub2-mkconfig -o /boot/grub2/grub.cfg

	fsck -f 磁盘分区 强制检查ext文件系统磁盘分区(卸载修复)
	xfs_repair -L 磁盘分区 强制检查XFS文件系统磁盘分区(卸载修复)

		RH429 SElinux

综合案例1:文件删除能不能还原?
	删除文件 再创建文件 查看inode变化

综合案例2:文件系统损坏能不能还原
	dumpe2fs 显示ext2、ext3、ext4文件系统的超级快和块组信息 分区路径
		dumpe2fs /dev/sdb1 | more 查看Group
		一个文件系统在格式化的瞬间产生了很多blocks 1(100k) 2(100k) 3(100k) 4(100k) 给1扩容 数据不连续 为了保证数据连续 所以分组
		每个组固定为32768blocks(0-32767)具体分多少组取决于文件系统大小 为的是提高性能 保证文件的连续性 G0中有1 2 G1中有3 4 空间并没有用完
		所以可以在扩展时在原有组进行空间拉伸
		superblock:记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等
		inode:记录文件的属性,权限,一个文件占用一个inode,同时记录此文件的资料所在的block号码
		block:实际记录数据的内容,若数据太大时,会占用多个block

扩展:硬盘故障处理	
	只破坏superblock: 
		新建文件系统 挂载 复制文件dd if=/dev/zero of=/dev/sdb1 bs=4k count=1
		df -Th查看异常 fsck(filesystem check)fsck -v -y /dev/sdb1 重载后 文件就恢复正常了(用的后面备份的超级块修复的 必须要卸载修复 挂载修复 容易损坏文件系统)
	
	破坏superblock与大量inode_table等元数据信息以及data_block(会有数据丢失):
		复制文件dd if=/dev/zero of=/dev/sdb1 bs=4M count=100破坏大量文件
		需要指定backup_super_block位置来恢复超级块文件
		可以通过fdisk创建相同大小与文件格式的新空间来查找backup_super_block位置
		fdisk add sdb2   dumpe2fs /dev/sdb2 | grep -i super
		查找到了backup_super_block位置,在ext文件系统下,也可以通过 mke2fs -n /dev/sdb2来模拟创建过程,找出backup_super_block位置
		通过e2fsck -b superblock_number device来修复,找到正确的数字会提示修复

你可能感兴趣的:(linux,安全,操作系统)