第1章 Linux基础
在大数据从理论到实际的落地过程中,Linux早已经超出了操作系统的范畴,它在今天甚至被称为大数据运行的平台。对于学过Linux课程的院校,强烈建议把本章复习一下,因为在后续学习过程中大数据的软件、框架全都基于Linux平台,本章的知识点要求为:
➢掌握Linux文件管理常用的命令
➢掌握Linux的权限管理常用的命令
➢掌握Linux的软件包管理常用的命令
➢掌握Linux的网络管理常用的命令
➢掌握Linux的进程管理常用的命令
➢掌握Linux的进程管理常用的命令
➢熟悉Linux的shell脚本编程
➢熟悉Linux环境下JDK、Tomcat、MySQL软件的安装
一、Linux概述
Linux是一套免费使用和自由传播的,类似Unix的操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
现在很多企业都将大数据、云计算平台部署在Linux操作系统上,所以学习和使用Linux现在变得意义非常的重大。
目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等。
下面主要介绍下CentOS系列的Linux和Ubuntu系列的Linux,这两款Linux在学习和项目实战中也是用的比较多的:
1、CentOS操作系统
CentOS 是一个基于Red Hat Linux 提供的可自由使用源代码的企业级Linux发行版本。每个版本的 CentOS都会通过安全更新方式获得十年的支持。新版本的 CentOS 大约每两年发行一次,而每个版本的 CentOS 会定期更新一次,以便支持新的硬件,这样可以建立一个安全、低维护、稳定、高预测性、高重复性的 Linux 环境。CentOS是Community Enterprise Operating System的缩写。
CentOS 是RHEL(Red Hat Enterprise Linux)源代码再编译的产物,相对于其他 Linux 发行版,其稳定性值得信赖。
CentOS 加入红帽后不变的是:
(1) CentOS 继续免费
(2)保持赞助内容驱动的网络中心不变
(3)Bug、Issue 和紧急事件处理策略不变
(4) Red Hat Enterprise Linux 和 CentOS 防火墙也依然存在
变化的是:
(1)我们是为红帽工作,不是为 RHEL
(2)红帽提供构建系统和初始内容分发资源的赞助
(3) 一些开发的资源包括源码的获取将更加容易
(4)避免了原来和红帽上一些法律的问题
现在最新版本为 CentOS 7.6,上个版本是7.5。上游RHEL 7主要将内核更新至3.10.0;支持Linux容器(Docker),Open VMware Tools及3D图像能即装即用,Open JDK7作为缺省JDK,ext4及XFS的LVM快照,转用systemd、firewalld及GRUB2,XFS作为缺省文件系统,内核空间内的iSCSI及FCoE,支持PTPv2,支持40G网卡等 。
2、Ubuntu操作系统
Ubuntu(又称乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu 是基于Debian GNU/Linux,支持x86、amd64(即x64)、ARM和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。
Ubuntu基于Debian发行版和GNOME桌面环境,而从11.04版起,Ubuntu发行版放弃了Gnome桌面环境,改为Unity,与Debian的不同在于它每6个月会发布一个新版本。Ubuntu的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。Ubuntu对GNU/Linux的普及特别是桌面普及作出了巨大贡献,由此使更多人共享开源的成果与精彩。
ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86、64位和ppc架构。
二、Linux文件系统
操作系统是管理计算机硬件和软件资源的系统软件,是硬件与用户之间沟通的桥梁。为了使计算机系统能协调、高效和可靠地进行工作,同时也为了给用户一种方便友好地使用计算机的环境,和Windows操作系统一样典型的操作系统应该具有:文件管理的功能、网络管理的功能、 进程管理、内存管理的功能等等。
为了使用这些管理功能,操作系统通常提供给我们两种人机交互方式:
(1)图形界面
例如Windows操作系统,优点是人性化程度高,缺点也非常明显:需要开发重量级别、大量级别的人际交互的软件系统,耗费大量的系统资源,特别可靠性、稳定性、安全性堪忧,对于专业技术人员非常的不适合,对于普通用户非常的适合。
(2)命令行终端
我们Linux大多数采取这种方式,和Windows刚好相反。缺点是人性化程度低,但是优点点也非常明显:需要开发轻量级别、少量级别的人际交互的软件系统,对系统资源消耗极小,特别可靠性、稳定性、安全性非常高,甚至常年不宕机,对于专业技术人员非常的适合,对于普通用户不适合。
综上所述,我们主要讲解基于命令行终端的Linux操作系统管理的常用命令,至于想深入了解Linux操作系统其它命令请大家查阅更多资料,这里所列举的在实际学习和项目实战中基本够用。
(一)Linux的文件管理
文件管理系统是操作系统及其它大数据系统(例如:hadoop分布式文件系统HDFS)的重要功能,Linux文件系统的目录结构如下:
文件系统中的根目录符号为:'/',位于Linux文件系统目录结构的顶层,一般根目录下只存放目录不存放文件。下面对根目录下的子目录逐一介绍:
(1)'/bin'和'/usr/bin目录
该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等。
(2)'/boot'目录
该目录中存放系统的内核文件和引导装载程序文件。
(3)'/dev'目录
设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等,常用的是挂载光驱mount /dev/cdrom/mnt。
(4)'/etc'目录
系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系统有关)、/etc/sysconfig(与网络有关)、/etc/xinetd.d修改配置文件之前记得备份。该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。
(5)'/home'目录
系统默认的用户宿主目录,新增用户账号时,用户的宿主目录都存放在此目录下,'~'表示当前用户的宿主目录,'~lily'表示用户lily的宿主目录。
(6)'/root'目录
系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
(7)'/sbin、/usr/sbin、/usr/local/sbin'目录
放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能查看而不能设置和使用。
(8)'/tmp'目录
一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。一些命令和应用程序会用的到这个目录,该目录下的所有文件会被定时删除,以避免临时文件占满整个磁盘。
(9)'/usr'目录
应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,/usr/local 存放软件升级包,/usr/share/doc 系统说明文件存放目录。
(9)'/var'目录
放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log。/var/log/message: 所有的登录文件存放目录。/var/spool/mail: 邮件存放的目录。 /var/run: 程序或服务启动后。建议单独分区,设置较大的磁盘空间。
(10)'/lib、/usr/lib、/usr/local/lib'目录
系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,该目录下存放了各种编程语言库。典型的linux系统包含了C、C++和FORTRAN语言的库文件。/lib目录下的库映像文件可以用来启动系统并执行一些命令,目录/lib/modules包含了可加载的内核模块,/lib目录存放了所有重要的库文件,其他的库文件则大部分存放在/usr/lib目录下。
其它的目录简介:
(1)'/lost+fount'目录
在EXT2或EXT3文件系统中,当系统意外崩溃或机器意外关机,产生的一些文件碎片放在这里。在系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方法来修复,或者移动文件到运来的位置上。
(2)'/mnt,/media'目录
mnt目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如floppy,cdrom。这样当挂载了一个设备如光驱时,就可以通过访问目录/mnt/cdrom下的文件来访问相应的光驱上的文件了。
(3)'/opt'目录
给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下。
三、Linux操作系统管理的常用命令
Linux的常用命令有文件管理、权限管理、软件包管理、网络管理、进程管理、进程管理等命令。这里只是列举项目实战使用频度最高的,其它的命令及其参数请大家查阅帮助或者有关参考书。
(一)文件管理命令
1、文件管理
(1)ls命令
ls命令的功能是显示指定目录下的文件目录清单。该命令常用格式及其参数说明如下:
ls -a 参数-a的功能:显示隐含文件
ls -l 以长格式列表输出指定目录中的文件清单
ls -R 递归显示
例如:
[root@localhost dev]# ls -l
crw-rw----. 1 root video 10, 175 Oct 10 22:18 agpgart
drwxr-xr-x. 2 root root 620 Oct 10 22:18 block
lrwxrwxrwx. 1 root root 3 Oct 10 22:18 cdrw -> sr0
lrwxrwxrwx. 1 root root 13 Oct 10 22:18 fd -> /proc/self/fd
srw-rw-rw-. 1 root root 0 Oct 10 22:18 log
brw-rw----. 1 root disk 7, 0 Oct 10 22:18 loop0
下面对显示的文件进行说明:
文件基本信息:
文件类型 文件权限 文件个数 属主 属组 大小 日期 时间 文件名
d rwxrwxr-x 2 lily group1 2048 Aug 17 09:10 file
Linux文件有三种权限,即r读权限、w写权限和x执行权限
属主 属组 其他用户
rwx rwx r-x
文件的类型:
d :表示目录文件,在Linux中目录也是文件,不仅如此,实际上在Linux中任何设备也可以被当作文件处理。
l :表示符号连接文件
b :表示块设备文件。例如硬盘的设备文件/dev/hda,其中字母a表示 第一块,h表示IDE类型的硬盘,SCSI类型的硬盘用s表示; 分区也有相对应的设备文件,如/dev/sdb3,表示第2块SCSI硬盘上的第3个分区。
c :表示字符设备文件,如/dev/tty1。
p :表示管道文件。
s :表示套接字文件
(2)cd命令
Cd命令的功能为改变文件的目录,例如:
(3)pwd命令
pwd的功能为显示当前目录,例如:
(4)mkdir命令
mkdir的功能为在当前目录下创建目录,其中参数p为递归创建目录。
示例-1:创建d1文件夹
示例-2:递归创建文件夹
在'mkdir -p a/b/c'命令 参数-p功能是如果要创建的目录的父目录不存在,则先创建其父目录,再创建该目录,操作演示如下:
(5)cp命令
语法:
cp 源文件 目标文件
-f:强制执行
-i:若目标文件已经存在,在覆盖时先询问操作是否进行
-r:递归复制,用于目录的复制行为
示例-1 :将/usr/local/dir1下所有java为扩展名的文件复制到/usr/local/dir2
cp /usr/local/dir1/*.java /usr/local/dir2
示例-2:将/usr/local/dir1下所有内容复制到/usr/local/dir2
cp /usr/local/dir1/* /usr/local/dir2
(6)mv命令
功能:如果mydir1存在且是个目录,则将文件myfile移动到目录mydir1中
示例1:将文件移动到目录中
mv myfile mydir1
功能:将文件(或目录)myfile改名为myfile2
示例2:文件改名
mv myfile myfile2
(7)rm命令
-r:是递归的意思,即可以删除非空目录
-f:是强制的意思
示例1:
rm demo.java
示例2:
rm -rf /usr/local/dir1/*
(8)cat命令
功能:显示文件内容
示例-1:显示指定文件myfile的内容
cat myfile
(9)more命令
功能: 分屏显示指定文件httpd.conf的内容
示例-1:
more /etc/httpd/conf/httpd.conf
(10)head命令
功能:默认显示指定文件的头10行的内容。使用参数-n设置显示指定行数
示例-1:
head /etc/httpd/conf/httpd.conf
示例-2:
本例会显示文件的头12行的内容
head -n 12 /etc/httpd/conf/httpd.conf
(二)Linux的vim编辑器
基本上vi可以分为三种状态,分别是命令模式、插入模式和底行模式。
1、命令模式
用户刚刚启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。以下是常用的几个命令:
(1)i 切换到输入模式,以输入字符。
(2)x 删除当前光标所在处的字符。
(3): 切换到底线命令模式,以在最底一行输入命令
2、插入模式
在命令模式下按下i就进入了输入模式
3、底行模式
在命令模式下按下:(英文冒号)就进入了底线命令模式,除冒号外还有:
(1)q 退出程序
(2)w 保存文件
如下图所示:
示例-1
编辑个hello文件,操作如下所示:
步骤1:输入vim hello命令,这时候默认为命令模式
步骤2:按'i'键,转换为插入模式
步骤3:输入内容
步骤4:编辑完成后,按'Esc'键进入命令模式
步骤5:按':wq'保存并退出
步骤6:查看hello的内容
4、vim的删除功能
(1)dd
删除光标所在行
5、复制和粘贴
yy 复制光标所在行
p 粘贴输出
删除、复制和粘贴总结如下表所示:
5、光标、快捷键等操作
6、保存文件的操作
7、查找功能
8、撤销功能
(三)Linux的权限管理
Linux权限管理常用的命令为chmod权限操作命令,其常用方式如下
(1)chmod字母方式
u--针对属主
g--针对属组
o--针对其他用户
a--针对所有用户
= 表示赋予(设置)指定权限,要注意它会覆盖原权限
+ 表示在原有权限的基础上增加指定权限
- 表示在原有权限的基础上去掉指定权限
r、w、x三种权限,既可以单独使用也可以组合使用
示例1: chmod u+x host.conf
功能:为文件host.conf的属主增加执行权限
示例2: chmod g-w,o=x host.conf
功能:将文件host.conf的属组去掉写权限,同时将其他用户设置为只有执行权限,而文件属主的权限不变
(2)chmod:数字方式
r-----4 读权限
w-----2 写权限
x-----1 执行权限
无-----0 无权限
例如:
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
示例-1:
示例-2:
chmod 777 myFile
上述命令等同于chmod a=rwx myFile。
(四)Linux的软件包管理
在实际的软件项目及其大数据项目开发中,tar命令是我们经常使用的命令。tar命令是经典的备份/还原命令,几乎所有最新的软件包都是通过tar包发布的。
(1)打包(备份)
参数-c的功能是打包(创建),
参数-v是显示处理过程,
参数-f是用来指定文档名;
示例:
$ tar -cvf myetc.tar /etc
本例的功能是:将目录/etc打包为一个名为myetc.tar的文档
(2)解压缩还原
功能:将参数-c换成-x即可实现还原释放的功能。
$ tar -zxvf myetc.tar.gz
本例没有指明还原的位置,则将会还原在当前目录下;如果想指明还原位置可用参数-C,请尝试如下示例:
$ tar -zxvf myetc.tar.gz -C /tmp
(五)Linux的网络管理
Linux操作系统具有强大的网络管理功能,除了自身具有很强的网络安全性以外,几乎支持所有主流防火墙等网络安全软件,所有Linux的强大网络功能给我们的大数据安全带来了极大的方便,在以后的大数据学习中,我们经常使用的网络命令如下:
1、 ping命令
ping 将数据包发向用户指定地址。当包被接收,目标机器发送返回数据包。ping 主要有两个作用:
(1) 用来确认网络连接是畅通的。
(2) 用来查看连接的速度信息。
如果你 ping www.baidu.com 它将返回它的 ip 地址 。你可以通过 ctrl+C 来停止命令。
2、ifconfig
查看用户网络配置。它显示当前网络设备配置。对于需要接收或者发送数据错误查找,这个工具极为好用。
3、netstat命令
netstat命令用于显示本机上与IP、TCP、UDP和ICMP协议相关的统计数据,该命令经常被用于检验本机各端口的网络连接情况。
Netstat常用的命令使用举例如下:
(1)netstat –a
显示所有的有效连接信息,包括已建立的连接和监听的连接请求。
(2)netstat -i
显示系统中所有网络接口信息,包括物理网卡、网卡别名和本地回环网卡。
(3)netstat –n
显示系统中所有已建立的连接。
(4)netstat –ta
显示有效的TCP连接。
(5)netstat –ua
显示有效的UDP连接。
(6)netstat -an | grep 3306
显示端口号为3306的网络连接信息。
(六)Linux的进程管理
操作系统的进程管理是Linux的重要功能,在我们的大数据项目实战中经常用到ps、jps、kill命令。
1、ps具体命令解释如下:
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径
ps -e 此参数的效果和指定'A'参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps -t<终端机编号>
指定终端机编号,并列出属于该终端机的程序的状况。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。
2、强制杀死进程
kill -9 进程ID
3、显示java进程jps
Jps是我们以后经常用到的命令,前提是你必须安装jdk,其使用操作如下:
四、Linux的shell脚本编程
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行
由于历史原因,UNIX系统上有很多种Shell:
(1) sh(Bourne Shell)
由Steve Bourne开发,各种UNIX系统都配有sh。
(2) csh(C Shell)
由Bill Joy开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能:作业控制,命令历史,命令行编辑。
(3)ksh(Korn Shell)
由David Korn开发,向后兼容sh的功能,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上/bin/sh往往是指向/bin/ksh的符号链接。
(4)tcsh(TENEX C Shell)
是csh的增强版本,引入了命令补全等功能,在FreeBSD、MacOS X等系统上替代了csh。
(5)bash(Bourne Again Shell)
由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。虽然如此,bash和sh还是有很多不同的,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,有些行为并不一致,所以bash需要模拟sh的行为:当我们通过sh这个程序名启动bash时,bash可以假装自己是sh,不认扩展的命令,并且行为与sh保持一致。
(一)最简单的shell
1、Shell的结构:
(1)、#!指定执行脚本的shell
(2)、#注释行
(3)、控制结构
2、创建shell的步骤:
(1)、使用vi编辑器创建以.sh结尾的文件 :vi demo.sh
(2)、编辑相关shell程序,编写完毕后加执行权限:
chmod u+x demo.sh
(3)、执行程序 ./demo.sh
也可以使用sh demo.sh来执行
使用 sh -x demo.sh中的x表示脚本的执行过程
使用 sh -n demo.sh不执行脚本,只是检查语法的错误,返回所有错误信息
(二)shell的变量
Shell变量包括:临时变量和环境变量,临时变量时shell程序内部定义的,对其他程序不可见,包括用户自定义变量和位置变量;环境变量就是全局变量,不随着shell脚本的结束而消失。
在使用变量值的时候,要在变量名前加前缀'$'
变量赋值用'=',注意两边不能有空格
变量赋值举例:
1、 NUM=1
2、将一个命令的执行结果赋给变量,例如
time=`date`
time=(date +%F) echo $time
3、将一个变量赋给另一个变量:A=$B
查看变量的值:echo $A
字符串用单引号或者双引号
双引号有自动解析变量的功能
例如:
sum=100
echo 'The total is $sum'
set为显示所有的环境变量
删除变量unset
(三)位置变量和特殊变量
1、位置变量
Shell解释执行用户命令的时候,将命令行的第一部分作为命令名,其他部分作为参数。有出现在命令行上的位置确定的参数成为位置参数
例如:ls -l file1 file2 file3
$0位置被个程序的文件名占用,其它剩余位置$1 $2 $3…$9
例如:在test.sh中有如下内容
mkdir files$1_s00$2_class$3
执行时候./test.sh 001 1 001,表示$0被test.sh占用、$1被001占用、1被$2占用,001被$3占用
2、特殊变量
$*这个程序的所有参数
$#这个程序的参数个数
$$这个程序的 PID
$!执行上一个后台的PID
$?执行上一个命令的返回值
例如有test.sh程序,内容如下:
echo '$# is:' $#
echo '$* is:' $*
echo '$? is:' $?
echo '$$ is:' $$
echo '$0 is:' $0
运行 ./test.sh p1 p2 p3 后查看结果
(四)shell的一些常用命令
1、Read命令:从键盘读入数据,赋给变量
例如 read x 100 ; echo $x
如程序test.sh:
read a1 a2 a3
echo 'the a1 value is $a1'
echo 'the a2 value is $a2'
echo 'the a3 value is $a3'
则执行的时候
./test.sh 100 200 300
2、expr指令:对整型变量进行算术运算
例如expr 100 + 200注意加号左右有空格
del@box:/temp$ expr 100 + 200
300
另外注意乘法为' \*',要有转义符
例如3 \* 5
复杂的运算:expr `expr 6 + 9` / 3
将运算的结果赋予变量 x=`expr 1 + 2`
3、变量测试语句:
测试变量是否相等、为空等情况。语法:test 测试条件;测试范围:整数、字符串、文件
(1)字符串测试:
test str1=str2 测试字符串是否相等
test str1!=str2 测试字符串是否不相等
test str1 测试字符串是否不为空
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空
(3)测试整数
test int1 -eq int2 测试int1和int2是否相等
test int1 -ge int2 测试int1是否>=int2
test int1 -gt int2 测试int1是否>int2
test int1 -le int2 测试int1是否<=int2
test int1 -lt int2 测试int1是否<int2
test int1 -ne int2 测试int1和int2是否不相等
(4)文件测试
test -d file 指定文件是否目录
test -f file 指定文件是否常规文件
test -x file 指定文件是否可执行
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -a file 指定文件是否存在
test -s file 文件大小是否非0
测试语句一般不单独使用,一般配合if语句来判断,如:
if test -d $1 then
…….
fi
变量测试语句也可以用[]简化,例如:
test -d $1等价于 [ -d $1 ] 注意:中括号左右的表达式要有空格
(五)流程控制
1、选择结构if语句
(1) If [ ]; then
fi
(2) If [ ]; then
else
fi
例如:
If [ $# -ne 2 ]; then
echo 'not enough parameters'
exit 0 //0表示正常退出
fi
If[ $1 -eq $2 ];then
echo '$1 equals $2'
fi
(3) If [ ] then
elif [ ]
elif [ ]
else
例如:test.sh内容如下
read file_name
if [ -d $file_name ]
then
echo 'This is directory!!!'
elif [ -f $file_name ]
then
echo 'This is file!!!'
else
echo 'This is nothing!!!'
fi
条件组合查询:
-a :逻辑与,条件都成立的时候结果为真
-o :逻辑或,只要有一个条件成立,结果为真
例如:test.sh内容如下
read file_name
if [ -d $file_name ]
then
echo 'This is directory!!!'
elif [ -f $file_name ]
then
echo 'This is file!!!'
elif [ -c $file_name -o -b $file_name ]
echo 'This is device file!!!'
else
echo 'This is nothing!!!'
fi
2、循环结构
(1)形式-1:for-in
语法:
for 变量 in 名字表
do
…..
done
例如:
for x in 11 22 33 44 55 66
do
echo 'x value is : $x'
done
(2)形式-2:for
语法:
for ((初始值; 循环条件; 增量 ))
do
指令…
done
示例-1:输出1 2 3 4 5
for((i = 1;i <= 5;i++))
do
echo $i
done
示例-2:求1—100的和
for (( i=1; i<=100; i++ ))
do
sum=$(( $sum + $i ))
done
echo '1+2+3+...+100=$sum'
3、case语句
语法:
case '$variable' in
'$condition1' )
command...
;;
'$condition2' )
command...
;;
esac
对变量使用''并不是强制的, 因为不会发生单词分割
每句测试行, 都以右小括号)来结尾
每个条件判断语句块都以一对分号结尾 ;;
case块以esac (case的反向拼写)结尾
例如,有下列程序test.sh内容如下:
read c
case $c in
a)
echo 'this is a'
;;
b)
echo 'this is b'
;;
c)
echo 'this is c'
;;
*)
echo 'none'
esac
4、while循环
基本语法:
while [ condition ]
do
command1
command2
command3
done
例如,test.sh中的写法如下:
num=1
while [ $num -le 10 ]
do
sum=`expr $num \* $num`
echo $sum
num=`expr $num+1`
done
5、break和continue语句
break:结束循环
continue:结束本次循环,开始新的一轮循环
例如:
while true
do
echo '============================'
echo ' 1 add '
echo '2 delete '
echo '3 update'
echo '4 Quit'
read num_op
case $num_op in
1)
echo 'this is add operation'
;;
2)
echo 'this is delete operation'
;;
3)
echo 'this is update operation'
;;
4)
echo 'exit …..'
break
;;
esac
done
6、shift指令
参数左移:每执行一次,参数序列顺次左移一个位置,即$#的值减去1。其用于处理每个参数,移动出去的参数不能再用
例如,test.sh文件内容如下:
If [ $# -le 0 ]
then
echo 'not enough parameters'
exit 0
Fi
Sum=0
While [ $# -gt 0 ]
sum=`expr $sum + $1`
shift
Done
Echo $sum
五、Linux系统下的软件安装部署
在Linux环境下,由于很多传统的开发工具及大数据软件、框架离不开java虚拟机的环境,所以在安装软件之前必须安装JDK。为了使软件能够在任一路径运行,还必须要配置环境变量PATH,笔者在这里很好的总结了环境变量PATH的应用,如下所示:
1、将可执行文件加入PATH
在/usr/local/img/有个图片demo.jpg,请设置个环境变量,以便在任何路径都可以运行demo.jpg的图片,图片自己选择,例如在随便的路径运行demo.jpg回车,即可显示图片
步骤1:
vim /etc/profile
步骤2:
export PATH=/usr/local/img/demo.jpg:$PATH
步骤3:
:wq保存并退出
最后使文件生效:
source /etc/profile
2、使用export 命令查看PATH值
在命令行输入:export
3、使用'echo $PATH'显示环境变量的值
在命令行输入:echo $PATH
4、使用'export PATH'添加临时的环境变量,命令行窗口关闭,临时环境变量失效,例如想要jdk的临时环境变量,操作如下:
export PATH=/usr/local/jdk1.8/bin:$PATH
5、永久添加环境变量
永久添加环境变量要求能够影响当前用户和所有用户。
(1)影响当前用户
vim /root/.bashrc
export PATH='/usr/local/img/demo.jpg:$PATH
source /root/.bashrc
(2)影响所有用户
vim /etc/profile
export PATH='/usr/local/img/demo.jpg:$PATH
source /etc/profile
6、使用env指定显示所有的环境变量和值
在命令行输入:env
7、使用set命令指定本地变量
在命令行输入:set
(一)安装JDK
步骤1:先查看linux版本是多少位的,在命令行输入uname –a
步骤2:进入官网下载相对应的linux版本,这里我们选择jdk-8u91-linux-x64.tar.gz
步骤3:将jdk-8u91-linux-x64.tar.gz上传到/usr/local/
步骤4:将jdk-8u91-linux-x64.tar.gz解压,命令如下所示:
tar -zxvf jdk-8u91-linux-x64.tar.gz
步骤5:将解压后的文件jdk1.8.0_91文件改名为jdk1.8
mv jdk1.8.0_91 jdk1.8
步骤6:配置Linux环境的PATH
vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
配置完成后保存并退出,使文件生效:
source /etc/profile
步骤7:在终端输入'java –version'可以看到你安装的版本,或者输入
javac
java
(二)安装Tomcat
步骤1:下载tomcat
从官网下载tomcat,这里下载apache-tomcat-8.0.20.tar.gz
步骤2:将tomcat上传到虚拟机
我这里上传到/usr/local/demo
步骤3:将tar包解压
tar -zxvf tar -zxvf apache-tomcat-8.0.20.tar.gz
步骤4:改文件夹名称
由于解压后的文件夹不方便记忆,将解压缩后的文件夹apache-tomcat-8.0.20改名
mv apache-tomcat-8.0.20 tomcat8
步骤5:配置环境变量
(1)编辑配置文件/etc/profile
vi /etc/profile
TOMCAT_HOME=/usr/local/demo/tomcat8
PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH
操作截图如下:
保存并退出:wq,然后使文件生效
source /etc/profile
步骤6:运行tomcat服务器
catalina.sh run
步骤7:查看8080端口
netstat -anp |grep 8080
(三)安装MySQL数据库
如果在 centOS下面可以使用yum指令安装,这里采用的是ubuntu操作系统,安装方法和yum类似,操作如下:
1、安装MySQL的服务端
安装mysql服务端的命令: apt-get install mysql-server
2、安装MySQL的客户端
安装mysql客户端的命令: apt-get install mysql-client
3、启动服务
4、重置root密码,使用mysql –uroot这种方式可以不用密码登录mysql
也可以输入以下命令重置root密码为123456
退出mysql
重启mysql服务
进入mysql密码为123456 即可进入msyql
5、测试MySQL的服务
步骤1:建立mysql数据库
create database rg;
步骤2:通过语句查询是否创建成功
show databases;
步骤3:使用数据库才可以创建表
步骤4:创建表 表名为student 其中有3个字段id 以及name和age
步骤5:查询是否创建成功
show tables
步骤6:下面使用3中格式插入信息 insert into
insert into student(id,Name,Age) values(1,'lily',21)
步骤7:使用select查询student表
select * from student
联系客服