Linux CentOS 学习笔记

00:01:1f:2d:3e:4d
分区>格式化>硬件设备文件名>挂载(分配盘符)
1、磁盘分区

主分区:	最多只能由4个
扩展分区:
	最多只有1个
	主分区加扩展分区做多有4个
	不能写入数据,只能包含逻辑分区
逻辑分区:分区号从5开始,1、2、3、4这四个分区号只能由主分区和扩展分区占用

2、格式化

含义:写入文件系统(Microsoft的FTA16、FTA32、NTFS  Linux的EXT2、EXT3、EXT4)
block:每个数据块4KB
inode:i节点号,用于表示文件存放位置

3、硬件设备文件名

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

分区设备文件名:直接在硬件设备文件名后面加分区号:/dev/sda1

4、挂载

必须分区:
	根分区:/
	swap分区:交换分区,内存的倍,不超过2G
推荐分区:
	/boot:启动分区,200MB

5、Linux CentOS操作系统安装
内存小于628MB采用命令符安装方式,大于628MB采用图形界面安装方式
进入主板操作系统BIOS中的Boot中更改启动顺序

Install or upgrade an existing system:安装或升级现有系统
Install system with basic video driver:安装过程采取基本的显卡驱动
Rescue installed system:进入系统修复模式
Boot from local drive:退出安装从硬盘启动
Memory test:存储介质检测

Desktop:桌面
Minimal Desktop:最小化桌面
Minimal:最小化
Basic Server:基本服务器
Database Server:数据库服务器
Web Server:网页服务器
Virtual Host:虚拟主机
software development workstation:软件开发工作站

root:superman超级管理员,root的家目录:/root
普通用户的家目录:/home/用户名

安装日志
/root/install.log:存储了安装在系统中的软件包及版本信息
/root/install.log.syslog:存储了安装过程中留下的事件记录
/root/anaconda-ks.cfg:以Kickstart配置文件的格式记录安装过程中设置的选项信息

6、临时配置Linux的IP地址:ifconfig eth0 192.168.43.156

7、Linux严格区分大小写

8、Linux中所有的内容都是文件形式保存,包括硬盘
硬盘文件:/dev/sda1
光盘文件:/dev/sr0

9、Linux不靠扩展名来区分文件类型

压缩包:“*.gz”、“*.bz2”、“*.tar.bz2”、“.tgz”等
二进制软件包:“*.rpm”
网页文件:“*.html”、“*.php”
脚本文件:“*.sh”
配置文件:“*.conf”

10、Linux所有的存储设备都必须挂载之后用户才能使用,包括硬盘、U盘和光盘

11、Windows下的程序不能直接在Linux中安装和运行

12、Linux各目录的作用

目录名			目录作用
/bin/		存放系统命令的目录,普通用户和超级用户都可以执行。不过放在/bin下的命令在单用户模式下也可以执行
/sbin/		保存和系统环境设置相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是有些命令可以允许普通用户查看
/usr/bin/	存放系统命令的目录,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行
/usr/sbin/	存放根文件系统不必要的系统管理命令,例如多数服务器程序。只有超级用户可以使用。
/boot/		系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
/dev/		设备文件保存的位置。用来保存所有硬件设备文件
/etc/		配置文件保存位置。系统内所有采用默认安装方式(rpm)的服务的配置文件全部保存在这个目录下,如用户账户和密码,服务的启动脚本,常用服务的配置文件等
/home/		普通用户的家目录。建立每个用户时,每个用户要有一个默认的登录位置,这个位置就是这个用户的家目录,所有普通用户的家目录就是在/home下建立一个和用户名相同的目录
/lib/		系统调用的函数库保存位置
/lost+found/	当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并恢复已损坏的文件系统。这个目录只在每个分区中出现,例如/lost+found就是根分区的备份恢复目录,/boot/lost+found就是/boot分区的备份和恢复目录
/media/		挂载目录。系统建议是用来挂载媒体设备的,例如软盘和光盘
/mnt/		挂载目录,早期Linux中只有这一个挂载目录,并没有细分。现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其它操作系统分区
/misc/		挂载目录。系统建议用来挂载NFS服务的共享目录。
/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 Software Resource的缩写,所以不是存放用户数据,而是存放系统软件资源的目录。系统中安装的软件大多数保存在这里,所以除了/usr/bin/和/usr/sbin/这两个目录
/var/		动态数据保存位置。主要保存缓存、日志以及软件运行所产生的文件

13、远程服务器不允许关机,只能重启

14、重启时应该关闭服务

15、在服务器访问高峰不要运行高负载命令

16、远程配置防火墙时不要把自己踢出服务器

17、指定合理的密码规范并定期更新

18、合理分配权限

19、定期备份重要数据和日志(鸡蛋不要放在一个篮子里)

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

ls -la /etc
说明:	
		1)个别命令使用不遵循此规格
		2)当有多个选项时,可以写在一起
		3)简化选项和完整选项-a等于--all

21、目录处理指令:ls
命令名称:ls
命令英文原意:list
命令所在路径:/bin/ls
执行权限:所有用户
功能描述:显示目录文件

语法:ls 选项[ald] [文件或目录]
		-a:显示所有文件包括隐藏文件
		-l:详细信息显示  -lh:人性化显示 
		-ld:查看目录属性 -i:inod号
以.开头的文件为隐藏文件

-rw-------. 1 root root 1205 3月    3  08:10  anaconda-ks.cfg   
创建人就是所有者U,所属组就是G,其他用户就时其他人O
第一位-表示文件,d表示目录,l表示软连接,c字符设备文件,b块设备文件,s套接字文件  r:读,w:写,x:执行(r:4,w:2,x:1 )

22、目录处理命令:mkdir
命令名称:mkdir
命令英文原意:make directoties
命令所在路径:/bin/mkdir
执行权限:所有用户

语法:mkdir -p [目录名]
功能描述:创建新目录
		-p 递归创建
	例如:
mkdir -p /tmp/japan/boduo /tmp/japan/cangjing(一次创建多个目录)

23、目录处理命令:cd
命令名称:cd
命令英文原意: change directory
命令所在路径:shell内置命令
执行权限:所有用户

语法:cd [目录]
功能描述:切换目录
例如:cd /tmp/japan/boduo //切换到指定目录
例如:cd .. //返回上一级目录(.表示当前目录,..表示上一级目录)

24、目录处理命令:pwd
命令名称:pwd
命令英文原意:print working directory
命令所在路径:/bin/pwd
执行权限:所有用户

语法:pwd
功能描述:显示当前目录
例如:pwd

25、目录处理命令:rmdir
命令名称:rmdir
命令英文原意:remove empty directories
命令所在路径:/bin/rmdir
执行权限:所有用户

语法:rmdir [目录名]
功能描述:删除空目录
例如:rmdir /temp/japan/boduo

26、目录处理命令:cp
命令名称:cp
命令英文原意:copy
命令所在路径:/bin/cp
执行权限:所有用户

语法:cp -rp [原文件或目录] [目标目录]
	-r:复制目录
	-p:保留文件属性
功能描述:复制文件或目录
例如:cp -r /tmp/japan/cangjing /root
例如:cp -r /tmp/japan/cangjing /root/shenchao.18+//边复制边更名

27、目录处理命令:mv
命令名称:mv
命令英文原意:move
命令所在路径:/bin/mv
执行权限:所有用户

语法:mv [原文件或目录] [目标目录]
功能描述:剪切文件、改名

28、目录处理命令:rm
命令名称:rm
命令英文原意:remove
命令所在路径:/bin/rm
执行权限:所有用户

语法:rm -rf [文件或目录]
	-r:删除目录
	-f:强制执行
功能描述:删除文件或目录

29、文件处理命令:touch
命令名称:touch
命令所在路径:/bin/touch
执行权限:所有用户

语法:touch [文件名]
功能描述:创建空文件
例如:touch japanlovestory.list

30、文件处理命令:cat
命令名称:cat
命令所在文件:/bin/cat
执行权限:所有用户

语法:cat [文件名]
功能描述:显示文件内容
	-n显示行号
例如:cat /etc/issue
例如:cat/etc/services

31、文件处理命令:tac
命令名称:tac
命令所在路径:/usr/bin/tac
执行权限:所有用户

语法:tac [文件名]
功能描述:显示文件内容(反向列示)
例如:tac /etc/issue

32、文件处理命令:more
命令名称:more
命令所在路径:/bin/more
执行权限:所有用户

语法:more [文件名]
	(空客)或f		翻页
	(Enter)		换行
  	  q或Q			退出
功能描述:分页显示文件内容
例如:more /etc/services

33、文件处理命令:less
命令名称:less
命令所在路径:/usr/bin/less
执行权限:所有用户

语法:less [文件名]
功能描述:分页显示文件内容(可向上翻页)
	(上键)		向上一行
	(pageup键)	向上一页
	(/关键字)	搜索关键字  按n遍历
例如:less /etc/services

34、文件处理命令:head
命令名称:head
命令所在路径:/usr/bin/head
执行权限:所有用户
语法:head [文件名]

功能描述:显示文件的前几行(未指定行数,默认为10行)
		-n 指定行数
例如:head -n 20 /etc/services

35、文件处理命令:tail
命令名称:tail
命令所在路径:
执行权限:所有用户

语法:tail [文件名]
功能描述:显示文件的后几行(未指定行数,默认为10行)
		-n 指定行数
		-f 动态显示文件尾内容
例如:tail -n 20 /etc/services

36、文件处理命令:ln
命令名称:ln
命令英文原意:link
命令所在路径:/bin/ln
执行权限:所有用户

语法:ln -s [原文件] [目标文件]
	-s 创建软链接
功能描述:生成链接文件
例如:ln -s /etc/issue /tmp/issue.soft
例如:ln /etc/issue /tmp/issue.hard

37、软链接特征:类似Windows的快捷方式
文件权限都是lrwxrwxrwx,但是最终的权限还是由原文件决定
文件大小-只是符号链接
箭头指向原文件

38、硬链接特征
拷贝cp -p + 同步更新
通过I节点识别(inode号不同)
不能跨分区
不能针对目录使用

39、权限管理命令:chmod
命令名称:chmod
命令英文原意:change the permissions mode of a file
文件所在路径:/bin/chmod
执行权限:所有用户

语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录]
	[mode=421] [文件或目录]
	-R 递归修改
功能描述:改变文件或目录权限
例如:chmod g+w testfile
例如:chmod -R 777 testdir

40、文件目录权限总结(只有所有人和root可以改变目录和文件权限)

代表字符		权限			对文件的含义			对目录的含义
r			读权限		可以查看文件内容		可以列出目录中的内容
w			写权限		可以修改文件内容		可以在目录中创建、删除文件
x			执行权限		可以执行文件			可以进入目录

41、 权限管理命令:chown(只有root可以改变文件或目录的所有者)
命令名称:chown
命令英文原意:change file ownership
命令所在路径:/bin/chown
执行权限:所有用户

语法:chown [用户] [文件或目录]
功能描述:改变文件或目录的所有者
例如:chown shenchao fengjie

42、权限管理命令:chgrp
命令名称:chgrp
命令英文原意:change file group ownership
命令所在路径:/bin/chgrp
执行权限:所有用户

语法:chagrp [用户组] [文件或目录]
功能描述:改变文件或目录的所属组
例如:chgrp lampbrother fengjie

44、权限管理命令:umask
命令名称:umask
命令英文原意:the user file-creation mask
命令所在路径:shell内置命令
执行权限:所有用户

语法:umask [-S]
	-S  以rwx形式显示新建文件缺省权限
功能描述:显示、设置文件的缺省权限
例如:umask -S
例如:umask 077(0022:0特殊权限,022->755)

45、文件搜索命令:find
命令名称:find
命令所在路径:/bin/find
执行权限:所有用户

语法:find [搜索范围] [匹配条件]
功能描述:文件搜索
例如:find /etc -name init	在目录/etc中查找文件init(iname不区分大小写,通配符:*,单个字符:?)
例如:find / -size +204800	在根目录下查找大于100MB的文件(+n->大于,-n->小于,n->等于,n为数据块,一个数据块0.5KB)
例如:find /home -user shenchao	在根目录下查找所有者为shenchao的文件(-group根据所属组查找)
例如:find /etc -cmin -5	在/etc下查找五分钟内被修改过属性的文件和目录(-amin访问时间access,-cmin文件属性change,mmin文件内容modify,+表示超过多长时间,-表示多少时间之内)
例如:find /etc -size +163840 -a -size -204800	在/etc下查找大于80MB小于100MB的文件(-a两个条件同时满足,-o两个条件满足任意一个)
例如:find /etc -name inittab -exec ls -l {} \;		在/etc下查找inittab文件并显示其详细信息(-exec/-ok 命令 {} \;对搜索结果执行操作)
例如:find /etc -type f	在/etc下根据文件类型查找(f:文件,d:目录,l:软连接文件)
例如:find /etc -inum 50	根据i节点查找(查找硬链接、找到文件并进行操作)

46、文件搜索命令:locate
命令名称:locate
命令所在路径:/usr/bin/locate
执行权限:所有用户

语法:locate 文件名
功能描述:在文件资料库中查找文件(文件资料库没有就无法找到,updatedb更新资料库,/tmp中不在资料库内)
例如:locate inittab(-i:不区分大小写)

47、文件搜索命令:which
命令名称:which
文件所在路径:/usr/bin/which
执行权限:所有用户

语法:which 命令
功能描述:搜索命令所在目录及别命信息
例如:which ls

48、文件搜索命令:whereis
命令名称:whereis
命令所在路径:/usr/bin/whereis
执行权限:所有用户

语法:whereis [命令名称]
功能描述:搜索命令所在目录及帮助信息文档路径
例如:whereis ls

49、文件搜索命令:grep
命令名称:grep
命令所在路径:/bin/grep
执行权限:所有用户

语法:grep -iv [指定字串] [文件]
功能描述:在文件中搜索字串匹配的行并输出
	-i:不区分大小写
	-v:排除指定字串(^#:以#为首的行)
例如:grep mysql /root/install.log

50、帮助命令:man
命令名称:man
命令英文原意:manual
命令所在路径:/usr/bin/man
执行权限:所有用户

语法:man [命令或配置文件名称]
功能描述:获得帮助信息
例如:man ls	查看ls命令的帮助信息
例如:man services	查看配置文件services的帮助信息(man 1命令的帮助,man  5配置文件的帮助)

51、帮助命令:whatis/apropos
命令名称:whatis/apropos
命令所在路径:/usr/bin/whatis
执行权限:所有用户

语法:whatis [命令或配置文件]
功能描述:获得命令或配置的用途
例如:whatis services

52、帮助命令:–help

语法:命令 --help
功能描述:获得命令的常用选项及含义
例如:ls --help

53、帮助命令:help
命令名称:help
命令所在路径:Shell内置命令
执行权限:所有用户

语法:help [命令]
功能描述:查看Shell内置命令的帮助信息

54、用户管理命令:useradd
命令名称:useradd
命令所在路径:/usr/sbin/useradd
执行权限:root

语法:useradd 用户名
功能描述:添加用户
例如:useradd yangmi

55、用户管理命令:passwd
命令名称:passwd
命令所在路径:/usr/bin/passwd
执行权限:所有用户

语法:passwd 用户名
功能描述:设置用户密码
例如:passwd yangmi

56、用户管理命令:who
命令名称:who
命令所在路径:/usr/bin/who
执行权限:所有用户

语法:who
功能描述:查看登录用户信息
例如:who   (登录用户名,登录终端【tty:本地,pts:远程终端】,登录时间,终端IP地址)

57、用户管理命令:w
命令名称:w
命令所在路径:/usr/bin/w
执行权限:所有用户

语法:w
功能描述:查看登录用户详细信息
例如:w(系统时间,系统连续运行时间,当前登录用户个数,负载均衡指数:1分钟:5分钟:15分钟)
	(用户名,登录终端,终端IP地址,登录时间,空闲时间,累计占用CPU时间,当前操作占用CPU时间,当前操作)

58、压缩解压命令:gzip
命令名称:gzip
命令英文原意:GNU zip
命令所在路径:/bin/gzip
执行权限:所有用户

语法:gzip [文件]
功能描述:压缩文件(解压缩:gzip -d [文件])
压缩后文件格式:.gz

59、压缩解压命令:gunzip
命令名称:gunzip(不保留原文件)
命令英文原意:GUN unzip
命令所在路径:/bin/gunzip
执行权限:所有用户

语法:gunzip [压缩文件]
功能描述:解压缩.gz的压缩文件
例如:gunzip boduo.gz

60、压缩解压命令:tar
命令名称:tar
命令所在路径:/bin/tar
执行权限:所有用户

语法:tar 选项[-zcf] [压缩后的文件名] [目录]
	-c:打包,-x:解包,-t:临时查看
	-v:显示详细信息
	-f:指定文件名
	-z:打包同时压缩
功能描述:打包目录
压缩后文件格式:.tar.gz
例如:tar -zcf japan.tar.gz japan

61、压缩解压命令:zip
命令名称:zip(保留原文件)
命令所在路径:/usr/bin/zip
执行权限:所有用户

语法:zip 选项[-r] [压缩后文件名] [文件或目录]
	-r:压缩目录
功能描述:压缩文件或目录
压缩后的格式:.zip

62、压缩解压命令:unzip
命令名称:unzip
命令所在路径:/usr/bin/unzip
执行权限:所有用户

语法:unzip [压缩文件]
功能描述:解压.zip的压缩文件
例如:unzip test.zip

63、压缩解压命令:bzip2
命令名称:bzip2
命令所在路径:/usr/bin/bzip2
执行权限:所有用户

语法:bzip2 选项[-k] [文件]
	-k:产生压缩文件后保留原文件
功能描述:压缩文件
压缩后文件格式:.bz2
例如:bzip2 -k boduo
例如:tar -cjf Japan.tar.bz2 Japan

64、压缩解压命令:bunzip2
命令名称:bunzip2
执行权限:所有用户

语法:bunzip2 选项[-k] [压缩文件]
	-k:解压后保留原文件
功能描述:解压缩
例如:bunzip2 -k boduo.bz2
例如:tar -xjf Japan.tar.bz2

65、网络命令:write
命令名称:write
命令所在路径:/usr/bin/write
执行权限:所有用户

语法:write <用户名>
功能描述:给用户发信息,以Ctrl+D保存结束
例如:write linzhiling

66、网络命令:wall
命令名称:wall
命令英文原意:write all
命令所在路径:/usr/bin/wall
执行权限:所有用户

语法:wall [message]
功能描述:发广播信息
例如:wall ShenChao is a honest man!

67、网络命令:ping
命令名称:ping
命令所在路径:/bin/ping
执行权限:所有用户

语法:ping 选项 IP地址
	-c:指定发送次数
功能描述:测试网络连通性
例如:ping 10.52.41.155

68、网络命令:ifconfig (CentOS7 使用 ip addr,vim /etc/sysconfig/network-scripts/ifcfg-网卡名)
命令名称:ifconfig
命令英文原意:interface configure
命令所在路径:/sbin/ifconfig
执行权限:root

语法:ficonfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
例如:ifconfig eth0 192.168.8.250
HWaddr:MAC地址(网卡硬件地址)

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=38edc327-6484-4881-9842-803cd69f7c14
DEVICE=ens33
ONBOOT=yes

69、网络命令:mail
命令名称:mail
命令所在路径:/bin/mail
执行权限:所有用户

语法:mail [用户名]
功能描述:查看发送电子邮件
例如:mail root

70、网络命令:last
命令名称:last
命令所在路径:/usr/bin/last
执行权限:所有用户

语法:last
功能描述:列出目前与过去登入系统的用户信息
例如:last

71、网络命令:lastlog
命令名称:lastlog
命令所在路径:/usr/bin/lastlog
执行权限:所有用户

语法:lastlog
功能描述:检查某用户上次登录时间
例如:lastlog
例如:lastlog -u 502(利用用户的UID查看)

72、网络命令:traceroute
命令名称:traceroute
命令所在路径:/bin/traceroute
执行权限:所有用户

语法:traceroute
功能描述:显示数据包到主机的所有路径
例如:traceroute www.lampbrother.net

73、网络命令:netstat(韩立刚老师的计算机网络)
命令名称:netstat
命令所在路径:/bin/netstat
执行权限:所有用户

语法:netstat [选项]
功能描述:显示网络相关信息
	-t:TCP协议
	-u:UDP协议
	-l:监听
	-r:路由
	-n:显示IP地址和端口号
例如:netstat -tlun:	查看本机监听地端口
例如:netstat -an:		查看本机所有地网络连接
例如:netstat -rn:		查看本机路由表

74、网络命令:setup
命令名称:setup
命令所在路径:/usr/bin/setup
执行权限:root

语法:setup
功能描述:配置网络
例如:setup

75、挂载命令
命令名称:mount
命令所在位置:/bin/mount
执行权限:所有用户

语法:mount [-t 文件系统] 设备文件名 挂载点
例如:mount -t iso9660 /dev/sr0 /mnt/cdrom

76、卸载命令:umount
命令名称:umount
命令所在位置:/bin/umount
执行权限:所有用户

语法:umount [设备文件名]
例如:umount /dev/sr0
例如:umount /mnt/cdrom

77、关机重启命令:shutdown

shutdown [选项] 时间
	-c:取消前一个关机命令
	-h:关机(now)
	-r:重启

78、关机命令:halt
79、关机命令:poweroff(相当于直接断电,最好少用)
80、关机命令:init 0
81、重启命令:reboot
82、重启命令:init 6

83、系统运行级别(init)

0:关机
1:单用户(启动最小的服务)
2:不完全多用户,不含NFS服务(network file system)
3:完全多用户
4:未分配
5:图形界面
6:重启

84、修改系统默认运行级别

cat /etc/inittab
id:3:initdefault:

85、查询系统运行级别

runlevel

86、退出命令:logout

87、文件编辑器:Vim

vim filename
命令模式——>插入模式:i,a,o
插入模式——>命令模式:按ESC键
命令模式——>编辑模式:按:键
编辑模式——>命令模式:结束运行后自动回到命令模式

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

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

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

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

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

搜索和搜索替换
命令					作用
/string				搜索指定字符串(搜索时忽略大小写:set ic,区分大小写:set noic)
n					搜索指定字符串的下一个出现位置
:%s/old/new/g		全文替换指定字符串(g不询问,c询问,%表示全文)
:n1,n2s/old/new/g	在指定范围内替换指定字符串

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

导入命令执行结果
:r !命令 			将命令结果导入到当前文件
:r 文件名2     	将文件2内容导入到当前文件光标处
:!命令         	可以在不退出Vim的情况下执行命令

定义快捷键:map 快捷键 触发命令
	例如::map ^p I#<ESC>(^p=Crtl+v+p)
	例如::map ^B 0x

连续行注释
	:n1,n2s/^/#/g(^表示行首)
	:n1,n2s/^#//g
	:n1,n2s/^/\/\//g(/的转义\/)

替换:ab mymail samlee@lampbrother.net

可以在家目录下.vimrc配置文件,可以将定义的快捷键和常用的字符替换编辑在里面,该用户打开别的文件也可以使用定义的快捷键

88、软件包分类

源码包
	脚本安装包
	优点:	开源,如果有足够的能力,可以修改源代码
			可以自由选择所需的功能
			软件是编译安装,所以更适合自己的系统,更加稳定效率也更高
			卸载方便
	缺点:	安装过程步骤较多,尤其安装较大的软件集合
			编译过程时间过长,安装比二进制安装时间长
			因为是编译安装,安装过程中一旦报错新手很难解决
二级制包(RPM包、系统默认包)
	优点:	包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
			安装速度比源码包安装快的多
	缺点:	经过编译,不再可以看到源代码
			功能选择不如源码包灵活
			依赖性

89、RPM包管理-rpm命令管理

RPM包命名规则
	http-2.2.15-15.el6.centos.1.i686.rpm(包全名)
	httpd	软件包名
	2.2.15	软件版本
	15	软件开发的次数
	e16.centos适合的linux平台
	i686	适合的硬件平台
	rpm	rpm包扩展名

RPM包依赖性
	树形依赖:a->b->c
	环形依赖:a->b->c->a
	模块依赖:www.rpmfind.net

包全名和包名
	包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径
	包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库

RPM安装
	rpm -ivh 包全名
	选项:
		-i:安装
		-v:显示详细信息
		-h:显示进度

RPM包升级
	rpm -Uvh 包全名
	选项:
		-U升级

RPM包卸载
	rpm -e 包名
	选项:
		-e:卸载
		--nodeps:不检查依赖性

查询命令
	rpm -q 包名
	选项:
		-q:查询是否已安装
		-a:所有	rpm -qa | grep httpd
		-i:软件信息
		-p:未安装包信息(需要跟包全名)
		-l:包中文件安装位置
		-f:查询系统文件属于哪个RPM包(需要跟系统文件名)
		-R:查询已安装软件包的依赖性
		-p:查询未安装软件包的依赖性

RPM包校验
	rpm -V 已安装的包名
	选项:
		-V:校验指定RPM包中的文件
	验证内容中的8个信息的具体内容如下
		S:文件大小是否改变
		M:文件的类型或文件的权限(rwx)是否发生改变
		5:文件MD5校验和是否改变(可以看成文件内容是否改变)
		D:文件的major和minor号改变
		L:文件路径是否改变
		U:文件的属主(所有者)是否改变
		G:文件的所属组是否改变
		T:文件的修改时间是否改变
		.:表示没有修改
	文件类型
		c:配置文件
		d:普通文件
		g:“鬼”文件,很少见,就是该文件不应该被这个RPM包包含
		l:授权文件
		r:描述文件

RPM包中文件提取
	rpm2cpio 包全名 | \(\表示命令没有输完)
	cpio -idv .文件绝对地址 (.表示将指定的文件提取到当前路径下)

90、RPM包管理-yum在线管理(yum不一定要上网,可以用光盘代替库,yum不能查询)

网络yum源
	vi /etc/yum.repos.d/CentOS-Base.repo
		[base]		容器名称,一定要放在[]中
		name		容器说明,可以随便自己写
		mirrorlist	镜像站点,这个可以注释掉
		baseurl		yum源服务器的地址
		enabled		此容器是否生效,不写或写成enable=1都是生效,写成enable=0是不生效
		gpgcheck	如果是1指RPM的数字证书生效,如果是0则不生效
		gpgkey		数字证书的公钥文件保存位置,不用修改

yum命令
	查询命令
		yum list			查询所有可用的软件包列表
		yum search 关键字 	搜索服务器上所有和关键字相关的包
	安装命令
		yum -y install 包名	在线安装软件包(yum -y install gcc C语音编译器)
	升级命令
		yum -y update 包名	在线升级软件包
	卸载命令
		yum -y remove 包名 	卸载已经安装的软件包

yum软件组管理命令
	yum grouplist				列出所有可用的软件组列表
	yum groupinstall 软件组名	安装指定的软件组,组名可以由grouplist查询出来(组名如果由空格需要加“”)
	yum groupremove 软件组名		卸载指定的软件组

yum光盘源
	挂载光盘	mount /dev/cdrom /mnt/cdrom
	让网络yum源文件失效
	修改光盘yum源文件

91、源码包管理

源码包和RPM包的区别

	安装位置不同
		RPM包安装位置
	/etc			配置文件安装位置
	/usr/bin/		可执行的命令安装位置
	/usr/lib/		程序所使用的函数库保存位置
	/usr/share/doc	基本软件使用手册保存位置
	/usr/share/man	帮助文件保存位置

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

	说明:安装位置不同带来的影响
		RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方法:/etc/rc.d/init.d/httpd start  或  service httpd start
		而源码包安装的服务不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,例如:/usr/local/apache2/bin/apachectl start

源码包的安装
	安装准备
		安装C语言编辑器
		下载源码包
	安装注意事项
		源码包保存位置:/usr/local/src
		软件安装位置:/usr/local
		如何确定安装过程报错
			安装过程停止
			出现error、warning、no的提示
	源码包安装过程
		下载源码包
		解压下载的源码包
		进入解压目录
			./configure:软件的配置与检查
				定义需要的功能选项--prefix=路径
				检测系统环境是否符合安装要求
				把定义好的功能选项和检测系统环境信息都写入Makefile文件,用于后续的编译
			make	编译,如果报错,用make clean清除编译内容
			make install编译安装
源码包的卸载
		不需要卸载命令,直接删除安装目录即可。不会遗留垃圾文件

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

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

下载软件
	http://sourceforge.net/projects/webadmin/files/webmin
解压缩,并进入解压目录
执行安装脚本

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

初始组:就是指用户一登陆就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名形同的组名作为这个用户的初始组
附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个

95、用户信息文件/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,改变Shell可以临时禁止用户登录)

96、影子文件/etc/shadow

第1字段:用户名
第2字段:加密密码
		加密算法升级为SHA512散列加密算法
		如果密码是“!!”或“*”代表没有密码不能登录(可以加!!号临时禁用用户登录)
第3字段:加密最后一次修改日期
		使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:两次密码的修改间隔(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码到期后的宽限天数(和第5字段相比)
		 0:代表密码过期后立即生效
		-1:代表密码过期后永远不会失效
第8字段:账号失效时间
		要用时间戳表示(把时间戳换算成日期:date -d "1970-01-01 16066 days",把日期换算成时间戳:echo $(($(date --date="2014/01/06" +%s)/86400+1))
第9字段:保留

97、组信息文件/etc/group

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

98、组密码文件/etc/gshadow

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

99、用户的家目录

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

100、用户的邮箱

/var/spool/mail/用户名/

101、用户模板目录

/etc/skel/(在新添加的用户的家目录中包含哪些文件的而使用的模板)

102、用户添加命令:useradd

useradd [选项] 用户名
	-u UID			手工指定用户的UID号
	-d 家目录		手工指定用户的家目录
	-c 用户说明		手工设置用户的说明
	-g 组名			手工指定用户的初始组
	-G 组名			指定用户的附加组(用逗号分隔加入多个组)
	-s shell		手工指定用户的登录shell。默认为/bin/bash

103、用户默认值配置文件/etc/default/useradd

GROUP=100				用户默认组
HOME=/home				用户家目录
INACTIVE=-1				密码过期宽限天数
EXPIRE=					密码失效时间
SHELL=/bin/bash			默认的shell
SKEL=/etc/skel			模板目录
CREATE_MAIL_SPOOL=yes	是否建立邮箱

104、用户默认值配置文件/etc/login.defs

PASS_MAX_DAYS	99999	密码有效期
PASS_MIN_DAYS	0		密码修改间隔
PASS_MIN_LEN	5		密码最少位数
PASS_WARN_AGE	7		密码到期前警告天数
UID_MIN		500			最小和最大UID范围
UID_MAX	60000
ENCRYPT_METHOD SHA512

105、用户管理命令passwd

passwd [选项] 用户名
	-S		查询用户密码的密码状态,仅root可用
	-l		暂时锁定用户,仅root可用
	-u		解锁用户,仅root可用
	--stdin	可以通过管道符输出的数据作为用户的密码(管道符的作用:第一个命令的输出作为第二个命令的输入)

106、修改用户信息命令usermod

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

107、修改用户密码状态chage

chage [选项] 用户名
	-l	列出用户的详细密码状态
	-d 	日期	修改密码最后一次更改时间(把密码修改日期改为0,这样用户一登陆就需要修改密码)
	-m 	天数	两次密码修改间隔
	-M 	天数	密码有效期
	-W 	天数	密码过期前警告天数
	-I 	天数	密码过期后宽限天数
	-E 	日期	账号失效时间

108、删除用户userdel

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

109、查看用户id

id 用户名 查看用户的信息

110、用户身份切换su

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

111、添加用户组命令groupadd

groupadd [选项] 组名
	-g GID	指定组ID

112、修改用户组groupmod

groupmod	[选项] 组名
	-g GID		修改组ID
	-n 新组名	修改组名	例如:groupmod -n test group1,将group1名改为test

113、删除用户组groupdel

groupdel 组名

114、在用户组中添加和删除用户gpasswd

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

115、ACL权限
当要给一个用户与文件属主、属组、其他人权限都不相同的时候使用,也就是说,这个用户对于这个文件不属于三种身份的任何一种,是属于第四种身份,那么我们就需要使用ACL权限去给他赋予单独的权限。

116、查看分区ACL权限是否开启

dumpe2fs -h /dev/sda3(dumpe2fs命令是查询指定分区详细文件系统信息的命令)
	-h	仅显示超级块中信息,而不显示磁盘块组的详细信息

117、开启分区ACL权限(临时的)

mount -o remount,acl /(重新挂载根分区,并挂载加入ACL权限)

118、产看ACL权限getfacl

getfacl  文件名

119、设定ACL权限命令setfacl

setfacl [选项] 文件名
	-m	设定ACL权限(u:用户名:权限rwx,g:组名:权限rwx,m:权限rwx(设置mask权限))
	-x	删除指定的ACL权限(u:用户名,g:组名)
	-b	删除所有的ACL权限
	-d	设定默认的ACL权限
	-k	删除默认的ACL权限
	-R	递归设定ACL权限

120、最大有效权限mask
mask是用来指定最大有效权限的。如果我给用户赋予了ACL权限,是需要和mask的权限相与才能得到用户的真正权限
影响的是ACL权限和所属组权限不影响所有者权限

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

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

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

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

123、文件特殊权限SetUID
只有可以执行的二进制程序才能设定SUID权限
命令执行者要对该程序拥有x权限
命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序过程中灵魂附体为文件的宿主)
SetUID权限只能在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
注意:
关键目录应严格控制写权限。比如“/”、“/usr”等
用户的密码设置要严格遵守密码三原则
对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限

124、设定SetUID

chmod 4755 文件名(4代表SUID,2代表GUID,1代表Sitcky Bit)
chmod u+s 文件名

125、取消SetUID

chmod 755 文件名
chmod u-s 文件名

126、文件特殊权限SetGID

	针对可执行文件的作用
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x权限
命令在执行程序时,组身份升级为该程序文件的所属组
SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在执行过程中有效

	针对目录的作用
普通用户必须对目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的所属组
若普通用户对此目录拥有w权限,新建的文件的默认组就是这个目录的所属组

127、设定SetGID

chmod 2755 文件名(4代表SUID,2代表GUID,1代表Sitcky Bit)
chmod g+s 文件名

128、取消SetGID

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

129、文件特殊权限Sticky BIT
粘着位目前只对目录有效
普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
如果没有粘着位,因为普通用户拥有w权限,所有可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己创建的文件,不能删除其他用户创建的文件

130、设定Sticky BIT

chmod 1755 目录名(4代表SUID,2代表GUID,1代表Sitcky Bit)
chmod o+t 目录名

131、取消Sticky BIT

chmod 755 目录名
chmod o-t 目录名

132、文件系统属性权限chattr

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

133、查看文件系统属性lsattr

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

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

135、visudo命令

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

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

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

sudo -l		查看可用的sudo命令
sudo 绝对路径	普通用户执行sudo赋予的命令

137、文件系统产看命令df

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

138、统计目录或文件大小du

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

139、du命令和df命令的区别

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

140、文件系统修复命令fsck

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

141、显示磁盘状态命令dumpe2fs

dumpe2fs 分区设备文件名

142、查询挂载设备

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

143、自动挂载

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

144、挂载命令

mount [选项] 设备文件名 挂载点
	-t 文件系统	加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9660等文件系统
	-L 卷标名		挂载指定卷标的分区,而不是安装设备文件名挂载
	-o 特殊选项	可以指定挂载的额外选项

		特殊选项
atime/noatime		更新访问时间/不更新访问时间。访问分区文件时,是否更新文件的访问时间,默认为更新
async/sync			异步/同步,默认为异步
auto/noauto		自动/手动,mount -a命令执行时,是否会自动安装/etc/fstab文件内容挂载,默认为自动
default			定义默认值,相当于rw,suid,dev,exec,auto,nouser,async这七个选项
exec/noexec		执行/不执行,设定是否允许在文件系统中执行可执行文件,默认为exec允许
remount			重新挂载已经挂载的文件系统,一般用于指定修改特殊权限
rw/ro			读写/只读,文件系统挂载时,是否具有读写权限,默认为rw
suid/nosuid		具有/不具有SUID权限,设定文件系统是否具有SUID和SGID的权限,默认是具有
user/nouser		允许/不允许普通用户挂载,设定文件系统是否允许普通用户挂载,默认是不允许,只有root可以挂载分区
usrquota			写入代表文件系统支持用户磁盘配额,默认不支持
grpquota			写入代表文件系统支持组磁盘配额,默认不支持

145、挂载U盘
查询U盘的设备文件名

	fdisk -l
Linux把U盘的FAT32识别为vfat,把U盘的FAT16识别为fat,Linux默认不支持NTFS文件系统

146、支持NTFS文件系统

1、重新编译内核
2、下载插件支持NTFS(NTFS-3g插件)
3、挂载NTFS格式的硬盘mount -t ntfs-3g /dev/sdb /mnt/Upan

147、分区命令fdisk

fdisk分区过程
	fdisk -l	查看U盘或硬盘是否被识别
	fdisk /dev/sdb
		fdisk交互指令说明
	a	设置可引导标记
	b	编辑bsd磁盘标签
	c	设置DOS操作系统相兼容标记
	d	删除一个分区
	l	显示已知的文件系统类型。82为Linux swap分区,83为Linux分区
	m	显示帮助菜单
	n	新建分区
	o	建立空白DOS分区表
	p	显示分区列表
	q	不保存退出
	s	新建空白SUN磁盘标签
	t	改变一个分区的系统ID
	u	改变显示记录单位
	v	验证分区表
	w	保存退出
	x	附加功能(仅专家)
	
	partprobe	重新读取分区表信息(当提示分区正被占用时)
	mkfs -t ext4 /dev/sdb1	格式化分区
	mkdir /disk1	建立挂载点
	mount /dev/sdb1 /disk1	挂载

148、分区自动挂载

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

修改完成后用mount -a 测试一遍是否正常以免导致系统崩溃

149、/etc/fstab文件修复

输入root密码进去系统
需要重新挂载/目录mount -o remount,rw /(因为报错时系统没有把/挂载成读写而是挂载为只读,此时修改/etc/fstab无法写入,需要重新挂载)
修改/etc/fstab文件
重启系统

150、Shell概述
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令

151、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

152、Linux支持的Shell
定义在/etc/shells中

153、Shell脚本的执行方式

输出命令echo
	echo [选项] [输出内容](如果输出内容中间有空格就需要加双引号,如果输出内容中有!就需要用单引号取消!的特殊用途)
		-e:支持反斜杠控制的字符转换
		字符转换
	\\		输出\本身
	\a		输出警告音
	\b		退格键,也就是向左删除键
	\c		取消输出行末的换行符。和-n选项一致
	\e		ESCAPE键
	\f		换页符
	\n		换行符
	\r		回车键
	\t		制表符
	\v		垂直制表符
	\0nnn		按八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数
	\xhh		按十六进制ASCII码表输出字符。其中hh是两位十六进制数
	\e[1;颜色m 输出文字 \e[0m	输出带颜色的文字(30黑,31红,32绿,33黄,34蓝,35洋红,36青色,37白色)

154、写脚本

#!/bin/bash(标称当前程序是shell脚本)
#The first program
#Author:sunlin(E-mail:961339678@qq.com)
echo -e "hello world"

如果是在Windows中编写的脚本需要在Linux中使用dos2unix命令将文件转换成Linux文件然后才能执行
dos2unix introduce.sh

155、脚本执行

1、给脚本赋予执行权限chmod 755 hello.sh
2、通过bash调用执行脚本Bash hello.sh
3、绝对路径/tmp/japan/xunguo/introduce.sh或相对路径./introduce.sh

156、Bash的历史命令

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

157、历史命令的调用

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

158、命令与文件补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按Tab键就会自动进行补全

159、命令别名

alias 别名='原命令'	设定命令别名
alias		查询命令别名
unalias 别名	删除别名

让别名永久生效需要修改/家目录/bashrc

160、命令执行顺序

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

161、Bash常用的快捷键

快捷键		作用
CTRL+A	把光移动到命令行开头
CTRL+E	把光标移动到命令行的结尾
CTRL+C	强制终止当前命令
CTRL+L	清屏,相当于clear命令
CTRL+U	删除或剪切光标之前的命令
CTRL+K	删除或剪切光标之后的命令
CTRL+Y	粘贴CTRL+U或者CTRL+K剪切的内容
CTRL+R	在历史命令中搜索,按下CTRL+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索
CTRL+D	退出当前终端
CTRL+Z	暂停并放入后台,这个快捷键牵扯工作管理的内容,在系统管理章节介绍
CTRL+S	暂停屏幕输出
CTRL+Q	恢复屏幕输出

162、标准输入输出

设备	设备文件名	文件描述符	类型
键盘	/dev/stdin		0		标准输入
显示器	/dev/stdout		1		标准输出
显示器	/dev/stderr		0		标准错误输出

163、输出重定向(主要作用时记录命令执行的结果,相当于日志,方便管理员查看命令是否正确执行)
类型 符号 作用

标准输出重定向	命令 > 文件				以覆盖的方式把命令的正确输出输出到指定文件或设备中
标准输出重定向	命令 >> 文件				以追加的方式把命令的正确输出输出到指定文件或设备中

标准错误重定向	错误命令 2> 文件			以覆盖的方式把命令的错误输出输出到指定文件或设备中
标准错误重定向	错误命令2 >> 文件		以追加的方式把命令的错误输出输出到指定文件或设备中

正确和错误输出	命令 > 文件 2>&1			以覆盖的方式把正确输出和错误输出都保存到同一个文件当中
正确和错误输出	命令 >> 文件 2>&1		以追加的方式把正确输出和错误输出都保存到同一个文件当中
正确和错误输出	命令 &> 文件				以覆盖的方式把正确输出和错误输出都保存到同一个文件当中
正确和错误输出	命令 &>> 文件			以追加的方式把正确输出和错误输出都保存到同一个文件当中
正确和错误输出	命令 >>文件1 2>>文件2	把正确的输出追加到文件1中,把错误的输出追加到文件2中

ls &>/dev/null	把输出结果丢进垃圾箱用于编写脚本时屏蔽没有意义的输出

164、输入重定向

wc [选项] [文件名](CTRL+D结束)
	-c	统计字节数
	-w	统计单词数
	-l	统计行数
命令 < 文件	把文件作为命令的输入(例如wc < introduce.sh)

165、多命令顺序执行

多命令执行符		格式				作用
;			命令1 ; 命令2	多个命令顺序执行,命令之间没有任何逻辑联系
&&			命令1 && 命令2	逻辑与,当命令1正确执行,则执行命令2。当命令1执行错误,则命令2不会执行
||			命令1 || 命令2	逻辑或,当命令1执行不正确,则命令2才会执行,当命令1正确执行,则命令2不会执行

166、dd进行磁盘复制(cp只能复制文件,dd可以复制分区、硬盘中的数据和分区的文件系统)

dd if=输入文件 of=输出文件 bs=字节数 count=个数
	if=输入文件	指定源文件或源设备
	of=输出文件	指定目标文件或目标设备
	bs=字节数	指定一次输入/输出多少字节,即把这些字节看作一个数据块
	count=个数	指定输入/输出多少个数据块
例如date ; dd if=/dev/zero of=/root/testfile bs=1k count=100000 ; date

167、管道符|

命令格式:命令1 | 命令2(命令1的正确输出作为命令2的操作对象)
例如:ll -a /etc | more	
例如:netstat -an | grep LISTEN

168、在文件中搜索包含关键字的行

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

169、通配符

通配符		作用
?	匹配一个任意字符
*	匹配0个或任意多个任意字符,也就是可以匹配任何内容
[]	匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,a或b或c
[-]	匹配中括号中任意一个字符,-代表一个范围。例如:[a-z]代表匹配一个小写字母
[^]	逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符

170、Bash中其他特殊符号

符号		作用
' '		单引号,在单引号中的所有特殊符号都没有特殊含义例如$ `
" "		双引号,在双引号中特殊符号都没有特殊含义,但是$ ` \是例外,拥有调用变量值、引用命令、转义符的特殊含义
` `		反引号,反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号容易看错
$()		和反引号的作用一样,用于引用系统命令
#		在Shell脚本中,#开头的行为注释行
$		用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值
\		转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,而不当作是变量的引用

171、变量的命名规则

变量名称可以由字母、数字、下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的
在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型
变量用等号连接值,等号左右两侧不能有空格
变量的值如果有空格,需要使用双引号或单引号括起来
在变量的值中,可以使用\转义符
如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要使用双引号包括“$变量名”或使用${变量名}
如果是把命令的结果作为变量的值赋予变量,则需要使用反引号或$()包含命令
环境变量名建议大写,便于区分

172、变量的分类

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

173、用户自定义变量(本地变量)

变量定义
	变量名=变量值
变量调用
	$变量名

变量叠加
	name=sunlin
	name=${name}sl
	name="$name"sl
变量查看
	set
变量删除
	unset 变量名

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

175、设置环境变量

定义环境变量
	export 变量名=变量值
查询环境变量
	env
删除环境变量
	unset

176、查看进程树pstree

177、系统常见环境变量

PATH:系统查找命令的路径
	echo $PATH
PATH变量叠加
	PATH="$PATH":/root/sh

178、PS1:定义系统提示符的变量

\d:	显示日期,格式为“星期 月 日”
\h:	显示简写主机名。如localhost
\t:	显示24小时制时间,格式为“HH:MM:SS”
\T:	显示12小时制时间,格式为“HH:MM:SS”
\A:	显示24小时制时间,格式为“HH:MM”
\u:	显示当前用户名
\w:	显示当前所在目录的完整名称
\W:	显示当先所在目录的最有一个目录
\#:	执行的第几个命令
\$:	提示符,如果是root用户会显示提示符#,如果是普通用户会显示提示符$

PS1='[\u@\h \w]\$ '

179、位置参数变量

位置参数变量		作用
$n		n为数字,$n代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含${10}
$*		这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@		这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$#		这个变量代表命令行中所有参数的个数

180、预定义变量

预定义变量		作用
$?		最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0,则证明上一个命令执行不正确
$$		当前进程的进程号
$!		后台运行的最后一个进程的进程号

181、接收键盘输入

read [选项] [变量名]
	-p "提示信息"	在等待read输入时,输出提示信息
	-t 秒数			read命令会一直等待用户输入,使用此选项可以指定等待时间
	-n 字符数		read命令只接受指定的字符数就会执行
	-s				隐藏输入的数据,适用于机密信息的输入

182、声明变量类型declare

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

183、数值运算

1、方法一
	declare -i cc=$aa+$bb
2、方法二
	使用expr或let数值运算工具
	dd=$(expr $aa + $bb)		注意“+”号左右两侧必须有空格
3、方法三
	$((运算式))或者$[运算式]
	dd=$(($aa+$bb))或者dd=$[$aa+$bb]

184、运算符

优先级		运算符			说明
13		-,+			单目负、单目正
12		!,~			逻辑非、按位取反或补码
11		*,/,%			乘、除、取模
10		+,-			加、减
9		<<,>>			按位左移、按位右移
8		<=,>=,<,>		小于等于、大于等于、小于、大于
7		==,!=			等于,不等于
6		&				按位与
5		^				按位异或
4		|				按位或
3		&&				逻辑与
2		||				逻辑或
1	=,+=,-=,*=,/=,%=,&=,^=,|=,<<=,>>=	赋值、运算且赋值

优先级数越大,优先级越高

185、变量测试与内容替换

变量置换方式		变量y没有设置			变量y为空值				变量y有设置值
x=${y-新值}		x=新值					x为空					x=$y
x=${y:-新值}	x=新值					x=新值					x=$y
x=${y+新值}		x为空					x=新值					x=新值
x=${y:+新值}	x为空					x为空					x=新值
x=${y=新值}		x=新值,y=新值			x为空,y值不变			x=$y,y值不变
x=${y:=新值}	x=新值,y=新值			x=新值,y=新值			x=$y,y值不变
x=${y?新值}		新值输出到标准错误输出	x为空					x=$y
x=${y:?新值}	新值输出到标准错误输出	新值输出到标准错误输出	x=$y

186、环境变量配置文件简介

当修改了环境变量配置文件时,需要退出登录重新登录才能生效(使用source命令可以不用重新登录)
source命令语法规则(在当前bash环境下读取并执行FileName中的命令)
	source 配置文件(可以简写为:. 配置文件(中间有空格))
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、HOSTNAME等默认环境变量
/etc/profile		对所有用户有效
/etc/profile.d/*.sh		对所有用户有效
~/.bash_profile		对当前用户有效
~/.bashrc			对当前用户有效
/etc/bashrc			对所有用户有效


			/etc/profile.d/lang.sh  ------>  /etc/sysconfig/i18n
                                                                 ^
                                                                  |
			      |
          ---------------------->  /etc/profile.d/*.sh   <-------------------------
          |						   |
          |						   |
/etc/profile  ------>  ~/.bash_profile  ------>  ~/.bashrc  ------>  /etc/bashrc  ------> 命令提示符

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

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

 ~/.bashrc的作用
	调用/etc/bashrc
	定义命令别名

/etc/bashrc的作用(定义的都是不需要登录的shell,只有PS1才是登录的shell)
	PS1
	umask
	PATH
	调用/etc/profile.d/*.sh文件

187、注销时生效的环境变量配置文件

~/.bash_logout

188、历史命令配置文件

~/bash_history

189、Shell登录信息

本地终端欢迎信息:/etc/issue
\d	显示当前系统日期
\s	显示操作系统名称
\l	显示登录的终端号
\m	显示硬件体系结构,i386 i686
\n	显示主机名
\o	显示域名
\r	显示内核版本
\t	显示当前系统时间
\u	显示当前登录用户的序列号

远程终端欢迎信息:/etc/issue.net
转义符在/etc/issue.net文件中不能使用
是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(需重启ssh服务)

登录后欢迎信息:/etc/motd
不管是本地登录还是远程登录,都可以显示此欢迎信息

190、正则表达式和通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配

191、基础正则表达式

元字符			作用
*			前一个字符匹配0次或任意次
.			匹配除了换行符外任意一个字符
.*			匹配任意字符。例如"s.*d":"say he had"
^			匹配行首。例如:^hello会匹配一hello开头的行
$			匹配行尾。例如:hello$会匹配一hello结尾的行
^$			匹配空白行
[]			匹配中括号中指定的任意一个字符,只匹配一个字符。例如[0-9] [a-z] [abc]
[^]			匹配中括号的字符以外的任意一个字符。例如[^0-9] [^a-z]
\			转义符。用于取消将特殊符号的含义取消
\{n\}		表示其前面的字符恰好出现n次。例如 [0-9]\{4\}匹配4位数字,[1][3-9][0-9]\{9\}匹配手机号码。
\{n,\}		表示其前面的字符出现不小于n次。例如[0-9]\{2,\}匹配两位及以上的数字
\{n,m\}		表示其前面的字符至少出现n次,最多出现m次。例如[a-z]\{6,8\}匹配6到8位的小写字母

注意		a*表示匹配a0次或任意多次,所以会输出整篇文章
			aa*表示至少有一个a的行

192、字符截取命令

cut字段提取命令
	cut [选项] 文件名
		-f 列号,列号	提取第几列
		-d 分隔符		按照指定分隔符分隔列

printf格式化输出命令(不是字符截取命令,只是服务于awk)
	printf '输出类型输出格式' 输出内容
	输出类型:
		%ns:	输出字符串,n是数字指代输出几个字符
		%ni:	输出整数,n是数字指代输出几个数字
		%m. nf:	输出浮点数,m和n是数字,指代输出的整数位数和小数位数,5.2f代表输出5位整数2位小数
	输出格式:
		\a:输出警告音
		\b:输出退格键
		\f:清除屏幕
		\n:换行
		\r:回车
		\t:水平制表符
		\v:垂直制表符

在awk命令的输出中支持print和printf命令
	print:print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
	printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符

awk '条件1{动作1} 条件2{动作2}……' 文件名
	条件:
		BEGIN:在所有的数据读取之前
		END:在所有的数据读取之后
		FS内置变量:指定分隔符。例如:FS=":"	以:号为分隔符
		一般使用关系表达式作为条件
			$6>10	判断第六列数据 是否大于10
	动作:
		格式化输出(awk中有print函数和printf函数)($1代表第一列,$2代表第二列)
		流程控制语句

sed流编辑器
	sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令
	sed [选项] '[动作]' 文件名
		选项
			-n	一般sed命令会把所有数据输出到屏幕,如果加入此选择,则会把经过sed命令处理的行输出到屏幕
			-e	允许对输入数据应用多条sed命令编辑。如:sed -e '3,4s/Liming//g ; 3,4s/Gao//g' student.txt
			-i	用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出 
		动作
			a \	追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用\代表数据未结束
			c \	行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用\代表数据未结束
			i \	插入,在当前行前插入一行或多行,插入多行时,除最后一行外,每行末尾需要用\代表数据未结束
			d	删除指定的行
			p	打印,输出指定的行。例如:2p输出第二行
			s	字串替换,用一个字符串替换另一个字符串。格式为"行范围s/旧字串/新字串/g"(和vim中的替换格式类似,支持正则表达式)

193、排序命令sort

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

194、统计命令wc

wc [选项] 文件名
	-l 	只统计行数
	-w	只统计单词数
	-m	只统计字符数

195、条件判断

1、按照文件类型进行判断
	测试选项			作用(是则为真)
	-b 文件		判断该文件是否存在,并且是否为块设备文件
	-c 文件		判断该文件是否存在,并且是否为字符设备文件
	-d 文件		判断该文件是否存在,并且是否为目录文件
	-e 文件		判断该文件是否存在
	-f  文件		判断该文件是否存在,并且是否为普通文件
	-L 文件		判断该文件是否存在,并且是否为连接文件
	-p 文件		判断该文件是否存在,并且是否为管道文件
	-s 文件		判断该文件是否存在,并且是否为非空
	-S 文件		判断该文件是否存在,并且是否为套接字文件

两种判断格式
	test -e /root/install.log
	[ -e /root/install.log ]

2、按照文件权限进行判断
	测试选项			作用(是则为真,ugo其中一个有相应权限就为真)
	-r 文件		判断该文件是否存在,并且是否该文件拥有读权限
	-w 文件		判断该文件是否存在,并且是否该文件拥有写权限
	-x 文件		判断该文件是否存在,并且是否该文件拥有执行权限
	-u 文件		判断该文件是否存在,并且是否该文件拥有SUID权限
	-g 文件		判断该文件是否存在,并且是否该文件拥有GUID权限
	-k 文件		判断该文件是否存在,并且是否该文件拥有SBit权限

3、两个文件之间进行比较
	测试选项			作用
	文件1 -nt 文件2	判断文件1的修改时间是否比文件2新
	文件1 -ot 文件2	判断文件1的修改时间是否比文件2旧
	文件1 -ef 文件2	判断文件1是否和文件2的Inode号一致,可以理解为两个文件是否为同一个文件。这是判断硬链接和好的方法

4、两个整数之间比较
	测试选项			作用
	整数1 -eq 整数2	判断整数1是否和整数2相等
	整数1 -ne 整数2	判断整数1是否和整数2不相等
	整数1 -gt 整数2	判断整数1是否大于整数2
	整数1 -lt 整数2	判断整数1是否小于整数2
	整数1 -ge 整数2	判断整数1是否大于等于整数2
	整数1 -le 整数2	判断整数1是否小于等于整数2

5、字符串的判断
	测试选项			作用
	-z 字符串			判断字符串是否为空
	-n 字符串		判断字符串是否为非空
	字符串1==字符串2	判断字符串1是否和字符串2相等(写单等于号也是可以的,但是一般不那么用)
	字符串1!=字符串2		判断字符串1是否和字符串2不相等


6、多重条件判断
	测试选项			作用
	判断1 -a 判断2	逻辑与,判断1和判断2都成立,最终的结果才为真
	判断1 -o 判断2	逻辑或,判断1和判断2有一个成立,最终的结果就为真
	! 判断		逻辑非,使原始的判断式取反

196、if条件语句

1、单分支if条件语句
	if  [ 条件判断式 ] ; then
	     程序
	fi
	或者
	if [ 条件判断式 ]
	    then
	        程序
	fi
注意:
	if语句使用fi结尾,和一般语言使用大括号结尾不同
	[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
	then后面跟符号条件之后执行的程序,可以放在[]之后,用;分隔。也可以换行写入,就不需要;了

2、双分支if条件语句
	if [ 条件判断式 ]
	    then
		条件成立时,执行的程序
	    else
		条件不成立,执行的程序
	fi

3、多分支if条件语句(判断成功一个时要退出,不然后面的都会执行)
	if [ 条件判断式1 ]
	    then
		当条件判断式1成立时,执行程序1
	elif [ 条件判断式2 ]
		当条件判断式2成立时,执行程序2
	……
	else
		当所有条件判断式都不成立时,最后执行的程序
	fi

197、多分支条件语句case
case语句和if……elif……else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系

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

198、for循环

1、语法一
	for 变量 in 值1 值2 值3……(批量解压缩)
		do
			程序
		done

2、语法二
	for((初始值;循环控制条件;变量变化))
		do
			程序
		done

199、while循环和until循环

1、while循环
	while循环是不定循环,也称作条件循环。只要条件判断成立,循环就会一直继续,直到循环式不成立,循环才会停止。这就和for的固定循环不太一样
while [ 条件判断式 ]
	do
		程序
	done

2、until循环
	until循环,和while循环相反,until循环只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件不成立,则终止循环。
until [ 条件判断式 ]
	do
		程序
	done

200、服务的分类

1、RPM包默认安装的服务
	独立的服务	直接就在内存中
	基于xinetd服务	管理一些服务(这些服务不在内存中,不能直接访问,需要通过xinetd间接访问)
2、源码包安装的服务

201、服务的启动和自启动

服务启动:就是在当前系统中让服务运行,并提供功能
服务自启动:自启动是指让服务在系统开机或重启之后,随着系统的启动二自动启动服务

202、查询已安装的服务

RPM包安装的服务
	chkconfig --list	查看服务自启动状态,可以看到所有RPM包安装的服务
	service --status-all	查看服务的状态
源码包安装的服务
	查看服务安装位置,一般是/usr/local下

203、独立服务的管理

1、RPM包安装的服务文件的保存位置
/etc/init.d		启动脚本位置(/etc/rc.d/init.d也可以)
/etc/sysconfig	初始化环境配置文件
/etc		配置文件位置
/etc/xinetd.conf	xinetd配置文件
/var/lib		保存服务产生的文件
/var/log		日志

2、独立服务的启动
/etc/init.d/独立服务名	start|stop|status|restart
service 独立服务名		start|stop|status|restart(红帽子专有 CentOS7中用systemctl)

3、独立服务的自启动
chkconfig [--level 运行级别] [独立服务名] [on/off](可以简写为chkconfig http on(默认级别为2345))
修改/etc/rc.d/rc.local文件(系统启动之后在输入密码之前执行)
使用ntsysv命令管理自启动(红帽专有)

CentOS7取消了chkconfig的使用,虽然可以通过修改配置文件重新使用的效果,但是已经不建议使用了。
CentOS7也不建议修改/etc/rc.d/rc.local文件进行开机启动的功能。
	CentOS7变化很大,降低了rc.local优先级,但没取消,启用步骤如下:
		1、chmod +x  /etc/rc.d/rc.local		#为/etc/rc.d/rc.local 添加执行权限
		2、systemctl enable rc-local.service 	#使能rc-local.service自启动
		3、systemctl start rc-local.service		#启动rc-local.service服务
			----------------------option----------------------------
		也可以通过修改rc-local.service的配置文件启用功能
			vim /lib/systemd/system/rc-local.service
			[Install]

			WantedBy=multi-user.target

			ln -s '/lib/systemd/system/rc-local.service' '/etc/systemd/system/multi-user.target.wants/rc-local.service'
			systemctl enable rc-local.service
			systemctl start rc-local.service

CentOS7通过systemctl命令进行服务的管理
	chkconfig 输出结果只显示 SysV 服务,并不包含原生 systemd 服务。SysV 配置数据可能被原生 systemd 配置覆盖。
	要列出 systemd 服务,请执行 'systemctl list-unit-files'。查看在具体 target 启用的服务请执行'systemctl list-dependencies [target]'。

我自己添加了一个myservice.service 的服务用于设置自己的开机启动执行的命令,添加过程如下:
	1、在/lib/systemd/system/下添加服务的配置文件
		[Unit]
		Description=Set the user boot command

		[Service]
		Type=oneshot
		ExecStart=/usr/local/myservice/myservice

		[Install]
		WantedBy=multi-user.target
	2、创建/usr/local/myservice/myservice文件,添加执行权限,进行shell编程
		#!/bin/bash
		#This file is used to set the user boot command
		touch /home/sunlin

204、基于xinetd的服务
了解就可以用的不多

205、源码包安装的服务管理

1、源码包安装服务的启动
使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以看源码包的安装说明,查看脚本的启动方法
/usr/local/apache2/bin/apachectl start

2、源码包服务的自启动
修改/etc/rc.d/rc.local文件(系统启动之后在输入密码之前执行)
加入 ntpdate ntp1.glb.nist.gov.	开机或重启自动更新系统时间

3、让源码包服务被服务管理命令识别
让源码包的apache服务能被service命令管理启动
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache

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

进程管理的作用
	判断服务器见刊状态
	查看系统中的所有进程
	杀死进程

207、查看系统中所有进程

ps aux	查看系统中所有进程,使用BSD操作系统格式(选项a:前台,u:显示用户,x:后台)
ps -le	查看系统中所有进程,使用Linux标准命令格式(选项l:纤细,e:所有)

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

208、查看系统健康状态

top [选项]
-d 秒数	指定top命令每隔几秒更新。默认是三秒

在top命令交互模式当中可以执行的命令
	?或h	显示交互模式的帮助
	P	以CPU使用率排序,默认就是此选项
	M	以内存的使用率排序
	N	以PID排序
	q	退出top	

第一行信息为任务队列信息
	内容		说明
12:26:46		系统当前时间
up 1 day,13:32	系统的运行时间,本机已运行1天13小时32分钟
2 users		当前登录了两个用户
load average: 0.00 , 0.00 , 0.00	系统在之前1分钟,5分钟,15分钟的平均负载。

第二行信息为任务队列信息
	内容		说明
Task:95 total	系统中进程的总数
1 running		正在运行的进程数
94 sleeping		睡眠的进程数
0 stoped		正在停止的进程
0 zombie		僵尸进程,如果不是0,需要手工检查僵尸进程

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

第四行信息为任务队列信息
	内容		说明
Mem:344434k total	物理内存的总量,单位为KB
343433k used	已使用的物理内存数量
53840k free	空余的物理内存的数量
66464k buffers	作为缓冲的内存的数量

第五行信息为任务队列信息
	内容		说明
Swap:4344k total	交换分区(虚拟内存)的总大小
0k used		已使用的交换分区的大小
53840k free	空余的物理内存的数量
66464k buffers	作为缓冲的内存的数量

209、进程树pstree

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

210、终止进程命令kill

kill -l	查看可用的进程信号

信号代号	信号名称			说明
1	SIGHUP		该信号让进程立即关闭,然后重新读取配置文件之后重启
2	SIGINT		程序终止信号,用于终止前台进程。相当于输出CTRL+c快捷键
8	SIGFPE		在发生致命的算数运算错误时发出(浮点数运算错误、溢出、除数为0等)
9	SIGKILL		用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。一般用于强制终止进程
14	SIGALRM		时钟定时信号,计算的是实际时间或时钟时间,alarm函数使用该信号
15	SIGTERM		正常结束进程的信号,kill命令的默认信号,有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试SIGKILL信号,也就是信号9
18	SIGCONT		该信号可以让暂停的进程恢复执行,本信号不能被阻断
19	SIGSTOP		该信号可以暂停前台进程,相当于输入CTRL+z快捷键,该信号不能被阻断	

kill [选项] PID	例如:kill -1 22354	重启进程,kill -9 22368 强制杀死进程

211、killall命令

killall [选项] [信号] 进程名
	选项
	-i	交互式,询问是否要杀死这个进程
	-I	忽略进程名的大小写	
例如:killall -9 httpd

212、pkill命令

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

按照终端号踢出用户
w		使用该命令查询本机已经登录的用户
pkill -9 -t pts/1	强制杀死从pts/1虚拟机终端登录的进程

213、把进程放入后台

tar -zcf etc.tar.gz /etc &	在命令后加入&,将进程放入后台执行,但在后台进程依然运行
top			在top命令执行过程中,按下CTRL+z快捷键,将进程放入后台,在后台进程将会暂停

214、查看后台的工作

jobs [选项]
选项
	-l	显示工作的PID
注:+号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。-号代表倒数第二个放入后台的工作。

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

fg %工作号	(%号可以省略,但是注意工作号和PID的区别)

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

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

217、监控系统资源命令vmstat

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

218、开机内核检测信息dmesg

dmesg | grep CPU

219、查看内存使用状态free

选项
-b	以字节为单位显示
-k	以KB为单位显示,默认
-m	以MB为单位显示
-g	以GB为单位显示

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

221、查看CPU信息

cat /proc/cpuinfo

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

223、查看系统和内核相关信息

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

224、判断当前系统的位数

file /bin/ls

225、查询当前Linux系统的发行版本

lsb_release -a

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

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

227、crond服务管理和访问控制

service crond restart
chkconfig crond on

228、用户的crontab设置

crontab [选项]
	-e	编辑crontab定时任务
	-l	查询crontab任务
	-r	删除当前用户所有crontab任务
crontab -e	进入编辑界面
	命令格式
	* * * * * 执行的命令 (一小时当中的第几分钟 一天当中的第几小时 一个月当中的第几天 一年当中的第几个月 一周当中的星期几)
	(*代表任意时间		,代表不连续时间		-代表连续时间		*/n代表每隔多久执行一次)
	45 22 * * * 命令		在22点45分执行命令
	0   17 * * 1 命令		在周一17点0分执行命令
	0    5   1, 15 * * 命令	在1号和15号的凌晨5点0分执行命令
	40  4  * * 1-5 命令		在周一到周五的凌晨
	*/10 4 * * * 命令		每天的凌晨4点,每隔10分钟执行一次命令
	0 0 1,15 * 1 命令		每月1号和15号,每周一的0点0分都会执行命令

229、日志管理简介
在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服务更加先进,功能更多。但是不论该服务的使用,还是日志文件格式其实都是和syslogd服务相兼容的

230、rsyslogd的特点

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

231、确定rsyslog服务是否启动,是否自启动

ps aux | grep rsyslogd
chkconfig rsyslog on

232、常见的日志的作用

日志文件				说明
/var/log/cron		记录系统定时任务的相关的日志
/var/log/cups		记录打印信息的日志
/var/log/dmesg		记录了系统在开机时内核自检的信息
/var/log/btmp		记录错误登录的日志。这个文件是一个二进制文件,不能直接vim查看,而是使用lastb命令查看
/var/log/lastlog	记录系统中所用用户最后一次的登录时间的日志
/var/log/message	记录系统重要信息的日志。这个日志文件记录Linux系统的绝大数重要信息,如果系统出现问题,首先检查这个文件
/var/mailog			记录邮件信息
/var/secure			记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。比如说系统的登录,ssh的登录,su切换用户,sudo授权,添加和修改密码
/var/log/wtmp		永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,使用last命令查看
/var/run/utmp		记录当前已经登录的用户的信息。这个文件会随用户的登录和注销而不断变化,使用w,who,users等命令查询

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

234、

日志文件			说明
/var/log/httpd	RPM包安装的apache服务的默认日志目录
/var/log/mail	RPM包安装的邮件服务的额外日志文件
/var/log/samba	RPM包安装的samba服务的日志文件
/var/log/sssd	守护进程安全服务目录

235、日志文件格式

基本日志格式包含以下四列
	事件产生的时间
	发生事件的服务器的主机名
	产生事件的服务器或程序名
	事件的具体信息

236、/etc/rsyslog.conf配置文件

authpriv.*		/var/log/secure
服务名称[连接符号] 日志等级		日志记录位置
认证相关服务.所有日志等级		记录在/var/log/secure日志中

服务名称			说明
auth			安全和认证相关信息(不推荐使用authpriv代替)
authpriv		安全和认证相关信息(私有的)
cron			系统定时任务cront和at产生的日志
daemon			和各个守护进程相关的日志
ftp				ftp守护进程产生的文件
kern			内核产生的日志
local0-local7	为本地使用的预留服务
lpr				打印产生的日志
mail			邮件收发信息
news			与新闻服务器相关的日志
syslog			和syslogd服务产生的日志信息
user			用户等级类别的日志信息
uucp			uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来常在新闻组服务中

连接符
*	代表日志等级
.	代表只要比后面的等级高的日志都记录下来
.=	代表只记录所需等级的日志
.!	代表除了该等级外,其他等级的日志都记录

日志等级			说明
debug		一般的调试信息说明
info		基本的通知信息
notice		普通信息,但是有一定的重要性
warning		警告信息,但是还不影响到服务或系统的运行
err			错误信息,一般达到err等级的信息以及可以影响服务或系统的运行了
crit		临界状态信息,比err等级还要严重
alert		警告状态信息,比crit还要严重。必须立即采取行动
emerg		疼痛等级信息,系统已经无法正常使用了

237、日志记录位置

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

238、日志文件的命名规则
如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20130605”,这样的话日志文件名不会重叠,所以就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。
如果配置文件没有“dateext”参数,那么日志文件就需要进行改名

239、logrotate配置文件/etc/logrotate.conf

参数			参数说明
daily					日志的轮替周期是每天
weekly					日志的轮替周期是每周
monthly					日志的轮替周期是每月
rotate 数字				保留的日志文件的个数。0指没有备份
compress				日志轮替时,旧的日志进行压缩
create mode owner group	建立新日志,同时指定新日志的权限与所有者和所属组。如crate 0600 root utmp
mail address			当日志轮替时,输出内容通过邮件发送到指定的邮箱地址:mail shenc@lamp.net
missingok				如果日志不存在,则忽略该日志的警告信息
notifempty				如果日志为空文件,则不进行日志轮替
minsize 大小			日志轮换的最小值。也就是日志一定要到达这个最小值才会轮替,否则就算时间达到也不轮替
size 大小				日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
dateext					使用日期作为日志轮替文件的后缀
	绝对路径(需要轮替日志的名字)
	{
	}(大括号里面的优先级更高)

240、logrotate命令

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

241、启动管理

系统运行级别(init)
0:关机
1:单用户(启动最小的服务)
2:不完全多用户,不含NFS服务(network file system)
3:完全多用户
4:未分配
5:图形界面
6:重启

runlevel		查看运行级别
init 运行级别	改变运行级别

系统默认运行级别/etc/inittab

242、系统启动过程
开机-----进入BIOS-----加载MBR(grub)-------加载MBR中的启动引导程序-----内核解压并自检-----找到initramfs-----建立仿真根目录-----加载驱动
-----挂载真正系统根目录-----调用/sbin/init-----调用-----/etc/init/rcS.conf

调用/etc/init/rcS.conf的主要功能有两个
	先调用/etc/rc.d/rc.sysinit,然后由/etc/rc.d/rc.sysinit配置文件进行Linux系统初始化。
	然后在调用/etc/inittab,然后由/etc/inittab配置文件确定系统的默认运行级别

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


	调用/etc/inittab-----传入运行级别/etc/init/rc.conf-----调用/etc/rc.d/rc-------按照运行级别调用/etc/rc[0-6].d-----按照优先级启动和关闭相应的脚本
	-----启动和关闭/etc/rc.d/rc.local中的程序-----登录界面-----输入用户名和密码-----进入系统


	运行级别参数传入/etc/rc.d/rc这个脚本之后,由这个脚本文件按照不同的运行级别启动/etc/rc[0-6].d目录中的相应的程序
		/etc/rc3.d/k??开头的文件会按照数字顺序依次关闭
		/etc/rc3.d/s??开头的文件会按照数字顺序依次启动

243、启动引导程序grub

grub中分区表示
	hd(0,0)	hd(0,1)	hd(0,2)	hd(0,4)
	hd(1,0)	hd(1,1)	hd(1,4)	hd(1,5)
Grub配置文件
	default=0		默认启动第一个系统
	timeout=5		等待时间,默认是5秒
	splashimage=(hd 0,0)/grub/splash.xpm.gz	这里是指grub启动时的背景图像文件的保存位置
	hiddenmenu	隐藏菜单,动一下键盘显示菜单
	title CentOS 6 (2.6.32-754.el6.i686)	显示的标题
	root (hd0,0)			启动程序保存的分区
	kernel /vmlinuz-2.6.32-754.el6.i686 	加载内核
	ro root=UUID=0a89a0c2-4c76-46d8-8df8-531303badd11 
	rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us 
	rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 
	rd_NO_LVM rd_NO_DM rhgb quiet
	initrd /initramfs-2.6.32-754.el6.i686.img

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340