linux
一、Linux简介
此笔记所使用的Linux版本为CentOS 7
linux的核心思想
一切皆文件
现在很多的大型项目都是部署在Linux服务器端,所以Linux地位依然不可动摇,作为一个后端程序员,会Linux是基本功
Linux最初是由一个芬兰人在上大学的时候出于个人的爱好写出来的,Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统
1、Linux的版本
版本一览
市面上有很多Linux发行版,比如CentOS,Ubuntu,RedHat等等,其中还有kali linux 这个主要是用作安全渗透测试
2、Linux环境搭建
略,我这里使用的是阿里云轻量级服务器搭载的CentOS 7操作系统
二、Linux基本了解
1、关机
1 |
|
需要注意的是,重启和关机最好都在操作前,进行一下同步操作,在Linux里面,只要指令没有输出,就是指令成功了
2、系统目录结构
Linux采用的是树状目录结构,这点和Windows类似
1 |
|
三、常见命令
常见命令
1、xshell的使用
ctrl+滚轮 调节字体大小
clear 清屏
2、cd
切换目录
绝对路径:
路径的写法,由根目录 / 写起,例如:/usr/share/doc 这个目录。
1 |
|
相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成这样的:cd …/man 这就是相对路径的写法,也可以 cd 目录名直接进入下一层目录
补充说明一下
cd root = cd ~
cd … 返回上一级目录 (这中间有个空格
3、ls
展示当前目录的文件
1 |
|
-a 参数 :all 查看全部的文件 包括隐藏文件
-l 参数 :列出所有的文件 包含文件按的属性和权限 没有隐藏文件
所有的Linux可以组合使用,即可以使用ls -al,用以查看所有文件的信息
4、pwd
显示当前用户所在的目录
1 |
|
-P :显示出确实的路径,而非使用连接(link) 路径。
1 |
|
5、mkdir
新建文件夹
1 |
|
递归创建目录(创建多级目录)
1 |
|
删除目录 rmdir 目录名
如果目录不为空文件夹,则删除不会成功,需要删除文件
需要删除多个目录的话(递归删除) 需要加上-p参数
1 |
|
6、cp
拷贝文件
1 |
|
选项与参数:
-a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用)
-p:连同文件的属性一起复制过去,而非使用默认属性(备份常用);
-d:若来源档为连结档的属性(link file),则复制连结档属性而非文件本身;
-r:递归持续复制,用於目录的复制行为;(常用)
-f:为强制(force)的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;
-i:若目标档(destination)已经存在时,在覆盖时会先询问动作的进行(常用)
-l:进行硬式连结(hard link)的连结档创建,而非复制文件本身。
-s:复制成为符号连结档 (symbolic link),亦即『捷径』文件;
-u:若 destination 比 source 旧才升级 destination !
1 |
|
7、rm
移除文件或者目录
1 |
|
-f 忽略不存在的文件 不会出现警告, 强制删除
-r 递归删除目录
-i 互动 删除询问是否删除
rm -rf / 系统中所有的文件全部被删除,(删库跑路)
8、mv
1 |
|
移动文件或者目录 重命名文件
-f 强制移动
-u 只替换已经更新过的文件
1 |
|
补充说明
1 |
|
四、文件详解
1、文件的属性
在Linux中第一个字符代表这个文件是目录、文件或链接文件等等:
-
当为[ d ]则是目录
-
当为[ - ]则是文件;
-
若是[ l ]则表示为链接文档 ( link file );
-
若是[ b ]则表示为装置文件里面的可供储存的接口设备 ( 可随机存取装置 );
-
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标 ( 一次性读取装置 )。
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。每个文件的属性由左边第一部分的10个字符来确定(如下图)
从左至右用0-9这些数字来表示。第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。
其中:
第1、4、7位表示读权限,如果用"r"字符表示,则有读权限,如果用"-“字符表示,则没有读权限;
第2、5、8位表示写权限,如果用"w"字符表示,则有写权限,如果用”-“字符表示没有写权限;
第3、6、9位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用”-"字符表示,则没有执行权限。
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。
2、修改文件的属性
2.1、chgrp
更改文件属组
chgrp [-R] 属组名 文件名
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2.2、chown
更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
2.3、chmod
更改文件9个属性
chmod [-R] xyz 文件或目录
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。文件的权限字符为:『-rwxrwxrwx』, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
1 |
|
每种身份(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 |
|
补充说明
1 |
|
3、查看文件
Linux系统中使用以下命令来查看文件的内容:
-
cat 由第一行开始显示文件内容
-
tac 从最后一行开始显示,可以看出 tac 其实就是 cat 的倒着写
-
nl 显示的时候,顺道输出行号!
-
more 一页一页的显示文件内容
-
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
-
head 只看头几行
-
tail 只看尾巴几行
语法:
3.1 cat
选项与参数:
-
-A :相当于-vET 的整合选项,可列出一些特殊字符而不是空白而已;
-
-b :列出行号,仅针对非空白行做行号显示,空白行不标行号!
-
-E :将结尾的断行字节 $ 显示出来;
-
-n :列印出行号,连同空白行也会有行号,与 -b 的选项不同;
-
-T :将 [tab] 按键以 ^I 显示出来;
-
-v :列出一些看不出来的特殊字符
1 |
|
3.2 tac
tac与cat命令刚好相反,文件内容从最后一行开始显示,可以看出 tac 是 cat 的倒着写!如:
1 |
|
3.3 nl
显示行号
语法:
1 |
|
选项与参数:
-
-b :指定行号指定的方式,主要有两种:-b a :表示不论是否为空行,也同样列出行号(类似 cat -n);-b t :如果有空行,空的那一行不要列出行号(默认值);
-
-n :列出行号表示的方法,主要有三种:-n ln :行号在荧幕的最左方显示;-n rn :行号在自己栏位的最右方显示,且不加 0 ;-n rz :行号在自己栏位的最右方显示,且加 0 ;
-
-w :行号栏位的占用的位数。
测试:
1 |
|
3.4 more
一页一页翻动
在 more 这个程序的运行过程中,你有几个按键可以按的:
-
空白键 (space):代表向下翻一页;
-
Enter :代表向下翻『一行』;
-
/字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
-
:f :立刻显示出档名以及目前显示的行数;
-
q :代表立刻离开 more ,不再显示该文件内容。
-
b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用,对管线无用。
1 |
|
3.5 less
一页一页翻动,以下实例输出/etc/man.config文件的内容:
less运行时可以输入的命令有:
-
空白键 :向下翻动一页;
-
[pagedown]:向下翻动一页;
-
[pageup] :向上翻动一页;
-
/字串 :向下搜寻『字串』的功能;
-
?字串 :向上搜寻『字串』的功能;
-
n :重复前一个搜寻 (与 / 或 ? 有关!)
-
N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
-
q :离开 less 这个程序;
1 |
|
3.6 head
取出文件前面几行
语法:
1 |
|
选项与参数:-n 后面接数字,代表显示几行的意思!
默认的情况中,显示前面 10 行!若要显示前 20 行,就得要这样:
1 |
|
3.7 tail
取出文件后面几行
语法:
1 |
|
选项与参数:
-n :后面接数字,代表显示几行的意思
默认的情况中,显示最后 10 行!若要显示最后 20 行,就得要这样:
1 |
|
五、Linux链接
Linux链接的概念分为两种硬链接和软链接
1、硬链接
允许一个文件拥有多个路径 用户可以通过这种机制建立硬链接到一些重要文件上,防止误删
感觉像是文件复制了一份,存在了别的地方,即使原文件已经删除了,这个还是可以访问的
2、软链接
类似windows的快捷方式,和硬链接的区别就是,原文件如果已经删除了,这里使用ls查看的时候,该链接会变成红色,且无法打开(打开时会提示错误信息)
六、Vim编辑器
三种使用模式
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。这三种模式的作用分别是:
1、命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
-
i 切换到输入模式,以输入字符。
-
x 删除当前光标所在处的字符。
-
:切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
2、输入模式
在命令模式下按下 i 就进入了输入模式。
在输入模式中,可以使用以下按键:
-
字符按键以及Shift组合,输入字符
-
ENTER,回车键,换行
-
BACK SPACE,退格键,删除光标前一个字符
-
DEL,删除键,删除光标后一个字符
-
方向键,在文本中移动光标
-
HOME/END,移动光标到行首/行尾
-
Page Up/Page Down,上/下翻页
-
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
-
ESC,退出输入模式,切换到命令模式
3、底线命令模式
在命令模式下按下 : (英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
-
q 退出程序
-
w 保存文件
一般会wq一起使用,保存退出
按ESC键可随时退出底线命令模式。
七、账号用户和磁盘管理
1、账号用户管理
root是Linux系统中的最高权限
1.1、添加用户
1 |
|
一些参数说明
-
-c comment 指定一段注释性描述。
-
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-
-g 用户组 指定用户所属的用户组。
-
-G :在创建用户的时候就添加进组
-
-m :自动创建这个用户的主目录 /home/william
-
-s Shell文件 指定用户的登录Shell。
-
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
实际上就是添加了一个用户的目录
1.2、切换用户
切换用户的命令为:su username 【username即你的用户名】
从普通用户切换到root用户,还可以使用命令:sudo su
在终端输入exit或logout或使用快捷方式ctrl+d,可以退回到原来用户,其实ctrl+d也是执行的exit命令
在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加-,例如:【su - root】
$表示普通用户
#表示超级用户,也就是root用户
1.3、删除用户
1 |
|
1.4、修改用户
1 |
|
例如
1 |
|
临时插入
hostname 查看主机名
hostname 想改的成名字 即可更改主机名 (不过这是临时的,永久的需要配置文件修改
1.5 用户的密码设置
先了解基本的查看所有的用户
1 |
|
查看所有的用户,如果你拥有超级用户的权限
1 |
|
即可更改,不过输入密码的时候需要注意,Linux是不会显示密码的
锁定账户
1 |
|
1.6、用户组管理
创建一个用户组
1 |
|
创建后会有一个id 可以使用-g 520 指定 若不指定,则会自增
删除用户组
1 |
|
修改用户组
1 |
|
对Willam组修改id和名字
用户切换用户组
1 |
|
文件查看
1 |
|
密码存储在 /etc/shadow 里面
所有的密码都是加密过的
2、磁盘管理
2.1、df 列出文件系统的磁盘使用量
-
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-
-k :以 KBytes 的容量显示各文件系统;
-
-m :以 MBytes 的容量显示各文件系统;
-
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-
-H :以 M=1000K 取代 M=1024K 的进位方式;
-
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-
-i :不用硬盘容量,而以 inode 的数量来显示
2.2、du 检查磁盘空间使用量
1 |
|
选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
1 |
|
八、 进程管理
1 |
|
查看档期那系统正在执行的各种进程信息
-
-a 显示当前终端运行的所有的进程信息
-
-u 以用户的信息显示进程
-
-x 显示后台运行进程的参数
1 |
|
查看所有的进程,如果是想看到指定程序的进程可以,使用管道符过滤
1 |
|
如果想查询相关的父进程的信息
1 |
|
使用进程树查看
1 |
|
九、关于部署项目
- springboot的项目直接打包成jar包然后通过xftp上传到云服务器的root目录下
- 通过命令 netstat -anp | grep <端口号> 查看端口使用情况 lsof -i : (项目端口号) 查询当前端口是否有进程在使用
- 什么都没有显示,则表示没有进程在使用这个端口,如果有有进程,则通过命令 kill -9 (进程PID) 结束进程,空出端口号
- 通过命令 java -jar jar包名.jar (单次)启动项目或者命令 nohup java -jar jar包名.jar & (后台运行,永久)
- tail -f nohup.out 查看日志
注意:
-
在部署前要记得改数据库的用户名和密码以及文件的映射路径(如果你配置了的话)
-
查看想开的端口是否已开
1
firewall-cmd --query-port=8888/tcp 提示yes表示已开通,提示no表示未开通。
-
有时在云服务器的管理界面直接开放端口不管用,需要手动输入命令开放项目所使用的端口
1 |
|
这里需要注意一下,一般需要先在阿里云上面的服务器添加规则,然后还需要在服务器上面执行相应的命令,这才可以成功的访问。
最后 ctrl+c退出指令。