29期第十六周笔记

    技术2026-08-29  7

    Week 16

    本周学习主要内容包括上周内容补充知识,Linux系统历史操作及安装

    补充知识

    tracemalloc

    标准库tracemalloc可以用作统计内存使用情况下例中得出结论:字典比较占用空间 import tracemalloc tracemalloc.start() #开始追踪内存分配 count = 1000000 x = [dict(zip('xy',(4,5))) for i in range(count)] #一个列表,列表中放了若干字典 237 MiB 空间换时间 y = [tuple(zip('xy',(4,5))) for i in range(count)] #容器中放了若元组 191 MiB #如果内容不变,选择元组,减少内存 snapshot = tracemalloc.take_snapshot() #快照,当前内存分配 top_stats = snapshot.statistics('lineno') for stat in top_stats: print(stat)

    __slots__

    为了解决字典占用过多空间,提供了 __slots__方法把属性字典__dict__省掉 class A: X = 'MN' __slots__ = 'x','y' #类属性,控制实例的属性;如果提供了该类属性,则实例字典默认取消 # __slots__ = ['x','y'] # __slots__ = ('x','y') #元组 # __slots__ = 'y' def __init__(self): self.x = 4 self.y = 5 #y属性赋值,不允许了 def show(self): print(self.X,self.y) a = A() print(a.x,a.y) print(a.__dict__) #{'x':4,'y':5} ## 运行结果: 4 5 --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-1-16a45a406294> in <module> 15 a = A() 16 print(a.x,a.y) ---> 17 print(a.__dict__) #{'x':4,'y':5} AttributeError: 'A' object has no attribute '__dict__' __slots__告诉解释器,实例的属性都叫什么,一般来说,既然要节约内存最好还是使用元组一旦提供__slots__,就阻止了实例产生__dict__来保存实例的属性此时实例不可以动态增加属性了(但类属性不受影响)__slots__不影响子类实例,不会继承下去,除非子里面自己也定义了__slots__

    操作系统

    由来

    job:个人编写的程序(汇编、Fortran)批处理系统:为了不让计算机限制,将多人提交的作业收集到一起,比如输入到磁带上,在计算机上运行一个特殊程序(监控程序),可以读取一个Job并执行将结果输出到另一个磁带上,再从输入磁带上再次读取下一个作业,这个特殊程序叫批处理系统(batch system)为更有效地利用计算机,解决IO操作等待问题,出现了多道程序,他将内存划分为多个独立空间,每个作业独占一个(一个作业IO操作另一个作业运行)。如果存储多个作业在某作业IO时,通过调度程序进行调度来切换作业,就总有作业在运行,使得CPU利用更有效为了使得大量用户可以同时使用计算机,出现了分时系统(Time sharing),之后出现MULTICS多用户系统,有进程管理

    UNIX历史

    名称由来:删减版的MULTICS,Ken Thompson简单编写Dennis Ritchie加入,以B语言为基础发明了C语言,并用C语言重写了Unix操作系统

    Linux历史

    荷兰教授为了方便教学,将庞大复杂的UNIX最简化写出MINIX,该系统采取微内核设计,只提供最基本最少的功能,使系统可靠高效芬兰学生借鉴Minix很多思想,但舍弃了Minix的微内核,将整个操作系统功能都包含在内核中,编写了一个类Unix系统,即LinuxLinux使用了GPL许可,用户可以自由使用、复制、修改、传播源代码和二进制代码,但以Linux内核为基础开发的产品不能之一二进制形式出售和分发,必须将源代码一并发出,要么可以随意索取源代码

    Linux发行版

    两大主要阵营:Redhat(红帽)和Debian 红帽系有RHEL(RedHat Enterprise Linux)、Centos(社区版)、Fedora(桌面版),国内用户极多Debian也是很早的Linux分发版,基于他的发行版Ubuntu是广受欢迎的桌面系统 Android也是Linux的发行版发行版使用不同的Linux内核版本

    概念

    操作系统OS(Operation System),是特殊的计算机程序,他管理计算机硬件,并提供一个人机交互界面,供用户更方便的使用计算机资源

    ABI:Application Binary Interface 描述了应用程序和OS之间的底层接口,规定了数据类型大小、布局、对齐、规定了函数调用约定,以及目标文件二进制格式等,使得编译好的程序可以在兼容ABI环境中都可以直接运行API:Application Programming Interface 应用程序定义的面向开发人员的编程接口,不需要了解内部工作机制,就可以通过其API函数来使用其功能

    文件系统

    磁盘有多片盘片和一组磁头组成,盘片被划分出同心圆磁道,多个盘片的同磁道构成柱面,磁道上每512字节划分为扇区,数据都存储在扇片上主分区:主分区可以有多个扩展分区:为了能分出更多分区,但不想多占分区数,可以划分扩展分区,他站一个分区数。扩展分区不能直接存数据,他就是为了在里面在划分分区,一块硬盘只能拥有一个扩展分区逻辑分区:在扩展分区中分的分区文件系统格式:FAT、NTFS、ext2、ext3、ext4文件系统中可以存储很多数据,这些数据被组织成文件,但文件很多,有提供了目录,目录可以包含子目录和文件文件系统构建了一棵倒置的树来描述文件的组织结构,从根开始,根一般用/表示

    File System Hierarchy(FSH,Linux文件系统)

    目录说明/根目录,FSH从此开始/boot启动相关文件/bin所有用户使用的基本命令,不能关联独立分区,OS用到/sbin基本管理类命令,不能关联独立分区,OS用到/etc系统配置/lib共享库、内核模块/usr全局共享只读文件/usr/local第三方软件/usr/bin非启动的命令/usr/sbin非启动的命令/rootroot用户家目录/home/USERNAME普通用户家目录/opt第三方软件和配置/tmp临时文件/var可变文件/var/run运行时文件/var/cache应用程序缓存文件/var/log日志(可能很大)/dev设备目录/mnt文件系统挂载点/media可移动设备挂载点/proc内核、进程相关信息的虚拟文件系统/sys当前系统硬件相关信息的虚拟文件系统 在Windows下需要把分区映射成为逻辑驱动器(盘符),每个盘符都有自己的根,Win系统可以使用\表示根,路径分隔符默认是\,但也可以识别/Linux必须把所有分区挂在mount到文件系统的目录上,就是建立分区和目录的映射关系特殊目录: . 指当前目录… 指上一级目录 bash中~波浪线 代表当前用户家目录Windows文件名不区分大小写Linux文件名区分大小写,最长255字节,包括路径在内文件名称最长4095字节,文件名可以使用斜杠和null之外的所有字符

    Linux操作系统

    建立虚拟机及基础设置

    虚拟机中操作:

    ip a:(a代表address,即ip地址)查看网络配置,无ip地址不能通信,需要手动分配ip地址,对所有server进行静态分配(不要用动态),靠DHCP完成 网关(Gateway ip):192.168.233.2 (不要随便更改使用!!!) ping 192.168.233.128:测试是否可以ping通,通即可以通信(按ctrl+c中止运行)cd /etc/sysconfig/network-scripts/ (查看目录) ls

    接入Xshell:

    nmcli nmcli --help nmcli c --help 或 nmcli c helpnmcli c show:显示NAME UUID TYPE DEVICEnmcli c modify (填入UUID)ipv4.dns 114.114.114.114cd /etc/sysconfig/network-scripts/ ==> ifcfg-Wired_connection_1(tab补全)cat ifcfg-Wired_connection_1(查看目录) 服务器一般不重启!!Centos7中可以使用(Cnetos8已取消):systemctl restart network Centos8:nmcli c reload回到并查看家目录:cd~ + pwdalias cdif=“cd /etc/sysconfig/network-scripts/” cdif pwdmv ifcfg-Wired_connection_1 ifcfg-ens36:改名,用mvvi ifcfg-ens36:进入vi编辑模式关机:shutdown -h now

    进入vi编辑模式:

    I – insert模式,光标在哪儿从哪儿插入 A – append模式,从当前行尾部追加 X或delete – 删除模式Esc:退出编辑shift + g:来到最后一行o:新起一行,并进入编辑模式重要定义: BOOTPROTO=staticNAME=“ens36”ONBOOT=yes不要碰UUID和DEVICE 增加: IPADDR=192.168.233.130(修改ip地址)NETMASK=255.255.255.0(子网掩码)GATEWAY=192.168.233.2 保存退出:Esc 退出编辑;在最后一行输入:wq(写入并退出)查看是否更改成功: nmcli c reloadip areboot(重启)回到虚拟机用ip a查看ip地址是否更改生效

    防火墙设置(Xshell中)

    systemctl status firewalld:用于查看防火墙状态systemctl stop firewalld:停用防火墙 systemctl disable firewalld:停止开机时启用防火墙getenforce vi /etc/selinux/config:修改为SELINUX=disabled Esc + :q:退出编辑 shutdown -h now:关机回到虚拟机拍摄快照关机

    命令

    内部命令,随shell启动,常驻内存外部命令,需要找到文件夹在进程,查找路径就是$PATH hash,外部命令路径可以保存在一个hash表中PATH有很多目录,逐个去这些目录,找到就立即返回外部命令是文件,找文件需要到目录里面去翻,hash: {key} hash(vi) -> 路径

    命令格式

    命令 [options…][arguments…]

    命令本身可以接受选项和参数,而选项可以有自己的参数:

    - 短选项:-h 使用-加一个字母,短选项可以合并,但如果选项需要提供参数,必须放后面。短选项往往都是最常用的选项,为了简化而提供 - 长选项:--all 使用--加单词,不可以合并写 - Ctl + c:可以结束正在运行的命令 - \:命令续行符 - ;:一行多个命令使用分号分割 - 使用tab键补全,tab两次可以提示所有可能候选

    命令扩展

    bash具有的功能

    $ echo a/b/x a/c/x a/d/e/x 可以写成 $ echo a/{b,c,d/e}/x

    常用命令

    查帮助 help:内部命令man:查看Man文档命令 -h或者命令 --help 命令 type命令类型主机名 主机名非常重要临时修改,hostname主机名永久修改: 主机名可以修改配置文件/etc/hostnameCentOS7 可以用hostnamectl命令 who:查看登录信息,who am i或whoami,wwhatis:命令有什么功能which:命令在哪里whereis:命令程序二进制文件、man文档uname -a:查看操作系统信息-r:内核版本 alias 别名:

    alias cdif=“cd /etc/sysconfig/network-scripts/”

    echo:回显字符 -n:取消自动附加最后的换行符-e:使用解释功能,$ echo -e “a\tb\nc” 使用转义符 date:日期 date+“%Y%m%d%H:%M:%S"date [MMDDhhmm[[CC]YY][.ss]] 修改时间 开关机: halt,poweroffreboot:重启计划关机: shutdown [option]… TIME-r:重启-h:关机TIME:now立即执行;+n n分钟后执行;hh:mm 几点几分开始执行-c:未执行前还可以取消(cancel) 网络: ping -c:count;-w:deadline几秒截止ping -c 20 -w 5 www.baidu.com:5秒内ping20下,否则截止 ip a:查看ip;ip route查看路由ss -tanlp

    绝对路径和相对路径

    相对路径,不以/开头的路径绝对路径,以/开头的路径编写软件的时候,当前软件文件集中放置在某目录下,该目录称为工作路径,且在这个目录下使用子目录组织。本软件内可以使用相对路径,因为工作路径下的文件和子目录相对关系一般不变绝对路径因为固定,只在约定好路径、路径不变的场景下使用basename基名和dirname目录名

    文件类型

    -或f普通文件d:目录directoryl:符号链接或软连接,symbolic link,相当于快捷方式b:块设备,block device,随机访问,磁盘c:字符设备,character device,线性访问,键盘p:管道pipes:socket文件

    权限

    属主(Owner):文件拥有者属组(Group):文件的分组,组内的用户对该文件有一定权限其他用户(Other Users)如果有该权限,则显示对应字母;如果没有该权限,则显示。注:root用户不受权限设置rwx是三个字符,如果看作二进制位就是三位,每一位都可以用0或1表示,由此可以用一个8进制数表示。例:rw-rw---- 用八进制表示就是660

    通配符Wildcard

    *:匹配0个或多个字符(bash默认不支持 ** 为递归)?:匹配一个字符[a-z][A-z][0-9][acdf]匹配一个字符;[^a-z]匹配a-z之外的任意一个字符[:space:]空白字符、[:digit:]表示0-9、[:lower:]小写、[:upper:]大写、[:alpha:]字母、[:alnum:]字母和数字等 当一个字符用,所以 ls test[[:alnum:]]

    文件系统命令

    ls:列出目录内容 -a:显示所有文件,包括隐藏文件,即以 . 开头的文件-l:长格式显示,别名ll即ls-l,显示了stat的部分内容-h:–human-readable 配合-l,人可以阅读的,size显示为K\M\G等-R:递归目录-d或-ld:显示目录自身-i:显式inode号 touch:没有文件创建空文件,如果文件存在,改变时间戳 -a:改变atime、ctime-m:改变mtime、ctime-c:如果文件不存在,则不创建 stat:显示文件的信息(元数据metadata) access time,atime,读取文件内容则设置modify time,mtime,改变文件自身内容则设置。ls-l显示的时间就是mtimechange time,ctime,元数据发生变化则设置 cd切换目录(change directory) cd 或 cd~ 回到家目录cd -:最后两次目录相互切换 pwd:显示当前工作路径file:显示文件格式cat:读取文件或stdin到stdout;tac每个文件倒着读取行(与cat相反)more:less比more功能更强 回车向后一样,y向前一行空格向后一页,b向前一页d向后半页,u向前半页g首行,G末行/或? 搜索q 退出 head -n 20 /etc/passwdtail -n10 /etc/passwd;tail -f /var/log/messagesmkdir:创建目录 -p:创建父目录-v:详情 tree:递归显示目录树

    yum install tree

    -d:只显示目录-L n:现实的最大层数 rmdir:删除空目录rm:慎用!! -i:交互式提醒-f:强制不提醒-r:递归删除rm -rf / ln:创建链接文件 s:创建符号链接-v:详情 cp:复制目录或文件,从源复制到目标,默认不递归复制 如果源是文件: 目标是文件,目标不存在,直接创建指定名称文件;如果目标存在,直接覆盖目标是路径,复制到指定路径下,不存在新建;存在则覆盖 如果源是目录: 目标是文件,不可以目标是目录: 如果目标存在,就在该目标目录下复制源目录内容如果不存在,创建目标目录,复制源的内容 如果有多个源,目标只能是目录,且目标必须存在-i:交互式提醒;-f:强制覆盖不提示-R,-r:递归复制–preserv:保留指定的元数据信息,all保留所有,即包含权限、属主、属组等-d:表示–no-dereference --preserv=links:不复制源文件,只复制链接名-a:归档,相当于-dR --preserve=all,递归复制所有文件包含软连接,但不跟踪软连接 mv:移动或重命名,和cp很像find[指定目录][指定条件][指定动作] find /-name *.py

    符号链接

    $ ln -sv test test.link

    $stat test $stat test.link $stat -L test.link

    使用ln命令加-s选项就可以创建符号链接(软链接)软链接也是文件,60字符以内,在软连接的inode entry中记录着链接到的文件路径(相对或绝对路径字符串),而大多数软链接记录的路径字符串长度都小于60,应当尽量避免为软连接分配块(浪费空间!!!)软连接里记录路径字符串,所以软链接的size就是路径字符串的长度stat的-L选项跟进符号链接
    Processed: 0.009, SQL: 9