Linux

语雀文章链接:https://www.yuque.com/tintoki/znb576/sik6ux

链接中的文章讲的更偏向于理论,这里我们实际操作Linux系统做一个学习总结;

2022/7/25 9:27 因为之前学Linux就是跟着视频直接硬学没怎么动手实践所以这段时间再看Linux会觉得很生疏,这里参考Linux系统简介 (biancheng.net)的教程再简单复习巩固一遍Linux

2022/7/26 9:31 刚刚稍微把中文网的Shell编程看了一下,说实话也全都是介绍怎么调用API之类的或者一些常规命令,但是这种方式反而是我最反感的方式(亲测学完就忘,现在打算的是找书自己来看)

2022/7/27 11:10 差不多简单的把《Ubuntu Linux 从入门到精通》看了一下,反正结合实际的操作系统而不是全部的命令讲解的话这本教材还是可以的,然后Linux基本上也算是入门了,要学习Linux高级的话就得静下心来把这本书上的概念全部搞懂才行;

Linux操作系统(一)

1.Linux概述

作为服务器部署,绝大多数 Linux 并不安装或并不启用图形环境(UNIX/Linux 系统不依赖图形环境,依然可以通过命令行完成 100% 的功能,而且因为不使用图形环境还会节省大量的系统资源)

2.Ubuntu+Vmware

2022/7/25 11:31 安装Ubuntu22.4成功但是在配置中文还有安装VMTools的时候暴毙了,所以这里直接选择删除,安装较低版本的Ubuntu(第一次重装失败,注意重装失败直接把Ubuntu的磁盘文件删除了就行了,VMware软件本身是没有任何问题的不要去乱动)

2022/10/2 18:43 本来今天准备安装一下16.04的32单核版本,结果按照教程来又出问题了,真的是让人头大;然而只能怪自己做笔记没认真,所以我们把一些需要修改的地方重新改了一下;

2.0 VMware的安装

因为VMware的安装特别简单所以这里就不花时间介绍怎么安装它,主要介绍以下怎么在VMware上把Ubuntu装好,同时汉化以及配置共享文件等;

需要注意的是VM之前我应该是关过一些自动启用项所以在服务中重新启动,这四个都得启动才能保证虚拟机的正常工作!!!(这四个服务究竟代表什么参考http://t.zoukankan.com/Zlcode-p-10602978.html,据说还有一个服务是workstation server,资料说安装了VMTools才有,但是我的电脑上始终没有,但是不影响正常使用)

2.1 Ubuntu的安装

Ubuntu镜像下载网站(30条消息) ubuntu 16.04 镜像下载_Famiglistimott的博客-CSDN博客_ubuntu16镜像下载

2.2 设置中文和中文输入法

设置中文是简单的,VM新版本安装Ubuntu16的时候会自动出现中文选项,需要勾选,然后进入系统后把汉语放在最上面,重启系统就OK;

当然上面只是系统认识中文,不能输入中文,需要输入中文的,在桌面打开终端输入sudo apt-get install ibus-pinyin安装拼音输入法,回到文本输入添加拼音,把之前的汉语输入法删了,修改切换输入法快捷键,大功告成!

至于快捷键切换,不能像Windows下直接shift切换,比较推荐的快捷键组合是ctrl+space或者ctrl+shift+space;

2.3 设置全屏

VM中的初始Ubuntu是很小的,看起来特别难受,这里设置全屏(借助VMtools)(21条消息) Ubuntu怎么设置全屏_微风-cd的博客-CSDN博客_ubuntu全屏安装完VMTools之后可以进行一系列的便捷操作如直接两个客户机之间的复制粘贴、文件拖拽等(注意是否在虚拟机设置里面开启虚拟机隔离),非常方便(VMTools因为版本兼容问题所以对于高版本的Ubuntu可能会报错)

VMtools不知道有什么问题,32bit的系统每次装了过一会就自己掉了,真无语(也有可能是32bit单核对VMtools不够友好);

还有一个方法就是直接修改屏幕的分辨率(个人推荐1680*1050),然后ctrl+alt+enter进入大屏;

2.4 修改源

不知道是否是因为设置了中文的原因,下载的源在设置之前就已经是中国的服务器了,如果个人喜欢其他镜像也可以手动修改

文章参考:ubuntu怎么选择最快的更新源? ubuntu更改最快的更新源的图文教程_Ubuntu/Debian_操作系统_脚本之家 (jb51.net)

PS:实际上手动修改源是有必要的,就算是它默认的China源下载东西也很慢,最好改成阿里云的;

2.5 设置root用户

Ubuntu在安装之后默认没有root用户权限(因为root用户默认没有被设置密码),所以我们使用su命令会直接抛出认证失败;

使用su切换root的原因:一次设置,之后就再也不用sudo这么麻烦了,可以直接使用su命令切换为root用户然后使用各种高权限命令

参考尚硅谷教程修改

2.6 设置共享文件夹

有时候我们需要直接复制粘贴Windows下的一些命令以及共享两个系统之间的文件,需要设置;

(21条消息) 解决Vmware虚拟机安装Vmware Tools后仍然无法复制、粘贴和拖拽文件的问题_Svran7的博客-CSDN博客_vmwaretools安装成功但无法复制

这个教程的后面设置桌面共享文件的快捷方式我应该是设置失败了,其他的一切正常,可以在share_folder中共享文件

2.7 Ubuntu问题

2.7.1 挂起

Ubuntu的挂起功能(本质上就是电脑休眠),这个功能好像是因为显卡的问题所以会导致挂起之后无论怎么操作都无法再唤醒,所以尽量少用这个功能吧…

参考文章(21条消息) ubuntu20.04挂起/休眠后无法唤醒,只能强制重启_koigh的博客-CSDN博客_ubuntu挂起后怎么唤醒

2.7.2 物理驱动

根据教程最后我把CD的配置修改为了物理驱动,然后第一次重启的时候提出了一个警示,之后的重启就没有这些警示了,还不影响正常使用所以就先不管这个(主要我也不懂物理驱动和iso的区别),可以参照(21条消息) VMware虚拟机提示:无法连接虚拟设备ide1:0,因为主机上没有相应的设备。_OpenAll_Zzz的博客-CSDN博客_无法连接虚拟设备ide1:0,实际上修改为物理光驱之后就可以不用链接iso快速启动;

3.Ubuntu+Hyper-v

我说一下为什么要用这个,因为我今天(2022/10/29)使用Vmware的时候就开始持续转圈进不去系统(很有可能是因为使用的Vmware没有花米吧,然后不知道什么奇怪的操作更新啥的就导致无法正常运行了…),然后浪费了我大量时间(网上也没有这方面问题的解决方法),加上我并不是很想重装Vmware(这个破软件实在给我整的伤心了),所以选择白手起家开始学习Hyper-v+Ubuntu的使用(至于为什么我这么钟情于使用Ubuntu,是因为我的操作系统作业依赖于Linux环境啊!!!);

关于虚拟机的使用,请养成一个良好的习惯就是备份到主机,不要像我一样因为一些奇怪的问题不能正常开机,甚至连之前存在里面的学习资料都用不了了(幸运的是我至少把作业要交的那部分给备份了,否则我还得重新写一遍!)

3.1 Hyper-v概述

Hyper-v是什么?与Vmware有什么区别?是免费的吗?文章参考:微软亲儿子Hyper-V与虚拟化巨头VMware Workstation性能大比拼 - 知乎 (zhihu.com)

1:Hyper-V为Windows10自带,不需要下载安装,开启后重启即可,而Vmware需要下载安装;

2:Hyper-V虚拟硬盘采用vhdx格式,宿主机可直接读取虚拟机文件,而Vmware需要自行映射;

3:Hyper-V内存动态分配,当虚拟机处于后台运行时,自动降低内存使用率,而Vmware则是固定内存;

4:Hyper-V挂起虚拟机比较快,且可在不考虑虚拟系统运行的情况下直接关机,而Vmware挂起虚拟机较慢,需要等到虚拟内存释放掉才能关机;

5:Hyper-V开启后宿主机性能稍下降,而Vmware则不会;

6:Hyper-V只能显示固定大小(Linux),而Vmware在安装vm-tools之后可以跟随窗口动态调整大小;

7:Hyper-V默认不能连接外网,且只有虚拟交换机的网络方案,Vmware默认NAT网络模式能连接外网,且有三种网络模式;

8:Hyper-V USB外设不能直接连接虚拟机,而Vmware可以;

9:Hyper-V 支持的操作系统更少,对Windows支持更好,对Linux支持较差,如果要使用Linux虚拟机(如Ubuntu),不推荐Hyper-V,而Vmware支持更多的操作系统;

10:Hyper-V默认是用CPU来模拟显示,性能较低,但可以通过手段对GPU进行虚拟化,而VMware安装完Vmware-tool后直接可以利用GPU提升显示性能;

3.1 Hyper-v安装

尽管Win10默认安装了Hyper-v,但是我使用的Win11并没有安装该服务,所以需要手动安装

文章参考:(2条消息) Windows11家庭中文版没有hyper-v_Johnston_man的博客-CSDN博客_win11没有hyperv

3.3 Ubunutu安装

文章参考:(2条消息) Hyper-V安装Ubuntu_CCCCChristopher的博客-CSDN博客_hyper-v安装ubuntu(文字和图片结合,仅有前半部分安装映像文件)

实际上因为我们前面已经配置过Ubunutu,所以之后的配置和前面相同,开启虚拟机并配置完成后等待安装即可(不知道是单核还是什么缘故,最近16.04给我的感觉就是非常卡);


2022/10/29 16:47 说一个我很无语的事情,本来今天上午Vmware根本就完全打不开之前安装的两个Ubuntu,结果下午在安装18.04版本的时候告知我找不到操作系统,所以我破罐子破摔重新启动了16.04,结果发现不仅可以良好运行,甚至比之前还要流畅。关于为什么我放弃使用Hyper-v,是因为这个虚拟真的太…甚至比Vm要差,特别是桌面版本的Ubuntu,我鼠标卡的都看不清,除此之外我也不知道怎么简单的将本机的代码拖进去,思前想后最终还是决定使用Vm;


4.Ubuntu的使用

网上的资料太多了,大量资料都不够官方,关于Ubuntu的常用指南可以参考右上角菜单栏的Ubuntu帮助

合理运用Ubuntu的帮助文档可以帮助你更快掌握其使用

Shell脚本(二)

本章主要参考Shell脚本:Linux Shell脚本学习指南(超详细) (biancheng.net)学习Linux下的Shell脚本(当然学了Linux的Shell脚本就基本上很容易理解Windows的Shell了)

——Shell入门——

1.Shell简介

  • shell是一个连接用户和Linux内核的程序,也是一门管理Linux系统的脚本语言(作为初学者我们简单认为shell就是shell script);

  • Shell命令行解释器为用户提供了一个向Linux内核发送请求以运行程序的界面系统程序

  • Shell脚本语言是一门编程语言,尽管无法媲美C++或者JAVA编程语言,但作为解释性语言,拥有其特定的优势;

下图是Unix/Linux系统结构,可以看出Shell在其中的作用

无论是Windows的图形界面还是Linux的命令行,其目的都是让用户控制计算机,而真正能够控制计算机的只有操作系统内核,命令行或图形化界面只是充当了用户和内核之间的中介;

其实我们之前学Linux的时候以及在Windows里面使用Shell装一些东西的时候,都使用到了Shell命令,而Shell命令的集合以及一些逻辑就集合成为了Shell编程语言(我个人认为学Linux就应该先学习Shell,不然就会像我一样,学完了Linux基本上啥也记不住,因为Linux就是需要Shell来操作的!!!)

可以看到,Shell可以管理的Linux服务相当多

Shell 脚本很适合处理纯文本类型的数据,而 Linux 中几乎所有的配置文件、日志文件(如 NFS、Rsync、Httpd、Nginx、MySQL 等),以及绝大多数的启动文件都是纯文本类型的文件,因此使用Shell来实现Linux系统的自动管理是非常方便的;

相较于现在大火的Python脚本语言,Shell 脚本的优势在于处理偏操作系统底层的业务,例如,Linux 内部的很多应用(有的是应用的一部分)都是使用 Shell 脚本开发的,因为有 1000 多个 Linux 系统命令为它作支撑

2.运行/调试脚本

这里主要介绍两种运行Linux中编写好的Shell脚本文件的方式:

  • 如果需要在新进程中运行 Shell 脚本,使用bash filename这种写法;

  • 如果在当前进程中运行 Shell 脚本,使用. filename这种写法

假如我们在开发过程中遇到脚本出现问题需要调试脚本(不是直接执行该脚本),可以使用sh命令

3.基本命令

3.1 pwd

pwd命令打印当前工作目录,默认情况下Ubuntu只会显示当前目录名而非整个路径,要判定当前的目录在文件系统内的确切位置选择ped命令;

3.2 cd

cd命令用于改变当前所处目录,路径名可以是绝对路径也可以是相对路径;

  • cd ..向上移动一级目录
  • cd ../..向上移动两级目录

3.3 ls

使用ls查看当前目录下的内容,ls命令可以添加大量选项

3.4 locate

如果直到某个文件或文件的名称可以使用locate搜寻,这将得到每一个包括搜寻条件的目录或文件

3.5 clear&reset

clear:清屏,清除当前页的显示,实质上是把终端显示向后翻了一页,没有真正的清屏,向前翻还可以看见历史内容【常用】

reset:清屏,清除显示区所有内容且历史输入也被清除了,这个是真正的清屏,清的非常彻底【用的少】

4.Shell技巧

4.1 Tab补齐

对于一些长文件名这个功能很有效,注意区分路径的大小写(d< tab >和D< tab >可能分别补全为drivers和Document),当目录下有相同前缀名的文件/目录时可能就会补全错误,同时如果tab没有自动补全说明没有该前缀文件;

4.2 命令行快捷键

上下键可以分别向后/向前遍历最近在当前终端输入的命令(至于windows下可能会遍历出其他shell的命令这个原理我不是很懂)

5.Shell变量

5.1 echo

echo用于显示变量的内容,为了区分变量,需要在其前面加上($),但是注意在设置变量值的时候直接用名称不要加符号;

5.2 env&set

env主要用于将目前系统中的主要变量读出来,而set可以将目前系统中所有的变量数据都读出来(系统默认变量+用户设定的变量)

5.3 export

当多个文件相互依赖/引用的时候,在第一个文件中使用export将一般自定义变量环境变量,这样可以省去将不同文件中的相同变量重复设定变量名的麻烦

5.4 unset

该命令直接将变量的内容抹除

——Shell基础——

6.变量

声明变量使用declare命令

Linux读书笔记(三)

本来是想读《鸟哥的Linux私房菜》,但是读了一下发现是真的不太适合(因为我已经有了一点基础了所以看这个书讲得太细会犯困),然后因为用Ubuntu比较习惯,所以选择了《Ubuntu Linux从入门到精通》

因为雨雀里面的内容主要都是针对CenOS的操作,而且直接命令行的方式来教授真的很难装进脑子,所以这里使用Ubuntu图形化界面辅佐命令行重新学习一边Linux操作系统相关概念

1.Ubuntu入门

1.1 Unix概述

Unix是一个强大的多用户、多任务操作系统,支持多种处理器架构。由于Uhix具有技术成熟,可靠性高、网络和数据库功能强,伸缩性突出和开放性好等特色,可满足各行各业的实际需要,特别能满足企业重要业务的需要,可以说它已经成为主要的工作站平台和重要的企业操作平台。

1.2 Linux概述

Linux是参考Unix开发并发展起来的一个类Unix操作系统,Linux操作系统是自由软件和开放源代码发展中最著名的例子。

  • Linux 可指操作系统的内核(严格来讲Linux这个词本身只表示Linux内核,但在实际应用上人们已经习惯了用Linux来形容整个基于Linux内核,并且搭配了各种人机界面,应用和服务软件的操作系统(也被称为GNU/Linux也就是Linux内核加GNU外围软件,即下面将要介绍的概念));
  • Linux可指Linux操作系统,这时,Linux是指一种计算机操作系统;基于上述组件的Linux软件(操作系统属于系统软件,Linux操作系统也被称为GNU/Linux)被称为Linux发行版。一般来讲,一个Linux发行套件包含大量的软件,比如软件开发工具、数据库、Web服务器(例如Apache),X-Window桌面环境(比如GNOME和KDE)和办公套件(比如OpenOffice.org)等;

1.3 Debian概述

Ubuntu的诞生离不开Debian,而Debian也是一个GNU/Linux操作系统;

Debian系统的特点主要有:

  • 灵活的升级方式:dpkg软件包管理工具搭配apt-get可以轻松管理Debian上的软件;
  • 开发人员免费解答;
  • 安装简单;

1.4 Ubuntu概述

Ubuntu上的所有软件几乎都是免费的,Ubuntu将这些软件分为四部分(称为“组件”)以反映不同的许可证和可用的支持级别:

  • main组件:符合Ubuntu版权要求的自由软件;
  • restricted组件;
  • universe组件;
  • multiverse组件;

Ubuntu默认的桌面环境采用GNOME X-Window —— 一个Unix和Linux主流桌面套件和开发平台;

2.Ubuntu体验

2.1 Ubuntu终端模式

要进入Ubuntu终端模式主要有两种方式:

  • 窗口模式下启动终端窗口组件
  • 全Shell环境:使用ctrl +alt +F1~F6Q切换六个控制台,使用ctrl+alt+F7回到窗口模式
    • 六个控制台可以同时登陆一个账户(tintoki);
    • tty可以简单理解为控制台,只要电脑不关机或者没有手动使用’exit’命令,加上图形窗口一共七个进程都不会挂,会一直保持当前状态;

2.2 root用户与sudo命令

sudo为superuser do“超级用户的工作”的简写;

默认情况下Ubuntu的root用户是停用的,一切与系统相关的指令都需要在其之前加上sudo,并输入密码确认(sudo的密码默认是系统安装过程中创建的第一个用户账号对应的密码),短时间内sudo会记住用户输入过的密码;

普通用户切换root用户权限使用使用’su root’命令或’sudo -i’命令(这两个命令的密码我不知道是不是一样的,因为我设置的tintoki和root密码相同没法区分),root用户切换为普通用户使用’exit’命令

3.X-Window介绍

X-Window是类Unix系统中图形操作界面标准用语(因为微软抢先注册了Windows这个标准,所以所有类Unix系统中只能用X-Window称呼),GNOME和KDE只是Linux系统中提供图形操作界面的两种解决方案,它们都使用X-Window这个标准来显示图形界面。Ubuntu系统,默认使用的是Gnome桌面环境;

X-Window是一个计算机图形/视窗系统,是一种用于Unix系统的标准GUI(图形化用户界面);

3.1 集成式桌面环境KDE

相较于微软如出一辙的图形界面,Linux用户可以随时改变图形界面,这就是所谓的“集成式桌面环境”,现在主要的两个是Gnome和KDE;

X-Window仅能负责桌面管理的工作,这些功能只是集成式桌面环境的一部分,集成式桌面环境更重要的作用是充当应用程序的统一界面;

KDE是最早用于Linux的GUI,是一个用于Unix工作站的网络透明的现代化桌面环境;

3.2 集成式桌面环境Gnome

Gnome作为KDE的替代品,属于GNU计划的一部分;

4.软件包管理工具

在Ubuntu中,应用程序的添加或删除一般是通过软件包管理器进行的。通过将软件的安装文件处理成为Ubuntu优化的预配置软件包,软件包管理器工具可以容易地安装和删除这些应用程序。根据用户交互方式的不同,Ubuntu主要有如下几种包管理工具:

Ubuntu中一次只能运行一个软件包管理应用程序,也就是不能在添加程序的同时还想更新Ubuntu

5.Vi/Vim编辑器

至于为什么要学习Vi/Vim文本编辑器,我们可以参考为什么很多程序员爱用 Vim? - 知乎 (zhihu.com)给出的答案,相较于用鼠标+键盘的敲代码模式,使用vim只需要键盘就能完成所有工作(某些情况下如shell中编程我们也只能用vim不能用notepad这种普通文本编辑器);

因为Vim是Vi的加强版,所以我们下面介绍的都是Vim文本文本编辑器;

现代编辑器基本上都是全屏编辑器(也就是全屏文档都可以通过移动光标来编辑),相对于打字机年代的行编辑器(这种编辑器的资料现在都基本上找不到了),Vim当然也是一种全屏编辑器;

Linux中的vim编辑器重要性类似于Windows下的记事本(其实Linux中也有类似于记事本的内置文本编辑器gedit);

5.1 工作模式

Vim有三种工作模式:

  • 一般模式:Vi处理文件时,一进入该文件,就是一般模式了。在这个模式中输入的任何字符皆被视为指令。可以使用方向键来移动光标,可以使用“删除字符”或“删除整行”来处理文件内容,也可以使用“复制”、“粘贴”来处理文件数据。
  • 文本写入模式:在一般模式中可以进行删除、复制、粘贴等操作,却无法进行编辑操作。要等到按下i.l.o.O.a,A.r.R等字母之后才会进入编辑模式。在文本写入模式下,键盘成了用户的打字机。Vi显示用户的输入。按键不被解释为命令执行,只是作为文本写入到用户的文件中。注意,通常在Linux中,按下上述字母时,画面的左下方会出现”INSERT或REPLACE”的字样,才可以输入任何字符到文件中。如果要回到一般模式,则必须要按下Esc键才可退出编辑模式。
  • 命令行命令模式:在一般模式中,输入:或/或?就可以将光标移到最下面的一行,在这个模式中,可以搜索数据,而且读取、存盘、大量删除字符、退出vim、显示行号等操作都是在此模式中实现的。

5.1.1 一般模式

使用’vim Filename’打开一个文件直接进入一般模式

5.1.2 文本写入模式

使用不同的字符进入文本写入模式稍有区别

这个模式下除了Esc外其他键都会被视作一般的输入键

5.1.3 命令行模式

该模式下:

  • wq表示保存并退出

  • q表示不保存退出,适用于打开文件看了一眼没有做任何修改

  • q!表示强制退出

其他常用命令

5.2 常用指令(一般模式)

需要注意vim编辑器中鼠标几乎没有任何作用

5.2.1 光标移动

下面介绍的光标移动快捷键都在一般模式下使用

  • 常规使用上下左右方向键使得光标向对应位置移动一个字符;可以结合数字键实现快速移动,如同时按下 5下箭头 则光标快速向下移动五个字符;

  • ctrl+移动键可以以字符之间的空格为分隔符移动光标;

  • 当然也支持整屏整页地移动

  • 其他特殊定位服务

5.2.2 删除指令

一般模式下

  • 第一个快捷键实际上在键盘上是同时依次按下d + shift + $

5.2.3 复制、粘贴

vim的复制指令是y,粘贴指令是p,但是因为仅仅用这两个指令受限太大了(比如我现在还不知道怎么复制一段选中的文本(因为我不知道怎么选中一段文本,尝试用鼠标是没用的 —— 块选择之后会介绍)),所以增加了一些更快捷的键组合

一般模式下

Linux下的复制还涉及缓冲区的概念,感兴趣可自行查阅;

5.2.4 重复、取消操作

. 表示重复上一次的编辑操作(当然也是在一般模式下,这里的编辑操作不包括移动光标和冒号:命令),重复多少次都可以

5.2.5 查找、替换

vim的查找是与正则表达式有关的

5.3 高级操作

5.3.1 块选择

之前介绍复制的时候说过只能复制一个字符(光标所在字符)的话未免太不方便了,当我们需要操作块时参考如下方式(Esc退出块选择)

  • 举例

就算开启了块选择也不要尝试使用鼠标去选择块,这种操作是徒劳的

5.3.2 排版

  • 一般模式下的排版

  • :set shiftwidth?可查看目前shiftwidth设置的值;
  • :set shiftwidth = n可重设为n个字符

  • 命令行模式下的排版

所谓居中,靠左,靠右,是参考textwidth(tw)的设定。如果没有设定tw.则默认为80,就是以80个字符的总宽度为标准来放置。当然也可以像sw一样马上重设默认值。

5.3.3 多文件交互

假如要将一个文件中的内容复制到另一个文件中,可以选择 vim 后面接多个文件同时打开,用如下快捷键切换编辑

5.3.4 多窗口

假如要对照两份文件,使用上面的多文件交互就不太可行了,

命令行模式下输入’:sp{filename}’其中filename可有可无(没有的话就出现两个窗口显示同一个文件)

6.文件系统

Ubuntu的基本目录结构如下

相对路径有四种符号表示法:

  • .表示当前目录
  • ..表示上级目录
  • ~表示用户主目录
  • -表示上一个使用的目录

6.1 常用命令

cd:改变目录位置

pwd:显示当前目录的绝对路径

ls:显示当前目录下的文件名称、属性等

cp:复制文件或目录

mv:移动文件或目录

rm:删除文件或目录

mkdir:创建目录

rmdir:删除目录

6.2 链接文件

尽管这一节并没有讲关于编译的知识,但是仍然是涉及链接的知识点,注意此处的链接和编译系统中的链接是两个不同的概念;

6.2.1 inode

首先需要知道每个文件系统(简单来说每个硬盘分区就是一个文件系统)都被分为两部分:

  • Block:存储数据

  • inode:索引节点,用于保存Block存储的数据的信息如文件大小、读写权限等

操作系统能够通过inode值快速找到相对应的文件(因为inode为每个文件建立了信息索引值)

在Linux中inode值相同的文件是硬链接文件(一个inode值可以对应多个文件)

6.2.2 硬链接和软链接

软链接相当于windows中的快捷方式:

  • 软链接又称为符号链接,指向的是路径;
  • 路径可以是另一个文件或者目录,也可以是不同文件系统的文件;

硬链接类似于Windows中的复制,但是与复制不同的是硬链接的文件之间存在同步机制 —— 一处的文件被修改会实时同步到另一处,一处的文件被删除不会影响另一处的文件:

  • 硬链接指向的是inode节点,相当于另一个文件(拥有不一样的名字、相同内容的文件);

  • 不允许给目录创建硬链接(只能给文件创建硬链接);

  • 只有在同一文件系统中的文件之间才能创建链接;

软链接和硬链接异同:

  • 相同点:文件都会同步改变,都可以使用rm工具来删除;

  • 不同点:软链接指向源文件地址,不占用资源;硬链接复制文件,占用资源倍增;

6.3 查看文件内容

Linux提供了不同的查看文件的命令(本节内容在书P250页)

6.4 文件权限

Linux的每个文件和目录都有访问许可权限,文件或目录的访问权限分为可读、可写和可执行三种

有三种不同类型的用户可以对文件或目录进行访问:

  • 文件所有者
  • 同组用户
  • 其他用户

因此组合可得到文件或目录的权限位有9位,3位一组,共三组:

  • 属主权限位
  • 用户组权限位
  • 其他用户权限位

如果权限位不可读、不可写、不可执行则使用-表示

6.5 文件归档和压缩

  • 归档文件:文件和目录的集合,该集合被存储在一个文件中,也就是归档文件(这个概念在Windows下不常使用),文件大小等于集合的大小并未压缩;
    • 常见归档类型有tar.gz tar zip jar war等;
    • 关于Shell归档指令可查阅书籍P277;
  • 压缩文件:文件和目录的集合,且该集合同样被存储在一个文件中,但采用了压缩技术处理;
    • 使用不同的压缩工具会产生不同的压缩文件后缀名;
    • 关于Shell压缩指令可查阅书籍P273;

7.进程管理

Linux是一个多用户多任务的操作系统:

  • 多用户是指多个用户可以在同一时间使用计算机系统;
  • 多任务是指可以同时执行多个任务,可以在未执行完成一个任务时又同时执行另一个任务;

关于进程的知识点可以参考操作系统的教程,Linux系统有三种不同类型的进程:

  • 交互进程:由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
  • 批处理进程:这种进程和终端没有联系,是一个进程序列。
  • 守护进程:Linux系统启动时启动的进程,并在后台运行。

一个正在执行的进程称为一个作业,而一个作业可以包含多个进程(尤其是使用了管道和复位向命令),大多数情况下用户在同一时间只运行一个作业,但使用作业控制用户可以同时运行多个作业并可以在这些作业之间进行切换;

  • 进程:系统进行资源分配和调用的基本单位(低级调度),进程的概念用于几乎所有的多道程序系统中;
  • 作业:是用户需要计算机完成的某项任务,是要求计算机所做工作的集合(高级调度),作业的概念用于批处理系统;

7.1 前后台工作管理

每个进程都可以两种方式存在:前台进程(Foreground)和后台进程(Background)

  • 前台也就是用户当前窗口看见正在执行的进程;
  • 后台进程则是当前窗口看不见,但是在系统中实际运行的程序。

如果用户使用命令终端来进行工作,而又不喜欢同时开启多个命令终端窗口,这个时候就需要使用到前后台工作管理的一些命令,详情可见书P360


Linux
https://gintoki-jpg.github.io/2022/06/27/通识_Linux/
作者
杨再俨
发布于
2022年6月27日
许可协议