栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Liunx学习笔记

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Liunx学习笔记

前言:
  • 本学习笔记是基于尚硅谷Linux教程(千万级学习人次,linux最新升级版)——77集-21小时韩老师的视频学习。
  • 该学习视频知识点很齐全,可以当成Liunx的一个入门学习。

一:了解Linux 1.1 Linux 的应用领域

Linux在桌面应用领域相对薄弱,但在服务器领域的应用有着[免费、稳定、高效]等特点。对于嵌入式应用领域也在快速提高,Linux运行稳定、对网络的良好支持性、低成本,且可以根据需求进行软件裁剪,内核最小可以达到几百KB。


1.2Linux的介绍
  1. Linux创始人-Linus 林纳斯

  2. Linux的主要发行版本:

  3. Unix和Linux的关系:
    Unix是KenTompson和DennisRichres在贝尔实验室中开发,然后被IBM、Sun、Hp公司在Unix的基础上发行了AIX、Solaris、HpUX发行版本,但这个发行版本使用需要高昂的费用,RichardStallman提出在自由的时代用于应该免费享有对软件源代码的阅读、修改的权利,软件公司可以靠提供服务和训练获得盈利。所以提出了GNU计划:Linux是GNU计划的其中之一。


1.3Linux和Windows比较
比较WindowsLinux
免费与收费收费且很贵Liunx免费或少许费用
安全性三天两头打补丁安装系统安全更新,还是会中病毒木马要说Liunx没有安全问题,那当然是不可能的,这一点仁者见仁智者见智,相对来说肯定比Windows平台更加安全
使用习惯普通用户基本都是纯图形界面下操作使用,依靠鼠标和键盘完成一切操作,用户上升容易入门简单兼具图形界面操作和完全的命令行操作,可以只用键盘完成一切操作,新手入门比较困难,需要一些学习和指导,一旦熟练之后效率极高
可定制性封闭的,系统可定制性很差开源,可定制性非常强
应用场景桌面操作系统主要使用的是windows支撑百度,谷歌,淘宝等应用软件和服务的,是后台成千上万的Liunx服务器主机。世界上大部分软件和服务都是运行在Liunx之上的

二:安装Vmtools 2.1介绍vmtools
  1. 可以直接复制命令在windows和centOS系统之间

  2. 可以设置windows和centOS的共享文件夹

示意图:

2.2安装vmtools的步骤:
  1. 进入centOS

  2. 点击vm菜单的->install vmware tools

  3. centos会出现一个vm的安装包

  4. 点击右键解压,得到一个安装文件

  5. 进入该vm解压的目录,该文件在 /root/桌面/vmware-tools-distrib/下

  6. 安装./vmware-install.pl

  7. 全部使用默认设置即可

  8. 需要reboot重新启动即可使用


2.3:使用vmtools来设置windows和linux的共享文件夹
  1. 菜单->vm->setting,注意:设置选项为:always enable,这样就可以读写

  2. windows和centos可共享d:/share目录

  3. 在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

在公司开发的时候:

  1. Linux服务器是开发小组共享的

  2. 正式上线的项目是运行在公网的

  3. 因此程序员需要远程登录到centos进行项目管理或者开发


4.2:使用XShell进行远程登录

Xshell只是众多远程登录Linux的软件之一,那么为什么选择XShell:

  1. 流畅且完美解决中文乱码

  2. 强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议[*Secure Shell(安全外壳协议,简称SSH)*是一种网络协议]

  3. 可以在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基本介绍
  1. 登录时尽量少用root账号登录,因为他是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用"su - 用户名" 命令来借还成系统管理员身份

  2. 在提示符下输入logout即可注销用户


6.2.2使用细节
  1. logout注销指令在图形运行级别无效,在运行级别3下有效,关于运行级别的概念在下面

七:用户管理 7.1基本介绍-示意图


7.1.1说明:
  1. Linux系统是一个多用户多任务的操作系统,任何一个要是用系统资源的用户,都必须首先向管理员申请一个账号,然后以这个账号的身份进入系统。

  2. Linux的用户至少要属于一个组


7.2添加用户 7.2.1基本语法

useradd [选项] 用户名


7.2.2细节说明
  1. 当创建用户成功后,会自动的创建和用户同名的家目录

  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细节说明
  1. 权限高–>低不需要输入密码,反之则要

  2. 当需要返回到原来用户是,使用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可以是任意数字)

[重要] tail -f 文件 :实时追踪该文档的所有更新内容



这里我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包

14.2yum 14.2.1介绍

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

15.1.3 配置环境变量的配置文件 vim /etc/profile

15.1.4 需要注销用户,环境变量才能生效

如果是在3运行级别,直接输入命令:logout
如果是在5运行级别,操作如下:

15.1.5 查看变量是否配置成功:

在任何目录下,输入java指令:若输出以下信息,则成功

15.1.6 简单的编写一个Hello程序




15.2 安装Tomcat 15.2.1 解压缩到/opt 15.2.2 进入到解压缩的tomcat的bin目录
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/06c2a5cc44a746d785b06978c31b10a9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p2l54K55L2c55So5ZCn5bqE5b-X5reu,size_16,color_FFFFFF,t_70,g_se,x_16)

15.2.3 启动tomcat ./startup.sh


先在本地上访问,看是否能够看到以下界面

15.2.4 防火墙开放端口 vim /etc/sysconfig/iptables

开放端口的目的是让外网访问到tomcat。
防火墙默认是不开放8080这个端口的,所以需要手动开放。

重启防火墙才能够生效:service iptables restart

查看8080端口是否被防火墙放行:service iptables status

用windows连接一下这个8080端口是否可行:telnet liunxip 8080

如果显示“telnet不是内部指令”,请点击这里查看解决方案
如果是以下显示则表示成功

15.2.5 测试是否安装成功:

在windows下访问 http://liunxip:8080


15.3 安装Eclipse 15.3.1 解压缩到/opt 15.3.2 启动Eclipse
  • 方式1:创建快捷方式

  • 方式2:命令行先进入到Eclipse文件中,然后输入./eclipse
15.3.3 配置jre和server




15.3.4 编写jsp页面,并测试








15.4 安装Mysql 15.4.1 卸载旧版本

使用命令:rpm -qa | grep mysql 查看之前是否安装了Mysql

15.4.2 安装编译代码所需要的包

使用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 makecache
15.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_ci
15.4.6 编译安装

执行指令:
make && make install

15.4.7 配置mysql 设置权限

使用下面的命令查看是否有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组去管理的,所以我们需要进行权限的设置)

初始化
  1. 进入到安装路径:cd /usr/local/mysql
  2. 执行脚本:
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
15.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
如果没有 就不需要执行以上操作了

15.4.9 启动mysql

添加服务,拷贝服务脚本到init.d,并设置开机启动
[注意:是在/usr/local/mysql 下执行]

cp support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on  --设置开机自启
service mysql start   --启动mysql



15.4.10 修改root密码

15.4.11 配置环境

vim /etc/profile

保存退出,然后刷新一下配置文件:source /etc/profile
(或者注销或者logout都行)


十六 大数据定制篇-Shell编程 16.1 Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Liunx内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。


16.2 Shell编程快速入门 16.2.1 脚本格式需求
  1. 脚本以#!/bin/bash开头
    我们需要告诉系统我们在执行shell的时候使用的是bash shell来进行解析的

16.2.2 脚本的常用执行方式
  1. (推荐)方式一:输入脚本的绝对路径或相对路径
    - 首先要赋予脚本的+x权限
    - 执行脚本
  2. 方式二:sh+脚本
    - 说明:不用赋予脚本+x权限,直接执行即可

16.2.3 编写第一个Shell脚本
  • 需求说明:创建一个Shell脚本,输出hello world

  1. 使用第一种方式执行Shell脚本:
  2. 使用第二种方式执行

16.3 Shell的变量 16.3.1 Shell的变量的介绍
  1. Liunx Shell中的变量分为:系统变量和用户自定义变量
  2. 系统变量:$HOME, $PWD, $SHELL, $USER等等
  3. 显示当前shell中所有变量:set

16.3.2 Shell变量的定义 基本语法:
  1. 定义变量:变量=值
  2. 撤销变量:unset 变量
  3. 声明静态变量:readonly 变量,注意:不能unset,静态变量的意义是:不让变量重复定义和声明

定义变量的规则:
  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写

重点:将命令的返回值赋给变量:
  1. A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
  2. A=$(ls -la) 等价于反引号


16.3.3 快速入门案例

案例1:定义变量 A


案例2:撤销变量 A


案例3:声明静态的变量 B=2,不能unset


16.4 设置环境变量

基本语法:

  1. export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
  2. source 配置文件 (功能描述:让修改后的配置信息立即生效)
  3. 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 的值

  1. 使用 $((运算式))
  2. 使用$[]
  3. 使用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 常用判断条件
  1. 两个整数的比较
    = 字符串比较
    -lt 小 于
    -le 小于等于
    -eq 等 于
    -gt 大 于
    -ge 大于等于
    -ne 不等于
  2. 按照文件权限进行判断
    -r 有读的权限 [ -r 文件 ]
    -w 有写的权限
    -x 有执行的权限
  3. 按照文件类型进行判断
    -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 编程综合案例

需求分析:

  1. 每天凌晨 2:10 备份 数据库 atguiguDB 到 /data/backup/db
  2. 备份开始和备份结束能够给出相应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:
    2018-03-12_230201.tar.gz
  4. 在备份的同时,检查是否有 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 -e
10 2 * * * /usr/sbin/mysql_db_backup.sh
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292036.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号