Linux
一、Linux系统概述
1、开机
开机会启动许多程序,它们在Windows叫做“服务”(service),在Linux就叫做“守护线程”(daemon)。
一般来说,用户登录的方式有三种:
- 命令行登录
- ssh登录
- 图形界面登录
2、关机
在Linux领域内大多数用在服务器上,很少遇到关机操作,毕竟服务器上跑着一个服务是永无止境的,除非特殊情况下,不得已才会关机。
关机指令为:shutdown;
sync # 将数据有内存同步到硬盘中
shutdown # 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
shutdown -h -10 # 这个命令,计算机将在10秒后关机
shutdown -h now # 立马关机
shutdown -h 20:25 # 系统会在今天的20点25关机
shutdown -h +10 # 十分钟后关机
shutdown -r now # 系统立马重启
shutdown -r +10 # 十分钟后重启
reboot # 就是重启,等同于 shutdown -r now
halt # 关闭系统,等同于 shutdown -h now 和 poweroff
总结一下:不管是重启还是关机,首先要运行sync命令,把内存中的数据写入到磁盘中。
最高权限账户为root,可以操作一切。
3、系统目录结构
- 登录系统后,在当前命令窗口下输入命令:
ls /
运行后如图所示:
以下是对这些目录的解释:
- /bin:bin是Binary的缩写,这个目录存放着最经常使用的命令。
- /boot:这里存放的是启动Linux时使用的核心文件,包括一些连接文件以及镜像文件。(不要乱动)
- /dev:dev是Device(设备)的缩写,存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/ect:这个目录用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每一个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
- /lib:这个目录里存放的系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。
- /lost + found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。(存放突然关机的一些文件)
- /media:Linux系统会自动识别一些设备,例如U盘,光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。(后面会把一些本地文件挂载在这个目录下)
/opt:这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认为空。
- /proc:这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/root:该目录为系统管理员,也称为超级权限者的用户主目录。
- /sbin:s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。
- /svr:该目录存放着一些服务启动之后需要提取的数据。
- /sys:这是linux2.6内核的一个很大的变化,该目录下安装了2.6内核中新出现的一个文件系统sysfs。
/tmp:这个目录是用来存放一些临时文件的,用完就丢的文件可以放在这个目录下
- /usr:这是一个非常重要的目录,用户的很多程序和文件都放在这个目录里,类似windows下的program files目录。
- /usr/bin:系统用户使用的应用程序。
- /usr/sbin:超级用户使用的比较高级的管理程序和系统守护线程。Super
- /usr/src:内核源代码默认的放置目录。
var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常修改的目录放在这个目录下。包括各种日志文件。
- /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删除掉或清除。
/www:存放服务器网站相关的资源,环境,网站的项目
二、环境搭建
1、安装CentOS
在虚拟机VMware16 pro 上安装CentOS
VMware的使用方式:
点击屏幕进入虚拟机、Ctrl + Alt将聚焦退出虚拟机!
使用ifconfig命令查看主机地址
查看服务器地址
2、使用工具连接与上传
使用Xshell工具连接终端
- 使用虚拟机使用命令查看主机地址
- 使用云服务器使用控制台查看主机地址
Ctrl + 鼠标滚轮,放大和缩小字体
使用XFTP工具上传文件
3、网卡设置
修改网络初始化配置,设定网卡在系统启动时初始化
cd / 进入根目录
cd etc 进入etc目录
cd sysconfig 进入sysconfig目录
cd network-scripts 进入network-scripts
vi ifcfg-ens33 编辑ifcfg-ens33文件
输入i进入编辑状态
移动光标
#把ONBOOT改为yes即可
ONBOOT="yes"
<Esc> : wq <Enter> 保存退出
重启系统
三、常用的基本命令(必会)
1、目录管理
绝对路径路径的全称::C:\Program Data\360safe\xxx.xx
相对路径,比如说360safe目录下,那这个文件xxx.xx文件,对应我们的相对配置就/xxx.xx
cd : 切换目录命令!
./:当前目录
cd… :返回上一级目录
1. ls(列出目录)
在Linux中 ls
是最经常使用的!
-a
参数:all,查看全部的文件,包括隐藏文件
-l
参数:列出所有的文件,包含文件的属性和权限,没有隐藏文件
所有的Linux可以组合使用!(d表示目录,-表示文件)
ls -l 的命令可以简写为 ll
2. cd 命令 切换目录
cd 目录名 (绝对路径都是以/开头,相对路径,对于当前目录该如何寻找 …/ …/)
特殊说明:
- ~表示用户的home目录
- .表示目前所在的目录
- …表示目前目录位置的上级目录
3. pwd显示当前用户所在的目录
[root@Aug ~]# pwd
/root
[root@Aug ~]# cd /bin
[root@Aug bin]# pwd
/bin
[root@Aug bin]# cd /usr/local
[root@Aug local]# pwd
/usr/local
4. mkdir 创建一个目录
mkdir [-p] dirName
说明:
-p:确保目录名存在,不存在的就创建一个,通过此选项,可以实现多层目录同时创建
5. rmdir 删除目录
[root@Aug test3]# cd /home
[root@Aug home]# ls
aug aug_ test1 test2
[root@Aug home]# rmdir test1 # 删除目录test1
[root@Aug home]# ls
aug aug_ test2
[root@Aug home]# rmdir test2 # 删除目录test2 因为下存在其他目录所以删除失败
rmdir: 删除 "test2" 失败: 目录非空
[root@Aug home]# rmdir -p test2
rmdir: 删除 "test2" 失败: 目录非空
[root@Aug home]# rmdir -p test2/test3/test4 # 必须加上-p参数以及目录层级才可执行成功
rmdir仅能删除空的目录,如果下面存在文件,需要先删除文件,递归删除多个目录 -p
参数即可。
6. cp (复制文件或者目录)
cp -r 原来的地方 新的地方
说明:
-r :如果复制的是目录需要使用此选项,此时将复制该目录下所有的子目录和文件
cp -r hello/ ./world 将hello目录和目录下的所有文件复制到world目录下
cp -r hello/* ./world 将hello目录下所有文件复制到world目录下
[root@Aug home]# ls
aug aug_ install.sh
[root@Aug home]# cp install.sh aug # 拷贝文件至目录
[root@Aug home]# ls
aug aug_ install.sh
[root@Aug home]# cd aug
[root@Aug aug]# ls
install.sh
[root@Aug aug]# cd ..
[root@Aug home]# cp install.sh aug # 如果文件重复,就选择覆盖或者放弃(y/n)
cp:是否覆盖"aug/install.sh"? y
[root@Aug home]#
7. rm(移除文件或者目录)
-f
忽略不存在的文件,不会出现警告,强制删除
-r
递归删除目录
-i
互动,删除询问是否删除
rm -rf / # 系统中所有文件就被删除了, 删库跑路就是这样!
[root@Aug aug]# ls
install.sh
[root@Aug aug]# rm -rf install.sh
[root@Aug aug]# ls
[root@Aug aug]# ^C
[root@Aug aug]#
8. mv 移动文件或者目录(重命名文件)
mv 源文件 目标
-f
强制移动
-u
只替换已经更新过的文件
[root@Aug home]# ls
aug aug_ install.sh
[root@Aug home]# mv install.sh aug/ # 移动文件
[root@Aug home]# ls
aug aug_
[root@Aug home]# cd aug
[root@Aug aug]# ls
install.sh
[root@Aug aug]# cd ..
[root@Aug home]# ls
aug aug_
[root@Aug home]# mv aug Yang # 重命名文件夹
[root@Aug home]# ls
aug_ Yang
举例:
mv hello.txt hi.txt 将hello.txt改名为hi.txt
mv hi.txt hello/ 将文件hi.txt移动到hello目录中
mv hello/ world/ 如果hello目录不存在,将hello目录改名为world
mv hello/ world/ 如果hello目录存在,将hello移动到world目录中
9.打包压缩包命令tar
作用:对文件进行打包、解包、压缩、解压
语法:tar [-zxcvf] fileName [files]
包文件后缀名 .tar
表示只是完成了打包,并没有压缩
包文件后最为.tar.gz
表示打包的同时还进行了压缩
说明:
-z:z代表的是gzip,通过gzip命令处理文件,gzip可以对文件压缩或者解压
-c:c代表的是create,即创建新的包文件
-x:x代表的是extract,实现从包文件中还原文件
-v:v代表的是verbose,显示命令的执行过程
-f:f代表的是file,用于指定包文件的名称
tar -cvf 打包
tar -zcvf 打包压缩
tar -xvf 解包
tar -zxvf 解压
举例:
打包
- tar -cvf hello.tar ./* 将当前目录下所有文件打包,打包后的文件名为hello.tar
- tar -zcvf hello.tar.gz ./* 将当前目录下所有文件打包并压缩,打包后的文件名为hello.tar.gz
解包
- tar -xvf hello.tar 将hello.tar文件进行解包,并将解包后的文件放在当前目录
- tar -zxvf hello.tar.gz 将hello.tar.gz文件进行解压,并将解压后的文件放在当前目录
- tar -zxvf hello.tar.gz -C /usr/local 将hello.tar.gz文件进行解压,并将解压后的文件放在/usr/local目录
常用:tar -zxvf xxxx.tar.gz -C /usr/local
10.查找命令find
,grep
find:
作用:在指定目录下查找文件
语法:find dirName -option fileName
举例:
find . -name “*.java” 在当前目录及其子目录下查找.java结尾文件
find /itcast -name “.java” 在/itcast目录及其子目录下查找.java结尾的文件
grep:
作用:从指定文件中查找指定的文本内容
语法:grep word fileName
举例:
- grep Hello HelloWorld.java 查找HelloWorld.java文件中出现的Hello字符串的位置
- grep hello*.java 查找当前目录中所有.java结尾的文件中包含hello字符串的位置
11.常用命令总结
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
1 | ls | list | 查看当前目录下的内容 |
2 | pwd | print work directory | 查看当前所在目录 |
3 | cd[目录名] | change directory | 切换目录 |
4 | touch[文件名] | touch | 如果文件不存在,新建文件 |
5 | mkdir[文件名] | make directory | 创建目录 |
6 | rm[文件名] | remove | 删除指定文件 |
在执行Linux命令时,提示信息如果为乱码,这是由于编码形式倒是的,需要修改Linux的编码
echo 'LANG="en_US.UTF-8" ' >> /etc/profile
source /etc/profile
- Tab键自动补全
- 连续两次Tab键,会给出操作提示
- 使用上下箭头快速调出曾经使用过的命令
- 使用clear命令或者ctrl+l的快捷键快速清屏
2、基本属性
十个字母;1类型
1.看懂文件属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保证系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux中我们可以使用 ll 或者 ls -l 命令来显示一个文件的属性以及文件所属的用户和组,如 :
实例中,boot文件的第一个属性用“d”表示,“d”在Linux中代表该文件是一个目录文件。
在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”字符表示,则有执行权限,如果用“-”表示,则没有执行权限。
在以上实例中,boot文件是一个目录文件,属主和属组都为root。
2. 修改文件属性
1、chgrp:更改文件属组
chgrp [-R] 属性名 文件名
-R: 递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件属组,也可以同时更改文件属组
chown [-R] 属性名 文件名
chown [-R] 属性名:属性名 文件名
3、chmod:更改文件9个人属性(必须要掌握)
你没有权限操作此文件!
chmod [-R] xyz 文件或目录
Linux文件属性有两种设置方法,一种是数字(常用的是数字),一种是符号。
Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。
文件的权限字符:【-rwx rwx rwx】,这九个权限三个三个一组,我们使用数字来代表各个权限,对照表如下:
r:4 w:2 x:1
可读可写不可执行 rw- 6
可读可写不可执行 rwx 7chmod 777 文件赋予所有用户可读可执行
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限位:[-rwxrwx]分数是:
- owner = rwx = 4 + 2 + 1 = 7
- group = rwx = 4 + 2 + 1 = 7
- others = - - - = 0 + 0 + 0 = 0
chmod 770 filename
3.文件内容查看
Linux系统中使用以下命令来查看文件的内容:
-
cat 由第一行开始显示文件内容,用来读文章,获取读取配置文件都使用cat命令 cat -n 由1开始对所有输出的行号编号
-
tac从最后一行开始显示,可以看出tac是cat的倒着写!
-
nl显示的时候,顺道输出行号!看代码的时候希望显示行号!(常用)
-
more 一页一页的显示文件内容(空格代表翻页,enter代表向下看一行,:f行号)
操作说明: -
回车键 向下滚动一行
-
空格键 向下滚动一屏
-
b 返回上一屏
-
q或者Ctrl + c 退出more
-
less和more类似,但是比more更好的是,他可以往前翻页!(空格下翻页,上下键代表翻动页面!退出q命令,查找字符串/要查询的字符,向上查询使用?要查询的字符串,n继续搜寻下一个,N向上寻找!)
-
head只看头几行(通过-n参数来控制显示几行)
-
tail 行数 只看尾巴几行
tail [-f] fileName
-f 动态读取文件末尾内容并显示,通常用于日志文件的内容输出
你可以用*man [命令]*来查看各个命令的使用文档,如:man cp。
网络配置目录:cd /etc/sysconfig/network-scripts CentOS7
ifconfig命令查看网络配置!
拓展:Linux链接的概念(了解即可)
Linux的链接分为两种:硬链接、软链接
硬链接: A----B;假设B是A的硬链接,那么他们两个指向同一个文件!允许一个文件拥有多个路径,用户可以通过这种机制来建立硬链接到一些重要文件上,防止误删!
软连接: 类似windows下的快捷方式,删除的源文件,快捷方式也访问不了!
创建连接 ln命令!
touch
命令创建文件
echo
输入字符串,也可以输入到文件中
[root@Aug home]# touch f1 # 创建一个f1文件
[root@Aug home]# ls
aug_ f1 Yang
[root@Aug home]# ln f2 # 创建一个硬链接 f2
ln: failed to access "f2": 没有那个文件或目录
[root@Aug home]# ln f1 f2
[root@Aug home]# ls
aug_ f1 f2 Yang
[root@Aug home]# ln -s f1 f3 # 创建一个软链接(符号链接) f3
[root@Aug home]# ls
aug_ f1 f2 f3 Yang
[root@Aug home]# echo "i love dddd " >> f1 # 向f1文件中写入一些字符串
[root@Aug home]# ll
总用量 12
drwx------. 15 aug_ aug_ 4096 4月 25 20:43 aug_
-rw-r--r--. 2 root root 13 4月 26 14:13 f1
-rw-r--r--. 2 root root 13 4月 26 14:13 f2
lrwxrwxrwx. 1 root root 2 4月 26 14:12 f3 -> f1
drwx-wx-wx. 2 root root 24 4月 26 11:19 Yang
[root@Aug home]# cat f1 # 查看f1
i love dddd
[root@Aug home]# cat f2 # 查看f2
i love dddd
[root@Aug home]# cat f3 # 查看f3
i love dddd
删除f1之后 查看 f2 和 f3的区别
[root@Aug home]# rm -rf f1
[root@Aug home]# ll
总用量 8
drwx------. 15 aug_ aug_ 4096 4月 25 20:43 aug_
-rw-r--r--. 1 root root 13 4月 26 14:13 f2
lrwxrwxrwx. 1 root root 2 4月 26 14:12 f3 -> f1
drwx-wx-wx. 2 root root 24 4月 26 11:19 Yang
[root@Aug home]# cat f2 # f2 硬链接还在
i love dddd
[root@Aug home]# cat f3 # f3(软链接、符号链接)快捷方式失效!
cat: f3: 没有那个文件或目录
3.Vim编辑器
1. 什么是Vim编辑器
要使用vim命令,需要我们自己安装,使用命令yum install vim
说明:
1、在使用vim命令编辑文件时,如果指定的文件存在则直接打开此文件。如果指定的文件不存在,则新建文件。
2、vim在进行文本编辑时共分为三种模式,分别为命令模式,插入模式和底线模式。这三种模式之间可以相互切换。我们在使用vim时一定要注意我们当前所处的是哪种模式。
vim通过一些插件可以实现和IDE一样的功能!
Vim是从Vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛的使用。尤其是Linux中,必须要会使用Vim (查看内容,编辑内容,保存内容!)
vi是老式的字处理器,不过功能已经很齐全了,但是还是有很多可以进步的地方。
Vim则是程序开发者的一项很好用的工具。
所有的Unix Like系统都会内建vi文本编辑器,其它的文本编辑器则不一定会存在。
Vim键盘图:
2.三种使用模式
基本上vi/vim共分为三种模式,分别为命令模式(Command mde),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
- i切换到输入模式,以输入字符。
- x删除当前光标所在的字符。
- : 切换到底线命令模式,以在最后一行输入命令。如果是编辑模式,需要先退出编辑模式!ESC
若想要编辑文本:启动Vim,进入命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
- 命令模式下可以查看文件内容,移动光标(上下左右箭头、gg【开头】、G【末尾】)
- 通过vim命令打开文件后,默认进入命令模式
- 另外两种模式需要首先进入命令模式,才能进入彼此
输入模式:
在命令模式下按下 i 就进入了输入模式。
在输入模式中,可以使用以下按键:
- 插入模式下可以对文件内容进行编辑
- 在命名模式下按下
[i,a,o]
任意一个,可以进入插入模式,进入插入模式后,下方会出现【insert】字样 - 在插入模式下按下
Esc
键,回到命令模式 - 字符按键以及Shift组合,输入字符
- Enter,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up / Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。光标就移动到了最底下,就可以在这里输入一些底线命令了!
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(省略了冒号): wq(保存并退出)
- 底行模式下可以通过命令对文件内容进行查找、显示行号、退出等操作
- 在命名模式下按下
[:,/]
任意一个,可以进入底行模式 - 通过/方式进入底行模式后,可以对文件内容进行查找
- 通过:方式进入底行模式后,可以输出
wq(保存并退出)
,q!(不保存退出)
、set nu(显示行号)
- q 退出程序
- w 保存文件
按ESC键可随时退出底线命令模式。
可以将这三种模式想成底下的图标来表示:
3.完整的演示说明
新建或者编辑文件,按i进入编辑模式,编写内容,编写完成后退出编辑模式,Esc,退出之后进入底线命令模式 : ! 输入 wq保存退出!
4. Vim按键说明
第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等
移动光标的方法 | |
---|---|
h 或 向左箭头(⬅) | 光标向左移动一个字符 |
j 或 向下箭头(⬇) | 光标向下移动一个字符 |
k或 向上箭头(⬆) | 光标向上移动一个字符 |
l 或 向右箭头(➡) | 光标向右移动一个字符 |
[Ctrl] + [f] | 屏幕【向下】移动一页,相当于[Page Down]按键(常用) |
[Ctrl] + [b] | 屏幕【向上】移动一页,相当于[Page Up]按键(常用) |
[Ctrl] + [d] | 屏幕【向下】移动半页 |
[Ctrl] + [u] | 屏幕【向上】移动半页 |
+ | 光标移动到非空格符的下一页 |
- | 光标移动到非空格符的上一页,配置文件中空格较多! |
数字< space > | 按下数字后再按空格键,光标会向右移动这一行的n个字符,快捷切换光标。例如输入: 5 空格 ,数字+空格 即可 |
0或功能键[Home] | 这是数字【0】:移动到这一行的最前面字符处(常用) |
$或者功能键[end] | 移动到这一行的最后面字符处(常用) |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个档案的最后一行(常用) |
nG | n为数字。移动到这个档案的第n行,例如20G则会移动到这个档案的第20行(可配合:set nu) |
gg | 移动到这个档案的第一行,相当于1G啊!(常用) |
数字< Enter > | 数字+Enter,光标向下移动n行(常用) |
搜索替换 | |
---|---|
/word | 向光标之下寻找一个名称为word的字符串。例如要在档案内搜索word这个字符串,就输入/vbird即可!(常用) |
? word | 向光标之上寻找一个字符串名称为word的字符串 |
n | 这个n是英文按键。代表重复前一个搜寻动作,举例来说,如果刚刚我们执行/vbird去向下搜寻vbird这个字符串,则按下n后,会向下继续搜寻下一个名称为vbird的字符串。如果执行?vbird的话,那么按下n则会向上继续搜寻名称为vbird的字符串! |
N | 这个N是英文按键。与n刚好相反,为【反向】进行前一个搜寻动作,例如/vbird后,按下N则表示【向上】搜寻vbird。 |
删除、复制与粘贴 | |
---|---|
x,X | 在一行字当中,x为向后删除一个字符(相当于[del]按键),X为向前删除一个字符(相当于[backspace]亦即是退格键)(常用) |
nx | n为数字,连续向后删除n个字符,举例来说,我要连续删除10个字符。 【10x】 |
dd | 删除游标所在的那一整行(常用) |
ndd | n为数字。删除光标所在的向下n行,例如20dd则是删除20行(常用) |
d1G | 删除光标所在到第一行的所有数据 |
dG | 删除光标所在到最后一行的所有数据 |
d$ | 删除游标所在处,到该行的最后一个字符 |
d0 | 那个数字是0,删除游标所在处,到改行的最前面一个字符 |
yy | 复制游标所在的那一行(常用) |
nyy | n为数字,复制光标所在的向下n行,例如20yy则是复制20行(常用) |
y1G | 复制游标所在行到第一行的所有数据 |
yG | 复制游标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p,P | p为将复制的数据在光标下一行贴上,P贴为贴在游标上一行!举例来说,我目前光标在第20行,且已经复制了10行数据。则按下p之后,那10行数据会贴在原本的20行之后,亦即由21行开始贴。但如果是按下p呢?那么原本的第20行会被推到变成30行(常用) |
J | 将光标所在行与下一行的数据结合成同一行 |
c | 重复删除多个数据,例如向下删除10行,[10cj] |
u | 复原前一个动作(常用) |
[Ctrl] + r | 重复上一个动作(常用) |
第二部分:一般模式切换到编辑模式的可用的按钮说明
进入输入或取代的编辑模式 | |
---|---|
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] | 将编辑的数据存储成另一个档案(类似另存新档) |
:r[filename] | 在编辑的数据中,读入另一个档案的数据,亦即将【filename】这个档案内容加到游标所在行后面 |
:n1,n2 w[filename] | 将n1到n2的内容存储filename这个档案 |
:!command | 暂时离开vi到指令行模式下执行command的显示结果!例如【:! Is/home】即可在vi当中看/home底下以Is输出的档案信息! |
:set nu (设置行号,经常使用) | 显示行号,设定之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与set nu相反,为取消行号! |
4.账号管理
一般在公司中,用的都不是root账户
1.简介
Linux系统是一个多用户多任务的分时操作系统, 任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行追踪,并控制它们对系统资源的访问,另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个唯一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改
- 用户口令的管理
- 用户组的管理
2.用户账号的管理
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户好、用户组、主目录和登录Shell等资源。
属主,属组
3. useradd 命令 添加用户
useradd -选项 用户名
[root@Aug home]# useradd -m AstheWind # 创建一个用户!
[root@Aug home]# ls
AstheWind aug_ Yang
Linux中一切皆文件,这里的添加用户说白了就是往某一个文件中写入用户的信息了! /etc/passwd
选项
- m:自动创建这个用户的主目录/home/aug
- c: comment 指定一段注释性描述
- -d :目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g:用户组 指定用户所属的用户组。
- -G:用户组 用户组指定用户所属的附加组。
- -m:使用者目录如不存在则自动建立。
- -s:Shell文件,指定用户的登录Shell。
- -u:用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名
- 只当新账号的登录名
4. userdel 删除用户
usermod 对应修改的内容 修改哪个用户
如果一个账号不在使用,可以从系统中删除。
删除用户就是将etc/passwd等系统文件中该用户记录删除,必要时还删除用户的主目录。
删除一个已有的用户账号使用userdel命令,其格式如下
userdel 选项 用户名
常用的选项是-r,它的作用是把用户的主目录一起删除。
userdel -r AstheWind 删除用户的时候将它的目录也一并删掉
[root@Aug home]# ls
AstheWind aug_ Yang
[root@Aug home]# userdel -r AstheWind
[root@Aug home]# ls
aug_ Yang
[root@Aug home]#
5. usermod 修改用户
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
usermod 选项 用户名
常用的命令有 -c , -d , -m , -g, -G , -s , -u 以及 -o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定范围新的资源值。
[root@Aug home]# usermod -d /home/233 wind
修改完毕之后查看配置文件即可
[root@Aug home]# cat /etc/passwd
6. su username(username你的用户名)
root用户
-
切换用户的命令为:su username
-
从普通用户切换到root用户,还可以使用命令:sudo su
-
在终端输入exit或logout或使用快捷方式ctrl + d,可以退回到原来的用户,其实ctrl + d也是执行exit命令
-
在切换用户时,如果想在切换用户之后使用新用户的工作环境,可以在su和username之间加 - ,例如 【su - root】
$表示普通用户
#表示超级用户,也就是root用户
如果购买服务器后,主机名是一个随机字符串!
7.用户的密码设置问题
一般通过root创建用户的时候!要配置密码
Linux上输入密码是不会显示的,你正常输入就可以了,并不是系统的问题
在公司中,一般拿不到公司的服务器的root权限,都是一些分配的账号
如果是超级用户的话:
passwad username:
new password:
re password:
如果是普通用户:
passwd
(current) UNIX password:
new password: # 密码不能太简单!
re password:
8.锁定账户!
root,比如张三辞职了!冻结账号,一旦冻结,这个人就登录不上系统了!
passwd -l wind # 锁定之后这个用户就不能登录了!
passwd -d wind # 没有密码也不能 登录!
在公司中你一般触及不到root用户!作为一个开发拿不到!
9.用户组管理
属主、属组
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理(开发、测试、运维、root)。不同Linux系统对用户的规定有所不同,如shihoLinux下的用户属于与它同名的用户组,这个用户组在创建用户的时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
10.创建一个用户组 groupadd
创建完用户组后可以得到一个组的id,这个id是可以指定的!-g 520
如果不指定就是自增1
11.删除用户组 groupdel
12.修改用户组的权限信息和名字 groupmod -g -n
13.切换用户组
# 登录当前用户 wind
$ newgrp root
14.拓展:文件的查看
/etc/passwd
完成用户管理的工作有很多种方法,但是每一种方法实际上都是对有关的系统文件进行修改。
与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括 /etc/passwd,/etc/shadow,/etc/group等。
下面分别介绍这些文件的内容:
/etc/passwd文件是用户管理工作涉及的最重要的一个文件
Linux系统中的每个用户都在 /etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
[root@Aug /]# cat etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
从上可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分割为7个字段,可以看出这个用户的主目录在哪里,可以看到属于哪一个组,其格式和具体含义如下:
用户名:口令(登录密码,不可见):用户标识号:组标识号:注释性描述:主目录:登录Shell
/etc/shadow/
由于/etc/passwd文件是所有用户可读的,如果用户的密码太过简单或规律比较明显的话,一台普通的计算机就能很容易的将他破解,因此对安全性能要求较高的Linux系统都把加密后的口令字分离出来,单独存放在一个文件夹中,这个文件是/etc/shadow文件。有超级用户才拥有该文件的读权限,这保证了用户密码的安全性。
它的文件格式与/etc/passwd类似,有若干个字段组成,字段之间用“:”隔开,这些字段是:
登录名 加密口令 最后一次修改时间 最小时间间隔 最大时间间隔 警告时间 不活动时间 失败时间 标志
/etc/group
用户组的所有信息都放在/etc/group文件中。
5.磁盘管理
1.df(列出文件系统整体的磁盘使用量)du(检查磁盘空间使用量)
[root@Aug home]# du -a
0 ./aug_/图片
0 ./aug_/视频
4 ./aug_/.bash_history
3944 ./aug_
0 ./Yang/install.sh
0 ./Yang
0 ./wind/.mozilla/extensions
0 ./wind/.mozilla/plugins
0 ./wind/.mozilla
4 ./wind/.bash_logout
4 ./wind/.bash_profile
4 ./wind/.bashrc
4 ./wind/.cache/abrt/lastnotification
4 ./wind/.cache/abrt
4 ./wind/.cache
0 ./wind/.config/abrt
0 ./wind/.config
4 ./wind/.bash_history
4 ./wind/.Xauthority
2.挂载 :mount
卸载 :umount -f [挂在位置] 强制卸载
6.进程管理
Linux中一切皆文件(文件:读写执行(查看,创建,删除,移动,编辑,复制),权限(用户、用户组)。系统:(磁盘,进程))
1.基本概念
- 在Linux中,每一个程序都有一个自己的一个进程,每一个进程都有一个id号。
- 每一个进程,都会有一个父进程。
- 进程可以有两种存在方式:前台,后台
- 一般的话服务都是后台运行的,基本的程序都是在前台运行的
2.命令
ps 查看当前系统中正在执行的各种进程信息
ps-xx :
- -a 显示当前终端运行的所有进程信息(当前进程的一个)
- -u以用户的信息显示进程
- -x显示后台运行进程的参数!
# ps -aux 查看所有的进程
ps -aux|grep mysql
ps -aux|grep redis
# | 在Linux中这个叫做管道服务 A |B
# grep 查找文件中符合条件的字符!
ps-xx|grep
过滤进程信息
ps-ef:可以查看到父进程的信息
ps -ef|grep mysql # 看父进程我们一般可以通过目录树结构来查看
pstree -pu
-p 显示父 id
-u 显示当前用户组
结束进程:
kill -9 进程的id
kill -9 进程的id
表示强制结束该进程
四、环境安装
软件安装的方式
- 源码编译安装
软件以源码工程的形式发布,需要自己编译打包 - rpm
软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题 - 解压缩安装(tomcat)
软件已经针对具体平台编译打包发布,只要解压,修改配置即可 - yum在线安装
一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题
1、JDK安装
开发Java的必要的环境!
- 下载JDK rmp。JDK11-RMP
- 安装Java环境
# 检测当前系统是否存在java环境 java -version
# rpm -qa 查询当前系统中安装的所有软件
# 如果有的话就需要卸载
# rpm -qa|grep jdk # 检查JDK的版本信息
# rpm -e --nodeps jkd8 # 卸载
# 卸载完毕即可安装Jdk
# rpm -ivk rpm包
卸载
安装
配置环境变量: /etc/profile
在文件的最后面增加Java的配置和windows安装环境变量一样的
export JAVA_HOME=/usr/java/jdk-11.0.2
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
让这个配置文件生效 `` source /etc/profile
检查安装是否成功:java -version
开启端口:
# 开启防火墙端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
# 重启防火墙
systemctl restart firewalld.service
# 查看所有开启的端口,如果是云服务器,需要配置安全组规则!
firewall-cmd --list-ports
2、TomCat安装
ssm war 就需要放到tomcat中运行了!
- 下载TomCat。官网链接,apache-tomcat-10.0.20.tar.gz
- 解压这个文件
tar -zxvf apache-tomcat-10.0.20.tar.gz
3. 启动tomcat! ./xxx.sh 脚本即可运行
# 执行 ./startup.sh
4. 查看TomCat启动是否成功,有多种方式:
- 查看启动日志
more /usr/local/apache-tomcat-10.0.20/logs/catalina.out
tail -50 /usr/local/apache-tomcat-10.0.20/logs/catalina.out - 查看进程
ps -ef | grep tomcat
注意:
- ps命令是linux下非常强大的的进程查看命令,通过ps-ef可以查看当前运行的所有进程的详细信息
- | 在Linux中称为管道,可以将前一个命令的结果输出给后一个命令作为输入
- 使用ps命令查看进程时,经常配合管道符和查找命令grep一起使用,来查看特定的进程
- 停止tomcat服务的方式
- 运行Tomcat的bin目录下的停止服务的脚本文件shutdown.sh
# 停止 ./shoutdown.sh
- 结束Tomcat进程
查看Tomcat进程,获取进程id
执行 kill -9 5028
注意:kill命令是Linux提供的用于结束进程的命令,-9表示强制结束
# 查看firewall服务状态
systemctl status firewalld、firewall-cmd --state
# 暂时关闭防火墙
systemctl stop firewalld
# 永久关闭防火墙
systemctl disable firewalld
# 开启防火墙
systemctl start firewalld
# 开启、重启、关闭firewalld.service服务
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
# 查看防火墙规则
# 查看全部信息
firewall-cmd --list-all
# 只看端口信息
firewall-cmd --list-ports
# 开启端口
开启端口命令:firewall-cmd --zone=public --add-port=80/tcp --
permanent
# 开启端口
开启端口命令:firewall-cmd --zone=public --remove-port=80/tcp --
permanent
#立即生效
firewall-cmd --reload
重启防火墙:systemctl restart firewalld.service
命令含义:
--zone # 作用域
--add-port=80/tcp # 添加端口,格式为:端口/通讯协议
--permanent # 永久生效,没有此参数重启后失效
注意:
1、systemctl是管理linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作
2、firewall-cmd是linux中专门用于控制防火墙的命令
3、为了保证系统安全,服务器的防火墙不建议关闭。
3、Docker安装
联网的情况下:yum install -y yum源
官网安装手册:Docker官网
在Linux下执行,一定要联网,yum在线安装
1.安装
- 检测CentOS7
[root@Aug bin]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
yum list docker 搜索docker安装包
- 安装准备环境
yum -y install 包名 # yum install 在线安装命令 -y 所有的提示都为y
yum -y install gcc
yum -y install gcc-c++
- 卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装yum-utils包(提供yum-config-manager 实用程序)
yum install -y yum-utils
- 设置stable镜像仓库
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum软件包索引
yum makecache fast
- 安装Docker CE
yum -y install docker-ce docker-ce-cli containerd.io
- 启动docker
systemctl start docker
- 测试
docker version
docker run hello-world
docker images
五、项目部署
1、手工部署
- 在IDEA中开发SpringBoot项目并打成jar包
- 将jar包上传到Linux服务器
mkdir /usr/local/app 创建目录,将项目jar包放到此目录
- 启动SpringBoot项目
java -jar 项目名
- 改为后台运行SpringBoot程序,并将日志输出到日志文件
目前程序运行的问题:
- 线上程序不会采用霸屏的形式运行程序,而是将程序后台运行
- 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息
nohup命令:英文全称no hang up (不挂起) ,用于不挂断地运行指定命令,退出终端不会影响程序的运行。
语法格式: nohup Command [Arg...][&]
参数说明:Command:要执行的命令
Arg:一些参数,可以指定输出文件
&:让程序在后台运行
举例:(后台运行java -jar命令,并将日志输出到hello.log文件)
nohup java -jar boot工程.jar &> hello.log &
- 停止SpringBoot程序
# 查看项目运行进程
ps -ef | grep boot项目.jar
# 杀死进程
kill -9 进程号
2、通过shell脚本自动部署项目
操作步骤:
1、在Linux中安装Git
①使用yum安装git
yum list git 列出git安装包
yum install git 在线安装git
②使用Git克隆代码
cd /usr/local/
git clone url
2、在Linux中安装Maven
Maven官网:链接
解压
tar -zxvf apache-maven-3.8.5-bin.tar.gz -C/usr/local
修改配置文件,加入以下内容
修改配置文件
vim /etc/profile
插入以下内容
export MAVEN_HOME=/usr/local/apache-maven-3.8.5
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
配置文件生效
source /etc/profile
查看maven版本
mvn -version
修改配置文件配置本地仓库
vim /usr/local/apache-maven-3.8.5/conf/settings.xml
加入以下配置
<localRepository>/usr/local/Maven_repository</localRepository>
3、编写Shell脚本(拉取代码,编译,打包,启动)
进入/usr/local目录下
cd /usr/local
创建目录sh 并进入sh
mkdir sh
cd sh
创建编辑脚本文件bootStart.sh
vim bootStart.sh
插入以下代码(更改项目有关名称)
#!/bin/sh
each ==========================================
echo 自动化部署
each ==========================================
# APP_Name 后跟项目名称
echo 停止原来运行的工程
APP_NAME =
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
echo 准备从Git仓库拉取最新代码
cd /usr/local/项目目录
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar 项目成名.jar &> 日志名.log &
echo 项目启动完毕
4、为了用户授予执行Shell脚本权限
chmod(英文全拼:change mode)命令是控制用户对文件的权限命令
Linux的权限分为:读(r)、写(w)、执行(x)三种权限
Linux的文件调用权限分为三级:文件所有者(Owner)、用户组(Group)、其他用户(Other Users)
只有文件所有者的超级用户可以修改文件或目录的权限
要执行shell脚本需要有对此脚本文件的执行权限
,如有没有则不能执行
shell脚本(Shell script),是一种Linux系统的脚本程序。
使用Shell脚本编程跟javascript、java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就行了。
为用户授权
6、执行Shell脚本
7、设置静态ip
注意
:不同的设备和系统与ifcfg-ens33文件名不一定一样,具体名称进入/etc/sysconfig/network-scripts/目录下查看
修改文件/etc/sysconfig/network-scripts/ifcfg-ens33,内容如下
vim /etc/sysconfig/network-scripts/ifcfg-ens33
编辑
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
# 修改以下内容
BOOTPROTO="static" # 使用静态IP地址,默认为dhcp
IPADDR="192.168.81.128" # 设置的静态IP地址
NETMASK="255.255.255.0" # 子网掩码
GATEWAY="192.168.81.2" # 网关地址
DNS1="192.168.81.2" # DNS服务器
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="c1131c5e-3b0e-4774-9e2f-83c7dee8b2a6"
DEVICE="ens33"
ONBOOT="yes"
重启网络服务使其生效
systemctl restart network
六、VMware(拓展)
快照
保存当前系统信息为快照,随时可以恢复,以防未来系统被你玩坏,就好比游戏中的归档!
平时的话,我们没配置一个东西就可以拍摄一个快照,保留信息
2. 本地网络配置
需要保证Linux虚拟机和本机处在一个网段!
Windows
Linux也必须要配置到对应的网段
/etc/sysconfig/network-scripts/