消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点
信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段
信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信
套接字( socket ) : 套解字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信
Linux Linux常用命令 ######################## 文本操作 ######################## # 升序排列 ls -lrt # 目录dos2unix转换格式 find . -type f -exec dos2unix {} \; # 变量要保留其原来的换行符要加双引号,建议所有变量引用都用双引号加大括号圈上 echo "${var}" # 变量长度 echo "${#var}" # 接受所有参数 $@ # 查看数组中所有元素 ${list[@]} # 查看数组长度 ${#list[@]} # 去掉全路径的文件名,只保留目录 ${path%/*} # 定义数组 list=("1" "2" "3") # 定义map declare -A map=(["1"]="name" ["2"]="age") # 删除空白行和注释行 cat <file> | grep -v ^# | grep . cat <file> | grep -Ev '^$|^#' # 去掉行尾巴空格 echo ${var} | sed 's/[ \t]*$//g' # 去掉单引号 echo ${var} | sed $'s/\'//g' # 例如查看状态是UNCONN,Recv-Q是0的端口信息 ss -ln | awk '($2=="UNCONN" && $3=="0") {print $0}' # 统计状态是UNCONN,Recv-Q是0的端口的netid和出现的次数 ss -ln | awk '($2=="UNCONN" && $3=="0") {netids[$1]++}END{for(i in netids)print i "\t" netids[i]}' # 大写转小写 echo ${var} | tr 'A-Z' 'a-z' # 字符串转ASCLL码 echo "${var}" | tr -d "\n" | od -An -t dC # 根据名字找 find <dir> -name <org> # 根据用户找 find <dir> -user <org> # 根据组找 find <dir> -group <org> # 根据权限找 find <dir> -perm <org> # 根据大小找 find <dir> -size <org> # 根据更改找 find <dir> -mmin <org> # 根据类型找 find <dir> -type <l|b|f> ######################## 系统命令 ######################## # 查看cpu lscpu # 查看pci lspci # 查看后台job jobs # 后台运行 ( cmd ) & # 唤醒 fg %<job_num> # 暂停放入后台 ctrl z # 唤醒stop的job bg %<job_num> # 发送信号,优先15SIGTERM,不行再9SIGKILL kill -SIGTERM <PID> # 杀用户所有进程 pkill -SIGTERM -u <user_name> # 杀父进程 pkill -P <PID> # 杀终端 pkill -SIGTERM -u <tty_name> # 查看cpu信息 cat /proc/cpuinfo # 查看服务单元 systemctl systemctl --type service systemctl list-units # 判断状态 systemctl <is-active|is-enabled|is-failed|isolate|is-system-running> <unit_name> # 看错误信息 systemctl --failed systemctl status <unit_name> -l # 看enable disable static的单元 systemctl list-unit-files # 查看systemd日志 journalctl # 指定级别 journalctl -p <err|debug|info|warning...> # 持续打印 journalctl -f # 指定单元 journalctl -u # 当前时钟时区 timedatectl # 设置 timedatectl <set-ntp|set-time|set-timezone|set-local-rtc> # 查看hostname信息 hostnamectl status # 本地域名解析位置 cat /etc/hosts cat /etc/resolv.conf # 检查网络设备 ip addr show <eno> # 查看网络性能 ip -s link <eno> # 跟踪请求路径 tracepath tracepath6 # 查看网络连接 nmcli con show # 查看网络设备信息 nmcli dev show <eno> # 修改网络接口 nmcli con add nmcli con mod # 激活/取消连接 nmcli con up "<id>" nmcli con down "<id>" # 网络配置文件位置 ls /etc/sysconfig/network-scripts/ # 查看网卡提供商 ls -l /sys/class/net/ens1f0/device # 看输出的最后一列<id> lspci | grep <id> yum <repolist|list|search|install|remove|update> # 查找rpm包 rpm -qa | grep <name> # 查看rpm信息 rpm -qi <name> # 解压rpm包 rpm2cpio <rpm> | cpio -id # 用户信息 cat /etc/passwd # 组信息 cat /etc/group # 更改用户或组 chown -R <user> <dir> chown -R :<group> <dir> chown -R <user>:<group> <dir> # 改权限 chmod -R 750 <file> # 显示当前登录信息 w -f # 公钥存放位置 cat ~/.ssh/known_hosts # 私钥位置 ls /etc/ssh/ssh_host_* # 创建私钥公钥对 ssh-keygen # 将公钥复制到远程机器实现互信 ssh-copy-id <user>@<host> # 检测文件挂载点 df -h # 检测目录使用空间信息 du -h <dir> # 文件系统挂在 mount <dir> <dir> # 查看目录中所有打开的文件和正在运行的进程 lsof <dir> # 取消挂载 umount <dir> # 创建硬连接 ln <exist_path> <path> # 创建软连接 ln -s <exist_path> <path> ######################## 其他软件 ######################## # 查看证书过期时间 openssl x509 -noout -enddate -in <crt_path> # 获取端口证书过期时间 echo 'Q' | timeout 5 openssl s_client -connect <host:port> 2>/dev/null | openssl x509 -noout -enddate # 自签根证书 openssl genrsa -aes256 -out <ca私钥位置> 2048 openssl req -new -key <ca私钥位置> -out <ca签发流程位置> -subj "/C=http://www.likecs.com/ST=http://www.likecs.com/L=http://www.likecs.com/O=http://www.likecs.com/OU=http://www.likecs.com/CN=http://www.likecs.com/emailAddress=" openssl x509 -req -sha256 -days <过期天数> -in <ca签发流程位置> -out <ca证书位置> -signkey <ca私钥位置> -CAcreateserial # 根证书签发子证书 openssl genrsa -aes256 -out <私钥位置> 2048 openssl req -new -key <私钥位置> -out <签发流程位置> -subj "/C=http://www.likecs.com/ST=http://www.likecs.com/L=http://www.likecs.com/O=http://www.likecs.com/OU=http://www.likecs.com/CN=http://www.likecs.com/emailAddress=" openssl x509 -req -sha256 -days <过期天数> -in <签发流程位置> -out <证书位置> -signkey <私钥位置> -CAkey <ca私钥> -CA <ca证书位置> -CAcreateserial openssl pkcs12 -export -clcerts -in <证书位置> -inkey <私钥位置> -out <p12证书位置> -name <别名> # 查看keystore ${JAVA_HOME}/bin/keytool -v -list -storepass <password> -keystore <keystore_path> # 导入trust keystore ${JAVA_HOME}/bin/keytool -import -trustcacerts -noprompt -alias <别名> -file <证书位置> -keystore <Keystore位置> # 导入keystore ${JAVA_HOME}/bin/keytool -importkeystore -trustcacerts -noprompt -alias <别名> -deststoretype pkcs12 -srcstoretype pkcs12 -srckeystore <p12证书位置> -destkeystore <Keystore位置> # 删除tag和name为none的坏掉的image docker rmi $(docker images -f "dangling=true" -q) # 删掉所有容器 docker stop $(docker ps -qa) docker kill $(docker ps -qa) docker rm $(docker ps -qa) # 删除所有镜像 docker rmi --force $(docker images -q) 网络 网络模型常说的模型主要有3中,TCP/IP模型是OSI模型的一种商用实现
7层模型中主要的协议
TCP建立连接三次握手第一次握手:建立连接时,客户端发送syn包(seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号