linux的用户和组
UID和GID linux中每个用户都有一个UID和GID,且linux只认UID,用户名只是方便用户记忆而已,用户名和UID的关系有点像域名和ip的关系。 每个用户创建后默认会创建一个与用户名同名的组,并分配一个GID。 用户的UID和GID可以在 /etc/passwd 文件中查看到: 需要注意的是,密码拦全部为 X,这是历史遗留,早期密码确实存在这里, …
Section
UID和GID linux中每个用户都有一个UID和GID,且linux只认UID,用户名只是方便用户记忆而已,用户名和UID的关系有点像域名和ip的关系。 每个用户创建后默认会创建一个与用户名同名的组,并分配一个GID。 用户的UID和GID可以在 /etc/passwd 文件中查看到: 需要注意的是,密码拦全部为 X,这是历史遗留,早期密码确实存在这里, …
MBR MBR(Master Boot Record)是一种用于处理开机管理程序(bootloader)和分区表的一种方式,它规定磁盘的第一个扇区存放两个东西:bootloader和分区表 bootloader用于作为系统启动的引导程序,它会认识磁盘内的文件系统格式,因此可以读取系统的核心文件并执行。而分区表则用于指定磁盘分区如何划分的 MBR有很多缺点,例 …
linux下的文件有rwx权限好理解,但目录的rwx权限如何理解呢? 你可以这样理解,目录也是一个文件,文件的内容就是目录中所有的文件名 当一个目录具有r权限时,你就可以ls该目录,查看该目录下有哪些文件,效果等同于cat查看一个文件的具体内容。 当一个目录具有w权限时,你就可以在该目录下创建新的文件或删除里面的文件 当一个目录具有x权限时,你就可以进入到该 …
例如国内使用默认channel安装pytorch比较困难,很容易网络连接超时,所以需要写一个脚本不断重试,记录一下刚写的一个简单脚本 #!/bin/bash while true;do python -m pip install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 …
这两者都只有在修改外部作用域变量时才需要,如果只是读取就不用 首先需要区分python中的全局变量和局部变量 全局变量是在函数外定义的变量,即所有定义在def中的变量都不是全局变量,即使是嵌套函数外层函数中定义的变量 相反,定义在函数内部的变量即为局部变量,即使闭包嵌套再多层,也都是局部变量。 如果要在函数中 修改 全局变量(即将原本的引用指向一个新的引用地 …
连接状态 tcp本身就是长连接+全双工的,什么意思呢?就是tcp连接一旦建立,就会一直维持连接状态,这个状态下,服务端和客户端是可以同时发送和接收数据的。注意是同时,也就是说发送的同时也能接收,它们是两块独立的缓冲区。下面是python代码,服务端和客户端建立连接后,就启用两个线程,一个用于读数据,一个用于发数据。 # server.py import …
当容器较少的时候,可以使用docker进行手动管理,但是如果容器很多,每个容器为了容灾还有很多副本以集群方式运行,并且各个容器集群之间有错综复杂的通信连接,那么此时就能使用k8s进行管理了。 它可以根据你的配置,自动维护集群和系统的稳定,例如当集群中的一个容器副本下线后,它会根据配置立即重新创建一个容器顶上。它可以将一个集群统一暴露成一个ip,再由内部的负载 …
代码从commit init处分为了两个分支,branch1和branch2,它们上面分别有各自的commit,c1、c2 和 c3、c4 此时切换到 branch1 处,并执行 git rebase branch2 就会这样: 大概就是:将要rebase分支上的提交作为当前分支的基,然后将当前分支上的提交都生成一个新的提交建立在新的基上。所以rebase被 …
图来源:https://blog.osteele.com/2008/05/my-git-workflow/ git中有一棵树、两个区、两类指针 一棵树:版本树,它将代码的每个版本打包串起来,某些版本可能会有分支,他们就共同构成一棵树 两个区:工作区和暂存区 工作区:就是你当前项目目录 暂存区:版本树是一个大仓库,但我并不希望每次代码改动都做成一个版本提交到 …
LEGB法则 python变量的作用域遵从LEGB法则,即: Local(L):定义在方法或类内部的变量,如 def 或 lambda 函数内部 Enclosed(E):闭包内部变量(仅限闭包) Global(G):全局变量 Built-in(B):python内置的关键字 对任意一个变量,python会按照上述顺序依次查找 这意味着python中有且仅有这 …