Linux基本命令及操作总结

文章目录

    • 一、基本命令
      • 1、开机和关机
      • 2、帮助指令
      • 3、时间日期类型
      • 4、查找命令
      • 5、系统目录结构
    • 二、常用基本命令
      • 1、目录管理
      • 2、文件属性
      • 3、文件内容查看
      • 4、Linux链接(了解)
      • 5、Vim编辑器
      • 6、账号管理
      • 7、用户组管理
      • 8、磁盘管理
      • 9、进程管理
      • 10、压缩和解压缩
    • 三、环境安装及项目部署
      • 1、JDK安装
      • 2、MySQL安装
      • 3、Tomcat安装
      • 4、简单Javaweb项目部署
      • 5、Maven安装
      • 6、Redis安装
      • 7、springboot项目部署
      • 8、Nginx安装
      • 9、Docker安装
      • 10、zookeeper安装
    • 四、shell编程
      • 1、shell脚本简单例子
      • 2、脚本的常用执行方式
      • 3、shell变量
      • 4、设置环境变量
      • 5、位置参数变量
      • 6、预定义变量
      • 7、运算符
      • 8、shell条件判断
      • 9、流程控制
      • 10、读取控制台输入 read
      • 11、shell函数

一、基本命令

1、开机和关机

	sync #将数据由内存同步到硬盘中
	
	shutdown #关机指令,
	shutdown  -h 10     	# 10分钟后关机
	shutdown  -h  20:25     #在当天20:25关机
	shutdown  -h now 		 #立马关机
	shutdown   -r now       #系统立马重启

	reboot      #重启
	halt       #关闭系统

	logout		#注销用户,退出登录shell

2、帮助指令

在对某个指令不熟悉时,可通过Linux提供的帮助指令来了解指令的使用方法。
再操作命令时,遇到某个命令记不太清了,也可通过  	Tab 命令 自动补齐或给出对应的命令提示选择
man		# 获得帮助信息
man [命令或配置文件]	
man ls  # 查看ls命令的帮助信息

在这里插入图片描述

help	# 获得shell内置命令的帮助信息
help [命令]

Linux基本命令及操作总结_第1张图片

3、时间日期类型

date  		#显示当前时间
date +%Y	#显示当前年份
date +%m	#显示当前月份
date +%d	#显示当前是哪一天
date "+%Y-%m-%d %H:%M:%S    #显示年月日时分秒

date -s [字符串时间]		#设置日期

cal  	#查看日历指令
cal [选项]	#不加选项显示本月日历

Linux基本命令及操作总结_第2张图片
Linux基本命令及操作总结_第3张图片
Linux基本命令及操作总结_第4张图片

4、查找命令

  • find:find指令将从指定目录向下递归的遍历其各个子目录,将满足条件的文件或者目录显示在终端
find [搜索范围] [选项]
find /home -name  t.txt	#按名字查找
find /opt -user	用户名	#按文件的 拥有者查找
find /  -size +20M		#从根目录  按 文件大小 来查找

Linux基本命令及操作总结_第5张图片
Linux基本命令及操作总结_第6张图片

  • locate:可以快速定位文件路径。利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。无需遍历整个文件系统,查询速度较快。
    注意:第一次使用要先 updatedb
locate  文件名	#搜索文件

在这里插入图片描述

  • grep 指令 和 管道符号 |
grep  #过滤查找
 |		#管道符,表示将前一个命令的处理结果输出传递给后面的命令处理。
grep [选项]	查找内容 源文件
	   -n	#显示匹配行及行号
	   -i	#忽略字母大小写
	   

Linux基本命令及操作总结_第7张图片

  • whereis:定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。
    在这里插入图片描述

5、系统目录结构

1、一切皆文件
2、根目录 /
  • /bin : bin是Binary的缩写,这个目录存放着最经常使用的命令。
  • /boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。(不要动)
  • /dev : dev是Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
  • letc :这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home :用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • lib:这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。(不要动)
  • /lost+found :这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)
  • /media : linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。(我们后面会把一些本地文件挂载在这个目录下)
  • /opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。(不用管)
  • /root :该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin : s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。.
  • /srv:该目录存放一些服务启动之后需要提取的数据。
  • /sys :这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs 。
  • /tmp:这个目录是用来存放一些临时文件的。用完即丢的文件,可以放在这个目录下,安装包!
  • /usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows 下的program files目录。
  • /usr/bin :系统用户使用的应用程序。
  • /usr/sbin :超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src :内核源代码默认的放置目录。
  • /var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
  • /www: 存放服务器网站相关的资源、环境、网站的项目

二、常用基本命令

1、目录管理

绝对路径:全称
相对路径:
cd #切换目录
./ #当前目录
cd ../  #返回上一级目录

Linux基本命令及操作总结_第8张图片
Linux基本命令及操作总结_第9张图片

# ls(列出目录!)
ls -a	# all,查看全部文件,包括隐藏文件
ls -l	# 列出所有的文件,包含文件的属性和权限,没有隐藏文件
 

在这里插入图片描述
Linux基本命令及操作总结_第10张图片
Linux所有命令都可以组合
Linux基本命令及操作总结_第11张图片

pwd #显示当前所在目录

Linux基本命令及操作总结_第12张图片

mkdir # 创建一个目录
mkdir -p  #创建多级目录
touch #创建文件

rmdir  #删除一个目录
rmdir -p #删除多级目录
rmdir -f #忽略不存在的文件,不会出现警告,强制删除!
rmdir -r #递归删除目录
rmdir -i #互动,删除询问是否删除

rmdir -rf /  #系统中所有的文件就被删除了,删库跑路

在这里插入图片描述
Linux基本命令及操作总结_第13张图片
rmdir 仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录 加 参数 -p

Linux基本命令及操作总结_第14张图片

cp #复制文件或目录
cp 原来的地方 新的地址

Linux基本命令及操作总结_第15张图片

mv  #移动文件 或目录  、 重命名文件
mv -f #强制
mv -u #只替换已经更新过的文件

Linux基本命令及操作总结_第16张图片
Linux基本命令及操作总结_第17张图片

2、文件属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

在这里插入图片描述

在Linux中第一个字符代表这个文件是目录、文件 或 链接文件 等等(如上图):

  • 当前为【d】则是目录
  • 当前为【-】则是文件
  • 当前为【l】则表示为链接文件(link file)
  • 若为【b】 表示为装置文件里面的可供存储的接口设备(可随机存取装置)
  • 若为【c】 表示为装置文件里面的串行端口设备,例如键盘(一次性读取装置)

其后的字符串中,以三个为一组,且均为【rwx】的三个组合,其中【r】代表可读(read);【w】代表可写(write);【x】代表可执行(execute)。

注意:这三个权限的位置不会改变,如果没有权限,就会出现减号【-】

每个文件的属性由左边第一部分的10个字符来确定:
在这里插入图片描述

chgrp #更改文件属组

chgrp [-R] 属组名 文件名  -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

chown # 更改文件属主,也可以同时更改文件属组
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名  文件名

Linux基本命令及操作总结_第18张图片

chmod #更改文件9个属性
chmod [-R] xyz 文件或目录  

Linux文件属性有两种设置方法,一种是数字、一种是符合。
Linux文件的基本权限有9个,分别是 owner/group/others三种身份各有自己的read/write/execute权限,

各权限的数字代表:  r:4       w:2      x:1		
可读可写不可执行  : rw-    4+2+0=6
可读可写可执行		:rwx    4+2+1=7

chomd 777  :文件赋予  所有用户   可读可写可执行

Linux基本命令及操作总结_第19张图片

3、文件内容查看

cat  #由第一行开始显示文件内容,用来读文章,或读取配置文件,都用cat
tac  #从最后一行开始显示,tac是cat的倒写

nl   #显示的时候,顺道输出行号!

more  #一页一页的显示文件内容  (空格代表翻页,enter代表向下看一行, :f  行号)
less  #与more相似,可往前翻页  (空格代表下翻页,enter代表向下看一行, :f  行号, 上下键代表上下翻动页面,退出 q命令)
# 【/字符】:向下查询要查询的字符串;  【?字符】:向上查询要查询的字符串

head  #只看头几行
head -n  #显示几行  head -n 5 ifcfg-eth0/文件名

tail  #只看尾部几行

grep abc test.txt	#在test.txt文件中查找 abc 关键字
grep ^abc test.txt	#在test.txt文件中查找以 abc 开头的关键字
grep [0-9] test.txt	 #显示文件中所有包含数字对的行

sed -n '/abc/p'	test.txt	#查看只包含关键词“abc”的行
sed -n '1,5p;5q' test.txt	#查看从第一行到第五行的内容
sed -n '5p;5q' test.txt		#查看第五行内容

sed '/^$/d' t.txt		#删除t.txt文件中的所有空白行
sed -e '8d' t.txt		#删除文件中的第8行
sed 's/eee/ddd/g' t.txt		#将文件中的 eee 替换成 ddd
sed -e 's/*$//' t.txt		#删除每一行最后的空白字符
# sed 默认不会真正修改原文件的内容

paste file1 file2 #合并两个文件内容
sort file1 file2  #排序两个文件内容
comm -1 file1 file2 #比较两个文件,去除file1所含内容
	 -2				#比较两个文件,去除file2所含内容
	 -3 			#比较两个文件,去除两文件共有内容

网络配置目录  :  cd    /etc/sysconfig/network-scripts
ifconfig    :   查看网络配置

Linux基本命令及操作总结_第20张图片
Linux基本命令及操作总结_第21张图片

Linux基本命令及操作总结_第22张图片
Linux基本命令及操作总结_第23张图片
Linux基本命令及操作总结_第24张图片
Linux基本命令及操作总结_第25张图片
Linux基本命令及操作总结_第26张图片

4、Linux链接(了解)

Linux的链接分为两种:硬链接、软硬件

  • 硬链接: A—B,假设B是A的硬链接,那么他们两个指向了同一个文件!允许一个文件拥有多个路径,用户可以通过这种机制建立硬链接到一些重要文件上,以防误删
  • 软链接:类似window下的快捷方式,删除的源文件,快捷方式也访问不了
ln     #创建链接

touch  #创建文件

echo   # 输入字符串,也可以输入到文件中    echo "i love you"  >>f1

Linux基本命令及操作总结_第27张图片
删除f1之后,查看f2,f3的区别:
Linux基本命令及操作总结_第28张图片

5、Vim编辑器

Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富。vi是老式的字符处理器。
在Linux中,必须会Vim (查看内容、编辑内容、保存内容)

三种使用模式:
  • 命令模式(Command mode)
  • 输入模式(Insert mode)
  • 底线命令模式(Last line mode)

作用:

命令模式: 用户刚刚启动vi/vim,便进入了命令模式
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符,比如:
	i  # 切换到输入模式,以输入字符
	x  # 删除当前光标所在处字符# 切换到底线模式命令,以在最低一行输入命令

 命令模式只有一些最基本的命令
 若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式

输入模式:在命令模式下,按下i,就切换到输入模式
	字符按键及Shift组合  # 输入字符
	ENTER    # 回车键、换行
	BACKSPACE # 退格键,删除光标 前 一个字符
	DEL  #删除键、删除光标 后 一个字符
	方向键  #在文本中移动光标
	HOME/END  #移动光标到行首/行尾
	Page Up/Page Down  #上/下翻页
	Insert  #切换光标为输入/替换模式,光标将变成竖线/下划线
	ESC  #退出输入模式,切换到命令模式

底线模式:在命令模式下按 : (英文冒号),就进入了底线模式,光标就移动到了最底下,就可以在这里输入一些底线命令
	q   # 退出程序
	w   # 保存文件
	wq  # 保存并退出
	w!  # 文件属性为只读时,强制写入
	q!  # 强制离开不存储刚修改过的文件
	ZZ  # 若未修改,不存储离开;若被修改过,则存储后离开
	set nu  # 设置行号
	set nonu  #取消行号


Linux基本命令及操作总结_第29张图片
在这里插入图片描述
在这里插入图片描述
Linux基本命令及操作总结_第30张图片
新建或编辑文件,按 i 进入编辑模式,编写内容,编写完后 按 esc 退出编辑模式,之后按 :进入底线模式 wq 保存退出!

6、账号管理

	Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
	用户的账号,一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面可以帮助用户组织文件,并为用户提供安全性保护

每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。

实现用户账号管理,要完成的工作主要有:

  • 用户账号的添加、删除、修改
  • 用户口令的管理
  • 用户组的管理
useradd   #添加用户

useradd -选项  用户名
		-m   #自动创建这个用户的主目录
		-c   #指定一段注释性描述
		-d   #指定用户主目录,
		-g  用户组	 #指定用户所属的附加组
		-G  用户组
		-s  #指定用户的登录shell
		-u 用户号, #指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号
本质:Linux中一切皆为文件,这里的添加就是往某个文件中 写入用户信息    /etc/passwd 

Linux基本命令及操作总结_第31张图片

userdel  #删除用户

userdel  -r 用户名    #删除用户时将他的目录页一并删掉!

在这里插入图片描述

usermod  #修改用户

Linux基本命令及操作总结_第32张图片
在这里插入图片描述

su	# 切换用户
su -root	# 在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加 【-】

	#表示超级用户,即 root用户
	$表示普通用户

exit #退出当前用户

Linux基本命令及操作总结_第33张图片
Linux基本命令及操作总结_第34张图片
在这里插入图片描述


hostname  #查看主机名

passwd   #修改密码
passwd -l 用户名 #锁定用户,锁定之后这个用户就不能登录了
passwd -d 用户名 #没有密码不能登录

Linux基本命令及操作总结_第35张图片
在这里插入图片描述

7、用户组管理

属主、数组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组管理涉及用户组的添加、删除、修改。组的增加、删除、修改实际上是对 /etc/group  文件的更新。
groupadd  #创建一个用户组
groupadd -g #指定id

在这里插入图片描述
在这里插入图片描述
创建完用户组后可以得到一个组的id,这个id是可以指定的,若不指定则自增。
在这里插入图片描述
在这里插入图片描述

groupdel #删除用户组

在这里插入图片描述

groupmod #修改用户组的权限信息和名字
groupmod -g  -n 

Linux基本命令及操作总结_第36张图片
在这里插入图片描述

8、磁盘管理

df # 列出文件系统整体的磁盘使用量

du # 检查磁盘空间的使用量
du -sm /* #检查根目录下每个目录所占用的容量

Linux基本命令及操作总结_第37张图片
Linux基本命令及操作总结_第38张图片

mount #挂载
mount /dev/kuang /mnt/kuang		#将 外部设备kuang 挂载到mnt 目录下,来实现访问!

umount #卸载
umount -f #强制卸载

9、进程管理

  • 在Linux中,每一个程序都有自己的一个进程,每个进程都有一个id
  • 每一个进程,都会有一个父进程
  • 进程可以有两种存在方式:前台 和 后台运行
  • 一般服务都是后台运行的,基本程序都是前台运行的!
ps  #查看当前系统中正在执行的各种进程信息

ps -xx :
	-a  #显示当前终端运行的所有的进程信息
	-u  #以用户的信息显示进程
	-x  #显示后台运行进程的参数!

ps -aux  #查看所有的进程
ps -aux|grep mysql  #查看MySQL相关的进程
ps -aux|grep redis  #查看redis相关的进程

	|    #在Linux中表示 管道符 
	grep #查找文件中符合条件的字符串!

ps -ef  #可以查看到父进程的信息
ps -ef|grep mysql 

进程树
pstree -pu #查看目录树结构
	-p  #显示父id
	-u  #显示用户组

kill #结束进程
kill -9 进程id	#强制终止
top		#查看动态/执行进程状态(类似于任务管理器)

PID to kill	 进程ID	#要杀死进程ID

netstat -anp	#查看系统网络情况
		-an		#按一定顺序排列输出
		-p		#显示哪个进程在调用
netstat -anp |grep	mysql

10、压缩和解压缩

gzip			#用于压缩文件
		gzip 文件		#只能将文件压缩为  *.gz文件	不保留原来的文件
		
gunzip		#用于解压缩
		gunzip	文件.gz		#解压文件

Linux基本命令及操作总结_第39张图片
Linux基本命令及操作总结_第40张图片

zip		#压缩文件
	zip [选项]	xxx.zip		#将要压缩的内容 (文件或目录)
			-r	#递归压缩,即压缩目录
			
unzip	#解压	项目打包常用
		-d<目录>		#指定压缩后文件的存放目录

Linux基本命令及操作总结_第41张图片
Linux基本命令及操作总结_第42张图片

tar  		# 打包指令,最后打包后的文件是 .tar.gz  文件
tar	[选项]	xxx.tar.gz	打包内容		#打包目录,压缩后的文件格式是.tar.gz
	-c		#产生.tar 打包文件

tar -zcvf myhome.tar.gz	/home/		#将home下的所有目录文件打包
tar -zxvf	a.tar.gz 		#将 a.tar.gz  解压到当前目录
tar  -zxvf	a.tar.gz  -C /home/	#将文件解压到 home目录

Linux基本命令及操作总结_第43张图片
Linux基本命令及操作总结_第44张图片

三、环境安装及项目部署

安装软件一般有三种方式: - rpm			-解压缩      -yum在线安装
  • rpm:一种用于互联网下载包的打包及安装工具,RedHat软件包管理工具。
rpm -qa | grep firefox		#查询已安装的 rpm列表可用于查询是否已经安装
rpm -q 软件包名			#查询软件包是否已经安装
rpm -qi 软件包名			# 查询软件包信息
rpm -e 软件包名[firefox]		# 卸载rpm包
rpm -ivh				#安装
  • 解压缩:下载 .tar.gz 软件安装文件,解压即可

  • yum在线安装:一个shell前端软件包管理器,基于RPM包管理,能从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次性安装所有的依赖包。前提是必须联网

yum list|grep xx 软件列表		#查询yum服务器是否有需要安装的软件
yum install xxx					#下载安装

1、JDK安装

JDK安装运用 rpm 方式安装:

1、下载rpm包,并上传到Linux
jdk-8u221-linux-x64.rpm

2、查询是否已经安装jdk
java -version			#查看Java版本
rpm -qa | grep jdk		#查询已安装的Java rpm列表
若已经安装,需要卸载
rpm -e --nodeps jdk1.8-1.8.0_221-fcs.x86_64		#强制卸载
卸载完后,即可安装jdk

3、安装Java环境
rpm -ivh jdk-8u221-linux-x64.rpm

4、配置环境变量:				/etc/profile
vim /etc/profile

在文件最后添加一下配置:

JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
CLASSPATH=%JAVA_HOME%lib;%JAVA_HOME%/jre/lib
PATH=$JAVA_HOME/bin;$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME

#跟windows配置一样配置jdk、jre

	

Linux基本命令及操作总结_第45张图片
在这里插入图片描述
Linux基本命令及操作总结_第46张图片
在这里插入图片描述
Linux基本命令及操作总结_第47张图片
注意: 再次连接(重新连接服务器)后发现输入Linux命令如 ls,vim等出现错误,形如:-bash: ls: command not found。 解决办法是:先执行以下命令

export PATH=/bin:/usr/bin:$PATH

然后修改jdk的配置为

vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export PATH CLASSPATH JAVA_HOME JRE_HOME

最后执行配置文件

source /etc/profile

2、MySQL安装

MySQL安装会用到三种方式,可先安装tomcat,了解相关操作:

1、下载mysql的 x.rpm-bundle.tar 包,并上传到Linux
mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar

2、查看是否已经安装mysql
rpm -qa|grep mysql
若安装需卸载
rpm -e --nodeps mysql-libs-....

3、解压上传的压缩文件
tar -xvf  mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar	#注意不是.tar.gz文件,解压应该用 -xvf

解压后会有多个文件,实际只需要服务端和客户端两个:
mysql-community-client-5.7.31-1.el7.x86_64.rpm	#客户端
mysql-community-server-5.7.31-1.el7.x86_64.rpm	#服务端

4、安装MySQL的服务端
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm

5、安装MySQL的客户端
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm

在这会发现安装服务端和客户端都会报一些错误,导致无法安装成功

Linux基本命令及操作总结_第48张图片

mysql-community-client(x86-64) >= 5.7.9 is needed by mysql-community-server-5.7.31-1.el7.x86_64
mysql-community-common(x86-64) = 5.7.31-1.el7 is needed by mysql-community-server-5.7.31-1.el7.x86_64
该错误说明,安装服务端需要先安装客户端,且还需要安装mysql-community-common-5.7.31-1.el7.x86_64.rpm

根据所缺安装mysql-community-common-5.7.31-1.el7.x86_64.rpm 出现警告,出现一些文件之类的,看似安装成功,实则没有
安装客户端,报错提示需先安装mysql-community-libs-5.7.31-1.el7.x86_64.rpm
安装mysql-community-libs-5.7.31-1.el7.x86_64.rpm报错	:
mysql-community-common(x86-64) >= 5.7.9 is needed by mysql-community-libs-5.7.31-1.el7.x86_64
mariadb-libs is obsoleted by mysql-community-libs-5.7.31-1.el7.x86_64
该错误说明:需要先安装common,且mysql-community-libs与mariadb-libs冲突
解决办法,先卸载mariadb-libs,然后再安装其他

以上都安装好后,最后安装 服务端,出现错误:
libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.31-1.el7.x86_64
libnuma.so.1(libnuma_1.1)(64bit) is needed by mysql-community-server-5.7.31-1.el7.x86_64
libnuma.so.1(libnuma_1.2)(64bit) is needed by mysql-community-server-5.7.31-1.el7.x86_64
该错误指的是,这里缺少numactl,则需先安装numactl
之后再安装服务端,安装成功

Linux基本命令及操作总结_第49张图片
Linux基本命令及操作总结_第50张图片
在这里插入图片描述
Linux基本命令及操作总结_第51张图片

最后整理可知,错误提示缺少什么就先装什么,与什么相冲突,就删除什么
#安装MySQL5.7步骤整理如下:

4、卸载mariadb-libs
rpm -e --nodeps mariadb-libs-1:5.5.68-1.el7.x86_64		#mariadb-libs文件名可在安装common的警告信息中找到

5、安装common
rpm -ivh mysql-community-common-5.7.31-1.el7.x86_64.rpm

6、安装libs
rpm -ivh mysql-community-libs-5.7.31-1.el7.x86_64.rpm

7、安装客户端client
rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm

# 以上文件在解压的MySQL软件包中存在,用rpm方式安装即可
# libnuma在解压的软件包中没有,则使用yum方式安装

8、yum方式安装numactl
yum -y install numactl

9、安装服务端
rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm

# 此时MySQL安装成功,还需进行以下配置

10、查看mysql服务状态
service mysqld status

11、启动mysql服务
systemctl start mysqld.service 	或	service mysqld start

12、查看当前MySQL登录密码
grep "password" /var/log/mysqld.log

13、登录mysql
mysql -u root -p

14、修改密码
set password = password('root');
#这里会提示密码设置不规范,不安全,建议密码大于8位,字母,数字,特殊符号混合,要有大写字母,尝试即可

# 此时已经可以在Linux中登录MySQL,正常使用MySQL了
# 如果还需要让外网访问,跟tomcat一样,需要让防火墙放行端口

15、退出登录mysql
exit 	或 	quit

16、配置mysql运行其他用户访问
#修改mysql库的user表,将host项,从localhost改为%。
#%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip
#比如可以将localhost改为192.168.1.123,
#这表示只允许局域网的192.168.1.123这个ip远程访问mysql。
mysql>use mysql;
mysql> update user set host = '%' where user = 'root';
mysql>select host, user from user;
mysql> flush privileges;		# 刷新MySQL的系统权限相关表

或者

(建议使用以下方法,此操作在原来的基础上添加授权,不会改变原有的数据)
# 设置远程访问(使用root密码):
grant all privileges on *.* to 'root'@'%' identified by 'root';
grant all privileges on 数据库名.表名 to '用户名'@'主机' identified by '密码'
	# 星号*代表所有的数据库,数据库表;
	# %代表允许任意host(主机)访问;
	# 密码尽量复杂,mysql可能不允许太简单的密码
# 若指向指定某一ip主机访问,可使用以下设置
grant all privileges on *.* to 'root'@'192.168.1.123' identified by 'root';
	# 此时可以在ip为192.168.1.123的主机上,以用户名和密码为root连接
flush privileges;	# 可先查询一下user表是否有刚授权的记录,若没有,执行该语句刷新

17、防火墙开发端口
# 可先在登录MySQL的时候,查询MySQL的端口号
show global variables like 'port';		#查看MySQL的端口号

firewall-cmd --zone=public --add-port=3306/tcp --permanent		#开端口命令
systemctl restart firewalld.service			#重启防火墙
firewall-cmd --list-ports	#查看端口信息,查看3306端口是否被放行

3、Tomcat安装

tomcat采用解压 .tar.gz 文件方式:

1、下载tomcat 的tar.gz包,并上传到Linux
apache-tomcat-9.0.50.tar.gz

2、解压这个文件
tar -zxvf apache-tomcat-9.0.50.tar.gz

3、启动tomcat测试!
./startup.sh	#执行		#若未配置环境变量需要进入到tomcat的bin目录下
./shutdown.sh	#停止

启动后,此时只能在Linux本地访问tomcat,外网如windows本机电脑仍不能访问
需让防火墙放行该端口号

4、防火墙放行端口号
firewall-cmd --state		#查看防火墙状态(是否开启)
# 若为	not running ,则
systemctl start firewalld.service			#开启防火墙
firewall-cmd --list-ports	#查看端口信息,查看8080端口是否被放行
#若未放行,则
firewall-cmd --zone=public --add-port=8080/tcp --permanent		#开端口命令
systemctl restart firewalld.service			#重启防火墙

再次查看端口信息可见8080端口已被开放,此时在外网可以访问

在这里插入图片描述
Linux基本命令及操作总结_第52张图片
Linux基本命令及操作总结_第53张图片
出现以下界面,说明tomcat安装成功且可在外网访问
Linux基本命令及操作总结_第54张图片

systemctl status firewalld		#查看firewall服务状态
service firewalld start			#开启firewall服务
service firewalld restart		#重启firewall服务
service firewalld stop			#关闭firewall服务

chkconfig --list	#查看服务
chkconfig --list | grep mysql	#查看MySQL服务

chkconfig iptables on	#在所有运行级别下开启防火墙
chkconfig iptables off	#在所有运行级别下关闭防火墙

#查看防火墙规则
firewall-cmd --list-all			#查看全部信息
firewall-cmd --list-ports	#只查看端口信息
firewall-cmd --state		#查看防火墙状态(是否开启)

#开启端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent		#开端口命令
	命令含义:
	--zone		#作用域
	--add-port=8080/tcp		#添加端口,格式为:端口/通讯协议
	--permanent				#永久生效,没有此参数重启后失效

firewall-cmd --zone=public --remove-port=8080/tcp --permanent #关闭8080/tcp端口

systemctl start firewalld.service			#开启防火墙
systemctl restart firewalld.service			#重启防火墙

4、简单Javaweb项目部署

安装完jdk、MySQL、tomcat后,就可以在搭建一个Javaweb项目了。

1)准备一个在本地可以成功运行并访问的项目,将项目打包为war包:(注意:在打包之前将本地项目的jdk版本换成与Linux安装版本相同,不然可能会造成部署项目后访问404的问题;同时把配置文件中连接数据库的用户名和密码改为Linux连接数据库的用户名和密码)
Linux基本命令及操作总结_第55张图片
Linux基本命令及操作总结_第56张图片
Linux基本命令及操作总结_第57张图片
2)导出war包:
Linux基本命令及操作总结_第58张图片
Linux基本命令及操作总结_第59张图片
等一会就可以在刚刚选择war包存放位置中找到war包。

3)将导出的war包,和该项目要连接的数据库的.sql文件,上传到Linux中tomcat的webapps目录下(其他目录也可以,但不会tomcat不会自动解压,上传文件可用xftp)
Linux基本命令及操作总结_第60张图片

4)查看tomcat的webapps下有没有war包解压的对应文件,若没有,启动一下tomcat(运行tomcat的脚本)
./startup.sh	#执行		#若未配置环境变量需要进入到tomcat的bin目录下

5)进入到数据库,在Linux的MySQL中创建项目所要用的数据库
create database evaluation;		#创建数据库,数据库名要与本地使用的一样
use evaluation;					#使用该数据库
source /opt/apache-tomcat-9.0.50/webapps/evaluation.sql		#将上传的.sql的结构和数据存储到当前使用的数据库中

6)在本地访问该项目,即可访问成功
http://主机地址(服务器ip):端口号/项目名
http://159.75.220.138:8080/evaluation/

7)可进入到tomcat的server.xml文件中修改一些配置
 cd /opt/apache-tomcat-9.0.50/conf/server.xml

8)可在tomcat的logs看到一些日志信息的文件
catalina.out	#控制台输出信息文件
tail -f catalina.out 	#实时更新日志文件,访问项目,控制台输出可看到
Ctrl+c 是退出tail命令。

localhost_access_log.2021-07-22.txt		#该文件会记录当天项目访问的信息,如发送了一个post请求

注意:若出现访问项目后静态资源(如:css、图片等)无法访问,或失效的问题,检查一下浏览器访问的地址有没有项目名,若没有,则需要将项目中的路径都需要从当前项目下开始获取。 若是使用的是jsp,解决如下:

<%
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() +request.getContextPath();
%>
<base href="<%=basePath %>">
然后引入静态资源如下:
<link href="<%=basePath %>/resource/css/course.css" rel="stylesheet">
或者使用
${pageContext.request.contextPath }
如:
<link href="${pageContext.request.contextPath }/resource/css/course.css" rel="stylesheet">

5、Maven安装

1、下载maven 的tar.gz包,并上传到Linux
apache-maven-3.5.4-bin.tar.gz

2、解压这个文件
tar -zxvf apache-maven-3.5.4-bin.tar.gz

3、配置文件
cd apache-maven-3.5.4/
cd conf

在这里插入图片描述
Linux基本命令及操作总结_第61张图片

6、Redis安装

1、下载tomcat 的tar.gz包,并上传到Linux
redis-6.2.5.tar.gz

2、解压这个文件
tar -zxvf redis-6.2.5.tar.gz

3、进入到解压后的文件目录
cd redis-6.2.5

4、编译
make

5、安装
make install

6、进入到/usr/local/bin,可看到redis安装完成后的一些文件
cd /usr/local/bin

redis-benchmark :性能测试工具
redis-check-rdb :
redis-sentinel:redis集群使用
redis-check-aof :修复有问题的AOF文件
redis-cli   :客户端,操作入口
redis-server :redis服务启动命令

7、启动
前台启动 :redis-server		#ctrl + C 退出

后台启动:
进入到redis解压文件目录的,找到redis.conf修改
daemonize no 为
daemonize yes

进入到bin目录
cd /usr/local/bin
redis-server /usr/local/redis-6.2.5/redis.conf

ps -ef | grep redis		#查看redis进程

redis-cli			#通过客户端连接redis

/usr/local/bin/redis-cli

shutdown	/	exit	#关闭

8、修改配置文件
# 若要实现远程连接,找到bind,注释掉
bind 127.0.0.1 -::1		#只可本地连接
# 关闭保护模式,找到以下配置,将yes改为no
protected-mode yes		#开启保护模式

# 默认端口号6379
port 6379		# 若使用的是购买的服务器,建议启动redis服务之前更改端口号,不然很容易被攻击

#修改端口号后,连接
redis-cli -p 端口号

tcp-backlog 511	# backlog队列总和=未完成三次握手队列+已完成三次握手队列。
timeout 0		#永不超时
tcp-keepalive 300		#每隔三百秒检测是否活着
# requirepass foobared	# 找到这行注释可在下面设置密码如123
requirepass  123
#登录报错:NOAUTH Authentication required 表示要密码 则输入 auth 密码
auth 123

ps -ef | grep redis		#查看redis进程	id

kill -9 进程id		#杀死redis server进程

进入到bin目录重启redis
cd /usr/local/bin
redis-server /usr/local/redis-6.2.5/redis.conf


9、防火墙放行端口号
firewall-cmd --state		#查看防火墙状态(是否开启)
# 若为	not running ,则
systemctl start firewalld.service			#开启防火墙
firewall-cmd --list-ports	#查看端口信息,查看6379端口是否被放行
#若未放行,则
firewall-cmd --zone=public --add-port=6379/tcp --permanent		#开端口命令
systemctl restart firewalld.service			#重启防火墙

再次查看端口信息可见6379端口已被开放,此时在外网可以访问

Linux基本命令及操作总结_第62张图片
Linux基本命令及操作总结_第63张图片

Linux基本命令及操作总结_第64张图片
Linux基本命令及操作总结_第65张图片
Linux基本命令及操作总结_第66张图片
在这里插入图片描述
在这里插入图片描述
Linux基本命令及操作总结_第67张图片

Linux基本命令及操作总结_第68张图片
redis的主从复制:

主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,master以写为主,slave以读为主。

原理:

  • 当从连接上主服务之后,从服务向主服务发送进行数据同步消息。
  • 主服务器接到从服务器发送过来的同步消息,把主服务器数据进行持久化,rdb文件,把rdb文件发送给从服务,从服务器拿到rdb文件进行读取。
  • 每次主服务器进行读写操作之后,和从服务进行数据同步。
配置主从复制(一主两从):
1、创建/myredis文件夹
mkdir myredis

2、复制redis.conf配置文件到文件夹中

3、配置一主两从,即创建三个配置文件redis6379.conf、redis6380.conf、redis6381.conf
vim redis6379.conf

#在redis6379.conf写入以下内容
include /myredis/redis.conf		#引入redis.conf配置文件中的公共部分
pidfile /var/run/redis_6379.pid		#pid文件位置
port 6379						#端口号
dbfilename dump6379.rdb			#rdb文件名称

#以同样的方式创建redis6380.conf、redis6381.conf
cp redis6379.conf redis6380.conf
#然后修改相关6379为6380

4、分别启动服务
redis-server /myredis/redis6379.conf
redis-server /myredis/redis6380.conf
redis-server /myredis/redis6381.conf

redis-cli -p 6379	#连接端口号为6379的服务

info replication	#打印主从复制的相关信息(查看主从)

# 此时可看到三个服务的角色都是主服务

5、将redis6379作为主服务,redis6380和redis6381作为从服务
#分别连接redis6380、redis6381,并执行以下命令
slaveof  ip  port  
slaveof 127.0.0.1 6379

#此时查看主从信息,可见6379服务下有两个从服务;

若途中从服务其中有一个挂掉了(如退出连接、关闭服务),且期间主服务又进行了写操作。
之后,再重新启动这个挂掉的从服务机,查看主从信息为主机,
即,从服务挂掉后重连接,需要重新配置主从关系,即执行命令
slaveof 127.0.0.1 6379
再查看该从服务数据,数据是直接从主服务复制过来的。

若途中主服务挂掉了(如退出连接)
此时查看从服务机的主从关系,可见从服务仍为从服务,且还认定之前的主服务机。重新连接主服务,主服务也还认可之前的从服务。

#反客为主
 slaveof no one 	#将从机变为主机

7、springboot项目部署

1)准备一个spring boot项目,将其jdk、mysql、redis都能连接到Linux上安装的环境,打包项目成jar包
Linux基本命令及操作总结_第69张图片
然后在target包下生成有jar包

2)将打包的jar包上传到linux中
Linux基本命令及操作总结_第70张图片

3)执行jar包

nohup java -jar xxx.jar &

# 可能会出现错误:nohup: ignoring input and appending output to ‘nohup.out’
可忽略该错误,按ctrl+C退出  或 用以下命令执行
nohup java -jar campusos-2.0.0-SNAPSHOT.jar > nohup.out 2>&1 &

在这里插入图片描述
Linux基本命令及操作总结_第71张图片

4)开放端口

springboot项目配置文件中配置的端口号,在Linux中需放行
#如该项目的端口号为8888
firewall-cmd --state		#查看防火墙状态(是否开启)
# 若为	not running ,则
systemctl start firewalld.service			#开启防火墙
firewall-cmd --list-ports	#查看端口信息,查看8888端口是否被放行
#若未放行,则
firewall-cmd --zone=public --add-port=8888/tcp --permanent		#开端口命令
systemctl restart firewalld.service			#重启防火墙

5)在本地访问该项目端口号,即可访问成功

http://主机地址(服务器ip):端口号/项目名
http://159.75.220.138:8888

8、Nginx安装

Nginx详细笔记:Nginx基本入门

9、Docker安装

Docker详细笔记:Docker自学笔记

1、检测Centos版本
cat /etc/redhat-release				#版本不一样,安装命令可能不一样
CentOS Linux release 7.9.2009 (Core)

2、下载软件
yum -y install 包名			#安装命令
yum -y install docker

3、启动docker
systemctl start docker

4、查看docker服务状态
systemctl status docker

10、zookeeper安装

1、将下载的安装包上传到Linux服务器
apache-zookeeper-3.5.7-bin.tar.gz

2、解压这个文件
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
#可以给解压后的文件夹重命名
mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7

3、进入解压后的文件
cd zookeeper-3.5.7/
	cd bin		#启动脚本文件
	cd conf		#配置文件
#修改配置文件的名称
mv zoo_sample.cfg  zoo.cfg

4、在解压文件目录下创建一个目录专门放zookeeper数据
mkdir zkData

5、修改配置文件
vim zoo.cfg

dataDir=/opt/zookeeper-3.5.7/zkData
clientPort=2181		#默认端口

6、启动服务
./bin/zkServer.sh  start

7、查看服务状态
./bin/zkServer.sh status

8、查看进程
jps
jps -l

9、客户端连接
./bin/zkCli.sh

10、退出
quit

四、shell编程

shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一些程序。

shell是用户与Linux操作系统沟通的桥梁

1、shell脚本简单例子

	文件名 (后缀) 一般 以 .sh 结尾,以  #!/bin/bash  开头
	单行注释:  #
	多行注释:	:<

2、脚本的常用执行方式

  • 输入脚本的绝对路径或相对路径
    先赋予shell脚本文件 +x 权限,再执行
chmod u+x myShell.sh
chmod 744 myShell.sh

Linux基本命令及操作总结_第72张图片在这里插入图片描述

  • sh 命令 或 bash 命令运行(不需要权限),不推荐使用
    在这里插入图片描述

3、shell变量

Shell变量分为:系统变量  和  用户自定义变量。
系统变量:$HOME 、$PWD、$SHELL、$USER     (可直接使用,如:echo  $HOME)
#!/bin/bash

echo "hello world!"
echo "PATH=$PATH"	#输出系统变量
echo "user=$USER"

在这里插入图片描述

set # 显示当前shell中所有变量

shell变量的自定义(基本语法):

  • 定义变量:变量=值
  • 撤销变量:unset 变量
  • 声明静态变量:readonly 变量 (注意:不能unset)

shell变量定义规则:

  • 变量名可以由字母、数字和下划线组成,但不能以数字开头
  • 等号两边不能有空格
  • 变量名称一般习惯为大写
#!/bin/bash
# echo "hello,world"
A=100                   #定义一个变量
echo "A=$A"             #输出一个变量
unset A                 #撤销一个变量
echo "A=$A"

-----------
readonly  A=99          #定义一个静态变量
echo "A=$A"

unset A                 #撤销一个静态变量(错误操作)
echo "A=$A"


Linux基本命令及操作总结_第73张图片Linux基本命令及操作总结_第74张图片
Linux基本命令及操作总结_第75张图片
将命令的返回值赋给变量

  • A= ’ ls-la ` 反引号,运行里面的命令,并把结果返回给变量A
  • A=$(ls-la) 等价于 反引号
    Linux基本命令及操作总结_第76张图片
    Linux基本命令及操作总结_第77张图片

4、设置环境变量

基本语法:

  • export 变量名=变量值 (将shell变量输出为环境变量)
  • source 配置文件 (将修改后的配置文件信息立即生效,类似于刷新)
  • echo $变量名 (查询环境变量的值)
TOMCAT_HOME=/opt/tomcat		#定义一个自己的环境变量
export  TOMCAT_HOME		#输出环境变量

#保存文件后,刷新,然后可以直接在命令行查看 环境变量的 值
echo $TOMCAT_HOME		#查看环境变量的值

5、位置参数变量

当执行一个shell脚本时,如果希望获取到命令行的参数信息,可以使用位置参数变量

基本语法:

  • $n : n为数字,$0代表命令本身,$1~$9代表第一到第九个参数,十以上的参数,需要用大括号包含,如${10}
  • $* : 代表命令行中所有的参数,把所有的参数看成一个整体
  • $@ : 代表命令行中所有的参数,但 把每个参数区别对待
  • $# : 代表命令行中所有参数的个数
#!/bin/bash

# 获取到各个参数
echo "$0 $1 $2"		# $0代表命令本身,$1~$9代表第一到第九个参数
echo "$*"		# 代表命令行中所有的参数
echo "$@"		# 代表命令行中所有的参数
echo "参数个数=$#"	# 代表命令行中所有参数的个数

Linux基本命令及操作总结_第78张图片

6、预定义变量

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

基本语法:

  • $$ : 当前进程的进程号 (PID)
  • $! : 后台运行的最后一个进程进程号 (PID)
  • $? :最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪个值,由命令自己决定),则证明上一个命令执行不争取了。
#!/bin/bash
echo "当前的进程号=$$"
# 后台的方式运行 myShell.sh
./myShell.sh &
echo "最后一个进程的进程号=$!"
echo "执行的值=$?"
                  

Linux基本命令及操作总结_第79张图片

7、运算符

基本语法:

  1. “$((运算符))” 或 “$[运算符]”
  2. expr m + n (注意:expr运算符间要有空格
  3. expr m - n
  4. expr \* ,/,% =》 乘、除、取余
#!/bin/bash

# 第一种方式 "$((运算符))"

RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"

# 第二种方式  "$[运算符]"

RESULT2=$[(2+3)*4]      # 推荐使用
echo "result2=$RESULT2"

# # 第三种方式 使用expr
TEMP=`expr 2 + 3`       # 注意是反引号引起来
RESULT3=`expr $TEMP \* 4`
echo "result3=$RESULT3"

# 求两个参数的和
SUM=$[$1+$2]    #命令行输入的两个参数
echo "SUM=$SUM"

Linux基本命令及操作总结_第80张图片
Linux基本命令及操作总结_第81张图片

8、shell条件判断

基本语法:

  • [ condition ] : 非空返回true,可使用 $? 验证(0为true,大于1为false)【注意 condition 前后都要有空格】
  • 常用的判断条件
    1)两个整数的比较
    =		字符串比较
    -lt	 	小于 (less than)
    -le		小于等于(less than or equal) 
    -gt		大于  (greater than)
     -ge		大于等于 (greater than or equal)  
     -eq		等于
     -ne 		不相等(not equal)
    
    2)按文件权限进行判断
    -r		有读的权限
    -w		有写的权限
    -x		有执行的权限
    
    3)按照文件类型进行判断
    -f		文件存在并且是一个常规的文件
    -e 		文件存在
    -d		文件存在并是一个目录
    
#!/bin/bash

# 1、判断“ok”是否等于“ok”

if [ "ok" = "ok" ]  # = 字符串比较
then
        echo "equal"
fi

# 2、判断23是否大于等于22

if [ 23 -gt 22 ]
then
        echo "大于"
fi

# 3、判断一个文件是否存在

if [ -e /home/test.txt ]
then
        echo "存在"
fi
~     

Linux基本命令及操作总结_第82张图片

Linux基本命令及操作总结_第83张图片

9、流程控制

  • if 、else
#!/bin/bash
# 编写if else ,如果输出参数,大于等于60,输出及格了;小于60,输出不及格

if [ $1 -ge 60 ]
then
        echo "及格了"
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi

Linux基本命令及操作总结_第84张图片
在这里插入图片描述

  • case
#!/bin/bash

# 当命令行参数是 1 时,输出“周一”,是 2 时,就输出“ 周二 ” ,否则其他

case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "其他"
;;
esac

Linux基本命令及操作总结_第85张图片
在这里插入图片描述

  • for循环
#!/bin/bash

# 1、打印命令行输入的参数

for i in "$*"    # $* 代表命令行所有的参数,当作一个整体
do
        echo "the num is $i"
done
echo "=============="

for j in "$@"   # $@代表命令行中所有的参数,但 **把每个参数区别对待
do
        echo "the num is $j"
done

Linux基本命令及操作总结_第86张图片
Linux基本命令及操作总结_第87张图片

#!/bin/bash

# 1、从1加到100的值输出显示
SUM=0
for((i=1;i<=100;i++))
do
        SUM=$[$SUM+$i]
done
echo "sum=$SUM"

Linux基本命令及操作总结_第88张图片
在这里插入图片描述

  • while
#!/bin/bash

# 1、从命令行输入一个数n,计算1+2+...+n 的值是多少

SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
echo "sum=$SUM"

Linux基本命令及操作总结_第89张图片
在这里插入图片描述

10、读取控制台输入 read

read(选项)(参数)
选项:
	-p:指定读取值时的提示符;
	-t:指定读取值时等待的时间(秒),如果没有在指定时间内输入,就不等待了

参数:
	变量:指定读取值的变量名

#/bin/bash

#1、读取控制台输入一个num值

read -p "请输入一个数num1=" NUM1
echo "您输入的值是num1=$NUM1"

# 2、读取控制台输入一个num值,在10秒内输入
read -t 10 -p "请输入一个数num2=" NUM2
echo "你输入的值是num2=$NUM2"

Linux基本命令及操作总结_第90张图片
Linux基本命令及操作总结_第91张图片

11、shell函数

shell编程和其他编程语言一样,有系统函数,也可以自定义函数。
  1. 系统函数
    1)basename :返回完整路径最后 / 的部分,常用于获取文件名
basename [String][suffix]	# basename命令会删掉所有的前缀包括最后一个【/】,然后将字符串显示出来

在这里插入图片描述

dirname # 返回完整路径最后 / 的前面的部分 ,常用于返回路径部分
dirname	文件绝对路径  #从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

Linux基本命令及操作总结_第92张图片

  1. 自定义函数
基本语法:
[function] funname[()]
{
	action;
	[return int;]
} 
调用函数直接写函数名:		funname[]
#!/bin/bash
#1、计算两个数的和 函数getSum
function getSum(){

        SUM=$[$n1+$n2]
        echo "和是=$SUM"
}

read -p "请输入第一个数n1:" n1
read -p "请输入第二个数n2:" n2

#调用getSum
getSum $n1 $n2

Linux基本命令及操作总结_第93张图片
在这里插入图片描述
12、shell数据库备份案例

#!/bin/bash

# 完成数据库的定时备份
#备份路径
BACKUP=/home/shell/data/db      #  /data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可输出变量调试
echo ${DATETIME}        #大括号可不要

echo "====开始备份==="
echo "====备份的路径是 $BACKUP/$DATETIME.tar.gz"

#主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库指令
mysqldump -u${DB_USER} -p${DB_PWD} -- host=$HOSST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时文件
rm -rf $BACKUP/$DATETIME

#删除10天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "===备份成功===="

你可能感兴趣的:(Linux,linux,java)