Linux学习笔记(二)

<pre name="code" class="plain">2016/2/17	
Shell 
	命令行解释器
	强大的编程语言
	解释执行的脚本语言
	可直接调用linux系统命令
	学习的是bsh文件
两种语法类型Bourne和C
	两种语法彼此不兼容
Shell脚本执行方式
	echo 输出命令
		-e 支持反斜线控制的字符转换
     echo -e "acd\bc" \b 退格删除  echo -e 代表支持特殊字符输出
	\e[1;    \e[0m	支持颜色输出  
#!/bin/Bash
	赋予执行权限,直接运行
		chmod 755 hello.sh
		./hello.sh
	通过Bash调用执行脚本
		bash hello.sh
dos2unix
	从dos格式转换为unix格式   比如说回车不相同
history
	-c 清空历史命令
	-w 把缓存中的历史命令写入历史命令保存文件
	~/.bash_history
历史命令默认保存1000条,可以在环境变量配置文件/etc/profile 中进行修改
!n
	重复执行第几行命令
!字符串
	重复执行最后一条命令
alias 别名=‘原命令’
alias
	查询命令别名
让别名永久生效
	vi /root/.bashrc
unalias 别名
	删除别名
ctrl + u 删除光标前的命令
ctrl + y 粘贴
ctrl + r 命令的搜索
ctrl + d 退出当前终端
ctrl + c 终止当前终端

标准输入输出
	设备    设备文件名    文件描述符   类型
	键盘    /dev/stdin       0           标准输入
	显示器   /dev/sdtout     1            标准输出
	显示器    /dev/sdterr    2            标准错误输出
输出重定向
	类型                    符号                         作用
   标准输出重定向              命令 > 文件       以覆盖的方式,把命令的正确输出到指定的文件或设备当中。
		               命令 >> 文件      以追加的方式,把命令的正确输出到指定的文件或设备当中
   标准错误输出重定向          错误命令 2>文件    以覆盖的方式,把命令的错误输出到指定的文件或设备当中。
			       错误命令 2>> 文件     以追加的方式,把命令的错误输出到指定的文件或设备当中
   
正确输出和错误输出同时保存     命令 > 文件 2>&1  以覆盖的方式,把命令的正确和错误保存到同一个文件当中。
                               命令 >> 文件 2>&1  以追加的方式,把命令的正确和错误保存到同一个文件当中。
			       命令 &> 文件  以覆盖的方式,把命令的正确和错误保存到同一个文件当中。
                               命令 &>> 文件   以追加的方式,把命令的正确和错误保存到同一个文件当中。
	                       命令>>文件1 2>>文件2  把正确的输出追加到文件1中,把错误的输出追加到文件2中。
输入重定向
wc
	-c 统计字节数
	-w 统计单词数
	-l 统计行数
wc < anaconda-ks.cfg   
	输出 
		行数   单词    字符数
wc << hello
	碰到hello结束
多命令顺序执行
	;多个命令顺序执行,命令之间没有任何逻辑联系。
	&& 与
	|| 或
实现硬盘的复制:
dd if=输入文件 of=输出文件 bs=字节数 count=个数
管道符
	命令1 | 命令2
		命令1的正确输出作为命令2的操作对象
连接人数
	netstat -an | grep "ESTABLISHED"
grep
	-i 忽略大小写
	-n 输出行号
	-v 反向查找
	--color=auto 搜索出的关键字用颜色显示
grep "root" /etc/passwd
	? 匹配一个任意字符
	* 匹配0个或任意多个任意字符
	[] 匹配中括号中任意一个字符  [abc]
	[-] 匹配中括号中任意一个字符 -代表一个范围 [a-z]匹配一个小写字母
	[^] 匹配不是中括号内的一个字符,[^0-9]代表匹配一个不是数字的字符
	''单引号  在单引号中所有的特殊字符,如$和·都是没有特殊含义。
	"" 双引号,在双引号中特殊符号没有特殊含义,但是$和· \是例外,拥有“调用变量值”
	“引用命令” 和“转义符” 的特殊含义。
	``反引号 系统命令
        $()  和反引号作用一样,例如$(date)
	# 在Sheel脚本中,代表注释
	$ 用于调用变量的值,如需调用变量name的值时,需要$name的方式得到变量的值。
	\ 转义符,跟在\后的特殊符号将失去特殊含义,变为普通字符,如\$ 将输出$,而不当做是变量引用。
变量:
		计算机内存的单元,其中存放的值可以改变,
		必须由字母、数字和下划线开头
		变量的默认类型都是字符串型,如果要进行数值运算。则必须指定变量类型为数值型。
		变量的值如果有空格,需要使用单引号或双引号
		在变量的值中,可以使用"\"转义符
		如果需要增加变量的值,那么可以进行变量值的叠加,不过变量需要用双引号包含“$变量名‘
		或用${变量名}包括
	用户自定义变量
			echo "$name"123      变量的叠加赋值
		查看变量  所有的变量
			set
		删除
			unset name

	环境变量
		会在当前Shell和这个Shell的所有子Shell当中生效,如果把环境变量写入响应的配置文件,
		那么这个环境变量就会在所有的Shell中生效。
		export 变量名=变量值
			#申明变量
		env   
			#查询变量
		unset 变量名
			#删除变量

		PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin
		:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

		PATH="$PATH":/root/sh  定义系统环境变量

		PS1='[\u@\h \W]\$ '   定义系统提示符的变量

		pstree  查询进程树
		PATH 系统查找命令的路径

	位置参数变量
		$n n为数字,$0代表命令本身
		$* 命令中所有的参数, 整体
		$@ 命令行中所有的参数 单个
		$# 命令行中所有参数的个数

	预定义变量
		$?
		       最后一次执行命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行,
		    如果这个变量的值为非0,(具体是哪个数,由命令自己来决定),则证明上一个命令
		    不正确了。
		$$ 当前进程的进程号(PID)
		$!  后台运行的最后一个进程的进程号(PID)
接收键盘输入
read
	-p "提示信息":
			在等待read输入时,输出提示信息,read命令会一直等待用户输入,
		使用此选项可以指定等待的时间。
	-n   字符数:
		read命令只接受指定的字符数,就会执行。
	-s
		隐藏输入的数据,适用于机密信息的输入,
	-t
		时间

数值运算与运算符
	方法1:
		declare 声明变量类型
		- 给变量设定类型属性
		+  取消变量的类型属性
		-i  将变量声明为整数型(integer)
		-x 将变量声明为环境变量
		-p 显示指定变量的被声明的类型

	方法2:
		expr或let数值运算工具
	方法3:	
		$(())或 $[]
变量测试与内容替换

2016/10/22 
环境变量配置文件 环境变量配置文件的作用
	source 配置文件 强制性使得配置文件生效
	. 配置文件 和 source的配置文件作用相同
	
	对系统定义的默认环境变量,比如PATH、HISTSIZE、PSI
	环境变量配置文件
	/etc/profile
	/etc/profile.d/*.sh  
	/etc/bashrc
	以上三个目录是对所有的用户都生效的
	~/.bash_profile
	~/.bashrc
	以上两个是只对当前用户生效的
其他环境变量配置文件
	 ~/.bash_logout 注销时生效的环境变量配置文件
	 ~/.bash_history 历史命令的配置文件 
		本地终端欢迎信息 /etc/issue 
		远程终端欢迎信息 /etc/issue.net ,显示欢迎信息由ssh的配置文件/etc/ssh/sshd_config决定,
		 加入“Banner/etc/issue.net”行才能显示(记得重启SSH服务) 
         /etc/motd
		不管是本地登录,还是远程登录。都可以显示,登录后显示

Shell编程
基础正则表达式  .* 任意字符
	linux 中 grep、awk、sed等都支持正则表达
	* 前一个字符匹配0次或任意多次
	. 匹配除了换行符外任意一个字符
	^ 匹配行首
	$ 匹配行尾
	[] 匹配中括号中指定的任意一个字符
	[^]匹配除中括号的字符以外的任意一个字符
	\转义符号 用于取消特殊符号的含义
	\{n\} 表示其前面的字符恰好出现n次
	\{n,\}表示其前面的字符出现不小于n次
	\{n,m\} 表示其前面的字符最少出现n次,最多出现m次
字符串截取
	cut 文件名  有缺点 识别空格也为列
		-f列号   提取第几列
		-d分隔符 按照指定分隔符分割列
	 cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1   提取用户名

	 printf 格式化输出命令
		%ns 输出字符串  输出几个字符
		%ni  输出几个整数
		%m.nf m位n小数位置
		printf '%s' $(cat student.txt)  
	 awk
		awk '条件{动作}....' 文件名
	     条件
		x>10
	     动作
	        格式化输出
		流程控制语句
		awk '{printf $2 "\t" $3  "\n"}' install.log   文件中的第二列和第三列获取

		获取Linux空间使用率
			 df -h | grep "sda1" | awk '{printf $5 "\n"}' | cut -d "%" -f 1

		 awk 'BEGIN{FS=":"}{print $1 "\t $3"}' /etc/passwd   #FS 指定分隔符  BEGIN在开始前执行 END在结束后执行
	sed
	      流编辑器 sed主要是用来将数据进行选取、替换、删除、新增命令
	 sed [选项] '[动作]' 文件名
	  选项
	     -n 把sed名称处理的数据输出到屏幕
	     -e 允许对输入数据应用多条sed命令
	     -i 用sed修改结果直接修改读取数据的文件,而不是由屏幕输出
	   动作
	      a\ 追加  sed '2,4a helllo' student.txt 删除第二行到第4行  
	      c\ 行替换   sed '2,4c helllo' student.txt 删除第二行到第4行  
	      i\ 插入 sed '2i helllo' student.txt 
	      d 删除 sed '2,4i helllo' student.txt 删除第二行到第4行  
	      p 打印   sed '2,4p helllo' student.txt 打印
	      s 字符替换 sed'3s/74/77' student.txt 74原数据 77本身数据
字符处理命令
	sort [选项] 文件名
	 -f 忽略大小写
	 -n 以数值型进行排序
	 -r 返乡排序
	 -t 指定分隔符 sort -n -t ":" -k 3,3 /etc/passwd  第3个字段开始 第3个字段结束
	 -k n[,m] 按照指定的字段范围排序,从n到m
	 wc [选项] 文件名
	  -l 只统计行数
	  -w 只统计单词数
	  -m 只统计字符数
条件判定
     文件判定
	-b 文件 存在且为块设备文件
	-c 文件 存在并且为字符设备
	-e 文件  判定是否存在文件
	-f 普通文件
	-d 目录文件
	-r 文件有读权限
	-w 文件有写权限
	-x 文件有执行权限
	文件1 -nt 文件2 判定文件新
	文件1 -ot 文件2 判定文件旧
	文件 -ef 文件2 判定文件的Inode的编号

	test -e /root/install.log 判定文件是否存在  echo $? 为0表示上一条命令执行成功
	[ -e /root/install.log ]
	[ -b install.log ] && echo "yes" || echo "no"   类似于Java的三目运算符 不能按照常规考虑
      整数比较
	-eq -ne -gt -lt -ge -le 
      字符串比较
	-z 判断字符串是否为空
	-n 判定字符串是否不为空
	== 相等
	!= 不等
       多重条件判定
	判断1 -a 判定2  一个为假都为假
	判定1 -o 判定2 一个为真都为真
	!判定 逻辑非
2016/10/23
  流程控制
    if语句
  if [ 条件判定式 ];then
	程序
  fi
  或者
  if [ 条件判定式 ]  #注意空格
     then
        程序
  fi

	查询根分区使用率
	#!/bin/bash
	# This Shell used query Disk
	rate=$(df -h | grep "dev/sda1" | awk '{print $5} ' | cut -d "%" -f1)
	if [ $rate -ge 1 ]
	 then
	   echo "Warning! /dev/sda1 is full!!"
  fi
	
	if [ 条件判定式 ]  #注意空格
	then
		程序
	else
		否则
	
	备份Mysql数据库
	#!/bin/bash
#备份 mysql 数据库。
	#与亚洲服务器同步时间
	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 "Data 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 "Data 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
	判断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

   nmap 命令 -st 查看指定机器的服务
    if [ 条件判定式 ]  #注意空格
	then
		程序
    elseif
         then

     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
case语句
	case $变量名 in
		"值一")
			如果变量的值等于1
		;;
		"值二")
			如果变量的值等于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
for循环
	for 变量 in 值1 值2 ...
		do
			程序
		done
	#!/bin/bash
#批量解压缩脚本
	cd /lamp
	ls *.tar.gz > ls.log
	for i in $(cat ls.log)
	do
		tar -zxf $i &>/dev/null
	done
	rm -rf /lamp/ls.log
	
	for((;;))
		do
			程序
		done
    
        #!/bin/bash
#批量添加指定数量的用户
# Author: shenchao (E-mail: shenchao@lampbrother.net)
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/sbin/useradd $name$i &>/dev/null
			echo $pass | /usr/bin/passwd --stdin $name$i &>/dev/null
		done
	fi
fi
流程控制
	while和until
	   while [ 条件判断式 ]
		   do
			程序
		   done
	    until 与while相反
	       until [ 条件判断式 ]
		   do
			程序
		   done
Linux服务管理
	服务简介和分类
	 Linux 1.RPM包默认(a.独立的服务。b.基于xineted服务) 2.源码包安装
服务的启动,服务的自启动
	service 命令默认是只能管理RPM安装的文件
	RPM包自启动查看 查询安装的RPM
		chkconfig --list   /etc/rc.d/init.d/  rpm 包服务 /etc/init.d
			查看服务自启动的状态,可以查看RPM包安装的服务
	源码包安装的服务位置,
		/usr/local
ps netstat
	查看进程

1.RPM包默认
	a.独立的服务
		/etc/init.d  启动脚本位置
		/etc/xinetd.d 基于xinetd服务的启动脚本
		/etc/sysconfig 初始化环境配置文件位置
		/etc 配置文件位置
		/etc/xinetd.conf xinetd配置文件
		/var/lib 服务产生的数据放在这里
		/var/log 日志
	/etc/init.d 独立服务名 start|stop|status|restart
	service 独立服务名 start|stop|status|restart
	service --status-all 查询所有的启动服务
	独立服务自启动
		1.chkconfig --level 2345 httpd on 配置自启动打开
		chkconfig --level 2345 httpd off 配置自启动关闭
		2.修改/etc/rc.d/rc.local文件 LInux启动后都会访问这个Shell文件
		touch 命令新建文件 当文件存在时,修改文件访问的时间
		3.使用ntsysn命令管理自启动 *号表示开启了自启动服务
	b.基于xineted服务管理
		安装xinetd yum -y install xinetd 
		安装xinetd与telnet
		修改 vi /etc/xinetd.d/telnet 启动 
		telnet是基于xinetd服务启动的
          基于xineted服务管理自启动
		chkconfig telnet on  配置自启动打开
	  它的启动和自启动是一起的
 2.源码包安装
	使用绝对路径启动 源码包中有启动和安装说明
		/usr/local/apache2/bin/apachect1 start|stop
	自启动源码包
		vim /etc/rc.d/rc.local
	/usr/local/apache2/bin/apachectl start 
	让源码包的apache服务能被service命令管理启动
	ln -s /usr/local/apache2/bin/apachect1 /etc/init.d/apache
	如果想使用chkconfig --list 查询和自启动
		vim  /etc/init.d/apache  
		添加
		#chekconfig:35 86 76
		#description: source http
		chkconfig -add apache  添加到chkconfig
Linux系统管理
进程管理
	一个正在执行的一个程序或命令。
	ps aux 查看系统中所有的进程,使用BSD操作系统格式
	ps -le 查看系统中所有进程,使用Linux标准命令格式
ps aux
USER        PID	      %CPU              %MEM              VSZ           RSS                TTY                               STAT       START     TIME     COMMAND
用户        进程ID    改进程占用CPU    占用物理内存    占用虚拟内存    占用实际物理内存    在那个终端运行pts/0-255远程终端   状态R、S   启动时间  运行时间   进程名称
 
	top 
		-d 秒数 每3秒更新一次
		-M 内存排序

		top - 01:27:38 up  5:41(运行5个小时了),  2 users,  load average: 0.07, 0.02, 0.00  平均负载   大于1就负载了
		Tasks: 121 total,   1 running, 120 sleeping,   0 stopped,   0 zombie(僵尸进程,需要手动禁止的)
		Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id(CPU空闲率),  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
		Mem(物理内存):   1004348k total,   245780k used,   758568k free,    43732k buffers
		Swap(交换分区):  2031612k total,        0k used,  2031612k free,    74364k cached		
pstree 查看进程树
   -p 显示进程号
   -u 显示所在进程的用户
终止进程
	kill -l
	#查看可用的进程信号
	1 让信号关闭,并重启
	15 正常结束进程信号
	9 强制终止
	父进程杀掉  子进程也杀掉了
	killall [选项][信号]进程名  killall-9 httpd  杀掉所有
	pkill [选项][信号]进程名 按名称杀掉进程
	-t 按照终端号 踢用户 pkill -9 -t tty1

工作管理
	把进程放入后台
	在结尾加 & 
		tar -zcf etc.tar.gz /etc &
	ctrl + z 放入后台暂停
	jobs  -l 查看后台任务
		[1]+  3559 停止 (信号)    
		top  +代表最近放入后台的命令 -代表第二个放入后台的命令 
	fg %工作号   #%可以省略  恢复到前台
	bg %工作号   恢复到后台
	top 、vi 不能放到后台  因为必须和用户交互
系统资源查看
	vmstat 命令监控系统资源
	vmstat[刷新延时 刷新次数]
	dmesg 开机时内核检查信息 
	free -b -k -m -g   查看内存使用状态
		缓存(cache)是用来加速数据从硬盘中‘读取’的,
		缓冲(Buffer)是用来加速数据“写入”硬盘的。 
	cat /proc/cpuinfo  查询CPU信息
	uptime 显示系统的在线信息
	uname -a 查看所有信息
	      -r 查看内核版本
	      -s 查看内核名称
	file /bin/ls 判定当前系统的位数
	lsb_release -a 查看当前Linux系统的发行版本
	lsof 列车进程调用的文件
		-c 字符串 
		-u 用户名
		-p pid
系统的定时任务
	crond服务管理与范文控制
	crondtab [选项]
		-e 编辑crontab 定时任务
		-l 查询crontab任务
		-r 删除当前用户所有的crintab任务
	编辑
		* * * * * 命令  
		45 22 * * * 22:45执行
		0 14 * * 1 每周1 14:00 执行
		0 5 1,15 * * 1号到15号 5:00执行
		40 4 * * 1-5 每周1到5 4:40执行
		*/10 4 * * * 每天4:00 每隔10分钟执行 执行6次
	注意在定时任务中 % 字符是有特殊含义的 需要在shell文件中加转义符号 \%y\%m\%dz
日志管理
日志管理简介
	centOS 6.X rsyslogd 查询日志 和 syslogd兼容的
	查看日志服务是否启动  
		ps aux | grep rsyslogd
		chkconfig --list | grep rsyslog
	/var/log/cron 定时任务的日志
	/var/log/cups 打印信息日志
	/var/log/dmesg 记录开始日志
	/var/log/btmp 记录登录错误的日志 使用 lastb查看
	/var/log/last1 记录用户最后一次登录的时间  使用lastlog查看
	/var/log/mailog 邮件信息
	/var/log/message 重要信息日志
	/var/log/secure 记录验证和授权方面的信息
	/var/log/wtmp 永久记录所有用户的登录、注销信息 使用last查看
	/var/log/utmp 记录当前登录用户的信息 使用w who users 查看
rsyslogd 日志服务
	格式:
		事件产生的时间
		事件产生的服务器
		事件程序名
		事件的具体信息
	Oct 23 03:56:31 localhost sshd[3368]: pam_unix(sshd:session): session opened for user root by (uid=0)
	配置日志
	/etc/rsyslog.conf
	authpriv.*  认证相关服务.所有日志等级
	日志记录位置
		日志文件绝对路径 /var/log/secure
		系统设备文件 /dev/lp0
		转发给远程主机  @192.168.0.2:51
		用户名  如root
		忽略或丢弃日志 如 ~
日志轮替
	日志文件的命名规则
		如果配置文件中拥有 dateext 参数
		那么日志会用日期来作为日志文件的后缀,
	logrotate配置文件  etc/logrotate.conf
	daily weekly monthly 轮替日期
	rotate 数字 保留的日志文件个数,0值没有备份
	conpress 日志轮替时,旧的日志进行压缩
	create mode owner group  建立新日志,
	同时制定新日志的权限与所有者和所属组 如 create 0600 root utmp
	把apache日志加入轮替
		源码包安装的软件,才需要为其加上日志轮替 
		RPM包安装的自动加入了轮替
		[root@localhost ~]# vi /etc/logrotate.conf
		/usr/local/apache2/logs/access_log {
			daily
			create #创建新的日志
			rotate 30 
		}
	logrotate [选项] 配置文件名
		如果此命令没有选项,则会按照配置文件中的条件进行轮替
		-v 显示日志轮替过程,
		-f 强制进行日志轮替,不管日志轮替的条件是否已经符合,所有的日志都要进行轮替
	logrotate -v /etc/logrotate.conf 记录轮替记录
启动管理
CenOS6.x启动管理
    系统运行级别
		0 关机 1 单用户模式(可以想象window的安全模式) 2 不完全命令行模式
		3 完全的命令行模式 4系统保留 5 图形模式
		6 重启动
	runlevel 查询级别 
		5 3 说明从5级别切换到了3
	init 0 修改级别
    系统的默认运行级别
       vim /etc/inittab
       id:3:initdefault:
       #系统开机后直接进入哪个运行级别
     系统启动过程
	centos6 使用initramfs内存文件取代了initrd RAM DISK
	mkdir /tmp/initramfs
	# 建立测试目录
		cp /boot/initramfs-2.6.32-279.el6.i686.img /tmp/initramfs/
	# 复制 initramfs 文件
		cd /tmp/initramfs/
		file initramfs-2.6.32-279.el6.i686.img
		mv initramfs-2.6.32-279.el6.i686.img initramfs-2.6.32-279.el6.i686.img.gz
	# 修改文件的后缀名为 .gz
		gunzip initramfs-2.6.32-279.el6.i686.img.gz
	# 解压缩
		file initramfs-2.6.32-279.el6.i686.img
		cpio -ivcdu < initramfs-2.6.32-279.el6.i686.img
	# 解压缩
启动引导程序grub 
	vim /boot/grub/grub.conf
	Grub 设备文件名 hd(0,0) 硬盘表示

	default=0 默认启动的操作系统
	timeout=5 等待5秒
	splashimage=(hd0,0)/grub/splash.xpm.gz  背景文件
 	hiddenmenu 隐藏查单
	title CentOS 6 (2.6.32-504.el6.x86_64) #标题
	        root (hd0,0)   #启动程序保存分区
	        kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap c
	rashkernel=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-504.el6.x86_64.img
		加载模拟进项的
grub加密与字符界面分辨率调整
	grub-md5-crypt 生成加密密码串
	[root@localhost ~]# vi /boot/grub/grub.conf
	default=0
	timeout=5
	password --md5
	$1$Y84LB1$8tMY2PibScmuOCc8z8U35/
	#password 选项放在整体设置处。
	splashimage=(hd0,0)/grub/splash.xpm.gz
	hiddenmenu
分辨率调整
	grep "CONFIG_FRAMEBUFFER_CONSOLE"
	/boot/config-2.6.32-279.el6.i686
	#查询内核是否支持分辨率修改

	修改内核
	vi /boot/grub/grub.conf
	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 vga=791
系统修复模式
	单用户模式
		遗忘root密码
		修改系统默认运行级别
	光盘修复模式
		可以破解grub密码
		重要系统文件丢失,导致系统无法启动
		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 文件到指定位置
备份与恢复
备份的概述
	linux系统需要备份的数据
	/root /home /var/spool/mail /etc 其他目录
	完全备份:所有数据全部备份。
	增量备份  每次备份都备份新的数据
	差异备份:每一备份都和第一次备份的相比较,其他的数据都备份
备份命令
	dump备份和restore恢复命令
	dump 
	-0 0-9 十个基本
	-f 备份后文件名
	-u /etc/dumpdates 记录备份文件
	-j 备份
	-W 查看

	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 级别进行完全备份
	,而不再支持增量备份
	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 备份



                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值