目录

  • 第零章 计算机概论
  • 第一章 Linux是什么与如何学习
  • 第二章 主机规划与磁盘分区
  • 第三章 安装CentOS7.x
  • 第四章 首次登陆与在线求助
  • 第五章Linux文件权限与目录配置
  • 创建用户删除用户
  • 第六章 linux文件与目录管理
  • 第七章 linux磁盘与文件管理
  • 第八章 文件与文件系统的压缩
  • 第九章 vim程序编辑器
  • 第十章 认识与学习BASH
  • 第十一章 正则表达式与文件格式化处理
  • 第十二章 学习Shell脚本
  • 第十三章 Linux账号管理与ACL权限设置
  • 第十四章 磁盘配额(Quota)与高级文件系统管理
  • 第十五章 计时任务(crontab)
  • 第十六章 进程管理与SELinux
  • 第十七章 认识系统服务(daemon)
  • 第十八章 认识与分析日志文件
  • 第十九章 启动流程、模块管理与Loader【省略】
  • 第二十章 基础系统设置与备份策略
  • 第二十一章 软件安装:源代码与Tarball
  • 第二十二章 软件安装RPM、SRPM、与YUM
  • 第二十三章 X Window设置介绍
  • 第二十四章 Linux内核编译与管理
  • linux设置
  • 安装常用软件
  • 其他
  • 问题

第零章 计算机概论

第一章 Linux是什么与如何学习

第二章 主机规划与磁盘分区

第三章 安装CentOS7.x

第四章 首次登陆与在线求助

一. 日历
	日期时间 date
	年月 cal 2019
	某年指定月份 cal 10 2019
二. 计算器
		bc 推出 quit
		值显示小数点后多少位 scale=3
三. 在线求助 man page 与 info page
		输入未完整的命令+两下tab
		date --help
		man date
四. 关机
		将数据同步写入硬盘中 sync
		常用关机 shutdown now
		重新启动,关机 reboot,halt,poweroff
		都基于 systemctl [命令] 
			halt 进入系统停止模式,屏幕
五. 中断目前程序
		【ctrl】-C
		演示find/

第五章Linux文件权限与目录配置

创建用户删除用户

su、sudo、su - root的区别:
useradd testuser  创建用户testuser
passwd testuser  给已创建的用户testuser设置密码
说明:新创建的用户会在/home下创建一个用户目录testuser
usermod --help  修改用户这个命令的相关参数
userdel testuser  删除用户testuser
rm -rf testuser  删除用户testuser所在目录
Linux的chattr与lsattr命令详解 http://www.ha97.com/5172.html
PS:有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。
查询全部文件
		ls -al
切换管理员/离开
	   su
	   su-
权限
文件属性/权限/各个权限数字对应表
		 例 -rwx r-x r--
		 第一组:文件拥有者可具备的权限
		 第二组:加入用户组之账号的权限
		 第三组:非本人且没有加入用户组的其他账号权限
		 r:可读:4
	     w:可写:2
		 x:可执行:1

 进入根目录 cd / cd

 查询权限
	    ls -l
	    ll 指定文件或文件  
 
 修改文件属性与权限
				 chgrp:修改文件所属用户组
				 chown:修改文件拥有者
				 chmod:修改文件的权限,SUID,SGID,SBIT等特性。
 			   例:
				  [R]:进行递归修改,亦即连同子目录下的所有文件,目录
				  chgrp [R] dirname/finenam  如:chgrp users initial-setup-ks.cfg
				  chown [R] 账号名称 文件或目录/账号名称:用户组名称 文件或目录  如:chown bin initial-setup-ks.cfg/chown root:root initial-setup-ks.cfg
				  数字类型修改
							各个权限数字对应表: r:4,w:2,x:1:基本权限有九个,拥有者(owner),所属群组(group),其他人(others)
							chmod [R] xyz 文件夹或者目录 注:xyz-代表各自[-rwxrwxrwx] 9个权限是三个三个一组
							如:chmod 777 .bashrc
				  符号类型修改
							chmod u/g/o/a +(加入)/-(移除)/=(设置) r/w/x 文件或者目录
						    例:chomd u=rwx go=rx .bashrc
tlblog163

第六章 linux文件与目录管理

相对路径和绝对路径
				绝对路径:一定由根目录/写起:/user/share/doc
				相对路径:不是由/写起,对于目前工作路径:cd ../man
特殊目录
		. 代表此层目录
		.. 上一层目录
		- 前一个工作目录
		~ 目前使用者身份所在的家目录
		~account account这个使用这的家目录(account是账号名称)
处理目录命令
		  cd 切换目录 :cd /(跳到顶层目录)
		  pwd 显示当前目录/pwd -p 显示真实目录
		  mkdir 建立一个新目录/mkdir -p text/text1 创建多层目录
		  rmdir 删除一个新目录/rmdir -p test1/test2 删除多层目录/rm -r test 所有目录下东西删除
关于执行变量
		  查询文件路径变量 echo $PATH
文件目录查看
		  全部文件:ls -a
		  完整显示文件的修改时间:ls -al --full-time ~(~符号代表家目录)				 
复制,删除与移动:cp,rm,mv
	cp -i ~/.bashrc /tmp/bashrc : -i 若目标文件已存在,再覆盖时回先询问操作的进行
	cp /tmp/log/wtmp . : 想要复制到目前的目录,最后的点不要忘。
    cp -a /var/log/wtmp wtmp2 文件所有特征一起复制
	cp -d bashrc_sink bashrc_sink_2 : 是链接文件
	cp ~/.bashrc ~/bash_history /tmp : 两个文件复制到/tmp下
	rm -f 文件或目录 : 忽略不存在的文件,不会出现警告
	rm -i bashrc* : 交互模式,删除回询问使用者
	rmdir /tmp/etc 建立的目录删除,如果空的目录不能执行
	rm -r /tmp/etc 递归删除,用于目录删除,危险选项
	\rm -r /tmp/etc 删除目录不用询问,可以忽略alias的选定选项。
	注意:如有-字符开头文件,前面加上./: rm ./-aaa-
	touch /-aaa- 建立空文件
	mv bashrc mvtest
	mv mvtest mvtest2 修改文件名
	mv bashrc1 bashrc2 mvtest2 有多个源文件或目录,最后一个目录文件一定是【目录】
	basename /etc/sysconfig/network : 取得文件名
	dirname /etc/sysconfig/network : 取得目录名

文件内容查看
	cat 由第一行开始显示文件内容
	tac 从最后一行开始显示
	nl 显示的时候,同时输出行号
	more 一页一页显示
	less 与more类似,可以往前翻页
	tail 只看后面几行
	od 以二进制方式读取文件内容
		cat /etc/issue
		cat -n /etc issue : 有行号显示
		cat -A /etc/man_db.conf : 完整显示,包含特殊的字符
		nl /etc/issue
		nl -b -a /etc/issue
		more /etc/man_db.conf 
			/字符串 : 查找字符串这个关键字
		less /etc/man_db.conf
			g:前进到这个数据的第一行
			G:前进最后一行
			q:退出
		head -20 /etc/man_db.conf 默认显示10行
		tail 显示后面行
	注:以上都是查纯文本文件内容

非纯文本文件
od -t c usr/bin/passwd
	a:默认字符输出
	c:ASCII字符
	d[size]:十进制(decimal)
	f:浮点数(floating)
	o:八进制(octal)
	x:十六进制(hexadecimal)
od -t oCc /etc/issue : 内容以把八进制列出存储值的ASCII的对照表

修改文件时间或创建新文件
	touch test : 创建文件
	修改时间(modificateion time, mtime):内容数据修改
	状态时间(status time,ctime):状态修改,如权限或属性修改
	读取时间(access time,atime):该文件的内容被读取时候
	ls -l --time=atime /etc/man_db.conf
	注:默认显示mtime,ls -l 等于 ll
	touch '2 days ago' bashrc:把ctime修改为前两天

文件默认权限:umask
	数字指的是该默认值需要减掉的权限
	umask : 查看
	umask -S 查看 

文件隐藏属性
	chattr命令只在ext2,ext3,ext4的Linux传统文件系统上面完整生效,其他的文件系统可能无法完整支持这个命令,例如xfs仅至此部分参数而已	
	chattr [+-=][ASacdistu] 文件目录名称
	chattr +i attrtest : 文件不能被删除,改名,设置链接也无法写入或新增数据
		   +a : 可以增加,不能修改旧数据与删除的参数
	lsattr [-adR] 文件或者目录 : 显示文件隐藏属性
	chattr +aiS attrtest

文件特殊权限:SUID,SGID,SBIT
	Set UID
		权限仅对二进制程序邮箱
		执行者对于该程序需要具有X的可执行权限
		本权限仅仅在执行该程序的过程邮箱
		执行者将具有该程序拥有者的权限
		注意:dmtsai执行passwd的过程中,会怕【暂时】获取root权限,【-rwsr-xr-x】
	Set GID
		SGID对二进制程序有用,也可以针对文件或目录涉资
		程序执行者对于该程序来说,具备X的权限
		执行者在执行的过程中将会获得该程序用户组的支持
	Sticky Bit
		目录只针对目录有效
		当用户对此目录具有W,X权限,既具有写入的权限;
		当用户在该目录下建立文件或目录时,仅有自己或root才有权力删除该文件
		注意:/tmp权限【drwxrwxrwt】,任何人都可以在/tmp内新增,修改文件,但仅有该文件/目录建立与root能够删除自己的目录文件
SUID,SGID,SBIT设置
	数字
	SUID:4
	SGID:2
	SBIT:1
	chmod 4755 fienname : 前面加数字
	符号
	STID:u+s
	SGID:g+s
	SBIT:o+t
	chmod g+s,o+t test

观察文件类型:file
	file 文件或等等
	file ~/.bashrc 

脚本文件的查找
	根据【PATH】这个环境变量所规范的路径,去查找执行文件的文件名
	which [-a] command
	注意:history是bash内置的命令,但是which默认是找PATH内所设置的目录
	whereis(由一些特定的目录查找文件)
	whereris [-bmsu] 文件或目录名
	whereis ifconfig

locate [-ir] keyword
	locate: 依据/var/lib/mlocate内的数据库记录,找出用户所输入的关键词的文件名
	locate寻找的数据是由己建立的数据库/var/lib/mlocate里面的数据所查找到的
	locate -S : 列出locate查询所使用的数据库文件之文件名与各种数据数量
	updatedb:根据/etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据库文件
	注意:数据库的建立默认是每天执行一次

find [PATH] [option] [action]
	-mtime n,-mtime +n,-mtime -n,-newer file 为一个存在的文件,列出比file还要新的文件
	find / -mtime 0 : 0代表目前时间,所以从开始到24小时前
	-user name : name为使用者的账号名称
	-group name
	-nouser : 查找文件的拥有者不在/etc/passwd中
	-nogroup :查询文件的用户组不尊在/etc/group的文件,自行安装软件时,很可能该软件的属性当中没有文件拥有者
	find /home -user quan : 查找/home下面属于quan的文件
	find / -nouser : 查找系统中不属于任何人的文件
	find /run -type: 找出/run目录下,文件类型socket的文件名,可以用type找出怪异文件
	find / -perm /7000 : 查找文件当中含有SGID,SUID,SBIT的属性
	find /usr/bin -perm /7000 -exec ls -l {} \; : 使用ls列出来
	-exec command : command为其他命令,-exec后面可劫额外的命令来处理查找到的结果

第七章 linux磁盘与文件管理

一. 处理分区 MBR分区表还是GPT的分区表
	每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要分区进行格式化。		
二. 文件系统
	1. FAT格式-u盘,FAT格式的文件没有inode存在,将这个文件的所有区块在一开始就读取出来,每个区块号码都记录在前一个区块当中。FAT的文件系统需要不时地碎片整理一下	
	2. 索引式文件系统
		超级区块:记录此文件的整体信息,包括inode与数据区块的总量,使用量。剩余量,以及文件系统与县官信息等。
		inode:记录文件的属性,一个为念占用一个inode,同时记录此文件的数据所在区块号码
		数据区块:实际记录文件的内容,若文件太大会占用多个区块。
	3. ext文件系统
		ext文件系统格式化的时候基本是区分为多个区块群组,每个区块都有独立的inode,数据区块,超级区块系统。
		文件系统最前面有一个启动扇区,这个启动扇区可以安装启动引导程序。
		数据区块
		ext2文件系统中所至此的区块大小有1k,2k及4k三种格式化时区块的大小固定。
三. 挂载点的意义
	挂载点一定是目录,该目录为进入改文件系统的入口
	查询目录的indo号码
		ls -lid 目录
			
四. 其他Linux支持的文件系统与VFS
	linux支持文件系统有哪些	ls -l /lib/modules/$(uname -r)/kernel/fs
	加载到内存中文件系统有那些 cat/proc/filesystems
	linux识别的文件系统都是VFS(Virtual Filesystem Switch)进行管理
五. 文件系统的简单操作
	1. 磁盘目录的容量
		文件系统整体磁盘使用量	df [-ahikHTm] 目录或者文件名
		查看文件系统使用量 du [-ahskm] 文件或者目录名称
六. 硬连接与符号连接
	硬链接 连接到摸inode号码的关联记录,磁盘的空间与indoe数目不变,不能连接目录,不能阔文件系统
	符号连接 独立文件
		ln [-sf] 源文件 目录文件
		不加参数是硬链接
七. 磁盘分区,格式化,检验,挂载
	MBR分区表用fdisk,GPT分区表用gdisk
	1. lsblk所有磁盘列表	lsblk [-dfimpt] [device]
	2. blkid设备UUID blkid
	3. parted分区类型与分区信息 parted [设备名称] print
	4. 磁盘分区gdisk/fdisk gdisk 设备名称 注:?查看命令
		Last secto最后一行自定义 +多少G,默认值会将所有容量用光。
	5. partprobe更新类和分区表信息 partprobe [-s]
	6. gdisk删除一个分区	d命令

第八章 文件与文件系统的压缩

压缩文件扩展名:
*.Z	        compress程序解压文件;
*.zip		zip程序压缩文件;
*.gz		gzip程序压缩文件;
*.bz2		bzip2程序压缩文件;
*.xz		xz程序压缩文件;
*.tar		tar程序打包的文件,并且没有压缩过;
*.tar.gz	tar程序打包的文件,并且经过gzip的压缩;
*.tar.bz2	tar程序打包的文件,并且经过bzip2的压缩;
*.tar.xz	tar程序打包的文件,并且经过xz的压缩;

一. gzip
	语法:
		gzip [-cdtv#] 文件名
		zcat 文件名
	选项与参数:  
	| -c | 将压缩数据传输到屏幕上,可通过数据流重定向来处理 |
	| -d | 解压缩的参数 |
	| -t | 可以用来验证一个压缩文件的一致性,看看文件有无错误 |
	| -v | 可以显示出源文件/压缩文件的压缩比等信息 |
	| -# | #为数字的意思,代表压缩等级,-1最块,但是压缩比差,-9最慢,但是压缩比最好,默认-6 |
	列:
	gzip -v /etc/services
	zcat services
	gzip -d services.gz
	gzip -9 -c services > service.gz
	zgrep -n 'http' services.gz

二. bzip2
	语法:
		bzip2 [-cdkzv#] 文件名
		bzcat 文件名.bz2
	选项与参数:
	| -c | 将压缩的过程产生的数据输出到屏幕上 |
	| -d | 解压缩的参数 |
	| -k | 保留原始文件,而不会删除原始的文件 |
	| -z | 压缩的参数(默认值,可以不加) |
	| -v | 可以显示出源文件/压缩文件的压缩比等信息 |
	| -# | #为数字的意思,代表压缩等级,-1最块,但是压缩比差,-9最慢,但是压缩比最好,默认-6 |
	列:
	bzip2 -v services
	bzcat services.bz2
	bzip2 -d services.bz2
	bzip2 -9 -c services > services.bz2

三. xz
	语法:
		xz [-dtlkc#] 文件名
		xcat 文件名
	选项与参数:
	| -c | 将压缩的过程产生的数据输出到屏幕上 |
	| -d | 解压缩 |
	| -t | 测试压缩文件的完整性,看有没有错误 |
	| -l | 列出压缩文件相关信息 |
	| -k | 保留原始文件,而不会删除原始的文件 |
	| -# | #为数字的意思,代表压缩等级,-1最块,但是压缩比差,-9最慢,但是压缩比最好,默认-6 |
	列:
	xz -v services
	xz -l services.xz
	xzcat services.xz
	xz -d services.xz
	xz -k services

已/etc/services为例子:
| 名称	 | 压缩比=压缩后/压缩前 | 时间s |
| :----: | :----: | :----: |
| -gzip  | 21%    | 0.019s |
| -bzip2 |        | 0.420s |
| -xz    | 15%    | 0.261s |

	
四. tar打包命令
	语法:
	tar [-z|-j-J] [cv] [-f 待建立新的文件夹] filename..   <==打包与压缩。
	tar [-z|-j-J] [tv] [-f 既有的tar文件名]               <==查看文件名。
	tar [-z|-j-J] [xv] [-f 既有的tar文件名] [-c 目录]      <==解压缩。
	选项与参数:
	| -c     | 建立打包文件,可搭配-v来查看过程中被打包的文件名(filename) |
	| -t     | 查看打包文件的内容包含哪些文件名,重点查【文件名】 |
	| -x     | 解压或解压缩的功能,可以搭配-C(大写)在特定目录解压,-c、-t、-x不可同时出现在一圈命令行中 |
	| -z     | 通过gzip的支持进行压缩/解压缩: 此时文件名最好为 *.tar.gz |
	| -j     | 通过bzip2的支持进行压缩/解压缩: 此时文件名最好为 *.tar.bz2 |
	| -J     | 通过xz的支持进行压缩/解压缩: 此时文件名最好为: *.tar.xz,特别留意,-z、-j、-J不可以同时出现在一串命令行中 |
	| -v     | 在压缩/解压缩过程中,将正在处理的文件名显示出来 |
	| -f     | + filename: -f后面立刻接要被处理的文件名,建议-f单独写一个选择。 |
	| -C     | + 目录: 这个选项用在解压缩,能在特定目录解压缩 |
	| -p     | 保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件 |
	| -P     | 保留结对路径,亦即允许备份数据中含有根目录存在之意 |
	| --exclude=FILE| 在压缩过程中,不要将FILE打包 |
	列:
	time tar -zpcv -f /root/etc.tar.gz /etc <==加time表示运行花费时间
	time tar -jpcv -f /root/etc.tar.bz2 /etc
	time tar -Jpcv -f /root/etc.tar.xz /etc
	说明:
	解压去掉根目录原因,安全(防止数据被覆盖)
	有根目录,解压缩的文件名就会绝对路径 ==>/etc/xxx
	没有根目录,当前所在目录下解压 ==>/tmp/etc/xxx

五. XFS文件系统的备份与还原
XFS文件系统备份 xfsdump
	功能:
	1. 能完成备份
	2. 能增量备份
	xfsdump备份限制: 
	1. 不支持没有挂载的文件系统备份,所以只能备份已挂载的文件系统
	2. 必须使用root的权限才能操作(涉及文件系统的关系)
	3. 只能备份xfs文件系统
	4. 备份下来的数据(文件或存储媒介)只能让xfsrestor解析
	5. 是通过文件系统的UUID来辨别各备份文件,因此不能备份连个具有相同UUID的文件系统
	语法:
	xfsdump [-L S_lable] [-M M_lable] [-l #] [-f 备份文件] 待备份数据
	xfsdump -I
	选项与参数:
	| -L     | xfsdump会记录每次备份的session标头,这里可以填写针对此文件系统的简易说明 |
	| -M     | xfsdump可以记录存储媒介的标头,这里可以填写此媒介的简易说明 |
	| -l     | 是L的小写,就是指定等级,有0~9共10各等级。(默认为0,即为完整备份) |
	| -f     | 有点类似tar,后面接产生的文件,亦可接列入/dev/st0设备文件名或其他一般文件名 |
	| -I     | 从/var/lib/xfsdump/inventory列出目前备份信息状态 |
	列:
	# 将完整备份文件名记录为/srv/boot.dump
	xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot 
	# 建立差异备份文件,此时我们使用level 1
	xfsdump -l 1 -L boot_2 -M boot_2 -f /srv/boot.dump /boot

XFS文件系统还原 xfsrestore
	语法:
	xfsrestore -I #查看备份文件
	xfsrestore [-f 备份文件] [-L S_lable] [-s] 待恢复目录 #单一文件全系统恢复
	xfsrestore [-f 备份文件] -r 待恢复目录 #用过增量备份文件来恢复系统
	xfsrestore [-f 备份文件] -i 待恢复目录 #进入交互模式
	选项与参数:
	| -I     | 可查询备份数据,包括Label名称与备份时间等 |
	| -f     | 后面接着就是备份文件。企业界很有可能会接/dev/st0等磁盘机,我们这里接文件名 |
	| -L     | 就是session的Label name,可用-I查询到的数据,在这个选项输入 |
	| -s     | 需要接某特定目录,亦即仅恢复某一个文件或目录之意 |
	| -r     | 如果用文件储存备份数据,则不需要使用,如果一个磁带内有多个文件,需要此选项来恢复累计恢复 |
	| -i     | 进入交互模式,高级管理员使用,一般我们不要需要操作它 |
	列:
	xfsrestore -I
	# 直接将数据覆盖回去即可
	xfsrestore -f /srv/boot.dump -L boot all /boot
	# 将备份的数据在/tmp/boot下面解开
	xfsrestore -f /srv/boot.dump -L boot all /tmp/boot
	# 比较两个文件差异
	diff -r /boot /tmp/boot
	# 仅恢复备份文件内的grub2到/tmp/boot2/里面去
	xfsrestore -f /srv/boot.dump1 /tmp/boot
	# 恢复增量备份数据
	# 继续恢复level 1到/tmp/boot当中
	xfsrestore -f /srv/boot.dump1 /tmp/boot
	# 仅还原部分文件的xfsrestore交互模式
	xfsrestore -f /srv/boot.dump -i /tmp/boot3
	选项与参数:
	| -add [<path>]    | 可以加入恢复文件列表中 |
	| -delete [<path>] | 从恢复列表去掉文件,并非删除 |
	| extract [<path>] | 开始恢复操作 |
	add grup
	add grup2
	extract

第九章 vim程序编辑器

一般命令模式(command mode)
编辑模式(insert mode)
命令模式(command-line mode)
注:前一个版本中,一般命令模式被称一般模式

一. 按键说明
	URL:https://www.runoob.com/linux/linux-vim.html

二. vim的缓存、恢复与打开时的警告信息
	缓存存在问题与决解
	1. 可能有其他人或程序同时在编辑这个文件
	   找到另外那个程序或人员,结束vim工作
       输入【O】只读预览
	2. 不知名原因导致vim中断
	   对文件操作过后,删除缓存
	选项与参数:
	| [O]pen Read-Only | 打开此文件成为只读文件,只查看不修改 |
	| (E) dit anyway   | 正常方式打开你要编辑的那个文件,并不会加载缓存内容 |
	| (R) ecover       | 加载缓存内容,救会之前未保存的操作,保存退出vim后,需手动删除那个缓存 |
	| (D) elete it     | 打开文件前会先将这个缓存删除掉 |
	| (Q) uit          | 退出vim |
	| (A) bort         | 忽略这个编辑操作 |

三. 可视区块(Visual Block)
	文件在一般命令模式下输入v或V或[Ctrl]+v时,光标移动反白选择
	可视区块的按键意义:
	| v        | 字符选择,会将光标经过的地方反白选择 |
	| V        | 行选择 |
	| [Crtl]+v | 可视区块,可以用矩形的方式选择数据 |
	| y        | 将反白的地方复制起来 |
	| d        | 将反白的地方删除掉 |
	| p        | 将刚刚复制的区块,在光标所在处粘贴 |

四. 多文件编辑
	语法
	vim [文件名称1] [文件名称2]
	多文件编辑的按键:
	| :n        | 编辑下一个文件 |
	| :N        | 编辑上一个文件 |
	| :files    | 列出目前这个vim开启所有文件 |

五. 多窗口功能
	语法
	1. vim [文件名称]
	2. :sp [文件名称]
	多窗口情况下的按键功能:
	| :sp [filename]               | 打开一个新窗口 |
	| [Ctrl]+w+j 或 [Ctrl]+w+方向下 | 光标移动到下方的窗口 |
	| [Ctrl]+w+k 或 [Ctrl]+w+方向上 | 光标移动到上方的窗口 |
	| [Ctrl]+w+q                   | 退出当前窗口 |
	| :close                       | 关闭所有窗口 |

第十章 认识与学习BASH

一. 硬件、内核、与Shell
	1. 硬件:计算机需要的物理硬件,如,CPU,显示器等
	2. 内核管理:操作系统的内核支持这些芯片组,需要提供内核驱动程序
	3. 应用管理:需要用户(就是你)输入命令
	要通过Shell将我们输入的命令与内核沟通,好让内核可以控制硬件来正确无误的工作
	
二. Bash shell的功能
	1. 历史命令(hostory)
	~/.bash_history记录的是前一次登陆以前执行的命令,而至于这一次执行的命令都被缓存在内存中,当你成功注销系统后,改命令才会记录到.bash_history当中
	2. 命令与文件补全功能
	3. 命令别名设置功能:(alias)
	4. 任务管理、前台、后台控制:(job contorl、foreground、background)
	5. 程序和脚本:(shell scripts)
	6. 通配符:(wildcard)

三. 查询命令时候为Bash shell的内置命令:type
	语法 type [-tpa] name
	选择与参数
	|    | 不加任何选项与参数时,type会显示出name是外部命令还是bash内置命令 |
	| -t | 当加入-t是,type将name以下面描述显示出他的意义 |
	|    | file    :表示为外部命令 |
	|    | alias   :表示该命令为命令别名所设置的命令 |
	|    | builtin :表示该命令为bash内置的命令功能 |
	| -p | 如果后面接的name为外部命令,才会显示完整文件名 |
	| -a | 会由PATH变量定义的路径中,将所有含name的命令都列出来,包含alias |

四. 命令的执行与快速编辑按钮
	快捷键
	| \+[Enter]         | 命令换行 |
	| [ctrl]+u\[ctrl]+k | 分别是从光标向前删除命令串([Ctrl+u])及向后删除命令串([Ctrl+k])|
	| [ctrl]+a\[ctrl]+e | 分别是从光标移动最前面([Ctrl+a])或最后面([Ctrl+e])|

五. Sell的变量功能
	1. 双引号可以保有变量的内容,单引号是一边符,而不会有特殊符号
	2. 子进程仅会几次父进程的环境变量,子进程不会继承父进程的自定义变量	
	语法
	echo ${name}   <==设置变量
	unset name     <==取消设置变量
	set			   <==观察所有变量(含环境变量与自定义变量)
	export 变量名称 <==设置环境变量
	其他
	uanme -r      <==获取内核信息
	
六. PS1:提示字符的设置
	其他
	$:(关于本shell的PID)
	美元符号本身也是变量,代表目前这个shell的进程号,PID(Process ID)
	
七. 影响显示结果的语系变量(locale)
	1. 设置LANG或是LC_All时,则其他的语系变量就会被这两个变量所替换
	2. 
	语法
	locale -a                <==查询linux支持语系
	cat /etc/locale.conf     <==查询系统默认支持语系
	export LC_ALL=zh_CN.utf8 <==设置系统默认(整体语系环境)
	
八. 变量键盘读取:read
	语法
	read [-pt] variable
	选项与参数
	| -p | 后面可以提示字符 |
	| -t | 后面可以接等待的【秒数】 |
	列
	# 提示使用者30秒内输入自己的名称,将输入字符作为named的变量内容
	read -p "Please keyin your name:" -t 30 named

九. 声明变量类型:declare
	1. 变量类型默认为字符串
	2. bash环境中的数字运算,默认最多仅能达到整数形态,所以1/3结果是0
	语法
	declare [-aixr] variable
	var[index]=content <==数组变量类型
	选项与参数
	| -a | 定义为数组类型(array) |
	| -i | 定义为整数类型(integer)|
	| -x | 定义为环境变量 |
	| -r | 定义为只读类型(readonly),不能被更改内容,也不能unset |
	| -p | 列出变量类型 |
	列
	declare -i sum=100+300+500
	echo $(sum)
	declare +x sum   <==将-变成+可以进行【取消】操作
	var[1]="var1"    <==数组定义
	echo "${var[1]}" <==数组读取 
	注
	1. 如果你将变量设置为【只读】,通常要注销再登陆才能恢复变量的类型
	
十. 与文件系统及程序的限制关系: ulimit
	bash是可以限制用户默写系统资源的,包括可以开启的文件数量,可以使用CPU时间,可以使用的内存总量等
	省略
	
十一. 变量内容的删除
	# :符合替换文字的【最短的】哪一个;
	##:符合替换文字的【最长的】哪一个;
	列
	# 删除前一个目录
	echo ${path#/*local/bin:}

十二. 命令别名设置:alias、unalias
	语法
	alias 别名='命令 选项...' <==设置命令别名
	unalias 别名             <==删除别名
	列
	alias rm='rm -i'
	unalias lm
	
十三. 历史命令:history
	语法
	history [n]
	history [-c]
	history [-raw] histfiles
	选项与参数
	| n  | 数字,【列出最近的n行命令列表】 |
	| -c | 将目前的shell中的所有history内容全部清除 |
	| -a | 将目前新增的history命令新增如histfiles中,如每加histfiles,则默认写入~/.bash_history |
	| -r | 将histfiles的内容读到目前这个shell的history记录中 |
	| -w | 将目前history记录内容写入histfiles中 |
	语法【history其他功能】
	!number
	!command
	!!
	选项与参数
	| number  | 执行第几条命令的意思 |
	| command | 由最近的命令向前查找【命令串开头为command】的那个命令,并执行 |
	| !!      | 就是执行上一个命令 |

十四. bash的登陆与欢迎信息:/etc/issue、/etc/motd
	省略
	
十五. bash的环境配置文件
	读入环境配置文件的命令:source
	语法
	source 配置文件文件名
	
十六. 终端的环境设置:stty、set
	省略
	
十七. 通配符与特殊符号
	
十八. 数据重定向
	说明
	1. 标准输入(stdin):代码为0,使用 < 或 <<;
	2. 标准输出(stdout):代码为1,使用 > 或 >>;
	3. 标准错误输出(stderr):代码为2,使用 2> 或 2>>;
	符号说明
	1. 1> : 以覆盖的方法将【正确的数据】输出到指定的文件或设备上;
	2. 1>>: 以累加的方法将【正确的数据】输出到指定的文件或设备上;
	3. 2> : 以覆盖的方法将【错误的数据】输出到指定的文件或设备上;
	4. 2>>: 以累加的方法将【错误的数据】输出到指定的文件或设备上;
	列
	# 将stdout与stderr分别存到不同文件中
	find /home -name .bashrc > list_right 2> list_error
	# /dev/null 垃圾桶黑洞设备与特殊写法
	cat > catfile << "eof" #当键盘输入eof结束
	注
	如两股数据同时写入一个文件,又没有使用特殊的语法,此时两个数据可能会交叉写入该文件内,造成次序错乱 

十九. 命令执行的判断根据:;、&&、||
	语法
	cmd;cmd(不考虑命令相关的性的连续命令执行)
	列
	sync; sync; shutdown -h now
	$?(命令返回值)与&&或||
	| cmd1 && cmd2 | cmd1正确-执行cmd2,cmd1错误-cmd2不执行 |
	| cmd1 || cmd2 | cmd1正确-不执行cmd2,cmd1错误-cmd2执行 |

二十. 管道命令
	【|】:仅能处理经由前面一个命令传来的正确信息,也是标准输出信息,对于错误信息没有直接处理能力
	选取命令:cut
	语法	
	cut -d '分隔字符' -f fields <==用于有特定的分隔字符
	cut -c 字符区间
	选项与参数
	| -d | 后面接分隔字符,与-f一起使用 |
	| -f | 根据-d的分隔字符将一段信划分成为数段,用-f取出第几段的意思 |
	| -c | 以字符的单位取出固定字符区间 |
	列
	echo ${PATH} | cut -d ':' -f 5
	echo ${PATH} | cut -d ':' -f 3,5
	export | cut -c 12-
	选取命令:grep
	grep分析行信息,若有,将该行拿出来
	语法
	grep [-acinv] [--color=auto] '查找字符' filename
	选项与参数
	| -a | 将二妗子文件以文本文件的方式查找数据 |
	| -c | 计算找到'查找字符'的次数 |
	| -i | 忽略大小写的不同,所以大小写视为相同 |
	| -n | 顺便输出行号 |
	| -v | 反向选择,亦即显示出没有 '查找字符'内容哪一行 |
	注
	grep支持的语法太多,还有一些没列举出来,比如正则表达式
	
二十一. 排序命令:sort、wc、uniq
	sort:根据不用数据形式进行排序
	语法
	sort [-fbMnrtuk] [file or stdin]
	选项与参数
	| -f | 忽略大小写的差异 |
	| -b | 忽略最前面的空格字符部分 |
	| -M | 以月份的名字排序 |
	| -n | 使用【纯数字】进行排序(默认以文字形式排序)|
	| -r | 反向排序 |
	| -u | uuiq,相同数据中,仅出现一行代表 |
	| -t | 分隔符号,默认是用[Tab]键来分隔 |
	| -k | 以那个区间(field)来进行排序的意思 |
	unuq:数据仅列出一个显示
	语法
	uniq [-ic]
	选项与参数
	| -i | 忽略大小写字符的不同 |
	| -c | 进行计数 |
	wc:计算输出信息的整体数据
	语法
	wc [-lwm]
	选项与参数
	| -l | 仅列出行 |
	| -w | 仅列出多少字(英文字母)|
	| -m | 多少字符 |

二十二. 双向重定向:tee
	数据流的处理中将某段信息存下来
	语法
	tee [-a] file <==若加-a能将信息累加
	选项与参数
	| -a | 以累加(append)的方式,将数据加入file当中 |
	列
	# ls的数据寸一份到~/homefile,同时屏幕也有输出信息
	ls -l / | tee -a ~/homefile | more

二十三. 字符转换命令:tr、col、join、paste、expand
	省略

第十一章 正则表达式与文件格式化处理

第十二章 学习Shell脚本

一. Shell脚本良好的编写习惯
	1. 脚本功能
	2. 版本信息
	3. 作者联系方式
	4. 版权声明方式
	5. 历史记录(History)
	6. 特殊的命令,使用【绝对路径】的方式执行
	7. 运行时需要的环境变量预先声明与设置
	注意: 编写脚本工具Vi而不是Vi,Vim有语法检验功能
二. 脚本执行方式差异(source、 sh script、 ./script)
	1. 直接执行方式(sh):当子进程完成后,在子进程内的各项变量或操作将会结束而不会传会父进程当中
	2. source执行,在父进程执行:source showname.sh
三. test命令测试功能
	例子: test -e /dmtsai && echo "exist" || echo "Not exist"
四. 判断符号[]
	中括号两端需要有空格符来分隔
五. Shell脚本默认变量($0、$1)
	1. $#: 代表后街的参数【个数】,以下表为列显示4
	2. $@: 【"$1","$2","$3","$4"】,每个变量独立
	3. $*: 【"$1 $2 $3 $4"】
	注: $@与$*有所不同,一般用$@
	列:/path/to/scriptname opt1 opt2 opt3 opt4
		$0					$1	 $2	  $3   $4
	shift: 造成参数变量号码偏移(后面接数字(Shift 3))从前面开始偏移
六. 条件判断式(if....then)		
	1. 单层、简单条件判断
		if [ 条件判断 ]; then
			当条件,进行命令
		fi <==将if反过来,结束if之意
		&& 代表 AND -a
		|| 代表 or -o
		列: [ "${yn}" == "Y" -o "${yn}" == "Y" ] 可替换为 ["${yn}" == "Y"] || ["${yn}" == "Y"]
	2. 多重、复杂条件判断
		if []; then
		elif []; then
		else
		if
	3. case...esac判断
		case $变量名称 in
			"第一个变量内容")
			程序段
			;;
			"")
			;;
			*) # *代表其他值,相当于通配符,0~无穷多个任意字符之意
			;;
		esac
	注: 参考 less /etc/init.d/netconsole
	4. function功能
		shell脚本执行由上而下,由左而右,因此shell脚本当中的function的设置一定要在程序最前面
		function 方法名称() {}
	5. 循环while
		循环可以不断的执行某个程序段落,直到用户设置的条件完成为止
		while [ condition ] #中括号内是判断式
		do
		done
		注: 当condition条件成立时,就进行循环,直到条件不成立才停止
		until [ condition ]
		do
		done	
		注:当condition成立时,就终止循环,否者就持续进行循环的程序段。
	6. for...do...done(固定循环)
		已知道要进行几次循环的状态
		for var in con1 con2 con3...
		do
			程序段
		done
		for的另一种写法
		for (( 初始值; 限制值; 赋值运算))
		do
			程序段
		done
	7. shell脚本的跟踪与调试
		sh [-nvx] scripts.sh
		-n: 不要执行脚本,仅查询语法问题
		-v: 在执行脚本前,先将脚本文件的内容输出到屏幕上
		-x: 将使用的脚本内容显示到屏幕上,比较有用的参数

第十三章 Linux账号管理与ACL权限设置

一. 用户账号相关文件
	1. 管理用户UID与GID重要参数的:/etc/passwd
	2. 管理密码相关数据的:		/etc/shadow
	用户组:有效与初始化用户组:groups、newgr
	1. 用户组配置文件:			/etc/group
	列
	groups: 有效与支持用户组的观察
	groups
	newgrp:有效用户组的切换
	newgrp users #是另外一个shell来提供功能
	groups
	exit  #注意,记得退出newgrp环境
二. 账号管理
	1. useradd
	语法
	useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] [-d 家目录绝对路径] [-s shell] 使用者账号名
	选项与参数
	| -u | 后面接UID,是一组数字 |
	| -g | 后面接的用户组就是初始用户组,GID会放到/etc/passwd的第四个栏位内 |
	| -G | 后面接的用户组测试该账号还可加入得用户组,会修改/etc/group内相关内容 |
	| -M | 强制,不要建立使用者家目录(系统默认值)|
	| -m | 强制,要建立使用者家目录(一般账号默认值)|
	| -c | 这个就是/etc/passwd的第五栏说明内容,随意我们设置 |
	| -d | 指定某个目录成为家目录,而不要使用默认值,使用绝对路径 |
	| -r | 建立一个系统账号,这个账号UID会有限制(参考/etc/login.defs)|
	| -s | 后面接一个shell,若没指定默认/bin/bash |
	| -e | 后面接日期,格式【YYYY-MM-DD】此选项可写入shadow第八个位,账号失效日的设置选项 |
	| -f | 后面接shadow的第七个栏位,指定密码是否会失效。0:立马失效/-1:永远不会失效(密码只会过期而强制于登陆时重新设置而已)
	列
	useradd wxq
	useradd -u 1500 -g users wxq
	
	2. passwd
	使用useradd建立账号后,默认情况,该账号暂时锁定的。
	语法
	passwd [--stdin] [账号名称] <==所有人均可以使用来改自己密码
	passwd [-l] [-u] [--stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <==root功能
	选项与参数
	| --stdin | 可以通过来自前一个管道数据,作为密码输入,对shell脚本有帮助 |
	| -l      | Lock的意思,会将/etc/shadow的第二栏最前面加上!使密码失效 |
	| -u      | 与-l相对,是Unlock的意思 |
	| -S      | 列出密码相关参数 |
	| -n      | 后面接天数,shadow第4栏位,多久不可以修改密码天数 |
	| -x      | 后面接天数,shadow第5栏位,多久内必须要修改密码 |
	| -w      | 后面接天数,shadow第6栏位,密码过期前警告天数 |
	| -i      | 后面接【日期】,shadow第7栏位,密码失效日期 |
	列
	passwd wxq
	
	3. chage:更详细密码参数显示
	省略
	
	4. usermod:账号修改参数
	语法
	usermod [-cdegGlsuLU] username
	| -c | 后面接账号的说明,即/etc/passwd第五栏的说明栏,可以加入一些账号的说明 |
	| -d | 后面接账号的家目录, 即修改/etc/passwd的第六栏 |
	| -e | 后面接日期, 格式是YYY-M-DD也就是在/etc/shadow内的第八个栏位的内容 |
	| -f | 后面接天数,为shadow的第七栏位 |
	| -g | 后面接初始用户组,修改/etc/passwd的第四个栏位,亦即是GID的栏位 |
	| -G | 后面接次要用户组,修改这个使用者能够支持的用户组,修改的是/etc/group |
	| -a | 与-G合用,可[增加次要用户组的支持]而非[设置]
	| -l | 后面接账号名称,亦即是修改账号名称,/etc/passwd的第一栏 |
	| -s | 后面接shell的实际文件,例如/bin/bash或/bin/csh等 |
	| -u | 后面接UID数字,即/etc/passwd第三栏的数据 |
	| -L | 暂时将使用者的密码冻结,让它无法登录,其实仅改/etc/shadow的密码栏 |
	| -U | 将/etc/shadow密码栏的感叹号(!)拿掉,解锁 |
	列
	# 使用者wxq这个账号在2015/10/10失效
	usermod -e "20158-10-10" wxq

	5. userdel:删除用户相关数据
	删除的文件
	1. 用户账号/密码相关参数:/etc/passwd、/etc/shadow
	2. 用户组相关参数:/etc/group、/etc/gshadow
	3. 用户个人文件数据:/home/username、/var/spool/mail/username
	语法
	userdel [-r] username
	选项与参数
	| -r | 连同使用者家目录一起删除

三. 用户功能
	1. id:查询默认或自己相关UID/GID等信息
	语法
	id [username]
	
	2. finger
	省略

	3. chfn
	省略

	4. chsh
	省略

四. 新增与删除用户组
	1. groupadd
	语法
	groupadd -[g gid] [-r] 用户组名称
	选项与参数
	| -g | 后面接某个特定的GID,用来设置GID |
	| -r | 建立系统用户组 |
	列
	groupadd group1
	
	2. groupmod
	语法
	groupmod [-g gid] [-n group_name] 用户组名
	选项与参数	
	| -g | 修改既有GID数字 |
	| -n | 修改既有的用户组名称 |
	列
	# group1名称改为mygroup,GID为201
	groupmod -g 201 -n mygroup group1
	
	3. groupdel
	groupdel [groupname]
	
	4. gpasswd: 用户组管理员功能
	语法(系统管理员root做的操作)
	gpasswd groupname
	gpasswd [-A user1,...] [-M user3,...] groupname
	gpasswd [-rR] groupname
	选项与参数
	|    | 若没有任何参数,表示设置groupname密码(etc/gshadow)
	| -A | 将groupname的管理权交由后面的使用管理者管理(该用户组的管理员)
	| -M | 将某些账号加入这个用户组中 |
	| -r | 将groupname的密码删除 |
	| -R | 让groupname的密码栏失效 |
	列
	gpasswd -A wxq testgroup <==加入用户组管理员为wxq
	语法(用户组管理员(Group administrator)做的操作)
	选项与参数
	| -a | 将某位使用者加入到groupname这个用户组当中 |
	| -d | 将某位使用者删除出groupname这个用户组当中 |
	列
	gpasswd -a wxq testgroup

五. 主机的详细权限规划:ACL的使用
	1.什么是ACL
	ACL是Access Control List 的英文缩写,中文译为访问控制列表
	ACL针对以下方面来控制权限:
	1. 用户(user):可以针对用户来设置权限
	2. 用户组(group):针对用户组为对象来设置其权限
	3. 默认属性(mask):还可以针对该目录下建立新目录/目录时,规范新数据的默认权限
	使用ACL原因:
	如果你有一个目录,需要给一堆人使用,每个人或每个用户组所需要的权限并不相同时,传统的Linux三种身份的三种权限是无法达到的
	查看是否开启ACL(用内核挂载是显示信息命令)
	dmesg | grep -i acl
	
六. ACl的设置技巧:getfacl
	1. getfacl:获取某个文件/目录的ACl设置选项
	2. setfacl: 设置某个目录/文件的ACL规范
	语法
	setfacl [-bkRd] [{-m|x} acl 参数] 目标文件名
	选项与参数
	| -m | 设置后续的ACL参数给文件使用,不可与-x合用 |
	| -x | 删除后续的ACL参数,不可与-m合用 |
	| -b | 删除[所有的]ACL设置参数 |
	| -k | 删除[默认的]ACL参数,关于所谓的 [默认]参数于后续范例中介绍 |
	| -R | 递归设置ACL, 即包括子目录都会被设置起来 |
	| -d | 设置[默认ACL参数]的意思,只对目来有效,在该目录新建的数据会引用此默认值 |
	列
	#1. 利用【u:用户:权限设置】
	setfacl -m u:wxq:rx acl_test1
	# 查询文件的权限结果会多了个【+】符号
	setfacl -m u::rwx acl_test1
	#2. 特定的单一用户组的权限设置:【g:用户组名:权限】
	setfacl -m g:mygroup1:rx acl_test1
	#3 针对有效权限设置【m:权限】
	#  有效权限意思:用户或用户组所设置的权限必须要存在于mask的权限设置范围内才会生效,此即【有效权限(effective permission)】
	setfacl -m m:r acl_test1
	#4 使用默认权限设置目录未来文件的ACL权限继承【d:[u|g]:[user|group]:权限】 <==重点
	setfacl -m d:u:myuser1:rx /srv/projecta
	语法
	getfacl filename
	选项与参数
	getfacl与setfacl选项参数基本相同,省略

七. 用户身份切换
	1. su
	语法
	su [-lm] [-c 命令] [username]
	选项与参数
	| -  | 单纯使用一如[su -]代表使用login-shell 的变量文件读取方式来登录系统 |
	|    | 若使用者名称没有加上去,则代表切换为root的身份 |
	| -l | 与-类似,但后面需要加欲切换的使用者账号,也是login-shell的方式 |
	| -m | -m与-p是一样的,表示[使用目前的环境设置,而不读取新使用者的配置文件 |
	| -c | 仅进行一次命令,所以-c后面可以加上命令 |
	说明
	只使用【su】切换root的身份,读取的变量设置方式为非登陆shell的方式,这种方式很多原本的变量不会被修改
	列
	su -
	exit <==这样可以退出su -环境
	2. sudo
	说明
	并非所有人都能执行sudo,而是仅有规范到/etc/sudoers内的用户才能执行sudo这个命令
	语法
	sudo [-b] [-u 新使用者的账号]
	选项与参数
	| -b | 将后续的命令放到后台中让系统自行执行,而不与目前的shell产生影响 |
	| -u | 后面可以接欲切换的使用者,若无此项规则代表切换身份为root |
	3. visudo修改/etc/sudoers(让操作的用户具备root命令功能)
	列
	visudo
	root All=(ALL) ALL <==找到这一行,大约98行
	wxq All=(All) All  <==这一行是你要新增的
	# 限制命令参数
	visudo
	wxq ALL=(root) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root <==不能更改root密码
	4. 利用wheel用户组以及免密码的功能处理visudo
	省略

第十四章 磁盘配额(Quota)与高级文件系统管理

一. 磁盘配额的应用与实践
二. 软件磁盘阵列 (Software RAID)
三. 逻辑卷管理起(LogicalVolume Manager)
1. 什么是LVM: PV、PE、VG、LV的意义

第十五章 计时任务(crontab)

一. 仅执行一次的计划任务
1. atd的启动与at运行的方式
	systemctl restart atd # 重新启动atd这个服务
	systemctl enable atd  # 让这个服务开机就自动启动
	systemctl status atd  # 查看一下atd目前的状态
2. 实际运行单一计划任务
	at [-mldv] TIME
	at -c 任务号码
	选项与参数
	| -m | 当at的任务完成后,即使没有输出信息,亦发email通知使用者该任务已完成 |
	| -l | at -l相当于atq,列出目前系统上面的所有该使用者的用者的at计划 |
	| -d | at -d相当于atrm, 可以取消个在at计划中的任务 |
	| -v | 可以使用较明显的时间格式列出at计划中的任务列表 |
	| -c | 可以列出后面接的该项任务的实际命令内容 |
	TIME : 时间格式,这里可以定义出[什么时候要执行at这项任务]的时间,格式有:
		HH:MM                       ex> 04:00
		     在今日的 HH:MM时刻执行,若该时刻已超过,则明天的HH:MM执行此任务。
		HH:MM YYYY-MM-DD            ex> 04:00 2015-07-30
		     强制规定在某年某月的某天的特殊时 刻执行该任务
		HH:MM[am|pm] [Month] [Date] ex> 04pm July 30
			 也是一样,强制在某年某月某日的某时刻执行。
		HH:MM[am|pm] + number [minutes|hours|days|weeks]
		     ex> now + 5 minutes      ex> 04pm + 3 days
		就是说,在某个时间点[再加几个时间后]才执行。

	列
	# 再过五分钟,将/root/.bashrc发给root自己
	at now + 5 minutes
	/bin/mail -s "testing at job" root < /root/.bashrc
	<EOT> <==这里输入[ctrl]+d就会出现<EOF>的字样,代表结束
	# 我想在2015/08/04 23:00关机
	at 23:00 2015-08-04
	/bin/sync
	/bin/sync
	/sbin/shutdown -h now
	<EOT>
3. at任务管理
	语法
	atq              <==查看
	atrm (jobnumber) <==删除
	列
	atq
	atrm 3
4. batch:系统有空时才执行后台任务
	说明
	1. 他是cpu的任务负载小于0.8的时候,才执行你的工作任务
	2. Cenos7下面的batch不再支持时间参数
	
二. 循环执行的计划任务
	说明
	1. 当用户使用crontab这个任务建立计划任务之后,该项任务就会被记录到/var/spool/cron/中
	2. cron执行的每一项任务都会被记录到/var/log/cron这个日志文件中
	语法
	crontab [-u username] [-l|-e|-r]
	选项与参数
	| -u | 只有root才能执行这个任务,亦即帮其他使用者建立/删除crontab计划任务
	| -e | 编辑crontab的任务内容 |
	| -l | 查看crontab的任务内容 |
	| -r | 删除所有的crontab的任务内容,若仅要删除一项,请用-e编辑 |
	列
	#用wxq的身份在每天12:00发信给自己
	crontab -e
	0 12 * * * mail -s "at 12:00" wxq < /home/wxq/.bashrc	

	crontab表达式
	| 代表意义 | 分钟  | 小时 | 日期  | 月份  | 周   | 命令         |
	| 数字范围 | 0~59 | 0~23 | 1~31 | 1~12  | 0~7 | 需要执行的命令 |
	特殊符号
	| *(星号)| 代表任何时刻都接收的意思,列日、月、周都是*,表示何月、何日都执行 |
	| ,(逗号)| 代表分隔时间段的意思,列执行3:00与6:00时,0 3,6 * * * command |
	| -(减号)| 代表一点范围内,列8点到12点之间没小时20分钟执行,20 8-12 * * * command |
	|/n(斜线)| n代表数字,【每隔n单位间隔】意思,列,没五分钟执行一次,*/5 * * * * |
	其他
	如果每个流程都在同一个时间启动的话,那么在某个时段,系统会变得相当繁忙
	vim /etc/crontab
	1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1
	2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2
	3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3
	4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4

三. 可唤醒停机期间的工作任务
	说明:什么是anacron
	1. 24小时运行的Linux系统所执行的crontab,以及因为某些原因导致的超过时间而没有被执行的任务
	2. anaron会没小时执行一次
	语法
	anacron [-sfn] [job]..
	anacron -u [job]..
	选项与参数
	| -s | 开始连续地执行各项任务(job),会根据时间记录文件的数据判断是否执行 |
	| -f | 强制执行,而不去判断时间记录文件时间戳 |
	| -n | 立马执行为执行的任务,而不延迟(delay)等待时间 |
	| -u | 仅更新时间记录文件的时间戳,不执行任何任务 | 
	|job | 有/etc/anacrontab定义的各项任务名称 |

第十六章 进程管理与SELinux

一. 什么是进程(process)
    说明
    1. 一个程序被加载到内存当中运行,那么内存中的那个数据就被称为进程(process)
    2. 触发任何一个事件时,系统都会将他定义成为一个进程,并且给予这个进程一个ID,称为PID

二. Linux的多人多任务环境
    功能
    1. 多人环境
    2. 多任务操作
    3. 多重登陆环境的七个基本终端界面( [Alt] + [F1]...[F7]切换 )
    4. 特殊的进程操作
    5. bash环境下的任务管理(job control)

三. 任务管理(job control)
1.  直接将命令丢到后台中【执行】的 &
    语法
    [command] & <==&符号在最后面
2.  查询目前后台任务状态:jobs
    语法
    jobs [-lrs]
    选项与参数
    | -l | 除了列出job number与命令串之外,同时列出PID的号码 |
    | -r | 仅列出正在后台run的任务 |
    | -s | 仅列出正在后台当中暂停(stop)的任务 |
3.	将后台任务拿到前台来处理:fg
    语法
    fg %jobnumber
    选项与参数
    | %jobnumber | jobnumber为任务号码(数字),%可有可无 |
4.  让任务在后台下的状态变成运行中:bg
    语法
    bg %jobnumber
5.  管理后台中的任务:kill
    语法
    kill -signal %jobnumber
    kill -l
    选项与参数
    | -l     | 这个是I的小写,列出目前kill能够使用的信号(signal)有哪些 |
    | sigmal | 代表给予后面接的那个任务什么样的指示,用man 7 signal可知。|
    | -1     | 重新读取一次参数的配置文件(类似reload)。|
    | -2     | 代表由键盘输入[ctrl]-c同样的操作。|
    | -9     | 立刻强制删除一个任务。|
    | -15    | 以正常的进程方式终止一项任务,与-9是不一样的。|

四. 脱机管理问题
    说明
    任务管理的后台依旧与终端有关,如远程连接方式到你的linux主机,用&放到后台,在任务未结束脱机,任务会被中断。
    语法
    nohub [命令与参数]   <==在终端前台中任务
    nohub [命令与参数] & <==在终端后台中任务

五.	进程管理
    查看进程
1.  ps:将某个事件点的进程运行情况截取下来
    语法
    ps aux  <==查看系统所有的进程
    ps -lA  <==也是能查看所有系统的进程
    ps axjf <==连同部分进程数状态
    选项与参数
    | -A | 所有进程均显示出来,与-e具有同样效果 |
    | -a | 不显示与终端有关的所有进程 |
    | -u | 有效使用者(effective user)相关进程 |
    | x  | 通常与a这个参数一起用,可列出完整信息 |
    输出格式规则
    | l  | 较长,较详细的将该PID的信息输出 |
    | j  | 任务的格式(jobs format)
    | -f | 做一个更为完整的输出 |
2.  仅查看自己的bash相关进程:ps -l
    说明
    S:代表这个进程的状态(STAT)
3.  查看系统所有进程:ps aux
    说明
4.  top:动态查看进程的变化
    语法
    top [-d 数字] | top [-bnp]
    选项与参数:
    | -d | 后面可以接秒数,就是整个进程界面更新的秒数。默认是5秒。|
    | -b | 以批量的方式执行top,还有更多的参数可以使用,通常会搭配数据流重定向来将批量的结果输出为文件。|
    | -n | 与-b搭配,意义是,需要执行几次top的输出结果。|
    | -p | 指定某些个PID来执行查看监测而已。|
    在top执行过程当中可以使用的按键命令:
        ?: 显示在top当中可以输入的按键命令。
        p: 以CPU的使用排序显示。
        M: 以Memory的使用排序显示。
        N: 以PID来排序。
        T: 由该进程使用的CPU时间累积(TIME+)排序。
        k: 给予某个PID一个信号(signal)
        r: 给予某个PID重新制订一个nice值。
        q: 退出top的按键。
5.  pstree
    语法
    pstree [-A|U] [-up]
    选项与参数
    | -A | 各进程树之间的连接以ASCII字符来连接。|
    | -U | 各进程树之间的连接以Unicode的字符来连接,在某些终端界面下可能会有错误。|
    | -p | 并同时列出每个进程的PID。|
    | -u | 并同时列出每个进程的所属账号名称。|

6.  killall -signal 命令名称
    语法
    killall [-iIe] [command name]
    选项与参数
    | -i | interactive及互动的意思,若需要删除时,会出现提示字符给使用者 |
    | -e | exact的意思、表示【后面接的command name要一致】,整个命令不能超过15个字符 |
    | -I | 命令名称(可能含参数)忽略大小写 |
    列
    killall -9 httpd
    killall -i -9 httpd
    # 进程给与一个SIGHUP信号
    killall -l rsyslogd 
	
六. 关于进程的执行顺序
1.  Priority与Nice值
    说明
    1. 我们Linux 给予进程一一个所谓的[优先级(priority, PRI)], 这个PRI值越低代表越优先的意思。不过这个PRI值是由内核动态调整的,用户无法直接调整PRI值。
    2. 虽然nice值可以影响PRI,但最终的PRI仍是经过系统分析才会决定的。
    3. PRI越小则越早被执行,当nice值为负数时,那么该进程就会降低PRI值,即会变得较有限被处理。
    nice就是NI,PRI与NI相关性:
    PRI(new) = PRI(old) + nice
    nice设置留意:
    1. nice值可调整的范围为-20~19;
    2. root可随意调整自己或它人进程的nice值,且范围为-20~19;
    3. 一般用户仅可调整自己进程的nice值,且范围仅为0~19(避免- 般用户抢占系统资源);
    4. 般用户仅可将nice值越调越高, 例如本来nice为5,则未来仅能调整到大于5。
2.  nice:新执行的命令给予新的nice值	
    语法
    nice [-n 数字] command
    选项与参数
    | -n | 后面接一个数值,数值范围-20~19 |
    列
    nice -n -5 vim &
3.  renice:已存在进程nice重新调整
    renice [number] PID
    列
    renice -5 14836

七. 查看系统资源信息
1.  free:查看内存使用情况
    语法
    free [-b|-k|-m|-g|-h] [-t] [-s N -c N]
    选项与参数
    | -b | 直接输入free时,显示的单位是KBytes,我们可以使用b (Bytes)、m (MBytes)、k (KBytes)
        及g (GBytes)来显示单位,也可以直接让系统自己指定单位(-h)。|
    | -t | 在输出的最终结果,显示物理内存与swap的总量。|
    | -s | 可以让系统不断刷新显示数据,对于系统查看挺有效。|
    | -c | 与-s同时处理,让free列出几次的意思。|
    说明
    1. Mem哪一行显示的是物理内存量
    2. Swap则是内存交换分区量
    3. total是总量
    4. used是已被使用量
    5. free则是剩余可用的量
    6. shared、buffers、cached是已被使用量中,用作为缓冲及缓存的,因此后面有一个available(可用的)数值
2.  uname:查看系统与内核相关信息
    语法
    uname [-asrmpi]
    选项与参数
    | -a | 所有系统相关的信息,包括下面的数据都会被列出来 |
    | -s | 系统内核名称 |
    | -r | 内核的版本 |
    | -m | 本系统的硬件架构,例如i686或x86-64 | 
    | -p | CPU的类型,与-m类似,只是显示的是CPU的类型 |
    | -i | 硬件的平台(x86)|
3.  uptime:查看系统启动时间与任务负载
4.  netstat:追踪网络或socket文件【用于网络监控方面】
    语法
    选项与参数
    | -a | 将目前系统上所有的连接、监听、socket信息都列出来。|
    | -t | 列出tcp网络封包的信息。|
    | -u | 列出udp网络封包的信息。|
    | -n | 不以进程的服务名称,以端口号(port number)来显示。|
    | -l | 列出目前正在网络监听(listen)的服务。|
    | -p | 列出该网络服务的进程PID。|
    列
    # 找出目前系统已在监听的网络连接及其PID
    netstat -tulnp
5.  dmesg: 分析内核产生的信息
    列
    # 输出所有的内核启动时信息
    dmesg | more
    # 查找启动的时候,硬盘相关信息是什么
    dmesg | grep -i vda
6.  vmstat:检测系统资源变化
    语法
    vmstat [-a] [延迟[总计检测次数]] <==CPU/内存等信息
    vmstat [-fs]				   <==内存相关
    vmstat [-S单位]				   <==设置显示数据的单位
    vmstat [-d] 				   <==与磁盘有关
    vmstat [-p分区]				   <==与磁盘有关
    选项与参数
    | -a | 使用inactive/active(活动与否)替换buffer/cache内存输出信息 |
    | -f | 开机到目前为止,系统复制(fork)的进程数。|
    | -s | 将一些事件 (启动至目前为止)导致的内存变化情况列表说明。|
    | -S | 后面可以接单位,让显示的数据有单位,例如K/M替换Bytes的容量。|
    | -d | 列出磁盘的读写总量统计表。|
    | -p | 后面列出分区,可显示该分区的读写总量统计表。|
    列
    # 统计目前主机cpu状态,每秒一次,共计3次。
    vmstat 1 3

八. 特殊文件与进程
1. /proc/*代表的意义
    说明
    1. 进程都是在内存当中,而内存当中的数据又都是写入到/proc/*这个目录下
    目录下文件意思
    省略

九. 查询已使用文件或已执行进程使用的文件
1.  fuser:借由文件(或文件系统)找出正在使用该文件的进程
    语法		
    fuser [-umv] [-k [i] [-signal]] file/dir
    选项与参数
    | -u | 除了进程的PID之外,同时列出该进程的拥有者。|
    | -m | 后面接的那个文件名会主动地上提到该文件系统的最顶层,对umount不成功很有效 |
    | -v | 可以列出每个文件与进程还有命令的完整相关性。|
    | -k | 找出使用该文件/目录的PID,并试图以SIGKILL(-9)这个信号给予该PID |
    | -i | 必须与-k配合,在删除PID之前会先询问使用者意愿。|
    列
    # 找出目前所在目录的使用PID/所属账号/权限是什么?
    fuser -uv .
    说明
    ACCESS项目代表意义
    1. c: 此进程在当前的目录下(非子目录)
    2. e: 可被出发为执行状态
    3. f: 是一个被开启的文件
    4. r: 代表顶层目录(root directory)
    5. F: 该文件被使用了,不过在等待响应中
    6. m: 可能为共享的动态函数库

2.  lsof:列出被进程所使用的文件名称
    语法
    lsof [-aUu] [+d]
    选项与参数
    | -a | 多项数据需要【同时成立】才显示出结果时 |
    | -U | 仅列出UNIX-like系统的socket文件类型 |
    | -u | 后面接username,列出该使用者相关进程所使用的文件 |
    | +d | 后面接目录,亦即找出某个目录下面已经被使用的文件 |
    列
    # 列出系统所有已经被开启的文件与设备
    lsof
    # 仅列出关于root的所有进程所使用的socket文件
    lsof -u root -a -U

3.  pidof:找出某个正在执行的进程的PID
    语法
    pidof [-sx] program_name
    | -s | 仅列出一个PID而不列出所有PID |
    | -x | 同时列出该program_name可能的PPID那个进程PID |
    列
    pidof systemd rsyslogd

十. SELinux初探
1.  什么是SElinux
    说明
    1. 当初设计的目标,避免资源的误用
    2. SELinux是整合到内核的一个模块
    3. 强制访问控制(MAC)
省略-后面记录

第十七章 认识系统服务(daemon)

一. 什么是daemon与服务(service)
	说明
	1. 系统为了某些功能必须提供一些服务(不论是系统本身还是网络方面),这个服务就称为service
	2. daemon是一个程序执行后的进程

二. 通过systemctl管理服务
1.	systemctl管理单一服务(service unit)的启动/开机启动与查看状态
	语法
	systemctl [command] [unit]
	command主要有:
	| start     | 立刻启动后面接的unit。|
	| stop      | 立刻关闭后面接的unit。|
	| restart   | 立刻重新启动后面接的unit,亦即执行stop再start的意思。|
	| reload    | 不关闭后面接的unit的情況下,重新加载配置文件,让设置生效。|
	| enable    | 设置下次开机时,后面接的unit会被启动。|
	| disable   | 设置下次开机时,后面接的unit不会被启动。|
	| status    | 目前后面接的这个unit的状态,会列出有没有正在执行、开机默认执行与否、登录等信息等。|
	| is-active | 目前有没有正在运行中。|
	| is-enable | 开机时有没有默认要启用这个unit。|
	列
	# 查看atd服务状态
	systemctl status atd.service
	常见状态信息:
	目前状态信息:
	acive (runing):正有一个或多个进程正在系统中运行的意思,举例来说,正在运行中的vsftpd就是这种模式。
	active (exited): 
		仅执行一次就正常结束的服务,目前并没有任何进程在系统中执行。
		举例来说,开机或是挂载时才会执行一一次的quotaon功能,就是这种模式。quotaon不需一直运行,只需执行一次之后,就交给文件系统去自行处理。
		通常用bash shell写的小型服务,大多是属于这种类型(无须常驻内存)。
	active (waiting): 
		正在运行当中,不过还需等待其他的事件发生才能继续运行。
		举例来说,打印的队列相关服务就是这种状态。虽然正在启动中,
		不过,也需要真的有队列进来(打印作业)这样它才会继续唤醒打印机服务来进行下一步的打印功能。
	inactive: 这个服务目前没有运行的意思。
	默认状态信息:
	enabled:; 这个daemon将在开机时被运行。
	disabled: 这个daemon在开机时不会被运行。
	static:这个daemon不可以自己启动(不可enable),不过可能会被其他的enabled的服务来唤醒(依赖属性的服务)。
	mask:这个daemon无论如何都无法被启动,因为已经被强制注销(非删除)。可通过systemctl unmask方式改回默认状态。

2.  强迫服务注销(mask)的练习
	说明
	1. mask注销操作,只是让启动的脚本成空的设备而已
	2. 非正规关闭服务
	3. 应用于:关闭了一个服务,但是关闭这个下的依赖服务可能会启动。
	列
	systemctl stop cups.servcie
	systemctl mask cups.service
	systemctl status cups.service
	systemctl ummask cups.service

3.	通过systemctl查看系统上所有的服务
	语法
	systemctl [command] [--type=TYPE] [--all]
	command:
		list-units		: 依据unit显示目前有启动unit,若加上--all才会列出没启动的。
		list-unit-files : 依据/usr/lib/systemd/system/内的文件,将所有文件列表说明
	--type=TYPE:unit类型,主要有service,socket,target等
	列
	# 列出系统上面有启动的unit
	systemctl
	systemctl list-units --type=service --all

4.	通过systemctl管理不同的操作环境
	说明
	操作界面性相关性比较高的target:
	1. graphical.target: 命令加图形界面
	2. multi-user.target: 纯命令行模式
	语法
	systemctl [command] [unit.target]
	选项与参数:
	command:
		get-default: 取得目前target
		set-default:设置后面接的target成为默认的操作模式
		isolate	   :切换到后面接的模式
	列
	systemctl get-default
	systemctl set-default multi-user.target	
	列:其他
	systemctl poweroff  系统关机。
	systemctl reboot    重新开机。
	systemctl suspend   进入挂起模式。
	systemctl hibernate 进入休眠模式。
	systemctl rescue    强制进入恢复模式。
	systemctl emergency 强制进入紧急恢复模式。

5.  通过systemctl分析各服务之间的依赖性
	语法
	systemctl list-dependencies [unit] [--reverse]
	选项于参数:
	| --reverse | 反向追踪谁使用这个unit意思 |
	列
	systemctl list-dependencies default.target
	
6.	与systemd的daemon运行过程相关的目录简介
	列
	# socket服务文件放置哪里
	systemctl list-sockets
	# 查看服务与端口对应
	cat /etc/services

三. systemctl针对service类型的配置文件
四. systemctl针对timeer的配置文件
五. CentOs7.x默认启动的服务概要

第十八章 认识与分析日志文件

一. 日志文件内容的一般格式
	说明
	每条信息记录几个重要内容:
	1. 时间发生的日期与时间
	2. 发生此事件的主机名
	3. 启动此事件的服务名称(如systemd、crond等)或命令与函数名称(如su、login...)
	4. 该信息的实际内容

二. rsyslog.service: 记录日志文件的服务
	列
	ps aux | rsyslog.service

三. rsyslog.service的配置文件:/etc/rsyslog.conf
	说明
	1. 什么服务
	2. 什么等级信息
	3. 需要被记录在哪里
1.  等级信息

四. 日志文件的安全性设置
	说明
	1. rsyslog的日志文件只要【被编辑过】就无法继续记录。
	2. 我们用chatt使用a这个属性
	列
	chattr +a /var/log/admin.log
	lsattr /var/log/admin.log
	chattr -a /var/log/admin.log

五. 日志文件服务器的设置
	说明
	1. 默认的端口是UDP或TCP的514端口
	2. 服务器会启动监听的端口,客户端则将日志文件再传出一份到服务器
	列
   【服务端】
	vim /etc/rsyslog.conf
	# 找到下面这几行
	# Provides UDP syslog reception
	#SModLoad imudp
	#SUDPServerRun 514
	# Provides TCР syslog reception
	#SModLoad imtcp
	#$InputTCPServerRun 514
	# 上面是UDP端口,下面是TCP端口。
	# 如果网络状态很稳定,就用UDP即可
	# 想要数据比较稳定传输,建议用TCP
	# 修改下面两行
	SModLoad imtcp
	$InputTCPServerRun 514
	# 重新启动与查看rsyslogd
	systemctl restart rsyslog.service
	netstat -ltnp | grep syslog
   【客户端】	
	vim /etc/rsyslog.conf
	*.* @@192.168.1.100 # 指向服务端IP
	#*.* @192.168.1.100 # 若用UDP传输,设置要变这样
	
六. 日志文件的轮询(logrotate)
	省略

七. systemd-journald.service简介
	说明
	1. systemd-journald使用内存的日志文件记录方式,重启后,日志信息不会被记录
	2. 开机启动过程中的信息,包括启动服务与服务若启动失败的情况等,会被记录到systemd-journald
	语法
	journalctl [-nrpf] [--since TIME] [--until TIME] _optional
	选择与参数
	|    | 默认会显示全部log内容,从就得输出到最新得信息 |
	| -n | 显示最近几行得意思,找最新得信息想到有用 |
	| -r | 反向输出,从最新得输出到最旧的信息 |
	| -p | 显示后面所接的信息重要性排序,参考rsyslogd信息 |
	| -f | 类似tail -f的功能,持续显示journal日志的内容(及时监控)|
	--since --until: 设置开始与结束时间,在规定时期输出
	_SYSTEMD_UNIT=unit.service : 只输出unit.service的信息而已。
	_COOM=bash : 只输出与bash有关的信息。
	_PID=pid   : 只输出此PID号的信息。
	_UID=uid   : 只输出此UID的信息。
	SYSLOG_FACILITY=[0-23] : 使用syslog.h规范的服务相对序号来调用出正确的数据。
	列
	journalctl --since "2015-08-18 00:00:00" --until "2015-08-19 00:00:00"
	journalctl --since today
	journalctl --since yesterday --until today

八. logger命令的应用
	说明
	1. 让你的数据存储到日志文件当中
	语法
	logger [-p 服务名称.等级] "信息"
	选项与参数
	| 服务名称.等级 | 前一节【信息等级】|
	列
	logger -p user.info "I will check logger command"

九. 分析日志文件
1.  CenOS默认提供的logwatch

第十九章 启动流程、模块管理与Loader【省略】

第二十章 基础系统设置与备份策略

一. 网络设置(手动设置DHCP自动获取)
	语法
	nmcli connection show [网卡名称]
	nmcli connection show
	意思
	# NAME   连接代号,通常在后面网卡DEVICE会一样
	# UUID   这个是特殊的设备代码,保留九号不要理他
	# TYPE   就是网卡的类型,通常就是以太网卡
	# DEVICE 网卡名称
	列
	# 设置手动参数【省略】
	# 设置自动获取IP参数
	nmcli connection modify eth0 \
	> connection.autoconnect yes \
	> ipv4.method auto
	nmcli connection up eth0
	nmcli connection show eth0

二. 修改主机名称
	语法
	hostnamectl [set-hostname 你的主机名称]
	列
	#显示主机名
	hostnamectl
	#修改主机名
	hostnamectl set-hostname www.wxq.com

三. 日期时间设置
	1. 时间的显示与设置
	说明
	1. 中国地区时间九比格林威治多了8个小时
	语法
	timedatectl [command]
	选项与参数
	| list-timezones | 列出系统上所有支持的时区名称 |
	| set-timezone   | 设置时区位置 |
	| set-tme        | 设置时间 | 
	| set-ntp        | 设置网络校时系统 |
	列
	#显示目前的时区与时间信息
	timedatectl
	timedatectl list-timezones | grep -i new
	2. 时间调整
	列
	timedatectl set-name "2015-10-10 12:02:00"
	3. 用ntpdate手动网络校时
	列
	ntpdate s2m.time.edu.cn <==北京大学提供的服务器
	
四. 语系设置localectl【省略】
五. 防火墙简易设置【省略】

六. 服务器硬件数据的收集
1.  使用dmidecode查看硬件设备
	语法
	dmidecode -t type
	选项与参数
	详细type选项man dmidecode查询	
	| 1 | 详细的系统信息,含主板型号与硬件的基础信息等 |
	| 4 | CPU的相关信息,包含倍频、外频、内核数、内核线程等。|
	| 9 | 系统的相关插槽格式,包含PCI、PCI-E等的插槽规格说明。|
	|17 | 每一个内存插槽的规格,若有内存,则列出该内存的容量与型号。|

2.  lspci:【查看PIC接口设备】
	语法
	lspci [-vvn]
	选项与参数
	| -v  | 显示更多的PCI设备的详细信息 |
	| -vv | 比-v还要更详细的详细信息 | 
	| -n  | 直接查看PCI的ID而不是厂商名称 |
	更新
	update-pciids

3.  lsusb:【查询多少个USB设备】
	语法
	lsusb [-t]
	选项与参数
	| -t | 使用类似树状目录来显示各个USB端口的相关性 |

4.  iostat:【查询整台机器的存储设备】
	说明
	1. 要安装 yum install sysstat
	语法
	iostat [-c|-d] [-k|-m] [-t] [间隔秒数] 【检测次数】
	选项与参数
	| -c | 仅显示CPU的状态 |
	| -d | 仅显示存储设备的状态,不可与-c一起用 |
	| -k | 默认显示的是block,这里可以改KBytes的大小显示 |
	| -m | 与-k类似,只是以MB的单位来显示结果 |
	| -t | 显示日期出来 |

5.  了解磁盘的监控状态
	列
	smartctl -a /dev/sda
	smartctl -t short /dev/sda

七. 备份要点
1.  必要备份的文件
	1. /etc/ 整个目录
	2. /home/ 整个目录
	3. /var/spool/mail/
	4. /var/spoll/{at | cron}
	5. /boot/
	6. /root/
	7. 自己的创建的目录文件,比如 /data
	其他省略

第二十一章 软件安装:源代码与Tarball

第二十二章 软件安装RPM、SRPM、与YUM

第二十三章 X Window设置介绍

第二十四章 Linux内核编译与管理

linux设置

一. CentOS7设置笔记本合盖不休眠
	说明
	1. CentOS7下对应配置文件,目录为:/etc/systemd/logind.conf
	意思
	HandlePowerKey:     按下电源键后的行为,默认power off
	HandleSleepKey:     按下挂起键后的行为,默认suspend
	HandleHibernateKey: 按下休眠键后的行为,默认hibernate
	HandleLidSwitch:    合上笔记本盖后的行为,默认suspend
	值
		ignore    忽略,跳过
		power off 关机
		eboot     重启
		halt      挂起
		lock      仅锁屏,计算机继续工作
	列
	# 查看系统配置文件
	grep -r HandleLidSwitch /etc/systemd/logind.conf
	# 更改配置并重启服务
	sed -i 's/#HandleLidSwitch=suspend/HandleLidSwitch=lock/g' /etc/systemd/logind.conf
	systemctl restart systemd-logind.service

安装常用软件

一. 上传下载
	yum -y install lrzsz
	语法
	rz filename
	sz filename

其他

一. init 0 init1 init 3 init 5 init 6 启动级别 一般用init 3居多
	运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 
	运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 
	运行级别2:多用户状态(没有NFS) 
	运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 
	运行级别4:系统未使用,保留 
	运行级别5:X11控制台,登陆后进入图形GUI模式 
	运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
二. X Window
	启动窗口 startx
	来回切换 init 3/Ctrl+Alt+F1  -  init 5/startx

三. 防火墙
	查看 systemctl status firewalld.service
	关闭-开机失效 systemctl stop firewalld.service
	开启-开机失效 systemctl start firewalld.service
	永远关闭-需要重启生效 systemctl disable firewalld.service
	在开机时启用一个服务  systemctl enable firewalld.service

四. 查看ip ifconfig 外网 curl ifconfig.me
	1.查询笔记本cpu,几核,内存,硬盘块数,查看机器所有硬件信息,任务管理器
		more /proc/cpuinfo |grep -i model
		cat /proc/cpuinfo |grep "cores"|uniq
		free -m
		cat /proc/scsi/scsi
		dmesg |more
		top    详细命令-
		查看cpu温度 cat /sys/class/thermal/thermal_zone0/temp
	查看存储结构 df -h
	Linux查看CPU和内存使用情况 top

问题

无法启动网络管理器在线等待
	引导至恢复模式,打开终端并使用: sudo systemctl disable NetworkManager-wait-online.service
swp文件处理
	修复 vi -r {your file name}
	删除 rm .XXX.swp。注意有个小数点. 
连接wifi
	
	
xshell的快捷键(非常实用)
	
linux命令查询: https://man.linuxde.net/
netstat -tulpn
systemctl restart network


http://tlblog.top/