当前位置:网站首页 > Linux运维 > 正文

Linux操作系统课程详细整理(命令、shell编程、软件安装等)

作者:jinxijing发布时间:2020-06-07分类:Linux运维浏览:471


导读:第1章 Linux基础在大数据从理论到实际的落地过程中,Linux早已经超出了操作系统的范畴,它在今天甚至被称为大数据运行的平台。对于学过Linux课程的院校,强烈建议把本章复习一下,因为在后续学习过程中大数据的软件、框架全都基于Linux平台,本章的知识点要求为:➢掌握Linux文件管理常用的命令➢掌握Linux的权限管理常用的命令➢掌握Linux的软件包管理常用的命令➢掌握Linux的网络管理常用的命令➢掌握Linux的进程管理常用的命令➢掌握Linux的进程管理常用的命令➢熟悉Linux的

第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

标签:Linux操作系统shell编程