ubuntu终端(Linux) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 # 前端运行 python3 -m http.server 8080 # celery 重启消费者,在虚拟环境下 celery -A celery_tasks.main worker -l INFO # 编辑/etc/hosts文件,可以设置本地域名(访问不了网站时比如外网也在这里添加) sudo vim /etc/hosts 127.0.0.1 www.baidu.com # python虚拟环境的终端下,可以快速看见效果 python manage.py shell # 文件重命名 mv 旧名字 新名字 # 创建文件 touch 文件名 # 创建文件夹 mkdir 文件 # 删除文件 rm 文件 # 文件压缩和解压 压缩格式:tar -zcvf 压缩后的文件名 将要压缩的文件 解压格式:tar -xf 压缩后的文件名 查看解压:zcat 压缩后的文件名 unzip xxxxx.zip # scp传输工具 scp 要传输的文件 将本地文件推送到远程主机 scp udesk_local_deploy.zip webuser@139.159.135.194:/home/webuser # 文件备份 date [option] # 生成密钥对 ssh-keygen -t rsa -P "" -N "" # Linux查看某个端口是否在运行 netstat -anp|grep xxxx netstat -tnulp | grep xxxx sudo lsof -i:xxxx # 查看当前路径 pwd # 查看Linux内核版本 uname -r # 查看所有端口 ss -lntp # less 可以随意浏览文件,支持翻页和搜索,支持向上翻页和向下翻页。 ll -ql | less # 查看系统的数据库中的相关记录 getent # 查看文件内容 more 文件名 cat 文件名 tail 文件名 # 查看cpu信息概要 lscpu # 快速查询文件关键字符(后面的点是需要查找的目录) grep -rn "关键字符" . # 查看Ubuntu 18.04具体信息 lsb_release -a # 强制杀死进程 kill -9 PID # 查看网络是否连通 ping IP (端口) # 给root账号设置密码 sudo passwd root # 查看etcd进程 ps -elf | grep etcd # 查看端口是否打开(tcp) telnet 172.23.15.169 2380 # 查看端口是否打开(udp) nc -vuz 172.23.15.169 2380 # 查看端口策略 sudo iptables -n -L # Ubuntu下查看哪些端口是开放的,分别是什么进程在监听,也能看到pid sudo netstat -tlpn # 实时查看日志 tail -f kamailio.log # 查看本机公网IP curl myip.ipip.net/ # 修改文件夹用户,用户组 sudo chown -R jenkins:jenkins ./gen_svc.sh # 修改文件权限(读r:4,写w:2,执行x,1) sudo chmod -R 664 ./gen_svc.sh # 指定查找文件内容 sudo grep -r '#host_key_checking = False' ./site-packages/ # 按照名字查找文件 sudo find / -name ansible.cfg # 将admin base64 加密 echo -n admin | base64 # 将加密后的字符串解密 echo -n YWRtaW4= | base64 --decode # xz压缩 xz # 可以查看实时变化 watch '指令' # apt指令 apt-get purge #删除已安装的软件包(不保留配置文件),删除软件包,同时删除相应依赖软件包 apt-get remove #删除已安装的软件包(保留配置文件),不会删除依赖软件包,保留配置文件; # 全局替换文件内容 sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/apt/sources.list # 查看本机网卡 ip link # 查看本机定时任务 sudo crontab -l # 打出环境变量 env # 防火墙 ufw sudo ufw disable #关闭防火墙 # Linux一个发行版,预装了许多渗透测试软件 Kali # 查日志过滤查询到对应位置后,显示对应的上下文 grep —C5 # 查看当前文件属性( i 和 a 两个属性,说明此时的文件是被锁定的) lsattr authorized_keys # 修改属性 chattr -ia authorized_keys # 没有这个命令,安装这个工具 apt install e2fsprogs # 设置别名(编辑你本地的 .bash_profile 文件,我用的是 zsh,所以编辑的是 .zshrc 文件。) alias ali='ssh root@xxx.xxx.xxx.xxx' source .zshrc ali # 查看当前目录的大小 du -sh du -sh * | sort -hr | head -5 # 直接列出10层子目录内的所有文件和目录的大小 du -ah -d 10 # 将执行脚本的日志输出到文件内 bash deploy.sh > deploy.log 2>&1 # 二进制压缩文件upx,有时下好的包不好用可能是壳有问题 # 检查系统日志 sudo journalctl -u keepalived # 同步目录,先进入到要同步的目录下 rsync -avP 172.172.1.131:$(pwd)/ . # k8s外挂目录,容器内是文件权限是root,但是容器用户是普通用户 首先在容器内 id 用户名,取uid 在挂载的服务器执行chown -R uid:uid 文件夹即可 # 追踪进程 strace -p (PID) # 打开ps命令的手册页,提供对该命令更详细的解释和用法说明 man ps # tmux 是一个开源的终端复用器,它允许您在单个终端窗口中同时运行多个终端会话,并在它们之间进行切换。 tmux # 快速查找包含 "ds.kkww.com" 内容的文件的方法 grep -irl "ds.kkww.com" /
virtualenv基本操作(windows环境) 1 2 3 4 5 6 7 8 9 10 11 12 # 1、下载virtualenv pip install virtualenv # 2、创建一个virtualenv工作目录 mkdir myproject_env # 3、创建一个python项目 virtualenv venv # 4、启动virtualenv中的venv项目 1.cd venv\Scripts 2.activate # 5、关闭virtualenv # 需要在venv\Scripts内 deactivate
virtualenv基本操作(ubuntu环境) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 创建虚拟环境 mkvirtualenv 虚拟环境名字 # 虚拟环境使用命令: workon 虚拟环境名称 # 查看虚拟环境命令 workon 两次tab键 # 退出虚拟环境命令: deactivate # 删除虚拟环境命令: rmvirtualenv 虚拟环境命令 使用命令是先退出,再删除 # 在虚拟环境中安装包: 先进入虚拟环境中,然后使用pip install xxx, # 查看虚拟环境中安装的包: pip freeze
PIP 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # 创建虚拟环境 python3 -m venv gecko-cloud # 临时使用镜像源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requirements.txt # 全局设置镜像源地址 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 跳过安装错误的库,继续安装 while read requirement; do pip install $requirement; done < requirements.txt # 导出当前环境 pip freeze > requirements.txt # 使用pip 在线安装指定文件内的内容 pip install -r requirements.txt # 下载离线安装包放到名为packs的路径 pip download -d ./packs -r requirements.txt # 使用离线安装包,安装指定文件内的内容 pip install --no-index --find-links=./packs -r requirements.txt
windows终端 1 2 3 4 # 切换到D盘 d: # 前端运行 python -m http.server 8080
Django 1 2 3 4 5 6 7 8 # 创建工程 django-admin startproject 工程名字 # 在django中,创建子应用模块目录仍然可以通过命令来操作 python manage.py startapp 子应用名称 # 切换到apps路径内 django-admin startapp 子应用名称 # 创建管理员 python manage.py createsuperuser
前端WEB 1 2 # 在网页console里 vm.$data.access_token
MySQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #mysql登录 mysql -uroot -pmysql #从桌面导入大数据(直接把桌面文件移动到终端中就会自动生成路径) source /home/ubuntu/Desktop/areas.sql #修改密码(修改密码为:123456) update mysql.user set authentication_string=password('123456') where user='root' #重启mysql service mysql restart #展示数据库的创建指令并优化展示 show create tale 表名\G #查看数据库 show databases #应用数据库 use databases #查看表 show tables #查看表结构 desc 表名 #创建数据库指定utf8 CREATE DATABASE `udesk_odmg` CHARACTER SET utf8 COLLATE utf8_general_ci; #删除数据库 drop database express_delivery_dictionary; #查看建库时的语句 show create database udesk_xcc_cti; #查看表最后更新时间 show table status from udesk_proj like 'company_ticket_settings'\G # 查看所有用户 SELECT user, host FROM mysql.user; # 查看用户权限 SHOW GRANTS FOR 'kayak'@'%'; # 修改用户权限,(SELECT,INSERT,UPDATE,DELETE,CREATE)(database_name数据库名字也可以是*,全部) GRANT SELECT ON database_name.* TO 'kayak'@'%'; # 刷新权限缓存 FLUSH PRIVILEGES;
Redis 1 2 3 4 # 链接数据库 redis-cli # 切换数据库 select num
Sqlite 1 2 3 4 5 6 7 8 9 10 11 12 # 查看当前数据库所有表 .table # 查看当前数据库指定表 .tables table_name # 查看当前数据库所有表的建表(CREATE)语句 .schema # 查看指定数据表的建表语句 .schema table_name # 查看所有表结构及索引信息 select * from sqlite_master; # 查看指定表所有字段信息,类似于msyql:desc table_name pragma table_info ('table_name');
Nginx 1 2 3 4 5 6 # 开启|停止|重启 nginx systemctl start|stop|reload|... nginx # 重启nginx nginx -s reload # 检查默认配置文件 nginx -t
Uwsgi 1 2 3 4 5 6 7 8 9 10 11 # 启动uwsgi workon 虚拟环境 uwsgi --ini uwsgi.ini # 停止uwsgi uwsgi --stop uwsgi.pid # 重启uwsgi uwsgi --reload uwsgi.pid # 查看uwsgi进程 ps aux|grep uwsgi # 强制删除 kill -9 进程号
Docker 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 # 搜索 docker search [image_name] # 获取 docker pull [image_name:tag] # 查看 docker images <image_name> # 镜像重命名 docker tag [old_image]:[old_version] [new_image]:[new_version] # 删除 (加个-f表示强制删除) docker rmi [image_id/image_name:image_version] # 导出 docker save -o [包文件] [镜像] # 导入 docker load -i [image.tar_name] # 查看容器 docker ps docker container ls # 构建指定镜像 sudo docker build -t odmg:v1.0 . # 启动容器 (-d守护进程方式运行) docker run [参数] docker_image [执行的命令] docker run --network=host --name=web-01 -d odmg:v0.1 # 启动已创建/关闭正在运行容器 docker start/stop [container_id]/[container_name] # 删除容器 docker rm [container_id]/[container_name] docker container rm [container_id]/[container_name] # 进入正在运行的容器 docker exec [选项] 容器id/容器名 命令 # 退出正在运行的容器 exit # 基于容器创建镜像 docker commit -m '改动信息' -a "作者信息" container_id new_image:tag # 查看容器信息 docker inspect 容器id/容器名字 # 查看docker信息 sudo docker info # 查看容器的日志 docker logs 容器id/容器名字 # 数据卷 docker run -itd --name 容器名字 -v 宿主机目录:容器目录 镜像名称 # 网络指定随机端口映射 docker run -d -P 镜像名称 # 网络指定主机,注定端口映射 docker run -d -p 宿主机ip:宿主机端口:容器端口 --name 容器名字 镜像名称 # 使用docker build命令进行镜像构建 docker build [选项] <上下文路径/URL/-> # 进入docker镜像 sudo docker run -it --rm udesk_openresty:2.0.2 bash # 以后台方式运行 docker run -d # 查看docker网络 docker network ls # 热加载方式连接容器内 docker exec -it dokcerid 指令 bash eg:docker exec -it d55b807ee4d5 nginx -t bash # 删除所有容器 sudo docker rm $(sudo docker ps -a -q) # 查看docker详情 docker inspect docker_name # 将容器打成镜像 docker commit 0e69cabd24c8 registry.cn-beijing.aliyuncs.com/udesk-deploy/jenkins:v1.0 # 将镜像打成包 docker save -o jenkins.tar registry.cn-beijing.aliyuncs.com/udesk-deploy/jenkins:v1.0 # 导入文件生成镜像 docker load < jenkins.tar # 查看docker资源使用情况 docker stats # 清理不在使用的镜像 docker system prune # 清除为none的镜像 docker rmi -f $(docker images| grep none | awk '{print $3}') # CRI(Container Runtime Interface)兼容的容器运行时工具 crictl ps crictl stats
crictl crictl
和 docker
显示的镜像列表可能不同,因为它们使用不同的容器运行时和镜像存储位置。docker
通常使用 containerd
或 dockerd
作为运行时,而 crictl
使用 cri-o
或 containerd
作为运行时接口。因此,镜像的存储位置和显示方式可能会有所不同。
1 2 3 4 5 6 7 8 9 # 获取镜像 ID crictl images # 使用 ctr 工具导出镜像(假设 containerd 是运行时) sudo ctr --namespace k8s.io images export my-image.tar docker.io/library/my-image:latest # 使用 ctr 工具导入镜像 sudo ctr --namespace k8s.io images import /home/user/my-image.tar # 如果自定义了的k3s路径,则使用自定义下的ctr和crictl,否则查不到数据靠 k3s/data/xxxx/bin/crictl k3s/data/xxxx/bin/ctr
vim 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 非编辑模式下,dd直接删除一行 zz 让光标所在的行居屏幕中央 zt 让光标所在的行居屏幕最上一行 t=top zb 让光标所在的行居屏幕最下一行 b=bottom # 整页翻页 ctrl-f ctrl-b # 翻半页 ctrl-d ctlr-u # 将整个文件的所有a替换为b :%s/a/b/g # 解决粘贴乱序问题 :set paste # 快速到一行的首字母 ^ # 快速到一行的最后一个字母 $
Git 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 # 查看当前分支 git branch # 创建分支 git checkout -b 分支名 # 切换分支 git checkout # 合并r分支到主枝上 git merge 分支名 # 列出标签 git tag # 可以看到标签信息和与之对应的提交信息 git show # 创建标签 git tag -a 标签名 # 查看git记录 tig # rebase合成一个commit tig查看先,然后选择master的commit id退出 git rebase -i commit id(e35d42a8e77874602df99022266572e52b66bcf4) 再tig,把除了第一个剩下所有的第一个单词改成f,保存(ctrl + o, enter, ctrl + x)退出,强推 git push --force # 提交了错误的内容后进行回退 git reset # 跟踪分支 git branch --set-upstream-to=origin/s5_master s5_master # 中止并返回到git rebase之前的状态 git rebase --abort # 强指向上一个git(然后再git pull) git reset --hard # 将本地已修改的先存起来(然后就可以git pull 了) git stash # 还原 git stash pop # 先rebase master -> nbi-es 再 merge nbi-es -> master git reset --hard origin/master #先同步远端master git checkout nbi-es git rebase master #开始解决冲突 git add . git rebase --continue git push --force #结束 # 修改commit描述 git commit --amend # 如果修改的文件有问题 git reset f1976a0afebb6cdae6fc5578e5c8915c17c6b805 #先指回到修改之前 git add . git commit -m "nbi add es" git push --force # 删除已跟踪的文件夹或文件 git rm -r --cached dir1
mkdocs
Rails 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # 创建工程 rails new 工程名 # 启动工程 rails server # 告诉控制器生成器创建一个包含“index”动作的“Welcome”控制器 rails generate controller Welcome index # 新建模型 rails generate model Article title:string text:text # 运行迁移 rails db:migrate # 指定运行环境执行迁移(在当前项目的根目录下) RAILS_ENV=production bundle exec rake db:migrate # 终端运行rails环境 rails console(rails c) # 创建数据库(报错看Bug集合) rake db:create # 查看全部命令 rake -T # 创建model rails g model 名字 # cap 部署rails服务cap production deploy # 线上进入rails环境 bundle exec rails c -e production
ssh 1 2 # ubuntu建立ssh连接(~/.ssh/config文件内配置好) 本机公钥要加到目标服务器才能无密码连接 ssh bj-oss-rd
ansible 1 2 # 查看command 模块说明 ansible-doc -s command
K8s 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 # busybox,多用途工具 # 查看集群信息 kubectl cluster-info # 查看所有支持的api kubectl api-versions # 查看全部节点 kubectl get nodes # kubeadm 初始化时会拉取一些 docker 镜像,查看fmd要的镜像列表 kubeadm config images list # 查看所有namespace信息 kubectl get all --namespace kube-system # 查看版本 kubectl version # 查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间 kubectl get pod kubectl get pod -n kube # 执行完的容器退出后可查看 kubectl get pod --show-all # 查看 RC 和 service 列表, -o wide 查看详细信息 kubectl get rc,svc kubectl get pod,svc -o wide kubectl get pod -o yaml # 显示 Node 的详细信息 kubectl describe node 192.168.0.212 # 显示 Pod 的详细信息, 特别是查看 pod 无法创建的时候的日志 kubectl describe pod eg: kubectl describe pod redis-master-tqds9 # 根据 yaml 创建资源, apply 可以重复执行,create 不行 kubectl create -f pod.yaml kubectl apply -f pod.yaml # 基于 pod.yaml 定义的名称删除 pod kubectl delete -f pod.yaml # 删除所有包含某个 label 的pod 和 service kubectl delete pod,svc -l name= # 删除所有 Pod kubectl delete pod --all # 查看 endpoint 列表 kubectl get endpoints # 执行 pod 的 date 命令 kubectl exec – date kubectl exec – bash kubectl exec – ping 10.24.51.9 # 通过bash获得 pod 中某个容器的TTY,相当于登录容器 kubectl exec -it -c – bash eg: kubectl exec -it redis-master-cln81 – bash # 查看容器的日志 kubectl logs kubectl logs -f # 实时查看日志 kubectl logs podID containerName #当一个pod内有两个容器时,查看某个容器的日志 # 获取该 Pod 的指标数据 kubectl top pod memory-demo --namespace=mem-example # 监控 curl localhost:8080/prometheus # 重启 curl localhost:8080/health # 指定k8s配置文件 kubectl --kubeconfig='/opt/tools/.kube/config' get deploy -n proj-kg-prod -o wide # 进入容器内部(pod) kubectl exec -it pod名字 -n 命名空间 -- sh # 给node节点添加label kubectl label node k8s-node1 disktype=ssd # 给node节点删除label kubectl label node k8s-node1 disktype- # 查看节点的label kubectl get node --show-labels # 编辑yaml文件,Kubernetes 集群中每个当前运行的资源都可以通过 kubectl edit 查看其配置和运行状态 kubectl edit daemonset kube-proxy --namespace=kube-system # 将除了redis的pod scale为0 kubectl -n proj-cs-preview get deploy | grep -v redis |awk '{print $1}' | xargs kubectl -n proj-cs-preview scale --replicas=0 deploy kubectl get deploy | grep 1/1 | awk '{print $1}' | xargs kubectl rollout restart deploy # 强制删除状态为Terminating的pod kubectl get po | grep Terminating | awk '{print $1}' | xargs kubectl delete po --force --grace-period=0 # 查看 revison 历史记录 kubectl rollout history deployment httpd # 回滚到某个版本,比如 revision 1 kubectl rollout undo deployment httpd --to-revision=1 # 用 Liveness 探测判断容器是否需要重启以实现自愈;用 Readiness 探测判断容器是否已经准备好对外提供服务 # service域名解析 <servicename>.<namespace>.svc.<clusterdomain> # clusterdomain信息 svc.cluster.local #默认 awk '1 ~ /search/ { print2 }' /etc/resolv.conf 或 awk '/search/{print $2}' /etc/resolv.conf 或 kubectl get configmap -n kube-system coredns -o jsonpath='{.data.Corefile}' 在in-addr.arpa前 # yaml没问题就是pod不显示可能是sa的问题,查看所使用的sa是否存在 # 不进入pod查看pod内文件内容 kubectl exec busybox -- cat /etc/resolv.conf # 可以快速查看出所有pod哪些使用了名为noa-config configmap。其他同理 kubectl get pods --all-namespaces -o jsonpath='{range.items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{.spec.containers[*].env[*].name}{"\t"}{.spec.containers[*].env[*].valueFrom.configMapKeyRef.name}{"\n"}{end}' | grep <config-map-name> # 删除所有状态不是Running的pod kubectl delete pod --field-selector=status.phase!=Running --force --grace-period 0 -A # 查看所有pod使用的pvc是什么 kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.volumes[*].persistentVolumeClaim.claimName}{"\n"}{end}'
asdf 1 2 3 4 5 6 7 8 # 增加python插件 asdf plugin-add python # 列出python版本 asdf list-all python # 下载对应版本 asdf install python 2.7.18 # 全局使用版本 asdf global python 2.7.18
Helm 1 2 3 4 5 6 # 检测chart的语法,报告错误以及给出建议。 helm lint chartName # 调试,模拟安装 chart,并输出每个模板生成的 YAML 内容 helm install --dry-run --debug chartName # 将chart打包 helm package chartName
Aerich(fastapi数据库迁移工具) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # 安装 pip install aerich # 新建数据库配置文件 TORTOISE_ORM = { "connections": {"default": "mysql://root:123456@127.0.0.1:3306/test"}, #"connections": {"default": "postgres://postgres:postgres@172.23.6.11:5432/postgres"}, #"connections": {"default": "sqlite:///data/zsy/project/gecko_physical/file/gecko.db"}, "apps": { "models": { "models": ["tests.models", "aerich.models"], "default_connection": "default", }, }, } # 初始化配置文件和设置 aerich init -t aerich_config.TORTOISE_ORM # 初始化数据库 aerich init-db # 更新并进行迁移 aerich migrate --name 'drop_column' # 升级数据库 aerich upgrade # 降级数据库到某个版本 aerich downgrade # 显示迁移历史 aerich history # 显示迁移的磁头 aerich heads
Go 1 2 3 4 5 6 7 8 # go mod初始化 go mod init gee # go 安装依赖 go install google.golang.org/protobuf # vscode 直接运行debug 会下载dlv,就可以执行debug了,没有设置配置文件 # vscode go debug只能断点跳动而不能执行下一步, 简单的可以实现下一步跳转, # 更新依赖 go mod tidy
rsync 1 2 3 4 5 6 # 同步相同路径下的文件 rsync -avP 172.172.1.131:$(pwd)/ . # 同步文件、文件夹 rsync -avP 源文件 目标文件 # 完全同步,多出来的临时文件都会被删除 rsync -avuP --delete src/ dist/
其他 1 2 # https证书过期,页面显示未连接,有潜在风险 你点击这个页面 盲打 thisisunsafe 就可以了
文件系统 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 nfs需要启动systemctl start nfs-server 还要设置 /etc/exports << /nfs *(insecure,rw,no_root_squash,sync) 再设置 /etc/fstab << /dev/vdb /nfs xfs defaults,nofail 0 0 # exports # /etc/exports: the access control list for filesystems which may be exported # to NFS clients. See exports(5). # # /srv/homes hostname1(rw,sync ,no_subtree_check) hostname2(ro,async,no_subtree_check) # # /srv/nfs4 gss/krb5i(rw,sync ,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync ,no_subtree_check) # /shared/data 192.168.1.0/24(rw,sync,no_root_squash) /backups host1.example.com(rw) host2.example.com(ro) /usr/local *.local.net(rw,no_root_squash) /home @trusted(rw,sync) 1. /shared/data: 表示共享的目录路径。 2. 192.168.1.0/24: 表示允许 192.168.1.0/24 网段内的所有主机访问该共享目录。 3. (rw,sync,no_root_squash): 表示读写权限、同步写入、以及不需要将远程用户映射为 nobody 用户。 4. /backups: 表示另一个共享目录。 5. host1.example.com(rw): 表示允许 host1.example.com 主机以读写方式访问该共享目录。 6. host2.example.com(ro): 表示允许 host2.example.com 主机以只读方式访问该共享目录。 7. /usr/local: 表示另一个共享目录。 8. *.local.net(rw,no_root_squash): 表示允许 local.net 域内的所有主机以读写方式访问该共享目录,并且不需要将远程用户映射为 nobody 用户。 9. /home: 表示另一个共享目录。 10. @trusted(rw,sync): 表示允许 trusted 组内的所有主机以读写方式访问该共享目录,并且同步写入。 修改 /etc/exports 文件后,需要重启 NFS 服务才能生效。通常使用 systemctl restart nfs 命令来重启 NFS 服务。 # 挂盘流程: mkfs.xfs /dev/vdb mkdir -p /data echo "/dev/vdb /data xfs defaults,nofail 0 0" >> /etc/fstab mount -a # 查看挂载的盘 ll /dev | grep disk # 初始化这个盘(xfs) mkfs.xfs /dev/vdb # 挂载磁盘 mount -a # 卸载磁盘(要停掉所有连接,包括nfs-server) umount /nfs # 查看文件系统是什么类型的 blkid # ext4修改磁盘挂载大小 ext4 resize2fs /dev/vdb # xfs修改磁盘挂载大小 xfs xfs_growfs /dev/vdb