Linux
1.Linux简介
1.1 Linux的优劣
linux的优势:一种开源的操作系统,安装在计算机硬件上,用于管理计算机硬件和软件资源的系统软件。
其安全性,稳定性,高并发处理能力都比较高,比较适合做服务器
劣势:没有可视化的界面,不太适合普通用户
所以在日常生活中普通用户通常用windows,服务器用linux.
我们在开发中写代码时用windows,部署项目时用linux
1.2 Linux发展史
linux 的发行版本:linux于1991年开发出了linux内核程序,后来很多软件开发组织以及软件公司在内核基础之上,陆续推出
了很多不同版本的linux操作系统,其中比较火的是:Ubuntu(乌班图),RedHat(红帽),CentOs
不同厂商的linux其实几乎相同,只有个别命令不同,因为它们的内核是一样的
1.3 Linux目录结构
1>Linux只有一个根目录 /
2>层级式的目录结构:
bin ->user/bin: 系统的可执行文件,可以放在任何目录下执行
usr/local/bin: 用户自己的可执行文件,可以在任何目录下执行
etc: 存放配置文件.配置环境变量(etc/profile)
home: 每一个用户的根目录,用来保存用户的私人数据,默认情况下,目录名自己的用户名相同
opt: 存放额外安装的软件,相当于windows系统中的program files目录
![image-20210919162514832](https://raw.githubusercontent.com/OneTimes1/photo/master/C:%5CUser%5C14330%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images202111032105716.png)
1.4 Linux的远程操作
1>为什么要对linux进行远程操作? 因为在实际开发中,linux往往作为服务器存在的,存储的是数据,且服务器往往是
在一个单独的空间中存放,不会有人,这时我们想要操作数据就要远程连接linux,市面上主要用以下的两款软件,下面
分开进行介绍
2>Xshell: linux的终端模拟软件
安装并破解: 解压,破解(运行两个.bat文件),启动Xshell
连接远程linux系统: 创建会话:
查看linux系统的ip地址:ifconfig
3>Xftp: 文件传输软件: 远程对linux服务器传输软件, 因为在实际开发中, 想要将整理好的项目传输到linux上,就需要
用到此软件,或者将linux上的软件传输到windows上都需要此软件
安装并破解: 解压,运行两个bat文件,启动Xftp即可
2.Vi和Vim的使用
2.1简介
vi和vim编辑器是linux中的文本编辑器(类似windows中的记事本)
vim是vi的增强版,vi的绝大多数用法在vim都适用
2.2使用
vi和vim有三中模式:
1>一般模式:用vi或者vim命令打开文件(vim test.txt), 即可进入到一般模式
该模式可以查看文件的内容,并且可以通过上下左右键移动光标
不能编辑文件的内容
2>编辑模式:在一般模式下,按i或I或a或A键即可进入到编辑模式
可以编辑文件的内容
但是不能保存文件的内容
按esc即可退出该模式,进入到一般模式
3>命令行模式: 该模式只能从一般模式进入
一般模式下按:即可进入到该模式
输入命令: [1]q!----不保存强制退出编辑器
[2]wq----保存并退出编辑器
[3]q----只是退出编辑器
按esc返回到一般模式
使用mkdir 文件名 即可创建文件夹
使用vim 文档名 [1]如果该文件不存在会创建文件,并启用编辑器
[2]如果该文件存在,直接启动编辑器
vi和vim编辑器中的快捷键
1>复制当前行: 在一般模式下, 按yy 即可将光标所在行复制到剪切板
按p即可将剪切版中的内容粘贴到光标所在的下一行
2>复制多行: 在一般模式下, 按 数字yy 即可复制指定的行数
按p,即可把剪切板中的内容粘贴到光标所在的下一行
3>在文本文件中查找关键字: 在命令行的模式下,输入/关键字, 回车即可
按n,表示查找下一个关键字
4>删除光标所在的当前行: 在一般模式下,按dd,删除光标所在行
5>删除多行: 在一般模式下,按数字dd即可删除指定的行数
6>撤销上次编辑的内容: 在一般模式下,按u
7>显示行号: 在命令模式下,按 set nu 即可显示;
按set nonu 即可取消
3.linux中的用户管理
1>任何使用linux的系统资源的用户,必须使用一个合法的账号和密码一向系统管理员申请.
root是linux安装时默认创建的系统管理员账号,由root创建普通账号
2>添加一个用户
命令: useradd 用户名
在执行添加一个用户的命令后,linux会为我们做一下三件事情:
[1]创建一个用户(用户名)
[2] 在/home目录下创建的根目录,目录名称默认跟用户名相同
[3]在linxu中任何一个用户都至少属于一个组,新建用户时,如果不指定组,则会新建一个组,组名和用户名相同,
并且把该用户添加到该组中
补充:useradd -d /home/ww wangwu 创建用户的同时,指定用户的根目录
3>给用户设置密码
命令:passwd 用户名
注:[1]密码必须满足一定的复杂度
[2]输入su 用户名 即可进入到该用户的命令模式
[3]普通用户之间可以使用su随意进行切换(无需输入密码),但是普通用户向root用户切换时,需要输入root 的登陆密码.即:从权限高的用户向权限低的用户转,不需要输入密码,但是从权限低的用户向权限高的用户转 需要输入密码
4>删除用户
命令:有两种: userdel 用户名 该命令只会删除掉用户,不会删除掉用户home目录下的数据
userdel -r 用户名 该命令还会删除掉用户home下的数据(开发中常用)
注:[1]输入exit即可退出当前用户(快捷键ctrl+d)
[2]如果登录过该用户,那么必须先退出才能删除该用户
[3]只有在root用户的权限下才能删除用户
5>查看用户的信息:
命令: id 用户名
结果: 执行完该命令后,会查询到该用户的id,主组,附加组
组: 组的存在是为了控制权限,如某些组有权限查看某个文件夹
主组一旦确定后就不能再进行更改
附加组越多,权限也就越高
4. linux中组的管理
1>linux中的组相当于角色的概念,可以对有共性的用户进行统一的管理;
每个用户至少属于一个组,不能独立于组存在,也可以有多个组,所属的组越多,权限越大
新建用时指定的组为主组, 如果不声明组,则默认主组名和用户名相同
如果声明组,那么该组就是主组,主组是不能改变的
2>添加组
命令:groupadd 组名
3>删除组: groupdel 组名
4>把用户添加到组中: gpasswd -a 用户名 组名
5>把用户从组中移除: gpasswd -d 用户名 组名
6>添加用户时,指定所属的组(主组):useradd -g 组名 用户名
![image-20210922100444142](https://raw.githubusercontent.com/OneTimes1/photo/master/C:%5CUser%5C14330%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images202111032105717.png)
5. linux的实操命令
5.1 linux中的帮助命令
在实际开发中,有些命令我们忘记了,可以通过网络查看,也可以通过linux内置的说明来查看
1>用来查看命名的内置帮助信息: man 命令
按回车可以按行查看,按空格可以按页查看
例: man ls
2>用来查看命名的内置帮助信息(不太常用): help 命令
例: help cd
5.2 linux中的文件和目录操作命令
1>查看当前所在目录: pwd
2>查看指定目录下的所有的子目录和文件目录: ls [附加条件] [指定目录]
注:[] 代表可以不存在,当附加条件和指定目录都不存在的时候,ls 查看的是当前目录下所有的子目录和文件列表
ls -l /home: 以列的形式显示
ls -a /home: 显示指定的目录下所有的子目录和文件(包括虚拟(隐藏)的目录)
ls -al /home: 以列的形式显示指定目录下所有的子目录和文件(包括虚拟(隐藏)的目录)
注:al和la的效果是一样的,可以不分先后顺序
虚拟目录主要是两个目录: .和…
.表示当前目录
…表示上一级目录
3>切换目录: cd 目录名
[1]绝对目录: 以盘符开始的目录叫做绝对目录,从盘符开始查找目标
cd/opt/testDir
~: 当前用户的根目录,在任何目录下执行:cd ~,进入当前用户的根目录
[2]相对目录: 以目录名开始的目录叫相对目录,从当前目录开始查找目标目录
cd testDir
…: 当前目录的上一级目录,从当前目录开始查找它的上一级目录
.: 当前目录
当前目录的作用:执行文件时,必须要 用当前文件/待执行文件 才能执行
如:xxx.sh必须写成====>./xxx.sh
4>创建目录: mkdir 目录名
其中目录名即可以写绝对路径也可以写相对路径
例:mkdir /opt/testdir/test1/ 在/opt/testdir/ 目录下创建一个目录test1
mkdir test2 在/opt/testdir/ 目录下创建一个目录test2
mkdir -p /opt/testDir/test3/test4 在/opt/testdir/ 目录下创建目录test3,并且在test3目录下创建 test4(一次创建多级目录)
5>删除一个空目录: rmdir 目录名
rmdir test1
rmdir test3
6>创建一个或多个空文件: touch 文件名列表(文件名之间用空格隔开)
touch t1.txt
touch t2.txt t3.txt t4.txt
7>复制文件或目录: cp [条件] source(源) dest(目标)
cp t1.txt test2 把t1.txt文件复制到目录test2中
cp -r test2 test5 把test2目录复制到test2目录中(递归的复制目录)
8>删除文件或目录: rm 文件名或目录名
rm t1.txt
rm -f t2.txt 强制删除文件
rm -r test2 提示递归删除目录
rm -rf test5 强制递归删除目录
9>移动目录或文件: mv source(源) dest(目标)
mv test.txt test1
mv test1 test2
mv t3.txt t3_new.txt 文件重命名
10>查看文件指令: cat 文件名
可以直接查看文件的内容
和vm的不同之处在于该命令不会直接进入到编辑界面
11>linux中的文件和目录操作的命令
[1]echo:输出系统变量或者常量的值到命令行终端
echo $JAVA_HOME
echo $PATH
echo Hello World
[2]把前一个查看命令的结果输出到指定的文件中: 查看命令 > 文件名
注:1.如果目标文件不存在,则新建一个文件
2.如果目标文件已存在,则把文件以前的内容覆盖
ls > ret.txt
ls -al > ret.txt
cat ret.txt > t3_new.txt 文件内容的复制
5.3 时间和日期指令
1>查看或设置系统的日期或时间: date
date 查看系统当前的完整的日期或时间
date +%Y 系统当前的年份
date +%m 系统当前的月份
date +%d 系统当前的日期
date ‘+%Y-%m-%d %H:%M:%S’ 按yyyy-MM-DD hh:mm:ss格式显示
date -s “2020-10-20 10:20:30” 设置当前的系统时间
2>查看系统日历: cal
cal 查看当前月份的日历
cal 2021 查看指定年份的日历
5.4 搜索和查找的命令
1>搜索文件或目录: find [搜索范围] [搜索标准] 关键字
搜索标准: -name: 默认按名称搜索(文件或目录所在的路径也在搜索范围之内)
-size: 按文件大小搜索
-user: 按文件的所有者搜索
find *.txt 搜索当前目录下,所有的.txt文件
find * e * 搜索当前目录下,所有名称中包含e的文件
find /etc *.txt 搜索/etc目录下所有.txt的文件
find /etc -size -5k 搜索/etc目录下所有小于5k的文件(-表示小于,+表示大于)
find /etc user zhangsan 搜索/etc目录下所有的所有者是zhangsan的文件和目录
2>locat命令: locat 关键字
linux的底层是将数据以树的形式存储到数据库中
该命令和find的区别: [1]该命令的查找速度比较快,因为该命是直接访问内存,不用访问磁盘
[2]该命令是以树的形式进行查找,且是从根节点进行查找
[3]当删除或添加某个文件时,树并不能及时的进行更新,所以我们在使用此命令进行查找的时候,
需要先进行updatedb命令来同步数据库
3>搜索过滤命令: 其它命令|grep [选项] 过滤条件
该命令的作用: 在前一个搜索命令的结果中进行按名称进一步进行过滤
find *.txt|grep new 搜索当前目录下,所有包含new 的,txt文件
find /etc -size -5k|grep firefox 搜索当前目录下文件小于5k且名字中包含firefox的文件
cat t1.txt|grep beijing 显示目标文档中含有beijing的行
cat t1.txt|grep -ni beijing 显示目标文档中含有beijing的行,并显示在原文档中的行标
ls -al |grep new 显示当前目录中名称中包含new关键字的文档和子目录
5.5 压缩和解压指令
1>压缩或解压单个文件: gzip 文件名: 压缩单个文件,生成一个.gz的压缩包,并且会把原来的文件删除
gunzip 压缩包名: 解压.gz压缩包,并且会把原来的.gz压缩包删除
gzip t1.txt
gunzip t1.txt.gz
2>压缩(打包)或解压多个文件和目录: zip 目标压缩包名称(通常使用.zip压缩包) 文件或目录列表
unzip 压缩包名(.zip) -d 解压的目录名: 将指定的.zip压缩包解压到当前目录 (或者指定目录)
注: 压缩和解压的时候不会删除掉源文件,这一点和gunzip不一样
zip test.zip ret.txt t1.txt test2
unzip test.zip -d test3
3>压缩(打包)或解压多个文件和目录: tar -c 目标压缩包名称(xxx.tar.gz) 文件或目录列表
tar -x 压缩包名(xxx.tar.gz) -c 解压目录名 将指定的.tar.gz 压缩包解压到当 前目录(或指定目录)
注:该命令不管是压缩还是解压都不会删除原文件
tar -zcvf xxx.tar.gz 文件或目录列表
tar -zxvf xxx.tar.gz -C 解压目录名
5.6 文件(或目录)与组
1>关于组的基本介绍
在linux中, 每一个用户至少属于一个组,用户不能独立于组存在,一个用户可以有多个组
在linux中,文件也都必须属于一个组,但是文件只能属于一个组
文件或者目录通过组来控制那些用户可以对它进行那些操作,即文件的访问权限
在文件或目录看来,linux系统中所有的用户分为三类:
所有者:默认情况下,文件或者目录的所有者都是创建者,可以修改
同组用户: 跟文件或目录属于同一个组的用户
其它组用户: 即不是文件或目录的所有者,也不是同组用户
例: 一个文件属于dev研发组, 那么dev研发组的人就可以对该文件进行分配权限
2>查看文件的所有者和所在的组: ls -l [文件名]
文件名可以有也可以没有,当没有时,默认查看当前目录下的所有文件的权限
有文件名时, 查看指定的文件下的所有文件的权限
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-543L3CWw-1635944839095)(https://raw.githubusercontent.com/OneTimes1/photo/master/C:%5CUser%5C14330%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images202111032105719.png)]
3>修改文件的所有者: chown 新的所有者 文件名
修改文件的所有者和所在的组: chowm 新的所有者: 新的组 文件名
注:当我们进行修改时,如果目标文件是一个目录,那么只会对该目录进行修改,默认不会对该目录中的文件进行修改
想要进行修改需要加上-R 即: chowm -R 新的所有者: 新的组 文件名
chown zhangsan t1.txt 修改t1.txt文件的所有者为zhangsan
chown zhangsan:dev test 修改test的所有者为zhangsan,所在的组为dev组
chown -R zhangsan:dev test 修改test文件以及其子目录中的所有文件的所有者为zhangsan,组为dev
4>只修改文件所在的组: chgrp 新的组 文件名或目录名
只修改文件及其子目录所在的组: chgrp -R 新的组 文件名或目录名
5.7 linux中文件或目录的权限管理
1>准备工作:
一个用户至少属于一个组,也可以属于多个组
一个文件或目录也必须属于一个,并且只能属于一个组
在一个文件或目录来看,linux系统中所有的用户可以分为三类:
所有者,同组用户,其它组用户
2>文件或目录的三种权限:
在linux 中,任何文件或目录都有三种权限: 读(read) , 写(write) , 执行(Execute)
对文件而言:
读: 可以读取,查看文件的内容 比如: cat,more,less,head,tail等
写: 可以修改文件的内容,比如: vi或vim等
执行: 如果该文件是可执行文件(.sh),可以直接运行, 比如: ./xxx.sh
对目录而言:
读: 可以读取,查看文件的内容, 比如: ls等
写: 可以修改目录中的内容, 创建子目录,删除子目录,创建文件,删除文件,重命名文件或目录
执行: 可以进入该目录,比如: cd 等
3>文件或目录的权限控制:
在linux中,任何一个文件或目录都有三部分权限: 所有者权限, 同组用户权限, 其它组用户权限
第一部分权限: 所有者权限,文件或目录的所有者对该文件所拥有的权限,使用r,w,x分别代表读,写,执行的权限.
比如:rwx: 拥有读写执行的权限, r-x: 拥有读和执行的权限, r–: 只拥有读的权限, —: 没有任 何权限
第二部分权限: 同组用户权限,文件或目录的同组用户对该文件所拥有的权限, 使用r,w,x分别代表读,写,执行的
权限
第三部分权限: 其它组用户权限,文件或目录的其它组用户对该文件所拥有的权限, 使用r,w,x分别代表读,写,执 行的权限
注:[1]只要某个用户对某个文件有写的权限,那么该用户就可以修改该文件对所有者,同组用户,和其它组用户的权限
[2]当某个文件第一次创建的时候,文件的所有者和同组用户都为该用户
[3]谁解压了压缩包,该文件的所有者和同组用户就是谁
[4]当一个非可执行文件被创建时,默认所有者权限为rw, 同组用户为rw, 其它组为r
4>查看文件或目录的权限:
ls -l 或 ls -aul
5>修改文件或目录的权限: chmod 操作 文件名
用r, w, x 分别代表读, 写, 执行的权限
用u, g,o, a 分别表示给所有者,同组用户,其他组用户,所有者用户修改权限
用+, - ,= 分别分别表示给指定的用户增加, 减少,设置对应的权限
chmod g-w,o+w test 给test文件的同组用户和其它用户增加写的权限
chmod g=rwx test 给test文件的同组用户设置读, 写, 执行的权限
6>使用数字的方式修改文件或目录的权限:
每一个权限可以用一个数字来表示:
r, w, x
4, 2, 1
2^2 2^1 2^0
每一个文件或目录都有三部分权限,每一部分权限都可以用一组数据之和来表示,三部分权限就是一组三个数据序列:
rw- r-x -wx
6 5 3
rwx r-x -wx
7 5 3
rwxrwxrwx
777
chmod 777 test 将test文件的权限修改为所有者,同组用户,其它组用户都可以进行读写和执行
6.linux中的网络管理
在linux的配置文件: vi /etc/sysconfig/network-scripts/ifcfg-ens33
需要配置的内容:
BOOTPROTO=“static” 将ip地址设置为静态的
ONBOOT=“yes” 每次启动linux服务器的时候都要加载一下该配置文件
IPADDR=192.168.11.128 自己设定的ip地址,但是要确保不能超过虚拟网络编辑器中的地址范围
GATEWAY=192.168.11.2 配置网关,与虚拟机的虚拟网络编辑器中的网关一致
DNS1=192.168.11.2 配置DNS解析器,与虚拟网络编辑器中的网关一致,DNS后面的数字代表的是解析服务器1
最后重启linux: reboot 配置即可生效
7. linux中的进程管理
线程: 一个程序的线路,一个进程中可以有多个线程
进程: 一个程序的执行,一个进程占用一个端口
1>查看正在运行的进程: ps
ps //只会显示应用进程
ps -e //显示所有进程
ps -ef //以全格式的形式显示所有进程(常用),用于查看linux系统中某一些软件或者应用是否处于启动状态
ps -ef|grep mysql //查看mysql服务是否处于开启的状态
2>关闭进程:
使用ps命令进入查看进程的PID
使用命令kill -9 PID
说明: -9 表示强迫进程立即停止
PID 为进程对应的进程编号
8. linux中的服务的介绍
1>服务介绍:服务是支持linux运行的一些必要的程序, 本质上也是进程, 叫守护进程
2>操作服务: sysytemctl [start|stop|restart|reload|status|enable] 服务名称
systemctl status firewalld 查看防火墙的状态
systemctl stop firewalld 关闭防火墙
systemctl start firewalld 开启防火墙
systemctl enable firewalld 设置防火墙开机启动
systemctl disable firewalld.service 设置防火墙开机不启动
注: 老版本的linux或者有些发行版本的linux, 操作服务使用的是service命令,而不是systemctl命令
9. linux中软件包的管理
1>RMP: 一种linux的软件包的打包和安装工具,它操作的软件包都是以.rmp结尾
该软件可以将以.rmp结尾的软件安装到linux中,
也可以将写好的java程序打包成.rmp可执行文件
2>使用RMP: rmp命令
查看当前系统中已经安装的rpm包: rpm -qa|grep firefox
卸载rpm软件包: rpm -e firefox
安装rpm包: rpm -ivh xxx.rpm
注: [1]linux的镜像文件给我们提供了很多的安装包,都在光盘的package文件里面
[2]想要使用安装packages中的软件,需要先进入/run 目录, 然后再进入到media目录,
此时会显示用户的包名,需要进入用户的包名中,即可看到光驱文件,然后 cd CentOS\ 7\ x86_64/ 命令即可进入,
然后cd packages 即可使用里面的软件包
[3]安装rpm的包时一般不再光驱中装,而是装在opt目录中,用命令 cp 待安装软件名称 /opt
复制到opt目录下,再用rmp安装即可
3>YUM包管理: 是一种基于RPM的软件包管理工具, 它能过从指定的服务器上自动下载RPM包并且自动下载,可以自动
处理软件包之间的关系
为什么要使用YUM包? 因为在实际开发中,有一些rmp包是依赖于其它的包的,只有其它的包安装了,才能下载该包, 而
YUM其实就是一个大的服务器,这个服务器上有所有的yum包,并且会自动的管理依赖,用起来比较的方便.
其实YUM就类似mven,其也有本地仓库和中心仓库,会自动的管理依赖
4>YUM的使用:
查看当前系统中已经安装的rpm软件包: yum list installed|grep firefox
卸载rpm软件包: yum remove firefox.x86_64
安装rpm包: yum install firefox 前提是要先进入到opt包中
10.搭建JAVAEE开发环境
启动mysql服务(需要在mysql的bin目录下): [root@localhost bin]./mysqld_safe &
关闭mysql服务: [root@localhost ~]mysqladmin -u root shutdown 或: [root@localhost ~]service mysql stop