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