❶ 以免霸屏的指令是什么
为什么要学习linux,因为Linux很多都是开源免费的,并且Linux是非常稳定的,我们开发出来的项缓伍目一般都是在服务器中的,我们操作服务器中的程序有两种方式,要么你就去服务器跟前,这种明显是不现实的,所以在实际情况中我们都是在电脑安装一个远程登陆软件,通过这个软件来连接远程的服务器,这样我们就可以在本地的电脑操作远程服务器了;Linux就提供了一种可靠的远程连接方式;
Linux的特点:免费,开源,多用户(同一时刻可以多个用户同时登陆和执行同一个Linux系统),多任务;
Linux的安装
安装
1.安装VMWare: 下载对应的软件,一直下一步就行;
2.安装centOS镜像:
①点击创建新的虚拟机
②然后按照虚拟机向导安装镜像,注意选择自己安装对应的镜像版本
③在CD/DVD的配置项中配置镜像的路径;(内存可以根据自己需求设置)
然后一直下一步就行;
④第一次启动的时候比较慢,因为需要安装一些东西;然后按照需求配置自己需要的就行;
不过设置的root密码要记住!第一次安装完成后需要重新启动!!!
⑤配置网卡驱动:
然后重新启动!
然后再使用 ip addr 查看ip地址是否可以显示了;
使用finalshell连接虚拟机
⑥使用远程连接软件连接本地的Linux来进行操作;
这里我们使用finalshell,自己下载安装这个finalshell就行;
下面我们来演示一下如何使用finalshell来连接这个Linux: 要先知道我们要连接的服务器(Linux或者是云服务器的IP地址)的ip地址才能去连接;
点击最左上角的文件夹图形,然后点击左边白色的文件夹,会弹窗出:然后点击SSH连接
出现下面的窗口:这个主机要竖宏写你要连接的服务器的ip地址,这里我们填自己这个虚拟机的ip地址就行(在本机的虚拟机使用 ip addr 查看自己的虚拟机的IP地址);
了解一下Linux的目录结构(不需要记忆)
java中流传一句话:万物皆对象!在Linux中同样流传一句话:万物皆文件!
Linux中常用的命令(重点)
Linux命令初体验--几个常用命令
序号 命令 对应英文 作用
1 ls list 查看当前目录下的内容
2 pwd print work directory 查看当前目录所在目录
3 cd 目录名 change directory 切换目录
4 touch 文件名 touch 如果文件不存在,就新创建文件
5 mkdir 目录名 make directory 创建目录
6 rm 文件名 remove 删除指定文件
注意事项:
在执行Linux命令的时候,提示信息如果显示为乱码,这是由于编码问题导致的,只需要修改Linux的编码就行即可,命令如下:
下面命名表示:把'LANG="en_UTF-8"'追加到后面的文件中
echo 'LANG="en_UTF-8"' >> /etc/profile
source /etc/profile #重新加载配置文件,新添进去的配置才可以生效
登录后复制
使用Linux的一些小技巧:非常使用,和经常使用得到;
tab键自动补全
连续两次Tab键,给出操作提示
使用上下箭头快速调出曾经使用过的命令
使用clear命令或者是ctrl+l 实现快速清屏
Linux命令格式
command [-options][parameter]
登录后复制
说明:
command:命令名
[-options]:选项,可以用来对命令进行控制,也可以进行省略
[parameter]:传给命令的参数,可以是零个,一个或者是多个
注意:[] 代表可选
命令名 ,选项 ,参数之间使用空格进行分隔
案例演示: 使用 ls 与 使用 ls -l 的区别
paramter是多个的时候:比如同时创建多个文件
强制删除文件:
强制删除一个文件:rm -f 文件名1
强制删除一批文件:rm -f 文件名1 文件名2 文件名3
显示指定目录下的内容 ls和ll
作用:显示指定目录下的内容
语法:ls [-al] [dir]
说明:
-a 显示所有文件及目录 (.开头的隐藏文件也会列出, 在Linux中隐藏文件是以.开头的)
-l 除文件名称外,同时将文件类型(d表示目录,-表示文件),权限,拥有者,文余哪册件大小等信息详细列出
注意:由于我们使用ls命令是经常需要加入 -l 选项, 所以Linux为ls -l 提供了一种简单的书写方式, 即 ll
如果不指定特定的dir,那么展示的就是root目录下的所有文件;
如果指定了dir,那么展示的就是指定dir目录下的所有文件:ls -al /etc
简写: 把ls -al 进行了合并,变成了 ll
切换目录: cd
作用:用于切换当前工作目录,即进入指定目录;
语法:cd [dirName]
特殊说明:
~表示当前用户的home目录 不同用户的home目录可能不同,比如Linux中的root用户的home目录就是 /root
.表示目前所在的目录
..表示目前位置的上级目录 (用得比较频繁)
举例:
cd .. 切换到当前目录的上级目录
cd ~ 切换到用的home目录
cd /usr/local 切换到/usr/local目录
cd usr 进入到usr目录
显示文件内容:cat
作用:用于显示文件内容
语法: cat [-n] filaName
说明: -n 由1开始对所有输出行数编号
举例:cat /etc/profile 查看/etc目录下的profile文件内容
不使用-n:
使用-n:
分页查看文件:more
作用:以分页的形式显示文件内容, 使用场景,当查看的文件的内容比较多的时候,就可以使用more命令来查看,这样更加方便
语法:more fileNeme
操作说明:
回车键 向下滚动一行
空格键 向下滚动一屏
b 返回上一屏
q或者是Ctrl + c 退出more
举例:在根目录下使用命令 more /etc/profile
查看文件末尾:tail
作用:查看文件末尾的内容
语法:tail [-f] fileName
说明:动态的读取文件末尾内容并显示,通过用于日志文件的内容的输出
举例:
tail /etc/profile 显示/etc目录下的profile文件末尾10行的内容(这个10是默认的)
tail -20 /etc/profile 显示/etc目录下的profile文件末尾20行的内容
tail -f /ydl/my.log 动态的读取 /ydl目录下的my.log文件末尾内容并显示, 这个命令会让当前Linux窗口处于霸屏的状态,使用Ctrl + C 就可以停止;
创建目录:mkdir
作用:创建目录
语法:mkdir [-p] dirName
说明:
-p: 确保目录名称是存在的,不存在就创建一个。通过此选项,可以实现多层目录同时创建
(p代表parent)
举例:
mkdir it在当前目录下,创建一个名为it的子目录
mkdir -p it/javaTest 在工作的目录下的it目录中建立一个名为test的目录,若it目录不存在,则创建一个
删除目录:rmdir
作用:删除空目录
语法:rmdir [-p] dirName
说明:
-p : 当子目录被删除后使父目录为空目录的话,则一并删除
举例:
rmdir it 删除为it的空目录
rmdir -p it/java 删除it目录中名为Java的子目录,若java目录删除后it目录变为空目录,则it目录也会被删除
rmdir it* 删除以it开头的空目录
删除不为空的文件或目录 rm
作用:删除文件或者目录
语法:rm [-rf] name
说明:
-r : 将目录及目录中的所有文件(目录)逐一删除,即递归删除
-f : 无需确认,直接删除
举例:
rm -r it/ 删除名为it的目录和目录中的所有文件,删除前需要确定
rm -rf it/ 无需确认,直接删除名为it的目录和目录中所有文件
rm -rf hello.txt 无需确认,直接删除hello.txt文件 (这个删除文件的命令可以不用带r)
拷贝移动命令cp
作用:用于复制文件或者是目录
语法:cp [-r] source target
说明:
-r : 如果复制的是目录需要使用到此项,此时将复制该目录下所有的子目录和文件
举例:
cp hello.txt it/ 将hello.txt复制到it目录中
cp hello.txt ./hi.txt 将hello.txt复制到当前目录,并改名为hi.txt
cp -r it/ itjava/ 将it目录和目录下的所有文件复制到itjava目录下
cp -r it/* itjava/ 将it目录下所有文件复制到itjava目录下(目录这一层不复制,只复制目录下的内容)
移动拷贝mv
作用:为文件或者是目录进行改名,或将文件或目录移动到其他位置
语法:mv source dest
举例:
mv hello.txt hi.txt 将hello.txt改名为hi.txt
mv hi.txt it/ 将文件hi.txt移动到it目录中
mv hi.txt it/hello.txt 将hi.txt移动到it目录中,并且改名为hello.txt
mv it/ itjava/ 如果itjava目录不存在,将it目录改名为itjava
mv it/ itjava/ 如果itjava目录存在,将it目录移动到itjava目录中
打包压缩命令 tar
作用:对文件进行打包,解包,压缩,解压
语法:tar [-zcxvf] filaName[files]
包文件后缀为 .tar 表示只完成了打包,并没有压缩
包文件后缀为 .tar.gz 表示打包同时还进行了压缩
说明:
-z : z代表的是gzip , 通过gzip命令处理文件,gzip可以对文件压缩或者是解压
-c : c代表的是create, 即创建新的文件包 (打包)
-x : x代表的是extract,实现从包文件还原文件 (解包)
-v : v代表的是verbose,显示命令执行的过程
-f : f代表的是file,用于指定包文件的名称
如果不想把解压的文件包的内容放到当前目录, 加 -c /要存放的目录
第一个常用组合: -cvf
第二个常用组合:-zcvf
第三个常用组合: -xvf 解压包
第四个常用组合:-zxvf (非常常用)
文本编辑命令vi/vim
作用:vi命令是Linux系统提供的一个文本编辑工具,可以对文件内容进行编辑,类似与windows的记事本;
语法:vi fileName
文本编辑命令vim:
作用:对文件内容进行编辑,vim其实就是一个文本编辑器;
语法:vim fileName
说明:
1.在使用vim进行编辑文件的时候,如果指定的文件存在则直接打开此文件。如果指定的文件不存在则新建文件
2.vim在进行文本编辑的时候一共分为三种模式,分别是命令模式(command mode),插入模式(insert mode)和底行模式(last line mode)。这三种模式之间可以相互切换。我们在使用vim命令的时一定要注意我们当前所处的是哪一种模式;
对于这三种模式的一些说明:
注意:命令模式下,这个gg表示的是快速将光标移动到文件开头, 这个G表示的是快速将光标移动到文件末尾;
下面的插入模式和底行模式,是不能直接进行转换的,都需要先进入到命令模式然后才能进行模式转换;
注意:必须要进入底行模式才能进行文件的保存!!!
查询命令find
作用:在指定目录下查找文件 (从指定目录中搜索指定的文件)
语法:find dirName(目录名称) -option fileName
(-option 一般是-name,表示根据指定名称来查找文件)
举例:
find . -name "*.java" 在当前目录及其子目录下查找.java结尾的文件 (-name根据文件名来进行查找)
find /it -name "*.java" 在/it目录及其子目录下查找.java结尾的文件
查找指定内容命令grep
作用:从指定文件中查找指定的文本内容(从当前或者是指定的文件中查找指定的内容)
语法:grep word fileName
注意:这个word是区分大小写的 !
举例:
grep hello helloword.java 查找 helloword.java文件中出现的hello字符串的位置
grep hello *.java 查找当前目录中所有.java结尾的文件中包含hello字符串的位置
Linux中进行软件安装
软件安装的方式:
二进制发布包的安装
软件已经针对具体平台编译打包发布,只需要解压,修改配置即可
rpm安装
软件已经安装redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题
yum安装(一般推荐这种安装方式)
一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程自动解决库依赖的问题
源码编译安装(Java源代码安装)
软件以源码工程的形式发布,需要自己编译打包
在Linux中安装jdk
安装jdk,先检测一下自己的Linux中有没有jdk环境,如果有就不需要安装了;
检测命令:java -version
如果没有的话,那就安装和配置环境变量:
1.先在官网下载好jdk在Linux环境下的呀压缩包,以.tar.gz结尾的jdk压缩包
2.然后使用 tar -zxvf jdk-8uxxxxxx64.tar.gz -C /usr/local (表示把压缩包解压到usr下的local文件夹下)
3.解压完成后,然后进行环境变量的配置, 使用命令 vim /etc/profile
然后快速的到达文件的末尾,按一下 大写的G就行;然后修改配置文件:
LANG="en_US.UTF-8" #配置字符编码集
JAVA_HOME=/usr/java/jdk1.8.0_261-amd64 #配置jdk的环境变量
PATH=$JAVA_HOME/bin:$PATH
登录后复制
修改完成后让配置文件重新加载一下,使用命令:source /etc/profile 然后回车;
4.然后查看是否配置成功:java -version
在Linux中安装Tomcat(防火墙相关命令使用的时候查询就行)
sh startup.sh
./startup.sh
登录后复制
# 查看Tomcat的后50行日志
tail -50 /usr/loacal/apache-tomcat-7.0.57/logs/catalina.out
# 查询指定软件的进程
ps -ef | grep tomcat
登录后复制
Tomcat在Linux运行的,可能你在浏览器也无法访问,因为防火墙开着的;
查看和修改防火墙的状态:
查看防火墙状态(systemctl status firewalld、firewall-cmd --state)
暂时关闭防火墙(systemctl stop firewalld)
永久关闭防火墙(systemctl disable firewalld)
开启防火墙(systemctl start firewalld)
开放指定端口8080(firewall-cmd --zone=public --add-port=8080/tcp --permanent)
关闭指定端口(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)
立即生效(firewall-cmd --reload)
查看开放的端口(firewall-cmd --zone=public --list-ports)
注意:
1、systemctl是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作
2、firewall-cmd是Linux中专门用于控制防火墙的命令
3、为了保证系统安全,服务器的防火墙不建议关闭 在Linux中开放指定的端口是以后在实际生产中最常用的方式,在实际生产中是不能直接把防火墙关闭的,容易受到攻击;修改防火墙配置后都需要reload一下才能生效;
systemctl status firewalld、firewall-cmd --state
systemctl stop firewalld
systemctl start firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
登录后复制
sh shutdown.sh
./shutdwon.sh
ps -ef | grep tomcat
kill -9 7742 # 一般不建议直接强制停止进程,除非正常的手段无法停止进程了
登录后复制
在Linux中安装MySQL
使用rpm来进行安装MySQL;
①先检查当前系统中是否安装了MySQL数据库
rpm -qa #查询当前系统中安装的所有软件
rpm -qa|grep mysql #查询当前系统中安装的名称带MySQL的软件
rpm -qa|grep mariadb #查询当前系统中安装的名称带mariadb的软件 这个是centons中自带的一个数据库,如果你的虚拟机中有这个软件要先把这个软件给卸载然后再安装MySQL,不然会出现数据库冲突的情况
登录后复制
卸载mariadb数据库:
rpm -e --nodeps 软件名称
rpm -e --nodeps
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
登录后复制
参考下面的文章:
Linux安装MySQL详细教程(YUM+离线安装)初尘屿风的博客-CSDN博客yum安装mysql的步骤和方法
https://blog.csdn.net/qinluyu111/article/details/124343942?ops_request_misc=%7B%22request_id%22%3A%22165569845616782390520827%22%2C%22scm%22%3A%2220140713.130102334.pc_all.%22%7D&request_id=165569845616782390520827&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v32_ecpm-26-124343942-null-null.142%5Ev17%5Erank_v32,157%5Ev15%5Enew_3&utm_term=linux%E5%AE%89%E8%A3%85MySQL%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187
在参考这个文章的时候,中途可能还会报一个错误:在下面的文件中修改配置文件,把相关的文件地址填过去;
登陆: mysql -u -root -p 登陆的时候可能会报下面的错误:一般来说都是密码错误了.....(反正我测试了很多次才登陆成功)
安装Linux常见的三个错误:liunx 安装 mysql 时遇到错误的解决_qq_31683775的博客-CSDN博客
安装lrzsz
这个是Linux中负责文件的上传和下载的功能;
1.搜索lrzsz安装包,命令为 yum list lrzsz (这个命令的作用是在应用商店搜索lrzsz这个安装包)
2.使用yum在线安装,命令为 yum install lrzsz.x86_64 ,然后回车就行(中间可能让你输入一个y);然后在命令窗口使用 rz 命令就可以把本地的文件上传到Linux上了;
注意:虽然这个finalshell可以直接使用拖拽的方式来进行文件的上传,那么为什么还要安装这个软件?因为并不是所有的Linux连接工具中都会有这种可视图操作的功能!
Linux项目部署
手工部署项目
自己打包,自己上传,自己运行,然后都是自己一行一行的手敲命令来完成;
①在代码编写工具中把spring boot项目打成jar架构包;
②将jar包上传到Linux服务器
mkdir /usr/local/take_out_app #创建目录,将项目的jar包放到此目录
登录后复制
运行命令:不过要注意的是,你这个Linux环境必须安装了jdk才可以运行Boot项目
java -jar reggie_take_out-1.0-SNAPSHOT.jar
登录后复制
检查防火墙8080是否对外开放:firewall -cmd --zone=public --list-ports
我们发现8080端口并没有被开放,所以使用命令把8080端口开放:
firewall-cmd --zone=public --add-port=8080/tcp --permanent # 出现sucess后,然后必须执行下面的reload,不然开放的端口不会生效
firewall-cmd --reload
firewall-cmd --zone=public --list-ports # 如果再次进行查看
登录后复制
然后可以去浏览器访问了,但是此时还不一定可以访问成功,如果你的这个项目使用到了数据库MySQL或者是redis,那么还需要配置数据库,或者是使用你本地的数据库,但是要修改刚刚上传的jar架构包中的yml文件中的MySQL的url;
比如果你的Linux的ip是:192.168.300.100 , 而你的MySQL是在windons中,你windows的ip地址是 192.169.200.1, 那么就要在Linux中把yml文件中的MySQL的url中的localhost改成你的这个windows的ip地址;
等等问题需要去解决。。。。。。。。(后面再补充一下具体的情况)
设置Java项目在后台运行并且输出日志到指定文件
上面的那种霸屏允许的方式,只要允许Java程序的那个窗口被关闭,那么在浏览器就访问不到了;
比如在运行刚刚到项目:
nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> app.log & # 这里的log文件是相对路径下的文件,会在我们执行该行命令的目录下生成这个log文件 最后一个&表示在后台运行
登录后复制
那么这种在后台运行的程序应该怎么把它结束?使用杀进程的方式
ps -ef | grep java 拿到Java程序的进程id
然后使用 kill -9 进程号 (这个9可以换成15,15杀进程的方式更加‘温柔一些’)
然后再查询一下 ps -ef | grep java 看有没有关闭该程序
shell脚本自动部署
通过脚本的方式,只要执行一个命令,就可以自动的从我们的git仓库拉取项目和部署项目;
完整的操作步骤:
java
linux
电子蜂鸣器
精选推荐
广告
python基础代码大全-python基础语法,python 代码命令大全
1804阅读·0评论·0点赞
2020年10月28日
Undefined symbols for architecture x86_64:"xxxxxx", referenced from:
9398阅读·0评论·0点赞
2016年12月6日
yml 配置指令参考
129阅读·0评论·0点赞
2022年9月29日
Docker Compose
236阅读·0评论·0点赞
2020年5月12日
linux服务器上部署项目常用命令
1658阅读·1评论·3点赞
2018年6月21日
/proc/diskstats
381阅读·0评论·0点赞
2018年8月2日
如果,一个人身上出现了这几个迹象,说明他的情商非常低
国际专业情商测试
广告
[求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
391阅读·0评论·0点赞
2016年11月27日
Linux大神都是怎么记住这么多命令的?
496阅读·1评论·0点赞
2021年7月22日
将瑞吉外卖项目jar包部署在远程服务器并成功运行在pc和移动端
928阅读·14评论·8点赞
2022年7月20日
linux命令那么多怎么记,如何记住Linux命令
205阅读·0评论·0点赞
2021年5月11日
linux命令怎么学?
6481阅读·0评论·1点赞
2018年10月3日
【Linux学习笔记22】Linux-C进程内存分布
210阅读·0评论·1点赞
2019年8月2日
Linux nohup模式启动jar
220阅读·0评论·0点赞
2018年9月21日
linux yml安装mysql
2345阅读·2评论·0点赞
2019年12月18日
Linux 命令集锦
5476阅读·0评论·0点赞
2007年3月19日
shendxx python 知识点
1下载·0评论
2022年12月9日
科创成果奖励.rar.rar
0下载·0评论
2022年12月9日
DISCO_v1.0.7.exe
0下载·0评论
2022年12月9日
统计咨询用户量.sql
0下载·0评论
2022年12月9日
去首页
看看更多热门内容
评论2
爱殇戏子
赞
大佬,再自学么?
❷ linux学习中,关于文件复制的cp命令,其中有一个 -i 的命令有点问题
cat~/.bashrc
你会发现cp默认就等于了cp -i
aliascp='cp-i'
所以导致你无论cp还是cp -i都是一样的效果
我每次用linux之前都会把这句alias cp='cp -i'注释掉
附上我常用的alias文件吧,以后直接替换就可以了,操作步骤:
1.先进入编辑模式
vim~/.bashrc
2.跳转到文字的结尾:一直按pagedown按键,到最后一行,再按end到文字结尾
3.按a,或者o,进入编辑模式
3.ctrl+u是一行一行删除,把所有内容都删除掉
4.复制粘贴以下代码
#.bashrc
#
aliasrm='rm-i'
#aliascp='cp-i'
aliasmv='mv-i'
aliasll="ls-l"
#修改alias文件
aliasaliasvim="vim/root/.bashrc"
#重载alias文件使其生效,每次修改后都要刷新
aliasaliasource="source/root/.bashrc"
#修改环境变量,比如添加jre,tomcat,redis
aliasprofilevim="vim/etc/profile"
#重载环境变量,使其生效
aliasprofilesource="source/etc/profile"
#重启网卡
aliasnetworkrestart="servicenetworkrestart"
#列出此服务器的网卡配置文件
aliasnetworkvim="cd/etc/sysconfig/network-scripts/&&ls|grepifcfg-"
#修改DNS解析
aliasnameservervim="vim/etc/resolv.conf"
#修改hosts
aliashostsvim="vim/etc/hosts"
#查看端口当前占用情况
aliasportcheck="netstat-tunlp|grep"
#查看firewall防火墙开放端口列表(白名单)
aliasfirewallports="firewall-cmd--zone=public--list-ports"
#设置firewall防火墙的mysql3306端口互通
aliasfirewalladd="echo'firewall-cmd--zone=public--add-port=3306/tcp--permanent'"
#firewall防火墙重启
aliasfirewallreload="firewall-cmd--reload"
#iptables防火墙添加指定端口命令
aliasiptablesadd="echo'/sbin/iptables-IINPUT-ptcp--dport8080-jACCEPT'"
#查看防火墙白名单(应该是重启还在的)
aliasiptableports="more/etc/sysconfig/iptables"
#查看指定进程
#aliaspid="psaux|grep"
aliaspid="ps-ef|grep"
#查找根目录/下的名字为xx的文件,支持通配符*
aliassearch="find/-name"
#查看Linux系统版本和位数
aliassysteminfo='cat/etc/redhat-release;getconfLONG_BIT;uname-a'
#显示当前服务器时间
aliastimenow='date+"%Y-%m-%d%H:%M:%S"'
#更新服务器时间
#aliasupdatetime='ntpdate0.centos.pool.ntp.org'
#跳转tomcat路径
aliastomcatpwd="cd/disk1/app/tomcat8"
#启动tomcat
aliastomcatstart="tomcatpwd&&./bin/startup.sh&&tail-f./logs/catalina.out"
#停止tomcat
aliastomcatstop="tomcatpwd&&./bin/shutdown.sh&&ps-ef|greptomcat"
#查看tomcat日志
aliastomcatlog="tomcatpwd&&tail-200f./logs/catalina.out"
#批量启动多个tomcat
aliastomcatstartall="/usr/local/tomcat8080/bin/startup.sh&&/usr/local/tomcat8081/bin/startup.sh&&/usr/local/tomcat8082/bin/startup.sh&&/usr/local/tomcat8083/bin/startup.sh&&/usr/local/tomcat8084/bin/startup.sh"
#批量关闭多个tomcat
aliastomcatstopall="/usr/local/tomcat8080/bin/shutdown.sh&&/usr/local/tomcat8081/bin/shutdown.sh&&/usr/local/tomcat8082/bin/shutdown.sh&&/usr/local/tomcat8083/bin/shutdown.sh&&/usr/local/tomcat8084/bin/shutdown.sh"
#redis查找指定key对应value值
aliasrediskeys='redis-cli-a"abc@123"keys'
#修改nginx默认配置
aliasnginxconf="vim/usr/local/nginx/conf/nginx.conf"
#以默认配置启动nginx
aliasnginxstart="/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf"
#强制停止nginx服务器,如果有未处理的数据,丢弃
aliasnginxstop="/usr/local/nginx/sbin/nginx-sstop"
#推荐:优雅的停止nginx服务器,如果有未处理的数据,等待处理完成之后停止
aliasnginxquit="/usr/local/nginx/sbin/nginx-squit"
#重载nginx,用于修改配置后,直接刷新使配置生效
aliasnginxreload="/usr/local/nginx/sbin/nginx-sreload"
#检查nginx的配置是否可用
aliasnginxcheck="/usr/local/nginx/sbin/nginx-t"
#虚拟机共享文件夹路径
#aliasshare="/mnt/hgfs/ShareFolder/"
#Sourceglobaldefinitions
if[-f/etc/bashrc];then
./etc/bashrc
fi
5.粘贴后,按ESC退出编辑模式,然后按冒号+w+q+回车 保存
我那些alias里面不懂的去网络吧,基本用过linux的差不多都接触过或者一看就懂
❸ 如何在Linux上配置基于Web的网络流量监控系统
在Linux上安装ntopng
如果你是Debian、Ubuntu或Linux Mint,执行以下命令:
❹ Linux服务开机自启动三种方式,你觉得哪种最优雅
很多时候,我们需要将一些服务在Linux系统启动时即自动运行,省得每次都要去手动启动一遍,如Redis, MySQL, Nginx等。本文对CentOS与Ubuntu下开机自启动的配置方法进行整理,供参考查阅。
rc.local是CentOS以前版本的方式,在CentOS7中仍然以兼容的形式存在,虽仍可用,但不推荐(推荐使用systemd service)。
1、编写需要开机自启动的脚本,并添加执行权限
作为测试,上述脚本打印一个时间到/tmp/test.log文件中
2、在/etc/rc.d/rc.local配置文件中添加脚本运行命令(使用绝对路径)
3、添加/etc/rc.d/rc.local文件的执行权限
在centos7中,/etc/rc.d/滚毁岩rc.local没有执行权限,需要手动授权
以上三步,即可使/root/test_rclocal.sh >/dev/null 2>/dev/null 命令在服务器系统启动时自动运行。
1、编写需要开机自启动的测试脚本,并添加执行权限
2、在/etc/rc.d/init.d/目录下添加一个可执行脚本testchkconfig
上述testchkconfig脚本的头部必须遵循一定的格式 # chkconfig: 2345 90 10, 其中2345指定服务在哪些执行等级中开启或关闭,90表示启动的优先级(0-100,越大优先级越低),10表示关闭的优先级。执行等级包括
3、加入开机启动服务列表
使用 chkconfig --list 可查看当前加入开机自启动的服务列表,但如Note部分所述,该命令只显示SysV服务,不包含原生的systemd服务,查看systemd服务可使用systemctl list-unit-files命令。
以上三步,即可使/root/test_chkconfig.sh >/dev/null 2>/dev/null 命令在服务器系统启动时自动运行。
chkconfig的其它命令参考
CentOS7的余滚systemd服务脚本存放在:/usr/lib/systemd/system(系统级)/usr/lib/systemd/user(用户级)下,以.service结尾。这里以nginx为例
1、在/usr/lib/systemd/system目录大御下创建nginx.service文件
其中Service部分的Type包括如下几种类型:
2、 开启开机自启动
以上两步,就将nginx服务配置成了在操作系统启动时自动启动。
其它命令参考
从字面看是PID文件不可读,查看/var/run/nginx.pid,该文件也确实不存在,查看nginx.conf配置文件,发现是pid /var/run/nginx.pid;这行配置被注释掉了, 如果不指定pid文件位置,nginx默认会把pid文件保存在logs目录中。所以出现systemd启动服务时找不到pid文件而报错,将nginx.conf中的pid配置注释去掉,重启nginx.service即可。
在Ubuntu18.04中,主要也是以systemd服务来实现开机自启动,systemd默认读取/etc/systemd/system/下的配置文件,该目录下的一些文件会链接到/lib/systemd/system/下的文件。
因此可以在/etc/systemd/system/目录下面创建一个自启动服务配置,以内网穿透服务frp客户端为例,如
各配置项与CentOS类似。然后将服务器加到自启动列表中并启动服务
其它更多systemctl命令与CentOS类似。
也可以使用/lib/systemd/system/rc-local.service来执行一些开机需要执行的脚本,该文件内容为
从Description看它是为了兼容之前版本的/etc/rc.local的,该服务启动命名就是/etc/rc.local start,将该文件链接到/etc/systemd/system下
创建/etc/rc.local文件,并赋予可执行权限
作者:半路雨歌
链接:https://juejin.cn/post/6844904104515338248
❺ Redis分布式缓存搭建
花了两天时间整理了之前记录的Redis单体与哨兵模式的搭建与使用,又补齐了集群模式的使用和搭建经验,并对集群的一些个原理做了理解。
笔者安装中遇到的一些问题:
如果make报错,可能是没装gcc或者gcc++编辑器,安装之 yum -y install gcc gcc-c++ kernel-devel ,有可能还是提示一些个c文件编译不过,gcc -v查看下版本,如果不到5.3那么升级一下gcc:
在 /etc/profile 追加一行 source /opt/rh/devtoolset-9/enable
scl enable devtoolset-9 bash
重新make clean, make
这回编译通过了,提示让你最好make test一下/
执行make test ,如果提示 You need tcl 8.5 or newer in order to run the Redis test
那就升级tcl, yum install tcl
重新make test,如果还有error就删了目录,重新tar包解压重新make , make test
o/ All tests passed without errors! ,表示编译成功。
然后make install即可。
直接运行命令: ./redis-server /usr/redis-6.0.3/redis.conf &
redis.conf 配置文件里 bind 0.0.0.0 设置外部访问, requirepass xxxx 设置密码。
redis高可用方案有两种:
常用搭建方案为1主1从或1主2从+3哨兵监控主节点, 以及3主3从6节点集群。
(1)sentinel哨兵
/usr/redis-6.0.3/src/redis-sentinel /usr/redis-6.0.3/sentinel2.conf &
sentinel2.conf配置:
坑1:master节点也会在故障转移后成为从节点,也需要配置masterauth
当kill master进程之后,经过sentinel选举,slave成为了新的master,再次启动原master,提示如下错误:
原因是此时的master再次启动已经是slave了,需要向现在的新master输入密码,所以需要在master.conf
中配置:
坑2:哨兵配置文件要暴露客户端可以访问到的master地址
在 sentinel.conf 配置文件的 sentinel monitor mymaster 122.xx.xxx.xxx 6379 2 中,配置该哨兵对应的master名字、master地址和端口,以及达到多少个哨兵选举通过认为master挂掉。其中master地址要站在redis访问者(也就是客户端)的角度、配置访问者能访问的地址,例如sentinel与master在一台服务器(122.xx.xxx.xxx)上,那么相对sentinel其master在本机也就是127.0.0.1上,这样 sentinel monitor mymaster 127.0.0.1 6379 2 逻辑上没有问题,但是如果另外服务器上的springboot通过lettuce访问这个redis哨兵,则得到的master地址为127.0.0.1,也就是springboot所在服务器本机,这显然就有问题了。
附springboot2.1 redis哨兵配置:
坑3:要注意配置文件.conf会被哨兵修改
redis-cli -h localhost -p 26379 ,可以登到sentinel上用info命令查看一下哨兵的信息。
曾经遇到过这样一个问题,大致的信息如下
slaves莫名其妙多了一个,master的地址也明明改了真实对外的地址,这里又变成127.0.0.1 !
最后,把5个redis进程都停掉,逐个检查配置文件,发现redis的配置文件在主从哨兵模式会被修改,master的配置文件最后边莫名其妙多了一行replicaof 127.0.0.1 7001, 怀疑应该是之前配置错误的时候(见坑2)被哨兵动态加上去的! 总之,实践中一定要多注意配置文件的变化。
(2)集群
当数据量大到一定程度,比如几十上百G,哨兵模式不够用了需要做水平拆分,早些年是使用codis,twemproxy这些第三方中间件来做分片的,即 客户端 -> 中间件 -> Redis server 这样的模式,中间件使用一致性Hash算法来确定key在哪个分片上。后来Redis官方提供了方案,大家就都采用官方的Redis Cluster方案了。
Redis Cluster从逻辑上分16384个hash slot,分片算法是 CRC16(key) mod 16384 得到key应该对应哪个slot,据此判断这个slot属于哪个节点。
每个节点可以设置1或多个从节点,常用的是3主节点3从节点的方案。
reshard,重新分片,可以指定从哪几个节点移动一些hash槽到另一个节点去。重新分片的过程对客户端透明,不影响线上业务。
搭建Redis cluster
redis.conf文件关键的几个配置:
启动6个集群节点
[root@VM_0_11_centos redis-6.0.3]# ps -ef|grep redis
root 5508 1 0 21:25 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7001 [cluster]
root 6903 1 0 21:32 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7002 [cluster]
root 6939 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7003 [cluster]
root 6966 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7004 [cluster]
root 6993 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7005 [cluster]
root 7015 1 0 21:33 ? 00:00:00 /usr/redis-6.0.3/src/redis-server 0.0.0.0:7006 [cluster]
这时候这6个节点还是独立的,要把他们配置成集群:
说明: -a xxxx 是因为笔者在redis.conf中配置了requirepass xxxx密码,然后 --cluster-replicas 1 中的1表示每个master节点有1个从节点。
上述命令执行完以后会有一个询问: Can I set the above configuration? yes同意自动做好的分片即可。
最后 All 16384 slots covered. 表示集群中16384个slot中的每一个都有至少有1个master节点在处理,集群启动成功。
查看集群状态:
坑1:暴露给客户端的节点地址不对
使用lettuce连接发现连不上,查看日志 Connection refused: no further information: /127.0.0.1:7002 ,跟之前哨兵配置文件sentinel.conf里边配置master地址犯的错误一样,集群启动的时候带的地址应该是提供给客户端访问的地址。
我们要重建集群:先把6个redis进程停掉,然后删除 nodes-7001.conf 这些节点配置文件,删除持久化文件 mp.rdb 、 appendonly.aof ,重新启动6个进程,在重新建立集群:
然后,还是连不上,这次报错 connection timed out: /172.xx.0.xx:7004 ,发现连到企鹅云服务器的内网地址上了!
解决办法,修改每个节点的redis.conf配置文件,找到如下说明:
所以增加配置:
然后再重新构建集群,停进程、改配置、删除节点文件和持久化文件、启动进程、配置集群。。。再来一套(累死了)
重新使用Lettuce测试,这次终于连上了!
坑2:Lettuce客户端在master节点故障时没有自动切换到从节点
name这个key在7002上,kill这个进程模拟master下线,然后Lettuce一直重连。我们期望的是应该能自动切换到其slave 7006上去,如下图:
重新启动7002进程,
7006已成为新master,7002成为它的slave,然后Lettuce也能连接上了。
解决办法,修改Lettuce的配置:
笔者用的是springboot 2.1 spring-boot-starter-data-redis 默认的Lettuce客户端,当使用Redis cluster集群模式时,需要配置一下 RedisConnectionFactory 开启自适应刷新来做故障转移时的自动切换从节点进行连接。
重新测试:停掉master 7006,这次Lettuce可以正常切换连到7002slave上去了。(仍然会不断的在日志里报连接错误,因为需要一直尝试重连7006,但因为有7002从节点顶上了、所以应用是可以正常使用的)
Redis不保证数据的强一致性
Redis并不保证数据的强一致性,也就是取CAP定理中的AP
关于一致性Hash算法,可以参考 一致性Hash算法 - (jianshu.com)
Redis cluster使用的是hash slot算法,跟一致性Hash算法不太一样,固定16384个hash槽,然后计算key落在哪个slot里边(计算key的CRC16值再对16384取模),key找的是slot而不是节点,而slot与节点的对应关系可以通过reshard改变并通过gossip协议扩散到集群中的每一个节点、进而可以为客户端获知,这样key的节点寻址就跟具体的节点个数没关系了。也同样解决了普通hash取模算法当节点个数发生变化时,大量key对应的寻址都发生改动导致缓存失效的问题。
比如集群增加了1个节点,这时候如果不做任何操作,那么新增加的这个节点上是没有slot的,所有slot都在原来的节点上且对应关系不变、所以没有因为节点个数变动而缓存失效,当reshard一部分slot到新节点后,客户端获取到新迁移的这部分slot与新节点的对应关系、寻址到新节点,而没迁移的slot仍然寻址到原来的节点。
关于热迁移,猜想,内部应该是先做复制迁移,等迁移完了,再切换slot与节点的对应关系,复制没有完成之前仍按照原来的slot与节点对应关系去原节点访问。复制结束之后,再删除原节点上已经迁移的slot所对应的key。
与哨兵模式比较类似,当1个节点发现某个master节点故障了、会对这个故障节点进行pfail主观宕机,然后会通过gossip协议通知到集群中的其他节点、其他节点也执行判断pfail并gossip扩散广播这一过程,当超过半数节点pfail时那么故障节点就是fail客观宕机。接下来所有的master节点会在故障节点的从节点中选出一个新的主节点,此时所有的master节点中超过半数的都投票选举了故障节点的某个从节点,那么这个从节点当选新的master节点。
所有节点都持有元数据,节点之间通过gossip这种二进制协议进行通信、发送自己的元数据信息给其他节点、故障检测、集群配置更新、故障转移授权等等。
这种去中心化的分布式节点之间内部协调,包括故障识别、故障转移、选主等等,核心在于gossip扩散协议,能够支撑这样的广播协议在于所有的节点都持有一份完整的集群元数据,即所有的节点都知悉当前集群全局的情况。
Redis高可用方案 - (jianshu.com)
面试题:Redis 集群模式的工作原理能说一下么 - 云+社区 - 腾讯云 (tencent.com)
深度图解Redis Cluster原理 - detectiveHLH - 博客园 (cnblogs.com)
Redis学习笔记之集群重启和遇到的坑-阿里云开发者社区 (aliyun.com)
云服务器Redis集群部署及客户端通过公网IP连接问题
❻ linux 怎样安装redis
获取Redis
1、通过官网http://redis.io/获取稳定版源码包下载地址;
2、通过wget http://download.redis.io/releases/redis-3.0.2.tar.gz下载 源码包;
2
编译安装Redis
1、解压源码安装包,通过tar -xvf redis-3.0.2.tar.gz解压源码,速度相当快;
2、进入解压后的目录,执行make编译源码;
make命令执行完成后,会在src目录下生成6个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-check-aof、redis-check-mp、redis-sentinel。
3、执行make install安装,或者通过make PREFIX=/usr/local/redis install指定安装目录。这里默认安装,默认将之前生成的可执行文件拷贝到/usr/local/bin目录下;
END
配置运行
修改配置文件
1、将源码目录下redis配置文件redis.conf拷贝到/etc/redis目录下。
2、修改配置项,根据需要;如果不修改,使用默认配置也可以;
启动服务:
查看端口是否被占用:netstat
–ntlp
|grep 6379
方式一:通过命令redis-server 启动,可在命令后加上`&`号使redis以后台程序方式运行;
方式二:通过指定配置文件启动;redis-server /etc/redis/redis.conf
默认安装的路径已经加入环境变量中,可直接在命令行执行命令;
命令客户端检测链接
1、连接之前可以先检测服务是否启动;
2、测试启动 redis-cli ping 返回PONG,启动成功。
停止Redis:
关闭服务
redis-cli shutdown
如果非默认端口,可指定端口:
redis-cli -p 6380 shutdown
简单操作:
1、两种连接方式:
1:window DOS方式:tentel主机IP端口号(默认为127.0.0.1:6379)
2:linux客户端方式:redis-cli 主机IP 端口号(默认为127.0.0.1 6379)
2、命令行操作:
#redis-cli
redis 127.0.0.1:6379> set name clj
OK
redis 127.0.0.1:6379> get name
"clj"