第0章 Linux基础入门
什么是计算机
计算机的组成:
-
控制器,是整个计算机的中枢神经,根据程序要求进行控制,协调计算机各部分工作及内存与外设的访问等。
-
运算器,功能是对数据进行各种算术运算和逻辑运算。
-
存储器,功能是存储程序、数据和各种信号、命令等信息。
-
输入设备,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标等。
-
输出设备,它把计算机计算后的信息输出出来。常用的输出设备有显示终端、打印机、绘图仪等。
计算机的功能:
-
接收输入设备的指令和数据,经过cpu的数据和逻辑运算处理产生有用的信息存储起来或者输出到屏幕上。
-
那么我们的计算机所接受到的指令和数据都是什么样的呢?
-
其实我们的计算机只认识0,1代码。早期对计算机的全部操作都是采取人工操作方式进行的,早期的操作方式是由纸带或卡片打孔和没打孔来代替0和1输入计算机来实现一些功能的,就相当于是直接使用机器语言让计算机工作。但是使用机器语言去操控计算机有几个缺点:
- 需要了解机器语言。
- 需要了解所有硬件的相关功能函数。因为你的程序必须要写给机器看,你就得去参考机器本身的功能,然后针对该功能去编写程序代码。例如你要让DVD影片能够放映,那就得要参考DVD光驱的硬件信息。看参考手册是很费劲的。
- 程序不具有可移植性。每个CPU都有独特的微指令集,同样,每个硬件都有其功能函数。
- 程序具有专一性。因为这样的程序必须要针对硬件功能函数来编写,如果已经开发了一个浏览器程序,想要再开发文件管理程序时,还得要从头参考硬件的功能函数来继续编写。
-
为了解决这几个问题,计算机科学家就设计出一种让人类看得懂的程序语言,然后创造一种“编译器”来将这些人类写的程序语言翻译成机器能看懂的机器码。这样一来我们修改与编写程序就变得容易多了。目前常见的编译器有C,C++,JAVA等。
-
但是,在这样的环境下我们还得要考虑整体的硬件系统来设计程序。举例来说:当你需要将运行的数据写入内存中,你就得要自行分配一个内存块出来让自己的数据能够填上去,所以你还得要了解到内存的地址是如何定位的。为了要克服硬件方面老是需要重复编写句柄的问题,所以就有了操作系统。
操作系统简介
操作系统是什么?
- 操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,向用户提供系统设备接口及使用界面,是配置在计算机硬件上的第一层软件,任何其它软件都必须在操作系统的支持下才能运行。
操作系统功能
功能:
- 操作系统的主要工作是由操作系统内核实现的,操作系统内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用的接口(应用编程接口API,由操作系统实现提供的所有系统调用所构成的集合,是应用程序和系统之间的接口)呈现给用户。
组成:
- 宏观:
- 微观
操作系统内核的功能
-
系统调用接口:程序员通过该接口与内核进行通信
-
进程管理:计算机可能同时有很多的工作在等待CPU运算处理,内核这个时候必须要能够控制这些工作,让CPU的资源做有效的分配才行。
-
内存管理:控制整个系统的内存管理,系统所有的程序代码与数据都必须要先存放在内核当中。通常内核会提供虚拟内存的功能,当内存不足时可以提供内存交换的功能。
-
文件系统管理 :例如数据的输入和输出等的工作,还有不同文件格式的支持等。
-
设备驱动:硬件的管理是内核的主要工作之一,设备的驱动程序就是内核管理着硬件的代码,设备的驱动程序可以使硬件准备好工作,时刻等待着程序的调用。好在目前都有所谓的“可加载模块”功能,可以将驱动程序编辑成模块,就不需要重新编译内核。
常见的操作系统
- UNIX、Linux类、MacOS、Windows类、iOS、Android、ChromeOS等等
Linux 入门
开源共享精神
- 开源软件的特点就是把软件程序与源代码文件一起打包提供给用户,让用户在不受限制地使用某个软件功能的基础上还可以按需进行修改,或编制成衍生产品再发布出去。
- 用户具有使用自由、修改自由、重新发布自由以及创建衍生品的自由。这也正好符合了黑客和极客对自由的追求,因此国内外开源社区的根基都很庞大,人气也相当高。
开源软件最重要的特性
-
低风险:使用闭源软件无疑把命运交付给他人,一旦封闭的源代码没有人来维护,你将进退维谷;而且相较于商业软件公司,开源社区很少存在倒闭的问题。
-
高品质:相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户量众多,一般的bug还没有等爆发就已经被修补。
-
低成本:开源工作者都是在幕后默默且无偿地付出劳动成果,为美好的世界贡献一份力量,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力。
-
更透明:没有哪个笨蛋会把木马、后门等放到开放的源代码中,这样无疑是把自己的罪行暴露在阳光之下。
-
但是,如果开源软件为了单纯追求“自由”而牺牲程序员的利益,这将会影响程序员的创造激情,因此世界上现在有60多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益。
-
对于那些只知道一味抄袭、篡改、破解或者盗版他人作品的不法之徒,终归会在某一天收到法院的传票。
-
对于准备编写一款开源软件的开发人员,也建议先了解一下当前最热门的开源许可协议,选择一个合适的开源许可协议来最大限度保护自己的软件权益。
著名的开源许可协议
- GNU GPL(GNU General Public License,GNU通用公共许可证):只要软件中包含了遵循GPL协议的产品或代码,该软件就必须也遵循GPL许可协议且开源、免费,因此这个协议并不适合商用软件。遵循该协议的开源软件数量极其庞大,包括Linux系统在内的大多数的开源软件都是基于这个协议的。GPL开源许可协议最大的4个特点如下所示。
- 复制自由:允许把软件复制到任何人的电脑中,并且不限制复制的数量。
- 传播自由:允许软件以各种形式进行传播。
- 收费传播:允许在各种媒介上出售该软件,但必须提前让买家知道这个软件是可以免费获得的;因此,一般来讲,开源软件都是通过为用户提供有偿服务的形式来盈利的。
- 修改自由:允许开发人员增加或删除软件的功能,但软件修改后必须依然基于GPL许可协议授权。
- BSD(Berkeley Software Distribution,伯克利软件发布版)许可协议:用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足下面3个条件:
- 如果再发布的软件中包含源代码,则源代码必须继续遵循BSD许可协议。
- 如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原始代码遵循了BSD协议。
- 不允许用原始软件的名字、作者名字或机构名称进行市场推广
- Apache许可证版本(Apache License Version)许可协议:在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。该许可协议适用于商业软件,现在热门的Hadoop、Apache HTTP Server、MongoDB等项目都是基于该许可协议研发的,程序开发人员在开发遵循该协议的软件时,要严格遵守下面的4个条件:
- 该软件及其衍生品必须继续使用Apache许可协议。
- 如果修改了程序源代码,需要在文档中进行声明。
- 若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息。
- 如果再发布的软件中有声明文件,则需在此文件中标注Apache许可协议及其他许可协议。
-
MPL(Mozilla Public License,Mozilla公共许可)许可协议:相较于GPL许可协议,MPL更加注重对开发者的源代码需求和收益之间的平衡。
-
MIT(Massachusetts Institute of Technology)许可协议:目前限制最少的开源许可协议之一,只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用。
Linux的诞生
Multics计划
- 上世纪六十年代,人们还在用批处理计算机,也就是一次性给一批任务到计算机,然后等待结果,中途不能和计算机进行交互,而且准备作业需要耗费大量时间。
- 于是1965年,贝尔实验室(Bell),麻省理工学院(MIT)和通用电气(GE)准备联手开发“分时多任务处理系统”,即300台以上终端机可以同时连接一台大型计算机进行作业,并取名为Multics(Multiplexed Information and Computing System,多路信息计算系统)。
- 但由于项目进度落后,资金短缺,1969年,贝尔实验室放弃了这个项目,决定退出(后来Multics成功开发完成,尽管没有再被重视)。
Unix的诞生与打飞机游戏
- 调回到贝尔实验室的工程师看到费时的批处理机器,十分怀念先进的Multics。
- 一位工程师Ken Thompson在研发Multics的时候,写了一个叫太空大战(SpaceTravel),是飞机发射子弹那种类型的游戏,然而这个游戏只能运行在Multics上面,他很想要移植这个游戏继续玩。
- 1969年8月,Thompson在库房发现了一台闲置的PDP-7,刚好此时休假并且妻儿都去加利福尼亚探亲度假去了,经过四个星期的努力,用BCPL(Basic Combined Programming Language,基本组合编程语言)汇编语言编写了一组内核程序,还包括内核工具程序,以及一个小的文件系统。
- 完成之后,Thompson激动地把身边的同时叫过来,让他们来玩他的游戏。由于这个系统是由Multics简化而来,同事们就戏称这个系统为"UNiplexed Information and Computing Service”,即没路信息计算系统,缩写为Unics,取其谐音Unix。
- 这时已经是1970年了,于是就将1970年定为Unix元年,现代计算机的计时也就是这个时候开始的。
Unix的发展
- Unix实在太好用了,这套系统在Bell实验室广为流传。但Unix是用汇编语言写的,高度依赖硬件,于是Thompson和Dennis Ritchie合作准备用更高级的语言改写,提高可移植性。
- Thompson改进了BCPL,称为B语言,然而这套语言在内存方面有限制,一筹莫展。又和Ritchie尝试了Pascal,发现编译出来的内核性能并不好。最终Ritchie决定再对B语言进行改进,成为了大名鼎鼎的C语言,重新改写了Unix。
- 1974年7月,Bell实验室公开了Unix,引起了学术界的广泛讨论,并大量应用于教育目的。1978年学术界老大伯克利大学,推出了以Unix第六版为基础并加入改进的新Unix,并命名为BSD(Berkeley Software Distribution伯克利分发版),于是Unix的分支BSD系列就诞生了。
- 由于Unix的高度可移植性与强大的性能,加上当时并没有版权的纠纷,所以让很多商业公司开始了Unix操作系统的开发。
- 然而当时Bell属于AT&T,AT&T被《谢尔曼反托拉斯法》规定了不能销售除了电话机电报机等之外的商品,后来随着AT&T的分解,Bell可以卖出Unix了,第七版Unix明确提出“不可对学生提供源码”,Unix走向了商业化。
Minix操作系统
- Unix进行了商业化,教师们都用不起了,高昂的授权费导致很多大学停止了对Unix的研究。
- 1987年,身为ACM和IEEE两会资深会员的荷兰数学与计算机科学系统教授Andrew S. Tanenbaum开发了Minix操作系统,是Unix的缩小版,用于学生学习操作系统原理,很多技术大牛希望改进Minix,但遭到了AST教授的丑拒,他认为Minix就是为了教学,让学生一学期学完,并不想被加入杂乱的东西。
GNU计划
- Richard M.Stallman看不惯版权收费,于1984年创立自由软件体系GNU(Gun is Not Unix),拟定了普遍公用版权协议(General Public License,GPL),所有GPL协议下的自由软件都遵循着Copyleft(非版权)原则:自由软件允许用户自由拷贝、修改和销售,但是对其源代码的任何修改都必须向所有用户公开 。
- GNU希望开发一个类似UNIX并且是自由软件的完整操作系统——GNU系统。
- 到90年代初,GNU项目开发出许多高质量的免费软件,包括emacs编辑器、bash shell程序、gcc系列编译程序、gdb调试程序。
POSIX标准
- POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准,该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植和运行。
Linux终于诞生了
-
此时,IBM公司开发的MS-DOS操作系统、Apple公司开发的Mac操作系统,Unix操作系统,Minix操作系统全都要收费。
-
GNU尽管已经开发出最受期盼的GNU C编译器,开发的操作系统却进度缓慢,渴求诞生一款自由软件操作系统来证明自己存在的价值。
-
与此同时,芬兰赫尔辛基大学的在校生Linus Benedict Torvalds(林纳斯·本纳第克特·托瓦兹)利用圣诞的压岁钱和贷款购买了一台386兼容电脑,并从美国邮购了一套Minix系统软件,在等待邮寄到达的期间,Linus认真学习了有关Intel 80386的硬件知识。
-
为了能通过Modem拨号连接到学校的主机上,他使用汇编语言并利用80386CPU的多任务特性编制出了相关程序。甚至为了将老式电脑的软件复制到新电脑上,为一些硬件编写了驱动程序。
-
Linus逐渐认识到了Minix的诸多限制,产生了自己编写一个新的操作系统的想法。1991年4月,Linus花费了全部时间研究Minix-386系统,并尝试移植GNU的gcc、bash、gdb到新系统上。
-
1991年4月13日,Linus在comp.os.minix上发布信息说自己成功将bash移植到了Minix上,而且已经爱不释手,离不开这个shell软件了。
-
1991年7月3日,Linus在comp.os.minix上透露了正在进行Linux系统的开发,并已经开始考虑POSIX的兼容了。
-
1991年8月25日,Linus在comp.os.minix上发布了“What would you like to see in minix?”,透露出正在开发一个免费的386操作系统,新开发的系统会移植bash和gcc,并且声明他开发的操作系统没有用一行Minix的源代码。
-
1991年10月5日,Linus在comp.os.minix上发布消息,正式向外宣布Linux内核诞生(Free minix-like kernel sources for 386-AT)。Linux遵循GPL协议,也给GNU运动送上了一份最好的礼物。Linux提供内核,GNU提供外围软件,GNU/Linux就成了密不可分的体系。
-
此时时间线为1991年,他才22岁,如果说 Linux 是为了“自私”目的诞生的产物,想必很多人都会先嗤之以鼻。但其实 Linux 诞生之初,确实只是为了满足个人需求。
Linux的特点
- Linux因其高效率、稳定、易于裁剪、应用广等优势,成为了当今中高端服务器的主要操作系统,并且处于一个不可替代的地位。
- Linux与windows的对比
-
Linux成为开源软件的代名词
- 陪伴互联网时代的7大开源软件
- 加密互联网的安全协议OpenSSL
- 数据仓库大王–MySQL
- 万能开发工具Eclipse
- 互联网的门卫Apache
- 大数据的心脏Hadoop
- 互联网的排版引擎WebKit
- 陪伴互联网时代的7大开源软件
-
Linux在服务器领域发展良好,尤其在政府、金融、农业、交通、电信等国家关键领域已经形成了大规模的市场应用
-
Linux在桌面领域的发展良好,国内如中标麒麟Linux、红旗Linux、深度Linux等系统软件厂商都推出的Linux桌面操作系统,另外SUSE、Ubuntu也相继推出了基于Linux的桌面系统,特别是Ubuntu Linux,已经积累了大量社区用户
-
Linux的低成本、强大的定制功能以及良好的移植性能,使得Linux在嵌入式系统方面也得到广泛应用,目前Linux以广泛应用于手机、平板电脑、路由器、电视和电子游戏机等领域。
-
Linux在云计算/大数据领域的发展互联网产业的迅猛发展,促使云计算、大数据产业的形成并快速发展
-
结论:linux具有:
- 源代码开放
- 真正的多用户多任务
- 完全兼容POSIX标准
- 强大的可移植性
- 丰富的网络功能
- 良好的用户界面
- 可靠的系统安全
- 高度的稳定性
Linux的应用领域
- 服务器领域
- 桌面应用领域
- 嵌入式系统
- 集群、虚拟化、云计算、大数据平台基石
常见的Linux版本介绍
发行版本构成:
- Linux系统内核( Kernel ):是由Linux Torvalds 负责维护,提供硬件抽象层、硬盘及文件系统控制及多任务的系统核心程序
- 内核功能组成:进程管理、定时器、中断管理、内存管理、模块管理)虚拟文件系统接口、文件系统、设备驱动程序、进程间通信、网络管理、系统启动等操作系统功能的实现
- Linux 内核下载:https://www.kernel.org/
- Linux发行套件系统:将Linux系统的内核与外围实用程序(Utilities)软件和文档包装起来,并提供一些系统安装界面和系统配置、设定与管理工具,就构成了一种发行版本
- Linux的发行套件系统其实就是Linux核心再加上外围的实用程序组成的一个大软件包
根据GPL准则,市面流行的发行套件系统虽然都源自一个内核,并且都有自己各自的贡献,但都没有自己的版权,如:
发行版本介绍:
RHEL
- RedHat Enterprise Linux)(简称为RHEL):全球最大的开源技术厂商,全世界内使用最广泛的Linux发布套件,提供性能与稳定性极强的Linux套件系统并拥有完善的全球技术支持。
- REHL在国内大多数企业的服务器上使用,REHL可以免费下载使用,但后续系统部署、升级、维护、故障等都需要购买授权协议即购买服务,在学习Linxu中使用RHEL,会出现一系列的小问题,如YUM工具不免费等问题
- Red hat Linux
- 最新版:Red Hat Enterprise Linux 9.1
- 派生版: CentOS 、Scientific Linux、Oracle Linux
Centos
- 社区企业操作系统(Centos):最初是将红帽企业系统“重新编译/发布”给用户免费使用,Centos系统与REHL系统完全一致。
- 在没有RHEL授权的情况下使用Centos系统更加方便
- 国内使用Centos系统企业越来越多
- 可以使用RHEL不能使用的小工具,如YUM下载.
- 现今Centos系统已经被Red Hat公司收购,且依然免费
红帽用户桌面版(Fedora)
- 最初由红帽公司发起的桌面版系统套件(目前已经不限于桌面版)
- 用户可免费体验到最新的技术或工具,而功能成熟后加入到RHEL中。
- Fedora也是RHEL系统新技术的试验田
基于Debian的桌面版—Ubuntu(乌班图)
- Ubuntu是一款基于Debian派生的产品,对新款硬件具有极强的兼容能力。
- 普遍认为Ubuntu与Fedora都是极其出色的LINUX桌面系统
中标麒麟
- 2010年由两大国产操作系统——民用的“中标Linux” 和解放军研制的“银河麒麟”操作系统,在上海宣布合并
- 特点
- 安全性较高
- 完善的中文支持
- 支持农历查询
- 安全的云服务
- 广泛应用于中国企业及政府部门
Linux认证
红帽Linux认证
简介
- 红帽公司成立于1993年,总部位于美国,分支机构遍布全球,是全球首家收入超10亿美元的开源公司。红帽公司作为全球领先的开源和Linux系统提供商,其产品已被业界广泛认可并使用,尤其是RHEL系统在业内拥有超高的Linux系统市场占有率。
- 当前,红帽公司除了提供操作系统之外,还提供了虚拟化、中间件、应用程序、管理和面向服务架构的解决方案。
- 关注国际时事或炒股的同学一定很熟悉标准普尔500指数,在标准普尔公司选择的这500支股票中,由400支工业股票、20支运输业股票、40支公共事业股票以及40支金融业股票共同组成,它们联合反映了美国国家的经济情况,其中红帽公司就在其中(代码:RHT)。
- 红帽认证是由红帽公司推出的Linux认证,该认证被认为是Linux行业乃至整个IT领域价值最高的认证之一。
- 红帽认证考试全部采用上机形式,在考察学生基础理论能力的同时还考察了实践动手操作和排错能力。红帽公司针对红帽认证制定了完善的专业评估与认证标准,其认证主要包括红帽认证系统管理员(RHCSA)、红帽认证工程师(RHCE)与红帽认证架构师(RHCA)。
- 2014年6月10日,红帽公司在发布新版红帽企业版系统(RHEL 7)的当天即在红帽英文官网更新了其对培训政策的调整,原先的红帽认证技术专家(RHCT)被RHCSA替代,彻底退出历史舞台。考生只有先考试通过RHCSA认证后才能考取RHCE认证(一般是在一天的上下午分别完成)。
认证构成
名称释义
- RHCSA英文全称:Red Hat Certified System Administrator ,中文全称:红帽认证系统管理员
- RHCE英文全称:Red Hat Certified Engineer,中文全称:红帽认证工程师
- RHCA英文全称:Red Hat Certified Architect,中文全称:红帽认证架构师
- RHCSS英文全称:Red Hat Certified Security Specialist,中文全称:红帽认证安全专家
- RHCDS英文全称:Red Hat Certified Datacenter Specialist ,中文全称:红帽认证数据中心专家
- RHCVA英文全称:Red Hat Certified Virtualization Administrator,中文全称:红帽企业虚拟化管理
- 红帽 OpenStack 认证工程师
- 红帽 OpenStack 认证系统管理员
搭建Linux学习环境
如何安装linux操作系统:
-
安装独立的Linux系统,不再安装其他操作系统。
-
安装Windows与Linux并存的多操作系统,启动时通过菜单选择要启动的操作系统。
-
在虚拟机中安装Linux操作系统。
-
本次学习采用第三种方式,在虚拟机中安装linux操作系统。
创建虚拟机
下载
-
先下载vmware workstation pro软件,下载地址:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
-
下载完成后,退出所有的安全软件,并安装该软件。安装完成后需要激活,激活完成后打开该软件。
创建虚拟机实例
- 文件菜单->新建虚拟机->典型->下一步
- 稍后安装操作系统
- 选择安装类型
- 设置存储路径及名称
- 设置磁盘容量及存储文件方式
- 自定义硬件进行配置
- 内存2GB
- cpu设置:
- 设置镜像文件加载路径:重要
- 网络设置:NAT
- 显示器设置:取消3D支持
- 点击关闭后完成
安装RHEL9.1
- 鼠标点进去,用键盘选择第一项,Install Red Hat Enterprise Linux 9.1。等待界面加载完成
- 进入安装向导,选择安装时的语言,这个随意,本人习惯使用英文。点击Continue(下一步)
- 图示为每一项的中文意思,KDUMP是一个系统崩溃时收集信息的工具,如果系统用于练习则不需要开启。
- 磁盘分区管理
根分区使用剩余所有空间,空间大小不填
- 设置root账户密码,如果设置的密码为弱密码,则需要点两次确定
- 安装之前还需要为Root用户设置密码(如果设置的密码为弱密码,则需要点两次确定。)
- 直接点击Begin Installation(开始安装)
- 安装成功后点击Reboot(重启)
- 重启后进入设置界面,点击start setup开始设置。
- 根据提示进行设置,并设置普通用户的用户名及密码
RHEL部署完毕之后的设置
关闭锁屏
- 活动->设置->隐私->锁屏
打开终端
- 活动->终端
安装远程连接linux的软件
- 安装xshell:打开链接https://www.xshell.com/zh/free-for-home-school/,填上你的邮件地址和姓名,软件下载地址会通过邮件发送。
配置xshell进行远程登录
- RHEL9.1终端中查看本机IP:ip address
- xshell中选择文件菜单->新建->打开设置向导
- 名称:自定
- 主机:RHEL9.1的IP地址
- 点击连接输入root(记住用户名打钩)及密码(记住密码打钩)
关闭防火墙及SELinux
[root@server ~]# systemctl stop firewalld # 临时关闭[root@server ~]# systemctl disable firewalld # 取消开机启动[root@server ~]# setenforce 0 # 临时关闭,重启失效
设置主机名
[root@server ~]# hostnamectl set-hostname 新主机名
[root@server ~]# reboot # 重启系统
制作快照
-
vmware设置->虚拟机菜单->快照->拍摄快照->命名(见名知意)->拍摄快照->等待左下角进度跑完
-
恭喜你!!!到此所有的软件安装、操作系统的安装过程就结束了
常见快捷键命令
快捷键 | 作用 |
---|---|
tab | 单词补全 |
ctrl+c | 终止当前任务 |
ctrl+l | 清屏 |
ctrl+insert | 复制 |
shift+insert | 粘贴 |
ctrl+shift+= | 放大字号 |
ctrl± | 缩小字号 |
ctrl+z | 终止进程 |
正确的关机与重启
- 重启:reboot
- 关机:shutdown now
linux操作系统学习大纲
第一章 简单使用linux
Linux的组成
-
Linux内核:内核是系统的核心,是运行程序和管理 像磁盘和打印机等硬件设备的核心程序。
文件系统: 文件存放在磁盘等存储设备上的组织方法。Linux能支持多种目前浒的文件系统,如ext4、FAT、VFAT、ISO9660、NFS、SMB等。 -
Shell:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
-
应用程序:包括文本编辑器、编程语言、X Window、办公套件、Internet工具、数据库等。
-
Linux的操作界面常称为Shell,Shell是操作系统提供给用户使用的界面(图形、字符),它提供了用户与内核进行交互操作的一种接口。当用户发出指令(命令或鼠标操作),先将这些指令发送给Shell,由Shell将用户的指令翻译后传送给内核,再由内核来控制硬件的工作。然后内核将硬件的工作情况发送给Shell,并由Shell返回硬件的工作信息和情况。
-
Shell的分类:
- 图形界面的Shell :KDE、GNOME
- 字符界面的Shell:bash等
使用桌面终端访问linux
终端
- 终端:也称为终端设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等。
- 在活动中选择终端
- 虚拟终端:同一台终端(物理设备)上虚拟出多个终端,它们之间互相不影响,这些终端就是虚拟终端,默认有6个,可通过ctrl + alt +f[1/2/3/4/5/6]来进行切换。
shell命令提示符
- 例:[root@localhost ~]#
- root :当前登录的账户名,root为管理员
- localhost:主机名,默认为localhost
- ~ :该位置表示当前工作目录,~表示/root(普通账户 ~ :/home/普通账户名)
- 提示符标志:#或$ ,表示账户身份,#表示root,$表示普通账户
使用命令操作linux系统
-
在终端窗口上输入命令,命令的格式:
主命令 参数 操作对象
-
查看当前linux的发行版信息
[root@server ~]# cat /etc/redhat-release
Red Hat Enterprise Linux release 9.1 (Plow)
# Plow时RHEL9的代号
- 查看内核版本
[root@server ~]# uname -r
5.14.0-162.6.1.el9_1.x86_64
# 分析
5 - 内核版本.
14 - 主修订版本.
0-162 - 次要修订版本.
6.1 - 补丁版本.
x86_64 - 适用平台
- 查看shell的类型
# 方法1:
[root@server ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash# 方法2:
[root@server ~]# chsh -l
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
- 查看当前默认的shell
[root@server ~]# echo $SHELL
/bin/bash
- 查看网卡信息以及获取ip地址
#查看ip地址
[root@server ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:c1:d9:32 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.48.130/24 brd 192.168.48.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fec1:d932/64 scope link noprefixroute valid_lft forever preferred_lft forever#注:lo网卡是环回网卡,主要用来本地测试;ens160才是我们远程连接的网卡。
切换目录–cd
- 更改当前的工作目录,即切换目录
- 绝对路径(以/开始的路径)
- 相对路径(以当前工作目录开始的路径)
[root@server ~]# cd /
[root@server /]# cd /root
[root@server ~]# cd /home
[root@server home]# cd ~
[root@server ~]# cd /etc
[root@server etc]# cd ..
[root@server /]# cd .
查看当前的工作目录–pwd
[root@server ~]# pwd[root@server ~]# su - fox[centos@server ~]$ pwd
/home/centos
# 注意:windows和linux系统的目录路径表示的不同
浏览目录内容–ls
[root@server ~]# ls
公共 模板 视频 图片 文档 下载 音乐 桌面 anaconda-ks.cfg
[root@server ~]# ls /
afs bin boot dev dvd.repo etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
修改密码–passwd
[root@server /]# passwd
更改用户 root 的密码 。
新的密码:
无效的密码: 密码少于 8 个字符
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server /]# passwd fox
更改用户 fox 的密码 。
新的密码:
无效的密码: 密码未通过字典检查 - 太简单或太有规律
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server /]# passwd -d fox # 清除fox账户密码
清除用户的密码 fox。
passwd: 操作成功
重置root密码
方法1:rd.break
- 第1步 重启系统,在下图所示界面按e键,在屏幕上显示内核启动参数
- 第2步 找到linux这行,末尾空格后 输入 rd.break,然后按ctl+x
- 第3步 以读写方式挂载/sysroot
- 第4步:设置密码
- 第6步 强制重置文件系统的上下文
- 第7步退出,输入2次exit
- 系统会在此处稍微卡一会后进入正常登录界面。
方法2:init方法
-
第1步:启动系统,并在GRUB2启动屏显时,按下e键进入编辑模式
-
第2步:在linux所在参数行尾添加以下内容:
- 将ro修改为rw
- 末尾添加init=/bin/sh
-
第3步:按Ctrl+x启动到shell
-
第4步:运行passwd,并按提示修改root密码或者使用如下命令修改密码:
echo "pwd" | passwd --stdin root
- 第5 步:重置文件系统上下文
touch /.autorelabel
- 第6步:运行命令exec /sbin/init来正常启动,或者用命令exec /sbin/reboot重启
通过远程软件操控服务器
安装xshell
- 打开链接https://www.xshell.com/zh/free-for-home-school/,填上你的邮件地址和姓名,软件下载地址会通过邮件发送。
配置xshell进行远程登录
- RHEL9.1终端中查看本机IP:ip address
- xshell中选择文件菜单->新建->打开设置向导
- 名称:自定
- 主机:RHEL9.1的IP地址
- 点击连接输入root(记住用户名打钩)及密码(记住密码打钩)
xshell中使用命令连接服务器
- 格式:ssh root@服务器IP地址
- 如图:
- 输入用户名及密码
使用xftp上传文件
- xftp是一款xshell自带的文件上传下载工具
- 用法:点击按钮进入xftp,左边为windows,右边为linux,通过鼠标拖拽上传下载
-
注意
- 文件目录位置
- 进入上传下载的进度条,完毕后才可关闭软件
- 若无法上传,注意权限
-
例:将默认的yum源修改为阿里的yum源仓库
-
第一步:预处理上传阿里yum源配置文件到/etc/yum.repos.d目录,
-
[root@server ~]# cd /etc [root@server etc]# rm -rf yum.repos.d [root@server etc]# mkdir yum.repos.d [root@server etc]# cd yum.repos.d
-
第二步:使用xftp上传阿里yum配置文件到/etc/yum.repos.d目录
-
第三步:重建缓存,注意保持网络畅通
-
[root@server yum.repos.d]# yum makecache
-
练习
- 重新安装系统,完成系统设置,制作快照
- 虚拟机:典型->稍后安装操作系统->设置系统类型(Linux、RHEL9)->设置虚拟机名称(RHEL9_server)和存储路径->磁盘存储为单个文件->自定义硬件:
- 内存:2G
- cpu:1颗,2核心
- CD/DVD:使用ISO映像文件,设置文件路径
- 网卡:NAT模式
- 显示器:去掉3D加速支持
- RHEL9系统安装要求:
- 硬盘分为三个分区:/boot 400M swap 4G / 剩余空间
- 去掉KDUMP对钩
- 设置root密码(123456),需要勾选ssh支持(第二个)
- 系统设置
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl disable firewalld
[root@server ~]# setenforce 0
[root@server ~]# hostnamectl set-hostname 新主机名
[root@server ~]# reboot# 修改yum源为阿里源# 制作快照:vmware设置->虚拟机菜单->快照->拍摄快照->命名(见名知意)->拍摄快照->等待左下角进度跑完
第二章 linux中执行命令
命令格式
命令分为两类
- 内置命令:由shell程序自带的命令
- 外部命令:有独立的可执行程序文件,文件名即命令名
格式
主命令 参数 操作对象# 注意:
下面是对于命令的语法的一些符号的说明:
[] :表示的是可选
...: 表示的可以存在多个参数
|表示是可选的
<>:必填
{}:表示作为一个整体存在的
分析
参数
-
指定命令的运行特性,指明要运行命令中的哪一个功能代码。
-
短选项:例如:-l,-d,如果同一命令同时使用多个短选项,多数可合并。【注:有些命令的选项没有-】
-
长选项:例如–help,–human-readable
操作对象
-
作用:命令的作用对象,即命令对什么生效。
-
有些命令可同时带多个操作对象,多个操作对象之间以空白字符分隔
注意:
-
终止当前的命令:按【Ctrl+C】键可中断正在执行的命令
-
两种补全:
- 补全命令:输入命令关键字的前几个字符后,按Tab键,可实现命令自动补全
- 补全文件名和目录名:输入文件的前几个字符后,按tab键可自动补全
-
例:访问网卡配置文件
[root@server ~]# vim /etc/NetworkManager/system-connections/ens160.nmconnection
查看命令帮助
查看bash内部命令帮助
[root@server ~]# help cd
命令 --help
[root@server ~]# cat ——help
示例如下:cat [OPTION]... [FILE]... 表明cat后面可以加上多个可选的选项以及多个可选的文件参数
man
- man命令用来提供在线帮助,使用权限是所有用户。
- 使用man命令可以调阅其中的帮助信息,非常方便实用。
man command
[root@server ~]# man ls
- 在man命令帮助信息的界面中,所包含的常用操作按键如下:
按键 | 作用 |
---|---|
空格键,PaGe down | 向下翻一页 |
PaGe up,b | 向上翻一页 |
home | 直接前往首页 |
end | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如“/linux” |
? | 从下至上搜索某个关键词,如“?linux” |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
q | 退出帮助文档 |
- man命令的帮助信息的结构如下:
结构名称 | 代表意义 |
---|---|
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
- man手册的几个部分
区段1:用户指令,查看命令的帮助
区段2:系统调用,查看可被内核调用的函数的帮助
区段3:程序库调用,查看函数和函数库的帮助
区段4:设备,查看特殊文件的帮助(主要是/dev目录下的文件)
区段5:文件格式,查看配置文件的帮助
区段6:游戏,查看游戏的帮助
区段7:杂项,惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明
区段8:系统指令,查看系统管理员可用的命令的帮助
区段9:内核内部指令,查看内核相关文件的帮助使用如下命令可以知道某个命令在man的哪个区段有相关帮助文档:
[root@server ~]# whatis man
man (7) - macros to format man pages
man (1) - an interface to the on-line reference manuals
man (1p) - display system documentation
[root@server ~]# man -f man
man (7) - macros to format man pages
man (1) - an interface to the on-line reference manuals
man (1p) - display system documentation[root@server ~]# man 1 man
[root@server ~]# man 7 man
info page
- info与man的用途其实差不多,都是用来查询命令的用法或者是文件的格式。
- 但是与man page不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的『超链接』来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。
- 不过你要查询的目标数据的说明文件必须要以info的格式来写成才能够使用info的特殊功能(例如超链接)。 而这个支持info命令的文件默认是放置在/usr/share/info/这个目录当中的。
[root@server info]# info info
-
第一行的信息表示:
- Next:下一个节点的名称为Stand-alone Info,你也可以按
n
到下个节点去; - Up:回到上一层的节点总揽画面,你也可以按
u
回到上一层;
- Next:下一个节点的名称为Stand-alone Info,你也可以按
-
输入n/N后显示如下:
-
Prev:前一个节点,输入
p
可回到前一个节点。 -
info page当中可以使用的按键:
快 捷 键 | 作 用 |
---|---|
上箭头 | 向上移动一行 |
下箭头 | 向下移动一行 |
PgUp | 向上翻一页 |
PgDn | 向下翻一页 |
Tab | 在有“*”符号的节点间进行切换 |
回车 | 进入有“*”符号的子页面,查看详细帮助信息 |
u | 进入上一层信息 |
n | 进入下一小节信息 |
p | 回到上一小节信息 |
s或者/ | 在info page中使用关键字搜索 |
? | 查看帮助信息 |
q | 退出 info 信息 |
date命令
作用:
- date命令用于显示或设置系统的时间与日期
格式
date -参数 +显示日期时间格式参数
- 用户只需在强大的date命令后输入以
+
号开头的格式参数,即可按照指定格式来输出系统的时间或日期,这样在日常工作时便可以把备份数据的命令与指定格式输出的时间结合到一起。例如,把打包后的文件自动按照“年-月-日”的格式打包成“backup-2020-9-1.tar.gz”,用户只需要看一眼文件名称就能大概了解到每个文件的备份时间了。
常见参数:
参数 | 作用 |
---|---|
%Y | 完整年份(例如:2020) |
%m | 月份(1~12) |
%d | 本月中的第几天 |
%H | 小时(00~23) |
%M | 分钟(00~59) |
%j | 今年中的第几天 |
%X | 相当于%H:%M:%S |
%Z | 显示时区 |
%A | 星期几 (Sunday-Saturday) |
%p | 显示本地AM或PM |
示例
[root@server ~]# date
2023年 02月 20日 星期一 16:39:09 CST
[root@kongd ~]# date "+%j"
306
# date命令中的参数%j可用来查看今天是当年中的第几天。这个参数能够很好地区分备份时间的新旧,即数字越大,越靠近当前时间。该参数的使用方式以及显示结果如下所示:
[root@server ~]# date "+%Y-%m-%d %H:%M:%S"
2023-02-20 16:39:32
[root@server ~]# date –s 20170303 修改为2017-03-03
[root@server ~]# date -s 15:03 修改时间为15:03
[root@server ~]# date -s “20180707 10:12” 合并修改
[root@server ~]# date -d “+2 day” +%d 显示2天后日期
[root@server ~]# date -d “-5 day” +%d 显示5天前日期
timedatectl命令
作用
- timedatectl命令用于设置系统的时间,英文全称为:“time date control”,若发现电脑时间跟实际不符?如果只差几分钟的话,我们可以直接调整,但如果差几个小时,那么除了调整当前的时间,还有必要检查下时区了
格式
timedatectl [OPTIONS...] COMMAND ...
timedatectl命令中的参数以及作用:
参数 | 作用 |
---|---|
status | 显示状态信息 |
list-timezones | 列出已知时区 |
set-timezone | 设置生效时区 |
set-time | 设置系统时间 |
查看系统时间与时区:
[root@server ~]# timedatectl statusLocal time: 一 2023-02-20 16:43:52 CSTUniversal time: 一 2023-02-20 08:43:52 UTCRTC time: 一 2023-02-20 08:43:52Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yesNTP service: activeRTC in local TZ: no
设置时区
- 如果您查到的时区不是上海(Asia/Shanghai),可以手动进行设置:
[root@server ~]# timedatectl set-timezone Asia/Shanghai
- 如果时间还是不正确,我们可以手动的修改系统日期:
[root@server ~]# timedatectl set-ntp no # 先关闭ntp时间同步
[root@server ~]# timedatectl set-time 2021-05-18
- 而如果想修改时间的话,也很简单:
[root@server ~]# timedatectl set-time 9:30
[root@server ~]# date
Tue May 18 09:30:01 CST 2021
[root@server ~]# timedatectl set-ntp yes
查看日历
-
格式:cal 月份 年份
-
例:
[root@server ~]# cal 05 2023[root@server ~]# cal 2023
查看目录下的文件:ls(list)
作用
- 查看目录下的内容
格式
ls -参数 操作对象
参数
参数 | 功能 |
---|---|
-l | 以长格形式显示文件和目录的详细信息,ls命令默认只显示名称的短格式。 |
-d | 显示指定目录本身的信息,而不显示目录下的各个文件和子目录的信息。 |
-c | 按文件的修改时间排序后,予以显示。 |
-h | 以更人性化的方式显示出目录或文件的大小,默认的大小单位为字节,使用-h选项后将显示为K、M等单位。此选项需要和-l选项结合使用才能体现出结果。 |
-R | 以递归的方式显示指定目录及其子目录中的所有内容。 |
-a | 显示所有子目录和文件的信息,包括名称以“.”开头的隐藏目录和隐藏文件。 |
-A | 与-a选项的作用类似,但不显示表示当前目录的“.”和表示父目录的“…”。 |
-i | 显示文件索引节点号(inode)。一个索引节点代表一个文件,在linux中保存在磁盘分区中的文件都给它分配一个编号,称为索引节点号inode。 |
-s | 按照文件大小排序 |
[root@server ~]# ls /
[root@server ~]# ls -dl /root
ls浏览后颜色表示
- 白色:普通文件
- 蓝色:目录
- 红色:压缩包文件
- 黄色:设备文件
- 绿色:可执行文件
第三章 linux文件类型和根目录结构
Linux文件类型
第一个字符 | 文件类型 | 说明 |
---|---|---|
- | 普通文件 | 类似于Windows的记事本 |
d | 目录文件 | 类似于windows文件夹 |
c | 字符设备文件 | 串行端口设备,顺序读写,键盘 |
b | 块设备文件 | 可供存储的接口设备,随机读写,硬盘 |
p | 管道文件 | 用于进程间的通信 |
s | 套接字文件 | 通常用于网络上的通信。可以启动一个程序来监听客户端的要求,客户端可以通过套接字来进行数据通信 |
l | 符号链接又叫软链接,和原文件不是一个文件 | 例如Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了。软链接有自己的node,是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径。符号链接可以跨越文件系统,也可以为目录建立。 |
硬链接 | 只能引用同一文件系统中的文件。它引用的是文件在文件系统中的物理索引(也称为inode)。当移动或者删除原始文件时,硬链接不会被破坏,因为它所引用的是文件的物理数据而不是文件在件结构中的位置。 |
[root@localhost ~]# ll /usr/bin/ls
-rwxr-xr-x. 1 root root 143368 Apr 27 2020 /usr/bin/ls
[root@localhost ~]# ll -d /home
drwxr-xr-x. 3 root root 20 Apr 16 14:46 /home
[root@localhost ~]# ll /dev/tty
crw-rw-rw-. 1 root tty 5, 0 Jun 9 11:48 /dev/tty
[root@localhost ~]# ll /dev/sr0
brw-rw----. 1 root cdrom 11, 0 Jun 9 11:48 /dev/sr0
[root@localhost ~]# ll /dev/nvme0n1
brw-rw----. 1 root disk 259, 0 Jun 9 11:48 /dev/nvme0n1
[root@localhost ~]# ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Aug 5 2020 /usr/bin/yum -> dnf-3
Linux的目录结构
FHS
概念
- filesystem hierarchy standard文件系统层级标准,定义了在类Unix系统中的目录结构和目录内容,即让用户了解到已安装软件通常放置于哪个目录下。
Linux目录结构的特点
- 使用树形目录结构来组织和管理文件。
- 整个系统只有一个根目录(树根),Linux的根目录用“/”表示
- 其他所有分区以及外部设备(如硬盘、光驱等)都是以根目录为起点,挂接在目录树的某个目录中的,通过访问挂载点目录,即可实现对这些分区的访问。
- 结构图:
常见目录用途
文件名 | 描述 |
---|---|
/ | Linux文件系统的最上层根目录,其他所有目录均是该目录的子目录 |
/boot | 存放系统启动时所需的文件,这些文件若损坏常会导致系统无法启动,一般不要改动 |
/root | 超级用户的个人目录,普通用户没有权限访问 |
/home | 存放一般用户的个人目录 |
/bin | Binary的缩写,存放普通用户可执行的程序或命令 |
/sbin | 和/bin类似,这些文件往往用来进行系统管理,只有root可使用 |
/lib | 是库(library)英文缩写,存放系统的各种库文件 |
/lib64 | 存放系统本身需要用到64位程序的共享函数库(library) |
/usr | 一般用户程序安装所在的目录,用于安装各种应用程序 |
/opt | 该目录通常提供给较大型的第三方应用程序使用,例如Sun Staroffice、Corel WordPerfect,这可避免将文件分散至整个文件系统 |
/etc | 存放了系统管理时要用到的各种配置文件和子目录 |
/var | 通常各种系统日志文件放在这里 |
/run | 保存自系统启动以来描述系统信息的文件 |
/dev | dev 是设备(device)的英文缩写。包含所有的设备文件 |
/mnt和/media | 可以临时将别的文件系统挂在这个目录下,即为其他的文件系统提供安装点 |
/tmp | 用来存放不同程序执行时产生的临时文件 |
/srv | srv 是服务(server)的简写,服务启动之后需要访问的数据目录 |
/sys | 本目录是将内核的一些信息映射文件,以供应用程序所用 |
/proc | 可以在这个目录下获取系统信息。这些信息是在内存中由系统自己产生的 |
注意:
- 系统再带的目录不要随意删除
- 目录的名称的区分大小写的
- FHS标准并不是一种强制约束标准,但是一种经验的总结,应灵活使用
路径以及工作目录
路径
- 用“路径”来表示某个文件(或目录)在目录结构中所处的位置。顾名思义,路径是指从树型目录中的某个目录层次到达某一文件或子目录的一条线路,路径由以“/”为分隔符的多个目录名构成。
- 路径可分为:
- 绝对路径:是指以根目录“/”为起点来表示系统中某个文件(或目录)的位置的方式- 相对路径:是以当前目录为起点,表示系统中某个文件或目录在目录结构中的位置的方式。
工作目录
-
用户当前所处的位置,使用
pwd
命令查看 -
更改当前的工作目录,即切换目录:
cd 路径
[root@localhost ~]# pwd
/root
[root@localhost ~]# cd /
[root@localhost /]# pwd
/
#回到当前用户的家(主)目录
[root@localhost /]# cd ~
[root@localhost ~]# pwd
/root
#回到当前目录的上一级目录
[root@localhost ~]# cd ..
#切换到之前的目录
[root@localhost /]# cd -
/root
#回到当前目录
[root@localhost ~]# cd .
第四章 从命令行管理文件
文件命名规则:
-
不能使用/来当文件名,/是用来做根的,也是用来做路径分隔符的
-
文件名不能超过255个字符
-
区分大小写file File FILE fIle root Root ROOT rOOt ROOT
-
目录也是文件,在同一路径下,两个不同类型文件不能同名
创建链接文件
Linux系统中硬盘文件存储原理
硬盘数据分类
- 用户数据(user data):即文件的数据块(data block),存储数据真实空间
- 元数据(metadata):存储文件附加属性,如:文件的大小、创建的时间、所有者等信息
硬连接
原理:
-
linux系统允许多个文件指向同一个inode,即允许一个文件拥有多个有效地路径名
-
理解:硬连接就是指向原始文件inode的指针
查看方法
- ll 文件名
- stat 文件名
建立硬连接
- 格式:
ln -参数 源文件 目标连接文件
- 例1:
[root@server ~]# touch m1.txt
[root@server ~]# stat m1.txt文件:m1.txt大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16802638 硬链接:1 # 初始连接数为1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-12-13 18:30:25.883879146 +0800
最近更改:2022-12-13 18:30:25.883879146 +0800
最近改动:2022-12-13 18:30:25.883879146 +0800
创建时间:2022-12-13 18:30:25.882879146 +0800[root@server ~]# ln m1.txt m2.txt # 建立m2.txt指向m1.txt的硬连接
[root@server ~]# stat m1.txt文件:m1.txt大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:16802638 硬链接:2 # 连接数加1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2022-12-13 18:30:25.883879146 +0800
最近更改:2022-12-13 18:30:25.883879146 +0800
最近改动:2022-12-13 18:31:22.487877027 +0800
创建时间:2022-12-13 18:30:25.882879146 +0800
注意
- 硬连接建立后,删除源文件后数据依然可以访问,只有硬连接为0时,数据旧无法访问了
[root@server ~]# echo "hello" > k1.txt
[root@server ~]# cat k1.txt
hello
[root@server ~]# stat k1.txt文件:k1.txt大小:6 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16802639 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0[root@server ~]# ln k1.txt k2.txt # 建立硬连接
[root@server ~]# cat k2.txt
hello
[root@server ~]# stat k1.txt文件:k1.txt大小:6 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16802639 硬链接:2 # 硬连接数变更
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0[root@server ~]# rm -f k1.txt # 删除文件,相当于删除一个硬连接
[root@server ~]# cat k2.txt
hello[root@server ~]# stat k2.txt文件:k2.txt大小:6 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16802639 硬链接:1 # 硬连接变更
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
- 硬连接不能给目录建立
[root@server ~]# mkdir n1
[root@server ~]# ln n1 n2
ln: n1: 不允许将硬链接指向目录
- 目录自带2个硬连接,即目录中的 . … ,表示当前目录和上一级目录
[root@server ~]# cd n1
[root@server n1]# ls -a
. ..
[root@server4 n1]# stat . # 查看. 的硬连接,即当前目录的硬连接文件:.大小:6 块:0 IO 块:4096 目录
设备:fd00h/64768d Inode:2777695 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0[root@server n1]# stat .. # 查看.. 的硬连接,即上一级目录的硬连接文件:..大小:4096 块:8 IO 块:4096 目录
设备:fd00h/64768d Inode:16797825 硬链接:22
权限:(0550/dr-xr-x---) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
- 不可以在不同的文件系统内建立硬连接,由于inode是当前文件在本文件系统的索引值即只能在本分区使用,应以硬连接不能跨越文件系统
软连接
原理:
- 软连接是一种符号连接,类似于windows的“快捷方式”,仅包含所连接的路径名
格式
ln -s 源文件 目标连接名
例1:
[root@server ~]# echo "china" > h1.txt # 新建文件
[root@server ~]# ln -s h1.txt h2.txt # 创建软连接,指向h2.txt
[root@server ~]# ll h2.txt
lrwxrwxrwx. 1 root root 6 12月 13 18:52 h2.txt -> h1.txt # 查看连接关系
[root@server ~]# stat h1.txt文件:h1.txt大小:6 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:2777696 硬链接:1 # 硬连接还是1,没有变化
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
例2:建立网卡配置文件的软连接
[root@server ~]# ln -s /etc/NetworkManager/system-connections/ens160.nmconnection /root/nic
[root@node4 ~]# ll /root/nic
lrwxrwxrwx. 1 root root 43 12月 13 18:56 /root/nic -> /etc/sysconfig/network-scripts/ifcfg-ens160
[root@server ~]# cat nic
注意
- 软连接只是一种指向关系,删除源文件则数据不可访问
[root@server ~]# echo "china" > d1.txt
[root@server ~]# ln -s d1.txt d2.txt
[root@server ~]# ll d2.txt
lrwxrwxrwx. 1 root root 6 12月 13 19:00 d2.txt -> d1.txt
[root@server ~]# cat d2.txt
china
[root@server ~]# rm -f d1.txt
[root@server ~]# cat d2.txt # 连接失效
cat: d2.txt: 没有那个文件或目录
-
可以通过ll命令查看软连接实际执行文件及位置
-
更改软连接方法:ln -snf 新文件名 软连接名
-
删除软连接,只是删除指向关系,源数据依然可以访问
软硬连接的区别
- 硬连接中源文件与连接文件公用一个inode号,是同一个文件,软连接中源文件与连接文件拥有不同inode号,是2个不同的文件
[root@server ~]# echo "hello" > s1
[root@server ~]# ln s1 s2 # 建立硬连接
[root@server ~]# stat s1文件:s1大小:6 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16802662 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)[root@server ~]# stat s2文件:s2大小:6 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:16802662 硬链接:2 # s1 s2 indoe号相同:16802662
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)[root@server ~]# ln -s s1 s3
[root@server ~]# stat s3文件:s3 -> s1大小:2 块:0 IO 块:4096 符号链接
设备:fd00h/64768d Inode:16802663 硬链接:1 # 软连接s3 inode:16802663不同
-
软连接的指向关系可以查看,硬连接不可以查看
-
连接数不同,软连接数不会增加
-
文件大小不同,硬连接文件大小与源文件一样
-
软连接不受任何文件系统的影响,任何用户都可以创建指向目录的软连接
目录操作命令
创建目录(make directory)
格式:
mkdir [-p] [/路径/]目录名
参数
- -p 可快速创建出目录结构中指定的每个目录,对于已存在的目录不会被覆盖
- -v 显示创建目录的详细过程
例:
[root@server ~]# mkdir t1
[root@server ~]# mkdir t2 t3 t4 # 批量一次性新建
[root@server ~]# mkdir -p n1/n2/n3 # 新建递归目录
du命令
-
作用:统计目录及文件的空间占用情况,查看某个目录中的各级子目录所占用的磁盘空间数。
-
命令格式: du [参数] [目录名]
-
参数:
选项 | 功能 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录。 |
-s | 只统计每个文件所占用空间总的大小,而不是统计每个子目录、文件的大小。 |
-h | 以K,M,G为单位显示磁盘使用情况,以提高信息的可读性。 |
新建文件
创建普通文件
touch用法1:
- 如果文件已存在,更新文件的三个时间,
stat
可以查看文件的详细信息
[root@server ~]# stat /etc/hostnameFile: /etc/hostnameSize: 22 Blocks: 8 IO Block: 4096 regular file
Device: 10302h/66306d Inode: 8608116 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:hostname_etc_t:s0
Access: 2022-06-09 11:19:35.484027446 +0800
Modify: 2022-04-16 14:46:36.153011877 +0800
Change: 2022-04-16 14:46:36.153011877 +0800[root@server ~]# stat /etc/hostname文件:/etc/hostname大小:7 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:17805263 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2023-04-23 10:01:42.285018639 +0800
最近更改:2023-03-22 11:20:57.098407291 +0800
最近改动:2023-03-22 11:20:57.098407291 +0800
创建时间:2023-03-22 11:20:57.097407349 +0800# 分析
# atime,即access time,访问文件的时间,查看了一下文件内容(cat),文件的atime时间会更新 # mtime,即modify time,修改内容的时间,文件内容被改变了,ctime会更新# ctime,即change time,修改文件元数据的时间
[root@server ~]# touch /etc/hostname
[root@server ~]# date
2023年 04月 24日 星期一 09:37:38 CST
[root@server ~]# stat /etc/hostname文件:/etc/hostname大小:7 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:17805263 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2023-04-24 09:37:36.800493399 +0800
最近更改:2023-04-24 09:37:36.800493399 +0800
最近改动:2023-04-24 09:37:36.800493399 +0800
创建时间:2023-03-22 11:20:57.097407349 +0800
touch用法2
-
如果文件不存在,则表示创建文件
-
格式:
touch 文件名1 文件名2 文件名3touch {文件名1,文件名2,文件名3}
- 例1:
[root@server ~]# touch p1.txt
[root@server ~]# touch p2.txt p3.txt p4.txt
[root@server ~]# touch {p5,p6,p7}.txt
[root@server ~]# touch {1,2}{3,4}
[root@server ~]# touch abc{1..100}
示例
-
tree命令
-
作用:显示目录下文件的树形拓扑图及摘要
-
格式:
-
tree -参数 路径
-
参数
-
-a : 所有文件包含显示隐藏文件 -f : 列出文件的完整路径内容 -d :只显示目录 -L : 设置显示最大深度,如:tree -f -L 2
-
-
按照下面的结构新建文件及目录
创建大容量文件
作用
- 制作指定个数及容量的空文件
格式
dd if=来源 of=新文件名 count=数据块个数 bs=块容量
分析
- if&#