linux操作手册

linux操作系统CentOS 7纯手打学习笔记,运维级别培训,内容全面,都是干货,学习交流,也方便自己查阅。

linux操作系统

第一章、linux简介

常用软件
Vmware虚拟机PC软件,http://www.vmware.com;
SecureCRT,命令行远程操作linux服务器;
WinSCP,windows和linux之间的文件传输;
Vmware虚拟机安装和CentOS 7操作系统安装参考其他优秀博文。

一、Vmware虚拟机网络连接

ifconfig,if=interface,查询网络配置
ifconfig eth0,eth是网卡,编号从0开始

桥接,使用计算机真实网卡,占用一个IP地址,可以和真实机以及局域网内其他机器通信,相当于一个真的计算机;
NAT,通过虚拟网卡VMnet8通信,除了和真实机通信,如果真实机能访问互联网,虚拟机也能访问互联网;
Host-only,通过虚拟网卡VMnet1通信,虚拟机只能和真实机通信,虚拟机IP配置要和VMnet1一个网段。

二、linux常用文件夹介绍

/boot/,系统启动目录,保存系统启动相关的文件
/dev/,设备文件保存位置
/etc/,配置文件保存位置
/home/,普通用户的家目录
/lib/系统调用的函数库保存位置
/lost+found/,系统意外崩溃或意外关机时,产生一些文件碎片存放在这里,fsck工具检测并修复损坏的文件,每个分区各有一个该目录
/media/,挂载目录,挂载媒体设备,例如软盘和光盘
/mnt/,挂载目录,挂载额外设备,例如U盘,移动硬盘
/misc/,挂载目录,挂载NFS服务的共享目录
/opt/,第三方安装的软件保存位置,业内习惯把软件放置在/usr/local/目录中
/proc/,虚拟文件系统,数据不保存在硬盘中,而是保存在内存中,主要保存系统的内核,进程,设备状态,网络状态等
/sys/,虚拟文件系统,和proc类似,都是保存在内存中,主要保存内核相关信息
/root/,超级用户的家目录
/srv/,服务数据目录,一些系统服务启动后,在该目录保存所需数据
/tmp/,临时目录
/usr/,系统软件资源目录,“Unix SoftwreResourse”的缩写,不是保存用户数据,系统安装的软件大部分保存在这里
/var/,动态数据保存,例如缓存,日志,软件运行所产生的文件等

三、文件权限

-rw-r–r--
第一个-,(-二进制文件,d目录,l软链接文件)
后面9个,分3组,分别代表u、g、o,u是所有者,g所属组,o其他人,r读权限,w写权限,x执行权限
chmod,change the permissions mode of a file,改变文件或目录权限,chmod [{ugoa} {±=}] [文件或目录],例如chmod u+w,g-r,o=rwx /tmp/Japanlove.list;
权限的数字表示,r4,w2,x1,使用数字修改权限,chmod 640 /tmp/Japanlove.list 权限修改为-rw-r----
-R递归修改,修改目录的权限,子目录和子文件的权限一并修改

rwx说明
file r:cat/more/head/tail/less 可以查看文件内容
w:vim 可以修改文件内容
x:可以执行文件
directory r:ls 可以列出目录中的内容
w:touch/mkdir/rmdir/rm 可以在目录中创建、删除文件
x:cd 可以进入目录

第二章、常用命令

一、基础命令

命令格式:命令 [-选项] [参数]
ls目录处理命令,list缩写,-a查看隐藏文件(文件名前面有.的是隐藏文件),-l长格式显示,-d查看指定目录的信息,-h人性化显示,-i查询文件的i节点

mkdir,makedirectories,创建新目录,-p选项递归创建
cd,change directory,切换目录
pwd,print working directory,显示当前目录
cd . 当前目录, cd … 回到上一级目录
rmdir,remove empty directories ,删除空目录
cp,copy,复制文件或目录,cp -rp [原文件或目录] [目标目录],-r复制目录,-p保留文件属性(比如修改时间),复制的同时可以重命名
mv,move,剪切文件,改名, mv [原文件或目录] [目标目录],剪切的同时可以改名,填写目标目录时把修改后的名字加上
rm,remove,删除文件或目录,-r删除目录,-f无问询直接执行(linux没有回收站)

touch,创建空文件,不写目录则默认创建在当前目录,写觉得路径则创建在该路径下,创建带空格的文件,需要用""框起来
cat,显示文件内容,-n显示行号,不适合查看很长的文件
tac,倒着显示文件内容
more,分页显示,空格或f-翻页,回车-换行,q或Q-退出
less,和more类似,可向上翻页,多的功能:按向上箭头网上翻一行,按pgup网上翻一页;/搜索,搜索到的内容高亮显示,按n显示下一个搜索结果
head,显示文件前面几行,-n 指定行数,不写则默认显示10行,例如head -n 7 /etc/services
tail,显示文件最后几行,和head类似,其他功能:-f动态显示文件末尾内容,比如监控日志

扫描二维码关注公众号,回复: 12976136 查看本文章

ln,link,生成链接文件,-s创建软链接,ln -s [原文件] [目标文件]
软链接,类似Windows快捷方式:lrwxrwxrwx;文件大小-只是符号链接,很小;箭头指向源文件;可跨分区;可用于目录
硬链接,拷贝cp -p +同步更新;硬链接的i节点和源文件相同;不能跨分区;不能针对目录使用

chmod,change the permissions mode of a file,改变文件或目录权限,chmod [{ugoa} {±=}] [文件或目录],例如chmod u+w,g-r,o=rwx /tmp/Japanlove.list;
权限的数字表示,r4,w2,x1,使用数字修改权限,chmod 640 /tmp/Japanlove.list 权限修改为-rw-r----
-R递归修改,修改目录的权限,子目录和子文件的权限一并修改

rwx说明
file r:cat/more/head/tail/less 可以查看文件内容
w:vim 可以修改文件内容
x:可以执行文件
directory r:ls 可以列出目录中的内容
w:touch/mkdir/rmdir/rm 可以在目录中创建、删除文件
x:cd 可以进入目录

useradd chuwei,新增一个用户;passwd chuwei,设置密码,$符号表示是普通用户
chown,change file ownership,改变文件或目录的所有者,chown [用户] [文件或目录],只有root用户可以改变所有者
chgrp,change file group ownership,改变文件或目录的所属组, chgrp [用户组] [文件或目录]
chown chuwei:chuwei /project/,可以同时修改该文件的所有者和所属组

find,文件搜索,find [搜索范围] [匹配条件],严格区分大小写
-name选项,根据文件名搜索,精确搜索,例如find /etc -name init; find /etc -name init 则是模糊查找,是通配符; init则是搜索init开头的文件;init??? init开头后面带3个字符,?匹配单个字符
-iname选项,和-name类似,搜索结果不区分大小写
-size选项,+n大于n,-n小于n,n等于n,以数据块为单位,1数据块=512字节=0.5k,比如100MB=102400KB=204800数据块,数据块是linux存储数据的最小单位;在/目录下查找大于100M的文件:find / -size +204800
-user选项,根据所有者查找,例如find /home -user chuwei
-group选项,根据所属组查找
find /etc -cmin -5 在/etc下查找5分钟内被修改过属性的文件和目录;-5是5分钟内,+5是5分钟以上
-amin选项,访问时间access
-cmin选项,文件属性change,ls -l查找出来的内容
-mmin选项,文件内容modify
-a选项,and,两个条件同时满足
-o选项,or,两个条件满足任意一个
-type选项,根据文件类型查找,f文件,d目录,l软链接文件
例如:find /etc -name init* -a -type f,在/etc目录下查找名字以init开头,并且文件类型为文件的所有结果
-exec选项,对搜索结果执行操作,find /etc -name inittab -exec ls -l {} ; 固定格式{} ;
-ok选项,和-exec类似,只是在执行操作前进行询问
-inum,根据i节点查找,find /tmp -inum 17449664 -ok rm {} ; 查找该文件并删除,用该方法也查找硬链接

locate,在文件资料库中查找文件,对于刚创建的文件不在文件库,可updatedb更新资料库,资料库不收录/tmp临时文件夹,-i选项不区分大小写
which,搜索命令所在目录及别名信息,which ls,alias别名,rm=‘rm -i’,rm -i就是别名,-i是询问是否删除
whereis,搜索命令所在的绝对路径,和帮助文档所在位置,还能查到配置文件路径
grep,-i选项不区分大小写,-v选项屏蔽指定字串所在行,在文件中搜索字串匹配的行并输出,grep -iv [指定字串] [文件],grep -v ^# /etc/inittab,去掉#开头的行

二、帮助命令

man,manual,获得帮助信息,man [命令或配置文件],使用方式和less类似;查看配置文件帮助时,不使用配置文件绝对路径,只使用配置文件名,例如 man services
查看命令帮助,主要看NAME命令定义和某一个选项的定义,查看配置文件帮助,主要看文件定义和配置文件格式
帮助类型,1 命令的帮助,5 配置文件的帮助,有些命令和配置文件同名,比如passwd既是命令也是配置文件,man 5 passwd,看配置文件的帮助信息
whatis ls,只读取命令的NAME定义信息
apropos services,查看配置文件的简短定义信息
命令 --help,列出该命令的选项信息,例如 touch --help
info,和man类似
help,获得Shell内置命令的帮助,这些命令帮助不能使用man获取

三、用户管理

useradd,添加新用户
passwd,设置用户密码
who,查看登录用户信息,登录用户名+ 登录终端(tty本地终端,例如在虚拟机登录;pts远程终端)+登录时间 + 登录主机的IP地址,不写则是本地终端登录
w,第一行当前时间;up 系统连续运行时间(uptime);3users当前几个用户登录;load average负载均衡指数,分别记录过去1分钟、5分钟、15分钟系统负载情况CPU和内存负载;IDLE,用户空闲时间;PCPU,用户当前操作执行时间;WHAT,用户当前执行的操作;JCPU,累计占用CPU时间

四、压缩和解压

gzip,GUN zip,gzip [文件],压缩文件,压缩后文件格式 .gz,只能压缩文件,不能压缩目录,压缩后不保留原文件
gunzip(gzip -d),GUN unzip,gunzip [压缩文件],解压缩.gz的压缩文件
tar,打包目录,tar 选项[-zcf] [压缩后文件名] [目录],-c选项打包,-v显示详细详细,-f指定文件名,-z打包同时压缩;打包以后可以再用gzip压缩,Japan.tar.gz;或者加-z选项,打包的同时压缩,压缩成.gz格式
tar,-x选项,解包,其他选项不变,例如 tar -zxf Japan.tar.gz
tar -zxvf VMwareTools*.tar.gz -C /tmp,解压缩安装包
zip,win和linux都支持的格式,压缩文件或目录,-r选项压缩目录,zip 选项[-r] [压缩后文件名] [文件或目录],压缩后文件格式.zip,压缩后保留原文件
unzip,解压.zip的压缩文件
bzip2,压缩文件,-k选项压缩后保留原文件,bzip2 -k [文件],压缩比高,gzip升级版,压缩后文件格式.bz2;可以和tar联合使用,tar -cjf Japan.tar.bz2 Japan,z换成j
bunzip2,解压缩,-k选项保留原文件,bunzip2 选项[-k] [压缩文件]
tar解压缩.tar.bz2格式压缩包,tar -xjf Japan.tar.bz2

五、网络命令

write,给用户发信息,以Ctrl+D保存结束,在线用户交流
wall,write all,发广播信息,给当前在线所有用户发
ping,测试网络连通性,-c指定次数
ifconfig,interface configure,查看和设置网卡信息,ifconfig 网卡名称 IP地址;ethernet(网络类型是以太网);inet(当前计算机IP地址);inet6(IPV6地址信息);RX(接收到数据包总数量,大小);TX(发送数据包总数量,大小);netmask(掩码);broadcast(广播地址)
mail,发送和查看电子邮件,mail [用户名],可发给不在线用户,Subject(邮件标题),Ctrl+D保存发送;mail查看邮件,标题前大写N表示未读邮件,输入邮件序号回车就可查看该邮件,h键返回邮件列表,d 1删除第一封邮件,q键退出
last,查看目前和过去所有用户的登录信息
lastlog,所有用户最后一次登录的信息,-u选项根据UID查看指定用户最后登录信息 lastlog -u 502
traceroute,显示数据包到主机间的路径
netstat,显示网络相关信息,netstat [选项],-t选项(TCP协议),-u选项(UDP协议),-l选项(监听),-r选项(路由),-n选项(显示IP地址和端口号),常用选项组合:-tlun(查看本机监听的端口),-an(a是all,查看本机所有网络连接,查看所有包含正在连接的网络程序、运行程序占用的端口),-rn(查看本机路由表、网关);Foreign Address发起端口号是1024以上的随机值,Local Address目标端口是端口号
setup,网络配置工具,Redhat系列专有,centOS 7里面,setup已经没有网络设置的功能了
nmtui,centOS 7里网络配置工具,配置完成后重启网络服务,service network restart
DHCP服务器,有这个服务器时可以自动获取IP,该服务器负责分配IP
mount,挂载,mount [-t 系统文件] [设备文件名] [挂载点],把设备文件名连接到挂载点上;挂载就是分配盘符,[-t 系统文件]可省略系统自动匹配;mkdir /mnt/cdrom;mount -t iso9660 /dev/sr0 /mnt/cdrom/;查看 ls /mnt/cdrom/
umount /dev/sr0,解除挂载

六、关机重启命令

shutdown,-c选项取消前一个关机命令,-h选项关机,-r选项重启; shutdown [选项] [时间];shutdown -h now现在关机,shutdown -h 20.30定时晚上8点半关机
其他关机命令:halt,poweroff,init 0
其他重启命令:reboot,init 6
系统运行级别,0关机,1单用户(启动最小的服务程序主要做修复,类似win安全模式,只能root登录),2不完全多用户,不含NFS服务,3完全多用户,4未分配,5图形界面,6重启;查询cat /etc/inittab;X11代表linux图形界面版本
id:3:initdefault: 修改系统默认运行级别
runlevel,查询系统运行级别 N 3,N是前一个运行级别,NULL的意思表示直接开机进来的,没有前一个运行级别;
init n,切换运行级别
logout,退出登录

第三章、vim

Vim常用操作
作用是建立、编辑、显示文本文件,Vim没有菜单,只有命令
Vim工作模式
命令模式,vi filename 进入,输入i a o 切换到插入模式,输入:进入编辑模式,输入wq退出;该模式把任何输入都当成命令
插入模式,ESC键切换到命令模式,可以修改文件
a:在光标所在字符后插入
A:在光标所在行尾插入
i:在光标所在字符前插入
I:在光标所在行行首插入
o:在光标下插入新行
O:在光标上插入新行
编辑模式,命令以回车结束运行,输入编辑模式的命令,set nu加行号,

定位命令
: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,全文替换指定字符串,%s表示全文替换
:n1,n2s/old/new/g,在一定范围内替换指定字符串,(起始行,终止行s /要替换的字符串/替换的新的字符串/g或c,g不询问,c询问确认)

保存和退出
:w保存修改,write
:w new_filename另存为指定文件
:wq保存修改并退出,write quit
ZZ快捷键,保存修改并退出
:q!不保存修改退出
:wq!保存修改并退出(文件所有者及root可使用,强制保存没有写权限w的文件)

Vim使用技巧
:r [文件名] 导入文件内容到Vim当前编辑的文件,所在光标下
:![命令],可以在Vim中执行命令并显示结果,按回车退出
:!which [命令],查询某个命令所在目录
:r![命令] 导入命令执行结果
:map [快捷键] [触发命令] 定义快捷键,(^P=Ctrl + V Ctrl +P),:map^P I#定义Ctrl + P快捷键,作用是把本行注释掉;
:1,4s/^/#/g 连续行注释,代表行首,替换为#,g是不询问,如果要在行首插入//,(:1,4s/g),需要加\转义符
:ab mymail [email protected],替换
写入配置文件永久生效,一般用户家目录下.vimrc; 比如/root/.vimrc, /home/uesrname/.vimrc

第四章、软件包管理

软件包分类
1、源码包,脚本安装包(带图形安装界面,类似win,使用较少),安装后运行稳定效率高,卸载方便直接删除目录即可,可以看到源代码,即源代码开放使用的软件,主要是C语音编写(linux是C编写);缺点:安装步骤多,尤其是软件集合时,容易出现拼写错误,安装时需要先编译,安装用时较长,一旦报错很难解决
2、二进制包,比如RPM包、系统默认包,源码包经过编译之后的软件包(现在linux安装包大部分都是二进制包),安装简单,安装速度快,缺点:看不到源代码,功能选择不灵活,依懒性(比如安装一个软件,要先安装其他软件做支持)

一、RPM包管理

RPM包管理
RPM包命令管理
RPM包命名规则
httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd软件包名
2.2.15软件版本
15软件发布的次数
e16.centos适合的linux平台
i686适合的硬件平台
rmp rpm包扩展名

RPM包依懒性
树形依赖:a->v->c
环形依赖:a->b->c->a,几个模块同时安装即可
模块依赖查询网站www.rpmfind.net

包全名:操作的包是没有安装的软件包时,使用包全名,安装和升级时使用,需要些绝对路径
包名:操作已经安装的软件包时,使用包名,是搜索/var/lib/rpm中的数据库

RPM安装
rpm -ivh [包全名],rpm安装命令,-i安装(install),-v显示安装信息(verbose),-h显示安装进度(hash),–nodeps不检测依懒性
rpm -ivh httpd-,按Tab,显示所有以httpd-开头的文件
RPM升级
rpm -Uvh [包全名],-U(upgrade)升级
卸载
rmp -e [包名], -e(erase)卸载,–nodeps不检查依懒性

RPM命令
rpm -q [包名], -q选项查询(query),查询软件包是否安装
rpm -qa,查询所有已安装的RPM包,-a(all)
rpm -qa | grep [包名],查询所有包含该包名的软件包,例如 rpm -qa | grep httpd
rpm -qi [包名],-i选项查询软件信息(information)
rpm -qip [包全名],-p选项查询未安装包信息(package),未安装所以要加包全名
rpm -ql [包名],查询包中文件安装位置,-l列表(list)
rpm -qlp[包全名],查询未安装包中文件默认安装位置
rpm -qf [本目录系统文件名或绝对路径],-f文件(file),查询系统文件属于哪个软件包
rpm -qR [包名],-R(requires)查询软件包的依懒性
rpm -qRp [包全名],查询未安装包的依赖性

rpm -V [已安装的包名],-V校验指定RPM包中的文件(verify)
第一组:验证内容中8个信息,对应内容有变化,则对应位有标识,无变化用.标识
S:文件大小是否改变
M:文件的类型或文件的权限(rwx)是否被改变
5:文件MD5校验和是否改变(可以看出文化内容是否改变)
D:设备的中,从代码是否改变
L:文件路径是否改变
U:文件的属主(所有者)是否改变
G:文件的所属组是否改变
T:文件的修改时间是否改变
第二组:文件类型
c:配置文件(config file)
d:普通文档(documentation)
g:鬼文件(ghost file),很少见,该文件不应该被这个RPM包包含
l:授权文件(license file)
r:描述文件(read me)
第三组:文件路径

RPM包中文件提取,主要用于误删除的修复
rpm2cpio 包全名 | \cpio -idv . 文件绝对路径;(\代表一个命令没有输完换行,.代表把指定的文件提取到当前目录)
rpm2cpio(将rpm包转换为cpio格式的命令),cpio(是一个标准工具,用于创建软件档案文件和从档案文件中提取文件)
cpio 选项 < [文件 | 设备],-i选项copy-in模式,还原, -d选项还原时自动新建目录,-v选项显示还原过程
举例:rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.e16.i686.rpm | cpio -idv ./bin/ls,提取RPM包中ls命令到当前目录的/bin/ls下

二、yum在线管理RPM包

本地光盘作为yum源,没联网也可以使用,部分Redhat系列的yum需要付费
vi /etc/sysconfig/network-scripts/ifcfg-ens33-1 修改配置文件,ONBOOT由no改为yes,网卡启动

网络yum源,默认已经配置好可直接使用,看得懂即可
配置文件 vi /etc/yum.repos.d/CentOS-Base.repo ,默认第一个生效,即Base生效
CentOS-Media.repo是本地光盘yum源,在不联网时使用
[base]:容器名称,一定要放在[]中,默认第一个生效,即base生效
name:容器说明,可以随意书写
mirrorlist:镜像站点,可以注释掉
baseurl: yum源服务器的地址,默认是CentOS官网的yum源服务器,服务器在国外速度较慢,可以改成其他yum源地址
enabled:标识此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
gpgcheck:如果是1是指RPM的数字证书生效,0则不生效
gpgkey:数字证书的公钥文件保存位置

yum命令,全都使用包名,无包全名
yum list,查询所有可用软件包列表
yum search [关键字/包名],搜索服务器上所有和关键字相关的包
yum -y install [包名],-y选项自动回答yes,安装软件包,例如yum -y install gcc,gcc是C语言编译器,没有gcc所有的源码包都不能安装
yum -y update [包名],升级; (后面如果不跟包名,是升级所有软件包,包括linux内核,会导致服务器宕机)
yum -y remove [包名],卸载(卸载一个包时会把它依赖的包全部卸载,连带卸载的依赖包可能也是其他软件包甚至系统内核的依赖包,此时会导致依赖关系的软件包无法使用甚至系统崩溃),yum卸载是危险操作,尽量不使用

yum grouplist,查询所有可用的软件组列表
yum groupinstall [软件组名],安装指定软件组,可以在虚拟机里使用grouplist查询软件组英文名
yum groupremove [软件组名],卸载指定软件组

光盘yum源搭建
1、挂载光盘:mount /dev/sr0 /mnt/cdrom/
所有yum源保存在cd /etc/yum.repos.d/
2、让网络yum源失效: mv CentOS-Base.repo CentOS-Base.repo.bak,把Media以外的所有yum改名,系统只检测后缀名是repo的yum源
3、修改光盘yum源文件,主要修改baseurl(光盘挂载地址),enabeld=1(开关,让这个yum源生效)
yum list 查询yum源名为c7-media
缺点:软件包可能不是最新版本;本地一直保存光盘文件
注意:linux配置文件有严格的格式要求,例如注释不能加缩进,前面后面不能加空格,只能在一行开头加#注释,不能在一行的中间加#注释,否则会报错,不要随意修改配合文件
rpm包系统默认安装位置,用户不建议修改
/etc/配置文件安装目录
/usr/bin/可执行的命令安装目录
/usr/lib/程序所使用的函数库保存位置
/usr/share/doc/基本的软件使用手册保存位置
/usr/share/man/帮助文件保存位置

rpm包安装的服务可以通过systemct服务管理命令启动,因为是在默认路径安装,在默认路径搜索即可
启动HTTPD服务,CentOS7:1、systemctl stop firewalld.service 关闭防火墙,2、systemctl start httpd.service 启动服务
浏览器输入服务器的IP地址就能访问
httpd网页保存位置:cd /var/www/html, 新建一个网页 vi index.html

三、源码包管理

源码包与rpm包区别
1、rmp有默认安装路径,源码包一般手动指定安装路径;2、管理方式不同,rpm可以用服务管理命令或绝对路径方式,源码包只能使用绝对路径管理
源码包安装位置,安装在指定的位置,一般是 /usr/local/软件名/

源码包安装
httpd源码包下载地址http://mirror.bit.edu.cn/apache/httpd/
源代码保存位置:/usr/local/src/
软件安装位置:/usr/local/
报错提示:安装过程停止,并且出现error、warning或no的提示

使用WinSCP工具把下载的源码包上传到linux服务器,解压tar -zxvf httpd-2.4.41.tar.gz ;du -sh httpd-2.4.41查看解压缩目录大小
进入解压缩目录,后续操作都要在这个目录下执行
一般安装包内文件,INSTALL是安装说明可以查看安装步骤,README是使用说明
安装步骤:
1、.configure 软件配置与检查(定义需要的功能选项比如安装目录;检查系统环境是否符合安装要求;把定义好的功能选项和检测系统环境信息写入Makefile文件,用于后续的编辑)
./configure --prefix=/usr/local/apache2(–with-pcre=/usr/local/pcre),pcre报错加上括号内容
2、make 编译,调用gcc把源码包翻译成机器语言,若报错,需要执行make clean清空编译产生的临时文件
3、make install 编译安装
/usr/local/apache2/bin/apachectl start 启动服务(rpm包和源码包的apache都可以安装,但是同时只能启动一个,因为都要占用80端口,要先systemctl stop httpd.service 停止rpm包安装的Apache)
一般生产服务器不会把rpm和源码包都安装,只会选择其中一个安装

源码包卸载
不需要卸载命令,直接删除安装目录即可,不会遗留任何垃圾文件
rm -rf /usr/local/apache2

rpm包和源码包的选择
源码包是在本地编译安装,运行效率高,性能较rpm包高5%左右,访问量很大的服务器应该使用源码包安装
rpm包安装简单,一般本机使用的服务软件都是用rpm包安装

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

Webmin为例
Webmin是一个机遇Web的linux系统管理界面,可以通过图形化的方式设置用户账号、Apache、DBS、文件共享等服务
https://sourceforge.net/projects/webadmin/files/webmin/官网下载webmin-1.941.tar.gz
解压缩后进入文件夹,执行setup.sh(linux可执行文件一般以.sh结尾)
https://192.168.0.105:10000/ 即可访问Webmin

第五章、用户和用户组管理

一、用户配置文件

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

用户信息文件/etc/passwd,-rw-r–r--
root❌0:0:root:/root:/bin/bash
一行代表一个用户,每行7个字段,以:分隔
第1字段:用户名称
第2字段:密码标志,真正的密码不是放在这里,x代表这个用户有密码,没有x代表无密码可以直接登录(无密码只允许本机登录,不允许远程登录)
第3字段:UID(用户ID),系统调用时只认UID,不是找用户名,0:超级用户;1-499:系统用户/伪用户;500-65535:普通用户
不同用户的UID可以相同,系统会把UID相同的用户当成同一个用户对待,比如普通用户UID改成0,他就成了管理员
第4字段:GID(用户初始组ID)
初始组:用户创建时就拥有,一般就是和这个用户的用户名相同的组名作为这个用户的初始组,初始组只能有一个,可以改但不建议修改
附加组:用户可以加入多个其他的用户组,并拥有这些组的权限
第5字段:用户说明,类似备注
第6字段:家目录,普通用户(/home/用户名/),超级用户(/root/),用户初始登录位置/宿主目录
第7字段:登录之后的Shell
Shell是linux的命令解释器
在/etc/passwd中,用户的Shell一般是/bin/bash,系统用户一般是/sbin/nologin,如果要一个用户禁止登录,可以修改他的shell为/sbin/nologin

影子文件/etc/shadow,----------
密码放在这里,密文方式,只有root用户可读,每个用户一行,共9个字段
第1字段:用户名
第2字段:加密密码
加密算法升级为SHA512散列加密算法
如果密码位是!!或*代表没有密码,不能登录,比如系统用户;如果要禁止一个用户登录,可以把他的密码串前面加一个!
第3字段:密码最后一次修改日期
0:设置为0则表示用户从来没有修改过密码,这样用户一登录就要修改密码
使用1970年1月1日作为标准时间,每过一天时间戳加1
第4字段:和第3个字段相比,两次密码的修改间隔时间,如果为10则10天内不允许改密码
第5字段:密码有效期(和第3个字段相比),比如设置90则密码有效期90天,需要修改密码
第6字段:密码到期前的警告天数,7则密码到期前7天开始每次登陆提示修改密码
第7字段:密码过期后的宽限天数,设置5,则密码超过90天有效期后再宽限5天
空着不填则是没有宽限天数,到期就禁止登录
0:代表密码过期后立即生效
-1:代表密码永远不会失效
第8字段:账号失效时间,用时间戳表示
第9字段:保留

时间戳换算
时间戳换算成日期:date -d “1970-01-01 16066 days”
日期换算成时间戳:echo ( ( (( (((date --date=“2020/02/07” +%s)/86400+1))

组信息文件/etc/group
第1字段:组名
第2字段:组密码标志
第3字段:GID,组ID,分段类型和UID类似,系统是靠GID识别用户组
第4字段:组中附加用户,除了初始用户以外的用户

组密码文件/etc/gshadow
第1字段:组名
第2字段:组密码,有安全隐患不推荐设置(只有root可以把其他用户加进组,或者设置一个组密码给一个组员,他就相当于组长,可以增删组员)
第3字段:组管理员用户名
第4字段:组中附加用户

二、用户管理文件

1、用户的家目录
普通用户:/home/用户名/,所有者和所属组都是此用户,权限700,普通用户改成超级用户,UID改成0,改GID没用,家目录不变
超级用户:/root/,所有者和所属组都是root用户,权限是550
2、用户邮箱
/var/spool/mail/用户名
3、用户模板目录
/etc/skel/,创建一个新用户时,默认在其家目录生成的文件从这个目录拷贝;可以在这里新建文件创建新用户时家目录就会有这些文件

三、用户管理命令

1、用户添加命令useradd
-u UID:手工指定用户的UID号
-d 家目录:手工指定用户的家目录
-c 用户说明:手工指定用户的说明,包含空格是用""括起来
-g 组名:手工指定用户的初始组
-G 组名:指定用户的附加组,一次指定多个附加组时用,分割
-s shell:手工指定用户的登录shell命令解释器,默认是/bin/bash
举例:useradd -u 666 G root,bin -c “test user” -d /user2 -s /bin/bash user2 (\是命令换行符)

用户默认值文件/etc/default/useradd
GROUP=100,用户默认组(linux公有模式时生效,我们一般是私有模式)
HOME=/home,用户家目录
INACTIVE=-1,密码过期宽限天数
EXPIRE=,密码失效时间
SHELL=/bin/bash,默认shell
SKEL=/etc/skel,模板目录
CREATE_MALI_SPOOL=yes,是否建立邮箱

/etc/login.defs
PASS_MAX_DAYS 9999,密码有效期(5)
PASS_MIN_DAYS 0,密码修改间隔(4)
PASS_MIN_LEN 5,密码最小5位(PAM生效,默认8位,这个不生效)
PASS_WARN_AGE 7,密码到期警告(6)
UID_MIN 500,最小和最大UID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512,加密模式

2、修改用户密码passwd
给自己改密码,直接passwd;root给别人改密码,passwd [用户名]
passwd -S [用户名],-S选项,查询用户密码的密码状态,仅root用户可用,查看的是/etc/gshadow内部分字段34567,使用的绝对时间
passwd -l [用户名],-l选项,暂时锁定用户,仅root用户可用,shadow文件密码串前面加了!!
passwd -u [用户名],-u选项,解锁用户,仅root用户可用
–stdin,可以通过管道符输出的数据作为用户的密码,echo “123” | passwd --stdin lamp,把123设置为lamp的密码

3、修改用户信息usermod,针对已经存在的用户
-u UID:修改用户的UID
-d 家目录:修改用户的家目录
-c 用户说明:修改用户的说明,包含空格是用""括起来,举例:usermod -c “test user” user1
-g 组名:修改用户的初始组
-G 组名:修改用户的附加组
-L:临时锁定用户lock
-U:解锁用户Unlock

4、修改用户密码状态chage,chage [选项] [用户名]
-l选项,列出用户详细密码状态
-d [日期]:密码最后一次修改日期(shadow3字段)
-m [天数]:两次密码修改间隔(shadow4字段)
-M [天数]:密码有效期(shadow5字段)
-W [天数]:密码过期前警告天数(shadow6字段)
-I [天数]:密码过期后宽限天数(shadow7字段)
-E [日期]:账号失效时间(shadow8字段)
常用命令:chage -d 0 [用户名],要求用户一登录就必须改密码

5、删除用户userdel
userdel [-r] [用户名],-r选项,删除用户的同时删除用户家目录
useradd和userdel,实际是修改了以下文件:/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow,rm -rf /var/spool/mail/user1,rm -rf /home/user1

6、查看用户ID
id [用户名],查看用户UID、初始组ID、附加组ID

7、用户切换命令su
su [选项] [用户名]
-选项,代表连带用户的环境变量一起切换,不带“-”切换不完全会报错
-c命令:仅使用root身份执行一次命令,而不切换用户,su - root -c “useradd user3”

env命令,查询环境变量

四、用户组管理命令

1、添加用户组
groupadd [选项] [组名],-g选项GID:指定组ID

2、修改用户组
groupmod [选项] [组名],-g GID,修改组ID;-n 新组名,修改组名

3、删除用户组
groupdel [组名],如果组内有初始用户,该组不能删除,只有附加用户的组可以删

4、组内用户的添加和删除
gpasswd [选项] [组名],-a [用户名] 把用户加入组,-d [用户名] 把用户从组中删除,这里操作的都是附加组
gpasswd -a chuwei root

第六章、权限管理

一、ACL权限

1、ACL权限简介,抛开ugo的rwx权限规则,在文件或目录直接给用户分配权限
2、查看分区是否开启ACL权限,dumpe2fs -h /dev/sda3,查询指定分区详细文件系统信息,-h选项,仅显示超级块中的信息,而不显示磁盘块组的详细信息(该命令在centos7无法使用)
ACL开启方法:vi /etc/fstab ,defaults后加",acl"(该文件时系统启动时自动挂载文件);mount -o remount /重新挂载文件系统或重启动系统,修改生效

df -h命令,查看分区使用状况,里面有挂载点信息

3、查看ACL权限
getfacl [文件名]

4、设定ACL权限
setfacl [选项] [文件名],setfacl -m u:yunyun:rx /project/ ,u是给用户设置权限,换成g是给组设置权限,后面跟用户名和权限,drwxrwx—+
-m,设定ACL权限
-x,删除指定的ACL权限
-b,删除所有的ACL权限
-d,设定默认ACL权限
-k,删除默认ACL权限
-R,递归设定ACL权限

5、最大有效权限mask
mask是用来指定最大有效权限,如果给用户赋予了ACL权限,是需要和mask权限“相与”才能得到用户真正权限
修改方式:setfacl -m m:rx /project/,mask权限影响ACL用户和所属组,不影响所有者权限

6、删除ACL权限
setfacl -x u:[用户名] [文件名],删除指定用户ACL权限
setfacl -x g:[用户名] [文件名],删除指定用户组的ACL权限
setfacl -b [文件名],删除文件的所有ACL权限

7、递归ACL权限
setfacl -m u:[用户名]:[权限] -R [目录];setfacl -m u:yunyun:rx -R /project/
递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限;递归设置ACL权限后新建的文件不具有这个ACL权限

8、默认ACL权限
如果父目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限,只针对新建文件
setfacl -m d:u:[用户名]:[权限] [目录];setfacl -m d:u:yunyun:rx -R /project/,也可以用递归,这样子目录也有默认ACL权限

二、文件特殊权限

1、SetUID
a、只有可以执行的二进制程序(可执行文件)才能设定SUID权限
b、命令执行者要对该程序拥有x(执行)权限,如果没有执行权限,则会显示大写S报错
c、拥有文件SUID权限的普通用户,在执行该文件程序时可以获得该文件所有者的身份
d、SUID权限只在该程序执行过程中有效
例如:-rwsr-xr-x,passwd命令拥有UID权限(普通用户可以改自己的密码,写入/etc/shadow)
e、SUID设定方法:4代表SUID,chmod 4755 [文件名]; chmod u+s [文件名]
f、取消SUID权限:chmod 755 [文件名];chmod u-s [文件名]
g、危险的SetUID:关键目录应严格控制写权限,比如/、/usr等;用户密码设置要准守密码三原则;对系统中默认具有SUID权限的文件做一个列表,定期检查有没有这之外的文件被设置了SUID权限

2、SetGID
2.1、针对文件,和SUID类似
a、只有可执行程序才能设置SGID权限
b、命令执行者要对该程序拥有x(执行)权限
c、在执行程序时,组身份升级为该程序文件的所属组
d、SGID只在程序执行过程中有效
举例:所查询的数据库mlocate.db(-rw-r-----)所属组有读权限,查询命令locate(-rwx–s--x)有SUID权限
2.2、SGID针对目录的作用
a、普通用户必须对此目录拥有r和x权限,才能进入此目录
b、普通用户在此目录的有效组会变成此目录的所属组
c、若普通用户对此目录拥有w权限,新建的文件的默认属组时这个目录的属组
2.3设定SetGID
a、chmod 2755 [文件名],2代表SGID
b、chmod g+s [文件名]
2.4、取消SGID
a、chmod 755 [文件名]
b、chmod g-s [文件名]

3、Sticky BIT
3.1、SBIT粘着位作用
a、粘着位只对目录有效
b、普通用户应对该目录拥有w和x权限
c、如果没有粘着位,普通用户w权限可以删除目录下所有文件,包括其他用户建立的文件
d、拥有粘着位权限后,普通用户就算有w权限也不能删除其他用户建立的文件(可查看和修改),只能删除自己建立的文件,root除外
举例:ll -d /tmp目录 drwxrwxrwt,最后一位t代表SBIT权限
3.2、设定粘着位
a、chmod 1755 [目录],1代表SBIT
b、chmod o+t [目录]
3.3、取消粘着位
a、chmod 777 [目录]
b、chmod o-t [目录]

三、文件系统属性权限chattr(可以限制root)

1、chattr命令格式
chattr [±=] [选项] [文件或目录],+增加权限,-删除权限,=等于某权限,什么权限由选项决定
i选项,针对文件,不允许对文件进行删除、改名,也不能添加和修改数据;
i选项,针对目录,只能修改目录下文件的数据,但不允许建立和删除文件;
a选项,针对文件,只能在文件中增加数据,但不能删除也不能修改数据,即不能修改和删除现有数据(vim命令不能用)
a选项,针对目录,只允许在目录中建立和修改文件,不允许删除

2、查看文件系统属性
lsattr [选项] [文件名],-a选项显示所有文件和目录,-d选项若目标是目录,仅列出目录本身的属性

四、sudo权限

root把本来只能超级用户执行的命令,赋予普通用户执行
sudo的操作对象是系统命令
visudo,修改sudo权限,其实际修改的文件时/etc/sudoers

标准格式: root ALL=(ALL) ALL,#用户名 [被管理主机的地址,被访问的IP也就是linux服务器的IP,不是来源IP] = (可使用的身份) [授权命令/绝对路径]
针对用户组:%wheel ALL=(ALL) ALL,#组名 [被管理主机的地址] = (可使用的身份) [授权命令/绝对路径]
举例,授权user1用户可以重启服务器:visudo文件加入如下字段行:user1 ALL=/sbin/shutdown -r now

普通用户执行sudo赋予的命令:sudo /sbin/shutdown -r now,sudo [命令绝对路径] [选项] [参数]
查看可用的sudo命令:sudo -l

第七章、文件系统管理

一、分区类型

1、主分区,最多只能分四个
2、扩展分区,只能有一个,也算主分区的一种,也就是说主分区加扩展分区最多4个;扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用
3、逻辑分区,在扩展分区中划分,如果是IDE硬盘,linux最多支持59个逻辑分区,如果是SCSI硬盘,linux最多支持11个逻辑分区

分区的设备文件名
主分区1 /dev/sda1
主分区2 /dev/sda2
主分区3 /dev/sda3
扩展分区 /dev/sda4
逻辑分区1 /dev/sda5,逻辑分区从5开始,1-4留给主分区和扩展分区
逻辑分区2 /dev/sda6
逻辑分区3 /dev/sda7

二、文件系统,格式化就是写入文件系统

1、ext2:ext文件系统的升级版本,红帽linux7.2版本以前的系统默认都是ext2,1993年发布,最大支持16TB的分区和最大2TB的文件
2、ext3:和ext2的最大区别是带了日志功能,以在系统突然停止时提高文件系统的可靠性
3、ext4:向下兼容ext3,最大1EB分区,16TB单个文件,centOS6.3默认文件系统(1EB=1024PB=1024*1024TB)

三、文件系统常用命令

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

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

df:把根目录/、/boot、/home分开统计,除了目录和文件的大小,它也统计了被命令或程序占用的空间(常见的是文件已经被删除,但程序并没有释放空间,重启服务器可释放),df查看的可用空间才是真正的剩余可用空间
du:统计的是根目录/下所有的文件和目录的大小

3、文件系统修复命令fsck
fsck [选项] [分区设备文件名]
-a,不用显示用户提示,自动修复文件系统
-y,自动修复,和-a类似,部分文件系统只支持-y

4、显示磁盘状态命令dumpe2fs
dumpe2fs [分区设备文件名],该命令只针对ext文件系统
centos7以后版本默认文件系统是xfs,(类似命令xfs_info /dev/sda1)

5、挂载命令
a、mount -l,查询系统中已经挂载的设备,-l选项显示卷标名称,可查看设备文件和挂载点,文件系统类型,权限等
b、mount -a,依据配置文件/etc/fstab的内容,自动挂载(系统分区在开机时自动挂载,光盘、移动硬盘不自动挂载,可以配置fstab文件实现开机自动挂载)
c、挂载命令格式:mount 选项 [设备文件名] [挂载点]
-t选项,文件系统,加入文件系统类型来指定挂载的类型,比如ext4、iso9660等
-L选项,指定挂载分区卷标名,而不是用设备文件名
-o选项,可以指定挂载的额外选项
d、挂载光盘:建立挂载点(mkdir /mnt/cdrom),挂载光盘(mount /dev/sr0 /mnt/cdrom/或mount -t iso9660 /dev/cdrom /mnt/cdrom),iso9660是光盘默认文件系统,可以不填系统会自动检测
e、卸载命令,umount [设备文件名或挂载点],umount /mnt/cdrom

f、挂载U盘
fdisk -l,查看U盘设备文件名
mount -t vfat /dev/sdb1 /mnt/usb (linux把FAT16识别为fat,FAT32识别为vfat)(linux默认不支持NTFS文件系统)
卸载命令umount /dev/sdb1

g、挂载移动硬盘(NTFS文件系统),重新编译内核或使用工具软件
NTFS-3G插件,https://www.tuxera.com/community/open-source-ntfs-3g/,安装后即可正确读取NTFS文件系统
挂载命令:mount -t ntfs-3g /dev/sdb1 /mnt/usb ,卸载命令:umount /mnt/usb

四、fdisk分区

1、fdisk命令分区过程
a、关机状态,使用虚拟机添加新硬件,添加一块硬盘
b、开机后fdisk -l查看新添加硬盘
c、fdisk /dev/sdb
分区表被占用,可以执行partprobe命令重新读取分区表
d、格式化分区,mkfs -t [文件系统类型ext4/xfs] /dev/sdb1(不能格式化扩展分区)
e、新建目录,mkdir /disk5,挂载mount /dev/sdb5 /disk5,df -T查询挂载情况

2、分区开机自动挂载,/etc/fstab
第1字段:分区设备文件名或UUID(硬盘通用唯一识别码,ext4文件系统查询方法dumpe2fs -h /dev/sdb1)
第2字段:挂载点
第3字段:文件系统名称
第4字段:挂载参数
第5字段:指定分区是否被dump备份,0代表不备份,1代表每天备份,2代表不定期备份(如果备份,分区有/lost+found目录)
第6字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,优先级1大于2
mount -a命令,依据配置文件/etc/fstab的内容,自动重新挂载,如果报错说明/etc/fstab文件写入错误
如果/etc/fstab文件配置错误,在重启动时输入root密码修复,如果/etc/fstab不能修改,mount -o remount,rw /根分区分配写权限

特别说明:sysfs和proc是内存的挂载点,tmpfs和devpts是临时文件的挂载点,不能操作

五、分配swap分区

1、free命令,查看内存和swap分区使用情况
a、cached(缓存),是指把读取出来的数据保存在内存当中,当再次读取时不用读取硬盘而直接从内存中读取,加快数据读取过程
b、buffer(缓冲),在写入数据时,先把分散的写入操作保存到内存当中,当达到一定程度再集中写入硬盘,减少了磁盘碎片和硬盘的反复寻道,加快数据写入过程
2、分配swap,fdisk /dev/sdb,n新建分区,l新建逻辑分区,t修改分区ID号,改为82,w保存退出,显示设备忙执行partprobe,如果还报错就重启
3、格式化swap分区,mkswap /dev/sdb6
4、加入swap分区,swapon /dev/sdb6(取消swap分区,swapoff /dev/sdb6)
5、swap分区开机自动挂载,vi /etc/fstab
/dev/sdb6 swap swap defaultes 0 0

第八章、shell基础

一、Shell概述

1、Shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell启动、挂起、停止甚至是编写一些程序
2、shell还是一个功能强大的编程语言,shell是解释执行的脚本语言,在shell中可以直接调用linux系统命令
3、shell分类,两种语法类型Bourne和C,Bourne家族包括sh、ksh、Bash、psh、zsh;C家族包括csh、tcsh
4、Bash,linux主流shell,和sh兼容
5、查询linux支持的shell:/etc/shells

二、shell脚本的执行方式

1、echo输出命令,echo [选项] [输出内容],-e选项支持反斜线控制的字符转换
\:输出\本身
\a:输出警告音
\b:退格键,也就是向左删除键
\c:取消输出行末的换行符,和“-n”选项一致
\e:ESCAPE键
\f:换页符
\n:换行符
\r:回车键
\t:制表符
\v:垂直制表符
\0nnn:按照八进制ASCII码表输出字符,nnn是三位八进制数
\xhh:按照十六进制ASCII码表输出字符,hh是两位十六进制数

2、第一个程序
vi hello.sh //建议脚本都写成.sh后缀
#!/bin/bash //#!不是注释,标识,以下语句是shell脚本
#The frist program //这是一行注释
echo -e “Hello World” //输出

3、shell脚本执行方法
a、赋予执行权限,直接运行,chmod 755 hello.sh ;绝对路径执行 ./hello/sh或/shell/hello.sh
b、通过Bash调用执行脚本,bash hello.sh,没有执行权限也可以执行,sh脚本要在当前目录

4、linux和Windows脚本转换
a、cat -A hello.sh,查看脚本里的隐藏字符,可以看到隐藏的 , , 是linux的隐藏回车符
b、Windows里编辑的脚本,隐藏回车符是^M$,在linux里无法执行
c、dos2unix [文件名],即可完成转换
d、如果没有dos2unix,使用yum安装yum -y install dos2unix

三、bash的基本功能

1、历史命令,history [选项] [历史命令保存文件],-c清空历史命令,-w把缓存中的历史命令写入历史命令保存文件,~/.bash_history
a、历史命令默认保存1000条,可在环境变量配置文件/etc/profile中修改,HISTSIZE=1000,重新登录生效
b、历史命令的调用
使用上、下箭头调用以前的命令
使用!n重复执行第n条历史命令
使用!!重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开通的命令

2、命令与文件补全,Tab键,有多个可能文件时按两次Tab键

3、命令别名,alias [别名]=’[原命令]’;alias,查看别名
a、命令执行时顺序
第一顺位执行用绝对路径或相对路径执行的命令
第二顺位执行别名
第三顺位执行bash的内部命令
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令,echo $PATH查询配置路径

b、让别名永久生效,修改配置文件vim /root/.bashrc
c、删除别名,unalias [别名]

4、bash常用快捷键
ctrl + A:把光标移动到命令行开头
ctrl + E:把光标移动到命令行结尾
ctrl + C:强制终止当前的命令
ctrl + L:清屏,相当于clear命令
ctrl + U:删除或剪切光标之前的命令
ctrl + K:删除或剪切光标之后的内容
ctrl + Y:粘贴ctrl +U或ctrl +K剪切的内容
ctrl + R:在历史命令中搜索
ctrl + D:退出当前终端,退出登录
ctrl + Z:暂停,并放入后台
ctrl + S:暂停屏幕输出
ctrl + Q:恢复屏幕输出

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

6、输出重定向
a、标准输出重定向,命令 > 文件,以覆盖的方式,把命令的正确输出输出到指定的文件或设备中
命令>>文件,以追加的方式,把命令的正确输出输出到指定的文件或设备中
b、标准错误输出重定向, 错误命令 2>文件,以覆盖的方式,把命令的错误输出输出到指定的文件或设备中
错误命令 2>>文件,以追加的方式,把命令的错误输出输出到指定的文件或设备中,lst 2>>abc
c、正确输出和错误输出同时保存
命令>文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中,lst>>abc 2>&1
命令>>文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件中
命令&>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中
命令&>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件中,date&>>abc
命令>>文件1 2>>文件2 把正确输出追加到文件1中,把错误输出追加到文件2中,lst >>abc 2>>bcd
知识点:ls &> /dev/null,不管输出内容,/dev/null相当于linux的垃圾箱

7、输入重定向
wc [选项] [文件名],-l只统计行数,-w只统计单词数,-c只统计字节数,以ctrl+D结束输入
[命令]<[文件],把文件作为命令的输入,wc <anaconda-ks.cfg ,输出 61 163 1737(61行,163个单词,1737个字节数)
wc<<hello,输入内容,再次遇到hello结束输入,统计wc项

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

附加知识点:dd if=[输入文件] of=[输出文件] bs=[字节数] count=[个数]
dd命令可以复制分区甚至硬盘,包含文件系统,磁盘对拷命令
if,指定源文件或源设备
of,指定目标文件或目标设备
bs,指定一次输入/输出多少个字节,即把这些字节看做一个数据块
count,指定输入/输出多少个数据块
date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date,记录创建100M的文件需要多少时间
/dev/zero是特殊文件,代表0,复制该文件向testfile写入100M数据

命令 && echo yes || echo no,判断命令是否正确执行

9、管道符 |
[命令1] | [命令2],命令1的正确输出作为命令2的操作对象,例如,ll -a /etc | more
举例:netstat -an | grep --color=auto ESTABLISHED
附加知识点:grep [选项] [搜索内容] [文件名],-i忽略大小写,-n输出行号,-v反向查找,–color=auto搜索出的关键字用颜色显示

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

11、bash中其他特殊符号
符号 作用
‘’ 单引号,在单引号中所有的特殊符号,包括空格、 都 没 有 特 殊 含 义 " " 双 引 号 , 在 双 引 号 中 绝 大 部 分 特 殊 符 号 都 没 有 特 殊 含 义 , 但 部 分 除 外 都没有特殊含义 "" 双引号,在双引号中绝大部分特殊符号都没有特殊含义,但部分除外 ""(调用变量的值),(引用命令),\(z转义) `` 反引号,反引号括起来的内容是系统命令,在bash中会先执行它,abc=date`,echo $abc输出当前时间
$() 和反引号作用一样,用来引用系统命令
# #开头的行代表注释
$ 用于调用变量的值,如果要调用变量name的值,用$name的方式得到变量的值
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符,例如$将输出$符,而不当做变量引用

四、bash的变量

1、变量基本规则
a、变量:变量是计算机内存的单元,其中存放的值可以改变
b、变量设置规则,变量名可以由字母、数字和下划线组成,但不能以数字开通,例如2name是错误的
c、在bash中,变量的默认数据类型是字符串,如果要进行数值运算,则必须指定变量类型为数值型
d、变量用等号连接值,等号左右两侧不能有空格
e、变量的值如果包含空格,需要用单引号或双引号包括
f、在变量的值中,可以使用\转义符
g、如果需要增加变量的值,可以进行变量值的叠加,不过变量需要用双引号包含" 变 量 名 " , 或 用 变量名",或用 "{变量名}包含
h、如果要把命令的结果作为变量值赋予变量,则需要使用反引号或$()括起来
i、环境变量名建议大写,以便区分

2、变量分类
a、用户自定义变量
b、环境变量,这种变量中主要保存的是和系统操作环境相关的数据
c、位置参数变量,主要是用来向脚本中传递参数或数据,变量名不能自定义,变量作用也是固定的(预定义变量的一种)
d、预定义变量,是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

3、用户自定义变量(本地变量)
a、变量定义,name=chuwei
b、变量调用,echo n a m e c 、 变 量 叠 加 , a a = 123 , a a = " name c、变量叠加,aa=123,aa=" namecaa=123aa="aa"456,aa=${aa}789,echo $aa输出123456789
d、变量查看,set,查看系统所有变量
e、变量删除,unset name

4、环境变量
a、用户自定义变量只在当前shell中生效,而环境变量会在当前shell和这个shell的所有子shell当中生效;如果把环境变量写入相应的配置文件, 那么这个环境变量就会在所有的shell中生效
b、设置环境变量
#声明变量,export [变量名]=[变量值],把一个本地变量声明成环境变量,export [变量]
#变量查询,env
#变量删除,unset [变量名]

附加知识点,pstree,查看当前进程,可以查看当前shell和父shell,centos7默认没有这个命令,需要安装yum -y install psmisc

c、系统常见环境变量PATH,系统查找命令的路径;可以把自定义的可执行文件拷贝到系统命令目录,执行时就不需要写绝对路径;或者PATH环境做叠加,PATH="$PATH":/root/sh,加一个命令搜索路径
d、系统常见环境变量PS1,定义系统提示符的变量(env查不到,要用set查),echo $PS1查询当前设置,修改格式:PS1=’[\u@\t \w]$ ’
\d:显示日期,格式为“星期月日”
\h:显示简写主机名,如默认主机名localhost
\t:显示24小时制时间,格式为“HH:MM:SS”
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
@:显示当前时间(HH:MM),和上午下午
\u:显示当前用户名
\w:显示当前所在命令的完整名称
\W:显示当前所在目录的最后一个目录
#:执行的第几个命令
$:提示符,如果是root用户提示符为#,如果是普通用户显示为$

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

6、预定义变量
$?:最后一次执行命令的返回状态,如果上一条命令正确执行,返回0;如果上一条命令执行不正确,返回非0值(可以定义具体返回什么)
$$:当前进程的进程号(PID)
$!:后台运行的最后一个进程的进程号(PID)

7、接收键盘输入
read [选项] [变量名]
-p提示信息,在等待read输入时,输出提示信息;
-t秒数,read命令会一直等待用户输入,使用此选项可以指定等待时间
-n字符数,read命令只接受指定的字符数,就会执行
-s,隐藏输入的数据,适用于机密信息的输入
#!/bin/bash
read -t 30 -p “shuru name:” name
echo “Name is $name”
read -s -t 30 -p “shuru age:” age
echo “Age is $age”
read -n 1 -t 30 -p “shuru gender[M/F]” gender
echo -e “\n”
echo “sex is $gender”

五、bash的运算符

1、数值运算
a、declare声明变量类型
declare [+/-] [选项] [变量名]
-,给变量设定类型属性
+,取消变量的类型属性
-i,将变量声明为整数型integer
-x,将变量声明为环境变量
-p,显示指定变量被声明的类型
方法1、declare -i cc= a a + aa+ aa+bb
方法2、expr或let数值运算工具:dd=$(expr $aa + b b ) 方 法 3 、 bb) 方法3、 bb)3(( 运算式 )),或 [ 运 算 式 ] , e e = [ 运算式 ],ee= []ee=(( a a + aa+ aa+bb )),ff=$[ a a + aa+ aa+bb ]

2、运算符
优先级 运算符 说明
13 -,+ 单目负、单目正
12 !,~ 逻辑非、按位取反或补码
11 *,/,% 乘、除、取模
10 +,- 加,减
9 <<,>> 按位左移、按位右移
8 <=,>=,<,> 小于等于、大于或等于、小于、大于
7 ==,!= 等于,不等于
6 & 按位与
5 ^ 按位异或
4 | 按位或
3 && 逻辑与
2 || 逻辑或
1 =,+=,-=等 赋值,运算并赋值
3、变量测试
变量置换方式 变量y没有设置 变量y为空值 变量y设置值
x= y − 新 值 x = 新 值 x 为 空 x = {y-新值} x=新值 x为空 x= yx=xx=y
x= y : − 新 值 x = 新 值 x = 新 值 x = {y:-新值} x=新值 x=新值 x= y:x=x=x=y
x= y + 新 值 x 为 空 x = 新 值 x = 新 值 x = {y+新值} x为空 x=新值 x=新值 x= y+xx=x=x={y:+新值} x为空 x为空 x=新值
x= y = 新 值 x = 新 值 , y = 新 值 x 为 空 , y 值 不 变 x = {y=新值} x=新值,y=新值 x为空,y值不变 x= y=x=y=xyx=y,y值不变
x= y : = 新 值 x = 新 值 , y = 新 值 x = 新 值 , y = 新 值 x = {y:=新值} x=新值,y=新值 x=新值,y=新值 x= y:=x=y=x=y=x=y,y值不变
x= y ? 新 值 新 值 输 出 到 标 准 错 误 输 出 x 为 空 x = {y?新值} 新值输出到标准错误输出 x为空 x= y?xx=y
x= y : ? 新 值 新 值 输 出 到 标 准 错 误 输 出 新 值 输 出 到 标 准 错 误 输 出 x = {y:?新值} 新值输出到标准错误输出 新值输出到标准错误输出 x= y:?x=y

六、环境变量配置文件

1、简介
a、source [配置文件],. [配置文件],让修改的配置文件立即生效,不用重启系统
b、环境变量配置文件主要是定义对系统的操作环境生效的系统默认环境变量,比如PAT、HISTSIZE、PS1、HOSTNAME等
c、常用配置文件
/etc/profile
/etc/profile.d/*.sh */
~/.bash_profile只对某个用户生效
~/.bashrc只对某个用户生效
/etc/bashrc
特别说明:环境变量写在哪个配置文件都可以,后读取的变量会覆盖前面读取的同名变量;另外注意~配置文件只对某个用户生效

2、环境变量配置文件的作用
a、/etc/profile的作用
USER:当前用户名
LOGNAME:登录用户名
MAIL:邮箱
PATH:命令搜索路径
HOSTNAME:主机名
HISTSIZE:保存历史命令条数
umask:
调用/etc/profile.d/*.sh文件 */

b、/root/.bash_profile
作用1,调用. ~/.bashrc
作用2,PATH= P A T H : PATH: PATH:HOME/bin,增加一个用户目录下的命令搜索路径

c、/root/.bashrc
作用1,定义系统别名,alias rm=‘rm -i’
作用2,调用. /etc/bashrc

d、/etc/bashrc(除PS1,其他参数no login生效,不登录用户时生效)
作用1,PS1="[\u@\h \W]\$ ",定义提示符格式
作用2,umask
作用3,PATH变量
作用4,调用/etc/profile.d/*.sh文件 */

3、其他配置文件
a、注销时生效的环境变量配置文件,~/.bash_logout,默认是空的,可以执行清空历史命令等操作
b、~/.bash_history,历史命令保存,history可查,history -w刷新保存

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

b、远程终端登录信息,/etc/issue.net
转义符在/etc/issue.net文件中不能使用,只能写纯文本
是否显示此登录信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(要重启SSH服务service sshd restart)

c、登录后欢迎信息,/etc/motd,本地登录和远程登录都生效,是登录以后的欢迎信息

第九章、shell编程

一、基础正则表达式

1、正则表达式与通配符
a、正则表达式,用来在文件中匹配符合条件的字符串,正则是包含匹配,grep、awk、sed等命令支持正则表达式
b、通配符,用来匹配符合条件的文件名,是完全匹配,ls、find、cp等命令不支持正则表达式,只能用通配符进行匹配

2、基础正则表达式
元字符 作用
* 前一个字符匹配0次或任意多次
. 匹配除了换行符外任意一个字符
^ 匹配行首,例如,^hello会匹配以hello开头的行
$ 匹配行尾,例如,hello&会匹配以hello结尾的行
[] 匹配中括号中指定的任意一个字符,[0-9]匹配任意一个数字
[^] 匹配除中括号内字符以外的任意一个字符,[^a-z]表示任意一个非小写字母
\ 转义符,用于取消特殊符号的含义
{n} 表示其前面的字符恰好出现n次,[0-9]{4}匹配4位数字
{n,} 表示其前面的字符出现不小于n次,[0-9]{2,}表示两位及以上的数字
{n,m} 表示其前面的字符至少出现n次,最多出现m次,[a-z]{6,8}匹配6到8为的小写字母
例如:.代表匹配所有内容,和通配符的作用一样
^KaTeX parse error: Expected group after '^' at position 16: ,匹配空白行,grep -n ^̲ regular
grep -n [0-9] regular ,匹配不以数字开头的行
grep [a-zA-Z] regular ,匹配不以字母开头的行
grep -n “.$” regular ,\转义符,输出所有以.结尾的行,这里需要用""包含
grep "sa{1,3}i"regular ,匹配在字母s和字母i之间有最少一个a,最多三个a

二、字符截取

1、cut字段提取命令,cut [选项] [文件名],-f列号,提取第几列;-d分隔符,按照指定分隔符分割列(默认制表符)
cut -d “:” -f 1,3 /etc/passwd,提取第1列和第3列,以:分隔
cat /etc/passwd | grep /bin/bash | cut -f 1 -d “:”,先提取行,再提取列,得到普通用户的用户名

2、printf命令
printf ‘输出类型输出格式’ [输出内容]
a、输出类型
%ns:输出字符串,n是指输出几个字符
%ni:输出整数,n是指输出几个数字
%m.nf:输出浮点数,m是代表输出总共m位,n是代表小数点后n位
b、输出格式
\a:输出警告声音
\b:输出退格键,也就是backspace
\f:清除屏幕
\n:换行
\r:回车,也就是enter
\t:水平制表符
\v:垂直制表符
printf ‘%s %s %s\n’ 1 2 3 4 5 6 ,每3个字符一组输出,输出类型要用’'括起来,否则只能识别第一个,后面当成字符
printf后面不能直接跟文件名,可以使用这种形式:printf %s $(cat regular) ,无输出格式,打印一行
printf ‘%s\t %s\t %s\t %s\t %s\n’ $(cat student.txt),调整格式输出

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

3、awk命令
a、命令格式,awk ‘条件1{动作1} 条件2 {动作2}…’ [文件名],条件(关系表达式),动作(格式化输出、流程控制语句)
awk '{printf $2"\t" KaTeX parse error: Undefined control sequence: \n at position 3: 4"\̲n̲"}' student.txt…n代表提取第n列,$0代表提取所有列
df -h | awk ‘{ print $1"\t" $5"\t" $6}’,awk命令可以识别多个空格作为分隔符,cut不行,print一行读完自动加换行符,不需加\n
df -h | grep centos-root | awk ‘{print $5}’ | cut -d “%” -f 1
b、FS内置变量:awk ‘{FS=":"} {print $1"\t" $3}’ /etc/passwd ,awk使用FS定义分隔符,默认是制表符,这里数据是从第二列开始分隔,因为在读取FS前已经读了一行
c、BEGIN:awk ‘BEGIN{FS=":"} {print $1"\t" $3}’ /etc/passwd,前面加BEGIN会先读取FS再读数据
d、END:END{print “THE END”},加入END,在所有数据读完以后打印

举例:cat /etc/passwd | grep /bin/bash | awk ‘BEGIN{FS=":"}{print $1"\t" $3 }’,提取可登陆用户名和UID

e、关系运算符,cat student.txt | grep -v Name | awk ‘$3>=78 {printf $2"\n"}’

4、sed命令
sed是一种轻量级流编辑器,主要用来将数据进行选取、替换、删除、新增等操作;
与vim的区别:sed可以对命令的结果进行操作,支持管道符|,vim只能操作文档
sed [选项] ‘[动作]’ [文件名]
a、sed选项
-n:一般sed命令会把所有数据都输出到屏幕,加入-n,则只会把经过sed命令处理的行输出到屏幕
-e:允许对输入数据应用多条sed命令编辑
sed -e ‘s/chuwei/boy/g;s/dalai/boy/g’ student.txt,允许多个条件同时执行,用;分隔,s代表整个文档替换
-i:用sed的处理结果直接修改读取数据的文件,而不是由屏幕输出

b、sed动作
a\:追加,在当前行后添加一行或多行,添加多行时,除最后一行外,每行末尾需要用\代表数据未完结
c\:行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾用\代表数据未完结
i\:插入,在当前行前插入一行或多行,插入多行时,除最后一行外,每行末尾需要有\代表数据未完结
d:删除,删除指定行,‘m,nd’,删除m行至n行
p:打印,输出指定行,np代表输出第n行
s:字串替换,用一个字符串替换另外一个字符串,格式为“行范围s/旧字串/新字串/g”,类似vim中的替换
sed -i ‘2s/60/99/g’ student.txt,替换第2行内容60为99,并保存文件

sed -n ‘2p’ student.txt ,只输出第2行
df -h | sed -n ‘2p’,管道符接收数据
sed ‘2,4d’ student.txt ,删除第2行至第4行,输出到屏幕,不影响原文件
sed '4i jingj\

jingy’ student.txt,在第4行前面插入2行
sed ‘3a yuqi’ student.txt ,在第3行后面加入1行
sed ‘5c girl’ student.txt ,替换第5行内容为girl

三、字符处理

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

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

四、条件判断

1、按照文件类型进行判断
a、选项
-b [文件]:判断该文件是否存在,并且是否为块设备文件
-c [文件]:判断该文件是否存在,并且是否为字符设备文件
-d [文件]:判断该文件是否存在,并且是否为目录文件
-e [文件]:判断该文件是否存在
-f [文件]:判断该文件是否存在,并且是否为普通文件
-L [文件]:判断该文件是否存在,并且是否为符号链接文件
-p [文件]:判断该文件是否存在,并且是否为管道文件
-s [文件]:判断该文件是否存在,并且是否为非空,非空为真
-S [文件]:判断该文件是否存在,并且是否为套接字文件

b、两种判断格式
test -e student.txt,使用echo $?查询,返回0标识执行成功
[ -e student.txt ],两端是空格不能省略,在shell脚本多使用这种格式
[ -f /shell/student.txt ] && echo “yes” || echo “no”,三元表达式直接输出

2、按照文件权限进行判断
a、选项
-r [文件]:判断该文件是否存在,并且该文件是否拥有读权限
-w [文件]:判断该文件是否存在,并且该文件是否拥有写权限
-x [文件]:判断该文件是否存在,并且该文件是否拥有执行权限
-u [文件]:判断该文件是否存在,并且该文件是否拥有SUID权限
-g [文件]:判断该文件是否存在,并且该文件是否拥有SGID权限
-k [文件]:判断该文件是否存在,并且该文件是否拥有SBit权限
[ -w student.txt ] && echo “yes” || echo “no”,判断文件是否有写权限,所有者所属组其他人任何一个有写权限都为真

3、两个文件之间进行比较
[ 文件1 -nt 文件2 ]:判断文件1的修改时间是否比文件2新
[ 文件1 -ot 文件2 ]:判断文件1的修改时间是否比文件2旧
[ 文件1 -ef 文件2 ]:判断文件1是否和文件2的Inode号一致,可以理解为两个文件是否为同一个文件,用于判断硬链接
[ student.txt -ef /tmp/stu.txt ] && echo “yes” || echo “no”

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
[ 23 -eq 23 ] && echo yes || echo no,输出yes

5、字符串的判断
[ -z 字符串 ]:判断字符串是否为空
[ -n 字符串 ]:判断字符串是否为非空
[ 字符串1 == 字符串2 ]:判断字符串1是否和字符串2相等
[ 字符串1 != 字符串2 ]:判断字符串1是否和字符串2不相等
name=cw,[ -z KaTeX parse error: Expected 'EOF', got '&' at position 8: name ] &̲& echo yes || e…aa" == “KaTeX parse error: Expected 'EOF', got '&' at position 7: bb" ] &̲& echo yes || e…aa” == abc ] && echo yes || echo no,输出yes

6、多重条件判断
[ 判断1 -a 判断2 ],逻辑与,判断1和判断2都成了,最终结果才为真
[ 判断1 -o 判断2 ],逻辑或,判断1和频段2有一个成立,最终的结果就为真
[ ! 判断1 ],逻辑非,使原来的判断式取反
aa=24,[ -n $aa -a $aa -gt 23 ] && echo yes || echo no,判断aa是否为空,并且aa大于23,输出yes

五、流程控制

1、if语句
a、单分支if条件语句
形式1: if [ 条件判断式 ]; then
程序
fi

形式2: if [ 条件判断式 ]
then
程序
fi
举例: #!/bin/bash
#判断分区使用率
rate=$(df -h | grep centos-root | awk ‘{print $5}’ | cut -d “%” -f 1)
if [ $rate -ge 10 ]
then
echo “Warning! /dev/mapper/centos-root is full!!!”
fi
b、双分支if条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的程序
fi
举例,判断httpd服务是否正常
service httpd start启动httpd,查询httpd进程,ps aux | grep httpd,虽然看到进程,但可能死机无法访问
netstat -tlun,查询网络相关信息,80端口,但可能死机或其他网页服务器

nmap,远程扫描命令,扫描当前计算机,正常连接httpd,则返回open
nmap -sT 192.168.0.105,扫描目标服务器上开启的tcp端口
nmap -sT 192.168.0.105 | grep tcp | grep http | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲' 自动检测httpd服务,并…(nmap -sT 192.168.0.105 | grep tcp | grep http | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲') if [ "port" == “open” ]
then
echo “KaTeX parse error: Expected 'EOF', got '&' at position 97: …e httpd start &̲>/dev/null …(date) httpd reboot!!” >> /tmp/httpd_err.log
fi

c、多分值if条件语句
if [ 条件判断式1 ]
then
当添加判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
…省略更多条件…
else
当所有条件都不成立时,最后执行此程序
fi

2、case语句
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
esac
举例:
#!/bin/bash

echo ‘you want to shanghai,please input “1”’
echo ‘you want to nanjing,please input “2”’
echo ‘you want to changzhou,please input “3”’

read -t 30 -p “please input your chooise:” cho

case “$cho” in
“1”)
echo “I coming shanghai!”
;;
“2”)
echo “I coming nanjing!”
;;
“3”)
echo “I coming changzhou!”
;;
*)
echo “error!!!”
esac

3、for循环
语法一: for 变量 in 值1 值2 值3
do
程序
done
举例1:
#!/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
举例2:
#!/bin/bash
cd /shell/ls *.sh > ls.log
y=1
for i in $(cat ls.log)
do
echo y y = y y= yy=(( $y + 1 ))
done

语法二:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
举例:
#!/bin/bash
s=0
for (( i=1;i<=100;i=i+1 ))
do
s=$(( s + s+ s+i ))
done
echo “1+2+…+100=$s”

4、while循环
while [ 条件判断式 ]
do
程序
done
举例:
#!/bin/bash
i=1
s=0
while [ " i " − l e 100 ] d o s = i" -le 100 ] do s= i"le100]dos=(( s + s+ s+i ))
i=$(( $i+1 ))
done
echo $s

5、until循环
和while相反,只要条件判断式不成立,则进行循环

第十章、linux服务管理

一、服务简介与分类

1、服务的分类
linux服务分为:RPM包默认安装的服务、源码包安装的服务
RPM包默认安装的服务:独立的服务、基于xinetd的服务

2、启动与自启动
a、服务启动,就是在当前系统中让服务运行,并提供功能
b、服务自启动,自启动是指让服务在系统开机或重启动之后,随和系统的启动而自动启动服务

3、查询已安装的服务
a、RPM包安装的服务,chkconfig --list,查看RPM包安装的服务,只能查看自启动状态的
b、源码包安装的服务,查看服务安装位置,一般是/usr/local
c、ps aux查询当前进程

chkconfig、service等命令只能管理RPM包安装的服务,不能管理源码包安装的服务,原因是安装位置不同

二、RPM包安装服务的管理

1、RPM包默认安装的服务:独立的服务
a、RPM包安装服务的位置
/etc/init.d/:启动脚本位置
/etc/sysconfig/:初始化环境配置文件位置
/etc/:配置文件位置
/etc/xinetd.conf:xinetd配置文件
/etc/xinetd.d/:基于xinetd服务的启动脚本
/var/lib/:存放服务产生的数据
/var/log/:日志

b、独立服务的启动
方法一、/etc/init.d/独立服务名 start|stop|status|restart
方法二、service 独立服务名 start|stop|status|restart(红帽专用命令)
service httpd stop|start

c、独立服务自启动
方法一:chkconfig [–level 运行级别] [独立服务名] [on\off]
方法二:修改配置文件/etc/rc.d/rc.local,把服务启动命令写入文件(每次开机在输入账号密码前读取该文件),推荐使用
方法三:使用ntsysv命令管理自启动,RPM包安装的服务都可以使用该命令修改自启动,红帽专属

特殊说明:centos7中和上述部分不同
第一、启动、终止、重启
systemctl start httpd.service #启动
systemctl stop httpd.service #停止
systemctl restart httpd.service #重启
第二、设置开机启动/关闭
systemctl enable httpd.service #开机启动
systemctl disable httpd.service #开机不启动
第三、检查httpd状态
systemctl status httpd.service

2、RPM包默认安装的服务:基于xinetd的服务
a、安装xinetd与telnet,yum -y install xinetd,yum -y install telnet-server,安装后chkconfig --list可查
vim /etc/xinetd.d/,修改目录里对应的配置文件,disable=no(centos7没有),重启xinetd,telnet也会随着启动

b、xinetd服务的自启动
自启动和启动功能相似 ,开了自启动服务会启动,关了自启动,服务关闭
方法一:chkconfig Telnet on
方法二:ntsysv命令

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

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

2、源码包服务的自启动
vi /etc/rc.d/rc.local,写入/usr/local/apache2/bin/apachectl start|stop

3、让源码包服务被服务管理命令识别
ln -s /usr/local/apache2/bin/apachectl /etc/init.d/apache(不推荐)

第十一章、linux系统管理

一、进程管理

进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己地址空间,并占有一定的系统资源
1、进程管理的作用
a、判断服务器健康状态
b、查看系统中所有的进程
c、杀死进程

2、查看系统中所有进程
方法一:ps aux,使用BSD操作系统格式
方法二:ps -le,使用linux标准命令格式
USER:该进程是由哪个用户生产的
PID:进程ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源
%MEM:该进程占用物理内存的百分比,占用越高,进程越耗费资源
VSZ:该进程占用虚拟内存大小,单位KB
RSS:该进程占用实际物理内存的大小,单位KB
TTY:该进程是在哪个终端中运行的;其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端;pts/0-255代表虚拟终端
STAT:进程状态,R代表运行,S代表睡眠,T代表停止状态,s代表包含子进程,+代表位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间
COMMAND:产生此进程的命令名

3、查看系统健康状态
top [选项]
-d秒数,指定top命令每隔几秒更新,默认3秒
在top命令的交互模式可以执行的命令:
?或h:显示交互模式的帮助
P:以CPU使用率排序,默认值
M:以内存的使用率排序
N:以PID排序
q:退出top

a、第一行信息为任务队列信息
12:24:46,系统当前时间
up 1 day, 13:32,系统的运行时间,本机已运行1天13小时32分钟
2 users,当前登陆了两个用户
load average: 0.00 ,0.00 ,0.00,系统在之前1分钟、5分钟、15分钟的平均负载,一般认为单核小于1时负载较小,大于1,系统以及超出负荷,8核则是8

b、第二行进程信息
Tasks:95 total,系统中的进程总数
1 runing,正在运行的进程数
94 sleeping,睡眠的进程
0 stopped,正在停止的进程
0 zombie,僵尸进程,观察看是不是进程吊死

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

d、第四行物理内存信息
Mem:625344k total,物理内存的总量,单位KB
571504k used,已经使用的物理内存数量
53840k free,空闲的物理内存数量
65800k buffers,作为缓冲的内存数量

e、第五行交换分区swap信息
Swap:524280k total,交换分区(虚拟内存)的总大小
0k uesd,已经使用的交换分区的大小
524280k free,空闲交换分区的大小
409280k cached,作为缓存的交互分区的大小

4、查看进程树
pstree [选项],-p显示进程的PID,-u显示进程的所属用户

5、终止进程
a、kill -l,查看可用的进程信号
常用信号
信号代号 信号名称 说明
1 SIGHUP 让进程立即关闭,然后重新读取配置文件之后重启
9 SIGKILL 立即结束程序的运行,本信号不能被阻塞、处理和忽略,一般用于强制终止进程
15 SIGTERM 正常结束进程的信号,默认信号,如果进程异常无法正常终止,才会尝试信号9

格式:kill -1 22354,重启进程,kill -9 22368,强制终止进程,后面跟进程号PID

b、按照进程名杀死进程
killall [选项] [信号] [进程名],-i选项询问是否要杀死某个进程,-I选项忽略进程名的大小写
killall -9 httpd

c、pkill [选项] [信号] [进程名],和killall类似按照进程名终止进程,-t选项按照终端号踢出用户
w查询本机已经登录的用户
pkill -9 -t tty1

二、工作管理

1、把进程放入后台
方法一:命令后加&,tar -zcf etc.tar.gz /etc & (后台运行)
方法二:命令执行过程中,按下ctrl +z快捷键 (后台暂停运行)

2、查看后台的工作
jobs [选项],-l显示工作的PID,多个后台程序时,+号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作;-号代表倒数第二个放入后台的工作

3、将后台暂停的工作恢复到前台执行
fg %工作号,%可以省略

4、把后台暂停的工作恢复到后台执行
bg %工作号,需要和用户在嵌套交互的程序不能恢复到后台执行,否则没有意思,比如top、vim

三、系统资源查看

1、vmstat,监控系统资源
vmsta [刷新延时 刷新次数],vmstat 1 3,截取top部分输出

2、dmesg开机时内核检测信息
dmesg | grep CPU,dmesg | grep ens33

3、free,查看内存使用状态
free [选项]
-b:以字节为单位
-k:以KB为单位,默认值
-m:以MB为单位
-g:以GB为单位
缓存cache,加速数据从硬盘中读取
缓冲buffer,加入数据写入硬盘

4、查看CPU信息
cat /proc/cpuinfo

5、uptime
显示系统的启动时间和平均负载,top和w命令的第一行

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

7、判断当前系统的位数
file /bin/ls,64-bit

8、查询当前linux系统的发行版本
lsb_release -a,centos7没有这条命令,可用cat /etc/redhat-release 查看

9、列出进程打开或使用的文件信息
lsof [选项]
-c [字符串],只列出以字符串开头的进程打开的文件
-u [用户名],只列出某个用户的进程打开的文件
-p [PID],列出某个PID进程打开的文件
lsof -p 5079

四、系统定时任务

1、crond服务管理与访问控制
systemctl list-unit-files | grep crond, ps aux | grep crond,查看系统是否启动crond服务

2、crontab设置
crontab [选项]
-e,编辑crontab定时任务
-l,查询crontab任务
-r,删除当前用户所用的crontab任务

crontab -e进入编辑界面
在这里插入图片描述

第十二章、日志管理

一、日志管理简介

1、确定服务启动
一般都是开机自启动
ps aux | grep rsyslogd
chkconfig --list | grep rsyslog

2、常见日志的作用
/var/log/cron,记录系统定时任务相关日志
/var/log/cups,记录打印信息的日志
/var/log/dmesg,记录系统开机时内核自检的信息,也可以使用dmesg命令查看
/var/log/btmp,记录错误登录日志,二进制文件不能直接vi,使用lastb命令查看
/var/log/lastlog,记录系统中所有用户最后一次登录时间的日志,二进制文件不能直接vi,使用lastlog命令查看
/var/log/mailog,记录邮件信息
/var/log/message,记录系统重要日志,记录了linux系统的绝大多数重要信息
/var/log/secure,记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录
/var/log/wtmp,永久记录所用用户的登录、注销信息,系统的启动、重启、关机事件,二进制文件不能vi,使用命令last查看
/var/log/utmp,只记录当前登录用户的信息,二进制文件不能vi,使用命令w、who、users查看

3、RPM安装的系统服务日志,默认把日志记录在/var/log/目录下,比如/var/log/httpd
4、源码包安装的服务日志在源码包指定目录
RPM包和源码包安装服务的日志不由rsyslogd来记录和管理,而是各个服务使用自己的日志管理文档来记录自身日志

二、rsyslogd日志服务

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

2、/etc/rsyslog.conf配置文件
authpriv.* /var/log/secure
[服务名称][连接符号][日志等级] 日志记录位置

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

b、连接符号
“*”,代表所有日志等级
“.”,代表只要比后面的等级高的(包含该等级)日志都记录
“.=”,代表只记录所需等级的日志
“.!”,代表不等于,也就是除了该等级的日志外,其他等级的日志都记录

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

d、日志记录位置
日志文件的绝对路径,比如/var/log/secure
系统设备文件,入/dev/lp0
转发给远程主机,比如@192.168.0.210:512
用户名,比如root
忽略或丢弃日志,比如~

三、日志轮替

1、日志文件的命名规则
a、如果配置文件中有dateext参数,那么日志会用日期来作为文件后缀,比如secure-20130605;需要保持指定的日志个数,删除多余的日志文件
b、如果配置文件中没有dateext参数,当日志轮替时,之前的secure改名为secure.1,新建的为secure,再一次轮替时,secure.1改名为secure.2,前一天的改名为secure.1,新建的为secure

2、logrotate配置文件,/etc/logrotate.conf
参数 参数说明
daily 日志轮替周期是每天
weekly
monthly
rotate [数字] 保留的日志文件个数,0值没有备份
compress 日志轮替时,旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组,比如create 0600 root utmp
mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok 如果日志不存在,则忽略该日志的警告信息
notifempty 如果日志为空,则不进行日志轮替
minsize [大小] 日志轮替的最小值,日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替
size [大小] 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
dateext 使用日期作为日志轮替文件的后缀,比如secure-20130605

如果大括号{}里的内容和大括号外上面的内容有重复,则以大括号内的配置为准

RPM包安装的服务会自动加入轮替,源码包则不

3、把源码包安装的apache日志加入轮替
默认日志保存路径:/usr/local/apache2/logs/
vim /etc/logrotate.conf ,加入如下字段即可
/usr/local/apache2/logs/access_log{
daily
create
rotate 30
}
日志轮替实际上是创建了系统定时任务,自动执行

4、logrotate [选项] [配置文件名]
-v,显示日志轮替过程
-f,强制进行日志轮替,不管轮替条件是否已经符合,强制配置文件中所有的日志进行轮替,logrotate -f /etc/logrotate.conf

第十三章、启动管理

一、启动管理
1、系统运行级别
0:关机
1:单用户模式,类似Windows安全模式,启动最小的服务,用户系统修复(linux有自己的安全模式,从光盘启动)
2:不完全的命令行模式,不含NFS服务
3:完全的命令行模式,就是标准字符界面
4:系统保留
5:图形模式
6:重启动

2、运行级别命令
runlevel,查看运行级别
init [运行级别],切换运行级别

3、系统默认运行级别
vim /etc/inittab 配置文件,id 3 initdefault,则系统开机后直接进入3级别(这种方式centos7已失效,文件只有注释)

二、系统启动过程

三、启动引导程序grub
1、grub配置文件
硬盘 分区 linux中设备文件名 grub中设备文件名
第一块SCSI硬盘 第一个主分区 /dev/sda1 hd(0,0)
第二个主分区 /dev/sda2 hd(0,1)
扩展分区 /dev/sda3 hd(0,2)
第一个逻辑分区 /dev/sda5 hd(0,4)

第二块SCSI硬盘 第一个主分区 /dev/sdb1 hd(1,0)
第二个主分区 /dev/sdb2 hd(1,1)
扩展分区 /dev/sdb3 hd(1,2)
第一个逻辑分区 /dev/sdb5 hd(1,4)
vim /boot/grub2/grub.cfg ,centos7和6不一样

第十四章、备份与恢复

一、备份概述
1、linux需要备份的数据
/root/
/home/
/var/spool/mail/
/etc/
/var/log/
其他目录

2、安装服务的数据
a、Apache需要备份的数据
配置文件
网页主目录
日志文件
b、mysql需要备份的数据
源码包安装的mysql,/usr/local/mysql/data/
RPM包安装的mysql,/var/lib/mysql/

3、备份策略
完全备份
增量备份,每次备份比上一次备份新增的数据,节省空间,恢复较慢
差异备份,每次备份与完全备份相比新增的数据,恢复比增量备份快

二、备份命令
1、dump [选项] [备份之后的文件名] [原文件或目录]
-level,0-9,十个备份级别,0是完全备份,1-9是增量备份
-f [文件名],指定备份后的文件名
-u,备份成功之后,把备份时间记录在/etc/dumpdates文件
-v,显示备份过程中更多的输出信息
-j,调用bzlib库压缩备份文件,把备份文件压缩为.bz2格式
W,显示允许被dump的分区的备份等级及备份时间

2、备份分区
xfsdump -0uj -f /root/home.bak.bz2 /home/ centos7报错
查看备份时间,/etc/dumpdates

3、备份文件或目录
只能完全备份,不支持增量备份,

4、恢复命令restore [模式选项] [选项]
a、模式选项,不能混用
-C,比较备份数据和实际数据的变化
-i,进入交互模式,手工选择要恢复的文件
-t,查看模式,查看备份文件中拥有哪些数据
-r,还原模式,用于数据还原

b、选项
-f,指定备份文件的文件名

补充内容

linux线程数量有关查询命令

ulimit -u 或 ulimit -a 系统限制某用户最多可运行的线程数
//cat /proc/sys/kernel/pid_max 系统支持的最大线程数(理论上的)
//cat /proc/sys/kernel/threads-max 内核所能使用的线程的最大数目
ps -ef | grep 进程cmd 查看进程信息,例pid(进程号)
pstree -p 进程号 | wc -l 查询当前某程序的线程或进程数
pstree -p | wc -l 当前整个系统已用的线程或进程数(wc为管道命令 word count 统计,-l 为统计行数)
top -p pid 动态查看某个进程的资源消耗情况

猜你喜欢

转载自blog.csdn.net/weixin_40355471/article/details/114528417