1)JAVA是一个跨平台的编程语言,多线程编程,网络编程在JAVA标准库里面本身就有
2)C++的标准库相比于JAVA的标准库还是要弱一些,网络编程已经不支持了
3)linux是世界上第一大操作系统
李纽克斯
李娜克斯
李呢克斯
李妮克斯
一:背景知识
1)内网IP和外网IP
咱们自己写的程序,自己的电脑没有外网IP,我们的电脑可以进行访问其他的有外网IP的主机,但是无法让别的电脑访问到我们的设备
1)世界上的网络,分为Ipv4和Ipv6,Ipv4(IP地址)占4个字节,一共只有42亿个IP,理想状态,本来每一个主机都有一个唯一的地址,但是目前的现状就是不够用,只能有很多个设备共用一个外网IP(NAT机制),在两个不同的局域网中,会有相同的外网IP,外网IP只有一个;内网IP是对应着外网IP,当前我的这台电脑,处于局域网里面,他有一个内网IP,这个内网IP在局域网内是唯一的,但是我们要是再找一个其他的局域网,这个局域网里面可能也有和我一样的内网IP,(内网IP是唯一的),在cmd的命令提示符里面输入ipconfig就可以看到IP地址
2)当我在电脑上面输入IP地址,就可以查到外网IP,这个外网IP并不是给我一个人用的,好多电脑可能附近的上万台机器都共用这一个外网IP,如何让我们自己写的程序被其他人访问到?
买一个外网IP,买一个外网IP,我们只要把咱们自己写的程序部署到带有外网IP的云服务器上面,我们自己写的程序就可以被其他人访问到了,云服务器/工作中的云服务器,一般都用的是linux系统,咱们学习的最主要原因,就是为了可以进行部署操作
3)IPV6这样的地址是唯一的,并且可以在外网进行访问,但是u1s1,你要想访问IPV6的地址,前提是,你自己的网络设备也要支持IPV6,服务器的网络和客户端的网络必须都是IPV6的,虽然在国内,很多运营商都支持了IPV6但是默认都没有进行开启
二:那么什么是linux呢?
1)linux是一个操作系统,完整的来说,linux是操作系统内核,一个完整的系统=内核+配套的应用程序,对下要管理各种硬件设备,对上要给各种软件提供一个稳定的运行环境
2)应用场景:服务器领域,嵌入式设备,比如说路由器,交换机,空调,冰箱;移动端:内核就是linux系统;
3)世界第一大操作系统就是linux,windows只是在桌面领域(个人电脑),我们不想用linux桌面;
三:我们学linux主要学什么?
1)基础操作,基于命令行的操作,因为linux也是有图形化界面的,但是很少会被用到,linux主要的领域里面都不太适合使用图形化,服务器虽然配置高,但是服务器往往在遥远的机房,是通过网络来进行操作的,图形化界面要想通过网络传输,非常卡,对带宽要求就比较高了(非常贵),嵌入式设备,配置非常低,跑一个图形化界面是非常不容易的
我们进行命令操作,最大的好处就是,容易通过脚本的方式,让一些固定的操作,能够批量的进行执行;其实我们在winows上面也是可以通过cmd来进行命令行操作的
2)如何部署JavaWeb程序,系统编程/网络编程,操作系统对下要进行管理各种硬件设备,对上要管理各种软件资源
四:我们如何获取一个linux操作系统?
在我们国内有很多的云服务器厂商,阿里云,腾讯云,华为云,金山云,这个云服务器虚拟机在机房里面,云服务器一般会给你一个外网IP
1)现在有一个2核2G4M是啥意思?
2核就是指2核心的CPU,2G就是指内存是2G
2)系统镜像:选择centos7,尽量不选则带Docker,选择不带Docker
买ESC服务器或者是轻量应用服务器都是可以的
中国电信-天翼云,云网融合,安全可信,专享定制
命令操作要比图形化界面的好处:
1)命令节省网络资源,节省网络带宽,会更流畅(你要是通过图形界面来进行操作的话,网络传递图片之类的,会把网络带宽给吃满),如果是命令行就需要传递一些字符串就可以了
2)命令会更好的执行脚本,批量执行
使用中端程序可以进行远程连接到服务器上面,我们就可以通过命令的方式来进行来链接服务器了,我们使用的终端工具是Xshell
1)Xshell只是支持windows系统,但是mac或者是苹果电脑只能用其他的终端软件了
2)在Xshell官网上面选择免费授权页面,填写邮箱和姓名,在邮箱里面有下载链接
一:使用Xshell连接云服务器:
1)通过ssh+外网IP地址连接linux,我们买云服务器的时候,系统要默认选择centos 7,默认用户名是root
二:创建会话:
我们在左上角找到工具栏,创建会话,在新建命令里面配置:我们从此创建会话,就可以直接输入用户名和密码了来连接云服务器,就不需要再通过ssh+外网IP地址来进行连接了
当前咱们使用的xshell,是不可以使用crtl+c和crtl+v来进行复制粘贴的,我们经常使用的是
ctrl+fn+insert来进行复制,使用shift+fn+insert来进行粘贴
1)当我们进入到Xshell之后,都会有一个这样的字样:
[root@iZ0jlj3x52ipcniwz9v5yrZ ~]
[root@VM-4-3-centos ~]就做命令提示符,第一个部分表示的是当前的用户名,第二部分表示(@后面)表示的是主机名,不同的机器,主机名可能不一样,第三个部分(空格后面),表示当前的目录,如果是/表示根目录,~表示当前用户的home目录,如果是其他目录,那么也会显示对应的单词;
1.1)当前的root就是用户名,后面的@符号后面的就是主机名字,每一个人的机器名字可能都不一样
1.2)后面的~就是表示当前目录,也就是说是home目录,此时我们用pwd命令就可以看到家目录就是/root,在这里面和~是等价的
我们由此可见整个/路径下面的文件路径就类似于这种
家目录~,是一种特殊的目录,一个用户登陆到这台主机上面的默认的目录
1)假设用户名是tz,那么家目录就是/home/tz
2)如果你的用户名是zhangsan,那么你的家目录就是/zhangsan/tz
3)但是如果说你的用户名是root,那么家目录就是/root,root是linux上面的管理员用户
绝对路径和相对路径的比较:
绝对路径:以盘符开头的路径,一次向后走找到绝对路径
相对路径是以.或者..开头的,其中这面的.表示当前路径,..表示当前路径的父亲路径或者是当前路径的上一级路径
相对路径就是从基准路径出发,按照一个啥样的路径来进行找到一个对应的文件
bin目录和src.zip是同级路径,java.exe在bin目录下面
1)假设我们以D:\program\jdk\bin为基准目录,要求我们现在找到java.exe
那么我们此时的路径就可以写成./java.exe,此处的.就表示当前目录的基准目录,此时就相当于是可以把.换成D:\program\jdk\bin
2)假设我们还是以D:\program\jdk\bin为基准路径,找到src.zip,此时的路径就可以表示为
../src.zip,我们在这里秉持的一种思想还是说先通过.找到当前的路径,再通过..找到当前路径的上一级路径
..表示的路径就是D:\program\jdk,再从这个路径中找到src.zip这个文件
3)即使是定位同一个文件,如果说基准路径不同,那么此时的相对路径也不同
4)假设我们现在以D:\program\jdk这个目录为基准,去进行查找javac.exe
相对路径就是./bin/java.exe
5)假设我们以D:\program为基准路径,去找javac.exe,那么此时的相对路径就写作:
./jdk/bin/javac.exe
常见的linux命令:
第一个命令:ls
1.1)罗列出当前目录中所包含的文件和目录,它的作用就类似于在我们的windows图形化界面双击某一个目录,把它打开,看看目录里面都有什么文件
1.2)我们这里面的白色的是普通文件,蓝色的是目录
1.3)我们可以在ls后面加上一个路径名,ls .表示罗列出当前路径下面的所有文件,ls /表示罗列出根目录下面的所有文件目录,下面的这些文件都是系统文件,相当于是windows上面的此电脑,整个目录树的根节点,但是我们通过ls命令只能看到一些普通的文件名
实际上在我们的linlsux命令行中,很多都支持选项,在我们的命令后面加上-以及一些特殊的字母或者单词来进行开启一些不同的功能,称之为命令行的选项
但是咱们平时一般使用ls,一般都是使用ls -l是以列表的形式来显示内容的
1)ls -l表示我们即将要通过列表的方式来进行罗列出目录里面的内容,我们也可以用ll来进行代替
1.1)ls, 这是最高频使用的命令,主要是罗列出当前目录中,都包含着哪些文件,这个操作类似于好像Windows的文件资源管理器(此电脑)一样(相当于是双击一个目录),就可以看到每一个目录中都有哪些东西
1.2)最终的结果就是说这个列命令可以更详细的展现出所有文件的信息,当我们查看一个目录中的文件,所看到的一行一行的文件就是以列表来进行显式,可以看到文件修改日期,文件类型,文件大小等信息;
常用选项:
1)ls -a:列出该文件下面的所有文件,包括以.开头的隐藏文件
2)ls -d:将目录像文件一样进行显示,而不是显示其下的文件,比如说ls -d 指定目录
3)ls -k:以k字节的形式表示文件的大小,ls -alk 指定目录
4)ls -l:罗列出文件的详细信息
5)ls -r:对目录进行反向排序
6)ls -t:以时间进行排序
7)ls -R:罗列出所有字母下面文件
第一列和第二列表示文件是谁创建的,第二列的数字表示文件的大小,第三列表示文件修改时间,不同颜色表示不同的文件类型,白色表示普通文件,蓝色表示的是目录/文件夹,红色表示压缩包;
在这里面我们还是需要注意一下:
1)ls -a,作用是列出隐藏文件,如果在linux中,文件名以.开头的就是隐藏文件,默认使用 ls -l是不可以进行显示出来的,只有通过ls -a(只显示隐藏文件名和普通文件名)才可以进行实现
2)ls -l -a(显示所有的文件,包括文件类型,文件大小所有信息)
3)ls就类似于windows的文件资源管理器,windows文件资源管理器(图形化界面),就可以通过界面上的路径看到当前的目录是啥,同时也可以鼠标点击,就可以看到不同目录的情况,根据随时一点就可以切换目录,但是在linux只能通过命令来进行查看文件
4)查看根目录中的目录,cd /相当于打开了此电脑,使用ctrl+l来进行清屏
第二个重要命令: pwd
1)我们在进行使用命令行的时候,有的时候目录结构比较复杂,容易记不住自己在哪里了
所以说pwd就是说显示了当前路径所对应的绝对路径,在windows上面,以盘符开头的路径就是绝对路径,那么在linux上面以/开头的就是也就是说以根目录开头的就是绝对路径,但是在linux上面是没有盘符的
2)列出当前目录的绝对路径,linux上面是没有CD盘符的,也没有此电脑(根目录),他的目录结构,是从根路径/开始,构建出的一个树形结构;Windows上面就类似于树形结构,此电脑是根节点,C盘和D盘是两个分支,linux中的/就是windows中的此电脑
第三个重要命令:cd,主要是用来切换目录的,cd功能就是切换到指定路径,我们在cd后面跟上的路径,既可以是绝对路径也可以是相对路径
1)通过鼠标双击目录的操作这其实就是windows上面的切换目录,所以说cd就相当于是鼠标双击目录来进行切换操作,切换目录的操作就类似相当于,在文件资源管理器中,双击不同的目录;
2)cd /或者是cd /root,这就是说切换绝对路径
3)cd ..表示当前路径的上一级路径
4)这就是一个典型的进行相对路径的操作,.表示当前路径,也就是根路径,在这里面也是可以写成cd root(这两种写法是和上面的cd /root的写法是完全相同的)
5)况且在我们进行敲命令的时候,我们是可以使用tab键来进行补全的,不用把每一个字符都输入进去
6)ctrl+c取消当前操作,假设我们再进行输入目录的时候,敲错了,不想继续输入了,我们就可以直接使用ctrl+c进行操作
7)cd ~表示进入到家目录,cd -表示返回最近访问目录
8)cd后面的路径,可以是绝对路径,也可以是相对路径
我们正常在windows上面,以盘符开头的C:\windows\programs这种路径称之为绝对路径,从树根节点一路向下确定的一个路径,但是在linux上面,以/开头的,就是绝对路径,例如/home/tz,也可以cd \,可以cd +(从/这个根路径开始的文件路径)
在windows上面,以.开头,或以..开头的,.表示当前路径,..表示当前路径的上级路径,有的时候.是可以进行省略的;相对路径一定有一个基准路径(工作目录),在linux中,当前所在的位置,就是相对目录;
关于文件操作的指令:
一:touch:创建一个空文件
比如说touch+文件名,touch+Java100.txt,就在当前目录下面创建了一个名字是Java100.txt的文件
-rw-r--r-- 1 root root 0 Dec 28 08:41 Java100.txt
如果说我们最终所创建的文件是原来目录中已有的文件,那么touch操作只会影响到文件访问的时间,不会影响到文件里面的具体的内容
二:cat显示文件内容
cat+文件名,就会显示这个文件里面的所有内容
三:echo打印内容到控制台,但是也是可以用来写文件
1)echo是写文件,echo >表示表示重定向,把本来要显示在控制台里面的内容,给重定向到指定文件里面) echo hello >0219.text,上面这个操作就是把hello字符串给写到0219.txt里面
2)如果说我们使用echo hello,那么这个hello会被打印在控制台上面
1)但是我们上面的三个和文件相关的指令不能进行编辑文件
2)如果说我们是搞一个简单的小文件,上面的这三个操作是够用了,但是如果说要是搞一个比较大的文件,读也好,写也好,使用上面的操作就比较麻烦了,后续我们使用less来进行读操作,使用vim来进行编辑文件
四:mkdir(make diectory)进行创建目录,在指定目录中创建一个新的目录,所谓的目录就是日常所说的文件夹
也可以创建多级路径,蓝色表示路径
mkdir aaa
mkdir bbb
mkdir ccc
1)当我们使用mkdir连续创建了很多目录之后,就容易搞不清目录结构,我们可以通过tree这样的命令,来进行直观地看到当前目录下面目录结构是怎么构成的
2)tree,将目录结构按照树形结构来进行表示,因为tree并不是linux原生就有的,我们需要进行额外安装,我们需要在root用户下,使用yum install tree进行这个命令就可以进行安装这个命令
3)yum命令就相当于是应用商店,也被称之为包管理器
五:rm表示删除一个文件或者是删除一个目录
rm+文件名(包含后缀),表示可以删除一个文件
rm+r+目录名字,从本质上来说并不是单单的删除目录,而是还要删除目录中包含的文件以及子目录(一旦删除,啥也没了)
1)注意:rm -r /,这里面的/表示此电脑代表linux上面的根目录,一旦要是执行这个操作,电脑立即报废----压根就别用了,这个-r表示递归的意思
2)比如说有一种情况:
rm -rf /data我们本来的操作是想要删除根目录下面的一个叫做data的目录,但是当我们敲命令的时候手一滑,多输入了一个空格,变成了rm -r / data,此时的rm就会认为此时你想要删除的是两个目录,一个是data,一个是/3)rm -rf /data/temp.txt都是十分危险的操作
4)还有一种情况就是说咱们在未来编写linux xshell脚本的时候,也有可能造成一些错误地删除
DIR=abc.txt 此处省略一大段代码 rm -rf/${DIR}
但是如果说此时我们执行到这个代码的时候,DIR因为一些原因没有被定义,那么此处不会报错,而是把DIR这样的变量视为空字符串,仍然会生成rm -rf /这样的命令
3)在我们刚才的删除操作的时候,rm -rf+目录名字,就可以不带提示的进行删除目录了,基于上面可知,我们在其中加上-r选项,就可以直接删除不进行提示
rm -rf /=rm -rf /*(表示只保留一个\,把后面的东西都删除了),相当于是删除linux所有,系统上面所有的启动文件都被删除了
4)删除操作一旦删除不会恢复