Linux下xargs的基本用法

背景需求 遇到一个需要使用scp/rsync向远端传送当前文件夹下前n个文件的需求,若要一个一个的手输也不是不行,但总感觉有一些蠢 解决方案 xargs功能强大 xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。 xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。 xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。 xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。 详解 首先是要拿到该文件夹下的前n个文件 ls | head -100 利用rsync向远端传输文件 rsync -avzP <file_names> user@remote 使用xargs省去手动输入文件列表 ls | head -100 |xargs -i rsync -avzP {} user@remote 注意事项 args 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。 xargs 一般是和管道一起使用。
Read more →

Treafik反代保姆级急速上手

需求场景 所有需要反代的场景 服务器上部署了太多的docker、frp映射等服务,每个服务都占用着各自的端口,多的以至于为了记忆这些服务端口我专门要维护一个记事本… 什么是Treafik Traefik是一个开源的可以使得服务发布变得轻松有趣的 边缘路由器。它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理 Treafik可以自适应并动态自动发现你添加的所有服务、容器等等 Treafik适配了当前主流的所有服务技术(docker, k8s…),这意味着你可以一次配置,终生动态,非常适合我这种懒人… 正式使用 概念 这里用最直白的语言介绍traefik配置中的几个概念,对后边直接上手写配置有一定帮助,建议阅读 静态配置 Traefik初始启动时会读取的配置文件,该配置仅读取一次,后面更改需要重启服务 主要包括 全局配置项(Global) 日志配置项(Log) 入口点(Entrypoints) 安全证书(TLS) 提供者声明(Provider) 该文件对应docker中/etc/traefik/traefik.yaml 容器启动时Traefik会自动在/etc/traefik/目录下寻找traefik.toml/traefik.yaml/traefik.yml文件作为其静态配置 Traefik提供了共三种互斥的静态配置方式,另外两种请自行查阅文档 动态配置 基本等同于各个来源的Provider配置 主要需要编辑的是File Provider文件,该文件包含了所有的动态路由,Traefik会自动检测文件改动并动态发现、添加路由(Router)、服务(Service) 提供者/Providers 简而言之所谓的“提供者”就是告诉Traefik要去哪儿发现所有的路由规则及其对应的服务地址 该角色(Provider)的独立决定了Traefik天生即适应多入口、多平台的自动适应发现 本教程中将只会展示两种Provider的配置方式,其他更多的请查阅文档 入口点/EntryPoints 即Traefik对外暴露的端口,理想状态下也是整台服务器对外暴露的唯一端口 所有的网络请求通过该端口到达Traefik并由其接管后进行反代分流及负载均衡 可以开设多个入口点,一般为80+443 路由/Routers Traefik对外暴露的规则及其对内的具体服务路由规则 在这里定义Traefik所接受的域名、前缀、后缀、路径等等请求规则 在这里定义Traefik在接受到特定请求时该路由到的服务/Services 服务/Services 路由所要代理的具体服务地址 这里可以添加由Traefik管理的负载均衡,后面还可以添加亲和性等高阶使用,具体请查阅文档 开始/Let the Traefik Go 这里采用docker的方式启动,docker-compose以及手动部署等方式请自行查阅文档 Traefik主服务启动前 静态配置 静态配置需要在主服务启动之前完全确定下来并映射进容器/etc/traefik/中,主服务只会在启动、重启时读取一次,后续不再监控更改 文件名必须为traefik.yaml或traefik.tmol或traefik.yml 这里贴出我的配置,具体作用见配置项名或注释 ########################################### # # # Main Configuration File for Treafik # # By Chaos # # # ########################################### ## Global Config ## # --------------------------------------- # global: checkNewVersion: true sendAnonymousUsage: false # --------------------------------------- # ## Log Config ## # --------------------------------------- # log: # all the path is defined in the container # u need to map it outside filePath: "/etc/logs/run.
Read more →

windows下使用wsl2初体验

背景 尝试全面转向win作为主力开发系统,但是很多东西需要在linux下执行,wsl经历了一次技术路线的全面更新在网络上的反响也还是不错的。随机决定进行一下尝试 几点说明 本篇文章仅仅是小白从零开始进行wsl2配置,没有过wsl1的使用经验,里边的步骤也大多都是来自于万能的互联网 本篇文章不涉及深度使用的感受,后续体验之后有时间的话会再进行记录 概念 wsl全名windows subsystem for linux 开始安装 安装WSL2功能模块 该步骤下所有命令执行都在windows powershell(管理员模式)下 打开wsl功能模块 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 安装必要功能 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 重启电脑,完成安装(重要,我被卡在这里很久) 设置内核安装默认为wsl2 powershell(管理员)执行wsl --set-default-version 2 这里正常的话是可以正常执行的,如果提示类似于需要升级wsl内核之类的信息的话,就需要手动更新一下wsl内核: 下载地址 下载完成双击打开一路下一步即可,无其他可选项 安装linux子系统 打开windows应用商店,搜索关键字linux 下载安装想要使用的linux发行版,等待安装完成 开始菜单启动一次刚刚安装的发行版,耐心等待安装完成 配置 以下配置以本人安装的Debain为例,步骤差不多,有一些命令可能会不一样 换源 用预设源进行apt-get update,切记不能先换源,否则会出现错误 安装必要软件apt-get install ca-certificates 备份原源列表cp /etc/apt/sources.list /etc/apt/sources.list.backup 编辑源列表nano /etc/apt/sources.list 将源列表内容替换为下列内容 deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free # deb-src [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb [trusted=yes] https://mirrors.
Read more →

不同Linux发行版添加新用户并设置权限

背景 由于一些需求,需要给服务器添加一个新用户并设置sudo权限 之前从未进行过该方面的学习,找到一个非常详细的博文,故记录一下 该随笔会保持更新,收录多种发行版下对用户账号的操作 Ubuntu 18.04 添加新用户 sudo useradd -r -m -s <新用户要使用的shell> <新用户名> 参数解析 -r 建立系统账号 -m 自动建立用户的登入目录/home/<user_name> -s 指定用户登入后使用的shell 设置密码 ubuntu新创建的用户不会自动提示设置密码 sudo passwd <user_name> 设置用户权限 使用修改/etc/sudoers文件的方式将新用户加入sudo列表 默认/etc/sudoers不可编辑,首先修改权限chmod +w /etc/sudoers 增加新用户 sudo nano /etc/sudoers # 适当位置添加 <uer_name> ALL=(ALL:ALL) ALL 保存生效 删除用户 执行删除命令sudo userdel <user_name> 删除用户目录sudo rm -rf /home/<user_name> 移除/etc/sudoers中关于<user_name>的权限设置,否则无法创建新的同名用户 参考 Ubuntu创建新用户的正确姿势 Debian 10.2 创建用户 sudo adduser <user_name> 执行完上述命令后,系统会提示设置该用户的密码、个人信息等 授权用户sudo 使用修改/etc/sudoers文件的方式将该用户加入sudo组以授权超级权限 授权sudoers文件可编辑sudo chmod +w /etc/sudoers 增加新用户 sudo nano /etc/sudoers # 适当位置添加 <uer_name> ALL=(ALL:ALL) ALL 保存生效 删除用户 deluser --remove-home <user_name>
Read more →

不同发行版安装NVIDIA-container-runtime

背景 NVIDIA-container-runtime是在docker容器中映射本机显卡必备的运行时 NVIDIA推出该工具之后搭配新版本的docker就不需要使用单独版本的docker启动支持显卡的容器 开始动手 添加安装源 官网比较难进,酌情查看 Debian-based distributions Debian/Ubuntu/… curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \ sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \ sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list sudo apt-get update RHEL-based distributions CentOS/Fedora/Oracle/… distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo | \ sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo 更新密钥 安装源来自于nvidia官网,可能会有些慢 Debian-based distributions curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \ sudo apt-key add - RHEL-based distributions DIST=$(sed -n 's/releasever=//p' /etc/yum.conf) DIST=${DIST:-$(. /etc/os-release; echo $VERSION_ID)} sudo rpm -e gpg-pubkey-f796ecb0 sudo gpg --homedir /var/lib/yum/repos/$(uname -m)/$DIST/nvidia-container-runtime/gpgdir --delete-key f796ecb0 安装 安装源来自于nvidia官网,可能会有些慢
Read more →