Linux学习

一、Linux系统简介

1. linux内核官网:

​ www.kernel.org

2. 开源软件:

​ 使用的自由:绝大多数开源软件免费

​ 研究的自由:可以获得软件源代码

​ 散布及改良的自由:可以自由传播、改良甚至销售

3.支持互联网的开源技术

​ LAMP:Linux 操作系统、Apache Web服务器、MySQL 数据库、PHP 编程语言

4.Linux应用领域

  1. 基于Linux的企业服务器

    www.netcraft.com 踩点网站

  2. 嵌入式应用

  3. Linux在电影娱乐业

二、Linux系统安装

1.磁盘分区

磁盘分区是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分。碟片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区

2.分区类型

主分区:最多只能有4个

拓展分区:最多只能有1个,主分区加拓展分区最多有4个,不能写入数据,只能包含逻辑分区

逻辑分区

3.格式化

格式化(高级格式化)又称逻辑格式化,它是指根据用户选定的文件系统(如FAT16、FAT32、NTFS、EXT2、EXT3、EXT4等),在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间

4.硬件设备文件名

硬件设备文件名
IDE硬盘/dev/hd[a-d]
SCSI/SATA/USB硬盘/dev/sd[a-p]
光驱/dev/cdrom或/dev/hdc
软盘/dev/fd[0-1]
打印机(25针)/dev/lp[0-2]
打印机(USB)/dev/usb/lp[0-15]
鼠标/dev/mouse

5.挂载

必须分区

​ /(根分区)

​ swap分区(交换分区、内存2倍、不超过2GB)

推荐分区

​ /boot(启动分区,200MB)

image-20210418234653840

总结

分区:把大硬盘分为小的逻辑分区

格式化:写入文件系统

分区设备文件名:给每个分区定义设备文件名

挂载:给每个分区分配挂载点

6.安装日志

/root/install.log 存储了安装在系统中的软件包及其版本信息

/root/install.log.syslog 存储了安装过程中留下的事件记录

/root/anaconda-ks.cfg 以Kickstart配置文件的格式记录安装过程中设置的选项信息

7.Linux各目录的作用

目录名目录作用
/bin/存放系统命令的目录,普通用户和超级用户都可以执行,不过放在/bin下的命令在单用户模式下也可以执行
/sbin/保存和系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是有些命令可以允许普通用户查看
/usr/bin/存放系统命令的目录,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
/usr/sbin/存放根文件系统不必要的系统管理命令,例如多数服务程序。只有超级用户可以使用。大家其实可以注意到Linux的系统,在所有"sbin"目录中保存的命令只有超级用户可以使用,"bin"目录保存的命令所有用户都可以使用
/boot/系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/设备文件保存位置
/etc/配置文件保存位置。系统内所有采用默认方式(rpm安装)的服务的配置文件全部都保存在这个目录当中,如用户名和密码,服务的启动脚本,常用服务的配置文件
/home/普通用户的家目录。建立每个用户时,每个用户要有一个默认登陆位置,这个位置就是这个用户的家目录,所有普通用户的家目录就是在/home下建立一个和用户名相同的目录。
/lib/系统调用的函数库保存位置
/lost+found/当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复以及损坏的文件系统。这个目录只在每个分区中出现,如/lost+found就是根分区的备份恢复目录,/boot/lost+found就是/boot分区的备份恢复目录
/media/挂载目录。系统建议是用来挂载媒体设备的,例如软盘和光盘
/mnt/挂载目录,早期Linux中只有这一个挂载目录,并没有细分。现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区
/misc/挂载目录。系统建议用来挂载NFS服务的共享目录。只要是一个已经建立的空目录就可以作为挂载点。系统虽然准备了3个默认挂载目录/media、/mnt、/misc,但是到底在哪个目录中挂载什么设备都可以由管理员自己决定
/opt/第三方安装的软件保存位置。这个目录就是放置和安装其他软件的位置,/usr/local/目录也可以用来安装软件
/proc/虚拟文件系统,该目录中的数据并不保存到硬盘中,而是保存到内存当中。主要保存系统的内核、进程、外部设备状态和网络状态等。如/proc/cpuinfo是保存CPU信息的,/proc/devices是保存设备驱动的列表的,/proc/filesystems是保存文件系统列表的,/proc/net是保存网络协议信息的
/sys/虚拟文件系统。和/proc目录相似,都是保存在内存当中的,主要是保存与内核相关信息的
/root/超级用户的家目录。普通用户家目录在/home下,超级用户家目录直接在/下
/srv/服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/临时目录。系统存放临时文件的目录,该目录下所有用户都可以访问和写入。
/usr/系统软件资源目录。注意usr不是user的缩写,而是“Unix Software Resource”的缩写,所以不是存放用户数据,而是存放系统软件资源的目录。系统中安装的软件大多数保存在这里,除了/usr/bin和/usr/sbin这两个目录。
/var/动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件

三、Linux常用命令

1.文件处理命令

命令格式: 命令 [-选项] [参数]

例: ls -la /etc

说明:个别命令使用不遵循此格式;当有多个选项时,可以写在一起; 简化选项与完整选项 ,如-a等于--all

目录处理命令

(下列命令所有用户都可以执行)

命令名称/所在路径功能描述语法范例/参数
ls(list)(/bin/ls)显示目录文件ls 选项[-ald] [文件或目录]
-a 显示所有文件,包括隐藏文件
-l 详细信息显示
-d 查看目录属性
-i 查看文件的i节点
mkdir(make directories)(/bin/mkdir)创建新目录 -p递归创建mkdir -p [目录名]mkdir -p /tmp/Japan/boduo
mkdir /tmp/Japan/longze /tmp/Japan/cangjing
cd(change directory)(shell内置命令)切换目录cd [目录]cd /tmp/Japan/boduo
cd …
pwd(print working directory)(/bin/pwd)显示当前目录pwd
rmdir(remove empty directories)(/bin/rmdir)删除空目录rmdir [目录名]rmdir /tmp/Japan/boduo
cp(copy)(/bin/cp)复制文件或目录cp -rp [原文件或目录] [目标目录]
-r 复制目录
-p 保留文件属性
cp -r /tmp/Japan/cangjing /root
cp -rp /tmp/Japan/boduo /tmp/Japan/longze /root
mv(move)(/bin/mv)剪切文件、该命mv [原文件或目录] [目标目录]
rm(remove)(/bin/rm)删除文件rm -rf [文件或目录]
-r 删除目录
-f 强制执行
rm /tmp/yum.log
rm -rf /tmp/Japan/longze

-rw-r--r--

-	文件类型(-文件、 d目录、 l软链接文件)
rw- r-- r--
u 	g 	o
u所有者	g所属组	o其他人
r读	w写	x执行	  

文件处理命令

以下命令所有用户均可执行

命令名称/所在路径功能描述语法范例/参数
touch(/bin/touch)创建空文件touch [文件名]touch Japanlovestory.list
cat(/bin/cat)显示文件内容cat [文件名]
-n 显示行号
cat -n /etc/services
tac(/usr/bin/tac)显示文件内容(反向显示)tac [文件名]tac /etc/issue
more(/bin/more)分页显示文件内容more [文件名](空格)或f 翻页
(Enter) 换行
q或Q 退出
less(/usr/bin/less)分页显示文件内容(可向上翻页)less [文件名]less /etc/services
head(/usr/bin/head)显示文件前面几行head [文件名]-n 指定行数
head -n 20 /etc/services
tail(/usr/bin/tail)显示文件后面几行tail [文件名]-n 指定行数
-f 动态显示文件末尾内容
ln(link)(/bin/ln)生成链接文件ln -s [源文件] [目标文件]
-s 创建软链接
ln -s /etc/issue /tmp/issue.soft
ln /etc/issue /tmp/issue.hard

软连接特征:类似Windows快捷方式

​ 软链接文件权限都为rwxrwxrwx

​ 文件大小 - 只是符号链接,都比较小

​ /tmp/issue.soft -> /etc/issue 箭头指向原文件

硬链接特征

​ 拷贝cp -p + 同步更新

​ 可通过i节点识别( 源文件和硬链接文件有相同的i节点 )

​ 不能跨分区

​ 不能针对目录使用

2.权限管理命令

chmod

命令名称: chmod
命令英文原意:  change the permissions mode of a file
命令所在路径:  /bin/chmod
执行权限:  文件所有者 或 root
语法: chmod [{ugoa}{+-=}{rwx}][文件或目录]
	  chmod [mode=421][文件或目录]
	  -R 递归修改
功能描述: 改变文件或目录权限
权限的数字表示:r--4	w--2	x--1
范例:chmod g+w	testfile
	赋予文件testfile所属组写权限
	chmod -R 777 testdir
	修改目录testdir及其目录下文件为所有用户具有全部权限
代表字符权限对文件的含义对目录的含义
r读权限可以查看文件内容可以列出目录中的内容
w写权限可以修改文件内容可以在目录中创建、删除文件
x执行权限可以执行文件可以进入目录

要删除文件需要对文件所在的目录具有写权限

chown

命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:root
语法:chown [用户][文件或目录]
功能描述:改变文件或目录的所有者
范例: chown shenchao fengjie
	//改变文件fengjie的所有者为shenchao

chgrp

命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp [用户组][文件或目录]
功能描述:改变文件或目录的所属组
范例: chgrp lampbrother fengjie
	//改变文件fengjie的所属组为lampbrother

umask

命令名称:umask
命令英文原意:the user file-creation mask
命令所在路径:shell 内置命令
执行权限:所有用户
语法:umask [-S]
	-S 以rwx形式显示新建文件缺省权限
功能描述:显示、设置文件的缺省权限
范例: umask -S
在Linux中新建的文件默认是没有可执行权限的

3.文件搜索命令

find

命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
语法: find [搜索范围][匹配条件]
功能描述:文件搜索
范例: 
find /etc -name init
在目录/etc中查找文件init
-iname不区分大小写

find / -size +204800
单位是数据块,一个数据块是512字节,0.5KB
在根目录下查找大于100MB的文件
+n 大于  -n  小于   n  等于

find /home -user shenchao
在根目录下查找所有者为沈超的文件
-group 根据所属组查找

find /etc -cmin -5
在/etc下查找5分钟内被修改过属性的文件和目录
-amin	访问时间 access
-cmin	文件属性 change
-mmin	文件内容 modify

find /etc -size +163840 -a -size -204800
在/etc下查找大于80MB小于100MB的文件
-a 两个条件同时满足
-o 两个条件满足任意一个即可

find /etc -name inittab -exec ls -l {} \;
在/etc下查找inittab文件并显示其详细信息
-exec/-ok 命令{} \; 对搜索结果执行操作

-type 根据文件类型查找
	f 文件	d 目录	l 软链接文件
-inum	根据i节点查找

locate

命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate 文件名
功能描述:在文件资料库中查找文件
范例: locate inittab
locate是在文件资料库中查找指定的文件,速度快。若新创建的文件没有收录到资料库时,可以使用	updatedb	命令进行更新资料库
/tmp目录下的文件不会收录到文件资料库中

which

命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which 命令
功能描述:搜索命令所在目录及别名信息
范例: which ls

whereis

命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:which 命令名称
功能描述:搜索命令所在目录及帮助文档路径
范例: whereis ls

grep

命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep -iv [指定字串][文件]
功能描述:在文件中搜索字串匹配的行并输出
	-i 不区分大小写
	-v 排除指定字串
范例: grep mysql /root/install.log
	grep -v ^# /etc/inittab
	//去掉以#开头的行,即注释行

4.帮助命令

man

命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
功能描述:获得帮助信息
范例: man ls	查看ls命令的帮助信息
	man services	查看配置文件services的帮助信息,不需要绝对路径
	man 1 passwd	查看命令的帮助
	man 5 passwd	查看配置文件的帮助

不常用命令

whatis ls
只显示命令的name部分的信息

apropos services
查看配置文件的简短信息

touch --help
查看命令的简单使用

info ls
查看命令的帮助信息

help

命令名称:help
命令所在路径:Shell内置命令
执行权限:所有用户
语法:help 命令
功能描述:获得Shell内置命令的帮助信息
范例: help umask
	查看umask命令的帮助信息

5.用户管理命令

useradd

命令名称:useradd
命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户
范例: useradd yangmi

passwd

命令名称:passwd
命令所在路径:/usr/bin/passwd
执行权限:所有用户
语法:passwd 用户名
功能描述:设置用户密码
范例: passwd yangmi
普通用户可以更改自己的密码,有复杂度的要求
管理员root可以修改任何人的密码,没有要求

who

命令名称:who
命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登陆用户信息
范例: who
tty	表示本地终端
pts	表示远程终端

w

命令名称:w
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登陆用户详细信息
范例: w

uptime	查看系统累计运行多长时间

6.压缩解压命令

gzip

命令名称:gzip
命令英文原意:GNU zip
命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件,只能压缩文件,不能压缩目录
压缩后文件格式:.gz

gzip -d	进行解压缩

gunzip

命令名称:gunzip
命令英文原意:GNU unzip
命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip [压缩文件]
功能描述:解压缩.gz的压缩文件
范例:gunzip boduo.gz

tar

命令名称:tar
命令所在路径:/bin/tar
执行权限:所有用户
语法:tar [-zcf][压缩后文件名][目录]
	-c 打包
	-v 显示详细信息
	-f 指定文件名
	-z 打包同时压缩
功能描述:打包目录
压缩后文件格式:.tar.gz
范例:tar -zcf Japan.tar.gz Japan
	将目录Japan打包并压缩为.tar.gz文件

tar命令解压缩包

-x	解包
-v	显示详细信息
-f	指定解压文件
-z	解压缩
范例:tar -zxvf Japan.tar.gz

zip

命令名称:zip
命令所在路径:/usr/bin/zip
执行权限:所有用户
语法:zip [-r] [压缩后文件名] [文件或目录]
	-r 压缩目录
功能描述:压缩文件或目录
压缩后文件格式:.zip
范例:zip buduo.zip boduo
	压缩文件
	zip -r Japan.zip Japan
	压缩目录

unzip

命令名称:unzip
命令所在路径:/usr/bin/unzip
执行权限:所有用户
语法:unzip [压缩文件]
功能描述:解压.zip的压缩文件
范例:unzip test.zip

bzip2

命令名称:bzip2
命令所在路径:/usr/bin/bzip2
执行权限:所有用户
语法:bzip2 [-k] [文件]
	-k 产生压缩文件后保留原文件
功能描述:压缩文件
压缩后文件格式:.bz2
范例:bzip2 -k boduo
	tar -cjf Japan.tar.bz2 Japan

bunzip2

命令名称:bunzip2
命令所在路径:/usr/bin/bunzip2
执行权限:所有用户
语法:bunzip2 [-k] [压缩文件]
	-k 解压缩后保留原文件
功能描述:解压缩
范例:bunzip2 -k boduo.bz2
	tar -xjf Japan.tar.bz2

7.网络命令

所有用户均可执行

命令名称/所在路径功能描述语法范例/参数
write(/usr/bin/write)给在线用户发信息,以ctrl+D 保存结果write <用户名>write linzhiling
wall (write all) (/usr/bin/wall)发广播信息wall [message]wall ShenChao is a honest man!
ping (/bin/ping)测试网络连通性ping 选项 IP地址
-c 指定发送次数
ping 192.168.1.156
mail(bin/mail)查看和发送电子邮件mail [用户名]mail root
last(/usr/bin/last)列出目前与过去登入系统的用户信息lastlast
lastlog(/usr/bin/lastlog)检查某特定用户上次登陆的时间lastloglastlog
lastlog -u 502
traceroute(/bin/traceroute)显示数据包到主机间的路径traceroutetraceroute www.lampbrother.net
mount(/bin/mount)挂载mount [-t 文件系统] 设备文件名 挂载点mount -t iso9660 /dev/sr0 /mnt/cdrom
umount卸载umount /dev/sr0

root用户可执行

命令名称/所在路径功能描述语法范例/参数
ifconfig (interface configure) (/sbin/ifconfig)查看和设置网卡信息ifconfig 网卡名称 IP地址ifconfig eth0 192.168.8.250
setup(/usr/bin/setup)配置网络setupsetup

setup是redHat专有的配置工具集合

netstat

命令名称:netstat
命令所在路径:/bin/netstat
执行权限:所有用户
语法:netstat [选项]
功能描述:显示网络相关信息
选项:
	-t TCP协议
	-u UDP协议
	-l 监听
	-r 路由
	-n 显示IP地址和端口号
范例:
	netstat -tlun	查看本机监听的端口
	netstat -an		查看本机所有的网络连接
	netstat -rn		查看本机路由表

8.关机重启命令

shutdown [选项] 时间

​ -c 取消前一个关机命令

​ -h 关机

​ -r 重启

其他关机命令:halt poweroff init 0

其他重启命令:reboot init 6

系统运行级别

0123456
关机单用户不完全多用户,不含NFS服务完全多用户未分配图形界面重启

修改系统默认运行级别

cat /etc/inittab
id:3:initdefault

查询系统允许级别:runlevel

退出登陆命令:logout

四、文本编辑器Vim

1.Vim简介

Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件

Vim工作模式

image-20210422225341690

插入命令

命令作用
a在光标所在的字符后插入
A在光标所在行尾插入
i在光标所在字符前插入
I在光标所在行行首插入
o在光标下插入新行
O在光标上插入新行

定位命令

命令作用
:set nu设置行号
:set nonu取消行号
gg
G
到第一行
到最后一行
nG到第n行
:n到第n行
$移至行尾
0移至行首

删除命令

命令作用
x删除光标所在处字符
nx删除光标所在处后n个字符
dd删除光标所在行,ndd删除n行
dG删除光标所在行到文件末尾内容
D删除光标所在处到行尾内容
:n1,n2d删除指定范围的行

复制和剪切命令

命令作用
yy复制当前行
nyy复制当前行以下n行
dd剪切当前行
ndd剪切当前行以下n行
p、P粘贴在当前光标所在行下或行上

替换和取消命令

命令作用
r取代光标所在处字符
R从光标所在处开始替换字符,按Esc结束
u取消上一步操作

搜索和搜索替换命令

命令作用
/string搜索指定字符串
搜索时忽略大小写 :set ic
n搜索指定字符串的下一个出现位置
:%s/old/new/g全文替换指定字符串
:n1,n2s/old/new/g在一定范围内替换指定字符串

保存和退出命令

命令作用
:w保存修改
:w new_filename另存为指定文件
:wq保存修改并退出
ZZ快捷键,保存修改并退出
:q!不保存修改退出
:wq!保存修改并退出(文件所有者及root可使用)

2. Vim使用技巧

导入文件内容 :r 文件名

执行命令 :!命令

导入命令执行结果 :r !命令

定义快捷键 :map 快捷键 触发命令

​ 范例 :map ^P I#<ESC> ctrl + v + p

:map ^B 0x ctrl + v+ b

连续行注释 :n1,n2s/^/#/g

:n1,n2s/^#//g

n1,n2s/^/\/\//g

替换 :ab mymail samlee@lampbrother.net

重启之后快捷键消失了,可以在每个用户的家目录下.vimrc 文件里面把设置写进去

五、软件包管理

1.软件包管理简介

软件包分类

源码包(脚本安装包)

​ 源码包的优点是:

  • 开源,如果有足够的能力,可以修改源代码
  • 可以自由选择所需的功能
  • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
  • 卸载方便

​ 源码包的缺点:

  • 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
  • 编译过程时间较长,安装比二进制安装时间长
  • 因为是编译安装,安装过程中一旦报错新手很难解决

二进制包(RPM包、系统默认包)

​ 二进制包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
  • 安装速度比源码包安装快得多

​ 二进制包的缺点:

  • 经过编译,不再可以看到源代码
  • 功能选择不如源码包灵活
  • 依赖性

2.RPM包管理-rpm命令管理

  1. RPM包命名原则

    httpd-2.2.15-15.e16.centos.1.i686.rpm

    httpd2.2.1515e16.centosi686rpm
    软件包名软件版本软件发布的次数适合的Linux平台适合的硬件平台rpm包拓展名
  2. RPM包依赖性

    树形依赖: a ⟶ \longrightarrow b ⟶ \longrightarrow c

    环型依赖: a ⟶ \longrightarrow b ⟶ \longrightarrow c ⟶ \longrightarrow a

    模块依赖:模块依赖查询网站: www.rpmfind.net

  3. 包全名与包名

    包全名:操作的包是没有安装的软件包时,使用包全名,而且要注意路径

    包名:操作已经安装的软件包时,使用包名。是搜索 /var/lib/rpm 中的数据库

  4. RPM安装

    rpm -ivh 包全名

    -i(install)-v(verbose)-h(hash)–nodeps
    安装显示详细信息显示进度不检测依赖性
  5. RPM包升级

    rpm -Uvh 包全名

    -U(upgrade) 升级

  6. 卸载

    rpm -e 包名

    -e(erase) 卸载

    –nodeps 不检查依赖性

  7. 查询是否安装

    rpm -q 包名 #查询包是否安装

    rpm -qa #查询所有已经安装的rpm包

    -q 查询(query) -a 所有(all)

  8. 查询软件包详细信息

    rpm -qi 包名

    -i 查询软件信息(information) -p 查询未安装包信息(package,写包全名)

  9. 查询包中文件安装位置

    rpm -ql 包名

    -l 列表(list) -p 查询未安装包信息(package,写包全名)

  10. 查询系统文件属于哪个rpm包

    rpm -qf 系统文件名

    -f 文件(file)

  11. 查询软件包的依赖性

    rpm -qR 包名

    -R 查询软件包的依赖性(requires)

    -p 查询未安装包信息(package,写包全名)

  12. RPM包校验

    rpm -V 已安装的包名

    -V 检验指定RPM包中的文件(verify)

    验证内容中的8个信息的具体内容如下

    类型解释
    S文件大小是否改变
    M文件的类型或文件的权限(rwx)是否被改变
    5文件MD5校验和是否改变(可以看成文件内容是否改变)
    D设备的主从代码是否改变
    L文件路径是否改变
    U文件的属主(所有者)是否改变
    G文件的属组是否改变
    T文件的修改时间是否改变

    文件类型

    类型解释
    c配置文件(config file)
    d普通文档(document)
    g"鬼"文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
    l授权文件(license file)
    r描述文件(read me)
  13. RPM包中文件提取

    rpm2cpio 包全名 | cpio -idv .文件绝对路径

    rpm2cpio 将rpm包转换为cpio格式的命令

    cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

  14. cpio 选项 < [文件|设备]

    -i copy-in模式,还原

    -d 还原时自动新建目录

    -v 显示还原过程

rpm -qf /bin/ls
#查询ls命令属于哪个软件包

mv /bin/ls	/tmp/
#造成ls命令误删除假象

rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.e16.i686.rpm | cpio -idv ./bin/ls
#提取RPM包中ls命令到当前目录的/bin/ls下

cp /root/bin/ls /bin/
#把ls命令复制回/bin/目录,修复文件丢失

3.RPM包管理-yum在线管理

红帽系列Linux的yum是收费的,centOS免费

  1. IP地址配置和网络yum源

    (1)使用 setup命令(红帽子系列专有) 永久生效

    image-20210423235726107

    (2)vi /etc/sysconfig/network-scripts/ifcfg-eth0

    ​ 把 ONBOOT=no改成yes #启动网卡

    (3)重启网络服务

    service network restart

    (4) 网络yum源

    vi /etc/yum.repos.d/CentOS-Base.repo

    名称解释
    [base]容器名称,一定要放在[]中
    name容器说明,可以自己随便写
    mirrorlist镜像站点,这个可以注释掉
    baseurl我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的。如果你觉得慢可以改成你喜欢的yum源地址
    enabled此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
    gpgcheck如果是1是指RPM的数字证书生效,如果是0则不生效
    gpgkey数字证书的公钥文件保存位置,不用修改
  2. yum命令

    1. 查询

      yum list #查询所有可用软件包列表

      yum search 关键字 #搜索服务器上所有和关键字相关的包

    2. 安装

      yum -y install 包名 # -y自动回答yes

    3. 升级

      yum -y update 包名

    4. 卸载

      yum -y remove 包名

    5. YUM软件组管理命令

      yum grouplist #列出所有可用的软件组列表

      yum groupinstall 软件组名 #安装指定软件组,组名可以由grouplist查询出来

      yum groupremove 软件组名 #卸载指定软件组

  3. 光盘yum源搭建

    1. 挂载光盘

      mount /dev/cdrom /mnt/cdrom

    2. 让网络yum源文件失效

      cd /etc/yum.repos.d/
      mv CentOS-Base.repo CentOS-Base.repo.bak
      mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
      mv CentOS-Vault.repo CentOS-Vault.repo.bak
      
    3. 修改关盘yum源文件

      vim CentOS-Media.repo
      
      [c6-media]
      name=CentOS-$releasever - Media
      baseurl=file:///mnt/cdrom
      #地址为你自己的光盘挂载地址
      # file:///media/cdrom
      # file:///media/cdrecorder
      #注释这两个不存在的地址
      gpgcheck=1
      enabled=1
      #把enabled=0改为enabled=1,让这个yum源配置文件生效
      gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
      

4.源码包管理

  1. 源码包和RPM包的区别

    安装之前的区别:概念上的区别

    安装之后的区别:安装位置不同

    RPM包默认安装路径

    路径说明
    /etc/配置文件安装目录
    /usr/bin/可执行的命令安装目录
    /usr/lib/程序所使用的函数库保存位置
    /usr/share/doc基本的软件使用手册保存位置
    /usr/share/man帮助文件保存位置

    源码包安装在指定位置当中,一般是 /usr/local/软件名/

  2. 安装位置不同带来的影响

    RPM包安装的服务可以使用系统服务管理命令(service,红帽专有)来管理,例如RPM包安装apache的启动方法是

    /etc/rc.d/init.d/httpd start
    service httpd start
    

    而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理。如:

    /usr/local/apache2/bin/apachectl start
    
  3. 源码包安装过程

    1. 安装C语言编译器

    2. 下载源码包 http://mirror.bit.edu.cn/apache/httpd

    3. 安装注意事项

      源代码保存位置:/usr/local/src

      软件安装位置:/usr/local

      如何确定安装过程报错:安装过程停止;出现error、warning或no的提示

    4. 源码包安装过程

      下载源码包、解压缩下载的源码包、进入解压缩目录

    5. ./configure软件配置与检查

      定义需要的功能选项、检查系统环境是否符合安装要求、把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑

      ./configure --prefix=/usr/local/apache2

    6. make 编译 make clean 清除编译的临时文件 make install 编译安装

    7. 源码包的卸载: 不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件

5.脚本安装包与软件包选择

  1. 脚本安装包并不是独立的软件包类型,常见安装的是源码包。是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。非常类似于Windows下软件的安装方式

  2. Webmin是一个基于Web的Linux系统管理界面。可以通过图形化的方式设置用户账号、Apache、DNS、文件共享等服务

  3. Webmin安装

    下载软件 http://sourceforge.net/projects/webadmin.files/webmin/

    解压缩,并进入加压缩目录

    执行安装脚本

六、用户和用户组管理

1.用户配置文件

1.1 用户信息文件/etc/passwd

越是对安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。在Linux中主要是通过用户配置文件来查看和修改用户信息

要把普通用户变成管理员用户,只需把该用户的UID变为0即可

字段说明
第1字段用户名称
第2字段密码标志
第3字段UID(用户ID) 0:超级用户 1-499:系统用户(伪用户) 500-65535:普通用户
第4字段GID(用户初始组ID)
第5字段用户说明
第6字段家目录
第7字段登陆之后的shell

初始组:就是指用户一登陆就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组

附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个

shell是Linux的命令解释器,在/etc/passwd中除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin,/usr/bin/passwd等。

1.2 影子文件 /etc/shadow

字段说明
第1字段用户名
第2字段加密密码
加密算法升级为SHA512散列加密算法
如果密码位是"!!" 或 "*"代表没有密码,不能登陆
第3字段密码最后一次修改日期
使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段两次密码的修改间隔时间(和第3字段相比)
第5字段密码有效期(和第3字段相比)
第6字段密码修改到期前的警告天数(和第5字段相比)
第7字段密码修改过期后的宽限天数(和第5字段相比)
0代表密码过期后立即失效
-1代表密码永远不会失效
第8字段账号失效时间,要用时间戳表示
第9字段保留

把时间戳换算为日期

date -d "1970-01-01 16066 days"

把日期换算为时间戳

echo $(($(date --date="2014/01/06"+%s)/86400)+1))

1.3 组信息文件/etc/group 和组密码文件 /etc/gshadow

组信息文件 /etc/group

字段说明
第1字段组名
第2字段组密码标志
第3字段GID
第4字段组中附加用户

组密码文件/etc/gshadow

字段说明
第1字段组名
第2字段组密码
第3字段组管理用户名
第4字段组中附加用户

2.用户管理相关文件

  1. 用户的家目录

    普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700

    超级用户:/root/,所有者和所属组都是root用户,权限是550

  2. 用户的邮箱 /var/spool/mail/用户名

  3. 用户模板目录 /etc/skel #用户家目录下隐藏文件的模板文件

3.用户管理命令

3.1用户添加命令

useradd 命令格式

useradd [选项] 用户名
-u UID		手工指定用户的UID号
-d 家目录	  手工指定用户的家目录
-c 用户说明	 手工指定用户的说明
-g 组名	  手工指定用户的初始组
-G 组名	   指定用户的附加组
-s shell	手工指定用户的登陆shell。默认是/bin/bash

useradd lamp

useradd lamp
grep "lamp" /etc/passwd
grep "lamp" /etc/shadow
grep "lamp" /etc/group
grep "lamp" /etc/gshadow
ll -d /home/lamp/
ll var/spool/mail/lamp

指定选项添加用户

groupadd lamp1
useradd -u 550 -g lamp1 -G root -d /home/lamp1 -c "test user" -s /bin/bash lamp1

用户默认值文件

/etc/default/useradd
GROUP=100		#用户默认组
HOME=/home		#用户家目录
INACTIVE=-1		#密码过期宽限天数(7)
EXPIRE=			#密码失效时间(8)
SHELL=/bin/bash	#默认shell
SKEL=/etc/skel	#模板目录
CREATE_MAIL_SPOOL=yes
				#是否建立邮箱
				
/etc/login.defs
PASS_MAX_DAYS 99999		#密码有效期(5)
PASS_MIN_DAYS 0			#密码修改间隔(4)
PASS_MIN_LEN 5			#密码最小5位(PAM)
PASS_WARN_AGE 7			#密码到期警告(6)
UID_MAX	500				#最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512	#加密模式

3.2 修改用户密码 passwd

passwd 命令格式

passwd [选项] 用户名
-S 查询用户密码的密码状态。仅root用户可用
-l 暂时锁定用户。仅root用户可用
-u 解锁用户。仅root用户可用
--stdin 可以通过管道符输出的数据作为用户的密码

查看密码状态

passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1
#用户名密码设定时间(2013-01-06)密码修改间隔时间(0)
#密码有效期(99999) 警告时间(7) 密码不失效(-1)

锁定用户和解锁用户,在用户shadow的密码前面加了!!,使无法登陆

passwd -l lamp
passwd -u lamp

使用字符串作为用户的密码

echo "123"|passwd --stdin lamp

3.3 修改用户信息 usermod 和 修改用户密码状态chage

修改用户信息usermod

usermod [选项] 用户名
-u UID			修改用户的UID号
-c 用户说明		 修改用户的说明信息
-G 组名		  修改用户的附加组
-L			   临时锁定用户(Lock)
-U			   解锁用户锁定(Unlock)

范例
usermod -c "test user" lamp		#修改用户的说明
usermod -G root lamp			#把lamp用户加入root组
usermod -L lamp					#锁定用户
usermod -U lamp					#解锁用户

修改用户密码状态chage

chage [选项] 用户名
-l			#列出用户的详细密码状态
-d 日期	   #修改密码最后一次更改日期(shadow 3字段)
-m 天数	   #两次密码修改间隔(4字段)
-M 天数      #密码有效期(5字段)
-W 天数	   #密码过期前警告天数(6字段)
-I 天数      #密码过期后宽限天数(7字段)
-E 日期      #密码失效时间(8字段)

范例
chage -d 0 lamp
#这个命令其实是把密码修改日期归0了(shadow第3字段),这样用户一登陆就要修改密码

3.4 删除用户 userdel 用户切换命令 su

删除用户

userdel [-r] 用户名
-r 删除用户的同时删除用户家目录

手工删除用户

vi /etc/passwd
vi /etc/shadow
vi /etc/group
vi /etc/gshadow
rm -rf /var/spool/mail/lamp
rm -rf /home/lamp/

查看用户id

id 用户名

切换用户身份

su [选项] 用户名
- : 选项只使用"-"代表连带用户的环境变量一起切换
-c 命令:仅执行一次命令,而不切换用户身份

范例:
su - root   #切换成root
su - root -c "useradd user1"
#不切换成root,但是执行useradd命令添加user1用户

4.用户组管理命令

  1. 添加用户组

    groupadd [选项] 组名
    -g GID  指定组ID
    
  2. 修改用户组

    groupmod [选项] 组名
    -g GID 修改组ID
    -n 新组名 修改组名
    
    groupmod -n testgrp group
    #把组名group1修改为testgrp
    
  3. 删除用户组

    groupdel 组名
    #组中有初始用户不可以删,有附加用户可以删
    
  4. 把用户添加入组或从组中删除

    gpasswd 选项 组名
    -a 用户名 把用户加入组
    -d 用户名 把用户从组中删除
    

七、权限管理

1.ACL权限

1.1 ACL权限简介与开启

  1. ACL权限简介

    解决所有者、所属组和其他人三种权限不够用的情况

image-20210424235045071
  1. 查看分区ACL权限是否开启

    dumpe2fs -h /dev/sda3
    #dumpe2fs命令是查询指定分区详细文件系统信息的命令
    -h 仅显示超级块中信息,而不显示磁盘块组的详细信息
    
  2. 临时开启分区ACL权限

    mount -o remount,acl /
    #重新挂载根分区,并挂载加入ACL权限
    
  3. 永久开启分区ACL权限

    vi /etc/fstab
    UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl 1 1
    #加入ACL
    
    mount -o remount /
    #重新挂载文件系统或重启动系统,使修改生效
    

1.2 查看与设定ACL权限

  1. 查看ACL命令

    getfacl 文件名
    #查看acl权限
    
  2. 设定ACL权限命令

    setfacl 选项 文件名
    -m 设定ACL权限
    -x 删除指定的ACL权限
    -b 删除所有的ACL权限
    -d 设定默认ACL权限
    -k 删除默认ACL权限
    -R 递归设定ACL权限
    
  3. 给用户设定ACL权限

    image-20210425000219993
    mkdir /project
    useradd zhangsan
    useradd lisi
    useradd st
    
    groupadd tgroup
    gpasswd -a zhangsan tgroup
    gpasswd -a lisi tgroup
    
    chown root:tgroup /project/
    chmod 770 /project/
    
    setfacl -m u:st:rx /project/
    #给用户st赋予r-x权限,使用"u:用户名:权限" 格式
    
  4. 给用户组设定ACL权限

    groupadd tgroup2
    setfacl -m g:tgroup2:rwx project/
    #为组tgroup2分配ACL权限。 使用"g:组名:权限"格式
    

1.3 最大有效权限与删除ACL权限

  1. 最大有效权限mask

    mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限"相与"才能得到用户的真正权限

    image-20210425000902052

    修改最大有效权限

    setfacl -m m:rx 文件名

    #设定mask权限为r-x。使用"m:权限" 格式

  2. 删除ACL权限

    setfacl -x u:用户名 文件名
    #删除指定用户的ACL权限
    
    setfacl -x g:组名 文件名
    #删除指定用户组的ACL权限
    
    setfacl -b 文件名
    #会删除文件的所有的ACL权限
    

1.4 默认ACL权限和递归ACL权限

  1. 递归ACL权限

    递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限

    setfacl -m u:用户名:权限 -R 目录名

  2. 默认ACL权限

    默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限

    setfacl -m d:u:用户名:权限 目录名

2.文件特殊权限

2.1SetUID

  1. SetUID的功能

    只有可以执行的二进制程序才能设定SUID权限

    命令执行者要对该程序拥有x(执行)权限

    命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)

    SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

    passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码

    ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
    

    cat 命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容

    ll /bin/cat
    -rwxr-xr-x 1 root root 47976 6月 22 2012 /bin/cat
    
    image-20210425002257236
  2. 设定SetUID的方法

    #4代表SUID
    chmod 4755 文件名
    chmod u+s 文件名
    
  3. 取消SetUID的方法

    chmod 755 文件名
    chmod u-s 文件名
    
  4. 危险的SetUID

    若对vim命令设定UID权限,则任何用户在执行vim命令时都会成为文件的属主,比如可以修改shadow文件,非常危险

    关键目录应严格控制写权限。比如"/" "/usr"等

    用户的密码设置要严格遵守密码三原则

    对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

2.2 SetGID

  1. SetGID针对文件的作用

    只有可执行的二进制程序才能设置SGID权限

    命令执行者要对该程序拥有x(执行)权限

    命令执行者在执行程序的时候,组身份升级为该程序文件的属组

    SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

    ll /usr/bin/locate
    -rwx--s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate
    
    ll /var/lib/mlocate/mlocate.db
    -rw-r----- 1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db
    

    /usr/bin/locate是可执行二进制程序,可以赋予SGID

    执行用户lamp对/usr/bin/locate命令拥有执行权限

    执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库

    命令结束,lamp用户的组身份返回为lamp组

  2. SetGID针对目录的作用

    普通用户必须对此目录拥有r和x权限,才能进入此目录

    普通用户在此目录中的有效组会变成此目录的属组

    若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组

    cd /tmp/
    mkdir dtest
    chmod g+s dtest
    ll -d dtest
    chmod 777 dtest/
    su - lamp
    cd /tmp/dtest/
    touch abc
    ll
    
  3. 设定SetGID

    2代表SGID
    chmod 2755 文件名
    chmod g+s 文件名
    
  4. 取消SetGID

    chmod 755 文件名
    chmod g-s 文件名
    

2.3 Sticky BIT

  1. SBIT粘着位作用

    粘着位目前只对目录有效

    普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限

    如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件

    ll -d /tmp/
    drwxrwxrwt. 3 root root 4096 12月 13 11:22 /tmp/
    
  2. 设置与取消粘着位

    设置粘着位

    chmod 1755 目录名
    chmod o+t 目录名
    

    取消粘着位

    chmod 777 目录名
    chmod o-t 目录名
    

3.文件系统属性chattr权限

  1. chattr 命令格式

    chattr [+-=][选项] 文件或目录名
    +: 增加权限
    -:删除权限
    =:等于某权限
    
    选项:
    i:如果对文件设置i属性,那么不允许对文件删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件
    a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除
    
  2. 查看文件系统属性

    lsattr 选项 文件名
    选项:
    -a 显示所有文件和目录
    -d 若目标是目录,仅列出目录本身的属性,而不是子文件的
    

4.系统命令sudo权限

root把本来只能是超级用户执行的命令赋予普通用户执行,sudo的操作对象是系统命令

sudo的使用

visudo
#实际修改的是/etc/sudoers文件

root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

授权sc用户可以重启服务器

visudo
sc ALL=/sbin/shutdown -r now

普通用户执行sudo赋予的命令

su - sc
sudo -l
#查看可用的sudo命令
sudo /sbin/shutdown -r now
#普通用户执行sudo赋予的命令

千万不要给普通用户赋予vim权限,否则普通用户将对/etc/passwd 和 /etc/shadow等文件具有管理权限

八、文件系统管理

1. 回顾分区和文件系统

  1. 分区类型

    主分区:总共最多只能分四个

    拓展分区:只能有一个,也算作主分区的一种,也就是说主分区加拓展分区最多有四个。但是拓展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。

    逻辑分区:逻辑分区是在拓展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘,Linux最多支持11个逻辑分区

  2. 分区表示方法

    image-20210426225531715
    分区设备文件名
    主分区1/dev/sda1
    主分区2/dev/sda2
    主分区3/dev/sda3
    拓展分区/dev/sda4
    逻辑分区1/dev/sda5
    逻辑分区2/dev/sda6
    逻辑分区3/dev/sda7
    image-20210426225926227
    分区设备文件名
    主分区1/dev/sda1
    拓展分区/dev/sda2
    逻辑分区1/dev/sda5
    逻辑分区2/dev/sda6
    逻辑分区3/dev/sda7
  3. 文件系统

    ext2:是ext文件系统的升级版本,RedHat Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件

    ext3:ext3文件系统是ext2文件系统的升级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和最大2TB的文件

    ext4:它是ext3文件系统的升级版。ext4在性能、伸缩性和可靠性方面进行了大量改进。EXT4的变化可以说是翻天覆地的,比如向下兼容EXT3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配、延迟分配、持久预分配、快速FSCK、日志校验、无日志模式、在线碎片整理、inode增强、默认启动barrier等。是centOS6.3的默认文件系统

2.文件系统常用命令

df 文件系统查看命令

df [选项] [挂载点]
选项:
-a 显示所有的文件系统信息,包括特殊文件系统,如/proc、/sysfs
-h 使用习惯单位显示容量,如KB、MB或GB等
-T 显示文件系统类型
-m 是MB为单位显示容量
-k 以KB为单位显示容量。默认就是以KB为单位

du 统计目录或文件大小

du [选项] [目录或文件名]
选项:
-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量。
-h 使用习惯单位显示磁盘占用量,如KB、MB或GB等
-s 统计总占用量,而不列出子目录和子文件的占用量

du和df命令的区别

df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)

du命令是面向文件的,只会计算文件或目录占用的空间

fsck 文件系统修复命令

fsck [选项] 分区设备文件名
选项:
-a:不用显示用户提示,自动修复文件系统
-y:自动修复。和-a作用一致,不过有些文件系统只支持-y

dumpe2fs 显示磁盘状态命令

dumpe2fs 分区设备文件名

查询与自动挂载

mount [-l]
#查询系统中已经挂载的设备,-l会显示卷标名称

mount -a
#依据配置文件/etc/fstab的内容,自动挂载

#挂载命令格式
mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
选项:
-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
-L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项:可以指定挂载的额外选项
参数说明
atime/noatime更新访问时间/不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认为更新
async/sync异步/同步,默认为异步
auto/noauto自动/手动,mount -a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动
defaults定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项
exec/noexec执行/不执行,设定是否允许在文件系统中执行可执行文件,默认是exec允许
remount重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
rw/ro读写/只读,文件系统挂载时,是否具有读写权限,默认是rw
suid/nosuid具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有
user/nouser允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许的,只有root可以挂载分区
userquota写入代表文件系统支持用户磁盘配额,默认不支持
grpquota写入代表文件系统支持组磁盘配额,默认不支持
mount -o remount,noexec /home
#重新挂载/boot分区,并使用noexec权限
cd /home
vi hello.sh
chmod 755 hello.sh
./hello.sh
mount -o remount,exec /home
#记得改回来啊,要不会影响系统启动的

挂载光盘和U盘(移动硬盘)

mkdir /mnt/cdrom/
#建立挂载点

mount -t iso9660 /dev/cdrom /mnt/cdrom
#挂载光盘
mount /dev/sr0 /mnt/cdrom

#卸载命令
umount 设备文件名或挂载点
umount /mnt/cdrom

#挂载U盘

fdisk -l
#查看U盘设备文件名
mount -t vfat /dev/sdb1 /mnt/usb
#注意Linux默认是不支持NTFS文件系统的

支持NTFS文件系统

1.下载NTFS-3G插件
http://www.tuxera.com/community/ntfs-3g-download

2.安装NTFS-3G
tar -zxvf ntfs-3g_ntfsprogs-2013.1.13.tgz
#解压

cd ntfs-3g_ntfsprogs-2013.1.13
#进入解压目录

./configure
#编译器准备。没有指定安装目录,安装到默认位置

make
#编译

make install
#编译安装

3.使用
mount -t ntfs-3g 分区设备文件名 挂载点

3.fdisk分区

  1. 添加新硬盘

    image-20210426234437907
  2. 查看新硬盘

    fdisk -l

  3. 使用fdisk命令分区

    fdisk /dev/sdb

    image-20210426234558535
  4. 重新读取分区表信息

    partprobe

  5. 格式化分区

    mkfs -t ext4 /dev/sdb1

  6. 建立挂载点并挂载

    mkdir /disk1
    mount /dev/sdb1 /disk1/
    

4.分区自动挂载与fstab文件修复

  1. /etc/fstab文件

    字段说明
    第一字段分区设备文件名或UUID(硬盘通用唯一识别码)
    第二字段挂载点
    第三字段文件系统名称
    第四字段挂载参数
    第五字段指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份
    第六字段指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高
  2. 分区自动挂载

    vi /etc/fstab
    ...省略部分输出...
    /dev/sdb5    /disk5    ext4    defaults    1    2
    
    #检测是否可以挂载
    mount -a
    
  3. /etc/fstab文件修复

    #启动时报错,可以进行重新挂载写权限,修复fstab

    mount -o remount,rw /

5.分配swap分区

  1. 新建swap分区

    fdisk /dev/sdb
    别忘记把分区ID改为82
    
  2. 格式化

    mkswap /dev/sdb1

  3. 加入swap分区

    swapon /dev/sdb1
    #加入swap分区
    
    swapoff /dev/sdb1
    #取消swap分区
    
  4. swap分区开机自动挂载

    vi /etc/fstab
    /dev/sdb1    swap    swap    defaults    0    0
    
  5. free 命令

    free
    #查看内存与swap分区使用状况
    cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程
    buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程
    

九、Shell基础

1. Shell概述

  1. Shell是什么

    Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序

    image-20210427000517096

    Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux的系统命令

  2. Shell的分类

    Bourne Shell:从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh

    C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名

    Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh

    Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell

  3. Linux支持的Shell

    /etc/shells

2.Shell脚本的执行方式

  1. echo 输出命令

    echo [选项] [输出内容]
    选项:
    -e:	支持反斜线控制的字符转换
    
    echo -e "ab\bc"
    #删除左侧字符
    
    echo -e "a\tb\tc\nd\te\tf"
    #制表符与换行符
    
    echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"
    #按照十六进制ASCII码也同样可以输出
    
    echo -e "\e[1;31m abcd \e[0m"
    #输出颜色
    # \e[1 表示开启颜色输出
    # \e[0m 表示结束颜色输出
    #30m=黑色 31m=红色 32m=绿色 33m=黄色
    #34m=蓝色 35m=洋红 36m=青色 37m=白色
    
image-20210428000826051
  1. 第一个脚本

    vi hello.sh
    
    #!/bin/Bash
    #The first program
    
    echo -e "hello world"
    
  2. 脚本执行

    赋予执行权限,直接运行
    chmod 755 hello.sh
    ./hello.sh
    
    通过Bash调用执行脚本
    bash hello.sh
    

    使用 dos2unix 脚本名 可以将windows下的换行符转换成linux下的换行符

    yum -y install dos2unix #安装命令

3.Bash的基本功能

3.1历史命令

history [选项][历史命令保存文件]
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件 ~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改

历史命令的调用

  • 使用上下箭头调用以前的历史命令
  • 使用 “!n” 重复执行第n条历史命令
  • 使用 “!!” 重复执行上一条命令
  • 使用 “!字串” 重复执行最后一条以该字串开头的命令

3.2命令别名与常用快捷键

alias 别名='原命令'
#设定命令别名

alias
#查询命令别名

vi /root/.bashrc
#让别名永久生效

unalias 别名
删除别名

命令执行时顺序

  • 第一顺位执行用绝对路径或相对路径执行的命令
  • 第二顺位执行别名
  • 第三顺位执行Bash的内部命令
  • 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

Bash常用快捷键

image-20210428002624764

3.3输入输出重定向

  1. 标准输入输出

    设备设备文件名文件描述符类型
    键盘/dev/stdin0标准输入
    显示器/dev/stdout1标准输出
    显示器/dev/stderr2标准错误输出
  2. 输出重定向

    image-20210428003133473
  3. 输入重定向

    wc [选项] [文件名]
    选项:
     -c 统计字节数
     -w 统计单词数
     -l 统计行数
    
    命令<文件 把文件作为命令的输入
    命令<<标识符...标识符  把标识符之间内容作为命令的输入
    

3.4多命令顺序执行与管道符

  1. 多命令顺序执行

    image-20210428003522551

    范例:

    ls;date;cd /user; pwd

    dd if=输入文件 of=输出文件 bs=字节数 count=个数
    #dd是进行磁盘复制或数据复制的命令
    选项:
    	if=输入文件    指定源文件或源设备
    	of=输出文件    指定目标文件或目标设备
    	bs=字节数     指定一次输入/输出多少字节,即把这些字节看做一个数据块
    	count=个数    指定输入/输出多少个数据块
    date;dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date
    
    ls anaconda-ks.cfg && echo yes
    ls /root/test || echo no
    命令 && echo yes || echo no
    
  2. 管道符

    命令1 | 命令2
    #命令1的正确输出作为命令2的操作对象
    例子:
    ll -a /etc | more
    netstat -an | grep "ESTABLISHED"
    
  3. grep

    grep [选项] "搜索内容" 文件名
    选项:
    -i    忽略大小写
    -n:   输出行号
    -v:   反向查找
    --color=auto    搜索出的关键字用颜色显示
    

3.5 通配符与其他特殊符号

  1. 通配符

    image-20210429001121444
    cd /tmp/
    rm -rf *
    touch abc
    touch abcd
    touch 012
    touch 0abc
    ls ?abc
    ls [0-9]*
    ls [^0-9]*
    
  2. Bash中其他特殊符号

    image-20210429001659963
    反引号与$()
    echo `ls`
    echo $(date)
    
    单引号与双引号
    name=sc
    echo '$name'
    echo "$name"
    echo '$(date)'
    echo "$(date)"
    

4.Bash的变量

4.1用户自定义变量

  1. 什么是变量

    变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息

  2. 变量设置规则

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是"2name"则是错误的

  • 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型

  • 变量用等号连接值,等号左右两侧不能有空格

  • 变量的值如果有空格,需要使用单引号或双引号包括

  • 在变量的值中,可以使用"\"转义符

  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含"$变量名"或用${变量名}

  • 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令

  • 环境变量名建议大写,便于区分

  1. 变量分类
  • 用户自定义变量
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据
  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
  • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
  1. 本地变量

    #变量定义
    name="shen chao"
    
    #变量叠加
    aa=123
    aa="$aa"456
    aa=${aa}789
    
    #变量调用
    echo $name
    
    #变量查看
    set
    
    #变量删除
    unset name
    

4.2 环境变量

  1. 环境变量是什么

    用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效

    pstree查看进程树

  2. 设置环境变量

    export 变量名=变量值
    #申明环境变量,export关键字
    
    env
    #查询变量
    
    unset 变量名
    #删除变量
    
  3. 系统常见环境变量

    PATH:系统查找命令的路径

    echo $PATH
    

    PATH="$PATH":/root/sh

    #PATH变量叠加

定义系统提示符的变量

image-20210429005302993
例子:
PS1='[\u@\t\w]\$'
PS1='[\u@\@\h\#\W]\$'
PS1='[\u@\h\W]\$'

4.3 位置参数变量

image-20210430002013843
例子1
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1 + $num2))
#变量sum的和是num1加num2
echo $sum
#打印变量sum的值

例子2:
#!/bin/bash
echo "A total of $# parameters"
#使用$#代表所有参数的个数
echo "The parameters is:$*"
#使用$*代表所有的参数
echo "The parameters is:$@"
#使用$@也代表所有参数

例子3:$*与$@的区别
#!/bin/bash
for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
	do
		echo "The parameters is:$i"
	done
x=1
for y in "$@"
#$@中的每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几次
	do
		echo "The parameter$x is:$y"
		x=$(($x+1))
	done

4.4 预定义变量

  1. 预定义变量
image-20210430003000286
#!/bin/bash
echo "The current process is $$"
#输出当前进程的PID
#这个PID就是variable.sh这个脚本执行时,生成的进程的PID

find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件
#符号&的意思是把命令放入后台执行
echo "The last one Daemon process is $!"
  1. 接收键盘输入

    read [选项][变量名]
    选项:
    -p "提示信息":在等待read输入时,输出提示信息
    -t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间
    -n 字符数:read命令只接受指定的字符数,就会执行
    -s:隐藏输入的数据,适用于机密信息的输入
    
    #!/bin/bash
    
    read -t 30 -p "Please input your name:"name
    #提示"请输入姓名"并等待30秒,把用户的输入保存入变量name中
    echo "Name is $name"
    
    read -s -t 30 -p "Please input your age:"age
    #年龄是隐私,所以我们用"-s"选项隐藏输入
    echo -e "\n"
    echo "Age is $age"
    
    read -n 1 -t 30 -p "Please select your gender[M/F]:"gender
    #使用"-n 1"选项只接受一个输入字符就会执行(都不用输入回车)
    echo -e "\n"
    echo "Sex is $gender"
    

5.Bash的运算符

5.1数值运算与运算符

  1. declare声明变量类型

    declare [+/-][选项] 变量名
    选项:
    -: 给变量设定类型属性
    +: 取消变量的类型属性
    -i: 将变量声明为整数型(integer)
    -x: 将变量声明为环境变量
    -p: 显示指定变量的被声明的类型
    
  2. 数值运算

    aa=11
    bb=22
    #给变量aa和bb赋值
    
    #方法1
    declare -i cc=$aa+$bb
    
    #方法2:expr或let数值运算工具
    dd=$(expr $aa + $bb)
    #dd的值是aa和bb的和。注意"+"号左右两侧必须有空格
    
    方法3: "$((运算式))"  或  "$[运算式]"
    ff=$(($aa+$bb))
    gg=$[$aa+$bb]
    
  3. 运算符

    image-20210430004906035
    aa=$(( (11+3)*3/2 ))
    #虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级
    
    bb=$(( 14%3 ))
    #14不能被3整除,余数是2
    
    cc=$(( 1&&0 ))
    #逻辑与运算只有相与的两边都是1,与的结果才是1,否则与的结果是0
    

5.2变量测试与内容替换

image-20210430005212215

测试x=${y-新值}

unset y
#删除变量y

x=${y-new}
#进行测试
echo $x
#new
#因为变量y不存在,所以x=new

y=""
x=${y-new}
echo $x

y=old
x=${y-new}
echo $x
#old

6.环境变量配置文件

6.1环境变量配置文件简介

source 配置文件. 配置文件

环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1、HOSTNAME等默认环境变量

/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc

6.2环境变量配置文件作用

image-20210430010158378

/etc/profile的作用: USER变量、LOGNAME变量、MAIL变量、PATH变量、HOSTNAME变量、HISTSIZE变量、umask、调用/etc/profile.d/*.sh文件

~/.bash_profile的作用 : 调用了~/.bashrc文件、在PATH变量后面加入了" :$HOME/bin "这个目录

~/.bashrc的作用 : 定义默认别名、调用/etc/bashrc

/etc/bashrc的作用: PS1变量、umask、PATH变量、调用/etc/profile.d/*.sh文件

6.3 其他配置文件和登陆信息

注销时生效的环境变量配置文件: ~/.bash_logout

其他配置文件: ~/bash_history

Shell登陆信息:

  • 本地终端欢迎信息: /etc/issue

    image-20210430010854422
  • 远程终端欢迎信息: /etc/issue.net

    转义符在/etc/issue.net文件中不能使用

    是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入"Banner /etc/issue.net"行才能显示(记得重启SSH服务)

  • 登陆后欢迎信息 : /etc/motd

    不管是本地登陆还是远程登陆,都可以显示此欢迎信息

十、Shell编程

1.基础正则表达式

  1. 正则表达式与通配符

    正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式

    通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了

  2. 基础正则表达式

    image-20210501222846135

    “*” 前一个字符匹配0次或任意多次

    grep "a*" test_rule.txt
    #匹配所有内容,包括空白行
    
    grep "aa*" test_rule.txt
    #匹配至少包含有一个a的行
    
    grep "aaa*" test_rule.txt
    #匹配最少包含两个连续a的额字符串
    
    grep "aaaaa*" test_rule.txt
    #匹配最少包含4个连续a的字符串
    

    "."匹配除了换行符外任意一个字符

    grep "s..d" test_rule.txt
    #"s..d"会匹配在s和d这两个字母之间一定有两个字符的单词
    
    grep "s.*d" test_rule.txt
    #匹配在s和d字母之间有任意字符
    
    grep ".*" test_rule.txt
    #匹配所有内容
    

    “^” 匹配行首 "$"匹配行尾

    grep "^M" test_rule.txt
    #匹配以大写"M"开头的行
    
    grep "n$" test_rule.txt
    #匹配以小写"n"结尾的行
    
    grep -n "^$" test_rule.txt
    会匹配空白行
    

    "[]"匹配中括号中指定的任意一个字符,只匹配一个字符

    grep "s[ao]id" test_rule.txt
    #匹配s和i字母中要不是a,要不是o
    
    grep "[0-9]" test_rule.txt
    #匹配任意一个数字
    
    grep "^[a-z]" test_rule.txt
    #匹配用小写字母开头的行
    

    “[^]” 匹配除中括号的字符以外的任意一个字符

    grep "^[^a-z]" test_rule.txt
    #匹配不用小写字母开头的行
    
    grep "^[^a-zA-Z]" test_rule.txt
    #匹配不用字母开头的行
    

    "\"转义符

    grep "\.$" test_rule.txt
    #匹配使用"."结尾的行
    

    "{n\}"表示其前面的字符恰好出现n次

    grep "a\{3\}" test_rule.txt
    #匹配a字母连续出现三次的字符串
    
    grep "[0-9]\{3\}" test_rule.txt
    #匹配包含连续的三个数字的字符串
    

    “\{n,\}” 表示其前面的字符出现不小于n次

    grep "^[0-9]\{3,\}[a-z]" test_rule.txt
    #匹配最少用连续三个数字开头的行
    

    ”\{n,m\}“ 匹配其前面的字符至少出现n次,最多出现m次

    grep "sa\{1,3\}i" test_rule.txt
    #匹配在字母s和字母i之间有最少一个a,最多三个a
    

2.字符截取命令

  1. cut字符截取命令
cut [选项] 文件名
选项:
-f 列号      提取第几列
-d 分隔符    按照指定分隔符分割列

vi student.txt(单词之间用的是TAB键)
ID NAME gender Mark
1 Liming  M     86
2   Sc    M     90
3   Gao   M     83

cut -f 2 student.txt
cut -f 2,3 student.txt
cut -d ":" -f 1,3 /etc/passwd

cut命令的局限(空格作为分隔符)
df -h | cut -d " " -f 1,3
  1. printf命令
printf '输出类型输出格式' 输出内容
输出类型:
%ns:	输出字符串。n是数字指代输出几个字符
%ni:    输出整数。n是数字指代输出几个数字
%m.nf   输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数

输出格式:
\a:    输出警告声音
\b:    输出退格键,也就是Backspace键
\f:    清除屏幕
\n:    换行
\r:    回车,也就是Enter
\t:    水平输出退格键,也就是Tab键
\v:    垂直输出退格键,也就是Tab键

printf %s 1 2 3 4 5 6
printf %s %s %s 1 2 3 4 5 6
printf '%s %s %s' 1 2 3 4 5 6
printf '%s %s %s\n' 1 2 3 4 5 6

vi student.txt
ID  Name   PHP Linux MySQL Average
1  Liming  82   95    86     87.66
2    Sc    74   96    87     85.66
3   Gao    99   83    93     91.66

printf '%s' $(cat student.txt)
#不调整输出格式

printf '%s\t %s\t %s\t %s\t %s\t %s\t \n' $(cat student.txt)
#调整格式输出

在awk命令的输出中支持 print 和 printf 命令

print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)

printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符

  1. awk命令
awk '条件1 {动作1} 条件2 {动作2} ...' 文件名
条件(Pattern)
    一般使用关系表达式作为条件
    x > 10 判断变量x是否大于10
    x >= 10 大于等于
    x <= 10 小于等于
动作(Action)
	格式化输出
	流程控制语句
	
vi student.txt
ID  Name   PHP Linux MySQL Average
1  Liming  82   95    86     87.66
2    Sc    74   96    87     85.66
3   Gao    99   83    93     91.66

awk '{printf $2 "\t" $6 "\n"}' student.txt
df -h | awk '{print $1 "\t" $3}'

#BEGIN
awk 'BEGIN{printf "This is a transcript\n"} {printf $2 "\t" $6 "\n"}' student.txt
#END
awk 'END{printf "The End \n"}{printf $2 "\t" $6 "\n"}' student.txt
#FS内置变量
cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"}{printf $1 "\t" $3 "\n"}'
#关系运算符
cat student.txt | grep -v Name | awk '$6>=87 {printf $2 "\n"}'
  1. sed命令

sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令

sed [选项]'[动作]' 文件名
选项:
-n:    一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕
-e:    允许对输入数据应用多条sed命令编辑
-i:    用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出

动作:
a\:    追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用"\"代表数据未完结
c\:    行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用"\"代表数据未完结
i\:    插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾需要用"\"代表数据未完结
d:     删除,删除指定的行
p:     打印,输出指定的行
s:     字串替换,用一个字符串替换另外一个字符串,格式为 "行范围s/旧字串/新字串/g"(和vim中的替换格式类似)
vi student.txt
ID  Name   PHP Linux MySQL Average
1  Liming  82   95    86     87.66
2    Sc    74   96    87     85.66
3   Gao    99   83    93     91.66

#行数据操作
sed '2p' student.txt
#查看文件的第二行
sed -n '2p' student.txt

sed '2,4d' student.txt
#删除第二行到第四行的数据,但不修改文件本身

sed '2a hello' student.txt
#在第二行后追加hello

sed '2i hello\
world' student.txt
在第二行前插入两行数据

sed '2c No such person' student.txt
#数据替换

字符串替换 sed 's/旧字串/新字串/g' 文件名

sed '3s/74/99/g' student.txt
#在第三行中,把74替换成99

sed -i '3s/74/99/g' student.txt
#sed操作的数据直接写入文件

sed -e 's/Liming//g;s/Gao//g' student.txt
#同时把"Liming"和"Gao"替换为空

3.字符处理命令

  1. sort命令
sort [选项] 文件名
选项:
-f:    忽略大小写
-n:    以数值型进行排序,默认使用字符串型排序
-r:    反向排序
-t:    指定分隔符,默认是分隔符是制表符
-k n[,m]  按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)


sort /etc/passwd
#排序用户信息文件

sort -r /etc/passwd
#反向排序

sort -t ":" -k 3,3 /etc/passwd
#指定分隔符是":",用第三字段开头,第三字段结尾排序,就是只用第三字段排序

sort -n -t ":" -k 3,3 /etc/passwd
  1. 统计命令wc
wc [选项] 文件名
选项:
-l:    只统计行数
-w:    只统计单词数
-m:    只统计字符数

4.条件判断

  1. 按照文件类型进行判断
image-20210502004334280
#两种判断格式
test -e /root/install.log
[ -e /root/install.log ]
#中括号两边必须有空格


[ -d /root ]&& echo "yes" || echo "no"
#第一个判断命令如果正确执行,则打印"yes",否则打印"no"
  1. 按照文件权限进行判断
image-20210502004633430
[ -w student.txt ]&& echo "yes" || echo "no"
#判断文件是拥有写权限的
  1. 两个文件之间进行比较
image-20210502005235130
ln /root/student.txt /tmp/stu.txt
#创建硬链接

[ /root/student.txt -ef /tmp/stu.txt ]&& echo "yes" || echo "no"
#yes
  1. 两个整数之间比较
image-20210502005508469
[ 23 -ge 22 ] && echo "yes"||echo "no"
#yes,判断23是否大于等于22

[ 23 -le 22 ] && echo "yes" || echo "no"
#no 判断23是否小于等于22
  1. 字符串的判断
image-20210502005722783
name=sc
#给name变量赋值

[ -z "$name" ] && echo "yes" || eccho "no"
#no,判断name变量是否为空,因为不为空,所以范围no

aa=11
bb=22
#给变量aa和变量bb赋值
[ "$aa"=="$bb" ]&& echo "yes" || echo "no"
#no,判断两个变量的值是否相等,明显不相等,所以返回no
  1. 多重条件判断
image-20210502010047614
aa=11
[ -n "$aa" -a "$aa" -gt 23 ]&&echo "yes"||echo "no"
#no
#判断变量aa是否有值,同时判断变量aa的值是否大于23,因为变量aa的值不大于23,所以虽然第一个判断为真,返回的结果也是假

aa=24
[ -n "$aa" -a "$aa" -gt 23 ]&&echo "yes" || echo "no"
#yes

5.流程控制

5.1 if语句

  1. 单分支if条件判断
if [ 条件判断式 ];then
	程序
fi
或者
if [ 条件判断式 ]
	then
		程序
fi

单分支条件语句需要注意几个点

  • if语句使用fi结尾,和一般语言使用大括号结尾不同
  • [ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
  • then后面跟符合条件之后执行的程序,可以放在[]之后,用";“分割。也可以换行写入,就不需要”;"了

例子:判断分区使用率

#!/bin/bash
#统计根分区使用率

rate=$(df -h | grep "/dev/sda3" | awk '{print $5}' | cut -d "%" -f1)
#把根分区使用率作为变量赋予变量rate

if [ $rate -ge 80 ]
	then
		echo "Warning! /dev/sda3 is full!!"
fi
  1. 双分支if条件判断
if [ 条件判断式 ]
	then
		条件成立时执行的程序
	else
		条件不成立时执行的另一个程序
fi

例子 备份mysql数据库

#!/bin/bash

ntpdate asia.pool.ntp.org &>/dev/null
#同步系统时间

date=$(date +%y%m%d)
#把当前系统时间按照"年月日"格式赋予变量date
size=$(du -sh /var/lib/mysql)
#统计mysql数据库的大小,并把大小赋予size变量

if [ -d /tmp/dbbak ]
	then
		echo "Date:$date!" > /tmp/dbbak/dbinfo.txt
		echo "Date size:$size">> /tmp/dbbak/dbinfo.txt
		cd /tmp/dbbak
		tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt & > /dev/null
		rm -rf /tmp/dbbak/dbinfo.txt
	else
		mkdir /tmp/dbbak
		echo "Date:$date!" > /tmp/dbbak/dbinfo.txt
		echo "Date size:$size">> /tmp/dbbak/dbinfo.txt
		cd /tmp/dbbak
		tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt & > /dev/null
		rm -rf /tmp/dbbak/dbinfo.txt
fi

例子 判断apache是否启动

#!/bin/bash

port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk '{print $2}')
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port
if [ "$port"=="open" ]
	then
		echo "$(date) httpd is ok" >> /tmp/autostart-acc.log
	else
		/etc/rc.d/init.d/httpd start & > /dev/null
		echo "$(date) restart httpd!!" >> /tmp/autostart-err.log
fi
  1. 多分支if条件判断
if [ 条件判断式1 ]
	then
		当条件判断式1成立时,执行程序1
	elif [ 条件判断式2 ]
		then
			当条件判断式2成立时,执行程序2
	else
		当所有条件都不成立时,最后执行此程序
fi

例子 判断用户输入的是什么文件

#!/bin/bash

read -p "Please input a filename:"file
#接收键盘的输入,并赋予变量file

if [ -z "$file" ]
#判断file变量是否为空
	then
		echo "Error,please input a filename"
		exit 1
	elif [ ! -e "$file" ]
	#判断file的值是否存在
		then
			echo "Your input is not a file"
			exit 2
	elif [ -f "$file" ]
	#判断file的值是否为普通文件
		then
			echo "$file is a regulare file"
	elif [ -d "file" ]
	#判断file的值是否为目录文件
		then
			echo "$file is a directory"
	else
		echo "$file is an other file"
fi

5.2 case语句

case $变量名 in
	"值1")
		如果变量的值等于值1,则执行程序1
		;;
	"值2")
		如果变量的值等于值2,则执行程序2
		;;
	*)
		如果变量的值都不是以上的值,则执行此程序
		;;
esac

例子:判断用户输入

#!/bin/bash
read -p "Please choose yes/no:" -t 30 cho
case $cho in
	"yes")
		echo "Your choose is yes!"
	"no")
		echo "Your choose is no!"
	*)
		echo "Your choose is error!"
		;;
esac

5.3 for循环

  1. 语法1
for 变量 in 值1 值2 值3
	do
		程序
	done

例子:打印时间

#!/bin/bash
for time in morning noon afternoon evening
	do
		echo "This time is $time!"
	done

例子:批量解压缩脚本
#!/bin/bash
ls /lamp
ls *.tar.gz > ls.log
for i in $(cat ls.log)
	do
		tar -zxf $i & >/dev/null
	done
rm -rf /lamp/ls.log
  1. 语法2
for ((初始值;循环控制条件;变量变化))
	do
		程序
	done


#例子,从1加到100
#!/bin/bash

s=0
for((i=1;i<=100;i=i+1))
	do
		s=$(($s+$i))
	done
echo "The sum of 1+2+...+100 is :$s"

#例子:批量添加指定数量的用户
#/bin/bash
read -p "Please input user name:"-t 30 name
read -p "Please input the number of users:"-t 30 num
read -p "Please input the password of users:"-t 30 pass
if[ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
	then
		y=$(echo $num|sed 's/^[0-9]*$//g')
			if[ -z "$y" ]
				then
					for((i=1;i<=$num;i=i+1))
						do
							/usr/bin/useradd $name$i & > /dev/null
							echo $pass |/usr/bin/passwd --stdin "$name$i" & > /dev/null
						done
			fi
fi

5.4 whie循环

while[ 条件判断式 ]
	do
		程序
	done

#例子:从1加到100
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
	do
		s=$(($s+$i))
		i=$(($i+1))
	done
echo "The sum is:$s"

until循环

until [ 条件判断式 ]
	do
		程序
	done

#例子,从1加到100
i=1
s=0
until [ $i -gt 100 ]
#循环指定变量i的值大于等于100,就停止循环
	do
		s=$(($s+$i))
		i=$(($i+1))
	done
echo "The sum is:$s"

十一、Linux服务管理

1.服务简介与分类

  1. 服务的分类.
image-20210502163343295
  1. 启动与自启动

    ​ 服务启动就是在当前系统中让服务运行,并提供功能

    ​ 服务自启动是指让服务在系统开机或重启动之后,随着系统的启动而自动启动服务

  2. 查询已安装的服务

    RPM包安装的服务 : chkconfig --list #查看服务自启动状态,可以看到所有RPM包安装的服务

    源码包安装的服务 : 查看服务安装位置,一般是/usr/local下

    源码包安装在指定位置,一般是/usr/local , RPM包安装在默认位置

2.RPM包安装服务的管理

  1. 独立服务的管理
/etc/init.d/		启动脚本位置
/etc/sysconfig/		初始化环境配置文件位置
/etc/				配置文件位置
/etc/xinetd.conf	xinetd配置文件
/etc/xinetd.d		基于xinetd服务的启动脚本
/var/lib/			服务产生的数据放在这里
/var/log/			日志

独立服务的启动

/etc/init.d 独立服务名 start|stop|status|restart
service 独立服务名 start|stop|status|restart

service --status-all
#常见的查询命令

独立服务的自启动

chkconfig [--level 运行级别] [独立服务名] [on|off]
#chkconfig --level 2345 httpd on

修改 /etc/rc.d/rc.local (推荐使用)
#在文件中写入服务的启动命令,如
#/etc/rc.d/init.d/httpd start


使用ntsysv命令管理自启动
  1. 基于xinetd服务的管理

安装xinetd与telnet

yum -y install xinetd
yum -y install telnet-server

xinetd服务的启动

vi /etc/xinetd.d/telnet

service telnet								#服务名称为telnet
{
	flag			= REUSE					#标志为REUSE,设定TCP/IP socket可重用
	socket_type 	= stream				#使用TCP协议数据包
	wait			= no					#允许多个连接同时连接
	user			= root					#启动服务的用户是root
	server			= /usr/sbin/in.telnetd	#服务的启动程序
	log_on_failure	+= USERID				#登陆失败后,记录用户的ID
    disable			= no					#服务不启动
}

重启xinetd服务

service xinetd restart

xinetd服务的自启动

chkconfig telnet on
#启动和自启动是保持一致的
ntsysv

3.源码包安装服务的管理

源码包安装服务的启动 : 使用绝对路径,调用启动脚本来启动.不同的源码包的启动脚本不同.可以查看源码包的安装说明,查看启动脚本的方法

/usr/local/apache2/bin/apachectl start|stop

源码包服务的自启动

vi /etc/rc.d/rc.local
加入
/usr/local/apache2/bin/apachectl start

让源码包的 apache 服务能被 service 命令管理启动

ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache

让源码包的 apache 服务能被 chkconfig 与ntsysv 命令管理自启动

vi /etc/init.d/apache
#chkconfig:35 86 76
#指定httpd脚本可以被chkconfig命令管理.格式是:chkconfig:运行级别 启动顺序 关闭顺序
#description:source package apache
#说明,内容随意

chkconfig --add apache
#把源码包apache加入chkconfig命令

4.服务管理总结

image-20210502170533168

十二、 Linux系统管理

1. 进程管理

1.1 进程查看

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源

进程管理的作用: 判断服务器健康状态,查看系统中所有进程,杀死进程

查看系统中所有进程

ps aux
#查看系统中所有进程,使用BSD操作系统格式

ps -le
#查看系统中所有进程,使用Linux标准命令格式

USER:该进程是由哪个用户产生的
PID: 进程的ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源
VSZ:该进程占用虚拟内存的大小,单位KB
RSS:该进程占用实际物理内存的大小,单位KB
TTY:该进程是在哪个终端中运行的.其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端.tty7是图形终端.pts/0-255代表虚拟终端
STAT:进程状态.常见的状态有:R运行,S睡眠,T停止状态,s包含子进程,+位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名

查看系统健康状态

top [选项]
选项:
-d 秒数: 指定top命令每隔几秒更新。默认是3秒
在top命令的交互模式当中可以执行的命令
?或h:	显示交互模式的帮助
P:		以CPU使用率排序,默认就是此项
M:		以内存的使用率排序
N:		以PID排序
q:		退出top

第一行为任务队列信息

内容说明
12:26:46系统当前时间
up 1 day,13:32系统的运行时间,本机已经运行1天13小时32分钟
2 users当前登陆了两个用户
load average:0.00 0.00 0.00系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷

第二行为进程信息

内容说明
Tasks:95 total系统中的进程总数
1 running正在运行的进程数
94 sleeping睡眠的进程
0 stopped正在停止的进程
0 zombie僵尸进程。如果不是0,需要手工检查僵尸进程

第三行为CPU信息

内容说明
Cpu(s) 0.1%us用户模式占用的CPU百分比
0.1%sy系统模式占用的CPU百分比
0.0%ni改变过优先级的用户进程占用的CPU百分比
99.7%id空闲CPU的CPU百分比
0.1%wa等待输入/输出的进程的占用CPU百分比
0.0%hi硬中断请求服务占用的CPU百分比
0.1%si软中断请求服务占用的CPU百分比
0.0%stst(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比

第四行为物理内存信息

内容说明
Mem:625344k total物理内存的总量,单位KB
571504k used已经使用的物理内存数量
53840k free空闲的物理内存数量,我们使用的虚拟机总共只分配了628MB内存,所以只有53MB空闲内存了
65800k buffers作为缓冲的内存数量

第五行交换分区(swap)信息

内容说明
Swap:524280k total交换分区(虚拟内存)的总大小
0k used已经使用的交互分区的大小
524280k free空闲交换分区的大小
409280k cached作为缓存的交互分区的大小

查看进程树

pstree [选项]
选项:
-p:		显示进程的PID
-u:		显示进程的所属用户

1.2 终止进程

image-20210502180328104
kill -l
#查看可用的进程信号
kill -1 22354
#重启进程
kill -9 22368
#强制杀死进程

killall命令

killall [选项][信号] 进程名
#按照进程名杀死进程
选项:
-i:		交互式,询问是否要杀死某个进程
-I:		忽略进程名的大小写

pkill命令

pkill [选项][信号] 进程名
#按照进程名终止进程
选项:
-t 终端号:	按照终端号踢出用户

w
#使用w命令查询本机已经登陆的用户

pkill -t -9 pts/1
#强制杀死从pts/1 虚拟终端登陆的进程

2.工作管理

把进程放入后台

tar -zcf etc.tar.gz /etc &

top
#在top命令执行的过程中,按下ctrl+z快捷键

查看后台的工作

jobs [-l]
选项:
	-l 显示工作的PID

注:"+"号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。"-"号代表倒数第二个放入后台的工作

将后台暂停的工作恢复到前台执行

fg %工作号
参数:
	%工作号	%可以省略,但是注意工作号和PID的区别

将后台暂停的工作恢复到后台执行

bg %工作号
注:后台恢复执行的命令是不能和前台有交互的,否则不能恢复到后台执行

3.系统资源查看

vmstat命令监控系统资源

vmstat [刷新延时 刷新次数]
例如:
vmstat 1 3

dmesg开机时内核检测信息

dmesg
dmesg | grep CPU

free命令查看内存使用状态

free [-b|-k|-m|-g]
选项:
-b:		以字节为单位显示
-k:		以KB为单位显示,默认就是以KB为单位显示
-m:		以MB为单位显示
-g:		以GB为单位显示

缓存和缓冲的区别: 简单来说缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的

查看CPU信息

cat /proc/cpuinfo

uptime命令

uptime
#显示系统的启动时间和平均负载,也就是top命令的第一行。w命令可以看到这个数据

查看系统与内核相关信息

uname [选项]
选项:
-a:		查看系统所有相关信息
-r:		查看内核版本
-s:		查看内核名称

判断当前系统的位数

file /bin/ls

查看当前Linux系统的发行版本

lsb_release -a

列出进程打开或使用的文件信息

lsof [选项]
#列出进程调用或打开的文件的信息

选项:
-c 字符串:		只列出以字符串开头的进程打开的文件
-u 用户名:		只列出某个用户的进程打开的文件
-p pid:		  列出某个PID进程打开的文件

4. 系统定时任务

crond服务管理与访问控制

service crond restart
chkconfig crond on

用户的crontab设置

crontab [选项]
选项:
-e:		编辑crontab定时任务
-l:		查询crontab任务
-r:		删除当前用户所有的crontab任务

crontab -e

#进入crontab编辑界面。会打开vim编辑你的工作

#标准格式 ***** 执行的任务

imgimgimg

例子

*/5 * * * * /bin/echo "11" >> /tmp/test
5 5 * * 2 /sbin/shutdown -r now
0 5 1,10,15 * * /root/sh/autobak.sh

十三、日志管理

1.日志管理简介

  1. 日志服务

    在CentOS6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服务更加先进,功能更多。但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的,所以学习起来基本和syslogd服务一致

    rsyslogd的新特点

  • 基于TCP网络协议传输日志信息
  • 更安全的网络传输方式
  • 有日志消息的及时分析框架
  • 后台数据库
  • 配置文件中可以写简单的逻辑判断
  • 与syslog配置文件相兼容

确定服务启动

ps aux|grep rsyslogd
#查看服务是否启动

chkconfig --list |grep rsyslog
#查看服务是否自启动
  1. 常见日志的作用
image-20210502184209450

除了系统默认的日志外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是有rsyslogd服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志

image-20210502185911300

2.rsyslogd日志服务

基本日志格式包含以下四列

  • 事件产生的时间
  • 发生事件的服务器的主机名
  • 产生事件的服务名或程序名
  • 事件的具体信息
  1. /etc/rsyslog.conf配置文件
authpriv.* /var/log/secure
#服务名称[连接符号]日志等级 日志记录位置

#认证相关服务,所有日志等级记录在/var/log/secure日志中
image-20210502190610094

连接符号

  • "*"代表所有日志等级,比如"authpriv.*"代表authpriv认证信息服务产生的日志,所有的日志等级都记录
  • "."代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:"cron.info"代表cron服务产生的日志,只要日志等级大于等于info级别,就记录
  • ".="代表只记录所需等级的日志,其他等级的都不记录。比如: "*.=emerg"代表人和日志服务产生的日志,只要等级是emerg等级就记录。这种用法极少见,了解就好
  • ".!"代表不等于,也就是除了该等级的日志外,其他等级的日志都记录

日志等级

image-20210502191220476

日志记录位置

  • 日志文件的绝对路径,如"/var/log/secure"
  • 系统设备文件,如"/dev/lp0"
  • 转发给远程主机,如"@192.168.0.210:514"
  • 用户名,如"root"
  • 忽略或丢弃日志,如"~"

3.日志轮替

日志文件的命名规则 :

如果配置文件中拥有"dateext"参数,那么日志会用日期来作为日志文件的后缀,例如"secure-20130605".这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可

如果配置文件中没有"dateext"参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的"secure"日志会自动改名为"secure.1",然后新建"secure"日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1"会自动改名为"secure.2”,当前的"secure"日志会自动改名为"secure.1",然后也会新建"secure"日志,用来保存新的日志,以此类推

logrotate配置文件

image-20210502192133794

把apache日志加入轮替

vi /etc/logrotate.conf
/usr/local/apache2/log2/access_log{
	daily
	create
	rotate 30
}

logrotate命令

logrotate [选项]配置文件名
选项:如果此命令没有选项,则会按照配置文件中的条件进行日志轮替
-v:显示日志轮替过程。加了-v选项,会显示日志的轮替的过程
-f:强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有的日志进行轮替

十四、启动管理

1.CentOS 6.x启动管理

1.1系统运行级别

运行级别

image-20210502192817503

运行级别命令

runlevel
#查看运行级别命令

init 运行级别
#改变运行级别命令

系统默认运行级别

vim /etc/inittab
id:3:initdefault:
#系统开机后直接进入哪个运行级别

1.2 系统启动过程

image-20210503130850349

initramfs内存文件系统

CentOS 6.x中使用initramfs内存文件系统取代了CentOS 5.x中的initrd RAM Disk。他们的作用类似,可以通过启动引导程序加载到内存中,然后加载启动过程中所需要的内核模块,比如USB、SATA、SCSI硬盘的驱动和LVM、RAID文件系统的驱动

mkdir /tmp/initramfs
#建立测试目录

cp /boot/initramfs-2.6.32-279.e16.i686.img /tmp/initramfs/
#复制initramfs文件

cd /tmp/initramfs/
file initramfs-2.6.32-279.e16.i686.img
mv initramfs-2.6.32-279.e16.i686.img initramfs-2.6.32-279.e16.i686.img.gz
#修改文件的后缀名为.gz

gunzip initramfs-2.6.32-279.e16.i686.img.gz
#解压缩

file initramfs-2.6.32-279.e16.i686.img
cpio -ivcdu < initramfs-2.6.32-279.e16.i686.img
#解压缩

调用/etc/init/rcS.conf配置文件主要功能是两个:

​ 先调用/etc/rc.d/rc.sysinit,然后由/etc/rc.d/rc.sysinit配置文件进行Linux系统初始化

​ 然后再调用/etc/inittab,然后由/etc/inittab配置文件确定系统的默认运行级别

由/etc/rc.d/sysinit初始化

1.获得网络环境
2.挂载设备
3.开机启动画面Plymouth(取代了过往的RHGB)
4.判断是否启用SELinux
5.显示于开机过程中的欢迎画面
6.初始化硬件
7.用户自定义模块的加载
8.配置内核的参数
9.设置主机名
10.同步存储器
11.设备映射器即相关的初始化
12.初始化软件磁盘阵列(RAID)
13.初始化LVM的文件系统功能
14.检验磁盘文件系统(fsck)
15.设置磁盘配额(quota)
16.重新以可读写模式挂载系统磁盘
17.更新quota(非必要)
18.启动系统虚拟随机数生成器
19.配置机器(非必要)
20.清除开机过程中当中的临时文件
21.创建ICE目录
22.启动交换分区(swap)
23.将开机信息写入/var/log/dmesg

调用/etc/rc.d/rc文件

运行级别参数传入/etc/rc.d/rc这个脚本之后,由这个脚本文件按照不同的运行级别启动/etc/rc[0-6].d/目录中的相应的程序

/etc/rc3.d/k?? 开头的文件(??是数字)会按照数字顺序依次关闭

/etc/rc3.d/S?? 开头的文件(??是数字)会按照数字顺序依次启动

2.启动引导程序 grub

2.1Grub配置文件

  1. grub中分区表示
image-20210502214616271
  1. grub配置文件
vi /boot/grub/grub.conf

default=0	默认启动第一个系统
timeout=5	等待时间,默认是5秒
splashimage=(hd0,0)/grub/splash.xpm.gz
#这里是指定grub启动时的背景图像文件的保存位置的
hiddenmenu	隐藏菜单


title CentOS (2.6.32-279.el6.i686)
    root (hd0,0)	是指启动程序的保存分区
    kernel /vmlinuz-2.6.32-279.el6.i686 ro root=UUID=b9a7a1a8-767f-4a87-8a2b-a535edb362c9 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    #定义内核加载时的选项
    initrd /initramfs-2.6.32-279.el6.i686.img
    #指定了initramfs内存文件系统镜像文件的所在位置

2.2Grub加密与字符界面分辨率调整

  1. grub加密
grub-md5-crypt
#生成加密密码串

vi /boot/grub/grub.conf
default=0
timeout=5
password --md5 $1$Y84LB1$8tMY2PibScmuOCc8z8U35/
#password选项放在整体设置处。
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
…省略部分内容…

2、纯字符界面分辨率调整 grep "CONFIG_FRAMEBUFFER_CONSOLE" /boot/config-2.6.32-279.el6.i686

#查询内核是否支持分辨率修改

image-20210502215312577
vi /boot/grub/grub.conf

kernel /vmlinuz-2.6.32-279.el6.i686 ro root=UUID=b9a7a1a8-767f-4a87-8a2ba535edb362c9 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF8 rd_NO_LVM rd_NO_DM rhgb quiet vga=791

3.系统修复模式

  1. 单用户模式常见的错误修复
  • 遗忘root密码

  • 修改系统默认运行级别

  1. 光盘修复模式

    重要系统文件丢失,导致系统无法启动

bash-4.1# chroot /mnt/sysimage 
#改变主目录 
sh-4.1# cd /root 
sh-4.1# rpm -qf /etc/inittab 
#查询下/etc/inittab文件属于哪个包。 
sh-4.1# mkdir /mnt/cdrom 
#建立挂载点 
sh-4.1# mount /dev/sr0 /mnt/cdrom 
#挂载光盘

sh-4.1# rpm2cpio /mnt/cdrom/Packages/initscripts-8.45.3-1.i386.rpm | cpio -idv ./etc/inittab 
#提取inittab文件到当前目录 
sh-4.1 # cp etc/inittab /etc/inittab 
#复制inittab文件到指定位置

3、Linux的安全性

image-20210502215502141

十五、备份与恢复

1.备份概述

1、Linux系统需要备份的数据 /root/目录: /home/目录: /var/spool/mail/目录: /etc/目录: 其他目录:

安装服务的数据

​ apache需要备份的数据: 配置文件、网页主目录 、 日志文件

​ mysql需要备份的数据:

​ 源码包安装的mysql:/usr/local/mysql/data/

​ RPM包安装的mysql:/var/lib/mysql/

2、备份策略

​ 完全备份:完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录

​ 增量备份

image-20210502215701603

​ 差异备份

image-20210502215730710

2.dump和restore命令

1、dump命令

dump [选项] 备份之后的文件名 原文件或目录
选项:
    -level: 就是我们说的0-9十个备份级别
    -f 文件名: 指定备份之后的文件名
    -u: 备份成功之后,把备份时间记录在/etc/dumpdates文件
    -v: 显示备份过程中更多的输出信息
    -j: 调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式,默认压缩等级是2
    -W: 显示允许被dump的分区的备份等级及备份时间

备份分区

dump -0uj -f /root/boot.bak.bz2 /boot/
#备份命令。先执行一次完全备份,并压缩和更新备份时间
cat /etc/dumpdates
#查看备份时间文件
cp install.log /boot/
#复制日志文件到/boot分区
dump -1uj -f /root/boot.bak1.bz2 /boot/
#增量备份/boot分区,并压缩
dump –W
#查询分区的备份时间及备份级别的

备份文件或目录

dump -0j -f /root/etc.dump.bz2 /etc/
#完全备份/etc/目录,只能使用0级别进行完全备份,而不再支持增量备份
  1. restore命令
restore [模式选项] [选项]

模式选项:restore命令常用的模式有以下四种,这四个模式不能混用。
    -C:比较备份数据和实际数据的变化
    -i: 进入交互模式,手工选择需要恢复的文件。
    -t: 查看模式,用于查看备份文件中拥有哪些数据。
    -r: 还原模式,用于数据还原。
选项:
	-f: 指定备份文件的文件名

比较备份数据和实际数据的变化

mv /boot/vmlinuz-2.6.32-279.el6.i686 /boot/vmlinuz-2.6.32-279.el6.i686.bak
#把/boot目录中内核镜像文件改个名字
restore -C -f /root/boot.bak.bz2
#restore发现内核镜像文件丢失

查看模式

restore -t -f boot.bak.bz2

还原模式

#还原boot.bak.bz2分区备份
#先还原完全备份的数据
mkdir boot.test
cd boot.test/
restore -r -f /root/boot.bak.bz2
#解压缩
restore -r -f /root/boot.bak1.bz2
#恢复增量备份数据

#还原/etc/目录的备份etc.dump.bz2
restore -r -f etc.dump.bz2
#还原etc.dump.bz2备份
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值