Linux操作系统课程详细整理(命令、shell编程、软件安装等)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux操作系统课程详细整理(命令、shell编程、软件安装等)第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 它将返回它的 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
⽰例-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'
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。