《鸟哥的Linux私房菜》

《鸟哥的Linux私房菜》

第一部分 Linux的规则与安装

第三部分 学习设shell和shell script

第四部分 Linux使用者管理

第五部分 Linux系统管理员

第0章 计算机概论

0.1 电脑

  • 接受用户 输入的命令与数据,经由中央处理器的算术和逻辑单元运算处理后,产生或存储成有用的信息

0.1.1 硬件五大单元

  • 输入单元,输出单元,控制单元,算数逻辑单元,记忆单元
    • CPU包括控制单元和算数逻辑单元
    • 记忆单元包含内存和辅助存储
  • 数据会流进或流出内存是CPU所发布的控制命令,CPU实际要处理的数据则完全来自于内存

0.1.2 CPU的架构

目前世界上最常见的两种CPU架构:精简指令集(RISC)——复杂指令集(CICS)

  • 精简指令集(Reduced Instruction Set Computer,RISC)
    • 指令较为精简,每个指令的运行时间都很短,完成的操作很简单,指令的执行性能较佳;
    • 做复杂的事情需要多个指令来完成;
    • 甲骨文公司——SPARC系列
      • 学术领域的大型工作站
      • 金融体系服务器
    • IBM公司——Power Architecture(包括PowerPC
      • Sony的PS3
    • ARM公司——ARM CPU
      • 移动设备(手机等),网络设备(路由器,交换机等)
  • 复杂指令集(Complex Instruction Set Computer,CICS)
    • 指令集的每个小指令可以执行一些较低级的硬件操作,指令数目多而复杂,每条指令的长度不同;
    • 指令执行较为复杂,每条指令执行花费的时间长,每个单条指令可以处理工作比较丰富;
    • X86架构(Intel,AMD,VIA)
      • X86——8位,16位,32位
      • X86-64——64位

0.1.3 其他单元的设备

  • 系统单元:CPU与内存及主板相关组件
  • 存储单元:内存(RAM)和辅助存储
  • 输入输出单元

0.1.4 运作流程

0.1.5 电脑的分类

  • 超级计算机(Supercomputer)
  • 大型计算机(Mainframe Computer)
  • 迷你计算机(Minicomputer)
  • 工作站(Workstation)
  • 微电脑(Microcomputer)

0.1.6 计算单位

  • 容量
    • Kilo
    • Mega
    • Giga
    • Tera
    • Peta
    • Exa
    • Zetta
  • 速度
    • MB/s
    • Mbit/s

0.2 PC架构与设备组件

主板芯片组

  • 北桥:负责链接速度较快的CPU,内存与显卡等组件
  • 南桥:负责连接速度较慢的设备接口(硬盘,USB,网卡等)
  • 目前,北桥大多都集成在了CPU中

0.2.1 CPU

  • 工作频率:外频和倍频

    外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作性能的一个倍数,两者相乘就是CPU的频率速度;

    • 超频:将CPU的倍频或者是外频通过主板提供的设置功能更改成较高频率的一种方式,CPU倍频一般是被厂商锁定的,因此超频是提高外频;
    • Intel的CPU会主动帮助超频,使用的是Turbo技术,即睿频;
  • CPU位数与总线位宽

  • CPU等级

  • 超线程(Hyper-Threading)

0.2.2 内存

个人电脑的内存主要组件位动态随机存取内存(DRAM),即断电数据就消失

发展:

  • SDRAM

  • DDR SDRAM(Double Date Rate)

    • DDR
    • DDR2
    • DDR3
    • DDR4
  • 多通道设计

​ 传统的总线位宽一般大约位64位,为了加大这个位宽,芯片组厂商就将两个内存集合在一起,如果一根内存可达到64位,两个内存就是128位,这就是双通道

  • DRAM与SRAM

    • DRAM是内存

    • SRAM是CPU内部的Cache

      • **CPU一级缓存、二级缓存、三级缓存是什么意思?**
        
        **一级缓存(L1 Cache)**
        
        CPU一级缓存,就是指CPU的第一层级的高速缓存,主要当担的工作是缓存指令和缓存数据。一级缓存的容量与结构对CPU性能影响十分大,但是由于它的结构比较复杂,又考虑到成本等因素,一般来说,CPU的一级缓存较小,通常CPU的一级缓存也就能做到256KB左右的水平。
        
        **二级缓存(L2 Cache)**
        
        CPU二级缓存,就是指CPU的第二层级的高速缓存,而二级缓存的容量会直接影响到CPU的性能,二级缓存的容量越大越好。例如intel的第八代i7-8700处理器,共有六个核心数量,而每个核心都拥有256KB的二级缓存,属于各核心独享,这样二级缓存总数就达到了1.5MB。
        
        **三级缓存(L3 Cache)**
        
        CPU三级缓存,就是指CPU的第三层级的高速缓存,其作用是进一步降低内存的延迟,同时提升海量数据量计算时的性能。和一级缓存、二级缓存不同的是,三级缓存是核心共享的,能够将容量做的很大。
        
        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
        141
        142
        143
        144
        145
        146
        147
        148
        149
        150
        151
        152
        153
        154
        155
        156
        157
        158
        159
        160
        161
        162
        163
        164
        165
        166
        167
        168
        169
        170
        171
        172
        173
        174
        175
        176
        177
        178
        179
        180
        181
        182
        183
        184
        185
        186
        187
        188
        189
        190
        191
        192
        193
        194
        195
        196
        197
        198
        199
        200
        201
        202
        203
        204
        205
        206
        207
        208
        209
        210
        211
        212
        213
        214
        215
        216
        217
        218
        219
        220
        221
        222
        223
        224
        225
        226
        227
        228
        229
        230
        231
        232
        233
        234
        235
        236
        237
        238
        239
        240
        241
        242
        243
        244
        245
        246
        247
        248
        249
        250
        251
        252
        253
        254
        255
        256
        257
        258
        259
        260
        261
        262
        263
        264
        265
        266
        267
        268
        269
        270
        271
        272
        273
        274
        275
        276
        277
        278
        279
        280
        281
        282
        283
        284
        285
        286
        287
        288
        289
        290
        291
        292
        293
        294
        295
        296
        297
        298
        299
        300
        301
        302
        303
        304
        305
        306
        307
        308
        309
        310
        311
        312
        313
        314
        315
        316
        317
        318
        319
        320
        321
        322
        323
        324
        325
        326
        327
        328
        329
        330
        331
        332
        333
        334
        335
        336
        337
        338
        339
        340
        341
        342
        343
        344
        345
        346
        347
        348
        349
        350
        351
        352
        353
        354
        355
        356
        357
        358
        359
        360
        361
        362
        363
        364
        365
        366
        367
        368
        369
        370
        371
        372
        373
        374
        375
        376
        377
        378
        379
        380
        381
        382
        383
        384
        385
        386
        387
        388
        389
        390
        391
        392
        393
        394
        395
        396
        397
        398
        399
        400
        401
        402
        403
        404
        405
        406
        407
        408
        409
        410
        411
        412
        413
        414
        415
        416
        417
        418
        419
        420
        421
        422
        423
        424
        425
        426
        427
        428
        429
        430
        431
        432
        433
        434
        435
        436
        437
        438
        439
        440
        441
        442
        443
        444
        445
        446
        447
        448
        449
        450
        451
        452
        453
        454
        455
        456
        457
        458
        459
        460
        461
        462
        463
        464
        465
        466
        467
        468
        469
        470
        471
        472
        473
        474
        475
        476
        477
        478
        479
        480
        481
        482
        483
        484
        485
        486
        487
        488
        489
        490
        491
        492
        493
        494
        - ROM(只读存储器)

        ### 0.2.3 显卡

        - 一般对于图形影像的显示重点在于**分辨率****颜色深度**,因为每个图像显示的颜色会占用内存,因此在显卡上面会集成内存并称为显存,这个显存容量将会影响到你的屏幕分辨率和颜色深度;

        - 显卡主要是通过GPU的控制芯片来与CPU,内存等通信;

        - 显卡与主板连接接口规格的更新:PCI->AGP->PCI-Express(PCIe);
        - 显卡与显示器连接接口规格:
        - D-Sub(VGA)
        - DVI
        - HDMI
        - DisplayPort

        ### 0.2.4硬盘与存储设备

        - 物理组成:圆形碟片,机械手臂,磁头,主轴马达;
        - 主轴马达让碟片转动,然后机械手臂可伸展让磁头在碟片上面进行读写的操作;
        - ![961754-20170731180025880-471442869](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/961754-20170731180025880-471442869.png)
        - ![2843224-46fb935cd31addbd](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/2843224-46fb935cd31addbd.png)
        - 扇区:最小物理存储单位
        - 磁道:同一个同心圆的扇区组合成的圆
        - 所有碟片上面的同一个磁道
        - 磁盘分区
        - (旧式)**MBR**(MS-DOS兼容):通过**柱面号码**来划分磁盘的分区
        - (新式)**GPT**:使用**扇区号码**来划分磁盘的分区
        - 传输接口
        - SATA
        - 注意:SATA传输接口传输时,通过数据算法的关系,当传输10位编码时,仅有8位为数据,其余两位为检验位。因此带宽计算,使用1B=10bits(而不是1B=8bits)
        - SAS
        - 速度更快,支持热插拔
        - USB
        - SSD与HDD
        - 固态硬盘(Solid State Disk):闪存,没有碟片和磁头等机械设备
        - 机械磁盘(Hard Disk Drive)

        ### 0.2.5 扩展卡与接口

        ### 0.2.6 主板

        - 发挥拓展卡的性能必须要考虑插槽的位置
        - 主板上靠近CPU的PCIe插槽直接与CPU通信,远离CPU插槽的PCIe插槽是南桥提供的,先于南桥进行通信再通过南桥与CPU进行通信(CPU与南桥进行通信的管导称为DMI2.0总线)
        - 设备IO地址与IRQ中断请求
        - CMOS与BIOS
        - CMOS主要的功能为记录主板上面的重要参数,包括系统时间、CPU电压与频率、各项设备的IO地址与IRQ等,由于这些数据的记录要用电,因此主板上面大都有一颗纽扣电池
        - 百度:是主板上的一块可读写的**RAM芯片**,用来保存当前系统的硬件配置和用户对参数的设定,其内容可通过设置程序进行读写。 CMOS芯片由主板上的钮扣电池供电,即使系统断电,参数也不会丢失。
        - BIOS是写入到主板上某一块flash或EEPROM(**很久之前是ROM**)的**程序**,它可以在计算机启动的时候执行,以加载CMOS当中的参数,并尝试调用存储设备中的引导程序,进一步进入操作系统中
        - BIOS程序也可以修改CMOS中的数据,一般是通过开机时按下DELETE进入BIOS设置界面
        - 连接外设的接口
        - PS/2:老式的键盘鼠标接口,现在已经被USB取代了
        - USB
        - 声音输入输出与麦克风
        - RJ-45:内部8个芯片触点,网口
        - HDMI:连接主板上的显示芯片

        ### 0.2.7 主机电源

        ### 0.2.8 选购须知

        ## 0.3 数据表示方式

        ### 0.3.1数字系统

        - 数字进制

        ### 0.3.2 字符编码系统

        - 英文编码表:ASCII——英文,数字,符号占用一个字节
        - 中文编码:台湾地区:Big5,大陆:GB2312或GBK
        - Unicode编码系统(UTF-8或万国码):用ISO/IEC指定,打破了所有国家使用不同的编码,目前是互联网是使用最多的编码系统

        ## 0.4 软件程序运行

        ### 0.4.1 机器语言程序与编译型程序

        ### 0.4.2操作系统

        OS(Operating System)

        #### 操作系统内核 Kernel
        Kernel ['kɜrn(ə)l]

        OS其实就是一组程序,这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件

        为了防止用户修改内核程序,造成系统崩溃,内核程序放置到内存当中的区块是受保护的,并且启动后就一直常驻在内存当中

        #### 系统调用System Call

        API:应用程序编程接口

        - 操作系统的**内核层**直接参考**硬件规格**写成,所以同一操作系统程序**不能够**在不一样的硬件架构下运行
        - 操作系统只是管理整个硬件资源,包括CPU,内存,输入输出设备及文件系统等。
        - 如果没有其他的应用程序辅助,操作系统只能让电脑主机准备妥当(Ready)而已,无法运行其他功能。
        - 应用程序的开发都是参考操作系统提供的API,所以该应用程序只能在该操作系统上面运行而已,不可以在其他操作系统上运行

        #### 内核功能

        - 系统调用接口
        - 进程管理
        - 内存管理
        - 文件系统管理
        - 设备驱动

        #### 操作系统与驱动程序

        - 操作系统必须要能够**驱动硬件**,如此应用程序才能使用该硬件功能;
        - 一般来说,操作系统会提供API,让开发商编写他们的驱动程序;
        - 要使用新硬件功能,必须要安装厂商提供的驱动程序才行;
        - **驱动程序是由厂商提供,与操作系统无关**

        ### 0.4.应用程序

        应用程序是参考操作系统提供的API所开发出来的软件;

        应用程序是与操作系统有关的

        ## 0.5 重点回顾





        # 第1章 Linux是什么与如何学习

        ## 1.1 Linux是什么

        Linux提供了一个操作系统中对底层的硬件控制资源与资源管理的完整架构,这个架构是继承了UNIX良好的传统而来,所以相当的稳定且功能强大;

        ### 1.1.2 UNIX

        - 1969年之前,Bell,MIT与GE的“Mutics”
        - 1969年,Ken Thompson的小型file server system
        - UNIX的原型
        - 汇编语言:内核程序(内核工具程序和文件系统)
        - 提出重要概念
        - **所有的程序或系统设备都是文件;**
        - 不管程序本书还是附属文件,所写的程序只有一个目的,且要有效地完成目标;
        - 1973年,UNIX正式诞生,Ritchie等人用C语言写出第一次正式UNIX内核
        - 1977年,重要的UNIX分支——BSD的诞生
        - 1979年,重要的System V架构与版权声明
        - 支持x86架构的个人计算机
        - AT&T收回UNIX的版权
        - 1984,x86架构的Minix操作系统开始编写并于两年后诞生
        - 类UNIX的内核程序
        - Minix与UNIX兼容
        - 只用于教育教学
        - 1984,GNU计划于FSF基金会的成立
        - 大佬:斯托曼
        - 开源
        - GNU:建立一个自由、开放的UNIX操作系统
        - 斯托曼开发C语言的编译器GNU Compiler(gcc)
        - FSF:自由软件基金会
        - C函数库:GNU C library
        - 运行操作系统的基本接口:Bash Shell
        - GNU的通用公共许可证:GPL
        - 1988 图形用户界面模式XFree86计划
        - 图形用户接口 GUI
        - XFree86=X Windw System+Free+x86
        - 1991:芬兰大学生Linus Torvalds
        - 以bash,gcc等GNU的工具写了一个小小的内核程序

        ### 1.1.3 GUN 自由软件 开放源代码

        使用GPL版权声明的软件就是自由软件,有以下特色

        - 取得软件与源代码:可以根据自己的需求来使用这个自由软件
        - 复制:可以自由地复制该软件
        - 修改:可以将取得的源代码进行程序修改工作,使之适合你的工作
        - 再发行:你可以将你修改过的程序,再度自由发行,而不会与原先的编者冲突
        - 回馈:应该将你修改过的程序代码发聩于社区
        - 不可以修改授权:不能把GPL授权的自由软件在经过你的修改后而取消GPL授权
        - 不能销售自由软件

        开放源代码

        - 1988年诞生了开源这一名词(open source)

        ## 1.2 托瓦兹的Linux的发展

        ### 1.2.3 初次发布Linux 0.02

        在BBS上发布了Linux 内核,之后从Linus单人维护到广大志愿者参与维护

        ### 1.2.5 Linux的内核版本

        Linux的内核版本与Linux的发行版本

        ### 1.2.6 Linux发行版

        ![image-20210826170424750](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210826170424750.png)

        ## 1.3 Linux当前应用的角色

        ## 1.4 Linux该如何学习

        # 第2章 主机规划与磁盘分区

        磁盘阵列(RAID)是利用硬件技术将整个硬盘整合成为一个大硬盘的方法,操作系统只会看到最后被整合起来的大硬盘。由于磁盘阵列是由多个硬盘组成,所以可完成提升速度和性能,备份等任务。

        ## 2.1 Linux与硬件的搭配

        ### 2.1.3 各硬件设备在Linux中的文件名

        **在Linux系统中,每个设备都被当作一个文件来对待**

        ![image-20210826222907635](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210826222907635.png)

        ## 2.2 磁盘分区

        ### 2.2.1 磁盘连接方式与设备文件名的关系

        设备文件名与Linux内核检测到的磁盘的顺序来命名

        整个磁盘中并不是每个扇区都同等重要,第一个扇区特别重要,因为加鲁鲁整块磁盘的重要信息;

        - 早期磁盘第一个扇区里面包含的重要信息称为MBR(Master Boot Record),硬盘容量过大之后,操作系统会读取MBR会有困难
        - 目前新的磁盘分区格式称为GPT(GUID partition table)

        ### 2.2.2 MBR与GPT磁盘分区表

        ![partition-1](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/partition-1.png)

        ![partition-2](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/partition-2.png)

        - MBR(MS-DOS)分区表格式与限制

        - 第一个扇区存放的内容
        - 主引导记录(MBR):可以安装启动引导程序的地方(446字节);
        - 分区表:记录整块硬盘分区的状态(16字节);
        - MBR主要分区,拓展分区,逻辑分区
        - 主要分区与拓展分区最多可以有4个(硬盘限制)
        - 拓展分区最多只能有1个(操作系统限制)
        - 逻辑分区是由扩展分区持续划分出来的分区
        - 能够被格式化后作为数据存取的分区是主要分区和逻辑分区,拓展分区无法格式化
        - 逻辑分区的数量依操作系统而不同
        - MBR分区的问题
        - 操作系统无法使用2.2TB以上的磁盘
        - MBR仅有一个区块,如果损坏,就有大问题了
        - MBR内存放启动引导程序的区块仅有446字节

        - GPT磁盘分区表

        扇区定义,大多使用所谓的逻辑区块地址(LBA),GPT将磁盘所有区块以此LBA(默认大小521字节)来规划,而第一个LBA被称为LBA0

        MBR仅使用一个第一个512字节大学奥的区块来记录分区信息

        GPT使用34个LBA区块来记录分区信息,同时整个磁盘最后面的34个LBA作为备份

        ![gpt_partition_1](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/gpt_partition_1.jpg)

        - LBA0 (MBR 兼容区块)

        与 MBR 模式相似的,这个兼容区块也分为两个部份,一个就是跟之前 446 bytes 相似的区块,保存了第一阶段的启动引导程序! 而在原本的**分区表的纪录区**内,这个兼容模式仅放入一个**特殊标志的分割**,用来表示**此磁盘为 GPT 格式**之意。 而不懂 GPT 分割表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分割信息,进一步保护了此磁盘喔!

        - LBA1 (GPT 表头纪录)

        这个部分纪录了分割表本身的位置与大小,同时纪录了备份用的 GPT 分割 (就是前面谈到的在最后 34 个 LBA 区块) 放置的位置, 同时放置了分割表的检验机制码 (CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。 若有错误,还可以通过这个记录区来取得备份的 GPT(磁盘最后的那个备份区块) 来恢复 GPT 的正常运作!

        - LBA2-33 (实际日志分信息处)

        从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分割纪录,所以在默认的情况下,总共可以有 4*32 = 128 笔分割日志喔! 因为每个 LBA 有 512bytes,因此每笔纪录用到 128 bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的磁区号码,因此,GPT 分割表对于单一分割槽来说, 他的最大容量限制就会在' 264 * 512bytes = 263 * 1Kbytes = 233*TB = 8 ZB ',要注意 1ZB = 230TB 啦! 你说有没有够大了?

        GPT 分割已经没有所谓的主、延伸、逻辑分割的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分割! 每一个分割都可以拿来格式化使用喔!

        ### 2.2.3 BIOS与UEFI

        早期的BIOS与新的UEFI

        *(拓展知识:[UEFI和Legacy及UEFI+Legacy启动的区别](https://www.cnblogs.com/net5x/p/6850801.html))*

        #### 1.BIOS搭配MBR/GPT的启动流程
        (如果支持GPT的话,步骤类似,BIOS读取启动引导程序是从LBA0的MBR兼容区块读取0)

        - **CMOS**是记录各项硬件参数且嵌入主板上面的**存储器**
        - **BIOS**是一个写入主板上的一个**固件****固件就是写入到硬件上的一个软件程序**
        - BIOS就是在启动的时候,计算机系统会主动执行的第一个程序
        - 开机时,计算机首先执行BIOS程序,接下来BIOS去分析计算中里面有哪些存储设备,找到用户设置的能够启动的硬盘,并且到该硬盘里面去读取第一个扇区的MBR位置;
        - MBR这个仅有446字节的硬盘容量里面放置了最基本的**启动引导程序**。(此时,BIOS就完成工作了,接下来就是MBR内的启动引导程序的工作了)
        - 启动引导程序的目的是加载内核文件,内核文件工作就开启了操作系统

        #### 2.UEFI BIOS搭配GPT启动的流程

        - **统一可扩展固件接口**(英语:Unified Extensible Firmware Interface,缩写**UEFI**)是一种[个人电脑](https://baike.baidu.com/item/个人电脑)系统规格,用来定义[操作系统](https://baike.baidu.com/item/操作系统)与系统[固件](https://baike.baidu.com/item/固件)之间的[软件界面](https://baike.baidu.com/item/软件界面),作为[BIOS](https://baike.baidu.com/item/BIOS)的替代方案。可扩展固件接口负责[加电自检](https://baike.baidu.com/item/加电自检)(POST)、联系操作系统以及提供连接操作系统与硬件的接口。
        - UEFI BIOS与UEFI 两种名称是一样的
        - ![image-20210826233859729](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210826233859729.png)

        ### 2.2.4 Linux安装模式下,磁盘分区的选择

        - **目录树结构**
        - 所谓的目录树架构(directory tree)就是以根目录为主,然后向下呈现分支状的目录结构的一种档案架构。 所以,整个目录树架构最重要的就是那个根目录(root directory),这个根目录的表示方法为一条斜线**/**
        - ![image-20210826234704573](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210826234704573.png)
        - 如上图所示,所有的档案都是由根目录(/)衍生来的,而次目录之下还能够有其他的资料存在。 上图中长方形为目录, 波浪形则为档案。 那当我们想要取得mydata那个档案时,系统就得由根目录开始找,然后找到home接下来找到dmtsai, 最终的文件名为:/home/dmtsai/mydata的意思。
        - 文件系统与目录树的关系(挂载)
        - **挂载:就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下;也就是说进入该目录就可以读取该分区的意思。**
        - 进入点的目录称为挂载点;
        - **Linux最重要的就是根目录,因此根目录一定需要挂载到某个分区**
        - **Linux上的挂载和Windows中的分区代号是不一样的**
        - 发行版安装时,挂载点与磁盘分区的规划
        - “/”根目录
        - “swap” 交换分区
        - 预留一个备份的剩余磁盘容量
        - 默认硬盘分区方式





        ## 2.3 安装Linux前的规划

        ### 2.3.1 发行版

        - 每个Linux的发行版都是使用来自[The Linux Kernel Archives](https://www.kernel.org/)官方网站提供的Linux内核

        ### 2.3.2 主机的服务规划与硬件的关系

        - NAT:IP分享器的功能
        - SAMBA:加入Windows网络邻居
        - Mail:邮件服务器
        - Web:WWW服务器
        - DHCP:提供客户端自动获取IP的功能
        - FTP:文件传输服务器

        ### 2.3.3 主机硬盘的主要规划

        - 最简单的分区
        - 仅划分根目录和内存交换分区(/和swap)
        - 遇了一些剩余的磁盘空间
        - 稍微复杂
        - 将频繁使用的分区从根目录下独立出来
        - /boot
        - /
        - /home
        - /var
        - swap



        # 第3章 安装CentOS 7.x

        [kickstart详解(超级详细)_Be_Nice的博客-CSDN博客_kickstart](https://blog.csdn.net/mpu_nice/article/details/107922312)

        ## 3.2 安装CentOS

        ### 3.2.1 BIOS

        ### 3.2.2 选择安装模式与启动(inst.gpt)

        ### 3.2.5 磁盘分区与文件系统设置

        - 这是最重要的部分,这一部分得需要多安装几次Linux才能掌握理解

        # 第4章 首次登陆与在线求助

        ## 4.1 首次登陆系统

        ### 4.1.2GNOME的操作与注销

        - 文件名开头是小数点,那么该文件就不会在一般观察模式中被显示出来

        ![2021-08-28 10-27-36屏幕截图](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/2021-08-28%2010-27-36%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png)

        - 带着箭头的文件:链接文件(类似Windows中的快截方式)

        ![image-20210828103148301](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828103148301.png)

        - 带着X号的图标:账号没有权限进入该目录

        ![image-20210828103609210](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828103609210.png)

        - 优化:

        ![image-20210828105330328](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828105330328.png)

        ### 4.1.3 X Window 与命令行模式的切换

        - ctrl+alt+【F1-F6】

        ### 4.1.4 在终端登陆Linux



        ## 4.2 命令行模式下的命令的执行

        命令行模式登陆后所运行的程序被称为壳(Shell),这是因为这个程序负责最外面跟用户沟通


        >[dmtsai@study ~]$ command [-options] parameter1 parameter2 ...
        > 指令 選項 參數(1) 參數(2)




        ![image-20210828113804400](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828113804400.png)

        ### 4.2.2 基础命令操作

        - date 日期
        - cal 日历
        - bc 简易计算器

        ### 4.2.3 热键

        - 【tab】:命令补全与文件补齐
        - 我们按【tab】按键的地方如果在command(第一个输入的数据)的后面,就代表着【命令补全】,如果是在第二个字段后面就变成【文件补齐】功能
        - ![image-20210828121239694](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828121239694.png)
        - 【CTRL】+C:中断目前的程序
        - 【CTRL】+D:键盘结束输入
        - 退出root程序
        - 退出terminal
        - 类似exit
        - 【shift】+{【page up】【page down】}:翻页



        ## 4.3 在线求助

        ### 4.3.1 【--help】

        ### 4.3.2 man page

        - man(manual的缩写)

        - ![image-20210828133956061](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828133956061.png)

        - 重点记忆:1,5,8

        - ![image-20210828134140153](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828134140153.png)

        > 通常鸟哥在查询某个资料时是这样来查阅的:

        > 1.先察看NAME的项目,约略看一下这个资料的意思;
        > 2.再详看一下DESCRIPTION,这个部分会提到很多相关的数据与使用时机,从这个地方可以学>到很多小细节呢;
        > 3.而如果这个指令其实很熟悉了(例如上面的date),那么鸟哥主要就是查询关于OPTIONS的>部分了! 可以知道每个选项的意义,这样就可以下达比较细部的指令内容呢!
        > 4.最后,鸟哥会再看一下,跟这个资料有关的还有哪些东西可以使用的? 举例来说,上面的>SEE ALSO就告知我们还可以利用'info coreutils date'来进一步查阅资料;
        5.某些说明内容还会列举有关的文件(FILES 部分)来提供我们参考! 这些都是很有帮助的!

        - ![image-20210828134412302](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828134412302.png)

        - [man -f 命令]:获取更多与man相关的信息

        - 【man -k 命令】:只要有“命令”这个关键词就将该说说明列出来

        - 【whatis [命令或文件]】======等价于 man -f [命令或文件]

        - 【apropos [命令或文件]】====等价于 man -k [命令或文件]

        - ![image-20210828140027144](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828140027144.png)



        ### 4.3.3 info page(《鸟哥》P139 不太会用)

        info命令与man命令类似,只不过info page是命令行模式的网页显示数据

        ![image-20210828144418231](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828144418231.png)

        ### 4.3.4 其他有用的文件

        /usr/share/doc

        ![image-20210828144702840](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828144702840.png)

        ## 4.4 文本编辑器:nano

        ![image-20210828145922567](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210828145922567.png)



        ## 4.5 关机方法

        - 观察系统的使用状态

        - 【who】:查看目前有谁在线
        - 【netstat -a】:网络的联机状态
        - 【ps -aux】:查看后台执行的程序

        - 数据同步写入磁盘:【sync】

        - 关机命令:【shutdown】

        - ``` bash
        [root@study ~]# shutdown -h now
        立刻關機,其中 now 相當於時間為 0 的狀態
        [root@study ~]# shutdown -h 20:25
        系統在今天的 20:25 分會關機,若在21:25才下達此指令,則隔天才關機
        [root@study ~]# shutdown -h +10
        系統再過十分鐘後自動關機
        [root@study ~]# shutdown -r now
        系統立刻重新開機
        [root@study ~]# shutdown -r +30 'The system will reboot'
        再過三十分鐘系統會重新開機,並顯示後面的訊息給所有在線上的使用者
        [root@study ~]# shutdown -k now 'This system will reboot'
        僅發出警告信件的參數!系統並不會關機啦!嚇唬人!
  • 重新启动,关机:reboot,halt,poweroff

  • 实际使用管理工具:systemctl

第二部分 Linux文件、目录与磁盘格式

第5章 Linux的文加权限与目录配置

Linux一般将文件可读写的身份分为三个类别,分别是拥有者(owner),所属群组(group),其他人(others),且三种身份各有读(read),写(write),执行(execute)等权限。

5.1 用户与用户组

  1. 文件拥有者
  2. 用户组的概念
  3. 其他人的概念

在Linux系统当中,。默认情况下所有的系统上的账号与一般身份用户,还有那个root的相关信息都记录在/etc/passwd这个文件内,个人密码则是记录在/etc/shadow这个文件内。

Linux所有的组名记录在/etc/group中。

5.2 Linux文件权限

5.2.1 Linux文件属性

使用【su -】这个命令来切换身份,离开【su -】则使用【exit】

【ls -a】:【ls】表示list,重点在显示文件的文件名和属性,选项【-al】则表示列出所有的文件详细的权限和属性

image-20210903221654870

image-20210904101341980

【文件类型权限】【链接数】【文件拥有者】【文件所属用户组】【文件大小】【文件最后被修改的时间】【文件名】

1

  • 文件类型与权限(permission)
    • 第一个字符代表这个文件是目录、文件或链接文件等;
      • [d] :目录
      • [-] : 文件
      • [l]:链接文件
      • [b]:设备文件里面的可供存储的周边设备
      • [c]:设备文件里面的串行端口设备
    • 之后的九个字符,每三个为一组,且均为【rwx】的三个参数组合。【r】:read,【w】:write, 【x】:execute,【-】:无权限
      • 第一组:文件拥有者可具备的权限
      • 第二组:加入此用户组之账号的权限
      • 第三组:非本人且没有加入本用户组的其他账号的权限

目录与文件的权限意义并不相同,是因为目录与文件所记录的数据内容不相同

  • 链接数
    • 有多少文件名链接到此节点(inode)
  • 文件或目录的拥有者账号
  • 文件所属的用户组
  • 文件的容量大小,默认单位是Byte
  • 创建日期或最近修改日期

注意:目录与文件的权限意义并不相同,是因为目录与文件所记录的数据内容不相同

image-20210904101541238

5.2.2 修改文件属性与权限

  • 【chgrp】:修改文件所属用户组
  • 【chown】:修改文件拥有者
  • 【chmod】:修改文件的权限

5.2.3 目录与文件的权限意义

  • 文件:存放实际数据
    • 【r】:读取此文件的实际内容
    • 【w】:可以编辑、新增或是修改改文件的内容,不具备删除此文件本身的权限
    • 【x】:该文件具有可以被系统执行的权限
      • Windows下文件是否可以被执行是由文件的拓展名决定,Linux下文件能否被执行,是由权限决定
  • 目录:主要内容在记录文件名列表,文件名与目录有强烈的关联。
    - 【r】:读取目录结构列表的权限,意味着可以在该文件夹下使用【ls】命令
    - 【w】:具有改动该目录结构列表的权限
    - 建立新的文件与目录
    - 删除已存在的文件与目录(不管该文件的权限是什么)
    - 将已存在的文件或目录进行更名
    - 移动该目录内的文件、目录位置
    - 【x】:用户进入该目录成为工作目录
    - 有【x】权限意味着能使用【cd】命令,将该目录变成工作目录

5.2.4 Linux文件种类与扩展名

文件种类

  • 常规文件(regular file):【ls -al】命令下,文件类型与权限的十个字符中,第一个字符为【-】的文件
    • 纯文本文件(ASCII)
    • 二进制文件(binary)
    • 数据文件(data)
  • 目录(directory):【ls -al】命令下,文件类型与权限的十个字符中,第一个字符为【d】的文件
  • 链接文件(link):【ls -al】命令下,文件类型与权限的十个字符中,第一个字符为【l】的文件
    • 类似于Windows中的快截方式
    • image-20210904114026148
  • 设备与设备文件(device)
    • 区块(block)设备文件:【ls -al】命令下,文件类型与权限的十个字符中,第一个字符为【b】的文件
      • 存储数据,以提供系统随机存取的接口设备(硬盘等)
    • 字符(character)设备文件:【ls -al】命令下,文件类型与权限的十个字符中,第一个字符为【c】的文件
      • 串行端口设备(鼠标键盘等)
      • 这些设备的特色是一次性读取,不能够截断输出
    • image-20210904114223200
  • 数据接口文件(sockets):【ls -al】命令下,文件类型与权限的十个字符中,第一个字符为【s】的文件
    • 通常被用在网络上的数据交换(/run或/tmp目录下)
  • 数据输送文件(FIFO,pipe):【ls -al】命令下,文件类型与权限的十个字符中,第一个字符为【p】的文件
    • FIFO是一种特殊的文件类型,主要目的是解决多个程序同时读写一个文件所造成的错误问题
    • FIFO(fist-in-first-out)

Linux文件扩展名

基本上,Linux的文件是没有所谓的扩展名的,一个Linux文件能否被执行,与她的第一栏的十个属性有关,与文件名根本没有一点关系

  • *sh:脚本或批处理文件(scripts),处理文件使用shell写成
    
    1
    2
    - ``` bash
    *Z、*.tar、*.tar.gz、*.zip、*.tag:经过打包的压缩文件
  • *.html、*.php:网页相关文件
    
    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





    #### Linux文件名长度限制

    >在Linux底下,使用传统的Ext2/Ext3/Ext4文件系统以及近来被CentOS 7当作默认文件系统的xfs而言,针对文件的文件名长度限制为:
    >
    >- 单一档案或目录的最大容许文件名为 255bytes,以一个 ASCII 英文占用一个 bytes 来说,则大约可达 255 个字符长度。 若是以每个中文字占用 2bytes 来说, 最大档名就是大约在 128 个中文字之谱!
    >
    >是相当长的档名喔! 我们希望Linux的文件名称可以一看就知道该档案在干嘛的, 所以文件名通常是很长很长! 而用惯了Windows的人可能会受不了,因为档案名称通常真的都很长, 对于用惯Windows而导致打字速度不快的朋友来说,嗯! 真的是很困扰..... 不过,只得劝你好好的加强打字的训练啰!

    #### Linux文件名的限制

    >由于Linux在文字界面下的一些指令操作关系,一般来说,你在设定Linux底下的档案名称时, 最好可以避免一些特殊字符比较好! 例如底下这些:
    >
    >> \* ? > < ; & ! [ ] | \ ' " ` ( ) { }
    >
    >因为这些符号在文字界面下,是有特殊意义的! 另外,文件名的开头为小数点'.' 时, 代表这个文件为『隐藏档』喔! 同时,由于指令下达当中,常常会使用到 -option 之类的选项, 所以你最好也避免将档案文件名的开头以 - 或 + 来命名啊!









    ## 5.3 Linux目录配置

    ### 5.3.1 Linux目录配置的依据——FHS

    标准:FHS:Filesystem Hisrarchy Standard

    FHS的重点在于规范每个特性的目录下应该要放置什么样的数据

    ![image-20210904122155729](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210904122155729.png)

    >- 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与使用者的邮件等资料, 是能够分享给网络上其他主机挂载用的目录;
    >
    >
    >
    >- 不可分享的:自己机器上面运作的设备档案或者是与程序有关的socket档案等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
    >
    >
    >
    >- 不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文档说明文件、系统管理员所管理的主机服务配置文件等等;
    >
    >
    >
    >- 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻群组等。

    事实上,FHS 针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

    - / (root, 根目录):与开机系统有关;
    - /usr (unix software resource):与软件安装/执行有关;
    - /var (variable):与系统运作过程有关。

    ![image-20210904144038187](https://murhyimgur.oss-cn-beijing.aliyuncs.com/image/image-20210904144038187.png)

    #### 根目录(/)的意义与内容

    不但所有的目录都是由根目录衍生出来的,同时根目录也与启动、还原、系统修复等操作有关。

    FHS要求根目录不要放在非常大的分区内,因为越大的分区会放置越多的文件,出错的机率也会越大

    **根目录(/)所在的分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。**

    有鉴于上述的说明,因此FHS定义出根目录(/)底下应该要有底下这些次目录的存在才好,即使没有实体目录,FHS也希望至少有链接文件存在才好:















    # <font color=DarkSeaGreen>实际中遇到的问题</font>

    ## 系统信息

    设置root用户

    ``` bash
    ubuntu@VM-8-15-ubuntu:~$ sudo passwd root
    New password:
    Retype new password:
    passwd: password updated successfully
    ubuntu@VM-8-15-ubuntu:~$ su
    Password:
    root@VM-8-15-ubuntu:/home/ubuntu#

系统信息 20.04

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ubuntu@VM-8-15-ubuntu:~$ neofetch
.-/+oossssoo+/-. ubuntu@VM-8-15-ubuntu
`:+ssssssssssssssssss+:` ---------------------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 20.04 LTS x86_64
.ossssssssssssssssssdMMMNysssso. Host: CVM 3.0
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 5.4.0-121-generic
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 21 hours, 19 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 959 (dpkg)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.0.17
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 1024x768
ossyNMMMNyMMhsssssssssssssshmmmhssssssso Terminal: /dev/pts/0
ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: Intel Xeon Platinum 8255C (2) @ 2.494GHz
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ GPU: 00:02.0 Cirrus Logic GD 5446
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Memory: 196MiB / 1982MiB
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
+sssssssssdmydMMMMMMMMddddyssssssss+
/ssssssssssshdmNNNNmyNMMMMhssssss/
.ossssssssssssssssssdMMMNysssso.
-+sssssssssssssssssyyyssss+-
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.

Conda

Miniconda依旧是首选:Miniconda — conda documentation

1
2
3
4
5
wget 
chmod
./Miniconda3-latest-Linux-x86_64.sh # .sh文件可以直接运行
cat ~/.bashrc
source ~/.bashrc # 安装后环境变量不能立即生效,运行该命令后激活环境

关于退出环境的报错:

1
2
3
4
5
6
7
# 这个错误信息是你在当前的conda虚拟环境里,只需要执行conda deactivate 命令即可,不能加参数
(base) ubuntu@VM-8-15-ubuntu:~$ conda deactivate base
deactivate does not accept arguments
remainder_args: ['base']

(base) ubuntu@VM-8-15-ubuntu:~$ conda deactivate
ubuntu@VM-8-15-ubuntu:~$

apt源

Ubuntu 20.04 && Ubuntu 18.04 修改 apt 源_星汉空兮的博客-CSDN博客

服务器本身配置的就是腾讯的源,不需要更换。在WSL上,更换源时遇到了有一些问题,一定要搞清楚期间的Ubuntu是什么版本的!

1
2
3
4
5
6
murphy-dell@Murphy-DELL:/etc/apt$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
1
2
3
4
5
6
部分ubuntu系统LTS版本代号
Ubuntu 16.04代号为:xenial
Ubuntu 17.04代号为:zesty
Ubuntu 18.04代号为:bionic
Ubuntu 19.04代号为:disco
Ubuntu 20.04代号为:focal

GCC

如何在 Ubuntu 20.04 上安装 GCC(build-essential)-阿里云开发者社区 (aliyun.com)

1
2
3
4
5
6
7
sudo apt update
sudo apt install build-esstential
gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

文本工具

1
2
3
4
5
6
7
8
9
常见的基于控制台的文本编辑器有以下几种:
emacs 综合性的GNU emacs 编辑环境
nano 一个类似于经典的pico的文本编辑器,内置了一个pine邮件程序
vim 一个改进的vi文本编辑器

注意并不是所有的文本编辑器都是基于控制台的,也就是说支持终端使用的。有一些文本编辑器被设计用来提供带有菜单栏,按钮,进度条等的图形界面。例如:
gedit 一个GUI的文本编辑器,Ubuntu默认安装
kate 一个简单的KDE文本编辑器
kedit 另外一个简单的KDE文本编辑器

目前主要用的还是Vim,nano未来也可以学习一下。(其实能熟练用起vim来估计都是一件很难的事情!

apt & apt-get

不是很懂

简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。

apt 和 apt-get的区别_御龙冀人的博客-CSDN博客_apt get和apt

.vimrc

如何使用 Vim 的配置文件 .vimrc_哔哩哔哩_bilibili

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
(base) ubuntu@VM-8-15-ubuntu:~$ echo $HOME
/home/ubuntu
(base) ubuntu@VM-8-15-ubuntu:~$ ll
total 116
drwx------ 11 ubuntu ubuntu 4096 Sep 13 21:54 ./
drwxr-xr-x 4 root root 4096 Sep 8 19:41 ../
-rw-r--r-- 1 ubuntu ubuntu 6300 Sep 13 21:58 .bash_history
-rw-r--r-- 1 ubuntu ubuntu 220 Jan 19 2021 .bash_logout
-rw-rw-r-- 1 ubuntu ubuntu 13123 Jun 23 15:34 .bash-preexec.sh
-rw-r--r-- 1 ubuntu ubuntu 4254 Sep 8 10:54 .bashrc
drwx------ 2 ubuntu ubuntu 4096 Nov 10 2021 .cache/
drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 8 10:54 .conda/
drwxrwxr-x 3 ubuntu ubuntu 4096 Sep 8 09:23 .config/
drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 8 10:48 download/
drwx------ 2 ubuntu ubuntu 4096 Jan 26 2022 .local/
drwxrwxr-x 16 ubuntu ubuntu 4096 Sep 8 10:54 miniconda3/
drwxr-xr-x 2 ubuntu ubuntu 4096 Jun 5 2021 .pip/
-rw-r--r-- 1 ubuntu ubuntu 807 Jan 19 2021 .profile
-rw-r--r-- 1 ubuntu ubuntu 73 Sep 7 10:34 .pydistutils.cfg
-rw------- 1 ubuntu ubuntu 1520 Sep 13 20:16 .python_history
drwx------ 2 ubuntu ubuntu 4096 Sep 7 10:34 .ssh/
-rw-r--r-- 1 ubuntu ubuntu 0 Sep 8 09:09 .sudo_as_admin_successful
drwxrwxr-x 4 ubuntu ubuntu 4096 Sep 13 20:16 userDoc/
-rw------- 1 ubuntu ubuntu 10282 Sep 13 21:54 .viminfo
-rw-rw-r-- 1 ubuntu ubuntu 8506 Sep 13 21:53 .vimrc # 新建这个.vimrc文件,写入vim配置文件

.vimrc

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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
" All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by
" the call to :runtime you can find below. If you wish to change any of those
" settings, you should do it in this file (/etc/vim/vimrc), since debian.vim
" will be overwritten everytime an upgrade of the vim packages is performed.
" It is recommended to make changes after sourcing debian.vim since it alters
" the value of the 'compatible' option.

" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
runtime! debian.vim

" Vim will load $VIMRUNTIME/defaults.vim if the user does not have a vimrc.
" This happens after /etc/vim/vimrc(.local) are loaded, so it will override
" any settings in these files.
" If you don't want that to happen, uncomment the below line to prevent
" defaults.vim from being loaded.
" let g:skip_defaults_vim = 1

" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
"set compatible

" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
if has("syntax")
syntax on
endif

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
"set background=dark

" Uncomment the following to have Vim jump to the last position when
" reopening a file
"if has("autocmd")
" au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"endif

" Uncomment the following to have Vim load indentation rules and plugins
" according to the detected filetype.
if has("autocmd")
filetype plugin indent on
endif

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
"set showcmd " Show (partial) command in status line.
"set showmatch " Show matching brackets.
"set ignorecase " Do case insensitive matching
"set smartcase " Do smart case matching
"set incsearch " Incremental search
"set autowrite " Automatically save before commands like :next and :make
"set hidden " Hide buffers when they are abandoned
"set mouse=a " Enable mouse usage (all modes)

" Source a global configuration file if available
if filereadable("/etc/vim/vimrc.local")
source /etc/vim/vimrc.local
endif
let mapleader=" " " 设置leader键为空格键
set nocompatible " 不以兼容模式运行
set encoding=utf-8 " utf-8编码
set helplang=cn " 中文帮助文档
set number " 显示行号
set wrap " 自动换行
set showcmd " 显示输入信息
set cursorline " 显示光标所在行
set wildmenu " 显示补全提示
set hlsearch " 高亮搜索结果
"set foldenable " 允许折叠
"set foldmethod=manual " 手动折叠
"打开vim运行nohlsearch,取消高亮
exec "nohlsearch"
set ts=4 " 设置tab键长度为四个空格
set expandtab " 设置tab键替换为四个空格键
" 将文件中的tab键替换成空格
map <LEADER> :retab!<CR>
set incsearch " 一边输入一边高亮
set ignorecase " 忽略大小写
set smartcase " 智能大小写
set laststatus=2 " 设置状态栏在倒数第2行

" 设置状态栏格式
"set statusline=%<%F%=%y%m%r%h%w%{&ff}\[%{&fenc}]0x%02B@%040h#%n\(%3l/%3L,%3c\|%3v\)%3p%%
set statusline=%1*\%<%.50F\ "显示文件名和文件路径
set statusline+=%=%2*\%y%m%r%h%w\ %* "显示文件类型及文件状态
set statusline+=%3*\%{&ff}\[%{&fenc}]\ %* "显示文件编码类型
set statusline+=%4*\ row:%l/%L,col:%c\ %* "显示光标所在行和列
set statusline+=%5*\%3p%%\%* "显示光标前文本所占总文本的比例
hi User1 cterm=none ctermfg=25 ctermbg=0
hi User2 cterm=none ctermfg=208 ctermbg=0
hi User3 cterm=none ctermfg=169 ctermbg=0
hi User4 cterm=none ctermfg=100 ctermbg=0
hi User5 cterm=none ctermfg=green ctermbg=0

set mouse=a " 启用鼠标
set backspace=indent,eol,start " 退格键可以退到上一行
set scrolloff=5 " 光标行上下移动范围各缩小5行
"set ruler
"set transparency=11
" 设置背景透明
hi Normal ctermfg=252 ctermbg=none
"寻找下一搜索结果,并将其置于屏幕中心
noremap = nzz
"寻找上一搜索结果,并将其置于屏幕中心
noremap - Nzz
"取消高亮
noremap <LEADER><CR> :nohlsearch<CR>
map s <nop>
"保存
map S :w<CR>
"退出
map Q :q<CR>
"右分屏,聚焦右窗口
map sl :set splitright<CR>:vsplit<CR>
"左分屏,聚焦左窗口
map sh :set nosplitright<CR>:vsplit<CR>
"上分屏,聚焦上窗口
map sk :set nosplitbelow<CR>:split<CR>
"下分屏,聚焦下窗口
map sj :set splitbelow<CR>:split<CR>
"光标移至右窗口
map <LEADER>l <C-w>l
"光标移至上窗口
map <LEADER>k <C-w>k
"光标移至下窗口
map <LEADER>j <C-w>j
"光标移至左窗口
map <LEADER>h <C-w>h
"窗口上移
map <up> :res +5<CR>
"窗口下移
map <down> :res -5<CR>
"窗口左移
map <left> :vertical resize-5<CR>
"窗口右移
map <right> :vertical resize+5<CR>
"新建标签页
map <C-n> :tabe<CR>
"前一标签页
map t- :-tabnext<CR>
"后一标签页
map t= :+tabnext<CR>
"重新加载vim配置文件
map rc :source $MYVIMRC<CR>
"寻找两个相等的单词
map <LEADER>fd /\(\<\w\+\>\)\_s*\1
"替换占空符<++>
map <LEADER><LEADER> <ESC>/<++><CR>:nohlsearch<CR>c4l
"全选
map <C-a> ggVG
"打开我的vimrc
map <LEADER>rc :e ~/.vimrc<CR>
"复制到系统剪切板
map +y "+y
"从系统剪切板粘贴
map +p "+p

set list
set listchars=tab:>-,trail:-
"自动匹配括号
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endfunction
"不同模式下光标样式不同
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
"打开文件,光标回到上次编辑的位置
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"创建文件头
autocmd BufNewFile *.py,*.tex exec ":call SetTitle()"

func! SetTitle()
if &filetype == 'python'
call setline(1,"#!/usr/bin/env python3")
call append(line("."),"# -*- coding:UTF-8 -*-")
call append(line(".")+1,"##########################################################################")
call append(line(".")+2, "# File Name: ".expand("%"))
call append(line(".")+3, "# Author: stubborn vegeta")
call append(line(".")+4, "# Created Time: ".strftime("%c"))
call append(line(".")+5, "##########################################################################")
endif
if &filetype == 'plaintex'
call setline(1,"% -*- coding:UTF-8 -*-")
call append(line("."),"%#########################################################################")
call append(line(".")+1, "% File Name: ".expand("%"))
call append(line(".")+2, "% Author: stubborn vegeta")
call append(line(".")+3, "% Created Time: ".strftime("%c"))
call append(line(".")+4, "%#########################################################################")
endif
"autocmd BufNewFile * normal G
normal G
endfunc
" 设置注释快捷键
map <LEADER>r :call Note()<CR>
func! Note()
if &filetype == 'python'
normal 0i#
endif
if &filetype == 'vim'
normal 0i"
endif
if &filetype == 'plaintex'
normal 0i%
endif
endfunc
" 设置取消注释
map <LEADER>t 0df j
"编译运行
map <F5> :call RunPython()<CR>
func! RunPython()
exec "W"
if &filetype == 'python'
" exec "!time python3.6 %"
"exec ":set splitbelow<CR>:split<CR>"
exec "!time python3.6 %"

endif
if &filetype == 'dot'
exec "!dot % -T png -o %.png"
exec "!feh %.png"
endif
endfunc

"colorscheme molokai
set t_Co=256 "开启256色支持
"set background=dark

su & su -

Linux su命令:用户间切换(包含su和su -的区别) (biancheng.net)

su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。

普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。

su 命令的基本格式如下:

1
[root@localhost ~]# su [选项] 用户名

选项:

  • -:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
  • -l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
  • -p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
  • -m:和 -p 一样;
  • -c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。

*参考资料

腾讯云服务器获取root权限(ubuntu系统)_Foley_Zhao的博客-CSDN博客_云服务器root权限

ppc64,ppc64le,ARM,AMD,X86,i386,x86_64(AMD64),AArch64的概念_ac.char的博客-CSDN博客_ppc64le

如何查看 Ubuntu 版本和其他系统信息_BugMiaowu2021的博客-CSDN博客_ubuntu查看系统信息

Linux 命令大全 | 菜鸟教程 (runoob.com)

Anaconda环境的 创建、激活、退出、删除_fish-aroma的博客-CSDN博客

Ubuntu 20.04 && Ubuntu 18.04 修改 apt 源_星汉空兮的博客-CSDN博客

如何在 Ubuntu 20.04 上安装 GCC(build-essential)-阿里云开发者社区 (aliyun.com)

Ubuntu下几种常用的文本编辑器_Java海洋的博客-CSDN博客_ubuntu编辑器

如何使用 Vim 的配置文件 .vimrc_哔哩哔哩_bilibili

vim配置(无插件,含状态栏,背景透明等)_stubborn vegeta的博客-CSDN博客_vim 状态栏

查看yum源(CentOS)

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
[root@iZ0jlftcfs16k3ahu5mu80Z ~]# cat /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever
enabled=1
failovermethod=priority
baseurl=http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.cloud.aliyuncs.com/centos/RPM-GPG-KEY-CentOS-7

[root@iZ0jlftcfs16k3ahu5mu80Z ~]#

Linux 目录结构

tree命令的下载yum -y install tree

  • -a 显示所有文件和目录。
  • -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
  • -C 在文件和目录清单加上色彩,便于区分各种类型。
  • -d 显示目录名称而非内容。
  • -D 列出文件或目录的更改时间。
  • -f 在每个文件或目录之前,显示完整的相对路径名称。
  • -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上”*”,”/“,”=”,”@”,”|”号。
  • -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
  • -i 不以阶梯状列出文件或目录名称。
  • -L level 限制目录显示层级。
  • -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
  • -n 不在文件和目录清单加上色彩。
  • -N 直接列出文件和目录名称,包括控制字符。
  • -p 列出权限标示。
  • -P<范本样式> 只显示符合范本样式的文件或目录名称。
  • -q 用”?”号取代控制字符,列出文件和目录名称。
  • -s 列出文件或目录大小。
  • -t 用文件和目录的更改时间排序。
  • -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
  • -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。

/ 目录

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
[root@iZ0jlftcfs16k3ahu5mu80Z ~]# pwd
/root
[root@iZ0jlftcfs16k3ahu5mu80Z ~]# tree / -L 1
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var


[root@iZ0jlftcfs16k3ahu5mu80Z ~]# cd /
[root@iZ0jlftcfs16k3ahu5mu80Z /]# ll
total 60
lrwxrwxrwx. 1 root root 7 Sep 14 2020 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Nov 30 2021 boot
drwxr-xr-x 19 root root 2980 Aug 18 08:20 dev
drwxr-xr-x. 76 root root 4096 Aug 16 14:29 etc
drwxr-xr-x. 3 root root 4096 Aug 16 14:13 home
lrwxrwxrwx. 1 root root 7 Sep 14 2020 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Sep 14 2020 lib64 -> usr/lib64
drwx------. 2 root root 16384 Sep 14 2020 lost+found
drwxr-xr-x. 2 root root 4096 Apr 11 2018 media
drwxr-xr-x. 2 root root 4096 Apr 11 2018 mnt
drwxr-xr-x. 2 root root 4096 Apr 11 2018 opt
dr-xr-xr-x 92 root root 0 Aug 18 08:19 proc
dr-xr-x---. 7 root root 4096 Aug 18 10:10 root
drwxr-xr-x 23 root root 620 Aug 18 14:11 run
lrwxrwxrwx. 1 root root 8 Sep 14 2020 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Apr 11 2018 srv
dr-xr-xr-x 13 root root 0 Aug 18 2022 sys
drwxrwxrwt. 8 root root 4096 Aug 18 14:11 tmp
drwxr-xr-x. 13 root root 4096 Sep 14 2020 usr
drwxr-xr-x. 19 root root 4096 Sep 14 2020 var
  • /bin
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev :
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc:
    etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib
    lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media
    linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt
    opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc
    proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root
    该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux
    这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv
    该目录存放一些服务启动之后需要提取的数据。

  • /sys

这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

该文件系统是内核设备树的一个直观反映。

当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp
    tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr
    usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin:
    系统用户使用的应用程序。

  • /usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src:
    内核源代码默认的放置目录。

  • /var
    var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run
    是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。


《鸟哥的Linux私房菜》
https://cosmicdusty.cc/post/Knowledge/LearnLinux/
作者
Murphy
发布于
2021年8月1日
许可协议