Linux基础知识与系统管理
第一讲:Linux简介
一:开源(指开放源代码)软件的特点
二:Linux应用领域
第二讲:Linux系统安装
一:系统分区
是使用分区编辑器(partition editor)在磁盘上划分几个逻辑部分。碟片一旦划分成数个分区(partition),不同类的目录与文件可以存储进不同的分区。
二:分区类型
主分区:最多只能由4个
扩展分区:最多只能有1个;主分区加扩展分区最多有4个;不能写入数据,也不能格式化,只能包含逻辑分区
逻辑分区:可以写入数据和格式化,
硬盘不仅要分区,还要格式化,这样才能写入数据
格式化(高级格式化)又称逻辑格式化,它是指根据用户选定的文件系统(如FAT16,FAT32,NTFS,EXT2,EXT3,EXT4等),在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表,目录表等用于文件管理的磁盘空间。
三:Linux文件系统结构
总结:分区:把大硬盘分为小的逻辑分区
格式化:写入文件系统,之前数据会被清空
分区设备文件名:给每个分区定义设备文件名
挂载:给每个分区点分配挂载点
设置Linux的IP地址命令:[root@localhost~]#ifconfig eth0 X.X.X.X
第三讲:给Linux初学者的建议
一:Linux注意事项
二:服务器管理和维护建议
关于Linux各目录的作用
/bin/ 作用:存放系统命令的目录,普通用户和超级用户都可以执行。不过存放在/bin下的命令在单用户模式下也可以执行
/sbin/ 作用:保存和系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是有些命令可以允许普通用户查看
/usr/bin/ 作用:存放系统命令的目录,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
/usr/sbin/ 作用:存放根文件系统不必要的系统管理命令,例如多数服务程序。只有超级用户可以使用。大家其实可以注意到Linux的系统,在所有“sbin”目录中保存的命令只有超级用户可以使用,”bin“目录中保存的命令所有用户都可以使用
/boot/ 作用:系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grup)文件等
/dev/ 作用:设备文件保存位置。我们已经说过Linux中所有内容以文件形式保存,包括硬件。那么这个目录就是用来保存所有硬件设备文件的
/etc/ 作用:配置文件保存位置。系统内所有采用默认安装方式(rpm安装)的服务的配置文件全部都保存在这个目录当中。如用户账户和密码,服务的启动脚本,常用服务的配置文件等
/home/ 作用:普通用户的家目录。建立每个用户时,每个用户要有一个默认登录位置,这个位置就是这个用户的家目录,所有普通用户的家目录就是在/home下建立一个和用户名相同的目录。如用户user1的家目录就是/home/user1
/lib/ 作用:系统调用的函数库保存位置
/lost+found/ 作用:当系统意外崩溃或机器意外关机。而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。这个目录只在每个分区中出现,例如/lost+found就是根分区的备份恢复目录。/boot/lost+found就是/boot分区的备份恢复目录
/media/ 作用:挂载目录。系统建议是用来挂载媒体设备的,例如软盘和光盘
/mnt/ 作用:挂载目录,早期Linux中只有这一个挂载目录,并没有细分。现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区
/misc/ 作用:挂载目录。系统建议用来挂载NFS服务的共享目录。我们在刚刚已经解释挂载,应该知道只要是一个已经建立的空目录就可以作为挂载点。那么系统虽然准备了三个默认挂载目录/media,/mnt,/misc,但是到底在哪个目录中挂载什么设备都可以由管理员自己决定。例如我接触Linux的时候,默认挂载目录只有/mnt一个,所以养成了在/mnt下建立不同目录挂载不同设备的习惯。如/mnt/cdrom挂载光盘,/mnt/usb挂载U盘,这都是可以的
/opt/ 作用:第三方安装的软件保存位置。这个目录就是放置和安装其他软件的位置,我手工安装的源码包软件都可以安装到这个目录当中,不过我还是更加习惯把软件放置到/usr/local/目录当中,也就是说/usr/local/目录也可以用来安装软件
/proc/ 作用:虚拟文件系统,该目录中的数据并不保存到硬盘中,而是保存到内存当中。主要保存系统的内核,进程,外部设备状态和网络状态灯。如/proc/cpuinfo是保存CPU信息的,/proc/devices是保存设备驱动的列表的,/proc/filesystems是保存文件系统列表的,/proc/net/是保存网络协议信息的
/sys/ 作用:虚拟文件系统。和/proc目录相似,都是保存在内存当中的,主要是保存于内核相关信息的
/root/ 作用:超级用户的家目录。普通用户家目录在/home下,超级用户家目录直接在“/”下
/srv/ 作用:服务数据目录。一些系统服务启动之后,可以在这个目录中保存所需要的数据
/tmp/ 作用:临时目录。系统存放临时文件的目录,该目录下所有用户都可以访问和写入。我们建议此目录中不能保存重要数据,最好每次开机都把该目录清空
/usr/ 作用:系统软件资源目录。注意usr不是user的缩写,而是“Unix SoftwreResource”的缩写,所以不是存放用户数据,而是存放系统软件资源的目录。系统中安装的软件大多数保存在这里。所以除了/usr/bin/和/usr/sbin/这两个目录,我在介绍几个/usr/下的二级目录
/var/ 作用:动态数据保存位置。主要保存缓存,日志以及软件运行所产生的文件
关于服务器注意事项
第四讲:Linux常用命令
一:命令格式与目录处理命令ls
命令格式:命令[-选项] [参数] 例:ls -la /etc
说明:1)个别命令使用不遵循此格式
2)当有多个选项时,可以写在一起
3) 简化选项与完整选项 -a 等于-all
目录处理命令:ls
命令名称:ls
命令英文原意:list
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录文件
语法:ls 选项[-ald] [文件或目录]
-a 显示所有文件,包括隐藏文件,注意隐藏文件是以.开头的
-l 详细信息显示
-d 查看目录属性
[root@localhost ~]# ls -l
总用量 68
-rw-r–r--. 1 root root 1613 1月 5 01:06 anaconda-ks.cfg
1:是个文件引用技术
第1个Root:是这个文件所有者
第2个root:是这个文件所属组,这个所属组名称叫root
1613:表示文件的大小,默认单位是字节
1月 5 01:06:表示最后文件所修改的时间
rw-r—r— -文件类型(-二进制文件 d目录 l链接文件)
u g o
u所有者 g所属组 o其他人
r读 w写 x 执行
二:目录处理命令mkdir
命令名称:mkdir
命令英文原意:make directories
命令所在路径:/bin/mkdir
执行权限:所有用户
语法:mkdir -p [目录名]
功能描述:创建新目录
-p 递归创建
例如:[root@localhost ~]# mkdir /tmp/xiaodianying 创建一个叫电影的目录
[root@localhost ~]# mkdir /tmp/Japan/boduo
mkdir: 无法创建目录"/tmp/Japan/boduo": 没有那个文件或目录,如果想在一个不存在的文件再创建一个文件,必须加-p参数
创建多个文件的命令:mkdir /tmp/文件1/文件2
目录处理命令cd
命令名称:cd
命令英文原意:chang directory
命令所在路径:shell内置命令
执行权限:所有用户
语法:cd[目录]
功能描述:切换目录
例如:cd /tmp/Japan/cangjing 进入/Japan下的cangjing目录
目录处理命令pwd
命令名称:pwd
命令英文原意:print working directory
命令所在路径:/bin/pwd
执行权限:所有用户
语法:pwd
功能描述:显示当前目录
例如:[root@localhost ~]# cd /tmp/Japan/cangjing/ 切换到指定目录
[root@localhost ~]# cd … 回到上一级目录
文件处理命令:rmdir
命令名称:rmdir
命令英文原意:remove empty directories
命令所在路径:/bin/rmdir
执行权限:所有用户
语法:rmdir[目录名]
功能描述:删除空目录
例如:[root@localhost ~]#rmdir /tmp/Japan/boduo/ 删除Japan目录下boduo文件夹
目录处理命令cp
命令名称:cp
命令英文原意:copy
命令所在路径:/bin/cp
执行权限:所有用户
语法:cp -rp[原文件或目录][目标目录]
-r 复制目录
-p 保留文件属性
功能描述:复制文件或目录
例如: [root@localhost Japan]# cp -r /tmp/Japan/cangjing /root/
将目录/tmp/Japan/cangjing复制到目录/root下
复制多个目录的命令:[root@localhost ~]# cp /root/install.log /root/install.log.syslog /tmp/
将/root下的两个目录复制到/tmp目录下
复制目录过去并且对目录改名的命令:
[root@localhost ~]# cp -r /tmp/Japan/longze/ /root/shenchao把longze改名为shenchao
[root@localhost ~]# ls -l /tmp/install.log
-rw-r–r--. 1 root root 46832 2月 5 13:50 /tmp/install.log
[root@localhost ~]# cp -p /root/install.log /tmp/
cp:是否覆盖"/tmp/install.log"? y
[root@localhost ~]# ls -l /tmp/install.log
-rw-r–r--. 1 root root 46832 1月 5 01:06 /tmp/install.log
可以看到-p可以把目录原属性也一起复制过来
目录处理命令:mv
命令名称:mv
命令英文原意:move
命令所在路径:/bin/mv
执行权限:所有用户
语法:mv[原文件或目录][目标目录]
功能描述:剪切文件,改名
例如:[root@localhost Japan]# mv /tmp/Japan/cangjing/ /root/ 把cangjing剪切到root下
[root@localhost Japan]# mv /tmp/Japan/longze/ /root/nvshen 剪切过去并改名nv
对当前目录改名命令:[root@localhost ~]# mv cangjing/ canglaoshi 把ca改名为cls
目录处理命令:rm
命令名称:rm
命令英文原意:remove
命令所在路径:/bin/rm
执行权限:所有用户
语法:rm -rf[文件或目录]
-r 删除目录
-f 强制执行,没有询问信息
功能描述:删除文件
例如:[root@localhost ~]# rm grub.conf 删除grub.conf
三:文件处理命令touch
命令名称:touch
命令所在路径:/bin/touch
执行权限:所有用户
语法:touch[文件名]
功能描述:创建空文件
例如:[root@localhost tmp]# touch shenchao girl 创建shenchao 和girl两个文件
[root@localhost tmp]# touch “program files” 创建名叫"program files"文件
文件处理命令:cat
命令名称:cat
命令所在路径:/bin/cat
执行权限:所有用户
语法:cat[文件名]
功能描述:显示文件内容
-n 显示行号
例如:[root@localhost tmp]# cat -n /etc/issue 显示issue内容并显示行号
1 CentOS release 6.10 (Final)
2 Kernel \r on an \m
3
文件处理命令:tac
命令名称:tac
命令所在路径:/usr/bin/tac
执行权限:所有用户
语法:tac[文件名]
功能描述:显示文件内容(反向列示)
例如:[root@localhost tmp]# tac /etc/issue
文件处理命令:more
命令名称:more
命令所在路径:/bin/more
执行权限:所有用户
语法:more[文件名]
(空格)或f 翻页
(Enter) 换行
Q或q 退出
功能描述:分页显示文件内容
例如:[root@localhost tmp]# more /etc/services
文件处理命令:less
命令名称:less
命令所在路径:/usr/bin/less
执行权限:所有用户
语法:less[文件名]
功能描述:分页显示文件内容(可向上翻页)
例如:[root@localhost tmp]# less /etc/services
按箭头上可以一行一行找。也可以加/+关键字 进行搜索
文件处理命令:head
命令名称:head
命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head[文件名]
功能描述:显示文件前面几行
-n 指定行数
例如:[root@localhost tmp]# head -n 10 /etc/services 查看services前10行
文件处理命令:tail
命令名称:tail
命令所在路径:/usr/bin/tail
执行权限:所有用户
语法:tal[文件名]
功能描述:显示文件后面几行
-n 指定行数
-f 动态显示文件末尾内容
例如:[root@localhost tmp]# tail -n 18 /etc/services 查看/services末尾18行内容
四:链接命令
文件处理命令ln
命令名称:ln
命令英文原意:link
命令所在路径:/bin/ln
执行权限:所有用户
语法:ln -s[原文件][目标文件]
-s 创建软链接
功能描述:生成链接文件
例如:[root@localhost ~]# ln -s /etc/issue /tmp/issue.soft
创建文件/etc/issue的软链接/tmp/issue.soft
[root@localhost ~]# ln -s /etc/issue /tmp//issue.hard
创建文件/etc/issue的软链接/tmp/issue.hard
软链接特征:类似Windows快捷方式
硬链接特征
五:权限管理命令
命令名称:chmod
命令英文原意:change the permissions mode of a file
命令所在路径:/bin/chmod
执行权限:所有用户
语法:chmod [{ugoa}{±=}{rwx}][文件或目录]//u是所属者 g是所属组 o是其他人 a是all
[mode=421][文件或目录]//权限的数字表示 r=4 w=2 x=1
-R 递归修改
功能描述:改变文件或目录权限
例如:[root@localhost ~]# ls -l Japanlovestory.list
-rw-r–r--. 1 root root 0 2月 5 14:37 Japanlovestory.list
[root@localhost ~]# chmod u+x Japanlovestory.list //给u增加执行权限
[root@localhost ~]# ls -l Japanlovestory.list
-rwxr–r--. 1 root root 0 2月 5 14:37 Japanlovestory.list
给不同对象分配权限命令:
[root@localhost ~]# chmod g+w,o-r Japanlovestory.list
[root@localhost ~]# ls -l Japanlovestory.list
-rwxrw----. 1 root root 0 2月 5 14:37 Japanlovestory.list
文件目录权限总结
代表字符:r
权限:读权限
对文件的含义:可以查看文件内容
对目录的含义:可以列出目录中的内容
代表字符:w
权限:写权限
对文件的含义:可以修改文件内容
对目录的含义:可以在目录中创建,删除文件
代表字符:x
权限:执行权限
对文件的含义:可以执行文件
对目录的含义:可以进入目录
其他权限管理命令:chown
命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:所有用户
语法:chown[用户][文件或目录]
功能描述:改变文件或目录的所有者
例如:把文件/abcd所有者linzhiling改为root
[root@localhost ~]# ls -l /home/linzhiling/abcd
-rwxrwxrwx. 1 linzhiling linzhiling 0 2月 7 22:40 /home/linzhiling/abcd
[root@localhost ~]# chown root /home/linzhiling/abcd
[root@localhost ~]# ls -l /home/linzhiling/abcd
-rwxrwxrwx. 1 root linzhiling 0 2月 7 22:40 /home/linzhiling/abcd
权限管理命令:chgrp
命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户
语法:chgrp[用户组][文件或目录]
功能描述:改变文件或目录的所属组
例如:改变文件fengjie从shenchao的所属组为lampbrother
[root@localhost tmp]# ls -l fengjie
-rw-r–r--. 1 shenchao root 0 2月 7 22:52 fengjie
[root@localhost tmp]# groupadd lampbrother 添加一个组为lampbrother
[root@localhost tmp]# chgrp lampbrother fengjie
[root@localhost tmp]# ls -l fengjie
-rw-r–r--. 1 shenchao lampbrother 0 2月 7 22:52 fengjie
权限管理命令:umask
命令名称:umask
命令英文原意:the user file-creation mask
命令所在路径:shell内置命令
执行权限:所有用户
语法:umask[-S]
-S 以rwx形式显示新建文件缺省权限
功能描述:显示,设置文件的缺省权限
例如:[root@localhost tmp]# umask -S
u=rwx,g=rx,o=rx
[root@localhost tmp]# mkdir lamp
[root@localhost tmp]# ls -ld lamp/
drwxr-xr-x. 2 root root 4096 2月 7 23:22 lamp/
六:文件搜索命令
文件搜索命令:find
命令名称:find
命令所在路径:/bin/find
执行权限:所有用户
语法:find[搜索范围][匹配范围]
功能描述:文件搜索
例如:1.在目录/etc中查找文件init
[root@localhost tmp]# find /etc/ -name init
/etc/sysconfig/init
3.在目录/etc中查找以init开头的文件
[root@localhost tmp]# find /etc -name init*
/etc/rc.d/init.d
在目录/etc中查找以init开头末尾还有3个字母的文件
[root@localhost tmp]# find /etc -name init???
/etc/inittab
在目录/etc中查找以init开头末尾还有3个字母的文件,并且不区分大小写
[root@localhost tmp]# find /etc -iname init???
/etc/inittab
/etc/INITTAB
在根目录下查找大于100MB的文件,+n是大于 -n是小于 n等于
[root@localhost tmp]# find / -size +204800
/sys/devices/pci0000:00/0000:00:0f.0/resource1
注意:一个数据块是512字节,也就是0.5k 而100MB=102400KB=204800块
数据块是linux存储的最小的单位
在根目录下查找所有者为shenchao的文件,-group是根据所属组查找
[root@localhost tmp]# find /home -user shenchao
/home/shenchao
/home/shenchao/.gnome2
在/etc下查找5分钟内被修改过属性的文件和目录
-admin 访问时间access -cmin 文件属性 change -mmin 文件内容 modify
[root@localhost tmp]# find /etc/ -cmin -5
在/etc下查找大于80MB小于100MB的文件
-a两个条件同时满足 -o两个条件满足任意一个即可
-type根据文件类型查找(f文件 d目录 l软链接文件)
-inum根据i节点查找
[root@localhost tmp]# find /etc -size +163840 -a -size -204800
[root@localhost tmp]# find /etc -name init* -a -type f 查找init开头的文件
在/etc下查找inittab文件并显示其详细信息
-exec/-ok命令{ }\;对搜索结果执行操作
[root@localhost tmp]# find /etc -name inittab -exec ls -l {} ;
-rw-r–r--. 1 root root 884 1月 5 01:06 /etc/inittab
[root@localhost tmp]# find /etc -name init* -a -type f -exec ls -l {} ;
-rwxr-xr-x. 1 root root 4623 4月 27 2018 /etc/sysconfig/network-scripts
在etc目录下查找init开头的文件并显示详细信息
[root@localhost tmp]# find . -inum 401881 -exec rm {} ;
删除i节点为401881文件
其他文件搜索命令:locate
命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户
语法:locate 文件名
功能描述:在文件资料库中查找文件,速度块并且定期更新,不像find全盘查找
例如:[root@localhost ~]# touch /root/yangmi //创建了一个文件夹
[root@localhost ~]# locate yangmi 查找这个文件夹,并没有显示
[root@localhost ~]# find /root -name yangmi 用find命令查找则查找的处理
/root/yangmi
[root@localhost ~]# updatedb //更新资料库
[root@localhost ~]# locate yangmi 再查找则显示的出来
/root/yangm
[root@localhost ~]# touch /root/Teacher.Cang
[root@localhost ~]# updatedb
[root@localhost ~]# locate teacher.cang
[root@localhost ~]# locate -i teacher.cang //locate接i不区分大小写
/root/Teacher.Cang
命令名称:which
命令所在路径:/usr/bin/which
执行权限:所有用户
语法:which命令
功能描述:搜索命令所在目录及别名信息
例如:[root@localhost ~]# which cp
alias cp=‘cp -i’ cp的别名
/bin/cp cp所在路径
命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户
语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助文档路径
例如:[root@localhost ~]# whereis useradd
useradd: /usr/sbin/useradd /usr/share/man/man8/useradd.8.gz 帮助文档路径、
文件搜索命令:grep
命令所在路径:/bin/grep
执行权限:所有用户
语法:grep -iv [指定字串][文件]
功能描述:在文件中搜寻字串匹配的行并输出
-i 不区分大小写
-v 排除指定字串
例如:[root@localhost ~]# grep multiuser /etc/inittab
[root@localhost ~]# grep -i multiuser /etc/inittab //不区分大小写
[root@localhost ~]# grep -v ^# /etc/inittab //以#号开头的行去掉
七:帮助命令
命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户
语法:man [命令或配置文件]
功能描述:获得帮助消息
例如:[root@localhost ~]# man ls //查看ls帮助信息
man 1 命令的帮助 man 5 配置文件的帮助
[root@localhost ~]# man 5 passwd
[root@localhost ~]# whatis ls //读取这个ls命令干什么用的
ls (1) - list directory contents
ls (1p) - list directory contents
[root@localhost ~]# apropos services //查看配置文件的信息
[root@localhost ~]# touch –help //用于查看touch有哪些选项
命令名称:help
命令所在路径:shell内置命令
执行权限:所有用户
语法:help命令
功能描述:获得shell内置命令的帮助信息
例如:[root@localhost ~]# help umask //查看umask命令的帮助信息
八:用户管理命令
命令名称:useradd
命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:添加新用户
例如:[root@localhost ~]#useradd yangmi
命令名称:passwd
命令所在路径:/usr/bin/passwd
执行权限:所有用户
语法:passwd用户名
功能描述:设置用户密码
例如:[root@localhost ~]#passwd shenchao
命令名称:who
命令所在路径:/usr/bin/who
执行权限:所有用户
语法:who
功能描述:查看登录用户信息
例如:[root@localhost ~]# who
centos tty1 2021-03-02 18:37 (:0)
centos pts/0 2021-03-02 18:38 (:0.0)
root pts/1 2021-03-02 13:40 (192.168.182.1)
登录用户名 登录终端 登录时间 IP地址
命令名称:w
命令所在路径:/usr/bin/w
执行权限:所有用户
语法:w
功能描述:查看登录用户详细信息
例如:[root@localhost ~]# w
14:48:55 up 4:12, 4 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
centos tty1 :0 18:37 ? 13.96s 0.28s pam: gdm-passwod
九:压缩解压命令
命令名称:gzip
命令英文原意:GNUzip
命令所在路径:/bin/gzip
执行权限:所有用户
语法:gzip [文件]
功能描述:压缩文件
压缩后文件格式:gz
例如:[root@localhost tmp]# gzip zhangbozhi
命令名称:gunzip
命令英文原意:GNUunzip
命令所在路径:/bin/gunzip
执行权限:所有用户
语法:gunzip[压缩文件]
功能描述:解压缩.gz的压缩文件
例如:[root@localhost tmp]# gunzip zhangbozhi.gz
[root@localhost tmp]# gzip Japan
gzip: Japan is a directory – ignored //gzip只能压缩目录,不能压缩文件
命令名称:tar
命令所在路径:/bin/tar
执行权限:所有用户
语法:tar 选项[-zcf] [压缩后文件名][目录]
-c 打包 -v 显示详细信息 -f 指定文件名 -z 打包同时压缩
功能描述:打包目录
压缩后文件格式:tar.gz
例如; [root@localhost tmp]# tar -cvf Japan.tar Japan
Japan/
Japan/boduo/
Japan/longze/
Japan/cangjing/
[root@localhost tmp]# tar -zcf Japan.tar.gz Japan //将Japan打包并压缩为tar.gz文件
Tar命令解压缩语法:
-x 解包 -v 显示详细信息 -f 指定解压文件 -z 解压缩
例如:[root@localhost tmp]# tar -zxvf Japan.tar.gz
Japan/
Japan/boduo/
Japan/longze/
命令名称:zip
命令所在路径:/usr/bin/zip
执行权限:所有用户
语法:zip 选项[-r] [压缩后文件名] [文件或目录]
-r 压缩目录
功能描述:压缩文件或目录
压缩后文件格式:zip
例如:[root@localhost tmp]# zip Japan.zip Japan
[root@localhost tmp]# zip -r Japan.zip Japan
updating: Japan/ (stored 0%)
adding: Japan/boduo/ (stored 0%)
adding: Japan/longze/ (stored 0%)
adding: Japan/cangjing/ (stored 0%)
命令名称:unzip
命令所在路径:/usr/bin/unzip
执行权限:所有用户
语法:unzip [压缩文件]
功能描述:解压.zip的压缩文件
例如:[root@localhost tmp]# unzip zhangbozhi.zip 解压文件
命令名称:bzip2
命令所在路径:/usr/bin/bzip2
执行权限:所有用户
语法:bzip2 选项 [-K] [文件]
-k 产生压缩文件后保留原文件
功能描述:压缩文件
压缩后文件格式:.bz2
例如:[root@localhost tmp]# bzip2 -k zhangbozhi
命令名称;bunzip2
命令所在路径:/usr/bin/bunzip2
执行权限:所有用户
语法:bunzip2 选项 [-k] [压缩文件]
-k 解压缩后保留原文件
功能描述:解压缩
例如:[root@localhost tmp]# bunzip2 -k zhangbozhi.bz2
十:网络命令
指令名称:write
指令所在路径:/usr/bin/write
执行权限:所有用户
语法:write <用户名>
功能描述:给用户发消息,以Ctrl+D保存结束
例如:[root@localhost tmp]# write shenchao
指令名称:wall
命令英文原意:write all
指令所在路径:/usr/bin/wall
执行权限:所有用户
语法:wall [message]
功能描述:发广播信息
例如:[root@localhost ~]# wall shenchao is a man //可使所有在线用户收到
命令名称:ping
命令所在路径:/bin/ping
执行权限:所有用户
语法:ping 选项IP地址
-c 指定发送次数
功能描述:测试网络连通性
例如:[root@localhost ~]# ping 192.168.182.128
命令名称:ifconfig
命令英文原意:interface configure
命令所在路径:/sbin/ifconfig
执行权限:root
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
例如:[root@localhost ~]# ifconfig eth0 192.168.182.128
命令名称:mail
命令所在路径:/bin/mail
执行权限:所有用户
语法:mail[用户名]
功能描述:查看发送电子邮件
例如:[root@localhost ~]#
[root@localhost ~]# mail root //给root用户发邮件
Subject: test 邮件题目
hello nihao 邮件内容
EOT
[root@localhost ~]# mail //查看邮件
Heirloom Mail version 12.4 7/29/08. Type ? for help.
“/var/spool/mail/root”: 1 message 1 new //邮件保存位置
N 1 root Tue Mar 2 19:45 19/608 “test”
命令名称:last
命令所在路径:/usr/bin/last
执行权限:所有用户
语法:last
功能描述:列出目前与过去登入系统的用户信息
例如:[root@localhost ~]# last
shenchao pts/1 192.168.182.1 Tue Mar 2 19:26 still logged in
命令名称:lastlog
命令所在路径:/usr/bin/lastlog
执行权限:所有用户
语法:lastlog
功能描述:检查某特定用户上次登录的时间
例如:[root@localhost ~]# lastlog //显示最后登录用户
命令名称:traceroute
命令所在路径:/bin/traceroute
执行权限:所有用户
语法:traceroute
功能描述:显示数据包到主机间的路径
例如:[root@localhost ~]# traceroute www.lampbrother.net
命令名称:netstat
命令所在路径:/bin/netstat
执行权限:所有用户
语法:netstat [选项]
功能描述:显示网络相关信息
选项:
-t : TCP协议
-u: UDP协议
-l: 监听
-r: 路由
-n: 显示IP地址和端口号
例如:[root@localhost ~]# netstat -tlun //查看本机监听的端口
Active Internet connections (only servers)
[root@localhost ~]# netstat -an //查看本机所有的网络连接
[root@localhost ~]# netstat -rn //查看本机路由表
命令名称:setup
命令所在路径:/usr/bin/setup
执行权限:root
语法:setup
功能描述:配置网络
例如:[root@localhost ~]# setup
命令名称:mount
命令位置:/bin/mount
执行权限:所有用户
命令语法:mount[-t 文件系统] 设备文件名挂载点
例如:[root@localhost ~]# mount /dev/sr0 /mnt/cdrom 挂载设备
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost cdrom]# umount /dev/sr0 //卸载挂载点。注意不能进挂载点目录卸载
umount: /mnt/cdrom: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost ~]# umount /dev/sr0
十一:关机重启命令
shutdown命令
[root@localhost ~]# shutdown [选项] 时间
选项:-c 取消前一个关机命令
-h 关机 -r 重启
其他关机命令
[root@localhost ~]#half
[root@localhost ~]# poweroff
[root@localhost ~]#init 0
其他重启命令
[root@localhost ~]# reboot
[root@localhost ~]# init 6
系统运行级别:0是关机 1 单用户 2 不完全多用户,不含NFS服务
3是完全多用户 4 未分配 5 图形界面 6是重启
[root@localhost ~]# cat /etc/inittab //修改系统默认运行级别
Id:3:initdefault: 注意不要改为0和6
[root@localhost ~]# runlevel //查询系统运行级别
[root@localhost ~]# logout //退出登录命令
第五讲:文本编辑器Vim
Vim简介:Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,它的作用是建立,编辑。显示文本文件
Vim没有菜单,只有命令
Vim三种使用模式如下:
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式:
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序
w 保存文件
按ESC键可随时退出底线命令模式。
Vim工作模式如下:
Vim按键说明
除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用。
第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等
移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可!(常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说,
如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,
会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,
那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。
例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
删除、复制与粘贴
x, X : 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键),
X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx: n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符,『10x』。
dd :删除游标所在的那一整行(常用)
ndd :n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G :删除光标所在到第一行的所有数据
dG :删除光标所在到最后一行的所有数据
d$ :删除游标所在处,到该行的最后一个字符
d0 :那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy :复制游标所在的那一行(常用)
nyy :n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G: 复制游标所在行到第一行的所有数据
yG :复制游标所在行到最后一行的所有数据
y0 :复制光标所在的那个字符到该行行首的所有数据
y$ :复制光标所在的那个字符到该行行尾的所有数据
p, P: p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行!举例来说,
我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后,
那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。
但如果是按下 P 呢?那么原本的第 20 行会被推到变成 30 行。(常用)
J :将光标所在行与下一行的数据结合成同一行
c :重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u :复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
第二部分:一般模式切换到编辑模式的可用的按钮说明
进入输入或取代的编辑模式
i, I: 进入输入模式(Insert mode):i 为『从目前光标所在处输入』,
I 为『在目前所在行的第一个非空格符处开始输入』。(常用)
a, A :进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』,
A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O: 进入输入模式(Insert mode):这是英文字母 o 的大小写。
o 为『在目前光标所在的下一行处输入新的一行』;
O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R :进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc] 退出编辑模式,回到一般模式中(常用)
第三部分:一般模式切换到指令行模式的可用的按钮说明
指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入,
还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开,
若档案已经被更动过,则储存后离开!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。
亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!
例如 『:! ls /home』即可在 vi 当中看 /home 底下以 ls 输出的档案信息!
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!
第六讲:软件包管理
一:软件包管理简介
软件包分类:源码包(脚本安装包)和二进制包(RPM包,系统默认包)
源码包优点是1:开源,如果有足够的能力,可以修改源代码
2:可以自由选择所需的功能
3:软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
4:卸载方便
源码包缺点是1:安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
2:编译过程时间较长,安装比二进制安装时间长
3:因为是编译安装,安装过程中一旦报错,新手很难解决
二进制包优点1:包管理系统简单,只通过几个命令就可以实现包的安装,
升级,查询和卸载
2:安装速度比源码包安装快的多
二进制包缺点1:经过编译,不再可以看到源代码
2:功能选择不如源码包灵活
3:依赖性
二:rpm命令管理—包命名与依赖性
RPM包命名原则如下:
Httpd-2.2.15-15.el6.centos.1.i686.rpm
Httpd是软件包名 2.2.15是软件版本 15是软件发布的次数
el6.centos是适合的Linux平台
i686是适合的硬件平台 rpm是rpm包扩展名
RPM包依赖性
树形依赖:a->b->c
环形依赖:a->b->c->a
模块依赖:模块依赖查询网站(www.rpmfind.net)
三:RPM命令管理-安装升级与卸载
包全名与包名简介
包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径
包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库
RPM安装
rpm -ivh 包全名
选项:-i(install) 安装 -v(verbose) 显示详细信息
-h(hash) 显示进度 --nodeps 不检测依赖性
RPM升级
rpm -Uvh 包全名
选项:-U(upgrate)升级
RPM卸载
rpm -e 包名
选项:-e(erase) 卸载 --nodeps 不检测依赖性
rpm命令管理—查询
1、 查询是否安装
[root@localhost ~]# rpm -q 包名 //查询包是否安装
选项:-q 查询(query)
[root@localhost ~]# rpm -qa //查询所有已经安装的RPM包
选项:-a 所有(all)
2、 查询软件包详细信息
[root@localhost ~]#rpm -qi 包名
选项:-i 查询软件信息(information)
-p 查询未安装包信息(package)
例如:[root@localhost ~]# rpm -qi httpd
3、 查询包中文件安装位置
[root@localhost ~]# rpm -ql 包名
选项:-l 列表(list) -p 查询未安装包信息(package)
4、 查询系统文件属于哪个RPM包
[root@localhost ~]# rpm -qf 系统文件名
选项:-f 查询系统文件属于哪个软件包(file)
例如:[root@localhost ~]# rpm -qf /var/www/icons/up.gif
httpd-2.2.15-69.el6.centos.x86_64
5、 查询软件包的依赖性
[root@localhost ~]# rpm -qR 包名
选项:-R 查询软件包的依赖性(requires)
-p 查询未安装包信息(package)
四:rpm命令管理-校验和文件提取
RPM包校验
[root@localhost ~]# rpm -V 已安装的包名
选项:-V 校验指定RPM包中的文件(verify)
例如:[root@localhost ~]# rpm -V httpd
S.5…T. c /etc/httpd/conf/httpd.conf
验证内容中的8个信息的具体内容如下:
S 文件大小是否改变
M 文件的类型或文件的权限(rwx)是否被改变
5 文件MD5校验和是否改变(可以看成文件内容是否改变)
D 设备的中,从代码是否改变
L 文件路径是否改变
U 文件的属主(所有者)是否改变
G 文件的属组是否改变
T 文件的修改时间是否改变
文件类型
c 配置文件(config file)
d 普通文档(documentation)
g ‘鬼’文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
I 授权文件(license file)
r 描述文件(read me
RPM包中文件提取
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-47.el6.x86_64.rpm | cpio -idv ./bin/ls
rpm2cpio //将rpm包转换为cpio格式的命令
cpio //是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
[root@localhost ~]# rpm -qf /bin/ls //查询ls命令属于哪个软件包
coreutils-8.4-47.el6.x86_64
[root@localhost ~]# cp /root/bin/ls /bin/ //把ls命令复制进/bin/目录,修复文件丢失
五:RPM包管理-yum在线管理
IP地址配置和网络yum源
1、 IP地址配置
[root@localhost ~]# setup //使用setup工具
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 //启动网卡
把ONBOOT=”no”改为ONBOOT=“yes”
[root@localhost ~]# service network restart //重启网络服务
2、 网络yum源
[root@localhost yum.repos.d]# vi CentOS-Base.repo
[base] 容器名称,一定要放在[]中
name 容器说明,可以自己随便写
mirrorlist 镜像站点,这个可以注释掉
baseurl 我们的yum源服务器的地址。默认是Centos官方的yum源服务器。是可以使用的。如果你觉得慢可以改成你喜欢的yum源地址
enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
gpgcheck 如果是1是指RPM的数字证书生效。如果是0则不生效
gpgkey 数字证书的公钥文件保存位置。不用修改
3、 常用yum命令
查询命令
[root@localhost yum.repos.d]# yum list //查询所有可用软件包列表
已加载插件:fastestmirror, refresh-packagekit, security
[root@localhost yum.repos.d]# yum search 关键字
//搜索服务器上所有和关键字相关的包
安装命令
[root@localhost yum.repos.d]# yum -y install 包名
选项:install是安装 -y是自动回答yes
升级命令
[root@localhost yum.repos.d]# yum -y update 包名
选项:update 升级 -y 自动回答yes
卸载命令
[root@localhost yum.repos.d]# yum -y remove 包名
选项:remove 卸载 -y 自动回答yes
YUM软件组管理命令
[root@localhost ~]# yum grouplist //列出所有可用的软件组列表
[root@localhost ~]# yum groupinstall 软件组名
//安装指定软件组,组名可以由grouplist查询出来
[root@localhost ~]# yum groupremove 软件组名 //卸载指定软件组
六:光盘yum源搭建
光盘yum源搭建步骤
1) 挂载光盘
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
2) 让网络yum源文件失效
[root@localhost ~]# cd /etc/yum.repos.d/
3) 修改光盘yum源文件
[root@localhost yum.repos.d]# vim CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
#地址为你自己的光盘挂载地址
#注释这两个不存在的地址
gpgcheck=1
enabled=0
#把enabled=0 改为enabled=1,让这个yum源配置文件生效
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
七:源码包管理
RPM包是安装在默认位置中
/etc/ 配置文件安装目录
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置
源码包安装位置一般是/usr/local/软件名/
安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包 安装的apache的启动方法是:1:/etc/rc/d/init.d/httpd stat 2:service httpd start
而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务管理,如:/usr/local/apache2/bin/apachect1 start
八:脚本安装包
脚本安装包并不是独立的软件包类型,常见安装的是源码包。是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装,非常类似于Windows下软件的安装方式
Webmin的作用:Webmin是一个基于Web的Linux系统管理界面。你就可以通过图形化的方式设置用户账号,Apache,DNS,文件共享等服务
第七讲:用户和用户组管理
一:用户配置文件—用户信息文件
1、用户管理简介:所以越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范,在linux中主要是通过用户配置文件来查看和修改用户信息
2、/etc/passwd
第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)
0:超级用户
1-499:系统用户(伪用户)
500-65535:普通用户
第4字段:GID(用户初始组ID)
第5字段:用户说明
第6字段:家目录
普通用户:/home/用户名/
超级用户:/root/
第7字段:登录之后的Shell
Shell就是linux的命令解释器,在/etc/passwd当中,除了标准shell是/bin/bash之外,还可以写如/sbin/nologin
例如:[shuyang@iZ2ze9yk5mv9ltpu3ofrmpZ ~]$ vim /etc /passwd
root❌0:0:root:/root:/bin/bash
3、初始组和附加组
初始组:就是指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个
二:影子文件
第1字段:用户名
第2字段:加密密码
加密算法升级为SHA512散列加密算法,如果密码位是!!或* 代表没有密码,不能登录
第3字段:密码最后一次修改日期
使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔时间(和第3字段相比)
第5字段:密码有限期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5字段相比)
0代表密码过期后立即失效 -1则代表密码永远不会失效
第8字段:账号失效时间,要用时间戳表示
第9字段:保留
例如:[root@localhost ~]# vim /etc/shadow
root: 6 6 6dpPxg.H1KX74S0EI$0DLWHP4Qj5rmjFF/snX1FdhpTxo9Q4k6gGyYQ/AuiCs/Uzj8FSdCLBs/mSkv/u9sLhK/qzD9NaazzcdMA0Wie.:18631:0:99999:7:::
2、时间戳换算
把时间戳换算为日期
date -d “1970-01-01 16066 days”
把日期换算为时间戳
Echo ( ( (( ((date–date=”2014/01/06”+%s)86400+1))
三:用户配置文件-组信息文件
1、 组信息文件/etc/group
第1字段:组名
第2字段:组密码标志
第3字段:GID
第4字段:组中附加用户
例如:root❌0:
2、 组密码文件 /etc/gshadow
第一字段:组名
第二字段:组密码
第三字段:组管理员用户名
第四字段:组中附加用户
四:用户管理相关文件
1、用户的家目录
普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/root/,所有者和所属组都是root用户,权限是550
2、用户的邮箱
/var/spool/mail/用户名/
例如:[root@localhost ~]# cd /var/spool/mail/
[root@localhost mail]# ls
centos linzhiling root rpc shenchao
3、 用户模板目录 /etc/skel/
五:用户管理命令
1、useradd命令格式
[root@localhost ~]# useradd [选项] 用户名
选项:-u UID:手工指定用户的UID号
-d 家目录:手工指定用户的家目录
-c 用户说明:手工指定用户的说明
-g组名:手工指定用户的初始组
-G组名:指定用户的附加组
-s shell:手工指定用户的登录shell。默认是/bin/bash
例如:[root@localhost ~]# useradd shenchao
添加默认用户
[root@localhost ~]# useradd shenchao
[root@localhost ~]# grep shenchao /etc/passwd
shenchao❌502:502::/home/shenchao:/bin/bash
[root@localhost ~]# grep shenchao /etc/shadow
shenchao: 6 6 6lMS566eR$xWNanZtUKm6YolxmYQJauBxWouac.x8/35Ygv5/ZhugQo0HFlXxMx8UC0r01XR6WHqJAPPNDA8gBLLM.nz.4p/:18688:0:99999:7:::
[root@localhost ~]# grep shenchao /etc/group
shenchao❌502:
[root@localhost ~]# grep shenchao /etc/gshadow
shenchao:!::
[root@localhost ~]# ll -d /home/shenchao
drwx------. 24 shenchao shenchao 4096 3月 2 16:47 /home/shenchao
[root@localhost ~]# ls /var/spool/mail/
centos linzhiling root rpc shenchao
2、用户默认值文件
[root@localhost ~]# cat /etc/default/useradd
GROUP=100 用户默认组
HOME=/home 用户家目录
INACTIVE=-1 密码过期宽限天数
EXPIRE= 密码失效时间
SHELL=/bin/bash 默认shell
SKEL=/etc/skel 模板目录
CREATE_MAIL_SPOOL=yes 是否建立邮箱
[root@localhost ~]# vim /etc/login.defs
PASS_MAX_DAYS 99999 密码有效期
PASS_MIN_DAYS 0 密码修改间隔
PASS_MIN_LEN 5 密码最小5位
PASS_WARN_AGE 7 密码到期警告
UID_MIN 500 最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512 加密模式
3、passwd命令格式
[root@localhost ~]# passwd [选项] 用户名
选项:-S 查询用户密码的密码状态。仅root用户可用
-l 暂时锁定用户。仅root用户可用
-u 解锁用户。仅root用户可用
–stdin 可以通过管道符输出的数据作为用户的密码
查看密码状态
[root@localhost ~]# passwd -S shenchao
shenchao PS 2021-03-02 0 99999 7 -1 (密码已设置,使用 SHA512 加密。)
[root@localhost ~]# cat /etc/shadow | grep shenchao
shenchao: 6 6 6lMS566eR$xWNanZtUKm6YolxmYQJauBxWouac.x8/35Ygv5/ZhugQo0HFlXxMx8UC0r01XR6WHqJAPPNDA8gBLLM.nz.4p/:18688:0:99999:7:::
#用户名密码设定时间2021-03-02 密码修改间隔时间是0
#密码有效期99999 警告时间是7,密码不失效(-1)
4、修改用户信息usermod
[root@localhost ~]# usermod [选项] 用户名
选项:-u UID 修改用户的UID号
-c 用户说明 修改用户的说明信息
-G组名 修改用户的附加组
-L 临时锁定用户(Lock)
-U 解锁用户锁定(Unlocak)
例如:[root@localhost ~]# usermod -c “test user” shenchao //修改用户的说明
[root@localhost ~]# usermod -G root shenchao //把lamp用户加入root组
[root@localhost ~]# usermod -L shenchao //锁定用户
[root@localhost ~]# usermod -U shenchao //解锁用户
5、修改用户密码状态chage
[root@localhost ~]# chage [选项] 用户名
选项:-l 列出用户的详细密码状态
-d日期: 修改密码最后一次更改日期(shadow3字段)
-m天数: 两次密码修改间隔(4字段)
-M天数: 密码有效期
-W天数: 密码过期前警告天数
-I天数: 密码过后宽限天数
-E日期: 账号失效时间
6、用户管理命令userdel和su
删除用户userdel
[root@localhost ~]#userdel [-r] 用户名
选项:-r 删除用户的同时删除用户家目录
手工删除用户(删除user1的配置)
[root@localhost ~]# vim /etc/passwd
user1❌503:504::/home/user1:/bin/bash 删掉这一行
[root@localhost ~]# vim /etc/shadow
[root@localhost ~]# vim /etc/group
[root@localhost ~]# vim /etc/gshadow
[root@localhost ~]#rm -rf /var/spool/mail/lamp
[root@localhost ~]# rm -rf /home/user1
[root@localhost ~]# id shenchao //查看用户的ID号
uid=502(shenchao) gid=502(shenchao) 组=502(shenchao)
切换用户身份su
[root@localhost ~]#su [选项] 用户名
选项:-:选项只使用-代表连带用户的环境变量一起切换
-c命令:仅执行一次命令,而不切换身份
六:用户组管理命令
1、添加用户组
[root@localhost ~]# groupadd [选项] 组名
选项:-g GID: 指定组ID
[root@localhost ~]# groupadd tg
[root@localhost ~]# vim /etc/group
tg❌504:
2、修改用户组
[root@localhost ~]# groupmod [选项] 组名
选项:-g GID:修改组ID
-n 新组名:修改组名
[root@localhost ~]# groupmod -n testgrp group1 //把组名group1修改为testgrp
3、修改用户组
[root@localhost ~]# groupdel 组名
4、把用户添加入组或从组中删除
[root@localhost ~]# gpasswd 选项 组名
选项:-a 用户名:把用户加入组
-d 用户名:把用户从组中删除
第八讲:权限管理
一:ACL权限
1、ACL权限简介
2、查看分区ACL权限是否开启
[root@localhost ~]# df -h //用来检查linux服务器的文件系统的磁盘空间占用情况
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 3.6G 13G 22% /
tmpfs 490M 80K 490M 1% /dev/shm
/dev/sda1 477M 35M 417M 8% /boot
/dev/sr0 3.8G 3.8G 0 100% /media/CentOS_6.10_Final
查看分区ACL权限是否开启
[root@localhost ~]# dumpe2fs -h /dev/mapper/VolGroup-lv_root
dumpe2fs 1.41.12 (17-May-2010)
Default mount options: user_xattr acl
选项:-h 仅显示超级块中信息,而不显示磁盘块组的详细信息
临时开启分区ACL权限
[root@localhost ~]#mount -o remount,acl/
#重新挂载根分区,并挂载加入acl权限
永久开启分区ACL权限
[root@localhost ~]#vi /etc/fstab
UUID=f370a915-28c0-44cd-9fd7-bee60cacda9e /boot ext4 defaults,ACL 1 1 //重新挂载文件系统或重启动系统,使修改生效
[root@localhost ~]#mount -o remount /
#重新挂载文件系统或重启系统,使修改生效
3、查看与设定ACL权限
查看ACL命令
[root@localhost ~]# getfacl 文件名 //查看acl权限
4、设定ACL权限的命令
[root@localhost ~]# setfacl 选项 文件名
选项:-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
5、最大有效权限mask
Mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限
修改最大有效权限
[root@localhost ~]# setfacl -m m:rx 文件名
#设定mask权限为r-x,使用m:权限格式
[root@localhost ~]# getfacl /projiect/
删除ACL权限
[root@localhost ~]# setfacl -x u:用户名 文件名 //删除指定用户的ACL权限
[root@localhost ~]# setfacl -x g:组名 文件名 //删除指定用户组的ACL权限
[root@localhost ~]# setfacl -b 文件名 //会删除文件的所有的ACL权限
二:递归ACL权限
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
setfacl -m u:用户名:权限 -R 文件名
默认ACL权限
默认ACL权限的作用是如果给父目录设定了ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
setfacl -m d:u:用户名:权限 文件名
三:文件特殊权限
1、 SetUID的功能
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x(执行)权限
命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
Passwd命令拥有SetUID权限,所以普通可以修改自己的密码
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 11月 24 2015 /usr/bin/passwd
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 48568 6月 19 2018 /bin/cat
设定SetUID的方法
4代表SUID
Chmod 4755 文件名 chmod u+s 文件名
取消SetUID的方法
Chmod 755 文件名 chmod u-s 文件名
危险的SetUID
关键目录应严格控制写权限。比如/,/usr等
用户的密码设置要严格遵循密码三原则
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限
2、SetGID功能
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的时候,组身份升级为该程序文件的属组
SetGID权限同样只在该程序执行过程中生效,也就是说组身份改变只在程序执行过程中有效
例如:[root@localhost ~]# ll /usr/bin/locate
-rwx–s--x. 1 root slocate 38464 3月 12 2015 /usr/bin/locate
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 2647426 3月 9 09:17 /var/lib/mlocate/mlocate.db
过程:/usr/bin/locate是可执行二进制程序,可以赋予SGID
执行用户shenchao对/usr/bin/locate命令拥有执行权限
执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
命令结束,shenchao用户的组身份返回为shenchao组
SetGID针对目录的作用如下
普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
设定SetGID如下
2代表SGID
Chmod 2755 文件名 chmod g+s 文件名
取消SetGID如下
chmod 755 文件名
chmod g-s 文件名
3、Sticky BIT
SBIT粘着位作用
(1)粘着位目前只对目录有效
(2)普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
(3)如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件
设置与取消粘着位
设置粘着位 chmod 1755 目录名 chmod o+t 目录名
取消粘着位 chmod 777 目录名 chmod o-t 目录名
四:文件系统属性chattr权限
1、chattr 命令格式
[root@localhost ~]#chattr [±=] [选项] 文件或目录名
+:增加权限 -:删除权限 =:等于某权限
选项i:如果对文件设置i属性,那么不允许对文件进行删除,改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件
a:如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除
2、查看文件系统属性
[root@localhost ~]# lsattr 选项 文件名
选项:-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的
五:sudo权限
1、 sudo权限
root把本来只能超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令
2、sudo使用
[root@localhost ~]# visudo //实际修改的是/etc/sudoers文件
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
3、授权shenchao用户可以重启服务器
[root@localhost ~]# visudo
Shenchao ALL=/sbin/shutdown -r now
4、普通用户执行sudo赋予的命令
[root@localhost ~]# su -shenchao
[shenchao@localhost ~]$ sudo -l //查看可用的sudo命令
[shenchao@localhost ~]$ sudo /sbin/shutdown -r now //普通用户执行sudo赋予的命令
第九讲:文件系统管理
一:回顾分区和文件系统
1、分区类型
主分区:总共最多只能分四个
扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用
逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSC硬盘Linux最多支持11个逻辑分区
2、分区表示方法
3、文件系统
ext2:是ext文件系统的升级版本,Red Hat Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件(1TB=1024GB=1024*1024KB)
ext3: ext3文件系统是ext2文件系统的升级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和族弟啊2TB的文件
ext4:它是ext3文件系统的升级版。Ext4在性能,伸缩性和可靠性方面进行了大量改进。Ext4的变化可以说是翻天覆地的,比如向下兼容ext3,最大1EB文件系统和16TB文件,无限数量子目录,Extents连续数据块概念,多块分配,延迟分配,持久性分配,快速FSCK,日志较验,无日志模式,在线碎片整理,inode增强,默认启用barrier等。是CentOS6.3的默认文件系统(1EB=1024PB=1024*1024TB)
二:文件系统常用命令 df,du,fsck,dumpe2fs
1、文件系统查看命令df
[root@localhost ~]# df [选项] [挂载点]
选项:
-a 显示所有的文件系统信息,包括特殊文件系统,如/proc,/sysfs
-h 使用习惯单位显示容量,如KB,MB或GB等
-T 显示文件系统类型
-m 以MB为单位显示容量
-k 以KB为单位显示容量。默认就是以KB为单位
2、统计目录或文件大小
[root@localhost ~]# du [选项] [目录或文件名]
选项:
-a 显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
-h 使用习惯单位显示磁盘占有量,如KB,MB或GB等
-s 统计总占有量,而不列出子目录和子文件的占有量
例如:[root@localhost ~]# df -h
du命令和df命令的区别
df命令是从文件系统考虑的,不光要考虑文件占有的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录占用的空间
3、文件系统修复命令fsck
[root@localhost ~]# fsck [选项] 分区设备文件名
选项:
-a 不用显示用户提示,自动修复文件系统
-y 自动修复。和-a作用一致,不过有些文件系统只支持-y
4、显示磁盘状态命令dumpe2fs
[root@localhost ~]# dumpe2fs 分区设备文件名
三:挂载命令
1、查询与自动挂载
[root@localhost ~]# mount [-l] //查询系统中已经挂载的设备,-l会显示卷标名称
[root@localhost ~]# mount -a //依据配置文件/etc/fstab的内容,自动挂载
2、挂载命令格式
[root@localhost ~]# mount [-t 文件系统] [-L 卷标名] \ [-o 特殊选项] 设备文件名 挂载点
选项:-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660等文件系统
-L 卷标明:挂载指定卷标的分区,而不是安装设备文件名挂载
-o 特殊选项:可以指定挂载的额外选项
四:文件系统常用命令-挂载光盘与U盘
1、挂载光盘
[root@localhost ~]# mkdir /mnt/cdrom //建立挂载点
[root@localhost ~]# mount -t iso9660 /dev/cdrom/mnt/cdrom //挂载光盘
2、卸载命令
[root@localhost ~]# umount 设备文件名或挂载点
[root@localhost ~]# umount /mnt/cdrom
3、挂载U盘
[root@localhost ~]# fdisk -l //查看U盘设备文件名
[root@localhost ~]# mount -t vfat /dev/sdb1/mnt/usb/
注意:Linux默认是不支持NTFS文件系统的
五:fdisk分区-分区过程
1、 添加一块硬盘
2、 查看新硬盘
[root@localhost ~]# fdisk -l
3、使用fdisk命令分区
[root@localhost ~]# fdisk /dev/sdb
4、重新读取分区表信息
[root@localhost ~]# partprobe
5、格式化分区
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
注意:不能格式化扩展分区
6、建立挂载点并挂载
[root@localhost ~]# mkdir /disk1 //创建挂载点
[root@localhost ~]# mount /dev/sdb1 /disk1
[root@localhost ~]# mount //查看是否挂载成功
/dev/sdb1 on /disk1 type ext4 (rw)
/dev/sdb5 on /disk5 type ext4 (rw)
六:分区自动挂载与fstab文件修复
1、/etc/fstab文件
UUID=f370a915-28c0-44cd-9fd7-bee60cacda9e /boot ext4 defaults 1 2
第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂载参数
第五字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份
第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,那么当然1的优先级比2高
2、分区自动挂载
[root@localhost ~]# vim /etc/fstab
[root@localhost ~]# mount -a //依据配置文件/etc/fstab的内容,自动挂载
3、如果vim /etc/fstab编写错误可以尝试/etc/fstab文件修复
[root@localhost ~]# mount -o remount ,rw /
七:分配swap分区
1、free命令
[root@localhost ~]# free //查看内存与swap分区使用状况
total used free shared buffers cached
Mem: 1003020 510688 492332 1744 22828 179196
-/+ buffers/cache: 308664 694356
Swap: 2031612 0 2031612
cached(缓存):是指把读取出来的数据保存在内存当中,当再次读取时,不用读取硬盘而直接从内存当中读取,加速了数据的读取过程
buffer(缓冲):是指在写入数据时,先把分散的写入操作保存到内存中,当达到一定程序再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加速了数据的写入过程
2、新建swap分区
[root@localhost ~]# fdisk /dev/sdb
注意:要把分区ID改为82
3、格式化
[root@localhost ~]# mkswap /dev/sdb6
4、加入swap分区
[root@localhost ~]# swapon /dev/sdb6 //加入swap分区
[root@localhost ~]# swapoff /dev/sdb6 //取消swap分区
5、swap分区开机自动挂载
[root@localhost ~]# vi /etc/fstab
第十讲:Shell基础
一:Shell概述
Shell是一个命令解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序
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
[root@localhost ~]# vi /etc/shells/bin/sh
/bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh
二:脚本执行方式
1、echo输出命令
[root@localhost ~]# echo [选项][输出内容]
选项 -e 支持反斜线控制的字符转换
例如:[root@localhost ~]# echo -e “ab\bc” //删除左侧字符
ac
[root@localhost ~]# echo -e “a\tb\tc\nd\te\tf” //制表符与换行符
a b c
d e f
2、写Shell写脚本
例如:[root@localhost sh]# vim hello.sh
#!/bin/bash //这句必须有
#shenchao //注释
echo “MR.shen is the honest man in Lampbrother”
3、脚本执行
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh 使用相对路径执行
通过bash调用执行脚本
bash hello.sh
三:Bash的基本功能
1、历史命令
[root@localhost ~]# history [选项][历史命令保存文件]
选项 -c 清空历史文件
-w 把缓存中的历史命令写入历史命令保存文件,默认保存位置为~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
历史命令的调用:
使用上,下箭头调用以前的历史命令
使用“!n”重复执行第n条历史命令
使用“!!”重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开头的命令
3、 命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只能在输入命令或文件时,按Tab键就会自动进行补全
4、命令别名
[root@localhost ~]# alias 别名=“原命令” //设定命令别名
[root@localhost ~]# alias //查询命令别名
命令执行时顺序
(1) 第一顺位执行用绝对路径或相对路径执行命令
(2) 第二顺位执行别名
(3) 第三顺位执行Bash的内部命令
(4) 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
让别名永久生效
[root@localhost ~]# vi /root/.bashrc
删除别名 [root@localhost ~]# unalias 别名
5、Bash常用快捷键
6、输入输出重定向
输入重定向
[root@localhost ~]# wc [选项] [文件名]
选项 -c 统计字节数
-w 统计单词数
-l 统计行数
7、多命令顺序执行与管道符
例如:
管道符命令格式:命令1 | 命令2 //命令1的正确输出作为命令2的操作对象
例如:[root@localhost ~]# ll -a /etc/ | more
总用量 2060
drwxr-xr-x. 118 root root 12288 3月 12 08:05 .
dr-xr-xr-x. 30 root root 4096 3月 12 08:04 …
drwxr-xr-x. 3 root root 4096 1月 5 00:57 abrt
drwxr-xr-x. 4 root root 4096 1月 5 01:02 acpi
-rw-r–r--. 1 root root 44 3月 11 10:49 adjti
[root@localhost ~]#grep [选项] “搜索内容” 文件名
选项 -i 忽略大小写
-n 输出行号
-v 反向查找
–color=auto 搜索出的关键字用颜色显示
例如:[root@localhost ~]# grep -n --color=auto “root” /etc/passwd
1:root❌0:0:root:/root:/bin/bash
11:operator❌11:0:operator:/root:/sbin/nologin
8、通配符与其他特殊符号
Linux常见通配符及作用
?匹配一个任意字符
例如:[root@localhost tmp]# name=sc
[root@localhost tmp]# echo KaTeX parse error: Expected 'EOF', got '#' at position 29: …@localhost tmp]#̲ echo name name…name’
KaTeX parse error: Expected 'EOF', got '#' at position 26: …@localhost tmp]#̲ echo "name"
Sc
四:Bash的变量
1、什么是变量?
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息
2、变量设置规则
变量名称可以由字母,数字和下划线组成,但是不能以数字开头,如果变量名是“2name”则是错误的
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型
变量用等号连接值,等号左右两侧不能有空格
变量的值如果有空格,需要使用单引号或双引号包括
在变量的值中,可以使用\转义符
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含 变 量 名 或 用 变量名或用 变量名或用{变量名}包含
如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
环境变量名建议大写,便于区分
3、变量分类
(1)用户自定义变量
变量定义:[root@localhost ~]# name=“shenchao”
变量叠加:[root@localhost ~]# aa=123
[root@localhost ~]# aa="KaTeX parse error: Expected 'EOF', got '#' at position 26: …ot@localhost ~]#̲ aa={aa}789
变量调用:[root@localhost ~]# echo $name
变量查看:[root@localhost ~]# set
变量删除:[root@localhost ~]# unset name
(2)环境变量:这种变量中主要保存的是和系统操作环境相关的数据
什么是环境变量?
答:用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效
设置环境变量:export 变量名=变量值 //申明变量
env //查询变量
unset 变量名 //删除变量
系统常见环境变量:PATH:系统查找命令的路径
[root@localhost ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
系统常见环境变量:PS1:定义系统提示符的变量
\d:显示日期,格式为星期 月 日
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为HH:MM:SS
\T:显示12小时制时间,格式为HH:MM:SS
\A:显示24小时制时间,格式为HH:MM
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
#:执行的第几个命令
$:提示符。如果是root用户会显示提示符为“#“,如果是普通用户会显示提示符为$
例如:[root@localhost ~]# PS1=’[\u@\t\w]$’
[root@15:38:59~]#PS1=’[\u@@\h#\W]$’
[root03:40 下午03:40 下午localhost#~]#PS1=’[\u@\h\W]$’
[root@localhost~]#
(3)位置参数变量:这种变量主要是用来向脚本当中传递参数或数据,变量名不能自定义,变量作用是固定的
∗ 与 *与 ∗与@的区别
[root@localhost ~]# cat /root/canshu3.sh
#!/bin/bash
for i in “ ∗ " d o e c h o " *" do echo " ∗"doecho"i”
done
for y in “ @ " d o e c h o " @" do echo " @"doecho"y”
done
总结:$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
@ 中 的 每 个 参 数 都 看 成 是 独 立 的 , 所 以 @中的每个参数都看成是独立的,所以 @中的每个参数都看成是独立的,所以@中有几个参数就会循环几次
(4)预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
[root@localhost ~]# vi canshu5.sh
echo “$KaTeX parse error: Expected 'EOF', got '&' at position 29: …-name hello.sh &̲ echo "!”
//输出当前进程的PID,这个PID就是这个脚本执行时,生产的进程的PID
接收键盘输入
[root@localhost ~]#read [选项] [变量名]
选项 -p “提示信息” :在等待read输入时,输出提示信息
-t秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
-n字符数:read命令只接受指定的字符数,就会执行
-s:隐藏输入的数据,适用于机密信息的输入
例如:[root@localhost ~]# vi read.sh
#!/bin/bash
read -t 30 -p “please input your name:” name
//提示输入姓名并等待30秒,把用户数据保存入变量name中
echo $name
read -s -t 30 -p “please enter your age:” age
//年龄是隐私,所以我们用-s选项隐藏输入
echo “\n”
echo $age
五:Bash的运输符
1、 数值运算与运算符
declare 声明变量类型
[root@localhost ~]# declare [+/-][选项] 变量名
选项 -:给变量设定类型属性
+:取消变量的类型属性
-i:将变量声明为整数型(integer)
-x:将变量声明为环境变量
-p:显示指定变量的被声明的类型
2、数值运算—方法1
[root@localhost ~]# a=11
[root@localhost ~]# b=22
[root@localhost ~]# declare -i cc= a + a+ a+b
expr或let数值运算工具—方法2
[root@localhost ~]# a=11
[root@localhost ~]# b=22 //给变量a和变量b赋值
[root@localhost ~]dd= ( e x p r (expr (expra+$b)
//dd的值是a和b的和。注意+号左右两侧必须有空格
( ( 运 算 式 ) ) 或 ((运算式))或 ((运算式))或[运算式]
[root@localhost ~]# a=11
[root@localhost ~]# b=22
[root@localhost ~]# ff= ( ( (( ((aa+KaTeX parse error: Expected 'EOF', got '#' at position 24: …ot@localhost ~]#̲ gg=[ a a + aa+ aa+bb]
3、运算符优先级
例如:[root@localhost ~]# aa=$(((11+3)*3/2))
[root@localhost ~]# echo $aa
21 //虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级
[root@localhost ~]# bb=$((14%3))
[root@localhost ~]# echo $bb
2 //14不能被3整除,余数是2
[root@localhost ~]# cc=$((1&&0))
[root@localhost ~]# echo $cc
0 //逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0
4、变量测试与内容替换
[root@localhost ~]# unset y //删除变量y
[root@localhost ~]# x=${y-new} //进行测试
[root@localhost ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 78: …ot@localhost ~]#̲ y="" …{y-new} //进行测试
[root@localhost ~]# echo $x
六:环境变量配置文件
source命令
[root@localhost ~]# source 配置文件 或 [root@localhost ~]# . 配置文件
1、环境变量配置文件简介
环境变量配置文件中主要是定义对系统的操作系统生效的系统默认环境变量,比如PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量
常见的环境变量:
(1)/etc/profile
(2)/etc/profile.d/*.sh
(3)~/.bash_profile
(4)~/.bashrc
(5)/etc/bashrc
注:放在家目录(3,4)下的环境变量配置文件,只会对当前用户起作用;在/etc下的环境变量所有的用户都起作用;
环境变量配置文件的功能如下:
系统正常启动过程的环境变量的启动
先向下走,在向右走;
在其他用户下切换用户的过程
先向下,然后再向右;
2、 /etc/profile的作用
USER变量:
LOGNAME变量:
MAIL变量:
PATH变量:
HOSTNAME变量:
HISTSIZE变量:
umask:
调用/etc/profile.d/*.sh文件
3、umask #查看系统默认权限
(1)文件最高权限为666
(2)目录最好权限为777
(3)权限不能使用数字进行换算,而必须使用字母;使用的是最高权限丢点默认的权限;
Eg:当前默认权限为022,那么创建的文件权限就是最高权限减去默认权限:wr-wr-wr- 减去 ----w–w- 那么创建的文件权限默认为wr–r--r-
(4)Umask定义的权限,是系统默认权限中准备丢弃的权限如022,也就是----w—w-
4、~/.bash_profile的作用
1.调用了~/.bashrc 文件
2.在PATH变量后面加入了”:$HOME/bin”这个目录
5、/etc/bashrc的作用
PS1
Umask
PATH变量
调用/etc/profile.d/*.sh文件
6、其他配置文件和登录信息
注销时生效的环境变量配置文件
~/.bash_logout
历史命令 ~/bash_history
Shell登录信息
第十一讲:Shell编程
一:基础正则表达式
1、正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep,awk,sed等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配。Ls,find,cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配
2、基础正则表达式
前一个字符匹配0次,或任意多次
例如:[root@localhost ~]# grep "a" test_rule.txt //匹配所有内容,包括空白行
[root@localhost ~]# grep “aa*” test_rule.txt //匹配至少包含有一个a的行
[root@localhost ~]# grep “aaa*” test_rule.txt //匹配最少包含两个连续a的字符串
[root@localhost ~]# grep “aaaaa*” test_rule.txt
//则会匹配最少包含四个连续a的字符串
.匹配除了换行符外任意一个字符
例如:[root@localhost ~]# grep “s…d” test_rule.txt
Mr.Li Ming said:
he never said those words.
Later,Mr. Li ming soid his hot body.
//"s…d"会匹配在s和d这两个字母之间一定有两个字符的单词
[root@localhost ~]# grep “s.*d” test_rule.txt
Mr.Li Ming said:
he never said those words.
Later,Mr. Li ming soid his hot body.
//匹配在s和d字母之间有任意字符
[root@localhost ~]# grep “.*” test_rule.txt
Mr.Li Ming said:
he was the honest man in LampBrother.
123despise him.
But since Mr. shen Chao came,
he never said those words.
because,actuaaaaally,
Mr.Shen Chao is the most honest man!
Later,Mr. Li ming soid his hot body.
//匹配所有内容
^匹配行首,$匹配行尾
例如: [root@localhost ~]# grep “^M” test_rule.txt
Mr.Li Ming said:
Mr.Shen Chao is the most honest man!
//匹配以大写M开头的行
[root@localhost ~]# grep “n$” test_rule.txt //匹配以小写n结尾的行
[root@localhost ~]# grep -n “^$” test_rule.txt
4:
7:
10:
//会匹配空白行
[ ]匹配中括号中指定的任意一个字符,只匹配一个字符
[root@localhost ~]# grep “s[ao]id” test_rule.txt
Mr.Li Ming said:
he never said those words.
Later,Mr. Li ming soid his hot body.
//匹配s和i字母中,要不是a,要不是o
[root@localhost ~]# grep “[0-9]” test_rule.txt
123despise him.
//匹配任意一个数字
[root@localhost ~]# grep “1” test_rule.txt
he was the honest man in LampBrother.
he never said those words.
because,actuaaaaally,
//匹配用小写字母开头的行
[^]匹配除中括号的字符以外的任意一个字符
[root@localhost ~]# grep “[a-z]” test_rule.txt
Mr.Li Ming said:
123despise him.
But since Mr. shen Chao came,
Mr.Shen Chao is the most honest man!
Later,Mr. Li ming soid his hot body.
//匹配不用小写字母开头的行
[root@localhost ~]# grep “[a-zA-Z]” test_rule.txt
123despise him.
//匹配不用字母开头的行
\转义符
[root@localhost ~]# grep “.$” test_rule.txt
he was the honest man in LampBrother.
123despise him.
he never said those words.
Later,Mr. Li ming soid his hot body.
//匹配使用.结尾的行
{n}表示其前面的字符恰好出现n次
[root@localhost ~]# grep “a{3}” test_rule.txt
because,actuaaaaally,
//匹配a字母连续出现三次的字符串
[root@localhost ~]# grep “[0-9]{3}” test_rule.txt
123despise him.
//匹配包含连续的三个数字的字符串
二:字符截取命令
1、cut字段提取命令
[root@localhost ~]# cut [选项] 文件名
选项 -f列号: 提取第几列
-d分隔符: 按照指定分割符分割列
例如:[root@localhost ~]# cut -f 2 student.txt //提取第2列的内容
Name
Liming
SC
Gao
cut的局限性:如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容。
2、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键
在awk命令的输出中支持print和printf命令
print:printf会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
3、awk命令
#awk 条件1{动作1} 条件2{动作2}…… 文件名
条件(Pattern):
一般使用关系条件作为条件
x>10 判断变量x是否大于10
x>=10 大于等于
x<=10 小于等于
动作(action):
格式化输出
流程控制语句
例如:
[root@localhost ~]# awk ‘{printf $2 “\t” $6 “\n”}’ student.txt
Name
Liming
SC
Gao
4、sed命令
sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取,替换,删除,新增的命令
[root@localhost ~]#sed [选项] ‘[动作]’ 文件名
选项 -n 一般sed命令会把所有数据都输出到屏幕,如果加入此选选择,则会把经过sed命令处理的行输出到屏幕
-e 允许对输入数据应用多余sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作 a \:追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用\代表数据未完结
c \:行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要\代表数据未完结
i \:插入,在当前行出入一行或多行。插入多行时,除最后一行外,每行末尾需要\代表数据未完结
d:删除,删除指定的行
p:打印,输出指定的行
s:字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”
(和vim中的替换格式类似)
行数据操作:[root@localhost ~]# sed ‘2p’ student.txt //查看文件的第二行
ID Name genfer Mark
1 Liming M 86
1 Liming M 86
2 SC M 90
3 Gao M 83
[root@localhost ~]# sed ‘2,4d’ student.txt //删除第二行到第四行的数据,但不修改文件本身
ID Name genfer Mark
[root@localhost ~]# sed ‘2a hello’ student.txt //在第二行后追加hello
ID Name genfer Mark
1 Liming M 86
hello
2 SC M 90
3 Gao M 83
[root@localhost ~]# sed ‘2i hello \world’ student.txt //在第二行前插入两行数据
ID Name genfer Mark
hello world
1 Liming M 86
2 SC M 90
3 Gao M 83
[root@localhost ~]# sed ‘2c no such person’ student.txt //数据替换
ID Name genfer Mark
no such person
2 SC M 90
3 Gao M 83
字符串替换:sed ‘s/旧字串/新字串/g’ 文件名
[root@localhost ~]# sed ‘2s/86/55/g’ student.txt //在第二行中,把86改为55
ID Name genfer Mark
1 Liming M 55
2 SC M 90
3 Gao M 83
[root@localhost ~]# sed -i ‘2s/55/90/g’ student.txt //sed操作的数据直接写入文件
[root@localhost ~]# cat student.txt
ID Name genfer Mark
1 Liming M 90
[root@localhost ~]# sed -e ‘s/Liming//g;s/Gao//g’ student.txt //同时把L和G替换为空
ID Name genfer Mark
1 M 90
2 SC M 90
3 M 83
三:字符处理命令
1、排序命令sort
[root@localhost ~]# sort [选项] 文件名
选项 -f 忽略大小写
-n 以数值型进行排序,默认使用字符串型排序
-r 方向排序
-t 指定分隔符,默认是分隔符是制表符
-k n[,m] 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
[root@localhost ~]# sort /etc/passwd //排序用户信息文件
[root@localhost ~]# sort -r /etc/passwd //方向排序
2、统计命令
[root@localhost ~]# wc [选项] 文件名
选项 -l 只统计行数
-w 只统计单词数
-m 只统计字符数
四:条件判断
1、按照文件类型进行判断
两种判断格式
[root@localhost ~]# test -e student.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -e /root/install.log ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d /root ]&& echo “yes” || “no”
Yes
//第一个判断命令如果正确执行则打印yes,否则打印no
2、按照文件权限进行判断
[root@localhost ~]# [ -w /root/student.txt ] && echo yes || echo no
Yes
3、两个文件之间进行比较
4、两个整数之间的比较
5、字符串的判断
[root@localhost ~]# name=sc //给name变量赋值
[root@localhost ~]# [ -z “$name” ] && echo “yes” || echo “no”
no
//判断name变量是否为空,因为不为空,所以返回no
[root@localhost ~]# a=1
[root@localhost ~]# b=1
[root@localhost ~]# [ “$a”==“b” ] && echo “yes” || echo “no”
Yes
//判断两个变量的值是否相等,相等显示yes
6、多重条件判断
[root@localhost ~]# [ -n “ a a " − a " aa" -a " aa"−a"aa” -gt 23 ] && echo “yes” || echo “no”
No
//判断变量aa是否有值,同时判断变量aa的值是否大于23,因为变量aa的值不大于23,所以虽然第一个判断值为真,返回的结果也是假
五:流程控制语句
1、单分支if条件语句
If [条件判断式];then
程序
fi
或者
if [条件判断式]
then
程序
fi
单分支条件语句需要注意几个点:
(1) if语句使用fi结尾,和一般语言使用大括号结尾不同
(2) [条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
(3) then后面跟符号条件之后执行的程序,可以放在[]之后,用;分割。也可以换行写入,就不需要;了
2、多分支if条件语句
if [条件判断式]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一个程序
fi
3、多分支if条件语句
if [条件判断式1]
then
当条件判断式1成立时,执行程序1
elif[条件判断式2]
then
当条件判断式成立时,执行程序2
…省略更多的条件…
else
当所有条件都不成立时,最后执行此程序
fi
4、多分支case语句
case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
例如:
5、for循环
语法一
for 变量 in 值 1 值 2 值 3…
do
程序
done
例如:[root@localhost sh]# vi for1.sh
#!/bin/bash
for i in 1 2 3 4 5 6
do
echo $i
done
语法二
for((初始值;循环控制条件;变量变化))
do
程序
done
例如:
#!/bin/bash
s=0
for((i=1;i<=100;i=i+1))
do
s= ( ( (( ((s+ i ) ) d o n e e c h o " t h e s u m o f 1 + 2 + . . . + 100 i s : i)) done echo "the sum of 1+2+...+100 is : i))doneecho"thesumof1+2+...+100is:s"
[root@localhost ~]# chmod 755 for3.sh
[root@localhost ~]# ./for3.sh
the sum of 1+2+…+100 is :5050
用for循环实现批量添加用户
[root@localhost ~]# ./useradd.sh
input name:sy
input num:2
input password:12
6、while循环与until循环
While循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了
while [条件判断式]
do
程序
done
例如:
[root@localhost sh]# ./while1.sh
The sum is:5050
7、until循环
until循环和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环
until [条件判断式]
do
程序
done
例如:
[root@localhost sh]# ./until1.sh
The sum is:5050
第十二讲:Linux服务管理
一、服务器的分类
1、启动与自启动
服务启动:就是在当前系统中让服务运行,并提供功能
服务自启动:自启动是指让服务在系统开机或重启动之后,随着系统的启动而自动启动服务
2、查询已安装的服务
RPM包安装的服务
Chkconfig –list
//查看服务自启动状态,可以看到所有RPM包安装的服务
源码包安装的服务
查看服务安装位置,一般是/usr/local/下
RPM安装服务和源码包安装服务的区别
RPM安装服务和源码包安装服务的区别就是安装位置的不同
源码包安装在指定位置,一般是/usr/local/
RPM包安装在默认位置中
二:RPM包安装服务的管理
1、RPM默认位置是指哪些
/etc/init.d/:启动脚本位置
/etc/sysconfig/:初始化环境配置文件位置
/etc/:配置文件配置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:基于xinetd服务的启动脚本
/var/lib/:服务产生的数据放在这里
/var/log/:日志
2、独立服务的启动
/etc/init.d/独立服务名 start|stop|status|restart
Service 独立服务名 start|stop|restart||status
3、独立服务的自启动
chkconfig [–level 运行级别] [独立服务名] [on|off]
修改/etc/rc.d/rc.local 文件
使用ntsysv命令管理自启动
例如:
[root@localhost init.d]# chkconfig --list | grep httpd
httpd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@localhost init.d]# chkconfig --level 2345 httpd on
[root@localhost init.d]# chkconfig --list | grep httpd
httpd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
4、基于xinetd服务的管理
安装xinetd与telnet
[root@localhost ~]# yum -y install xinted
[root@localhost ~]# yum -y install telnet-server
xinetd服务的启动
xinetd服务的自启动
[root@localhost ~]# ntsysv 或者 [root@localhost ~]# chkconfig telnet on
三:源码包安装服务的管理
1、源码包安装服务的启动
使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明,查看启动脚本的方法
/usr/local/apache2/bin/apachect1 start|stop
2、源码包服务的自启动
[root@localhost ~]# vi /etc/rc.d/rc.local 加入 /usr/local/apache2/bin/apachect1 start
3、让源码包服务被服务管理命令识别
让源码包的apache服务能被service命令管理启动
[root@localhost ~]# ln -s /usr/local/apache2/bin/apachect1/etc/init.d/apache
让源码包的apache服务能被chkconfig与ntsysv命令管理自启动
vi /etc/init.d/apache
#chkconfig:35 86 76
#指定httpd脚本可以被chkconfig命令管理。
格式是:chkconfig:运行级别 启动顺序 关闭顺序
#description:source package apache
#说明,内容随意
四:服务管理总结
第十三讲:Linux系统管理
一:进程管理
1、 进程简介
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源
2、 进程管理的作用
判断服务器健康状态
查看系统中所有进行
杀死进程
3、 查看系统中所有进程
[root@localhost ~]# ps aux //查看系统中所有进程,使用BSD操作系统格式
[root@localhost ~]# ps -le //查看系统中所有进程,使用Linux标准命令格式
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 19364 1560 ? Ss 07:07 0:03 /sbin/init
root 2 0.0 0.0 0 0 ? S 07:07 0:00 [kthreadd]
USER:该进程是由哪个用户产生的
PID:进程的ID号
%CPU:该进程占用CPU资源百分比,占用越高,进程越耗费资源
%MEM:该进程占用无论内存的百分比,占用越高,进程越耗费资源
VSZ:该进程占用虚拟内存的大小,单位KB
RSS:该进程占用实际物理内存的大小,单位KB
TTY:该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制终端。pts/0-255代表虚拟终端
STAT:进程状态。常见的状态有:R(运行),S(睡眠),T(停止状态),s(包含子进程),
+(位于后台)
START:该进程的启动时间
TIME:该进程占用CPU的运算时间,注意不是系统时间
COMMAND:产生此进程的命令名
4、查看系统健康状态
[root@localhost ~]# top [选项]
选项 -d 秒数:指定top命令每隔几秒更新。默认是3秒在top命令的交互模式当中可以执行的命令
?或h:显示交互模式的帮助
P:以CPU使用率排序,默认就是此项
M:以内存的使用率排序
N:以PID排序
q:退出top
[root@localhost ~]# top
5、查看进程树
[root@localhost ~]# pstree [选项]
选项 -p:显示进程的PID
-u:显示进程的所属用户
6、终止进程
Kill命令
[root@localhost ~]# kill -l //查看可用的进程信号
[root@localhost ~]# kill -1 //重启进程
[root@localhost ~]# kill -9 //强制杀死进程
Killall命令
[root@localhost ~]# killall [选项] [信号] 进程名
#按照进程名杀死进程
选项 -i 交互式,询问是否要杀死某个进程
-I 忽略进程名的大小写
pkill 命令
[root@localhost ~]# pkill [选项][信号] 进程名
#按照进程名终止进程
选项 -t 终端号: 按照终端号踢出用户
按照终端号踢出用户
[root@localhost ~]# w
15:21:28 up 18 min, 2 users, load average: 0.00, 0.00, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
centos tty1 :0 15:04 18:29 4.15s 0.36s pam: gdm-passwo
root pts/0 10.203.51.1 15:04 0.00s 0.19s 0.11s w
[root@localhost ~]# pkill -9 -t tty1
[root@localhost ~]# w
15:23:26 up 20 min, 1 user, load average: 0.24, 0.05, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.203.51.1 15:04 0.00s 0.13s 0.05s w
二:工作管理
1、把进程放入后台
第一种方法是命令后面加&符号,第二种是按下ctrl+z快捷键
[root@localhost ~]# tar -zcf etc.tar.gz /etc &
[1] 3295
[root@localhost ~]# tar: 从成员名中删除开头的“/”
tar: 从硬连接目标中删除开头的“/
2、查看后台的工作
[root@localhost ~]# jobs [-l]
选项 -l:显示工作的PID
注意:+号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。-号代表倒数第二个放入后台的工作
3、将后台暂停的工作恢复到前台执行
[root@localhost ~]# fg %工作号
参数 %工作号:%号可以省略,但是注意工作和和PID的区别
4、把后台暂停的工作恢复到后台执行
[root@localhost ~]# bg %工作号
注意:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
三:系统资源查看
1、vmstat命令监控系统资源
[root@localhost ~]# vmstat [刷新延时 刷新次数]
例如:
2、dmesg开机时内核检测信息
[root@localhost ~]# dmesg | grep CPU
3、free命令查看内存使用状态
[root@localhost ~]#
[root@localhost ~]# free [-b|-k|-m|-g]
选项 -b:以字节为单位显示
-k:以KB为单位显示,默认就是以KB为单位显示
-m:以MB为单位显示
-g:以GB为单位显示
[root@localhost ~]# free -m
total used free shared buffers cached
Mem: 979 616 363 2 38 268
-/+ buffers/cache: 309 670
Swap: 3019 0 3019
缓存和缓冲的区别:简单来说缓存(cache)是用来加速数据从硬盘中“读取”的,而缓存(buffer)是用来加速数据“写入”硬盘的
4、查看cpu信息
[root@localhost ~]# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 78
model name : Intel® Core™ i5-6200U CPU @ 2.30GHz
stepping : 3
microcode : 204
5、uptime命令
[root@localhost ~]# uptime
16:22:20 up 1:19, 2 users, load average: 0.00, 0.00, 0.00
//显示系统的启动时间和平均负载,也就是top命令的第一行。W命令也可以看到这个数据
6、查看系统与内核相关信息
[root@localhost ~]# uname [选项]
选项 -a:查看系统所有相关信息
-r:查看内核版本
-s:查看内核名称
7、判断当前系统的位数
[root@localhost ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
8、查询当前linux系统的发行版本
[root@localhost ~]# lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.10 (Final)
Release: 6.10
Codename: Final
9、列出进程打开或使用的文件信息
[root@localhost ~]# lsof [选项]
#列出进程调用或打开的文件的信息
选项 -c 字符串:只列出以字符串开头的进程打开的文件
-u 用户名:只列出某个用户的进程打开的文件
-p pid :列出某个PID进程打开的文件
[root@localhost ~]# lsof -p 2142
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
udevd 2142 root cwd DIR 253,0 4096 2 /
udevd 2142 root rtd DIR 253,0 4096 2 /
udevd 2142 root txt REG 253,0 129120 393392 /sbin/udevd
四:系统定时任务
1、 crond服务管理与访问控制
[root@localhost ~]# chkconfig --list | grep crond
crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@localhost ~]# ps aux | grep crond
root 3863 0.5 0.1 116876 1400 ? Ss 16:42 0:01 crond
root 3875 0.0 0.0 103336 864 pts/1 S+ 16:45 0:00 grep crond
[root@localhost ~]# service crond restart
[root@localhost ~]# chkconfig crond on
2、 用户的crontab设置
[root@localhost ~]# crontab [选项]
选项 -e:编辑crontab定时任务
-l:查询crontab任务
-r:删除当前用户所有的crontab任务
[root@localhost ~]# crontab -e //进入crontab编辑界面。会打开vim编辑你的工作
*****执行的任务
第十四讲:日志管理
一:日志管理简介
1、 日志服务
在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服务更加先进,功能更多。但是不论该服务的使用。还是日志文件的格式其实都是和syslogd服务相兼容的。所以学习起来基本色syslogd服务一致
Rsyslogd的新特点:
基于TCP网络协议传输日志信息
更安全的网络传输方式
有日志消息的及时分析框架
后台数据库
配置文件中可以写简单的逻辑判断
与syslogd配置文学相兼容
确定服务启动
[root@localhost ~]# ps aux | grep rsyslogd //查看服务是否启动
root 1625 0.0 0.1 249152 1700 ? Sl 15:03 0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
root 3995 0.0 0.0 103340 872 pts/1 S+ 17:30 0:00 grep rsyslogd
[root@localhost ~]# chkconfig --list | grep rsyslog //查看服务是否启动
rsyslog 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
2、常见日志作用
除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是由rsyslogd服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志
二:rsyslogd日志服务
1、日志文件格式
基本日志格式包含以下四列:
事件产生的时间
发生事件的服务器的主机名
产生事件的服务名或程序名
事件的具体信息
2、/etc/rsyslog.conf配置文件
三:日志轮替
1、日志文件的命名规则
如果配置文件中拥有dateext参数,那么日志会用日期来作为日志文件的后缀,例如secure-20130605 这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可
如果配置文件中没有dateext参数,那么日志文件就需要进行改名了。当第一个进行日志轮替时,当前的secure日志会自动改名为secure.1,然后新建secure日志,用来保存新的日志。当第二次进行日志轮替时,secure.1会自动改名为secure.2.当前的secure日志会自动改名为secure.1,然后也会新建secure日志,用来保存新的日志,以此类推
2、logrotate配置文件
3、把apache日志加入轮替
4、logrotate命令
[root@localhost ~]# logrotate [选项] 配置文件名
选项:
如果此命令没有选项,则会按照配置文件中的条件进行日志轮替
-v:显示日志轮替过程。加了-v选项,会显示日志的轮替过程
-f:强制进行日志轮替。不管日志轮替的条件是否已经符号,强制配置文件中所有的日志进行轮替
第十五讲:启动管理
一:CentOS 6.x启动管理
1、运行级别
2、运行级别命令
[root@localhost ~]# runlevel //查看运行级别命令
[root@localhost ~]# init 运行级别 //改变运行级别命令
3、系统默认运行级别
[root@localhost ~]#vim /etc/inittab
id:3:initdefault:
//系统开机后直接进入哪个运行级别
二:系统启动过程
1、Linux系统开机启动过程
第一步:开机自检,加载BIOS
第二步:读取MBR
第三步:Boot Loader grub引导菜单
第四步:加载kernel内核
第五步:init进程依据inittab文件夹来设定运行级别
第六步:init进程执行rc.sysinit
第七步:启动内核模块
第八步:执行不同运行级别的脚本程序
第九步:执行/etc/rc.d/rc.local
第十步:执行/bin/login程序,启动mingetty,进入登录状态
2、图解开机过程
3、剖析启动过程
第一步:开机自检,加载BIOS
当我们打开计算机电源的时候,随后会听到滴的一声,自检开始,这个过程中主要是检测我们的计算机硬件设备比如:CPU,内存,主板,显卡,CMOS等设备是否有故障存在
第二步:读取MBR
BIOS自检,首先会在一个Boot Sequence程序中搜索可以让系统启动的引导设备(比如我们有时在BIOS中设置为从硬盘启动,或者从CD-ROM启动等等)
这时如果BIOS找不到可以引导的设备及相关程序后,便会启动失败,如果顺序的找到了相关设备硬盘,那么BIOS将把控制权交给启动设备中的MBR(Master Boot Record)主引导记录
MBR在大小为512字节,存放预启动信息、分区表等信息,
第三步:Boot Loader grub引导菜单
在MBR程序中找到其前446字节的Boot Loader
Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。。
系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
[root@iter ~]# cat /etc/grub.conf
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --md5 1 1 1cjB7p0q.$9fauA6mvALyXw96vmy.q41
title CentOS (2.6.18-348.12.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-348.12.1.el5 ro root=LABEL=/
initrd /initrd-2.6.18-348.12.1.el5.img
title CentOS (2.6.18-308.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/
initrd /initrd-2.6.18-308.el5.img
第四步:加载kernel内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
从全局启动历程start_kernel开始,
内核完成的任务主要有:
硬件的特测
硬件驱动的初始化,
挂载根文件系统(根切换)
启动init进程。
内核在系统启动后的功能先提前介绍一下:
进程的调度,内存管理,文件系统的管理,硬件驱动,网络等
内核自身初始化完成后开始下一步
第五步:init进程依据inittab文件夹来设定运行级别
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
0:-halt 关机
1:-single user mode 单用户模式
2:-Multi-user,without NFS无网络支持的多用户模式 类似于下面的run level3
3:-Full multi-user mode 有网络支持的多用户模式
4:-unused 保留,未使用
5:-X11 有网络支持有X-Window支持的多用户模式
6:- reboot 重新引导系统,即重启
cat /etc/inittab 查看/etc/inittab相关设定
第六步:init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件,里面的脚本够你看几天的
第七步:启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
第八步:执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务
第九步:执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
第十步:执行/bin/login程序,启动mingetty,进入登录状态
扩展关于Linux系统启动过程(菜鸟教程)
Linux 系统启动过程
linux启动时我们会看到许多启动信息。
Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:
• 内核的引导。
• 运行 init。
• 系统初始化。
• 建立终端 。
• 用户登录系统。
init程序的类型:
• SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
• Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
• Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
内核引导
当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
运行init
init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
init 程序首先是需要读取配置文件 /etc/inittab。
运行级别
许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
Linux系统有7个运行级别(runlevel):
• 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
• 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
• 运行级别2:多用户状态(没有NFS)
• 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
• 运行级别4:系统未使用,保留
• 运行级别5:X11控制台,登陆后进入图形GUI模式
• 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
系统初始化
在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
l5:5:wait:/etc/rc.d/rc 5
这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。
而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
/etc/rc.d/rc5.d/中的rc启动脚本通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数来运行。
而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。
这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。
至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。
建立终端
rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。
同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。
用户登录系统
一般来说,用户的登录方式有三种:
• (1)命令行登录
• (2)ssh登录
• (3)图形界面登录
对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。
而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。
Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。
然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。
这通常用来系统维护时防止非root用户登录。只有/etc/securetty中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。
/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。
<="" p="" style=“color: rgb(51, 51, 51); font-family: “Helvetica Neue”, Helvetica, “PingFang SC”, “Hiragino Sans GB”, “Microsoft YaHei”, “Noto Sans CJK SC”, “WenQuanYi Micro Hei”, Arial, sans-serif; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;”>
图形模式与文字模式的切换方式
Linux预设提供了六个命令窗口终端机让我们来登录。
默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
如果你用的vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按Alt + Shift + Ctrl + F1~F6 切换至命令窗口。
Linux 关机
在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
正确的关机流程为:sync > shutdown > reboot > halt
关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档。
例如你可以运行如下命令关机:
sync 将数据由内存同步到硬盘中。
shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
shutdown –h now 立马关机
shutdown –h 20:25 系统会在今天20:25关机
shutdown –h +10 十分钟后关机
shutdown –r now 系统立马重启
shutdown –r +10 系统十分钟后重启
reboot 就是重启,等同于 shutdown –r now
halt 关闭系统,等同于shutdown –h now 和 poweroff
最后总结一下,不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。
关机的命令有 shutdown –h now halt poweroff 和 init 0 , 重启系统的命令有 shutdown –r now reboot init 6
三:启动引导程序grub
1、grub中分区表示
2、grub配置文件
default=0 默认启动第一个系统
timeout=5 等待时间,默认是5秒
splashimage=(hd0,0)/grub/splash.xpm.gz
//这里是指定grub启动时的背景图像文件的保存位置的
hiddenmenu 隐藏菜单
title CentOS 6 (2.6.32-754.el6.x86_64) //title就是标题的意思
root (hd0,0) //是指启动程序的保存分区
kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet //定义内核加载时的选项
initrd /initramfs-2.6.32-754.el6.x86_64.img //指定initramfs内存文件系统镜像文件的位置
3、Grub加密与字符界面分辨率调整
grub加密: [root@localhost ~]# grub-md5-crypt //生产加密密码串
然后编辑配置文件
四:系统修复模式
1、单用户模式
我们举例,比如忘记root 用户密码我们就可以进入单用户模式重置,该单用户模式,类似windos 安全模式。开机界面快速按e 进入grub
光标定位到 linux16 下一行
ro crashkernel 作以下更该
rw init=/sysroot/bin/bash
完了,根据提示按 ctrl x 进入grub操作界面
chroot /sysroot/
chroot :change root 改变程序执行时所参考的根目录位置。
作用:比如我们的linux系统grub损坏无法启动,用linux启动u盘进入livecd,
然后用chroot命令把我们的linux系统环境乾坤大挪移(挂载)过来,这下我们就能在livecd里,修复grub
我们在这里以修改root密码为例,熟悉下grub下操作
passwd root
发现字符未正常显示
输入 LANG=en
passwd root 更改密码
完了还要输入 touch /.autorelabel
2、救援模式
从光驱启动进入救援模式
先进入虚拟机bios
主菜单栏, 虚拟机-电源-打开电源时进入固件(就是bios)
先更改第一启动为光驱启动
方法是:在boot 用上下光标键选中CD-ROM 用+将其置顶,F10保存退出
然后我们发现我们已经进入到光驱启动几面,我们选择第三行,Troubleshooting(排除故障)
然后选择第二行 Rescue a centos system (拯救系统)
选择1 continue
现在到了救援模式命令行:
根据提示操作以下命令
chroot /mnt/sysimage/ 又一次移花接木,不过目录有所改变
passwd root 改密码 过程不再展示
在这里我们还可以修复系统grub
重新更改bios设置把第一启动改为硬盘启动
或者在虚拟机里直接把光驱启动禁用
3、虚拟机克隆
虚拟机主菜单第一行, 虚拟机-管理-克隆
配置ip 主机名
修改ip克隆机的ip地址 编辑配置文件更改ip vi /etc/sysconfig/network-scripts/ifcfg-ens33
删掉uuid
重启下网络服务 systmectl restart network.service
更改主机名:hostnamectl set-hostname +主机名
然后xshell 登陆两台虚拟机验证下
两台虚拟机交叉登陆
w命令查看负载 whoami 查看当前用户
ssh username@ip 当前用户 username 可省略
两台虚拟机之间秘钥认证登陆
ssh-keygen 生成密钥对
复制公钥到要登陆的目标机器
关闭selinux getenforce 查看 setenforce 0 关闭
ctrl d 登出
密钥导入后直接登陆,不再提示输入root密码
第十六讲:备份与恢复
1、Linux系统需要备份的数据
/root/目录:/root/ 目录是管理员的家目录,很多管理员会习惯在这个目录中保存一些相关数据,那么,当进行数据备份时,需要备份此目录。
/home/目录:/home/ 目录是普通用户的家目录。如果是生产服务器,那么这个目录中也会保存大量的重要数据,应该备份。
/var/spool/mail/目录:在默认情况下,所有的用户未读的邮件会保存在 /var/spool/mail/ 目录下和用户名相同的邮箱文件中,已读的邮件会保存在用户家目录下的 mbox 文件中(mail 命令默认如此保存,不过如果使用了 hold 命令,那么不管邮件是否已读,都保存在 /var/spool/mail/ 目录中。可以使用 mbox 命令恢复已读邮件保存在“~/mbox”文件中)。一般情况下,用户的邮件也是需要备份的重要数据。
/etc/目录:系统重要的配置文件保存目录,当然需要备份。
其他目录:根据系统的具体情况,备份你认为重要的目录。
2、备份策略
完全备份:完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录。对于 Linux 操作系统来说,完全备份指的就是将根目录下的所有文件进行备份。
完全备份的好处是,所有数据都进行了备份,系统中任何数据丢失都能恢复,且恢复效率较高。如果完全备份备份的是整块硬盘,那么甚至不需要数据恢复,只要把备份硬盘安装上,服务器就会恢复正常。
完全备份的缺点也很明显,那就是需要备份的数据量较大,备份时间较长,备份了很多无用数据,占用的空间较大,所以完全备份不可能每天执行。
我们一般会对关键服务器进行整盘完全备份,如果出现问题,则可以很快地使用备份硬盘进行替换,从而减少损失。我们甚至会对关键服务器搭设一台一模一样的服务器,这样只要远程几个命令(或使用 Shell 脚本自动检测,自动进行服务器替换),备份服务器就会接替原本的服务器,使故障响应时间大大缩短。
3、增量备份
在一个数据量很大的业务应用中,每天对 Linux 系统进行完全备份是不现实的,这就需要用到增量备份策略。
累计增量备份是指先进行一次完全备份,服务器运行一段时间之后,比较当前系统和完全备份的备份数据之间的差异,只备份有差异的数据。服务器继续运行,再经过一段时间,进行第二次增量备份。在进行第二次增量备份时,当前系统和第一次增量备份的数据进行比较,也是只备份有差异的数据。第三次增量备份是和第二次增量备份的数据进行比较,以此类推。
因此,累计增量备份就是只备份每天增加或者变化的数据,而不备份系统中没有变动的数据。我们画一张示意图
假设我们在第一天进行一次完全备份。第二天增量备份时,只会备份第二天和第一天之间的差异数据,但是第二天的总备份数据是完全备份加第一次增量备份的数据。第三天增量备份时,只会备份第三天和第二天之间的差异数据,但是第三天的总备份数据是完全备份加第一次增量备份的数据,再加第二次增量备份的数据。当然,第四天增量备份时,只会备份第四天和第三天的差异数据,但是第四天的总备份数据是完全备份加第一次增量备份的数据,加第二次增量备份的数据,再加第三次增量备份的数据。
采用累计增量备份的好处是,每次备份需要备份的数据较少,耗时较短,占用的空间较小;坏处是数据恢复比较麻烦,如果是图 1 的例子,那么当进行数据恢复时,就要先恢复完全备份的数据,再依次恢复第一次增量备份的数据、第二次增量备份的数据和第三次增量备份的数据,最终才能恢复所有的数据。
4、差异备份
差异增量备份(后续简称差异备份)也要先进行一次完全备份,但是和累计增量备份不同的是,每次差异备份都备份和原始的完全备份不同的数据。也就是说,差异备份每次备份的参照物都是原始的完全备份,而不是上一次的差异备份。我们也画一张示意图,如图 2 所示。
图 2 差异增量备份
假设我们在第一天也进行一次完全备份。第二天差异备份时,会备份第二天和第一天之间的差异数据,而第二天的备份数据是完全备份加第一次差异备份的数据。第三天进行差异备份时,仍和第一天的原始数据进行对比,把第二天和第三天所有的数据都备份在第二次差异备份中,第三天的备份数据是完全备份加第二次差异备份的数据。第四天进行差异备份时,仍和第一天的原始数据进行对比,把第二天、第三天和第四天所有的不同数据都备份到第三次差异备份中,第四天的备份数据是完全备份加第三次差异备份的数据。
相比较而言,差异备份既不像完全备份一样把所有数据都进行备份,也不像增量备份在进行数据恢复时那么麻烦,只要先恢复完全备份的数据,再恢复差异备份的数据即可。不过,随着时间的增加,和完全备份相比,变动的数据越来越多,那么差异备份也可能会变得数据量庞大、备份速度缓慢、占用空间较大。
一个比较的备份策略是,对于数据量不大,并且每天数据量增加不多的系统,优先选择完全备份;对于数据量巨大,每天新增数据也很多的系统,视情况选择差异备份或者增量备份。
二:dump和restore命令
dump命令简介和使用:
在系统学习 dump 命令之前,由于 CentOS 6.x 系统默认是没有安装此命令的,因此需要我们手动安装 dump 命令,安装命令如下:
[root@localhost ~]# yum -y install dump
dump 命令使用“备份级别”来实现增量备份,它支持 0~9 共 10 个备份级别。其中,0 级别指的就是完全备份,1~9 级别都是增量备份级别。
举个列子,当我们备份一份数据时,第一次备份应该使用 0 级别,会把所有数据完全备份一次;第二次备份就可以使用 1 级别了,它会和 0 级别进行比较,把 0 级别备份之后变化的数据进行备份;第三次备份使用 2 级别,2 级别会和 1 级别进行比较,把 1 级别备份之后变化的数据进行备份,以此类推。
需要注意的是,只有在备份整个分区或整块硬盘时,才能支持 1~9 的增量备份级别;如果只是备份某个文件或不是分区的目录,则只能使用 0 级别进行完全备份。
dump 命令的基本格式如下:
[root@localhost ~]# dump [选项] 备份之后的文件名 原文件或目录
选项:
-level:就是我们说的 0~9 共 10 个备份级别;
-f 文件名:指定备份之后的文件名;
-u:备份成功之后,把备份时间、备份级别以及实施备份的文件系统等信息,都记录在 /etc/dumpdates 文件中;
-v:显示备份过程中更多的输出信息;
-j:调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式,默认压缩等级是
2
-W:显示允许被 dump 的分区的备份等级及备份时间;
dump 命令是一个较为复杂的命令,如果我们只是想要实现数据的备份与恢复,那么掌握以上几个选项就足够了。
备份分区
我们先来看看如何使用 0 级别备份分区。命令如下:
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 20G 3.0G 16G 17% /
tmpfs 30 6M 0 30 6M 0% /dev/shm
/dev/sda1 194M 26M 158M 15% /boot
/dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom
#系统中我们就分了/分区和/boot分区。根分区太大,备份速度太慢,我们还是备份/boot分区吧
[rootSlocalhost ~]# dump -0uj -f /root/boot.bak.bz2 /boot/
#备份命令。先执行一次完全备份,并压缩和更新备份时间
DUMP: Date of this level 0 dump: Wed Jun 5 03:08:22 2013
#备份的级别和时间
DUMP: Dumping /dev/sdal (/boot) to /root/boot.bak.bz2
#备份源和目标
DUMP: Label: none
#分区没有卷标
DUMP: Writing 10 Kilobyte records
DUMP: Compressing output at compression level 2 (bzlib)
#备份时压缩
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 21846 blocks.
DUMP: Volume 1 started with block 1 at: Wed Jun 5 03:08:22 2013
DUMP: dumping (Pass III) [directories]
#开始dump 备份
DUMP: dumping (Pass XV) [regular files]
DUMP: Closing /root/boot.bak.bz2
#备份结朿,生成备份文件
DUMP: Volume 1 completed at: Wed Jun 5 03:08:30 2013
DUMP: Volume 1 took 0:00:08
DUMP: Volume 1 transfer rate: 2370 kB/s
DUMP: Volume 1 21930kB uncompressed, 18962kB compressed, 1.157:1
#数据容量
DUMP: 2X930 blocks (21.42MB) on 1 volume(s)
DUMP: finished in 7 seconds, throughput 3132 kBytes/sec
DUMP: Date of this level 0 dump: Wed Jun 5 03:08:22 2013
DUMP: Date this dump completed: Wed Jun 5 03:08:30 2013
DUMP: Average transfer rate: 2370 kB/s
DUMP: Wrote 21930kB uncompressed, 18962kB compressed, 1.157:1
[root@localhost ~]# cat /etc/dumpdates
#查看备份时间文件
/dev/sdal 0 Wed Jun 5 03:08:22 2013 +0800
#备份的分区 备份级别 备份曰期
[root@localhost @]# 11 -h /root/boot.bak.bz2
-rw-r–r--. 1 root root 19M 6 月 5 03:08 /root/boot.bak.bz2
#备份文件生成了
如果 /boot 分区的内容发生了变化,则可以使用 1 级别进行增量备份。当然,如果数据会继续发生变化,则可以继续使用 2~9 级别增量备份。命令如下:
[root@localhost ~]# ll -h /root/install.log
-rw-r–r--.1 root root 25K 4月 10 21:49 /root/install.log
#查看安装软件包日志的大小为25KB
[root@localhost ~]# cp install.log /boot/
#复制日志文件到/boot分区
[root@localhost ~]# dump -1uj -f /root/boot.bak1.bz2 /boot/
#增量备份/boot分区,并压缩
[root@localhost ~]# ll -h boot.bak*
-rw-r–r--.1 root root 18K 6月 5 03:16 boot.bak1.bz2
-rw-r–r--.1 root root 19M 6月 5 03:08 boot.bak.bz2
#boot.bak1.bz2压缩文件只有18KB,证明增量备份只备份了0级别以后变化的数据
#boot.bak1.bz2压缩文件只有18KB,证明增量备份只备份了0级别以后变化的数据
如果备份的是整个分区,那么是可以使用“dump -W”命令来查询分区的备份时间及备份级别的。不过要注意,如果备份时没有使用“-u”选项,那么“dump -W”命令是不会记录备份的时间和级别的。命令如下:
[root@localhost ~]# dump -W
Last dump(s) done (Dump ‘>’ file systems):
/dev/sda3 ( /) Last dump:Level 1, Date Wed Jun 5 02:31:50 2013
/dev/sda1 ( /boot) Last dump:Level 1, Date Wed Jun 5 03:16:27 2013
#我的/分区和/boot分区都进行过dump备份,/boot分区的最新备份级别是1
dump命令可以非常方便地实现增量备份,但是如何实现差异备份呢?其实也很简单,先使用 0 级别完全备份一次,以后的每次备份都使用 1 级别进行备份。
备份文件或目录
dump 命令也可以文件或目录,不过,只要不是备份分区,就只能使用 0 级别进行完全备份,而不再支持增量备份。同时,不能使用“-u”选项更新分区的备份时间,当然也不能使用“dump -W”命令查询到文件或目录的备份。
我们说 /etc/ 目录是重要的配置文件目录,那么我们就备份这个目录来看看吧。命令如下:
[root@localhost ~]# dump -0j -f /root/etc.dump.bz2 /etc/
#完全备份/etc/目录
[root@localhost ~]# ll -h /root/etc.dump.bz2
-rw-r–r--.1 root root 8.6M 6月 5 03:26 /root/etc.dump.bz2
#查看备份文件
不过,如果使用增量备份会怎么样呢?命令如下:
[root@localhost ~]# dump -1j -f /root/etc.dump1.bz2 /etc/
DUMP:Only level 0 dumps are allowed on a subdirectory
DUMP:The ENTIRE dump is aborted.
#备份失败了,目录备份只能使用0级别
restore命令简介和使用
restore 命令是 dump 命令的配套命令,dump 命令是用来备份分区和数据的,而 restore 命令是用来恢复数据的。
restore 命令的基本格式如下:
[root@localhost ~]# restore [模式选项] [-f]
此命令中,-f 选项用于指定备份文件的文件名;restore 命令常用的模式有以下 4 种,这 4 种模式不能混用:
-C:比较备份数据和实际数据的变化。如果实际数据中的现有数据发生了变化,那么这个选项能够检测到这个变化。但是如果实际数据中新增了数据,那么这个选项是不能检测到变化的。举个例子:别人给我了 100 万元投资(实际数据),但是他有一个投资的账本(备份数据),他要时不时地比对账本和实际的 100 万元投资,如果 100 万元减少则马上就能发现改变;但是如果投资增加,则不会报警;
-i:进入交互模式,手工选择需要恢复的文件;
-t:查看模式,用于查看备份文件中拥有哪些数据;
-r:还原模式,用于数据还原;
【例 1】比较备份数据和实际数据的变化。
这里大家需要注意,数据比较只有在原有数据减少或发生变化时才能检测到变化,而新增的数据是不会被检测到的。命令如下:
[root@localhost ~]# touch /boot/abc
#在/boot/目录中新建abc文件
[root@localhost ~]# restore -C -f /root/boot.bak.bz2
Dump tape is compressed.
Dump date:Wed Jun 5 08:20:02 2013
Dumped from:the epoch
Level 0 dump of /boot on localhost:/dev/sda1
Label:none
filesys = /boot
#restore检测,没有发现任何变化(当然,因为备份数据在备份时没有abc文件,所以restore命令是不能识别新建文件的)
[root@localhost ~]# mv /boot/vmlinuz-2.6.32-279.el6.i686 /boot/vmlinuz-2.6.32-279.el6.i686.bak
#把/boot/目录中的内核镜像文件改一个名字
[root@localhost ~]# restore -C -f /root/boot.bak.bz2
Dump tape is compressed.
Dump date:Wed Jun 5 08:20:02 2013
Dumped from:the epoch
Level 0 dump of /boot on localhost:/dev/sda1
Label:none
filesys = /boot
restore:unable to stat ./vmlinuz-2.6.32-279.el6.i686:No such file or directory Some files were modified! 1 compare errors
#restore发现内核镜像文件丢失
这个实验比较危险,一定要记得把内核镜像文件的名字改回来,否则一旦重启,系统就会无法正常启动。
[root@localhost ~]# mv /boot/vmlinuz-2.6.32-279.el6.i686.bak /boot/vmlinuz2.6.32-279.el6.i686
【例 2】查看模式。
这种模式比较简单,就是查看备份文件中到底包含什么内容。命令如下:
[root@localhost ~]# restore -t -f boot.bak.bz2
Dump tape is compressed.
#备份数据是压缩的
Dump date:Wed Jun 5 08:20:02 2013
#数据备份时间
Dumped from:the epoch
Level 0 dump of /boot on localhost:/dev/sda1
#备份等级
Label:none
#分区的卷标,没有设定卷标
2.
11 ./lost+found
12 ./grub
24 ./grub/grub.conf
13 ./grub/splash.xpm.gz
…省略部分输出…
【例 3】还原模式
restore 命令的还原模式既可以用于还原整个分区,也可以用于还原文件或目录。命令格式是一样的,不过要注意,如果要还原增量备份的数据,则一定要先还原完全备份的数据。命令如下:
#还原boot.bak.bz2分区备份
#先还原完全备份的数据
[root@localhost ~]# mkdir boot.test
#建立准备解压缩的目录。当然,如果这个目录是我新建的分区,就可以直接把数据恢复到分区中
[root@localhost ~]# cd boot.test/
#进入解压缩目录
[root@localhost boot.test]# restore -r -f /root/boot.bak.bz2
Dump tape is compressed.
#备份数据是压缩数据
#解压缩
[root@localhost boot.test]#ll
#查看一下解压缩的文件
总用量21300
-rw-r–r--. 1 root root 106611 6月 22 2012 config-2.6.32-279.el6.i686 drwxr-xr-x. 3 root root 4096 4 月 10 21:47 efi drwxr-xr-x. 2 root root 4096 4 月 10 21:49 grub
-rw-r–r--. 1 root root 14708399 4 月 10 21:49 initrara£s-2.6.32-279.el6.i686.img
drwx------. 2 root root 4096 4 月 10 21:44 lost+found
-rw-------. 1 root root 47504 6 月 5 09:44 restoresymtable
-rw-r–r--. 1 root root 175903 6 月 22 2012 symvers-2.6.32-279.el6.i686.gz
-rw-r–r--. 1 root root 1846041 6 月 22 2012 System.map-2.6.32-279.el6.i686
-rw-r–r--. 1 root root 1048576 6 月 5 02:38 test
-rwxr-xr-x. 1 root root 3856608 6 月 22 2012 vmlinuz-2.6.32-279.el6.i686
#再还原增量备份的数据
[root@localhost boot.test]# restore -r -f /root/boot.bakl.bz2
Dump tape is compressed.
#恢复增量备份的数据
[root@localhost boot.test]# ll
总用量21328
-rw-r–r--. 1 root root 106611 6 月 22 2012 config-2.6.32-279.el6.i686
drwxr-xr-x. 3 root root 4096 4 月 10 21:47 efi
drwxr-xr-x. 2 root root 4096 4 月 10 21:49 grub
-rw-r–r--. 1 root root 14708399 4 月 10 21:49 initramfs-2.6.32-279.eX6.i686.img
-rw-r–r--. 1 root root 24772 6 月 5 08:20 install. log
#增量备份的install.log文件被恢复了
drwx------. 2 root root 4096 4 月 10 21:44 lost+found
-rw-------. 1 root root 47552 6 月 5 09:57 restoresymtable
-rw-r–r--. 1 root root 175903 6 月 22 2012 symvers-2.6.32-279.el6.i686.gz
-rw-r–r--. 1 root root 1846041 6 月 22 2012 System.map-2.6.32-279.el6.i686
-rw-r–r--. 1 root root 1048576 6 月 5 02:38 test
-rwxr-xr-x. 1 root root 3856608 6月 22 2012 vmlinuz-2.6.32-279.el6.i686
我们再来还原/etc/目录的备份etc.dump.bz2,其实还原的方法是完全一样的。命令如下:
[root@localhost ~]# restore -r -f etc.dump.bz2
Dump tape is compressed.
#还原etc.dump.bz2备份
[root@localhost ~]# ll -d /root/etc
drwxr-xr-x.103 root root 12288 6月 5 07:45 /root/etc
#在root下生成了etc目录,里面的数据和/etc/目录中的数据完全一致
a-z ↩︎