- 本学习笔记是基于尚硅谷Linux教程(千万级学习人次,linux最新升级版)——77集-21小时韩老师的视频学习。
- 该学习视频知识点很齐全,可以当成Liunx的一个入门学习。
一:了解Linux 1.1 Linux 的应用领域
Linux在桌面应用领域相对薄弱,但在服务器领域的应用有着[免费、稳定、高效]等特点。对于嵌入式应用领域也在快速提高,Linux运行稳定、对网络的良好支持性、低成本,且可以根据需求进行软件裁剪,内核最小可以达到几百KB。
1.2Linux的介绍
-
Linux创始人-Linus 林纳斯
-
Linux的主要发行版本:
-
Unix和Linux的关系:
Unix是KenTompson和DennisRichres在贝尔实验室中开发,然后被IBM、Sun、Hp公司在Unix的基础上发行了AIX、Solaris、HpUX发行版本,但这个发行版本使用需要高昂的费用,RichardStallman提出在自由的时代用于应该免费享有对软件源代码的阅读、修改的权利,软件公司可以靠提供服务和训练获得盈利。所以提出了GNU计划:Linux是GNU计划的其中之一。
1.3Linux和Windows比较
| 比较 | Windows | Linux |
|---|---|---|
| 免费与收费 | 收费且很贵 | Liunx免费或少许费用 |
| 安全性 | 三天两头打补丁安装系统安全更新,还是会中病毒木马 | 要说Liunx没有安全问题,那当然是不可能的,这一点仁者见仁智者见智,相对来说肯定比Windows平台更加安全 |
| 使用习惯 | 普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上升容易入门简单 | 兼具图形界面操作和完全的命令行操作,可以只用键盘完成一切操作,新手入门比较困难,需要一些学习和指导,一旦熟练之后效率极高 |
| 可定制性 | 封闭的,系统可定制性很差 | 开源,可定制性非常强 |
| 应用场景 | 桌面操作系统主要使用的是windows | 支撑百度,谷歌,淘宝等应用软件和服务的,是后台成千上万的Liunx服务器主机。世界上大部分软件和服务都是运行在Liunx之上的 |
二:安装Vmtools 2.1介绍vmtools
-
可以直接复制命令在windows和centOS系统之间
-
可以设置windows和centOS的共享文件夹
示意图:
-
进入centOS
-
点击vm菜单的->install vmware tools
-
centos会出现一个vm的安装包
-
点击右键解压,得到一个安装文件
-
进入该vm解压的目录,该文件在 /root/桌面/vmware-tools-distrib/下
-
安装./vmware-install.pl
-
全部使用默认设置即可
-
需要reboot重新启动即可使用
2.3:使用vmtools来设置windows和linux的共享文件夹
-
菜单->vm->setting,注意:设置选项为:always enable,这样就可以读写
-
windows和centos可共享d:/share目录
-
在centos的/mnt/hgfs/ 下
三:入门Linux 3.1:Linux的基本介绍:
linux的文件系统是采用级层式的树目录结构,在此结构中的最上层是根目录"/",然后在此目录下创建其他的目录。
切记:在Linux世界里,一切皆文件
3.2[重要]目录结构的具体介绍
/bin (/usr/bin、/user/local/bin)
- 是Binary的缩写,这个目录存放着最常用命令
/home
- 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录是以用户的账号命名
/root
- 该目录为系统管理员,也称作超级权限者的用户主目录
/boot
- 存放的是启动Linux时使用的一些核心文件,包括一些文件以及镜像文件
/media
- Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux会把识别的设备挂载到这个目录下
/mnt
- 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。d:/myshare
/usr/local
- 这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
/var
- 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
3.3Linux目录总结
1:Linux的目录中有且只有一个根目录 /
2:Linux的各个目录存放的内容是规划好的,不用乱放文件
3:Linux是以文件的形式管理我们的设备,因此Linux系统,一切皆为文件
四:远程登录Linux系统 4.1:为什么需要远程登录Linux
在公司开发的时候:
-
Linux服务器是开发小组共享的
-
正式上线的项目是运行在公网的
-
因此程序员需要远程登录到centos进行项目管理或者开发
4.2:使用XShell进行远程登录
Xshell只是众多远程登录Linux的软件之一,那么为什么选择XShell:
-
流畅且完美解决中文乱码
-
强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议[*Secure Shell(安全外壳协议,简称SSH)*是一种网络协议]
-
可以在Windows界面下用来访问远端的不用系统下的服务器,从而比较好的达到远程控制终端的目的
特别说明: 如果希望安装好XShell就可以远程访问Linux系统的话,需要有一个前提,就是Linux启动了SSHD服务,该服务会监听22号端口
4.3:XFtp远程上传下载文件 【XShell和XFtp(Crack)】都在百度网盘上,提取码 ldzy
五:VI和VIM编译器 5.1vi和vim的基本介绍
所有的Linux系统都会内建vi文本编译器
Vim具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序代码。代码补全、编译及错误跳转等方便编程的功能特别丰富。
5.2vi和vim的三种常见模式 5.2.1正常模式
在正常模式下,我们可以使用快捷键
在vim打开一个文档就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用【上下左右】按键来移动光标,你可以使用【删除字符】或【删除整行】来处理档案内容,也可以使用【复制、粘贴】来处理文件数据
5.2.2插入模式/编译模式在正常模式下,输入i、I、o、O、a、A、r、R任意一个键都可以进入到这个模式下
5.2.3命令行模式
在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作
5.3三种模式的切换示意图
5.4快捷键的使用 1:拷贝
拷贝当前行 yy,拷贝当前行下向下的5行 5yy,并粘贴§
2:删除
删除当前行 dd,删除当前行向下的5行 5dd
3:在文件中查找某个单词
(命令行下) [/关键字]回车 查找,输入n就是查找下一个
4:行号的设置和取消
(命令行下)[:set nu 和**:set nonu**]
5:到文件末尾,和首行
(正常模式下)末尾:[G] 首行:[gg]
6:撤销-回到上一步
(正常模式下)u
7:将光标移动到第20行
7.1:显示行号 :set nu
7.2:输入20这个数字
7.3输入shift+g
5.5vim和vi的快捷键盘-览图
六:开机、重启和用户登录注销 6.1关机&重启命令 6.1.1基本介绍 shutdown:
- shutdown -h now:表示立即关机
- shutdown -h 1:表示1分钟后关机
- shutdown -r now:立即重启
halt:
直接使用,效果等价于关机
reboot:
就是重启系统
sync(同步):
把内存的数据同步到磁盘
6.1.2注意细节
当我们关机或者重启时,都应该先执行一下syn指令,把内存的数据写入磁盘,防止数据丢失
6.2用户登录和注销 6.2.1基本介绍
-
登录时尽量少用root账号登录,因为他是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用"su - 用户名" 命令来借还成系统管理员身份
-
在提示符下输入logout即可注销用户
6.2.2使用细节
- logout注销指令在图形运行级别无效,在运行级别3下有效,关于运行级别的概念在下面
七:用户管理 7.1基本介绍-示意图
7.1.1说明:
-
Linux系统是一个多用户多任务的操作系统,任何一个要是用系统资源的用户,都必须首先向管理员申请一个账号,然后以这个账号的身份进入系统。
-
Linux的用户至少要属于一个组
7.2添加用户 7.2.1基本语法
useradd [选项] 用户名
7.2.2细节说明
-
当创建用户成功后,会自动的创建和用户同名的家目录
-
也可以通过 useradd -d 指定目录 新的用户名,给新创建的用户指定家目录
7.3给用户指定或者修改密码 7.3.1基本语法
passwd 用户名
7.4删除用户 7.4.1基本语法
userdel 用户名
不保留家目录的语法
userdel -r 用户名
在删除用户时,一般不会将家目录删除【在工作中,员工离职,但还是要必要的保留他所留下的工作内容】
7.5查询用户信息 7.5.1基本语法
id 用户名
uid是用户id号,gid是所在组id号
7.6切换用户 7.6.1介绍
在操作Linux中,如果当前用户的权限不够,可以通过su- 用户名指令,切换到高权限用户,比如root
7.6.2基本语法
su - 切换用户名
7.6.3细节说明
-
权限高–>低不需要输入密码,反之则要
-
当需要返回到原来用户是,使用exit指令
7.7用户组 7.7.1介绍
类似于角色,系统可以对有共性的多个用户进行统一的管理
7.7.2增加组语法
groupadd 组名
7.7.3删除组语法
groupdel 组名
7.8增加用户时直接加上组 7.8.1基本语法
useradd -g 用户组 用户名
7.9修改用户的组 7.9.1基本语法
usermod -g 用户组 用户名
7.10 /etc/passwd 文件
用户(user)的配置文件,记录用户的各种信息
每行含义:
用户名:口令:用户标识号:组标识号:解释性描述:主目录:登录Shell
7.11 /etc/group文件
组(group)的配置文件,记录Linux包含的组的信息
每行含义:
组名:口令:组标识号:组内用户列表
7.12 /etc/shadow文件
口令的配置文件
每行的含义:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:标志
八:实用指令 8.1指定运行级别
运行级别说明:
0:关机
1:单用户[找回丢失密码]
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5,要修改默认的运行级别可改文件**/etc/inittab** 的 id:5:initdefault 这一行的中的数字
示意图:
8.2切换到指定运行级别的指令 8.2.1基本语法
init [012356] 比如:
我要重启可以输入命令:init 6
8.3忘记root密码的解决方案
开机–>在引导时输入 ENTER(回车键)–>看到一个界面输入e–>看到一个新的界面,选择第二个(编辑内核)在输入e–>在这行最后输入 1,再输入ENTER–>再次输入b,这时候就会进入到单用户模式
这时,我们就进入到单用户模式,使用passwd指令来修改root密码
8.4帮助指令 8.4.1介绍
当我们对某个指令不熟悉时,我们可以使用Linux提供的帮助指令来了解这个指令的使用方法
8.4.2man 获得帮助信息
基本语法 :
man [命令或配置文件] (功能描述:获得帮助信息)
8.4.3help 指令获得帮助信息
基本语法:
help [命令] (功能秒速:获得shell内置命令的帮助信息)
8.5文件目录类 8.5.1pwd指令显示当前所在目录绝对路径
基本语法:pwd
8.5.2ls指令查看当前目录的所有内容信息
基本语法:ls [选项] [目录或是文件]
常用选项:
-a:显示当前目录所有的文件和目录,包括隐藏的
-l:以列表的方式显示信息
-h:文件大小转换
选项只要合理都可以并用
8.5.3cd指令切换到指定位置
基本语法:cd [参数](功能描述:切换到指定目录)
常用参数
绝对路径和相对路径
如何理解绝对路劲和相对路径
绝对路径:无论身处何处,都是从根目录开始定位
相对路径:从当前工作目录开始定位
cd~或cd :回到自己的家目录
cd …:回到当前目录的上一级
8.5.4mkdir指令创建目录
基本语法:mkdir [选项] 要创建的目录
常用选项:-p:创建多级目录
8.5.5rmdir指令删除目录
基本语法 rmdir 要删除的空目录
如果 删除的目录下有内容,rmdir是无法直接删除的,需要使用 rmdir -rf 要删的目录
8.5.6touch指令创建空文件夹
基本语法 touch 文件名称
可以一次创建多个文件夹 touch hello1.txt hello2.txt
8.5.7cp指令[重要]拷贝文件到指定目录
基本语法:cp [选项] source dest
常用选项:-r:递归复制整个文件夹
递归举例:
使用细节:强制覆盖不提示的方法:cp
技术小技巧:
可以通过 上下箭头的键,调出原来使用过的指令
8.5.8rm指令删除文件或目录
基本语法:
rm [选项] 要删除的文件或目录
常用选项:
-r:递归删除整个文件夹
-f:强制删除不提示
8.5.9mv剪切或重命名
基本语法:
mv oldNameFile newNameFile (功能表述:重命名)
mv /temp/movefile /targetFolder (功能描述:移动文件)
8.5.10cat查看文件内容指令
cat指令是以只读的方式打开
基本语法:
cat [选项] 要查看的文件
常用选项:
-n :显示行号
我们一般会配合管道指令 和 more指令一起使用,这样就可以实现翻页,而不是直接退出
空格翻页,ENTER下一行,详情的快捷键在8.5.11
8.5.11more分页指令
more指令是基于VI编译器的文本过滤器,他以全屏的的方式按页显示文本文件的内容。more指令中内置了若干快捷键。
基本语法:
more 要查看的文件
快捷键:
| 操作 | 功能说明 |
|---|---|
| 空格键(space) | 代表向下翻一页 |
| Enter | 代表向下移动一行 |
| q | 代表立刻离开more,不再显示该文件内容 |
| Ctrl+F | 向下滚动一屏 |
| Ctrl+B | 返回上一屏 |
| = | 输出当前行的行号 |
| :f | 输出文件名和当前行的行号 |
8.5.12less分屏查看文件内容指令
他的功能与more指令类似,但是比more指令更强大,支持各种显示终端。less指令在显示内容文件时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率
基本语法:
less 要查看的文件
快捷键:
| 操作 | 功能说明 |
|---|---|
| 空格键(space) | 向下翻动一页 |
| [pagedown] | 向下翻动一页 |
| [pageup] | 向上翻动一页 |
| /字串 | 向下搜索[字串]的功能:n:向下查找;N:向上查找 |
| ?字串 | 向上搜索[字串]的功能:n:向上查找;N:向下查找 |
| q | 离开less这个程序 |
8.5.13 >(覆盖写入)指令和>>(追加)指令
> 输出重定向:会将原来的文件的内容覆盖
>> 追加:不会覆盖原来文件的内容,而是追加到文件的尾部
基本语法:
ls -l >文件 (功能描述:列表的内容写入文件中(覆盖写))
ls -al>>文件 (功能描述:列表的内容追加到文件的末尾)
cat 文件1>文件2 (功能描述:将文件1的内容覆盖到文件2)
echo “内容” >> 文件 (功能描述:将"内容"追加到文件中)
8.5.14echo输出内容到控制台指令
基本语法:
echo [选项] [输出内容]
8.5.15head显示文件前几行指令
用于显示文件的开头部分内容,默认情况下head指令显示10行内容
基本语法:
head 文件(功能描述:查看文件头10行内容)
head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意数字)
8.5.16tail显示文件末尾几行指令
用于输出文件中尾部的内容,默认情况下tail指令显示文件的后10行内容
基本语法:
tail 文件 (功能描述:查看文件后10行内容)
tail -n 5 文件 (功能描述:查看文件后5行内容,5可以是任意数字)
这里我cat bbb.txt>aaa.txt 用的重定向写入,所以显示截断
退出实时显示:CTRL+4
8.5.17ln软链接指令
软链接也叫符号链接,类似于windows里的快捷方式,主要存放了连接其他文件的路径
基本语法:
ln -s [原文件或目录] [软链接名] (功能描述:给源文件创建一个软链接)
在/home目录下创建一个软链接 linkToRoot,连接到/root目录
删除软链接 用到上面的rm 指令
由于root目录下有许多文件我们采用递归且不提示删除
rm -rf linkToRoot
注意:
当我们使用软链接打开,我们还是在原目录下,而不是在打开的那个目录
8.5.18history查看执行过的指令
基本语法:
history (功能描述:查看已经执行过历史命令)
在后面可以加数字:显示最近使用的数字个指令
使用过往指令:!指令编号
8.6时间日期类 8.6.1date指令-显示当前日期
基本语法:
1:date (功能描述:显示当前时间)
2:date+%Y (功能描述:显示当前年份)
3:date+%m (功能描述:显示当前月份)
4:date+%d (功能描述:显示当前是哪一天)
5:date “+%Y-%m-%d %H:%M:%S” (功能描述:显示年月日时分秒)
注意加号+不可省略
8.6.2date 指令-设置日期
基本语法:
date -s 字符串时间
8.6.3cal查看日历指令(calendar)
基本语法:
cal [选项] (功能描述:不加选项,显示本月日历)
8.7搜索查找类 8.7.1find指令
find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端。
基本语法:
find [搜索范围] [选项]
选项说明:
-name<查询方式> (功能:按照指定的文件名查找模式查找文件)
-user<用户名> (功能:查找属于指定用户名所有的文件)
-size<文件大小> (功能:按照指定的文件大小查找文件)
若查的文件很多,不想继续往下则CTRL+C
查找整个linux系统下等于20m的文件(+n大于 -n小于 n等于)
如果想用kb来找的话就-size …K 切记要大写M也是
存储容量中:1MB=1024KB
8.7.2locate指令
locate指令可以快速定位文件路径,locate指令利用事先建立的系统中所有文件名称以及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。 为了保证查询结果的准确度,管理员必须定期跟新locate时刻。
基本语法:
locate 搜索文件
特别说明:
由于locate指令是基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
8.7.3grep指令和管道符号|
grep过滤查找
管道符号“|”,表示将前一个命令的处理结果输出给后面的命令,然后后面的命令在对结果进行下一步的操作
基本语法:
grep [选项] 查找内容 源文件
常用选项:
-n 显示匹配行及行号
-i 忽略字母大小写
8.8压缩和解压类 8.8.1gzip/gunzip指令
gzip用于压缩文件,gunzip用于解压文件
基本语法:
gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip 文件.gz (功能描述:解压缩文件命令)
将aaa.txt文件和bbb.txt进行压缩和解压
细节:
当 使用gzip对文件进行压缩后,不会保留原来的文件
gzip指令的一些补充,点击传输
8.8.2zip/unzip指令(多用于项目打包发布)
zip用于压缩文件,unzip用于解压的,这个在项目打包发布中很有用
基本语法:
zip [选项] XXX.zip 将要压缩的内容 (功能描述:压缩文件和目录的命令)
unzip [选项] XXX.zip (功能描述:解压缩文件)
zip常用选项:
-r:递归压缩,即压缩目录
unzip常用选项:
-d<目录>:指定解压后文件的存放目录
案例1:将/home下所有的文件进行压缩成mypackage.zip
案例2:将mypackage.zip解压到/opt/tmp 目录下
8.8.3tar指令[重要]
tar指令是打包指令,最后打包后的文件是.tar.gz的文件
基本语法:
tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
选项说明:
-c:产生.tar打包文件
-v:显示详细信息
-f:指定压缩后的文件名
-z:打包同时压缩
-x:解包.tar文件
打包一般使用参数:-zcvf
解压一般使用参数:-zxvf
案例1:压缩多个文件,将/home/aaa.txt 和 /home/bbb.txt 压缩成 ab.tar.gz
案例2:将/home的文件夹压缩成 myhome.tar.gz
案例3:将ab.tar.gz解压到当前目录
案例4:将myhome.tar.gz解压到/opt/目录下
注意:指定解压的目录要存在才能成功否则报错
关于tar指令的补充,点击传输
九:组管理和权限管理 9.1Linux组基本介绍
在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件有所有者、所在组、其他组的概念
9.2文件/目录 所有者
所有者一般为文件的创建者,谁创建了该文件,就自然的成为了改文件的所有者(但也是可以修改的,详情:9.2.2)
9.2.1查看文件的所有者
1:指令:ls -ahl
2:案例:创建一个组police,在创建一个用户tom,将tom放在police组,然后使用tom来创建一个文件ok.txt,查看情况
9.2.2[简]修改文件所有者
1:指令:chown 用户名 文件名
2:案例:使用root创建一个文件apple.txt,然后将其所有者修改成tom
9.3组的创建
基本指令:groupadd 组名
9.4文件/目录 所在组
当某个用户创建了一个文件后,默认这个文件的所在组就是该用户所在的组
9.4.1查看文件/目录所在组
基本指令:ls -ahl
9.4.2修改文件所在组
基本指令:chgrp 组名 文件名
案例:使用root用户创建文件 orange.txt,看看这个文件属于哪个组,然后将这个文件所在组,修改到police组
9.5其他组
除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组
9.6改变用户所在组
在添加用户时,可以指定将该用户添加到哪个组中,同样的用root的管理权限可以改变某个用户所在的组
9.6.1改变用户所在组
1:usermod -g 组名 用户名
2:usermod -d 目录名 用户名 改变该用户登陆的初始目录
案例:创建一个土匪组(bandit)将tom这个用户从原来所在的police组修改到bandit组
9.7权限的基本介绍
详细:
1:权限,一共10位(0~9),10位的说明
第0位确定文件类型,文件类型有5种:
- 1: - 普通文件
- 2: d 目录
- 3: l 软链接
- 4: c 字符设备如:键盘、鼠标
- 5: b 块文件,硬盘
第1-3位确定所有者(该文件的所有者)拥有该文件的权限。—User
第4-6位确定所属组(同用户组的)拥有该文件的权限。—Group
第7-9位确定其他用户拥有该文件的权限。—Other
2:如果是文件,表示硬链接的数,如果是目录则表示该目录的子目录个数
3:文件大小,如果是目录就固定为4096
4:文件最后的修改时间
9.8rwx权限详解 rwx数字表示
:r=4,w=2,x=1 因此rwx=7
9.8.1rwx作用到文件
1)[r]代表可读(read):可以读取,查看
2)[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写的权限,才能删除改文件
3)[x]代表可执行(execute):可以被执行
9.8.2rwx作用到目录
1)[r]代表可读(read):可以读取,ls查看目录内容
2)[w]代表可写(write):可以修改,目录内创建+删除+重命名目录
3)[x]代表可执行(execute):可以进入该目录
9.9修改权限-chmod指令 9.9.1基本说明:
通过chmod 指令,可以修改文件或者目录的权限
9.9.2第一种方式:+、-、=变更权限
u:所有者
g:所有组
o:其他人
a:所有人(u、g、o的总和)
1)chmod u=rwx,g=rx,o=x 文件目录名
2)chmod o+w 文件目录名
3)chmod a-x 文件目录名
案例1:给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限。
案例2:给abc文件的所有用户添加读的权限
9.9.3第二种方式:通过数字变更权限
规则:r=4 w=2 x=1
rwx=7
chmod u=rwx,g=rx,o=x 文件目录名
相当于 chmod 751 文件目录名
9.10[繁]修改文件所有者-chown 9.10.1基本介绍
chown newowner file 该本文件的所有者
chown newowner:newgroup file 改变用户的所有者和所有组
-R 如果是目录 则使其下所有子文件或目录递归生效
9.10.2案例演示
1)将/home/abc.txt文件的所有者修改成tom
2)请将/home/kkk目录下所有的文件和目录的所有者都修改成tom
首先只能使用root进行操作
9.11[繁]修改文件所在组-chgrp 9.11.1基本介绍
chgrp newgroup file 改变文件的所有组
9.11.2案例演示
1)将/home/abc.txt 文件的所在组修改成bandit(土匪)
chgrp bandit /home/txt
2)将 /home/kkk 目录下所有的文件和目录的所在组都修改成bandit(土匪)
十:crond任务调度 10.1原理示意图
10.2概述
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
1:系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
2:个别用户工作:个别用户可以希望执行某些程序,比如对mysql数据库的备份
10.3基本语法
crontab [选项]
10.3.1常用选项
-e:编辑crontab定时任务
-l:查询crontab任务
-r:删除当前用户所有者的crontab任务
10.4快速入门 10.4.1任务的要求
设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab -e 命令
接着输入任务到调度文件
如:/1***ls -l /etc/>>/tmp/to.txt
意思是说:每小时的每分钟执行ls -l /etc/ >>/tmp/to.txt 命令
10.4.2步骤如下
1)cron -e
2)* /1****ls -l /etc >> /tmp/to.txt
3)保存退出
4)在每一分钟都会自动的调用 ls -l /etc >> /tmp/to.txt
10.4.3参数细节说明 5个占位符的说明
第一个“*”:一小时当中的第几个分钟,范围:[0-59]
第二个“*”:一天当中的第几小时,范围:[0-23]
第三个“*”:一个月当中的第几天,范围:[1-31]
第四个“*”:一年当中的第几个月,范围:[1-12]
第五个“*”:一周当中的星期几,范围:[0-7(0和7都代表星期日)]
特殊符号的说明*:代表任何时间。比如第一个星就代表一小时中每分钟都执行一次的意思。
,:代表不连续的时间。比如“0 8,12,16 ***命令”,就代表在每天的8点0分、12点0分、16点0分都执行一次命令。
-:代表连续的时间范围。比如”0 5 ** 1-6“,代表在周一到周六的凌晨5点0分执行命令
*/n:代表每隔多久执行一次。比如“ */10 命令“,代表每隔10分钟就执行一遍命令
特定时间执行任务案例45 22 *** :在22点45分执行命令
0 17 ** 1 :每周1的17点0分执行命令
0 5 1,15 ** :每月1号和15号的凌晨5点0分执行命令
*/10 4 *** :每天的凌晨4点,每隔10分钟执行一次命令
0 0 1,15 * 1 :每月的1号和15号,每周1的0点0分都会执行命令。注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。
十一:Linux磁盘分区、挂载 11.1分区基础知识 11.1.1分区的方式:
1)mbr分区:
- 1:最多只支持四个主分区
- 2:系统只能安装在主分区
- 3:扩展分区要占一个主分区
- 4:MBR最大只支持2TB,但拥有最好的兼容性
2)gtp分区:
- 1:支持无限多个主分区(但操作系统可能限制,比如windows下最多128个分区)
- 2:最大支持18EB的大容量(1EB=1024PB,1PB=1024TB)
- 3:windows7 64位以后支持gtp
11.1.2windows下的磁盘分区
11.2Linux分区 11.2.1原理介绍
1)Linux来说无论有几个分区,分给哪一个目录,他归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
2)Linux采用了一种叫“载入”的处理方法,他的整个文件系统包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使他的存储空间在一个目录下获得。
3)示意图:
11.2.2硬盘说明
1)Linux硬盘分IDE(Integrated Driver Electronics 电子集成驱动器)硬盘和SCSI(Small Computer System Interface)硬盘,目前基本上是SCSI硬盘
2)对于IDE硬盘,驱动器标识符为“hdx”,其中“hd”表明分区所在设备的类型,这里是指IDE硬盘了。“x”为盘号(a为基本盘,b是基本盘从属盘,c为辅助主盘,d为辅助从属盘),“”代表分区,前四个分区用数字1到4表示,他们是主分区和扩展分区,从5开始就是逻辑分区。
例子:
hda3:表示为第一个IDE硬盘上的第3个主分区或扩展分区;
hdb2:表示为第二个IDE硬盘上的第2个主分区或扩展分区
3)对于SCSI硬盘则标识为“sdx~”,SCSI硬盘使用“sd”来表分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
sda4:表示为第一个SCSI硬盘上的第4个主分区或扩展分区;
sdc3:表示为第三和SCSI硬盘上的第3个主分区或扩展分区
11.2.3使用lsblk(两三百来块)指令查看当前系统的分区情况
11.3挂载点案例
需求是给Linux系统增加一个新的硬盘,并且挂载到/home/newdisk
11.3.1如何增加一块硬盘
1)虚拟机添加硬盘
2)分区 fdisk/dev/sdb
3)格式化 mkfs -t ext4 /dev/sdb1
4)挂载 先创建一个 /home/newdisk ,挂载 mount /dev/sdb1 /home/newdisk
5)设置可以自动挂载(永久挂载,当重启系统,仍然可以挂载到 /home/newdisk)
11.4具体的操作步骤整理 11.4.1虚拟机增加硬盘步骤1在【虚拟机】菜单中,选择【设置】,然后设备列表添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改。修改完成后,需要重启系统(才能识别)
11.4.2虚拟机增加硬盘步骤2 11.4.2.1分区命令:fdisk /dev/sdb 11.4.2.2开始对/sdb分区
m:显示命令列表
p:显示磁盘分区 同 fdisk -l
n:新增分区
d:删除分区
w:写入并退出
说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。
/dev是设备的目录
command action 下的e 是扩展分区,p是主分区
partition number 是选择硬盘上第几个分区
11.4.3虚拟机增加硬盘步骤3
格式化磁盘
分区命令:mkfs -t ext4 /dev/sdb1
其中ext4是分区类型
11.4.4虚拟机增加硬盘步骤4 11.4.4.1挂载:讲一个分区与一个目录联系起来
mount 设备名称 挂载目录
例如:mount /dev/sdb1 /newdisk
卸载:umount 设备名称 或 挂载目录
例如:umount /dev/sdb1 或者 umount /newdisk
11.4.5虚拟机增加硬盘步骤5 11.4.5.1永久挂载:通过修改/etc/fstab实现挂载
添加完成后 执行mount -a 即刻生效
十二:网络配置 12.1Linux网络配置原理图(含虚拟机) 12.2查看网络IP和网关 12.2.1查看虚拟网络编辑器
12.2.2修改ip地址(修改虚拟网络的ip)
12.2.3查看网关
12.2.4查看windows环境中的VMnet8网络配置(ipconfig 指令)
1)使用ipconfig查看
2)界面查看
12.3ping测试主机之间网络连通 12.3.1基本语法
ping 目的主机 (描述功能:测试当前服务器是否可以连接目的主机)
12.3.2 应用实例
测试当前服务器是否可以连接到百度
ping www.baidu.com
12.4Linux网络环境配置 12.4.1第一种方法(自动获取)
优点:Linux启动会自动获取IP,缺点:每次自动获取的ip地址可能不一样。这个不适用于做服务器,因为我们的服务器的ip需要固定的
12.4.2第二种方式(指定固定的ip)
说明:
直接修改配置文件来指定IP,并可以连接到外网(程序员推荐),编辑
vim /etc/sysconfig/network-scripts/ifcfg-eth0
要求:将ip地址配置为静态的,ip地址为192.168.122.130
ONBOOT:启动boot配置
BOOTPROTO=static :以静态方式获取ip
修改后,一定要重启服务
两者选1
1)service network restart (重启网络服务指令)
2)reboot 重启系统
ifcfg-eth0文件说明:
十三:进程管理 13.1进程的基本介绍
1)在Linux中每个执行的程序(代码)都称为一个进程。每一个进程都分配一个ID号。
2)每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。例如www服务器。
3)每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作的,但由于屏幕上无法看到的进程,通常使用后台方式执行。
4)一般系统的服务器都是以后台的方式存在,而且都会常驻在系统中。知道关机才结束。
13.2显示系统执行的进程 13.2.1 ps 指令
ps指令是用来查看进程,一般来说使用的参数是 ps -aux
ps 显示的信息选项
13.2.2参数介绍
-a :显示当前终端的所有进程信息
-u:以用户的格式显示进程信息
-x:显示后台进程运行的参数
13.2.3 ps指令详解
1)指令:ps -aux | grep xxx ,比如查看sshd服务
2)指令说明
System V 展示风格
USER:用户名称
PID:进程号
%CPU:进程占用CPU的百分比
%MEM:进程占用物理内存的百分比
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
TT:终端名称,缩写
STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等。
STARTED:进程的启动时间
TIME:CPU时间,即进程使用CPU的总时间
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
13.2.4应用实例
要求:以全格式显示当前所有的进程,查看进程的父进程
ps -ef 是以全格式显示当前所有的进程
-e 显示所有进程
-f 全格式
ps -ef | grep xxx
是BSD风格
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大,表名进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数
如果我们希望查看sshd进程的父进程号是多少,应该怎样查询?
ps -ef | grep sshd
13.3终止进程kill 和killall 13.3.1介绍
若是某个进程执行一半需要停止时,或是已经消耗了很大的系统资源时,此时可以考虑停止该进程。使用kill指令来完成此项任务。
13.3.2基本语法
kill [选项] 进程号(功能描述:通过进程号杀死进程)
killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢的时候有用)
13.3.3常用选项
-9:表示强迫进程立即停止
13.3.4最佳实践
案例1:踢掉某个非法登录用户
13.4查看进程树 13.4.1基本语法
pstree [选项] ,可以更加直观的来看进程信息
13.4.2常用选项
-p:显示进程的PID
-u:显示进程的所属用户
13.5服务(service)管理 13.5.1介绍
服务本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql,sshd,防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点
13.5.2原理图
13.5.3service管理指令
service 服务名 [start|stop|restart|reload|status]
在CentOS7.0后,不在使用service,而是 systemctl
13.5.4使用案例
查看当前防火墙的状况,关闭防火墙和重启防火墙
service iptables status
service iptables stop
service iptables status
service iptables start
13.5.5细节讨论
1)关闭或者启动防火墙后,立即生效
2)这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置
如果希望设置某个服务自启动或永久关闭,要使用chkconfig指令
13.5.5.1如何查看立即生效
在windows 使用 dos 指令
telnet [某个端口号即可]
13.5.6查看服务名
方式1: 使用 setup -> 系统服务,就可以看到
ctrl+i 跳出选项框
方式2:/etc/init.d/服务器名称
13.5.7服务的运行级别
Linux中存在7中运行级别:常用的是3和5
0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
1:单用户工作状态,root权限,用于系统维护,禁止远程登录
2:多用户状态(没有NFS),不支持网络
3:完全的多用户状态(有NFS),登录后进入控制台命令行模式
4:系统未使用,保留
5:X11控制台,登录后进入图形GUI模式
6:系统正常关闭重启,默认运行级别不能设置为6,否则不能正常启动
13.5.8开机的流程图
13.5.9chkconfig指令 13.5.9.1介绍
通过chkconfig命令可以给每个服务的各个运行级别设置自启动/关闭
13.5.9.2基本语法
1)chkconfig --list |grep xxx
2)chkconfig 服务名 --list
3)chkconfig --level 运行级别 服务名 on/off
将sshd 服务器在运行级别为5的情况下,不要自启动
chkconfig --level 5 sshd off
13.5.9.3应用实例
案例1:请显示当前系统所有服务的各个运行级别的运行状态
chkconfig --list
案例2:请查看sshd服务的运行状态
service sshd status
centOS7.0以后 systemctl sshd status
案例3:当运行级别为5时,关闭防火墙
chkconfig --level 5 iptables off
案例4:在所有运行级别下,关闭防火墙
chkconfig iptables off
案例5:在所有运行级别下,开启防火墙
chkconfig iptables on
13.5.9.4使用细节
chkconfig重新设置服务后自启动或关闭,需要重启机器reboot 才能生效
13.6动态监控进程 13.6.1介绍
top与ps指令相似,他们都是用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
13.6.2基本语法
top [选项]
13.6.3选项说明
-d 秒数 :指定top命令每隔几秒更新,默认是3秒在top命令的交互模式当中可以执行的命令
-i:使top不显示任何闲置或者僵死进程
-p:通过指定监控进程ID来仅仅监控某个进程的状态
13.6.4交互操作说明
P:以CPU使用率排序,默认就是此项
M:以内存的使用率排序
N:以PID排序
q:退出top
13.6.5应用案例
案例1:监视特定用户
top:输入此命令,按回车键,查看执行的进程
u:然后输入“u”回车,在输入用户名,即可
案例2:终止指定的进程
top:输入此命令,按回车键,查看执行的进程
k:然后输入“k”回车,在输入要结束的进程ID
案例3:指定系统状态更新的时间(每个10秒自动更新,默认是3秒)
top -d 10
13.6.6查看系统网络情况netstat(重要) 13.6.6.1基本语法
netstat [选项]
netstat -anp
13.6.6.2选项说明
-an 按一定顺序排列输出
-p 显示那个进程在调用
13.6.6.3应用案例
查看系统所有的网络服务
netstat -anp | more
查看服务名为sshd 的服务的信息
十四RPM和YUM 14.1rpm包的管理 14.1.1介绍
一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式虽然打上了RedHat的标志,但理念是通用的
Linux 的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准
14.1.2rpm包的简单查询指令
查询已经安装的rpm列表 rpm -qa| grep xx
查看当前Linux是否安装firefox
rpm -qa | grep firefox
14.1.3rpm包名基本格式
一个rpm 包名: firefox-45.0.1-1.el6.centos.x86_64.rpm
名称:firefox
版本号:45.0.1-1
适用操作系统:el6.centos.x86_64(表示centos6.x的64位系统)
如果是i686、i386表示32位系统,noarch表示通用
14.1.4rpm包的其他查询指令
rpm -qa :查询所安装的所有rpm软件包
rpm -qa | more (分页显示)
rpm -qa | grep xxx
rpm -q 软件包名 :查询软件包是否安装
rpm -q firefox
rpm -qi 软件包名 :查询软件包信息
rpm -qi fire fox
rpm -ql 软件包名 : 查询软件包中的文件
rpm -ql firefox
rpm -qf 文件全路径名 : 查询文件所属的软件包
rpm -qf /etc/passwd
rpm -qf /root/install.log
查询某个文件属于哪个rpm包
14.1.5卸载rpm包 14.1.5.1基本语法
rpm -e RPM包的名称
14.1.5.2应用案例
删除firefox 软件包
rpm -e firefox
14.1.5.3细节文件
1)如果其他软件依赖于您要卸载的软件包,卸载时则会产生错误信息。
如:$rpm -e foo
removing these package would break dependencies : foo is needed by bar-1.0-1
2)如果我们就是要删除foo这个rpm包,可以增加参数 --nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行
如:$rpm --nodeps foo
带上 --nodeps 就是强制删除
14.1.6安装rpm包 14.1.6.1基本语法
rpm -ivh RPM 包全路径名称
14.1.6.2参数说明
i=install 安装
v=verbose 提示
h=hash 进度条
14.1.6.3应用实例
1)安装firefox 浏览器
步骤1:先找到firefox的安装rpm包,需要挂载上我们安装的centos的iso文件,然后到/media/下去找rpm
cd /media --> cd centos…/ --> cd Packages/
步骤2:复制 firefor…rpm包到 /opt/
cp firefox-45.0.1-1el6.centos.x86_64.rpm /opt/
步骤3:切换到/opt/目录下 cd~ --> cd /opt
步骤4:安装firefox
rpm -ivh firefox安装rpm包
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。使用yum的前提是可以联网。
14.2.2基本指令
yum list | grep xx 软件列表(查询yum服务器是否有需要安装的软件)
yum install xxx (下载安装)
14.2.3应用实例:
使用yum安装firefox
1)先查看一下firefox rpm 在yum服务器有没有
yum list| grep firefox
2)安装
yum install firefox
十五JavaEE定制篇 搭建JavaEE环境 需要的软件,提取码ldzy
示意图:
15.1安装JDK 15.1.1 先将软件通过xftp上传到/opt下[安装的软件一般放在/opt下] 15.1.2 解压到/opt
解压命令:tar -zxvf 需要解压的包名 例如:tar -xzvf jdk-7u79-linux-x64.gz
如果是在3运行级别,直接输入命令:logout
如果是在5运行级别,操作如下:
在任何目录下,输入java指令:若输出以下信息,则成功
15.2 安装Tomcat 15.2.1 解压缩到/opt 15.2.2 进入到解压缩的tomcat的bin目录
15.2.3 启动tomcat ./startup.sh
先在本地上访问,看是否能够看到以下界面
开放端口的目的是让外网访问到tomcat。
防火墙默认是不开放8080这个端口的,所以需要手动开放。
重启防火墙才能够生效:service iptables restart
查看8080端口是否被防火墙放行:service iptables status
用windows连接一下这个8080端口是否可行:telnet liunxip 8080
如果显示“telnet不是内部指令”,请点击这里查看解决方案
如果是以下显示则表示成功
在windows下访问 http://liunxip:8080
15.3 安装Eclipse 15.3.1 解压缩到/opt 15.3.2 启动Eclipse
- 方式1:创建快捷方式
- 方式2:命令行先进入到Eclipse文件中,然后输入./eclipse
15.4 安装Mysql 15.4.1 卸载旧版本
使用命令:rpm -qa | grep mysql 查看之前是否安装了Mysql
使用yum来安装,命令是:
yum -y install make gcc-c++ cmake bison-devel ncurses-devel
在执行命令的时候我的发生了点错误:
问题:yum使用不了
解决方法:
以下指令挨条执行 sed -i "s|enabled=1|enabled=0|g" /etc/yum/pluginconf.d/fastestmirror.conf mv /etc/yum.repos.d/CentOS-base.repo /etc/yum.repos.d/CentOS-base.repo.backup curl -o /etc/yum.repos.d/CentOS-base.repo https://www.xmpan.com/Centos-6-Vault-Aliyun.repo yum clean all yum makecache15.4.3 解压缩到/opt 15.4.4 进入到mysql目录 15.4.5 预编译源码包
源码包是需要先编译然后才进行安装的
整个复制过去,然后回车执行
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNObase_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci15.4.6 编译安装
执行指令:
make && make install
使用下面的命令查看是否有mysql用户及用户组
查看用户列表:cat /etc/passwd
查看用户组列表:cat /etc/group
如果没有就创建
创建组:groupadd mysql
创建用户并指定组:useradd -g mysql mysql
修改/usr/local/mysql权限:chown -R mysql:mysql /usr/local/mysql(这条指令的意义:因为创建出来的用户和组默认的所有者和所在组都是root,但是实际上mysql都是交给专门的mysql成员和mysql组去管理的,所以我们需要进行权限的设置)
- 进入到安装路径:cd /usr/local/mysql
- 执行脚本:
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql15.4.8 启动mysql前的小插曲
注:在启动Mysql服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,这是新版Mysql的配置文件的默认位置!
注意:在CentOS6.8版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的Mysql的正确配置,造成无法启动。
你可以先进行 查看/etc下是否有my.cnf这个配置文件
如果有则一定要进行改名: mv /etc/my.cnf /etc/my.cnf.bak
如果没有 就不需要执行以上操作了
添加服务,拷贝服务脚本到init.d,并设置开机启动
[注意:是在/usr/local/mysql 下执行]
cp support-files/mysql.server /etc/init.d/mysql chkconfig mysql on --设置开机自启 service mysql start --启动mysql
vim /etc/profile
保存退出,然后刷新一下配置文件:source /etc/profile
(或者注销或者logout都行)
十六 大数据定制篇-Shell编程 16.1 Shell是什么
Shell是一个命令行解释器,它为用户提供了一个向Liunx内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
16.2 Shell编程快速入门 16.2.1 脚本格式需求
- 脚本以#!/bin/bash开头
我们需要告诉系统我们在执行shell的时候使用的是bash shell来进行解析的
16.2.2 脚本的常用执行方式
- (推荐)方式一:输入脚本的绝对路径或相对路径
- 首先要赋予脚本的+x权限
- 执行脚本 - 方式二:sh+脚本
- 说明:不用赋予脚本+x权限,直接执行即可
16.2.3 编写第一个Shell脚本
- 需求说明:创建一个Shell脚本,输出hello world
- 使用第一种方式执行Shell脚本:
- 使用第二种方式执行
16.3 Shell的变量 16.3.1 Shell的变量的介绍
- Liunx Shell中的变量分为:系统变量和用户自定义变量
- 系统变量:$HOME, $PWD, $SHELL, $USER等等
- 显示当前shell中所有变量:set
16.3.2 Shell变量的定义 基本语法:
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量,注意:不能unset,静态变量的意义是:不让变量重复定义和声明
定义变量的规则:
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写
重点:将命令的返回值赋给变量:
- A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
- A=$(ls -la) 等价于反引号
16.3.3 快速入门案例
案例1:定义变量 A
案例2:撤销变量 A
案例3:声明静态的变量 B=2,不能unset
16.4 设置环境变量
基本语法:
- export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
- source 配置文件 (功能描述:让修改后的配置信息立即生效)
- echo $变量名 (功能描述:查询环境变量的值)
16.4.1 快速入门案例
案例1:在/etc/profile文件中定义TOMCAT_HOME环境变量
注意:在输出TOMCAT_HOME环境变量时,需要让其生效
案例2:查看环境变量TOMCAT_HOME的值
案例3:在另外一个shell程序中使用TOMCAT_HOME
16.5 位置参数变量 16.5.1 介绍
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
比如:./myshell.sh 100 200。这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息。
16.5.2 基本语法
- $n (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如: ${10})
- $* (功能描述:这个变量代表命令行中所有的参数, $*把所有的参数看成一个整体)
- $@ (功能描述:这个变量也代表命令行中所有的参数,不过 $@把每个参数区分对待)
- $# (功能描述:这个变量代表命令行中所有参数的个数)
16.5.3 位置参数变量应用实例
案例:编写一个shell脚本 positionPara.sh,在脚本中获取到命令行的各个参数信息
#!/bin/bash echo "$0 $1 $2" echo "$*" echo "$@" echo "参数个数=$#"
16.6 预定义变量 16.6.1 基本介绍
就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
16.6.2 基本语法
- $$ (功能描述:当前进程的进程号(PID))
- $! (功能描述:后台运行的最后一个进程的进程号(PID))
- $? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪个数,由命令自己来觉得),则证明上一个命令执行不正确了。)
16.6.3 应用实例
在一个shell脚本中简单使用一下预定义变量
#!/bin/bash echo "当前的进程号=$$" # 后台的方式运行 myshell.sh sh myShell.sh & echo "最后的进程号=$!" echo "执行的值$?"
16.7 运算符 16.7.1 基本介绍
学习如何在 shell 中进行各种运算操作。
16.7.2 基本语法
- “ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”
- expr m + n
注意 expr 运算符间要有空格 - expr m - n
- expr *, /, % 乘,除,取余
16.7.3 应用实例
案例 1:计算(2+3)X4 的值
- 使用 $((运算式))
- 使用$[]
- 使用expr
案例 2:请求出命令行的两个参数[整数]的和
#!/bin/bash :<
16.7 条件判断 16.7.1 基本语法[ condition ](注意 condition 前后要有空格)
#非空返回 true,可使用$?验证(0 为 true,>1 为 false
16.7.2 应用实例[abc] 返回true
[] 返回false
[condition]&&echo OK || echo notok 条件满足,执行后面的语句
16.7.3 常用判断条件
- 两个整数的比较
= 字符串比较
-lt 小 于
-le 小于等于
-eq 等 于
-gt 大 于
-ge 大于等于
-ne 不等于- 按照文件权限进行判断
-r 有读的权限 [ -r 文件 ]
-w 有写的权限
-x 有执行的权限- 按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
16.7.4 应用实例案例 1:“ok"是否等于"ok”
判断语句:
案例 2:23 是否大于等于 22
判断语句:
案例3:判断/root/shell/aaa.txt目录中的文件是否存在
判断语句:
#!/bin/bash :<
16.8 流程控制 16.8.1 if语句基本语法:
-
第一种方式:
if [ 条件判断式 ];then
程序
fi -
推荐:第二种方式:
if [ 条件判断式 ]
then
程序
elif [条件判断式]
then
程序
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2) 推荐使用第二种方式
16.8.1.1 if的应用实例
案例:请编写一个 shell 程序,如果输入的参数,大于等于 60,则输出 “及格了”,如果小于 60,则输出 “不及格”
#!/bin/bash :<
16.8.2 case语句基本语法:
- case $变量名 in
“值 1”)
如果变量的值等于值 1,则执行程序 1
;;
“值 2”)
如果变量的值等于值 2,则执行程序 2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
16.8.2.1 case的应用实例
案例 1 :当命令行参数是 1 时,输出 “周一”, 是 2 时,就输出"周二", 其它情况输出 “other”
#!/bin/bash :<
16.8.3 for循环语句基本语法:
-
for 变量 in 值1 值2 值3…
do
程序
done -
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
16.8.3.1 for循环的应用案例
案例 1 :打印命令行输入的参数 【会使用到$* $@】
#!/bin/bash :<
案例 2:从 1 加到 100 的值输出显示
16.8.4 while循环语句基本语法:
- while [ 条件判断式 ]
do
程序
done
16.8.4.1 while循环的应用实例
案例 1 :从命令行输入一个数 n,统计从 1+…+ n 的值是多少?
#!/bin/bash :<
16.9 read 读取控制台输入 16.9.1 基本语法read(选项)(参数)
选项:
- -p:指定读取值时的提示符;
- -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了
参数:
- 变量:指定读取值的变量名
16.9.2 应用案例
案例 1:读取控制台输入一个 num 值
案例 2:读取控制台输入一个 num 值,在 10 秒内输入。
#!/bin/bash :<
16.10 函数 16.10.1 函数介绍shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。
16.10.2 系统函数
- basename 基本语法
功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。 - dirname 基本语法
功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
16.10.3 系统函数的应用案例
案例 1:请返回 /home/aaa/test.txt 的 “test.txt” 部分
basename /home/aaa/test.txt 这个是将文件的后缀名也输出出来 basename /home/aaa/test.txt .txt 这个是输出出来是没有后缀名的
案例 2:请返回 /home/aaa/test.txt 的 /home/aaa
dirname /home/aaa/test.txt
16.10.4 自定义函数
- 基本语法
[ function ] funname[()]
{
Action; [return int;]
}
调用直接写函数名:funname [值]
16.10.5 自定义函数的应用实例
案例 1:计算输入两个参数的和(read), getSum
#!/bin/bash :<
16.11 Shell 编程综合案例需求分析:
- 每天凌晨 2:10 备份 数据库 atguiguDB 到 /data/backup/db
- 备份开始和备份结束能够给出相应的提示信息
- 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:
2018-03-12_230201.tar.gz- 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除
思路分析:
#!/bin/bash # 完成数据库的定时备份 # 备份的路径 BACKUP=/data/backup/db #当前的时间作为文件名 DATETIME=$(date +%Y_%m_%d_%H%M%S) echo "$DATETIME" echo "==========开始备份=========" echo "==========备份的路径是 $BACKUP/$DATETIME.tar.gz" #主机 HOST=localhost #用户名 DB_USER=root #密码 DB_PWD=root #备份数据库名 DATAbase=atguiguDB #创建备份的路径 #如果备份的路径文件夹存在,就使用,否则就创建 [ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME" # 执行mysql的备份数据库的指令 mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATAbase | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz #打包备份文件 cd $BACKUP tar -zcvf $DATETIME.tar.gz $DATETIME # 删除临时目录 rm -rf $BACKUP/$DATETIME # 删除10天前的备份文件 find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} ; echo "==========备份文件成功========"crondtab -e10 2 * * * /usr/sbin/mysql_db_backup.sh



