Linux操作系统

Linux操作系统

什么是Linux

​ Linux是一个操作系统软件,与win一样,但是与win不同的是Linux是开源的并且可以自由传播的,Linux是一个支持多用户、多任务、多线程以及多CPU的操作系统,它主要能运行应用程序,网络协议以及工具软件等,Linux也支持32位与64位硬件,Linux主要继承了Unix的核心思想,是一个性能稳定的多用户网络操作系统

​ Linux主要应用于服务器领域,对于我们开发者而言常见的Linux操作是必须要会的,因为我们使用的很多软件都需要安装在Linux服务器之中

为什么需要使用Linux操作系统

  • 高安全性

    在Linux中除非使用root(最高顶级用户)权限登录,否则程序是无法更改系统的设置以及配置,因此下载的恶意软件的权限都会受到限制,并且Linux的网络防火墙功能非常强大

  • 高可用性

    Linux非常稳定,不容易崩溃

  • 易维护性

    Linux系统非常容易维护,Linux的每个发行版都有自己的软件管理中心提供定时更新,安全并且高效

  • 开源

    Linux最大的特点就是开源,开发者可以自由查看源码以及修改源码,从而及时发现并解决问题,很多国家都在开发自己的Linux版本

  • 免费

    Linux的免费可以极大降低我们的开发成本

常见Linux 发行版本

版本名称网 址特 点软件包管理器
Debian Linuxwww.debian.org开放的开发模式,且易于进行软件包升级apt
Fedora Corewww.redhat.com拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新up2date(rpm),yum (rpm)
CentOSwww.centos.orgCentOS 是一种对 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,由于 Linux 是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS 就是将商业的 Linux 操作系统 RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞rpm
SUSE Linuxwww.suse.com专业的操作系统,易用的 YaST 软件包管理系统YaST(rpm),第三方 apt (rpm)软件库(repository)
Mandrivawww.mandriva.com操作界面友好,使用图形配置工具,有庞大的社区进行技术支持,支持 NTFS 分区的大小变更rpm
KNOPPIXwww.knoppix.com可以直接在 CD 上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用apt
Gentoo Linuxwww.gentoo.org高度的可定制性,使用手册完整portage
Ubuntuwww.ubuntu.com优秀已用的桌面环境,基于 Debian 构建apt

CentOS目录结构

  • bin

    这里存放了标准的Linux工具(命令)例如ls,vi等里面的所有命令都包含在path系统变量之中,如果path出现问题就会导致找不到对应的命令

  • root

    系统管理员目录,一般不建议更改

  • etc

    里面主要存放了系统配置方面的各种文件,例如我们安装了MySQL,当我们想修改MySQL的配置文件的时候会发现MySQL的配置文件在etc之下

  • dev

    主要存放设备以及外设有关的文件,例如打印机等,当我们连接打印机的时候,系统就是从这里开始工作的,或者一些U盘驱动等都在这里

  • home

    这里主要存放个人数据,例如每个用户的设置文件,以及用户的桌面文件夹,用户的各种数据,用户的目录等都在这里

  • tmp

    这个是临时目录,主要存放一些临时文件,有些系统会定时自动清理tmp文件夹,所以里面不可以放重要文件

  • usr

    里面主要存放不适合存入到bin和etc下的内容

  • opt

    主要存放可选的程序

  • usr/local

    里面主要存放我们手动安装的各种软件

基本命令

1.1 关机和重启
关机
    shutdown -h now        立刻关机
    shutdown -h 5        5分钟后关机
    poweroff            立刻关机
重启
    shutdown -r now        立刻重启
    shutdown -r 5        5分钟后重启
    reboot                立刻重启

1.2 帮助命令
--help命令
  shutdown --help:
  ifconfig  --help:查看网卡信息

man命令(命令说明书) 
  man shutdown
  注意:man shutdown打开命令说明书之后,使用按键q退出

目录操作命令

2.1 目录切换 cd
命令:cd 目录

cd /        切换到根目录
cd /usr        切换到根目录下的usr目录
cd ../        切换到上一级目录 或者  cd ..
cd ~        切换到home目录
cd -        切换到上次访问的目录

2.2 目录查看 ls [-al]
命令:ls [-al]

ls                查看当前目录下的所有目录和文件
ls -a            查看当前目录下的所有目录和文件(包括隐藏的文件)
ls -l 或 ll       列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls /dir            查看指定目录下的所有目录和文件   如:ls /usr

2.3 目录操作【增,删,改,查】
2.3.1 创建目录【增】 mkdir
命令:mkdir 目录

mkdir    aaa            在当前目录下创建一个名为aaa的目录
mkdir    /usr/aaa    在指定目录下创建一个名为aaa的目录

2.3.2 删除目录或文件【删】rm
命令:rm [-rf] 目录

删除文件:
rm 文件        删除当前目录下的文件
rm -f 文件    删除当前目录的的文件(不询问)

删除目录:
rm -r aaa    递归删除当前目录下的aaa目录
rm -rf aaa    递归删除当前目录下的aaa目录(不询问)

全部删除:
rm -rf *    将当前目录下的所有目录和文件全部删除
rm -rf /*    【自杀命令!慎用!慎用!慎用!】将根目录下的所有文件全部删除

注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了方便大家的记忆,无论删除任何目录或文件,都直接使用 rm -rf 目录/文件/压缩包

2.3.3 目录修改【改】mv 和 cp
一、重命名目录
    命令:mv 当前目录  新目录
    例如:mv aaa bbb    将目录aaa改为bbb
    注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行    重命名的操作

二、剪切目录
    命令:mv 目录名称 目录的新位置
    示例:将/usr/tmp目录下的aaa目录剪切到 /usr目录下面     mv /usr/tmp/aaa /usr
    注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作

三、拷贝目录
    命令:cp -r 目录名称 目录拷贝的目标位置   -r代表递归
    示例:将/usr/tmp目录下的aaa目录复制到 /usr目录下面     cp /usr/tmp/aaa  /usr
    注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不    用写-r递归

2.3.4 搜索目录【查】find
命令:find 目录 参数 文件名称
示例:find /usr/tmp -name 'a*'    查找/usr/tmp目录下的所有以a开头的目录或文件

文件操作命令

3.1 文件操作【增,删,改,查】
3.1.1 新建文件【增】touch
命令:touch 文件名
示例:在当前目录创建一个名为aa.txt的文件        touch  aa.txt

3.1.2 删除文件 【删】 rm
命令:rm -rf 文件名

3.1.3 修改文件【改】 vi或vim
【vi编辑器的3种模式】
    基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

1) 命令行模式command mode)
   控制屏幕光标的移动,字符、字或行的删除,查找,移动复制某区段及进入Insert mode下,或者到 last line mode。
   命令行模式下的常用命令:
   【1】控制光标移动:↑,↓,j
   【2】删除当前行:dd 
   【3】查找:/字符
   【4】进入编辑模式:i o a
   【5】进入底行模式::

2) 编辑模式(Insert mode)
   只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
   编辑模式下常用命令:
   【1】ESC 退出编辑模式到命令行模式;

3) 底行模式(last line mode)
   将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
   底行模式下常用命令:
   【1】退出编辑:   :q
   【2】强制退出:   :q!
   【3】保存并退出:  :wq

打开文件

命令:vi 文件名
示例:打开当前目录下的aa.txt文件     vi aa.txt 或者 vim aa.txt

注意:使用vi编辑器打开文件后,并不能编辑,因为此时处于命令模式,点击键盘i/a/o进入编辑模式。

编辑文件

使用vi编辑器打开文件后点击按键:i ,a或者o即可进入编辑模式。

i:在光标所在字符前开始插入
a:在光标所在字符后开始插入
o:在光标所在行的下面另起一新行插入

保存或者取消编辑

保存文件:

第一步:ESC  进入命令行模式
第二步::     进入底行模式
第三步:wq     保存并退出编辑

取消编辑:

第一步:ESC  进入命令行模式
第二步::     进入底行模式
第三步:q!     撤销本次修改并退出编辑

3.1.4 文件的查看【查】
文件的查看命令:cat/more/less/tail

cat:看最后一屏

示例:使用cat查看/etc/sudo.conf文件,只能显示最后一屏内容
cat sudo.conf

more:百分比显示

示例:使用more查看/etc/sudo.conf文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看
more sudo.conf

less:翻页查看

示例:使用less查看/etc/sudo.conf文件,可以使用键盘上的PgUp和PgDn向上    和向下翻页,q结束查看
less sudo.conf

tail:指定行数或者动态查看

示例:使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束  
tail -10 sudo.conf

3.2 权限修改
rwx:r代表可读,w代表可写,x代表该文件是一个可执行文件,如果rwx任意位置变为-则代表不可读或不可写或不可执行文件。

示例:给aaa.txt文件权限改为可执行文件权限,aaa.txt文件的权限是-rw-------

第一位:-就代表是文件,d代表是文件夹
第一段(3位):代表拥有者的权限
第二段(3位):代表拥有者所在的组,组员的权限
第三段(最后3位):代表的是其他用户的权限

   421  421  421

-  rw-   ---     ---

命令:chmod +x aaa.txt
或者采用8421法
命令:chmod 100 aaa.txt

压缩文件操作

4.1 打包和压缩
Windows的压缩文件的扩展名  .zip/.rar
linux中的打包文件:aa.tar      
linux中的压缩文件:bb.gz    
linux中打包并压缩的文件:.tar.gz

Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的。
而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般.tar.gz。

命令:tar -zcvf 打包压缩后的文件名 要打包的文件
其中:z:调用gzip压缩命令进行压缩
  c:打包文件
  v:显示运行过程
  f:指定文件名

示例:打包并压缩/usr/tmp 下的所有文件 压缩后的压缩包指定名称为xxx.tar
tar -zcvf ab.tar aa.txt bb.txt 
或:tar -zcvf ab.tar  *

4.2 解压
命令:tar [-zxvf] 压缩文件    
其中:x:代表解压
示例:将/usr/tmp 下的ab.tar解压到当前目录下



示例:将/usr/tmp 下的ab.tar解压到根目录/usr下
tar -xvf ab.tar -C /usr------C代表指定解压的位置

文件

5.1 grep
grep命令是一种强大的文本搜索工具

使用实例:

ps -ef | grep sshd  查找指定ssh服务进程 
ps -ef | grep sshd | grep -v grep 查找指定服务进程,排除gerp身 
ps -ef | grep sshd -c 查找指定进程个数 
5.2 find
find命令在目录结构中搜索文件,并对搜索结果执行指定的操作。 

find 默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。

使用实例:

find . -name "*.log" -ls  在当前目录查找以.log结尾的文件,并显示详细信息。 
find /root/ -perm 600   查找/root/目录下权限为600的文件 
find . -type f -name "*.log"  查找当目录,以.log结尾的普通文件 
find . -type d | sort   查找当前所有目录并排序 
find . -size +100M  查找当前目录大于100M的文件
5.3 locate
locate 让使用者可以很快速的搜寻某个路径。默认每天自动更新一次,所以使用locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。如果数据库中没有查询的数据,则会报出locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory该错误!updatedb即可!

yum -y install mlocate 如果是精简版CentOS系统需要安装locate命令

使用实例:

updatedb
locate /etc/sh 搜索etc目录下所有以sh开头的文件 
locate pwd 查找和pwd相关的所有文件
5.4 whereis
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。

使用实例:

whereis ls    将和ls文件相关的文件都查找出来
5.5 which
which命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

使用实例:

which pwd  查找pwd命令所在路径 
which java  查找path中java的路径 

su、sudo

6.1 su
su用于用户之间的切换。但是切换前的用户依然保持登录状态。如果是root 向普通或虚拟用户切换不需要密码,反之普通用户切换到其它任何用户都需要密码验证。

su test:切换到test用户,但是路径还是/root目录
su - test : 切换到test用户,路径变成了/home/test
su : 切换到root用户,但是路径还是原来的路径
su - : 切换到root用户,并且路径是/root
su不足:如果某个用户需要使用root权限、则必须要把root密码告诉此用户。

退出返回之前的用户:exit

6.2 sudo
sudo是为所有想使用root权限的普通用户设计的。可以让普通用户具有临时使用root权限的权利。只需输入自己账户的密码即可。

进入sudo配置文件命令:

vi /etc/sudoer或者visudo
案例:
允许hadoop用户以root身份执行各种应用命令,需要输入hadoop用户的密码。
hadoop  ALL=(ALL)   ALL 

案例:
只允许hadoop用户以root身份执行ls 、cat命令,并且执行时候免输入密码。 
配置文件中: 
hadoop  ALL=NOPASSWD:  /bin/ls, /bin/cat 

系统服务

service systemctl status  --查看iptables服务的状态
service systemctl start  --开启iptables服务
service systemctl stop  --停止iptables服务
service systemctl restart  --重启iptables服务

chkconfig systemctl off  --关闭iptables服务的开机自启动
chkconfig systemctl on  --开启iptables服务的开机自启动

网络管理

8.1 主机名配置
[root@node1 ~]# vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1
8.2 IP 地址配置
[root@node1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
8.3 域名映射
/etc/hosts文件用于在通过主机名进行访问时做ip地址解析之用。所以,你想访问一个什么样的主机名,就需要把这个主机名和它对应的ip地址。

[root@node1 ~]# vi /etc/hosts

在最后加上

192.168.52.201  node1
192.168.52.202  node2
192.168.52.203  node3

定时任务指令crontab 配置

crontab是Unix和Linux用于设置定时任务的指令。通过crontab命令,可以在固定间隔时间,执行指定的系统指令或shell脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。

crontab安装:

yum install crontabs
服务操作说明:

service crond start   ## 启动服务 
service crond stop    ## 关闭服务 
service crond restart ## 重启服务
9.1 命令格式
crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

参数说明:

-u user:用来设定某个用户的crontab服务  

file:file是命令文件的名字,表示将file做为crontab的任务列表文件

并载入crontab。

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前

用户的crontab文件。

-l:显示某个用户的crontab文件内容。如果不指定用户,则表示显示当前

用户的crontab文件内容。

-r:删除定时任务配置,从/var/spool/cron目录中删除某个用户的crontab

文件,如果不指定用户,则默认删除当前用户的crontab文件。

命令示例:

crontab file [-u user] ## 用指定的文件替代目前的crontab
crontab -l [-u user]  ## 列出用户目前的crontab
crontab -e [-u user]  ## 编辑用户目前的crontab
9.2 配置说明、实例
命令:*   *    *   *   *   command  

解释:分  时  日  月  周  命令

第1列表示分钟1~59 每分钟用*或者 */1表示    

第2列表示小时0~23(0表示0点)

第3列表示日期1~31  

第4列表示月份1~12  

第5列标识号星期0~6(0表示星期天)  

第6列要运行的命令

其他命令(防火墙,网络等)

10.1 查看当前目录:pwd
命令:pwd     查看当前目录路径

10.2 查看进程:ps -ef
命令:ps -ef    查看所有正在运行的进程

10.3 结束进程:kill
命令:kill pid 或者 kill -9 pid(强制杀死进程)           pid:进程号

10.4 网络通信命令:
ifconfig:查看网卡信息

命令:ifconfig 或 ifconfig | more

ping:查看与某台机器的连接情况

命令:ping ip

netstat -an:查看当前系统端口

命令:netstat -an

搜索指定端口
命令:netstat -an | grep 8080

10.5 配置网络
命令:setup

10.6 重启网络
命令:service network restart

10.7 切换用户
命令:su - 用户名

10.8 防火墙命令

关闭防火墙

systemctl stop firewalld.service      #停止firewall
systemctl disable firewalld.service    #禁止firewall开机启动

\>>>开启端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义

--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

\>>>重启防火墙

firewall-cmd --reload

其他常用命令:

firewall-cmd --state             ##查看防火墙状态,是否是running
firewall-cmd --reload             ##重新载入配置,比如添加规则之后,需要执行此命令
firewall-cmd --get-zones           ##列出支持的zone
firewall-cmd --get-services          ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp       ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp        ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent  ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
firewall-cmd --add-port=80/tcp --permanent  ##永久添加80端口
iptables -L -n                ##查看规则,这个命令是和iptables的相同的
man firewall-cmd               ##查看帮助

更多命令,使用 firewall-cmd --help 查看帮助文件

\>>> CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下

1、直接关闭防火墙

systemctl stop firewalld.service     #停止firewall
systemctl disable firewalld.service  #禁止firewall开机启动

2、设置 iptables service

yum -y install iptables-services
如果要修改防火墙配置,如增加防火墙端口3306
vi /etc/sysconfig/iptables
增加规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

保存退出后
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

10.9 修改文件权限
命令:chmod 777

10.10 清屏
命令:ctrl + l

10.11 vi模式下快捷键
esc后:

保存并退出快捷键:shift+z+z

光标跳到最后一行快捷键:shift+g

删除一行:dd

复制一行内容:y+y

粘贴复制的内容:p

Shell

​ shell是一种命令语言,主要用于跟Linux系统打交道,用来操控Linux的各种命令执行等

​ Linux的shell种类非常多

  • Bourne Shell

    命令是 /usr/bin/sh 或者/bin/sh

  • Bourn Again Shell

    命令是 /bin/bash

  • C Shell

    命令是 /usr/bin/csh

  • K Shell

    命令是 /usr/bin/ksh

  • Shell for root

    命令是 /sbin/sh

​ 其中Bourn Again Shell是目前大部分Linux操作系统使用的默认shell脚本

第一个程序Hello Java

​ 使用vim编辑并创建一个hello.sh文件

vim /usr/local/shell/hello.sh

​ 文件代码如下

#!是一种约定的标记,在于告诉操作系统我们的shell属于什么种类(操作系统就知道使用什么解释器来执行shell了)

#!/bin/bash

echo Hello java	#echo是将后面的内容输出到控制台

给.sh文件授权

#我们写的shell脚本默认是没有执行权限的,所以想执行的话,需要对其添加执行权限
chmod +x ./hello.sh	给文件授权
./hello.sh	执行文件

Shell变量的使用

​ shell是一门脚本语言,属于弱类型的语言,所以shell中不需要声明变量的类型,直接让变量名=值即可,变量名由数字、字母、下划线组成,但是不能使用数字开头

​ 如果想在脚本中使用变量,只需要使用$变量名即可

  • _N_B 可以
  • 3_b 不能以数字开头
  • a s 不 能 以 as 不能以 as定义变量名
  • #FF #是注释,所以不能声明变量

​ 注意:在我们使用变量的时候,如上面的test1中,变量名age后面可能会跟一些内容,此时系统认为agehehe才是一个完整的变量,所以会造成age读取错误,此时我们可以使用{}将变量名包裹起来,这样系统就能正确识别变量了。

name=张三
age=18
echo 名字叫做${name}年龄是${age}hehe 
files=for file in `ls /etc`
echo $files
int=25+25 
echo $int   
a={25+25}   
echo $a     
b=(25+25)   
echo $b    
b=50
echo 新的值是 $b

# 常量的声明,常量的值是不能被改变的

readonly man=老王
echo $man
man=老牛
echo $man

# 变量的删除,我们可以使用unset删除变量,但是常量不能被删除掉

unset a 
echo 删除了变量a
unset man 
echo 删除了常量man
echo $a $man

Shell中的三种变量

  • 局部变量
  • 环境变量
  • shell变量

Shell中的字符串

​ 在shell中定义的字符串分为双引号,单引号,无引号三种

  • 输出单引号

    单引号字符串中没有任何办法输出单引号

    双引号字符串中可以输出单引号

    无引号字符串中可以输出单引号

  • 输出双引号

    单引号字符串中可以输出双引号

    双引号字符串中可以输出双引号,需要加转义字符/

    无引号字符串中可以输出双引号,需要加转义字符/

  • 识别变量

    单引号无法识别变量

    双引号可以识别变量

    无引号可以识别变量

name="张三,李四,张三,张三"
name2="$name"
name3='$name'
name4=$name
echo 双引号 $name2
echo 单引号 $name3
echo 无引号 $name4
  • 获取字符串长度
echo ${#name}    #输出字符串的长度
echo ${name:0:2} #截取字符串,从长度0截取到长度2
echo `expr index ${name} 张三,` #查看字符串中是否存在张三,若存在则返回1,否则返回0

Shell中的数组

#shell中的数组可以不指定长度,每个元素之间使用空格进行分割
array=(张三 李四 王五)
#使用下标从数组中取值,下标从0开始
echo ${array[0]}
#使用@或者*来从数组中取值
echo ${array[@]}
echo ${array[*]}
#通过下标给数组赋值
array[0]=时间来得及
#获取数组的长度
echo ${#array[*]}
#获取数组中元素的长度
echo ${#array[0]}

Shell中传值

echo $1
echo $2
echo $3
./in.sh  张三 李四 王五

Shell中的特殊符号

echo 传递参数的个数$#
echo 当前执行脚本的进程ID是:$$
echo 显示所有的参数${@}
echo 显示脚本的执行状态,0表示正常,1表示错误$?
echo 后台执行的最后一个进程是$!

运算符

​ 直接写在脚本中的所有内容都是字符串,无法进行计算,所以我们需要使用特殊方式来进行运算

#算术运算符
number=`expr 5 + 6`
echo 5+6=$number
number=`expr 5 - 8`
echo 5-8=$number
number=`expr 5 \* 8`
echo 5*8=$number
number=`expr 5 / 8`
echo 5/8=$number
number=`expr 5 % 8`
echo 5%8=$number
#关系运算符-eq判断两个值是否相等 -ne判断两个书是否不相等
#-gt 左侧数字是否大于右侧数字    -lt判断左侧数字是否小于右侧
#-ge 判断大于等于                -le判断小于等于
#关系运算符,需要配合流程控制语句来使用,if then else fi
#if then elif then else fi
if [ 5 -eq 8 ] 
then 
echo 5与8相等
else
echo 5与8不相等
fi

if [ 5 -gt 8 ]
then
echo 5大于8
else
echo 5不大于8
fi

if [ 5 -ne 8 ]
then
echo 5与8不相等
else
echo 5与8相等
fi

if [ 5 -lt 8 ] 
then
echo 5小于8
else
echo 5不小于8
fi

if [ 5 -ge 8 ]
then
echo 5大于等于8
else
echo 5不大于等于8
fi

if [ 5 -le 8 ]
then
echo 5小于等于8
else
echo 5小于等于8
fi

流程控制语句

#字符串比较 字符串不能使用-eq 而是使用=以及!=来进行对比
name=张三
name2=李四
if [ $name = $name2 ]
then
echo name=name2
elif [ $name != $name2 ]
then
echo name!=name2
fi
#查看字符串是否为空,使用$可以查看变量是否为空,如果为空返回false否则返回true
name3=$1
if [ $name3 ]
then
echo name3不为空,里面的值是 $name3
else
echo name3为空
fi
#查看字符串的长度是否为0,如果是0返回true,否则返回false
name3=$1
if [ -z $name3 ]
then
echo name3长度为0
else
echo name3长度不为0,里面的值是 $name3
fi
#流程分支语句之case
echo 请输入一个数字
read num #从控制台输入一个值
case $num in # case相当于Java的switch,case后面放需要判断的变量,使用in结束
	1) echo 你输入的数字是1;; #这里相当于Java中的case,1是用来与变量对比的值,使用)分割)后面是匹配成功执行的代码,
#代码使用;;结束
	2) echo 你输入的数字是2;;
	3) echo 你输入的数字是3;;
	*) echo 你输入的不是1、2、3;; #相当于Java中的default
esac #结束case的时候需要使用esac

循环

#for循环
for a in 1 2 3 4 6
do
echo $a
done

#使用{n..m}来指定循环次数
for a in {1..100}
do
echo $a
done
#遍历数组
name="张三 李四 王五 赵六"
for a in $name
do
echo $a
done
#使用for循环创建目录
for a in {1..5}
do
mkdir tes_$a
done
#使用for循环删除文件
for a in {1..5}
do
rm -r tes_$a
done
#使用for循环给变量赋值
zx=for file in `ls /usr/`
echo $file
#while循环
i=1
while(($i<=5)) #while的循环条件需要俩小括号
do
echo $i
let "i++" #让变量自增
done
#使用while循环求一个10000以内的3、5、7、9的公共倍数
i=1
while(($i <= 10000))
do
q=`expr $i % 3`
w=`expr $i % 5`
e=`expr $i % 7`
t=`expr $i % 9`
if [ $q == 0 -a $w == 0 -a $e == 0 -a $t == 0 ]
then
echo 值为 $i
break
fi
let "i++"
done

#until 循环
i=1
until (($i>10))
do
echo 哈哈 $i
let "i++"
done

linux安装JDK

  • 使用xftp将压缩包上传到 linux中
  • 使用命令解压文件,并制定解压位置
tar -zxvf jdk-8u131-linux-x64.tar.gz  -C /usr/local/
  • 使用vim 编辑系统文件配置环境变量
vim /etc/profile
  • 在文件的最下面配置环境变量
# JAVA

export JAVA_HOME=/usr/local/jdk1.8.0_131

export JRE_HOME=/usr/local/jdk1.8.0_131/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
  • 让修改的文件生效
source /etc/profile
  • 运行javac,查看配置成功与否
javac

安装tomacat

  • 跳转到tomcat压缩包路径进行解压tomcat
tar -zxvf apache-tomcat-8.5.47.tar.gz -C /usr/local
  • 使用命令查看防火墙状态
firewall-cmd --state     #查看默认防火墙状态

systemctl stop firewalld   #临时停止firewall

systemctl disable firewalld  #开机禁用

systemctl enable firewalld  #开机启用
  • 如果防火墙是开启的,关闭防火墙
systemctl stop firewalld.service
  • 启动tomcat,在win上看能否访问 虚拟机ip:8080

安装mysql

  • 解压mysql
tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar 
  • 再移动并重命名一下
mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql
  • 创建mysql用户组和用户并修改权限
groupadd mysql

useradd -r -g mysql mysql
  • 创建数据目录并赋予权限
mkdir -p  /data/mysql              *#创建目录*

chown mysql:mysql -R /data/mysql   *#赋予权限*
  • 配置my.cnf
vim /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
#解决Linux上mysql识别表的时候带下划线的表名,会自动改为大写,例如:user_id Linux会识别成userId
lower_case_table_names = 1
  • 进入mysql的bin目录
cd /usr/local/mysql/bin/
  • 初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
  • (出现这个问题./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory)
yum -y install  libaio-devel.x86_64
  • 查看密码
cat /data/mysql/mysql.err
  • 启动mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
service mysql start
ps -ef|grep mysql
  • 登录mysql(bin目录下)
./mysql -u root -p   
  • 修改密码
SET PASSWORD = PASSWORD('123456');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;
  • 开启远程连接
use mysql 
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;

放行防火墙

  • 放行端口
firewall-cmd --add-port=6379/tcp --permanent
  • 重新加载防火墙
firewall-cmd --reload
  • 查看放行的所有端口
firewall-cmd --list-ports

脚本一键安装jdk、tomcat

# 解压JDK
tar -zxvf /usr/local/jdk-8u141-linux-x64.tar.gz -C /usr/local
#给解压之后的文件修改个名字
mv /usr/local/jdk1.8* /usr/local/jdk
#配置环境变量
echo "export JAVA_HOME=/usr/local/jdk">> /etc/profile
echo "export JAVA_JRE=/usr/local/jdk/jre">> /etc/profile
echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar:\$JRE_HOME/lib">> /etc/profile
echo "export PATH=\$JAVA_HOME/bin:\$JRE_HOME/bin:\$PATH">> /etc/profile
#更新配置文件
source /etc/profile

#检查是否配置成功
javac

#解压tomcat
tar -zxvf /usr/local/apache-tomcat-8.5.20.tar.gz -C /usr/local
#关闭防火墙
systemctl stop firewalld
#启动tomcat
/usr/local/apache-tomcat-8.5.20/bin/startup.sh

注意

​ 这个脚本由于执行的问题,需要重新更新配置文件,命令如下

source /etc/profile
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值