29期第十六周笔记

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系统,即Linux
  • Linux使用了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操作系统

建立虚拟机及基础设置

虚拟机中操作:

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

接入Xshell:

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

进入vi编辑模式:

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

防火墙设置(Xshell中)

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

命令

  • 内部命令,随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/hostname
        • CentOS7 可以用hostnamectl命令
    • who:查看登录信息,who am i或whoami,w
    • whatis:命令有什么功能
    • 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,poweroff
      • reboot:重启
      • 计划关机:
        • 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:目录directory
  • l:符号链接或软连接,symbolic link,相当于快捷方式
  • b:块设备,block device,随机访问,磁盘
  • c:字符设备,character device,线性访问,键盘
  • p:管道pipe
  • s: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显示的时间就是mtime
    • change 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/passwd
  • tail -n10 /etc/passwd;tail -f /var/log/messages
  • mkdir:创建目录
    • -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选项跟进符号链接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值