Linux服务器.md
文章目录
第一章-Linux概述
1什么是Linux
为什么关闭SSH连接,程序就停止运行? 要想回答这个问题,首先需要知道在Linux系统下有这两个概念: 进程组:一个或者多个进程的集合,每一个进程组都有唯一一个进程组ID,即进程组长进程的ID。 会话期:一个或多个进程组的集合,有唯一一个会话期首进程。会话期ID为首进程的ID。 会话期可以有一个单独的控制终端。与控制终端连接的会话期首进程叫做控制进程。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。
挂断信号(SIGHUP)默认的动作是终止程序。 当终端接口检测到网络连接断开,将挂断信号发送给控制进程。 如果控制进程终止,则该信号发送到该会话期前台进程组。
结论:因此当网络断开或终端窗口关闭后,也就是SSH断开以后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。
也就是说:当SSH连接开启的时候,bash等都会成为其进程组成员,当ssh关闭后,系统会将所有相关进程kill掉
cat /etc/redhat-release查看当前系统版本
主要文件夹
-
/bin:bin是Binary的缩写, 这个目录存放着最经常使用的命令。
-
/boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
-
/etc: 这个目录用来存放所有的系统管理所需要的配置文件和子目录。
-
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
-
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
-
/tmp:这个目录是用来存放一些临时文件的。
-
/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
-
/usr/bin: 系统用户使用的应用程序。
-
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。
-
/run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。
目录管理
Linux的目录结构为树状结构,最顶级的目录为根目录 /。
绝对路径:
路径的写法,由根目录 / 写起,例如:/usr/share/doc 这个目录。
相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成:cd ../man 这就是相对路径的写法啦!
接下来我们就来看几个常见的处理目录的命令吧:
- mkdir:创建一个新的目录
- rmdir:删除一个空的目录
- cp: 复制文件或目录
- rm: 移除文件或目录
- mv: 移动文件与目录,或修改文件与目录的名称
2文件夹属性
ls -l列出所有文件和文件夹以及详细信息
修改文件属性
1、chgrp:更改文件属组 就是上图的第二个root 就是属主
1
chgrp [-R] 属组名 文件名
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件属主,也可以同时更改文件属组
1 2
chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名
3、chmod:更改文件9个属性
|
|
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
先复习一下刚刚上面提到的数据:文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
|
|
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx—] 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= — = 0+0+0 = 0
|
|
1文件内容查看vim
Linux系统中使用以下命令来查看文件的内容:
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- nl 显示的时候,顺道输出行号!
- more 一页一页的显示文件内容
- less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
- head 只看头几行
- tail 只看尾巴几行
** im文本编辑:vim xx文件
**
一般模式常用命令
输入字母 表示动作 M 光标移动到这个屏幕的中央那一行的第一个字符 L 光标移动到这个屏幕的最下方那一行的第一个字符 G 移动到这个档案的最后一行(常用) ** 编辑模式**
输入字母 表示动作 i, I 进入输入模式(Insert mode):i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。(常用) a, A 进入输入模式(Insert mode):a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用) o, O 进入输入模式(Insert mode):这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』;O 为在目前光标所在处的上一行输入新的一行!(常用) r, R 进入取代模式(Replace mode):r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用) [Esc] 退出编辑模式,回到一般模式中(常用) 指令行模式,输入:进入指令行模式
指令行的储存、离开等指令 :w 将编辑的数据写入硬盘档案中(常用) :w! 若文件属性为『只读』时,强制写入该档案。
到底能不能写入, 和对该档案的档案权限有关啊!:q 离开 vi (常用) :q! (!在Vi中,常有强制意思) 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。 :wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用) ZZ 这是大写的 Z 喔!若档案没有更动,则不储存离开
若档案已经被更动过,则储存后离开!:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
常用查看命令
cat filename顺序查看 tac filename倒叙查看 nl filename以行号顺序查看 head -n 20 /etc/csh.login 显示前20行 tail -n 20 /etc/csh.login 显示后20行
2常用命令
sync保存,将数据由内存同步到硬盘中。
shutdown –h now # 立马关机
shutdown –h 20:25 # 系统会在今天20:25关机
shutdown –h +10 # 十分钟后关机
shutdown –r now # 系统立马重启
cp 时输入 首字母然后按住Tab会自动补全
command(命令) | parameter(参数) | example(例子) |
---|---|---|
ls 列出目录 | -a 全部文件(包含隐藏.开头的) -l 详情列出,属性等 |
ls -al |
cd:切换目录 | cd /回到根目录 cd ..返回上一级 |
cd lusenlin cd ~回到当前家目录 |
pwd ( 显示目前所在的目录 ) Print Working Directory |
-P显示确实路径,而非连接(link) 路径。 | pwd -P |
mkdir (创建新目录) | -m :文件权限,默认权限 (umask) 将失效 -p :(包含上级目录)递归创建目录 |
mkdir -p test1/test2 mkdir -m 711 test2 |
rmdir [-p] 删除空目录 | p :连同上一级『空的』目录也一起删除 | rmdir -p test1/test2 |
cp ( 复制文件或目录 ) | -i:增加覆盖询问 | cp -i /root/install.sh /home |
rm ( 移除文件或目录 ) | -f : force意思,忽略不存在的文件,不警告 -r :递归删除啊!最常用在目录的删除了 -i :互动模式,删除前询问使用者 |
rm -i install.sh |
mv ( 移动文件与目录,或修改名称 ) | -u :若目标文件已经存在,且 source 比较新,才会升级 (update) -f :force 强制的意思,若已存在,直接覆盖; -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖! |
mv test mvtest重命名 |
rz -y可选上传文件
rpm -ivh 安装文件[i引导lead li:d
]
touch 创建文件
tar -zxvf 解压命令
grep文本内容搜索,find文件或者目录名称等匹配搜索
ping www.baidu.com 检查网络
ifconfig -a可选 查看ip地址
3帐号管理
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
postname 想要的主机名 修改主机名称
帐号CRUD
添加帐号
useradd 选项 用户名
- -c comment 指定一段注释性描述。
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -m 使用者目录如不存在则自动建立。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
useradd -m kuangshen 命令创建了一个用户kuangshen,其中-m选项用来为登录名kuangshen产生一个主目录 /home/kuangshen
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等
修改用户
usermod 选项 用户名 常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。
usermod -d /home/z –g developer kuangshen 表示把用户为kuangshen的主目录改为/home/z ,用户组为developer
修改密码
useradd 用户名 创建用户
用root创建账户后
passwd [操作] 用户名 进行设置密码
- -l 锁定口令,即禁用账号。
- -u 口令解锁。
- -d 使账号无口令。
- -f 强迫用户下次登录时修改口令。
删除用户
userdel 选项 用户名
userdel -r kuangshen 常用的选项是 -r,它的作用是把用户的主目录一起删除。
切换命令
exit退出当前用户 ctrl+d也是执行的exit命令
su 用户名 切换到xx用户
用户组
4进程管理
1、Linux中,每个程序都有一个进程,每个进程都有id。 2、每个进程都有一个父进程。 3、进程两种存在方式:前台,后台 4、一般服务都是后台运行,基本程序是前台运行。
把java程序运行时,加上nohup 表示后台执行程序
管道符|,ps -aux|grep mysql 进行过滤
命令
查看进程
ps 查看当前系统正在执行的各种进程的信息。(Process Status)
ps -xx:
- a 显示所有进程 -a 显示同一终端下的所有程序 -A 显示所有进程
1 2 3 4 5
ps -aux 查看所有进程,u以用户信息显示进程,x显示后台运行进程的参数** grep查找文件中符合条件的字符串** ps -aux|grep mysql pstree -pu 进程树 -p显示父ID,-u显示用户组
- –version 显示版本显示
结束进程
kill -9 xx进程id 表示强制结束进程,注意加上-9
killall -u lusenlin 结束用户lusenlin的所有进程
运行进程
1 2 3 4 5
**执行:startup.sh -->启动tomcat 当连接断开,就关闭。** **执行:shutdown.sh -->关闭tomcat** **nohup startup.sh & 解释:做为服务后台启动 &表示后台运行** ./startup.sh ./shutdown.sh
使用**&**后台运行程序:
- 结果会输出到终端
- 使用Ctrl + C发送SIGINT信号,程序免疫
- 关闭session发送SIGHUP信号,程序关闭(就是关闭ssh连接)
使用nohup运行程序:
- 结果默认会输出到nohup.out
- 使用Ctrl + C发送SIGINT信号,程序关闭
- 关闭session发送SIGHUP信号,程序免疫
平日线上经常使用nohup和&配合来启动程序:
- 同时免疫SIGINT和SIGHUP信号
5软件安装
软件安装一般有三种方式:rpm(JDK),解压缩(tomcat),yum在线安装(docker)
安装软件先查看是否安装
java -version 查看版本
有的话需要卸载 rpm -qa|grep jdk 检查JDK版本
卸载命令:rpm -e –nodeps jdkxx版本(写上面查出来的) 强制删除
安装命令:rpm -ivh jdk-8u221-linux-x64.rpm 第三个参数是rpm安装包名
配置环境变量
/etc/profile环境变量在这个路径下配置
vim /etc/profile 打开这个文件
1 2 3 4 5 6 7
JAVA_HOME=/usr/java/jdk1.8.0_221-amd64 CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export PATH CLASSPATH JAVA_HOME **让新增的环境变量生效!** source /etc/profile
把环境变量配置到最后,复制后点击鼠标右键,然后ESC退出一般模式,输入:wq保存后退出
让新增的环境变量生效:source /etc/profile
1 RPM(下载JDK)
首先去https://www.oracle.com/java/technologies/javase-downloads.html网站下载jdk-14.0.1_linux-x64_bin.rpm选择x64位,rpm安装包。
然后通过WinSCP放到home文件中
安装命令:rpm -ivh jdk-8u221-linux-x64.rpm 第三个参数是rpm安装包名
查询命令: rpm -qa|grep jdk 检查JDK版本
卸载命令:rpm -e –nodeps jdkxx版本(写上面查出来的) 强制删除
|
|
/usr/java/jdk1.8.0_241-i586
2tar(解压Tomcat)
先去下载apache-tomcat-9.0.34.tar.gz,然后传输到linux上,在/usr目录下解压, 解压命令==tar -zxvf apache-tomcat-9.0.22.tar.gz # 解压==
运行Tomcat,进入bin目录 cd usr/apache-tomcat-9.0.34/bin
|
|
3yum(安装docker)
yum安装方法:==yum -y install yum源==
由于yum安装慢,所以设置yum源为阿里源
1备份mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2下载新的CentOS-Base.repo 到/etc/yum.repos.d/
1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3运行yum makecache生成缓存
4更新yum -y update
若有之前版本需要卸载,sudo yum remove docker \ …省略,copy官网就好。
1下载yum install -y yum-utils 安装yum工具包
2设置国内安装地址(官网是国外地址)yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3更新yum软件包索引yum makecache fast 4安装Docker CE yum -y install docker-ce docker-ce-cli containerd.io
5启动dockersystemctl start docker 6测试docker version docker run hello-world docker images
4yum(安装mysql8.0)
官网地址https://dev.mysql.com/downloads/repo/yum/
选择RHd Hat linux7,点击Download,来到新页面,右击a标签复制链接。
因为官网比较慢https://developer.aliyun.com/packageSearch去阿里云官网复制连接,发现阿里云也慢
Linux中:
1、 wget 链接 2、rpm -Uvh mysql80-community-release-el7-3.noarch.rpm 进行安装第三个参数在上一步 后面有 -Uvh:升级软件包
3、选择发行版本进行安装,默认情况下会选择要安装的最新GA版本MySQL,可以跳过这一步 骤。所有其他系列(例 如,MySQL 5.7系列)的子存储库均被禁用。 yum repolist all | grep mysql 列出所有版本,发现8.0是enbaled,若要安装5.7需要禁用8.0,启用5.7。
1 2 3 4
yum-config-manager --disable mysql80-community #禁用8.0 若执行上述命令command not found 是因为yum-config-manager在yum-utils里,需要** 安装yum-utils 命令为:yum -y install yum-utils** yum-config-manager --enable mysql57-community #启用5.7版本
4、安装yum install mysql-community-server 如果安装过程中提示 Is this ok [y/N] ,输入y即可
5、mysql –version安装好后查看版本
启动mysql
1 2 3 4
启动mysql服务** sudo systemctl start mysqld.service 查看运行状态 active是活动的** sudo systemctl status mysqld.service
登录mysql 若是上文安装,则有默认密码(也可以在宝塔面板直接设置) 查看默认密码:grep “password” /var/log/mysqld.log 可能找不到
1修改密码 在/etc/my.cnf在mysqlID下加入skip-grant-tables就可以直接root免密码登录 5.7版本修改密码,登录后use mysql 然后执行下面命令 update mysql.user set authentication_string=password(‘123456’) where user='root’; 8.0版本修改密码,百度。
2修改密码另一种方式–推荐
下载mysql.client 后才能使用下面的命令 /usr/bin/mysqladmin -u root password ‘new-password’
mysql -h localhost -u root -p ip地址可选
远程连接
1 2 3
grant all privileges on *.* to root@"%" identified by "npiHNftJXXJtPsfc"; grant all privileges on *.* to root@"localhost" identified by "npiHNftJXXJtPsfc"; flush privileges; #mysql中刷新系统权限
然后还需要开启端口号3306,可以在宝塔面板直接开启,也可以Linux手动开启。(云服务器也需要开启)
或者直接navicat使用shh+mysql账号密码
大小写敏感https://www.cnblogs.com/micro-chen/p/9165170.html
5tar安装redis
-
保证虚拟机处于连接互联网状态,执行 yum install gcc-c++ ,Completed !!
-
下载redis-tar.gz文件, 执行 tar –xvf redis-5.0.7.tar.gz解压
-
进入redis-5.0.7/deps/jemalloc目录执行 ./configure这个可执行文件
-
进入解压以后的目录 cd redis-5.0.7,执行make CFLAGS="-march=i686" 编译redis源码
- 进入 解压的redis-5.0.7/src目录下,执行./redis-server启动redis服务器
6重要设置
防火墙
Linux中有两种防火墙软件,ConterOS7.0以上使用的是==firewall==,ConterOS7.0以下使用的是iptables。
|
|
|
|
另一种==iptables防火墙==
|
|
7项目发布
** Springboot项目**
用idea的package命令打包,targer目录下找到jar文件,上传到服务器中,home/xx用户。 若是SpringBoot项目,注意要先开启端口号。 java -jar 文件名 启动项目,ctrl+c关闭项目, 想要后台启动加上nohup 表示后台执行程序
SSM项目依赖Tomcat服务器+vue前后端
SSM项目直接把打包war放到Tomcat的webapps目录就好了。 然后启动Tomcat。(若有docker可以安装tomcat然后挂载一个数据卷,这样每次放到数据卷中就OK了)
Vue项目 1安装node环境 可以在下载页面https://nodejs.org/en/download/中找到下载地址。然后执行指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
1下载** wget https://nodejs.org/dist/v9.3.0/node-v9.3.0-linux-x64.tar.xz 2依次解压** xz -d node-v9.3.0-linux-x64.tar.xz tar -xf node-v9.3.0-linux-x64.tar 3先确认你nodejs的路径,我这里的路径为 目录/node-v9.3.0-linux-x64/bin。确认后依次执行** 进行关联,相当于创建快捷方式。** ln -s /usr/node-v9.3.0-linux-x64/bin/node /usr/local/bin/node ln -s /usr/node-v9.3.0-linux-x64/bin/npm /usr/local/bin/npm 4把目录/node-v9.3.0-linux-x64/bin配置到用户环境** cd ~ #切换到根目录 ls -a #显示所有文件,包含隐藏 vi .bash_profile #修改用户环境变量 在PATH末尾加上:/目录/node-v9.3.0-linux-x64/bin source .bash_profile #马上执行这个更改 5确认版本 node -v ** 6全局安装模块n 查看n模版的帮助文档n -h** npm i -g n 7可选 安装yarn** npm install yarn -g ln -s 目录/node-v9.3.0-linux-x64/bin/yarn /usr/bin/yarn
让vue项目运行在nginx服务器上
用docker创建nginx服务器
1 2 3 4 5 6
docker run -d -p 9528:80 \ --name=vue-9528 \ -v /home/lsl/dist:/usr/share/nginx/html \ -v /home/mutou/nginx/conf.vue:/etc/nginx/conf.d \ nginx
vue-cli安装,cnpm install -g vue-cli 建立软连接ln -s 目录usr/nodejs/node-v10.19.0/bin/vue /usr/local/bin/vue vue -V //查看vue的版本信息
2打包前端项目(npm run build:prod) 本地压缩后传递到linux上,unzip zipFileName 进行解压
1 2 3 4 5 6 7
安装依赖 或者yarn** npm install 打包项目 或者yarn build ** npm run build 打包后发现多个文件夹 dist,里面就是打包好的静态文件。** 若报错,则去查看package.json的script有没有Build命令, 应该运行:npm run build:prod -report 可视化打包,report可视化
第二章-VMware
1安装使用VMware
根据ios镜像安装系统,基本上都是根据向导。
1查看自身ip地址(注意:#是管理员root 123456,$是用户)
应用-系统工具-终端:ifconfig -a查看端口号
然后可以使用shell进行登录。(解决乱码,文件-属性-终端-编码)
第X章-云服务器
** 宝塔面板**
Bt-Panel: http://134.175.236.42:8888/baota username: lusenlin password: c9ef94cd
attribute | value |
---|---|
公网 | 134.175.236.42 |
内网 | 172.16.0.5 |
服务器账号:root | 服务器密码:Na~58*85341d |
mysql账号root | mysql密码:aHDJMt2ApBnKGpA4 |
账号:store_ssm_vue | 密码:123456 |
账号:mysql1 | 密码:123456 |
镜像:创建云服务器的模版
1连接服务器
下载SSH工具
Xshell试用一个月,可以下载puttys使用
puttys使用技巧,
注意事项
- 打开Linux端口,需要在云服务器上的安全组面板开启对应的出入规则。否则会被服务器商拦截
端口号
一个计算机最多有65535个端口,端口不能重复。
端口 | 服务 | 说明 |
---|---|---|
21 | FTP | FTP 服务器所开放的端口,用于上传、下载。 |
22 | SSH | 22端口就是 SSH 端口,用于通过命令行模式远程连接 Linux 系统服务器。 |
25 | SMTP | SMTP 服务器所开放的端口,用于发送邮件。 |
80 | HTTP | 用于网站服务例如 IIS、Apache、Nginx 等提供对外访问。 |
443 | HTTPS | 网页浏览端口,能提供加密和通过安全端口传输的另一种 HTTP。 |
3306 | MySQL | 3306端口,是 MySQL 数据库的默认端口,用于 MySQL 对外提供服务。 |
8080 | 代理端口 | 8080端口同80端口,是被用于 WWW 代理服务的,可以实现网页浏览,经常在访问某个网站或使用代理服务器的时候,会加上“:8080”端口号。另外 Apache Tomcat web server 安装后,默认的服务端口就是8080。 |
安全
先看云服务器的登录成功日志:last -n 20 ,显示20行 登录失败的日志:lastb -n 20,发现居然这么多ip在尝试登录自己的服务器
Mysql max_allowed_packet自动重置为1024,实际上我已经自行设置为2M,还是会自动重置,是因为被黑客通过域名+端口进行入侵了。 先执行sql指令:show variables like ‘%log%';
这里普通日志记录默认是OFF关闭的,将其打开。==每个人的日志存放位置不同== 直接开启:set global general_log = ON;(永久修改需要在my.cnf的【mysqld】中添加:general_log = 1)
然后等待一段时间后,进行查看,看是否有人将其修改过。
设置安全组的入站规则,允许132.57开头的ip访问 132.57.0.0/16
文章作者 卢森林
上次更新 2020-07-12