Linux 必备工具, 命令与例子
目录1. wget2. screen3. unzip/gzip4. netstat5. git6. composer7. docker- 升级- 镜像及代理设置- 迁移 /var/lib/docker8. docker compose, docker swarm, docker stack9. timedatectl set-timezone Asia/Shanghai 时区设置10. date 时间查看/设定11. dig: Dig是一个在类Unix命令行模式下查询DNS包括NS记录A记录MX记录等相关信息的工具。12. du 查看目录大小13. systemctl 显示运行服务14. 查找目标文件夹下符合条件的子目录/文件并删除15. 添加 / 编辑用户组16. 查询端口占用17. 添加带目录指定组附属组的用户18. 时区设置19. proxychains命令在网络代理环境下执行20. 监察进程流量21. 建多层目录22 检查CPU核数23 htpasswd (apt install apache2-utils)24 wc 统计25 iftop26 w 查负载, load average分别对应于过去1分钟5分钟15分钟的负载平均值。27 pm2 管理node进程工具28 kill / killall29 firewall-cmd 相关命令30 netplan - 新一代网络配置工具31 apt-file - 寻找包内命令从而知道要安装所需的包32 hostnamectl 设置主机名33 journalctl 管理系统的事件日志记录34 scp 复制远程文件35 export HTTPS_PROXY 代理36 jobs, fg, bg37 watch 周期性执行给定指令监视运行情况38 lsblk 展示块设备block devices的信息包括磁盘、分区和挂载点39 nc40 iostat 和 iotop41 dd42 系统服务设置43 rm 和 mv44 tree 列出目录结构L-层数45 nfs46 setfacl47 snap48 Ubuntu22.04下磁盘扩容49 宝塔相关50 pdf生成工具wkhtmltopdf51 fsck 检查/修复文件系统52 rsync 文件同步53 time 脚本性能测试54 jmeter 压测工具55 ansible 运维工具56 持久化指定DNS57 openssl58 强制复制cp即使有alias cpcp -i59 ip addr60 grep61 supervisor 要点62 htop63 xargs64 traceroute65 update-alternatives66 ssh67 awk1. wget# 获取本机公网ip wget -qO- ifconfig.me/ip 或 curl ifconfig.me2. screenscreen案例 新建一个lnmp会话screen -S lnmp(lnmp为会话名可自己定义) 离开会话并让程序断续运行ctrl a d (按住ctrl不放分别按 a 和 d) 恢复后台运行的会话screen -r lnmplnmp为自己定义的会话名 显示所有screen创建的会话screen -ls 在会话里执行exit命令会话是结束运行并退到shell中3. unzip/gzip# 递归压缩target目录 zip -rq xxx.zip target # 压缩target目录排除某个目录 zip -rq web.zip web -x web/image/* # 解压到指定目录 unzip -q web.zip -d target gunzip xxx.gz4. netstat5. git# 指定私钥获取仓库 git clone -c core.sshCommandssh -i /data0/Auths/ssh/gitlab/id_rsa gitgitlab.com:bennybi/iot-age-te001.git # 指定端口2222获取路径 ssh://githost001.dev.ia:2222/dev1/team1-prj2.git # 强制合并 git fetch git reset --hard HEAD git merge origin/$CURRENT_BRANCH # 设置或清除代理 git config --global --get http.proxy git config --global --set http.proxy http://proxy.server:port git config --global --set https.proxy https://proxy.server:port git config --global --unset http.proxy git config --global --unset https.proxy6. composer安装apt install composer 参数 --ignore-platform-reqs # 忽略版本冲突 使用 - 安装laravel composer global require laravel/installer - 添加laravel命令路径操作 vi $HOME/.bashrc 最末添加 export PATH$PATH:$HOME/.config/composer/vendor/bin source $HOME/.bashrc7. dockerdocker rm docker ps -a -q # 删除所有容器 docker rmi docker images -q # 删除所有镜像 docker logs {container_name} # 看日志 docker ps -a # 列出运行中的容器服务 docker stop {container_name} # 停止容器服务 docker image ls # 列出已安装的镜像包 docker image prune --force # 清理没关联的镜像文件 docker stats # 看资源 docker restart container_name # 重启容器服务 docker stop $(docker ps -aq) #停止所有运行容器 docker start $(docker ps -aq) #启动所有运行容器 docker volume list # 列出已有卷 docker volume create data_dir # 新建数据卷 # 登录到远程仓库 docker login -u 用户名 -p 密码 远程仓库地址 # 标记本地镜像将其与远程仓库地址关联 docker tag 本地镜像名:标签 远程仓库地址/仓库名/镜像名:标签 # 推送镜像到远程仓库 docker push 远程仓库地址/仓库名/镜像名:标签 # 保存镜像 docker image save docker-compose-zx-php-v1.0:latest -o docker-compose-zx-php-v1.0.tar # 载入镜像 docker load -i docker-compose-zx-php-v1.0.tar # 执行容器命令例子 docker exec container_name php -i|grep rdkafka # 获取容器ip docker inspect -f {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} container_name #以root身份进入容器 docker exec -it -u root {container_name} /bin/bash # 复制容器下的某配置目录例子: nifi-容器名 docker cp nifi:/opt/nifi/nifi-current/conf /data0/Server/Settings/apache-nifi1 # 查看容器ip docker inspect -f {{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} $(docker ps -aq) docker login ${REGISTRY_URL} -u $LOCAL_REGISTRY_LOGIN -p $LOCAL_REGISTRY_PASSWORD docker build --output typeregistry,oci-mediatypesfalse --cache-from ${DOCKER_IMAGE_TAG} -t ${DOCKER_IMAGE_TAG} --push --provenancefalse . docker push ${DOCKER_IMAGE_TAG}注:不要用socks5代理拉那是for business要money的否则会提示错误:Error response from daemon: Get https://registry-1.docker.io/v2/: Using feature requires a Business Subscription: a SOCKS proxy- 升级# 更新 Docker 仓库索引 sudo apt-get update # 停止 Docker 服务 sudo systemctl stop docker # 安装最新版本的 Docker 社区版 sudo apt-get install docker-ce docker-ce-cli containerd.io # 启动 Docker 服务 sudo systemctl start docker # 验证 Docker 版本 docker --version- 镜像及代理设置法1# 参考https://blog.csdn.net/qiuweifan/article/details/139771938 # 创建 dockerd 相关的 systemd 目录这个目录下的配置将覆盖 dockerd 的默认配置 mkdir -p /lib/systemd/system/docker.service.d # 新建配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf这个文件中将包含环境变量 [Service] EnvironmentHTTP_PROXYhttp://proxy-server0:1081 EnvironmentHTTPS_PROXYhttp://proxy-server0:1081 EnvironmentNO_PROXY*.k8s.ia,*.aliyun.com,*.aliyuncs.com,*.huaweicloud.com,localhost,127.0.0.1,0.0.0.0,10.0.0.0/8,172.17.0.0/12,192.168.0.0/16 # 检查环境变量 systemctl show --propertyEnvironment docker systemctl daemon-reload systemctl restart docker如果出现错误Error response from daemon: Get https://registry-1.docker.io/v2/: malformed HTTP response \x05\xff检查代理端口是否正确可用法2编辑/etc/docker/daemon.json{ registry-mirrors: [https://mirrors.ustc.edu.cn, http://mirror.azure.cn, https://hub.docker.com], insecure-registries: [http://host001.dev.ia:18181, http://host001.dev.ia:5050], http-proxy: http://proxy-server0:1081, https-proxy: http://proxy-server0:1081, no-proxy: *.k8s.ia,*.dev.ia,*.aliyun.com,*.aliyuncs.com,*.huaweicloud.com,localhost,127.0.0.1,0.0.0.0,10.0.0.0/8,172.17.0.0/12,192.168.0.0/16 }- 迁移 /var/lib/docker因基本盘空间原因需迁移该目录到数据盘# 先关停服务 systemctl stop docker mkdir -p /data # 用这个同步目录文件及权限过去新地方不能用cp以避免容器目录权限不匹配导致启动问题 rsync -avzP /var/lib/docker /data # 源文件备份 mv /var/lib/docker /data/docker_ori # 建立软链 ln -s /data/docker /var/lib/docker # 重启服务 systemctl daemon-reload systemctl restart docker8. docker compose, docker swarm, docker stack# Docker Compose 命令 # 指定配置文件, 启动两个容器 docker compose -f apache-nifi.yaml up --scale nifi2 -d # 等待容器成功运行后再返回 docker compose up -d --wait Docker Swarm 命令 # 查看当前docker info 放行 2377/tcp管理端口,7946/tcp/udp节点间通信端口,4789/udpoverlay 网络端口端口 # 初始化Swarm管理节点 docker swarm init --advertise-addr MANAGER-IP docker swarm init --advertise-addr 172.16.20.20 # 在管理节点上创建一个overlay网络 docker network create --scopeswarm --driveroverlay --attachable nas-network0 # 查看添加工作节点token命令 docker swarm join-token worker # 使用上述命令输出的token在其他节点加入集群 docker swarm join --token SWMTKN-1-4ct47sgn5lf4hzcbnyg0iv8jf8x2nwjwctckjlr78llkvmn342-8mqysj38n9fk9g4dkogfw1cj9 172.16.20.20:2377 # 部署服务到overlay网络 docker service create --replicas 3 --name my-nginx --network nas-network0 -p 7080:80 nginx docker service ls # 更新/重启服务 docker update nginx_nginx docker service rm nginx # 查看子节点列表及其Labels docker node ls -q | xargs docker node inspect --format {{ .Description.Hostname }}: {{ .Spec.Labels }} # 将worker角色升级为manager docker node promote NODE [NODE...] # 将manager角色降级为worker docker node demote NODE [NODE...] # 查看子节点详细 docker node inspect hostname # 给节点打标记 docker node update --label-add etcdtrue hostname # 部署stack docker stack deploy -c docker-compose.yml name # 查看已部署的stack docker stack ls # 查看在走服务 docker stack services etcd-swarm # 查看服务容器进程 docker stack ps etcd-swarm # 删除服务 docker stack rm etcd-swarm9. timedatectl set-timezone Asia/Shanghai 时区设置10. date 时间查看/设定11. dig: Dig是一个在类Unix命令行模式下查询DNS包括NS记录A记录MX记录等相关信息的工具。# centos 安装 yum install bind-utils # debian/ubuntu 安装 apt-get install dnsutils 用例查看本机公网ip dig short myip.opendns.com resolver1.opendns.com12. du 查看目录大小#查看当前目录下1层目录的大小总量 du -h -d1 ./ # 阿里云的NAS盘下快速统计目录空间命令 find ./ -mindepth 1 -maxdepth 1 -type d| xargs -L1 -P24 du -hs13. systemctl 显示运行服务# 显示全部的服务 systemctl --typeservice --all # running 的服务 systemctl --typeservice --staterunning # 服务随机自启 systemctl enable {service} # 查询服务随机自启 systemctl is-enabled {service} # 服务停止随机自启 systemctl disable {service}14. 查找目标文件夹下符合条件的子目录/文件并删除# 删除vendor下的.git目录 (含子目录) find ./vendor -type d -iname .git | xargs rm -rf # 删除vendor下的.gitignore文件 (含子目录) find ./vendor -iname .gitignore | xargs rm -rf15. 添加 / 编辑用户组usermod -aG wheel ben # 给用户添加组 usermod -g root ben # 给用户改主组16. 查询端口占用# lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME docker-pr 1188 root 4u IPv4 22652 0t0 TCP *:http (LISTEN) docker-pr 1196 root 4u IPv6 22075 0t0 TCP *:http (LISTEN) 又或者 # netstat -anptl Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 574/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2334/cupsd tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 1263/docker-proxy17. 添加带目录指定组附属组的用户useradd -g ubuntu -G www-data,ubuntu -s /bin/bash -m git18. 时区设置timedatectl set-timezone Asia/Shanghai #修改时区后同步cron时间 service rsyslog restart service crond restart19. proxychains命令在网络代理环境下执行proxychains 调用命令 # WSL2下查宿主机IP cat /etc/resolv.conf | grep -oP (?nameserver\ ).* 查到后把ip填入/etc/proxychains.conf20. 监察进程流量#apt-get install nethogs #nethogs21. 建多层目录mkdir -p api/staging/src22 检查CPU核数cat /proc/cpuinfo | grep processor 或 lscpu23 htpasswd (apt install apache2-utils)htpasswd -bc file user passwd // 新建文件并建账号 htpasswd -b file user passwd // 增/改用户密码24 wc 统计ps -aux|grep php-fpm|wc -l25 iftopiftop是类似于top的实时流量监控工具。26 w 查负载, load average分别对应于过去1分钟5分钟15分钟的负载平均值。$ w 12:22:02 up 44 days, 21:48, 2 users, load average: 3.96, 6.28, 5.1627 pm2 管理node进程工具# 安装 npm install -g pm2 # 启动并定义一个node进程服务 pm2 start /path/yapi/vendors/server/app.js --name yapi # 常用命令 pm2 l pm2 start yapi pm2 stop yapi pm2 show yapi #显示详细28 kill / killall# 杀死所有WokerMan进程 pgrep -f WorkerMan | xargs kill -9 # 杀所有vi进程 killall vi # 杀所有进程 killall -r .*29 firewall-cmd 相关命令firewall-cmd --permanent --query-port2222/tcp # 查询是否开了端口 firewall-cmd --permanent --add-port2222/tcp # 加端口 firewall-cmd --permanent --remove-port2222/tcp # 禁止端口 firewall-cmd --permanent --add-rich-rulerule familyipv4 source address{ip} port protocoltcp port3000 accept # 仅允许指定ip访问端口 firewall-cmd --reload # 重载应用30 netplan - 新一代网络配置工具配置文件/etc/netplan/00-installer-config.yamlnetwork: ethernets: enp0s31f6: addresses: [192.168.1.9/24] dhcp4: no optional: true gateway4: 192.168.1.1 nameservers: addresses: [10.10.10.1] #addresses: [8.8.8.8,114.114.114.114] enp3s0: dhcp4: true version: 2修改后运行 netplan apply, 如果遇到重启后被旧IP覆盖的情形# 重新编辑好网络文件后 mv /etc/cloud/cloud.cfg.d/90-installer-network.cfg ~/ cloud-init clean reboot31 apt-file - 寻找包内命令从而知道要安装所需的包# apt-file search /usr/bin/phpize php7.0-dev: /usr/bin/phpize7.0 php7.2-dev: /usr/bin/phpize7.232 hostnamectl 设置主机名hostnamectl set-hostname k8s-node-133 journalctl 管理系统的事件日志记录journalctl -f -u kubelet # 查看kubelet日志34 scp 复制远程文件# 复制远程目录到当前路径 scp -r rootk8s-master-1:/dir_path ./ # 将本地目录复制到远程主机目录 scp -r ./test rootk8s-master01:/dir_path35 export HTTPS_PROXY 代理# 固定方式 修改文件“/etc/profile”在文件结束位置增加如下内容 # 设置http代理 export http_proxyhttp://127.0.0.1:1081 # 设置https代理 export https_proxyhttps://127.0.0.1:1081 # 设置ftp代理 export ftp_proxysocks5://127.0.0.1:10808 # 临时方式 export http_proxyhttp://x.x.x.x:1081 export https_proxyhttp://x.x.x.x:1081 export ftp_proxyuser:passwordx.x.x.x:1080 export no_proxyrx-print.com,aliyun.com,aliyuncs.com,huaweicloud.com,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 # 不必代理的ip # git代理 git config --global http.proxy socks5://192.168.0.108:1080 git config --global https.proxy socks5://192.168.0.108:1080 git config --global --unset http.proxy git config --global --unset https.proxy # docker-compose.yml设置代理 some-api: environment: - HTTP_PROXYhttp://172.21.0.1(虚拟网关ip):1081 - HTTPS_PROXYhttp://172.21.0.1:1081 - NO_PROXYlocalhost,127.0.0.1,windows.net,aliyun.com,aliyuncs.com,huaweicloud.com,127.0.0.1,10.0.0.0/8,172.21.0.0/16,192.168.0.0/1636 jobs, fg, bgjobs - 显示当前命令任务 fg - 把命令后台任务提到前台运行 bg - 带回命令后台运行 example: # jobs [1] Running bash download-file.sh # fg # 按[CTRL-Z] 退出交互并挂起 [2] Stopped # bg 继续运行37 watch 周期性执行给定指令监视运行情况watch kubectl get po -n tidb-cluster # 查看gpu资源 watch -n 1 nvidia-smi --query-gpumemory.used,utilization.gpu --formatcsv38 lsblk 展示块设备block devices的信息包括磁盘、分区和挂载点~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 79.9M 1 loop /snap/lxd/22923 loop1 7:1 0 61.9M 1 loop /snap/core20/1405 loop3 7:3 0 53.3M 1 loop /snap/snapd/19457 loop4 7:4 0 63.4M 1 loop /snap/core20/1974 loop5 7:5 0 111.9M 1 loop /snap/lxd/24322 vda 252:0 0 40G 0 disk ├─vda1 252:1 0 1M 0 part ├─vda2 252:2 0 200M 0 part /boot/efi └─vda3 252:3 0 39.8G 0 part / vdb 252:16 0 500G 0 disk39 nc# 探测目标端口可否联通 nc -zv 172.16.20.215 6443 Connection to 172.16.20.215 6443 port [tcp/*] succeeded! # 建个端口监听 nc -l 3333 # 连接 nc 10.0.2.2 3333 # 端口扫描 nc -v -w 1 10.0.2.2 -z 22-8140 iostat 和 iotopiostat查看相关磁盘使用信息iotop 可以按照IO使用情况来显示进程列表# 如果没有 iostat 命令那么使用 yum install sysstat 进行安装 iostat -x 1 1041 dd法1: # 备份tf卡 dd if/dev/sda | gzip/iso/c0-master0.gz # 写入镜像 1、删除SD卡分区。 使用 fdisk 命令对SD卡格式化 2、写入备份文件 $ gzip -dc /iso/c0-master0.gz | sudo dd of/dev/sda 法2: # 镜像备份 dd if/dev/sdb convsync,noerror bs4M | gzip -c ./backup_image.img.gz # 还原 gunzip -c ./backup_image.img.gz | dd of/dev/sdb bs4M42 系统服务设置# Example cp /mnt/Projects/IOT-AGE/TE001/src/te001s.service /lib/systemd/system/ systemctl daemon-reload sudo systemctl enable te001s.service // 启用 sudo systemctl disable te001s.service // 停用 sudo systemctl status te001s.service // 查看状态43 rm 和 mv# 删除多个目录下的所有文件不包含.和.. rm -Rf minio/data[01]/* rm -Rf minio/data[01]/.[!.]* 等价于 rm -Rf minio/data0/* rm -Rf minio/data0/.[!.]* rm -Rf minio/data1/* rm -Rf minio/data1/.[!.]* # 移动(除了指定文件/目录)文件到其他目录 mv !(f1.zip|folder1|index.php) twzc021-api44 tree 列出目录结构L-层数tree ./target -d -L 245 nfs# 安装服务端 apt install -y nfs-kernel-server # 安装客户端 apt install -y nfs-common # 配置访问目录 mkdir -p /data0/nfs echo /data0/nfs *(rw,sync,no_subtree_check,no_root_squash) /etc/exports # 客户机挂载nfs服务器目录 mount master0.c0.k8s.ia:/data0/nfs /mnt/nfs # 卸载 umount -l /mnt/nfs #nfs相关命令: showmount -e localhost #显示已经 mount 到本机 nfs 目录的客户端机器 exportfs -rv #查看本机共享的文件或目录46 setfacl# ACL文件权限管理 apt install acl # Give the read-write-execute permissions to deployer user for directory /var/www setfacl -R -m u:deployer:rwx /var/www47 snapsnap find 应用程序名称查找可用于安装的 snap 应用程序。 snap install 应用程序名称安装 snap 应用程序。 snap refresh 应用程序名称更新 snap 应用程序到最新版本。 snap remove 应用程序名称卸载已安装的 snap 应用程序。 snap info 应用程序名称查看 snap 应用程序的详细信息。 snap list列出所有已安装的 snap 应用程序。 snap changes查看系统中最近的 snap 更改操作。 snap revert 应用程序名称还原 snap 应用程序到上一个版本。 snap disable 应用程序名称禁用 snap 应用程序并停止其自动更新。 snap enable 应用程序名称启用已禁用的 snap 应用程序。48 Ubuntu22.04下磁盘扩容# 先用parted工具 parted (parted) print (parted) resizepart Partition number? 3 Yes/No? yes End? [2551MB]? 500G (parted) quit # 调整一个卷组中的物理卷的大小 pvresize /dev/sda3 # 查看物理卷容量 pvs # 调整逻辑卷大小 lvresize --resizefs -l 100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv49 宝塔相关# Setup if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh # nginx 站点/代理配置路径 /www/server/panel/vhost/nginx # 证书路径 /www/server/panel/vhost/cert/ # 计划任务相关, 注意服务器上是否UTC时间做时差修正 apt-get install cron systemctl start cron systemctl enable cron service cron status50 pdf生成工具wkhtmltopdfapt install wkhtmltopdf wkhtmltopdf --version wkhtmltopdf www.baidu.com baidu.pdf # 参考链接: https://blog.csdn.net/qq_25647857/article/details/13824821451 fsck 检查/修复文件系统# 查看挂载盘符 blkid # 检查修复问题盘 fsck -t ext4 /dev/mapper/ubuntu--vg-ubuntu--lv # 完成后退出 exit52 rsync 文件同步# 同步远程文件到本地指定目录 echo password /etc/rsyncd.pas; chmod 600 /etc/rsyncd.pas rsync -avz --progress --portxxx --password-file/etc/rsyncd.pas usernameip::data_folder /data0/backup # 密钥方式 rsync -avz --progress -e ssh -i /home/ben/.ssh/id_rsa ben{target_ip}:/data0/Projects/zx-ai01-training/common/gguf/ /data0/Projects/zx-ai01-training/common/gguf/53 time 脚本性能测试# 例子 /bin/time -v -p /usr/bin/php think xxx 0 User time (seconds): 2.23 # 使用者模式所花费的时间 System time (seconds): 1.65 # 内核模式所花费的时间 Percent of CPU this job got: 5% # CPU占比 Elapsed (wall clock) time (h:mm:ss or m:ss): 1:10.80 # 花费的时间 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 # 占用私有堆栈平均大小 Average total size (kbytes): 0 Maximum resident set size (kbytes): 69696 # 峰值内存 Average resident set size (kbytes): 0 # 内存平均值 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 2879 Voluntary context switches: 274544 # 此程序自愿中断I/O 执行完毕磁碟读取完成等的次数 Involuntary context switches: 77 # 此程序被强迫中断如 CPU 时间耗尽的次数 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 054 jmeter 压测工具# 安装jdk sudo apt install openjdk-11-jre-headless java -version 后会输出版本信息即验证安装成功。 # 下载 wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.zip unzip apache-jmeter5.6.3.zip 解压到当前文件夹。 # 添加命令路径 vi $HOME/.bashrc 最末添加 export PATH$PATH:$HOME/apache-jmeter-5.6.3/bin source $HOME/.bashrc # 非GUI下执行测试计划结果输出t1.jtl并输出html报告 jmeter -n -t t1.jmx -l ./result/t1.jtl -e -o ./html55 ansible 运维工具Ansible 运维工具-CSDN博客56 持久化指定DNS# 编辑 /etc/systemd/resolved.conf # 指定DNS [Resolve] DNS172.16.20.40 # 重启服务DNS持久化 systemctl restart systemd-resolved.service57 openssl# 生成随机密钥 openssl rand -hex 32 # 创建证书 openssl req -newkey rsa:4096 -nodes -sha256 \ -keyout domain.key -x509 -days 365 -out domain.crt # 生成私钥 openssl genrsa -out mykey.pem 2048 # 生成公钥 openssl rsa -in mykey.pem -pubout -out public.pem # Base64 编码 echo Hello World | openssl base64 # Base64 解码 echo SGVsbG8gV29ybGQK | openssl base64 -d.pem最常用的证书文件格式用于存储公钥、私钥或证书链。.crt/.cer证书文件通常包含公钥和证书信息。.key私钥文件通常用于与 .crt 文件配对。.pfx包含证书链和私钥通常用于 Windows 系统。58 强制复制cp即使有alias cpcp -i# cp前加上 \ \cp -rf vendor_new/* vendor59 ip addr# 安装 iproute2 包 apt install iproute2 # 查看网络接口 ip addr # 查看路由表 ip route show # 添加默认路由 ip route add 0.0.0.0/0 via 172.31.31.25360 grep# 监听查询适配多个端口 netstat -anptl|grep -E 9090|909361 supervisor 要点# 配置目录 /etc/supervisor/conf.d/ # 配置模板 [program:myprogram] command/path/to/your/application autostarttrue autorestarttrue stderr_logfile/var/log/myprogram.err.log stdout_logfile/var/log/myprogram.out.log # 命令 supervisorctl reread supervisorctl update supervisorctl status supervisorctl status myprogram supervisorctl stop myprogram supervisorctl restart myprogram62 htop是top命令的增强版本功能强大的交互式进程查看器# 每隔5秒刷新一次 htop -d 5 # 输出刷新5次后退出 htop -n 5 # 监控用户a1的进程 htop -u a163 xargs用于从标准输入构建并执行命令行通常与其他命令如 find、grep 等结合使用将输入数据转换为命令行参数。# 查找当前目录下的 .txt 文件并删除 find . -name *.txt | xargs rm # 使用 xargs 和 gzip 并行压缩文件 find . -name *.log | xargs -n 1 --max-procs4 gzip64 traceroute一个网络诊断工具用于跟踪数据包从源主机到目标主机之间经过的路由# traceroute 192.168.2.70 traceroute to 192.168.2.70 (192.168.2.70), 30 hops max, 60 byte packets 1 192.168.9.1 (192.168.9.1) 0.157 ms 0.093 ms 0.125 ms 2 172.16.0.7 (172.16.0.7) 0.170 ms 0.180 ms 0.148 ms 3 192.168.2.70 (192.168.2.70) 0.277 ms 0.286 ms 0.248 ms65 update-alternativesdpkg的实用工具用来维护系统命令的符号链接以决定系统默认使用什么命令。# 显示当前有哪些版本php update-alternatives --list php /usr/bin/php7.4 /usr/bin/php8.2 # 加入版本, –install 链接 名称 路径 优先级 update-alternatives --install /usr/bin/php php /usr/bin/php7.4 1 # 选择配置 update-alternatives --config php # 设置默认 PHP 版本 update-alternatives --set php /usr/bin/php7.466 sshssh -p9822 -i /{path}/id_rsa root{ip}67 awk# 统计每个IP的访问次数然后按访问次数降序排序并使用head -n 20来只显示前20条记录 awk {counts[$1]} END {for (ip in counts) print counts[ip], ip} access.log | sort -k1,1nr | head -n 20 # 使用awk命令来提取每个请求的IP地址并使用uniq -c来计数每个IP地址的访问次数 awk {print $1} access.log | sort | uniq -c | sort -nr