Linux和Docker常用必备指令

文章目录

  • Linux
    • 文件管理
    • 文档编辑
    • 磁盘和分区
    • 网络
  • Docker
    • 生命周期
    • 容器操作
    • 镜像仓库
    • 本地镜像管理
  • 计算机网络
    • 网络模型
    • HTTP和HTTPS
    • TCP和UDP
    • 三次握手
    • 四次挥手
    • IP
      • 子网掩码
    • 网络地址
    • 广播地址
    • 主机数
    • IP地址和MAC地址
    • Websocket
    • HTTP协议版本和报文
      • 请求报文
      • 响应报文
      • HTTP版本
      • 状态码
      • 请求方法
      • GET和POST的区别

Linux

文件管理

touch file 不存在file则创建文件,存在修改时间属性

cat -n 连接文件打印输出,每行编号 -b空白不编号

  • cat -n text1 > text2 :把text1内容加行号输入text2中

  • cat /dev/null > /etc/text.txt:清空/tec/text.txt内容

diff 比较文件差异

find 指定目录下查找文件(path为空说明当前路径)

  • find . -name “*.c”:当前目录查找后缀为.c文件
  • find / -type f:将所有目录及其子目录中所有一般文件列出

locate 查找符合条件的文档

  • locate passwd:查找passwd文件

more 类似cat,页显示,空格/b 前后

  • more -s +20 text:从20行开始逐页显示text文档内容,两行内容以上以一行空白行显示

less 类似more,随意浏览,回车滚动一行

  • ps -ef | less:ps查看进程并通过less分页显示

rm -i/f/r 删除 询问/不询问/循环

tail 查看文件内容

  • tail -f 查阅正在改变的日志文件

which查看当前要执行的命令所在路径

  • which bash (/bin/bash:bash可执行的绝对路径)

whereis 查找文件

  • whereis -b/m 查找二进制/说明文件

文档编辑

grep 查找文件里符合条件的字符串

  • grep test *file:查找后缀有file字样的文件中包含test字符串的文件
  • grep -r update /etc/acpi:以递归的方式查找“etc/acipi”下包含update的文件

join 连接两个文件内容打印

tar

  • tar -czvf test.tar.gz a.c压缩a.c文件为test.tar.gz
  • tar -xzvf 解压缩 -C后指定加压路径
  • tar -tzvf 不解压查看内容

磁盘和分区

cd

df 显示文件系统的磁盘使用情况统计

  • df -h 查看分区使用情况
  • df --total显示所有信息

du 显示目录和文件的大小

  • du -h test

fdisk -l查看当前分区情况

pwd 显示当前工作目录(PrintWorkingDirectory)

mkdir 创建文件夹

mount 挂载linux系统外的文件

  • mount -o ro /dev/hda1 /mnt:将/dev/hda1只读模式挂在 /mnt之下
  • umount -v /mnt通过设备名或挂载点卸载文件系统

ls 显示工作目录下内容

  • ls -a:显示所有非隐藏文件和目录
  • ls -l:除文件名外将权限大小等信息详细列出

网络

netstat显示网络状态

  • netstat -a:显示详细的网络状况,显示所有连线中的socket

  • netstat -n:直接使用ip地址,不通过域名服务器

  • netstat -I:显示监控中的服务器socket

  • netstat -t/u:显示TCP/UDP连线状况

  • nestat -p:显示正在使用socket的程序识别码和程序名称

  • -Intp 查看所有监听端口

  • -antp已经建立连接正在使用

  • -anp查看端口对应服务 |grep 8080

  • -ano查看端口对应进程 |find str

route -n 查看路由表

iptables -L 查看防火墙

ifconfig 查看网络接口

ps -ef 用户查找全格式(f)的全部(e)进程(ps命令是Process Status)

  • ps -ef | grep httpd对显示结果文本搜索,检查httpd进程是否存在
  • ps -aux 效果类似
  • kill -9 端口号 强制关闭进程

nouhp后台运行

nouhp java -jar -Dfile.encoding=UTF-8 -Duser.timezone=GMT+08 xxx.jar > dev/null &

Docker

生命周期

docker run 创建新的容器并允许一个命令

  • docker run --name mynginx -d nginx:lastest:使用docker镜像nginx:lastest以后台模式启动一个容器,命名为mynginx

    • –name命名
    • -d后台运行容器,并返回容器id
  • docker run -it nginx:lastest /bin/bash:使用镜像nginx:lastest以交互模式启动一个容器,并执行/bin/bash指令

    • -i以交互模式运行容器,通常与-t同时使用
  • docker run -p 80:80 -v /data:/data -d nginx:lastest:镜像后台启动一个容器,把容器80端口映射到主机端口,主机目录/data映射到容器的/data

    • -p指定端口映射 主机端口:容器端口
    • -P随机端口映射
    • -v绑定一个卷

docker start/stop/restart/kill命令

  • start启动一个或多个已经被停止的容器
  • stop停止正在运行中的容器
  • restart重启容器
  • kill -s杀掉一个运行中的容器 -s发出一个信号

docker rm删除一个或多个容器

  • -f 通过sigkll信号强制删除一个运行中的容器
  • -l移除容器间的网络连接,而非容器本身 db 移除容器对其他容器连接名为db的连接
  • -v删除与容器关联的卷

docker create创建一个新的容器但不启动它,用法同run

docker pause/unpause暂停/恢复容器中所有进程

docker exec 在运行的容器中执行命令

  • -d分离模式,后台运行
  • -i即使没有附加也保持STDIN打开
  • -t分配一个伪终端
  • docker exec -it 9df70f9a0714(容器id) /bin/bash:对指定容器执行bash
  • docker exec -if mynginx /bin/sh /root/runoob.sh:在容器mynginx中以交互模式执行容器内/root/runoob.sh脚本

容器操作

docker ps 列出容器

  • -a 显示所有的容器,包括未运行的

  • -l 显示最近创建的容器 -n最近创建的n个容器

  • -q 只显示容器编号

  • -f根据条件过滤

    • docker ps --filter"name=test-nginx"

docker attach 连接正在使用中的容器

docker logs获取容器的日志

  • docker logs -f mynginx
    • -f跟踪日志输出
    • -t显示时间戳
    • -since显示从某个开始时间的所有日志
    • -tail仅仅列出最新N条容器日志

镜像仓库

login

logout

pull

push

search

本地镜像管理

docker images 列出本地镜像

  • -a所有
  • -q只显示镜像id
  • -f筛选

docker build使用Dockerfile创建镜像,docker通过读取Dockerfile文档传几创建镜像

  • -f指定要使用的Dockerfile路径
  • -m设置内存最大值
  • –tag ,-t镜像的名字和标签 name:tag或者name格式
    • docker build -t runoob/ubuntu:v1使用当前目录的Dockerfile创建镜像,标签为runoob/ubuntu:v1

docker history查看指定镜像的创建历史

docker save : 将指定镜像保存成 tar 归档文件

docker load : 导入使用docker save命令导出的镜像

docker import : 从归档文件中创建镜像

计算机网络

网络模型

OSI七层模型 介绍 主要设备 TCP/IP四层模型 协议
应用层 各种应用程序,网关在应用层,可连接不同协议的子网 应用网关 应用层 DNS(域名解析53),FTP(文件传输协议20,21),TeInet(远程登录协议23),HTTP(超文本传输协议80),SMTP(简单邮件协议),HTTPS(超文本传输安全协议)
表示层 对数据进行加密解密,编码解码,压缩解压缩
会话层 建立不同机器之间的连接
传输层(segment) 实现端对端的通讯传输 传输层 TCP,UDP
网络层(packet) 主机之间通讯,传输IP数据包(IP寻址路由转发数据包packet) 路由器(可以隔离广播风暴而交换机不能)防火墙VPN 网络层 IP(Internet Protocol)网际协议,ARP(地址解析协议),ICMP(网络控制报文协议),IGMP(网际组管理协议)
数据链路层(Frame) 将比特封装成帧,在以太网传输,可实现差错控制 网桥(连接不同网络的桥梁) 交换机(根据数据帧的***MAC地址***交换信息到不同端口)
物理层(Bits) 实现主机与网络之间的物理连接,规定一些传输媒体接口 网线光纤中继器(放大信号等)和集线器(将网线集在一起,多端口的中继器) 主机-网络层 以太网

HTTP和HTTPS

HTTP 端口号80 信息明文传输 连接简单,无状态
HTTPS 端口号443 具有安全性的SSL加密协议 HTTPS协议是由SSL+HTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。 HttpsURLConnection

TCP和UDP

TCP和UDP java.net.
TCP 面向连接可靠字节流传输协议 传输数据之前在不同主机的端口之间建立一条链路,传输前建立连接传输和释放连接。要求系统资源较多 保证数据正确性和顺序 ServerSocket 电话通话
UDP 面向无连接不可靠报文传输协议 数据传输速度快,每个数据包限制在64k以内 可能丢包,不保证数据顺序 DatagramSocket/Packet 视频聊天,对讲机

三次握手

第一次握手 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)。 客户端进入同步发送状态
第二次握手 服务器收到syn包,必须确认客户的ACK(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; ACK:确定号是否有效,一般置为1 服务端进入同步接收状态
第三次握手 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 同时进入建立状态

四次挥手

第一次挥手 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。 客户端进入终止等待1状态
第二次挥手 服务器收到FIN连接释放报文,发出ACK确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。 服务端进入关闭等待状态
第三次挥手 客户端收到服务器的ACK确认请求报文后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据) 客户端今日终止等待2状态
第四次挥手 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。 服务端进入最后确认状态
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。 客户端进入时间等待状态
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCP后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 服务端进入关闭状态,客户端进入关闭状态
服务端状态 CLOSED LISTEN SYN_RCVD ESTABLISHED CLOSE_WAIT LAST_ACK CLOSED
客户端状态 CLOSED SYN_SENT ESTABLISHED FIN_WAIT_1 FIN_WAIT_2 TIME_WAIT CLOSED

为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

IP

IP地址由网络号主机号组成,通过子网掩码可以知道一个IP地址的网络号和主机号

网络号划分子网,子网地址基于没类网络地址的主机部分创建

特征 网络范围 默认掩码
A类地址 第1个8位中的第1位始终为0 0-127.x.x.x 255.0.0.0/8
B类地址 第1个8位中的第1、2位始终为10 128-191.x.x.x 255.255.0.0/16
C类地址 第1个8位中的第1、2、3位始终为110 192-y.x.x.x 255.255.255.0/24

子网掩码

指明一个IP地址的哪些标识是主机所在子网,以及主机的位掩码。

作用:将IP地址划分为网络地址和主机地址两部分

格式ip/子网掩码1的个数,如206.110.4.0/18 ,网络号位为18,子网掩码255.255.192.0,

网络地址

IP地址和子网掩码进行&运算,结果就是网络地址

广播地址

网络地址的主机位全部变成1

例:

IP:141.14.72.24 子网掩码:255.255.192.0 求网络地址

141.14.72.24(72==>01001000)

&

11111111 1111111 11000000 00000000(网络号18位,主机号14位)

=

141.14.64(01000000).0(网络地址)

141.14.126(011111110).127(广播地址)

主机数

子网数=2^子网号位数

每个子网容纳主机数=2^主机位数 - 2

每个子网的主机数量为n,分配的子网地址空间个数为:n+3

加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址

例:一个子网有10台主机,那么对于这个子网需要的IP地址是

13<16=2^4,主机号位为4,子网掩码为255-16=240 255.255.255.240

例:一个子网有14台主机,14+3=17>16,主机号位为5,子网掩码 255.255.224

例:206.110.4.0/18被划分成16个子网求每个子网容纳主机数

默认没有划分子网情况下是C类IP,默认子网掩码是255.255.255.0,网络号为24位,主机号位为8位

划分子网后,子网掩码为255.255.192.0,网络号为18位,主机号为14位,借走了6位主机位,分出26子网数,即每个子网号位数为6,子网数为64(26),每个子网容纳主机数=2^14 - 2

如将206.110.4.0/18划分成16个子网说明子网号位为4(2^4 = 16),原主机号为14位,从主机号中借走4位划分14-4=10,子网的主机号为10位,每个子网容纳主机数=2^主机位数 - 2=1022。

IP地址和MAC地址

IP地址 MAC地址
长度不同 32位二进制 48位二进制
分配依据 网络拓扑 基于制造商
寻址协议不同 网络层 数据链路层
作用 IP寻址路由转发包 数据链路层设备如交换机,根据MAC地址将数据帧从一个节点传送到另一个节点

IP和MAC地址映射关系有ARP地址解析协议完成。ARP根据目的IP地址,找到中建节点的MAC地址,通过其传送最终达到目的网络

Websocket

websocket是基于HTTP的应用层协议,只需要完成一次握手,建立长连接并进行双向传输,,不需要再次发起网络请求,允许服务端向客户端推送信息(Http是通过客户端Ajax轮询发起请求,服务端进行响应),是双向通信协议。使用ws(80)或wss(443)的统一资源标识符(wss表示在TLS上的websocket)

websocket在建立握手时通过 HTTP/1.1 协议的101状态码进行握手。但是建立之后,在真正传输时候是不需要HTTP协议的,而是使用TCP协议。

HTTP协议版本和报文

属于OSI应用层协议,由请求和响应构成。无状态协议。

建立TCP连接后,通过socket访问连接,客户端通过该连接发送HTTP请求报文(ASCII码)

请求报文

请求行:方法字段 URL字段 HTTP协议版本

请求头:键值对格式,浏览器自行封装,要告知服务器的一些信息

空行

请求体:请求参数(get为空)

在这里插入图片描述

响应报文

状态:HTTP协议版本 状态码 状态码的原因短码

响应头:键值对格式,浏览器自行封装,要告知服务器的一些信息

空行

响应体:静态资源

在这里插入图片描述

HTTP版本

HTTP1 HTTP1.1 HTTP2.0
当建立连接后,客户端发送一个请求,服务器端返回一个信息后就关闭连接 默认使用长连接,减少三次握手开销 使用多路复用技术,通过单一的HTTP/2连接发起多重请求响应信息
只发送header信息,如判断有权限请求返回100,客户端接收后再发送body。返回401不发送。 采用二进制格式
当浏览器下次请求的时候又要建立连接 支持断点续传 多路复用底层采用“二进制分帧层”的方法,分割成更小的帧,二进制进行编码,多个请求在一个TCP连接上完成,性能提升
同一时间见对同一域名请求数量有限制,超过阻塞
短连接:在HTTP1.0中,客户端发送请求,服务器接收请求,双方建立连接,服务器响应资源,请求结束。

长连接:在HTTP 1.1,客户端发出请求,服务端接收请求,双方建立连接,在服务端没有返回之前保持连接,当客户端再发送请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。

   优势:减少了连接请求,降低TCP阻塞,减少了延迟,实时性较好。

   劣势:可能会影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。

状态码

状态字 含义
1** 表示通知信息,表示请求收到,或者正在处理 100 Continue客户端应当继续发送请求 101 Switching Protocols服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求
2** 成功,操作被成功接收并处理 200 OK请求已成功 204:请求被受理但没有资源可以返回
3** 重定向 301 Moved Permanently永久性重定向 302临时重定向,请求的资源已经临时移动到新URL 303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上 304:GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变
4** 客户端错误 401请求需要认证 403请求的对应资源禁止被访问 404服务器无法根据客户的请求找到资源
5** 服务器错误 500服务器内部错误,无法完成请求 503服务器正忙

请求方法

请求方法
GET 请求获取由Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
OPTIONS 请求查询服务器的性能,返回服务器所支持的请求方法
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除由Request-URI所标识的资源
TRACE 回显请求服务器收到的请求信息,主要用语测试或诊断

GET和POST的区别

都是HTTP协议中的两种请求方式,HTTP是基于TCP/IP的应用层协议,在报文格式上,请求行不同

GET POST
带参数时 GET方法的参数放在URL中 POST方法放在请求体中
GET通过URL提交数据,约定是参数写在?后以&分割,因此GET提交的数据量和URL所能达到的最大长度有关
实际上HTTP协议对URL长度没有限制,限制URL长度大多是浏览器或服务器配置参数
GET方式通过URL方式请求,明文传输,数据地址栏可见 POST传输数据地址栏不可见
回退 无害 重新被提交
可悲缓存 不可被缓存

你可能感兴趣的:(复习,面试,笔记,Linux常用指令,Docker常用指令,Linux面试,Docker面试)