计算机网络
半小时看懂<计算机网络>
TCP和UDP区别
特性 | TCP | UDP |
---|---|---|
包头 | 20+字节 | 8+字节 |
连接 | 是 | 否 |
可靠 | 是 | 否 |
超时重传 | 是 | 否 |
流量控制 | 是 | 否 |
滑动窗口 | 是 | 否 |
报文顺序 | 是 | 否 |
传输格式 | 字节流(会粘包) | 整个报文 |
传输效率 | 低 | 高 |
适用 | 文件下载,浏览网站 | 实时通话 |
特性 | TCP | UDP |
---|---|---|
包头 | 20+字节 | 8+字节 |
连接 | 是 | 否 |
可靠 | 是 | 否 |
超时重传 | 是 | 否 |
流量控制 | 是 | 否 |
滑动窗口 | 是 | 否 |
报文顺序 | 是 | 否 |
传输格式 | 字节流(会粘包) | 整个报文 |
传输效率 | 低 | 高 |
适用 | 文件下载,浏览网站 | 实时通话 |
1 | sed -i '/aaa/ { s/bbb/ccc/g; s/ddd/eee/g; }' filename |
1 | grep "string" . -R --exclude-dir=./dir #目录 |
1 | find . -name "*.[ch]" |xargs cat|grep -v ^$|wc -l |
1 |
|
1 |
|
1 |
|
1 | # li @ evpower in ~ [14:48:20] |
安装系统时选:上海,系统、编码 两个都选 zh-CN.UTF-8 免得后面系统全是英文
1 | mkdir -p ~/li && git clone https://gitee.com/humble-zh/zhbox-blog.git ~/li/.zbb; |
1 | sudo pacman-mirrors -i -c China -m rank |
1 | sudo pacman -Syyu |
在 /etc/pacman.conf 追加
1 | [archlinuxcn] |
1 | sudo pacman -Syyu |
1 | sudo pacman -S wqy-microhei |
1 | cd $(当前仓库) |
在文件 ~/.i3/config 加入
1 | exec_always --no-startup-id setxkbmap -option caps:swapescape & |
安装firefox
1 | sudo pacman -S firefox-i18n-zh-cn |
修改~/.i3/config对应行
1 | bindsym $mod+F2 exec firefox |
修改系统默认打开方式文件:~/.config/mimeapps.list
1 | vim ~/.config/mimeapps.list |
修改~/.profile
1 | export BROWSER=/usr/bin/firefox |
卸载palemoon
1 | sudo pacman -Rns local/palemoon-bin |
重新加载配置或重启
安装插件
1 | Tampermonkey(有些脚本在Greasemonkey无法运行) |
注释掉/usr/bin/start_conky_maia
里的# conky -c /usr/share/conky/conky1.10_shortcuts_maia &&
1 | sudo pacman -S fcitx fcitx-im fcitx-configtool fcitx-ui-light ttf-dejavu adobe-source-han-sans-otc-fonts fcitx-libpinyin fcitx-sunpinyin fcitx-cloudpinyin |
1 | export GTK_IM_MODULE=fcitx |
1 | fcitx |
在 ~/.profile 修改默认编辑器为vim
1 | export EDITOR=/usr/bin/vim |
1 | sudo pacman -S ntp |
1 | sudo cp /usr/share/conky/conky_maia /usr/share/conky/conky_maia.bak |
1 | cd $(当前仓库) |
拷贝 /etc/i3status.conf 到 ~/.i3status.conf ,注释 ~/.i3status.conf 以下行
1 | order += "battery all" |
1 | tztime local { |
scrot: 截图软件
inkscape: 编辑图片画框画箭头等等
variety: 更换壁纸
the_silver_searcher: 快速的代码命令行搜索工具 ag
autojump: 快速跳转目录
fzf: 终端命令行模糊查询历史
cloc: 统计代码行数,可区分文件类型以及空行和注释
zeal: 离线文档浏览器
albert: 快捷搜索/执行
1 | sudo pacman -S sshpass mosquitto scrot inkscape the_silver_searcher fzf base-devel cmake unrar unzip yay netcat cloc smplayer you-get albert |
1 | sudo pacman -Rns $(pacman -Qdtq) |
1 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" |
或
1 | sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" |
或
1 | curl -Lo install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh |
如果出现 Failed to connect to raw.githubusercontent.com port 443: Connection refused
,就在/etc/hosts文件追加
1 | 199.232.28.133 raw.githubusercontent.com |
修改ohmyzsh配置
1 | cd $(当前仓库) |
安装ohmyzsh两个插件zsh-syntax-highlighting,zsh-autosuggestions
1 | git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting |
查看git
命令缩写
1 | cat ~/.oh-my-zsh/plugins/git/git.plugin.zsh |
git status
中文乱码
1 | git config --global core.quotepath false |
测试声音 speaker-test
小新pro14,因为是新电脑,声卡很新。使用aplay -l 命令 ,显示没有声卡就安装sudo pacman -S sof-firmware
可能就是你关机的时候是强制关机的,导致管理声音的软件异常退出,下次开机的时候管理声音的软件没有打开造成的,下面有5个方法,每种电脑可能都不一样,我尝试了多种方法,今天就来记录一下。每种方法使用完必须要重启一下电脑才可以的
方法1
1 | amixer -D pulse sset Master toggle |
方法2
1 | rm -R .config/pulse/ |
方法3
1 | sudo gpasswd -a $USER audio |
方法4
1 | pulseaudio --check |
方法5
1 | systemctl --user restart pulseaudio.service |
参考文献
https://askubuntu.com/questions/15223/how-can-i-restart-pulseaudio-without-having-to-logout
https://unix.stackexchange.com/questions/204522/how-does-pulseaudio-start
https://forum.manjaro.org/t/solved-manjaro-xfce-no-sound-dummy-output/26332
1 | defaults.pcm.card 1 |
先入winPE,使用扇区小工具BOOTICE
,UEFI - 修改启动序列 - WindowsBootManager - 启动分区
改为linux的swap(8G)重启就可以进grub引导进linux,执行sudo update-grub
再进winPE,使用扇区小工具BOOTICE
,UEFI - 修改启动序列 - WindowsBootManager - 启动文件
,见到从\EFI\Microsoft\Boot\bootmgfw.efi
改为了\EFI\Manjaro\grubx64.efi
就行(或者见到WindowsBootManager
的是\EFI\Microsoft\Boot\bootmgfw.efi
,Manjaro
的是\EFI\Manjaro\grubx64.efi
)
1 | error: unknown filesystem. |
Manjaro won’t boot after Windows Update
1 | ls #输出(hd0) (hd0,gpt6) (hd0,gpt5) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) |
GRUB/Restore the GRUB Bootloader
1 | sudo pacman -Syu grub |
i3wm 调节分辨率,鼠标大小等等
1 | cp ~/.Xresources ~/.Xresources.bak |
1 | sudo cp /etc/X11/xorg.conf.d/30-touchpad.conf /etc/X11/xorg.conf.d/30-touchpad.conf.bak |
1 | --- /etc/X11/xorg.conf.d/30-touchpad.conf.bak 2021-01-24 22:23:49.541749394 +0800 |
联想小新pro14触摸板和键盘失灵
不能进系统:进入grub界面,按e编辑,在linux行的quiet splash
后面加入i8042.dumbkdb nomodeset
,按F10进入系统
能进系统:给/etc/default/grub
的GRUB_CMDLINE_LINUX_DEFAULT
行的quiet splash
后面加i8042.dumbkdb nomodeset
,然后sudo update-grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.direct i8042.dumbkbd"
.i3/config
新增3行1 | exec_always --no-startup-id xmodmap -e "clear lock" |
1 | sudo systemctl enable sshd.service #开机启动 |
1 | sudo pacman -S xf86-video-amdgpu |
1 | sudo pacman -S obs-studio |
1 | sudo pacman -S visual-studio-code-bin |
VSCode安装vim插件后,esc和caps没切换,在设置里搜Keyboard:Dispatch
改为keyCode
重启软件即可
在win打开Windows Powershell(管理员)
用下面命令关闭快速启动
1 | powercfg /h off |
1 | yay -S mqttfx-bin |
1 | sudo pacman -S mailx |
修改 /etc/mail.rc 权限并追加内容
1 | set from=humble.li@evpowergroup.com smtp="smtp.mxhichina.com" |
1 | sudo pacman -S wps-office ttf-wps-fonts |
1 | yay -S typora-free |
1 | sudo pacman -S --needed bash bc bin86 binutils bzip2 cdrkit core/which \ |
1 | sudo pacman -S shadowsocks-libev shadowsocks-v2ray-plugin proxychains |
把/etc/proxychains.conf
的socks4*
改为socks5 127.0.0.1 1080
浏览器:手动代理配置:127.0.0.1,端口:1080,使用SOCKSv5时代理DNS查询
注释/etc/proxychains.conf
的proxy_dns
1 | yay -S todesk |
1 | yay -S sunloginclient |
每次开机都需要运行一次下面指令才能正常使用向日葵
1 | systemctl start runsunloginclient.service |
2020年1月10日 更新。默认配置可以使用透明,需要取消 compton.conf 中
1 | #inactive-opacity = 0.93; |
此问题默认存在于manjaro-i3-18.1.5-191229-linux54之前的版本中。 i3 社区版中compton包名已经改名为picom。 终端中运行:
1 | pkill comton #关闭compton |
错误显示为:
1 | [ 01/09/2020 18:38:49.762 parse_config_libconfig WARN ] Option `no-dock-shadow` is deprecated, and will be removed. Please use the wintype option `shadow` of `dock` instead. |
1 | cd $(当前仓库) |
1 | # ~/.config/picom.conf |
1 | # /etc/systemd/system/vncserver@:1.service |
前提:添加 archlinuxcn 源。在 /etc/pacman.conf 里加入以下代码:
1 | [archlinuxcn] |
1 | sudo pacman -Sy |
安装 TIM
1 | sudo pacman -S deepin.com.qq.office |
无法启动
1 | X Error of failed request: BadWindow (invalid Window parameter) |
解决方案
1 | yaourt -S gnome-settings-daemon |
开机启动 /usr/lib/gsd-xsettings ,往 ~/.i3/config 加入
1 | exec_always --no-startup-id nohup /usr/lib/gsd-xsettings > /dev/null 2>&1 & |
系统语言非中文时,中文全显示成方块,需要在 /opt/deepinwine/tools/run.sh 中将 WINE_CMD 那一行修改为
1 | WINE_CMD="LC_ALL=zh_CN.UTF-8 deepin-wine" |
1 | yay -S deepin-wine-wechat |
when-changed: 监控文件变动并且执行命令
1 | pip3 install when-changed |
1 | pip3 install ipdb |
把下面行追加到 ~/.vimrc ,在vim的插入模式输入 xtime 即可
1 | iab xtime <c-r>=strftime("%Y-%m-%d %H:%M:%S")<cr> |
print("Hi, this is a 'word'!")
word
:光标移到o
,yiw
(举一反三:viw
,diw
,ciw
)或者yi'
'word'
:光标移到o
,ya'
(举一反三:va'
,da'
,ca'
)Hi, this is a 'word'!
:光标移到o
,yi"
(举一反三:vi"
,di"
,ci"
)"Hi, this is a 'word'!"
:光标移到o
,ya"
(举一反三:va"
,da"
,ca"
)查看vim常用寄存器的保存的内容:registers
a-z每个字母对应一个寄存器,查看寄存器a对应的值:reg a
,查看寄存器b对应的值:reg a
normal
模式下粘贴寄存器a的内容"ap
,insert
模式下粘贴寄存器a的内容Ctrl+r a
print("Hi, this is a 'word'!")
word
进寄存器a
:光标移到o
,"a
(选择寄存器a
),yiw
(拷贝单词)this
进寄存器b
:光标移到h
,"b
(选择寄存器b
),yiw
(拷贝单词)寄存器a
保存的内容::reg a
寄存器b
保存的内容::reg b
word
(即寄存器a
的内容):光标移到粘贴位置,"a
(选择寄存器a
),p
(粘贴)this
(即寄存器b
的内容):光标移到粘贴位置,"b
(选择寄存器b
),p
(粘贴)当我们不选择寄存器直接使用y
或d
操作时,被操作的内容会被拷贝或者剪切到""
(无名寄存器)中
"%
:内容是当前文件名,一般写文件注释头会用到
".
:上次插入的文本
"+
:系统剪切板,查看vim是否支持使用系统剪切板:echo has('clipboard')
,输出1表示支持
Ctrl+c
(拷贝内容到系统剪切板),回到vim用"+
(选择系统剪切板),p
(粘贴系统剪切板的内容)"+
(选择系统剪切板),yy
(拷贝一行进入系统剪切板),可以在别的编辑器或者程序(如浏览器搜索框)里用Ctrl+v
粘贴""
(无名寄存器),如果想用"+
(系统剪切板)取代""
(无名寄存器),需要:set clipboard^=unnamed,unnamedplus
当vim :set autoindent
之后,在insert
模式下用Ctrl+Shift+v
粘贴网上拷贝的代码会出现缩进对齐错乱
:set paste
,i
(进入插入模式),Ctrl+Shift+v
(粘贴),:set nopaste
"+
(选择系统剪切板),p
(粘贴):set clipboard^=unnamed,unnamedplus
(使用系统剪切板取代无名寄存器),p
(粘贴)1 | sudo apt-get install s-nail |
1 | sudo pacman -S s-nail |
修改/etc/mail.rc或/etc/nail.rc或/etc/s-nail.rc(Ubuntu)、/etc/mail.rc(centOS)
1 | set from=humble.li@evpowergroup.com smtp="smtp.mxhichina.com" |
1 | mail -s "测试主题" humble.li@evpowergroup.com |
1 | mail -s "测试主题" humble.li@evpowergroup.com < 正文文件.txt |
1 | uuencode a.txt a.txt | mail -s "测试主题" humble.li@evpowergroup.com < 正文文件.txt |
版权声明:本文为CSDN博主「渣渣的夏天」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39564555/article/details/97620705
运行容器
1 | docker run IMAGE [COMMAND] [ARG…] |
启动交互式容器:
1 | docker run -i -t IMAGE /bin/bash |
查看容器:
1 | docker ps [-a] [-l] |
自定义容器名:
1 | docker run --name=自定义名 -i -t /bin/bash |
重新启动已经停止的容器:
1 | docker start [-i] 容器名/id |
删除停止的容器:
1 | docker rm 容器名/id |
以守护形式运行容器
1 | docker run -i -t IMAGE /bin/bash |
附加到运行中的容器
1 | docker attach 容器名/id |
启动守护式容器
1 | docker run -d 镜像名 [COMMAND] [ARG…] |
查看容器日志
1 | docker logs [-f] [-t] [--tail] 容器名/id |
查看容器内进程
1 | docker top 容器名/id |
在运行中的容器内启动新进程
1 | docker exec [-d][-i][-t] 容器名/id [COMMAND] [ARG…] |
停止守护容器
1 | docker stop 容器名/id 发送信号后等待服务器停止 |
使用docker帮助文档
1 | man docker-run |
设置容器的端口映射
1 | run [-P] [-p] |
Nginx部署静态网页流程
1 | - 创建映射80端口的交互式容器 |
1 | docker run -p 80 --name web -i -t ubuntu /bin/bash |
1 | <html> |
1 | whereis nginx |
Docker镜像:
1 | 容器的基石 |
列出镜像
1 | docker images [OPTIONS] [REPOSITORY] |
查看镜像
1 | docker inspect [OPTIONS] CONTAINER|IMAGE[CONTAINER|IMAGE……] |
删除镜像
1 | docker rmi [OPTIONS] IMAGE [IMAGE…] |
查找镜像
1 | Docker Hub https://hub.docker.com/ |
拉取镜像
1 | docker pull [OPTIONS] NAME[:TAG] |
推送镜像
1 | docker push NAME[:TAG] |
构建镜像
1 | 保存对容器的修改,并再次使用 |
Remote API
RESTful风格的API
STDIN、STDOUT、STDERR
连接方式
unix:///var/run/docker.sock
tcp://host:port
fd://socketfd
test
1 | ps -ef | grep docker |
查看守护进程
1 | ps -ef | grep docker |
使用service命令管理
1 | service docker start|stop|restart |
Docker的启动选项
1 | docker -d [OPTIONS] |
docker启动配置文件:/etc/default/docker
1 | DOCKER_OPTS = "……" |
环境准备:
1 | 第二台安装Docker的服务器 |
修改服务器端配置
1 | 修改Docker守护进程启动项 |
远程访问
1 | curl http://服务器IP:配置port/info |
客户端远程访问:
1 | 修改客户端配置 |
设置了远程访问模式后的服务端不再支持本机连接
1 | 1.将本机作为远程客户端,通过DOCKER_HOST连接 |
创建一个Dockerfile
1 | first dockerfile |
指令格式
1 | Comment |
FROM <image>[:<tag>]
1 | 已经存在的镜像 |
MAINTAINER <name>
1 | 指定镜像的作者信息,包含镜像的所有者和联系信息 |
RUN
1 | 指定当前镜像中运行的命令 |
EXPOSE <port> [<port>…]
1 | 指定运行该镜像的容器使用的端口 |
CMD
1 | 提供容器运行时的命令,作为默认设置,会被docker run中相同命令覆盖 |
ENTRYPOINT
1 | ENTRYPOINT [ "executable", "param1", "param2"] (exec模式) |
ADD、COPY
1 | 将文件/目录复制到Dockerfile构建的文件中,源地址,目标地址 |
VOLUME [“/data”]
1 | 用于向基于镜像创建的容器添加数据卷,共享数据/数据持久化 |
WORKDIR /path/to/workdir
1 | 在镜像创建新容器时,指定工作目录,一般使用绝对路径,相对路径会持续传递 |
ENV <key><value>
ENV <key>=<value>…
1 | 用户设置环境变量 |
USER daemon
1 | 指定镜像运行的用户,默认为root |
ONBUILD [INSTRUCTION]
1 | 镜像触发器 |
从基础镜像运行一个容器
执行一条指令,对容器做出修改
执行类似docker commit的操作,提交一个新的镜像层
基于刚提交的镜像运行一个新容器
执行Dockefile中的下一条指令,直至所有指令执行完毕
中间层镜像不会被删除,中间层容器会被删除
可以使用中间层镜像调试
查找错误
构建缓存
不适用构建缓存
1 | docker build --no-cache |
1 | docker history [image] |
1 | docker0——Linux虚拟网桥 |
环境准备
1 | 用于测试的Docker镜像Dockerfile: |
允许所有容器间互联
1 | 默认设置 |
拒绝所有容器间互联
1 | Docker守护进程的启动选项 |
允许特定容器间的连接
1 | Docker守护进程的启动选项 |
ip-forward
1 | --ip-forward=true |
iptables
1 | iptables是与Linux内核集成的包过滤防火墙系统, |
1 | filter表中包含的链: |
限制IP访问容器
1 | $ sudo iptables -I DOCKER -s 10.211.55.3 -d 127.17.0.7 -p TCP --dport 80 j DROP |
端口映射访问
Docker容器的数据卷
什么是数据卷?(Data Volume)
数据卷(Data Volume)的特点
为容器添加数据卷
1 | $ sudo docker run -it -v ~/container_data:/data ubuntu /bin/bash |
为数据卷添加访问权限
1 | $ sudo docker run -it -v ~/datavolume:/data:ro ubuntu /bin/bash |
使用Dockerfile构建包含数据卷的镜像
1 | Dockerfile指令:VOLUME["/data"] |
Docker的数据卷容器
什么是数据卷容器:
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,就叫做数据卷容器。
挂载数据卷容器的方法
1 | $ sudo docker run --volumes-from [CONTAINER NAME] |
数据备份方法
1 | $ sudo docker run --volumes-from [container name] -v $(pwd):/backup[:wr] ubuntu tar cvf /backup/backup.tar [container data volume] |
数据还原方法
1 | $ sudo docker run --volumes-from [container name] -v $(pwd):/backup[:wr] ubuntu tar xvf /backup/backup.tar [container data volume] |
使用网桥实现跨主机连接
原理:
网络拓扑
环境准备:
1 | Mac OS X + Parallels |
网络配置:
1 | 修改/etc/network/interfaces 文件 |
Docker设置:
1 | 修改/etc/default/docker文件 |
优点:
1 | 配置简单,不依赖第三方软件 |
缺点:
1 | 与主机在同网段,需要小心划分IP地址 |
使用Open vSwitch实现跨主机容器连接
Open vSwitch是什么?
Open vSwitch是一个高质量、多层虚拟交换机,使用开源Apache2.0许可协议,由Nicira Networks开发,主要实现代码为可移植的C代码。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow,sFlow,SPAN,RSPAN,CLI,LACP,8022.lag)
原理:
什么是GRE隧道?
GRE:通用路由协议封装
隧道技术(Tunneling)是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用随带传递的数据(或负载)可以使不同协议的数据帧或包。隧道协议将其它协议的数据帧或包重新封装然后通过隧道发送新的帧头提供路由信息,以便通过互联网传递被封装的负载数据。
环境准备:
1 | Mac OS X + Virtualbox |
操作:
1 | 建立ovs网桥 |
使用weave实现跨主机容器连接
weave是什么?
1 | 语义:编织 |
环境准备:
1 | Mac OS X + Virtualbox |
操作:
1 | 安装weave |
1 | git config --list |
1 | cat ~/.gitconfig |
2021年8月13号之后,github已经不让直接使用账号名密码来登录了,必须使用personal access token(个人访问令牌)
我的账号->settings->Developer settings->Personal access tokens->Generate new token->(pc名字,粘贴key)->(Note:哪台电脑,有效期(Expiration)选90天,Select scopes选repo)
1 | $ git clone https://github.com/username/repo.git |
1 | #如果没有~/.ssh 目录就执行下面,一直回车到结束即可 |
我的账号->settings->SSH and GPG keys->New SSH key->(pc名字,粘贴key)
1 | ssh -T git@github.com |
1 | cd projectdir/ |
1 | (repository_home)/.git/config # for the subject repository. |
1 | #记住密码记录 |
1 | git remote show origin # 发现不是tracked的分支(远程已删,本地还有) |
1 | git log --graph --decorate --oneline --simplify-by-decoration --all |
git status
中文乱码1 | git config --global core.quotepath false |
修改集合内匹配A列的行中其他列的值
1 | import pandas as pd |
挑选A列匹配以’xiao‘开头或者中间’带”-“的所有行,把A按字符”-“拆分为两列
1 | import pandas as pd |
df.bs=df.bs.fillna(‘unknown’)
df.bs=df.bs.replace(‘CHN-UNICO’,’CHN-UNICOM’)
sshpass -p helloworld ssh -o stricthostkeychecking=no root@${line} ‘reboot -f’