一个完整计算系统的简要介绍...
=====================================================
1. 一个完整计算系统的简要介绍。
计算机,俗称电脑,是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速地处理,然后把处理结果输出的现代化智能电子设备。
一个完整的计算机系统由硬件系统和软件系统组成。
计算机系统
|
硬件系统
|
主机
|
中央处理器CPU
|
运算器
|
控制器
|
||||
内存储器
|
ROM
|
|||
RAM
|
||||
外部设备
|
外部存储器—硬盘、软盘、光盘、磁带
|
|||
输入设备—键盘、鼠标、扫描仪
|
||||
输出设备—显示器、打印机、绘图仪
|
||||
其他设备—调制解调器
|
||||
软件系统
|
系统软件
|
操作系统
|
||
程序语言处理系统
|
||||
数据库管理系统
|
||||
服务程序—检查、诊断、调试程序
|
||||
应用软件
|
通用应用软件—如Office办公软件
|
|||
专用应用软件—用户程序
|
①运算器:主要完成一些算数逻辑运算。
②存储器:主要用来存放数据和程序。
③控制器:主要用来控制、指挥程序和数据的输入、运算结果的输出等控制命令。
④输入输出设备:统称为I/O设备。主要用来输入数据程序和输出结果。
⑤在现代的计算机中通常把运算器和控制器集成在CPU中,CUP+内存储器=主机
⑥硬件=主机+I/O设备 主机 = CUP+内存储器 I/O设备 = 输入设备 + 输出设备
重点知识:
冯·诺依曼体系的要点是:
①数字计算机的数制采用二进制,bit 位, byte 字节 1 byte =8 bit
②计算机应该按照程序顺序执行
③计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成
计算机的硬件五个组件
控制器: 指挥系统
运算器: 数学和逻辑运算
存储器: 存储信息
输入设备: 接收外部信息
输出设备: 输出计算机内部信息到外部设备
2. 学会进制的转换,并简单举例完成转换。
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906727-535412128.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906841-314484654.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906229-1237700952.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906168-1073578238.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906068-920054186.png)
3. 制作一个教程,说明vmware软件如何下载安装。
F71R-DMX85-08DQY-8YMNC-PPHV8 激活码直接激活就行
① 打开安装包>【鼠标双击安装包】可打开,或者选中安装包鼠标右键点击【打开】也可以!
打开安装包后点击【下一步】>勾选【许可协议】后再点击【下一步】
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906392-13381895.png)
②如需更改安装路径的可点击【更改】>路径更改后【确定】>然后将【增强型键盘驱动程序】此项勾选上,再点击【下一步】
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906390-1574342525.png)
③
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906117-18710335.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906446-73922653.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906455-2040590163.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906332-692468227.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906335-965538332.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906081-1955588550.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906387-472972542.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906134-1287069759.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906165-1581964728.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906107-27622802.png)
4. 说明GPL和MIT开源协议的区别。
协议名称
|
例如
|
释义
|
特点
|
|
GPL
|
强制开源
|
linux
|
GPL(GNU General Public License):GNU通用公共许可协议。
|
GPL协议的目的就是强制代码开源和免费使用。
可自由复制——你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
可自由分发——在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。
可以用来盈利——你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
可自由修改——如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身
|
MIT
|
受公司欢迎的宽松协议
|
vue
|
MIT(The Massachusetts Institute of TechnologyLicense,麻省理工学院许可协议)是众多协议条款中,被广泛使用的其中一种。与其他常见的软件许可协议相比,MIT是相对宽松的软件许可协议。
|
MIT协议允许你任意的使用、复制、修改原MIT代码库,随便你卖钱还是开源,唯一需要遵循的原则就是在你的软件中声明你也使用的是MIT协议就行了。
而很多的公司企业在选用开源产品的时候都首选MIT协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
|
LGPL
|
让公司能够拿GPL卖钱
|
Qt
|
LGPL许可证是LESSER GENERAL PUBLIC LICENSE的简写,也叫LIBRARY GENERAL PUBLIC LICENSE,中文译为“较宽松公共许可证”或者“函数库公共许可证”。该许可证适用于一些由自由软件基金会与其它决定使用此许可证的软件作者所特殊设计的软件软件包─比如函数库(即Library)。
|
由于GPL协议的“开源传染性”,一些公司肯定无法接受将自己的代码开源出去,这还怎么赚钱
于是出现了LGPL( GNU Lesser GPL),也就是限制更少(针对想闭源卖钱的公司)的GPL。
|
BSD
|
别借我的名气做宣传
|
BSD许可证现在被Apache和BSD操作系统等开源软件所采纳。
|
BSD许可证原先是用在加州大学伯克利分校发表的各个4.4BSD/4.4BSD-Lite版本上面(BSD是Berkeley Software Distribution的简写)的,后来也就逐渐沿用下来。
|
BSD要求开发者不能利用前人的名义做宣传。比如我不能以某某升级版,某某加强版的名义来宣传我的软件。
|
Apache
|
加强法制宣传
|
PaddlePaddle
|
MIT和BSD协议有一个特点:简洁。
这个特点具有两面性,一方面,作为个人开发者,可以放心的使用MIT或BSD协议而不太需要担心背后的法律风险,第二方面,大公司在开源自己软件时,会担心由于“过度宽松”导致产生一些法律纠纷。
因此,Apache协议出现了。
在保持较为宽松的开源基础上,加上了一些避免法律冲突的限制。
比如,要求在每个许可文件中,必须保留再分发代码中的任何原始著作权、专利、商标等。
因此,大公司往往倾向于使用Apache协议而不是稍微模糊的MIT协议。
永久权利——一旦被授权,永久拥有。
全球范围的权利——在一个国家获得授权,适用于所有国家。假如你在美国,许可是从印度授权的,也没有问题。
授权免费,且无版税——前期,后期均无任何费用。
授权无排他性——任何人都可以获得授权
授权不可撤消——一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。
分发代码方面包含一些要求,主要是,要在声明中对参与开发的人给予认可并包含一份许可协议原文。
百度的深度学习框架PaddlePaddle使用了Apache协议。
|
|
WTFPL
|
甚至不敢写全称的奇葩协议
|
如果你觉得上面的协议没一个自由的,你崇尚绝对的自由开源,那么这条协议就太适合你了。
WTFPL协议是目前最奇葩的协议,奇葩在两点。
第一点是,这个协议实际上没有任何内容,这里是这个协议的内容。
鉴于这里面敏感词太多我就不逐字翻译了。
大致意思就是:你想干什么就干什么吧,你可以随便改代码,你也可以随便改协议内容,。
第二个奇葩点在于。
这个协议是已经被认证了的协议......
|
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906291-1620553853.png)
[11:01:20 root@rocky ~]#rpm -qi 名称
查看软件的发行许可
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906267-1545511909.png)
5. 制作2个安装教程,安装rocky 8.5, ubuntu 22.04,并结合xshell说明如何通过虚拟IP登入系统。
①安装rocky8.5
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906388-1862156382.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906274-888312595.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906198-1621725853.png)
修改虚拟机名称以及位置:
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905957-1345440945.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906292-2000896950.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906226-696735878.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906289-513233631.png)
完成配置并启动虚拟机
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906109-1536395523.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905773-1648172568.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906327-689306782.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906095-983002053.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906459-1076092689.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906334-536552173.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906363-1166602522.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906238-1414622065.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905969-1461327700.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906101-899599499.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906202-978664135.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906090-881726594.png)
安装完成,重启服务器
②安装ubuntu22.04
文件--新建虚拟机
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906388-1862156382.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906274-888312595.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906200-2143320057.png)
修改虚拟机名称以及位置:
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906073-1296372615.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906292-2000896950.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906230-256343669.png)
内存:2G
设置ISO文件
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906074-690726701.png)
完成配置并启动虚拟机
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906229-1671103359.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905830-1108753945.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906204-1198820907.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906171-1114237051.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905900-733480461.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906174-446992801.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906016-949445861.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905930-350768492.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906270-845329733.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905947-1358704001.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906206-1266789092.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905803-1327345578.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905938-1152804625.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906240-1995544737.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906092-2124685686.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906263-1353830828.png)
安装中---耐心等待:
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906261-585323250.png)
系统安装完成,重启:
首次普通用户登录进去,设置root密码。修改/etc/ssh/sshd_config 设置允许root登录。
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905906-2032621175.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906184-132714230.png)
#systemctl restart sshd.service
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905862-1607497425.png)
服务器ip:10.0.0.134
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906336-1789586196.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906272-644832484.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906032-570372339.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906270-550528289.png)
6. 说明tab键补全命令以及补全路径的原理。
使用TAB键可以根据已输入的字符自动补全路径名、文件名和可执行程序,自动补全依赖于bash-completion在/etc/bash_completion.d/路径下创建的自动补全脚本。
①命令补全
用户给定的字符串只有一条惟一对应的命令,直接补全,否则,再次Tab会给出列表
内部命令:
外部命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到的命令即要执行的命令
命令的子命令补全,需要安装 bash-completion
#yum install bash-completion -y 【centos、rocky】
#apt install bash-completion -y 【ubuntu】
②路径补全
把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名
如果惟一:则直接补全
否则:再次Tab给出列表
③双击Tab键
command 2Tab 所有子命令或文件补全
string2Tab 以string开头命令
/2Tab 显示所有根目录下一级目录,包括隐藏目录
./2Tab 当前目录下子目录,包括隐藏目录
*2Tab 当前目录下子目录,不包括隐藏目录
~2Tab 所有用户列表
$2Tab 所有变量
@2Tab /etc/hosts记录 (centos7 不支持)
=2Tab 相当于ls –A (centos7不支持)
补全路径的原理:
文件实质都存放在根目录下,树状目录,所以tab可以在当前指定目录下寻找i节点信息补齐路径或者文件名。
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906390-1504105630.png)
7. 说明内部命令和外部命令的区别,以及他们如何获取帮助的?
内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等。
外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通过“echo$PATH”命令查看外部命令的存储路径,比如:ls、vi等。
内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在shell中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
1.内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。
2.外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。
type可以用来判断一个命令是否为内置命令
type [-afptP] name [name ...]
enable既可以查看内部命令,同时也可以判断是否为内部命令
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906014-975274457.png)
内部命令用户输入时系统调用的速率快,不是内置命令,系统将会读取环境变量文件.bash_profile、/etc/profile去找PATH路径。
然后在提一下命令的调用,有些历史命令使用过后,会存在在hash表中,当你再次输入该命令它的调用会是这样一个过程。
hash——>内置命令——>PATH 命令的调用其实应该是这样一个过程。
帮助:
内部命令查看帮助的格式是
help COMMAND
man bash # man 后面直接跟命令就行
外部命令查看帮助的格式是
COMMAND --help 或者 COMMAND --h
man COMMAND #man 后面直接跟命令就行
8. 说明命令行快捷键如何完成,1)快速跳转到行首?2)快速跳转到行尾?3)快速删除当前光标到行尾,4)快速删除光标到行首,5)如何快速取消执行命令。
1)快速跳转到行首 Ctrl + a
2)快速跳转到行尾 Ctrl + e
3)快速删除当前光标到行尾 Ctrl + k
4)快速删除光标到行首 Ctrl + u
5)如何快速取消执行命令 Ctrl + c
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144905923-509900552.png)
9. 总结Linux目录结构说明每个目录主要的用途。
bin
|
binary,二进制程序,普通用户使用的工具;所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
|
|
/boot
|
引导文件(计算机启动相关的文件)存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
|
|
/dev
|
b: block device,随机访问
|
设备文件及特殊文件存储位置,各种硬件设备(例如硬盘)
|
c: character device,线性访问
|
||
/etc
|
相当于windows注册表,存放各种配置文件
|
|
/home
|
/home/USERNAME 普通用户家目录,存放用户数据
|
|
/root
|
root账户的家目录
|
|
/run
|
目前系统中正在执行的某些程序的临时的一些文件
|
|
/sbin
|
管理员使用的工具(root账户)
|
|
/tmp
|
临时文件存储位置
|
|
/media
|
便携式移动设备挂载点
|
|
/mnt
|
临时文件系统挂载点
|
|
/opt
|
第三方应用程序的安装位置
|
|
/srv
|
系统上运行的服务用到的数据
|
|
/usr
|
bin: 保证系统拥有完整功能而提供的应用程序
|
universal shared, read-only data通用共享,只读数据
|
sbin:放置一些网路管理的必备程序例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等
|
||
lib:32位使用
|
||
lib64:只存在64位系统
|
||
include: C程序的头文件(header files)
|
||
share:结构化独立的数据,例如doc, man等
|
||
local:第三方应用程序的安装位置
|
||
/var
|
cache: 应用程序缓存数据目录
|
variable data files
可变数据文件
|
lib: 应用程序状态信息数据
|
||
local:专用于为/usr/local下的应用程序存储可变数据
|
||
lock: 锁文件
|
||
log: 日志目录及文件
|
||
opt: 专用于为/opt下的应用程序存储可变数据
|
||
run: 运行中的进程相关数据,通常用于存储进程pid文件
|
||
spool: 应用程序数据池
|
||
tmp: 保存系统两次重启之间产生的临时数据
|
||
/proc
|
用于输出内核与进程信息相关的虚拟文件系统
|
|
/sys
|
用于输出当前系统上硬件设备相关信息虚拟文件系统
|
|
/selinux
|
security enhanced Linux,selinux相关的安全策略等信息的存储位置
|
10. 总结文件通配 *, ?, [a-z], [0-9], ~,{a..z},
[:alnum:] [:alpha:] [:blank:]
[:digit:] [:graph:] [:lower:]
[:punct:] [:space:] [:upper:]等常用通配符。
*, 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
?, 匹配任何单个字符,一个汉字也算一个字符
[a-z], 一个字母
[0-9], 匹配数字范围
~, 当前用户家目录
{a..z},
[:alnum:] 任意数字或字母
[:alpha:] 任意大小写字母
[:blank:] 水平空白字符
[:digit:] 任意数字,相当于0-9
[:graph:] 图形字符
[:lower:] 任意小写字母,表示 a-z
[:punct:] 标点符号
[:space:] 水平或垂直空白字符
[:upper:] 任意大写字母,表示 A-Z
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906454-1591811057.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906104-562472080.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906293-917378955.png)
10. 说明文件系统如何根据用户输入的路径查找到磁盘上的文件的过程。
以读取文件/var/log/message为例,从磁盘中查找/读取文件内容的过程:
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906452-854652640.png)
①首先系统通过挂载信息(在超级块中,位置固定)找到根目录(/)的inode编号,根目录对应的inode是固定的(通常为2号)。
②根据根目录的inode编号(2号),在inode table中找到对应的inode信息,从inode信息中找到存储根目录信息的目录块编号,根据编号找到数据块,如图中标记为‘/’的方格,该目录块存储的信息如图中的dentry所示。
③从目录块中存储的信息中,找到文件名(目录名)为var所对应的inode编号(2667711)。
④在inode table中找到编号为2667711的inode信息,从该inode信息中,找到var目录存放的数据块。从var数据块存储的信息中,找到log目录对应的inode编号(267850)。
⑤重复上述步骤,直至找到message文件对应的inode结点,根据inode结点中记录的message文件内容对应的数据块,从数据块中读取内容。
11. 总结硬链接和软件链接原理,并举例说明如何使用。
硬链接就是对一个文件起一个新的名字,实质上还是同一个文件。
软链接,就是类似于Windows的快捷方式,就是一个符号链接,本质上不是同一个文件。
硬链接
|
软链接
|
|
本质
|
本质是同一个文件
|
本质不是同一个文件
|
跨设备
|
不支持
|
支持
|
inode
|
相同
|
不同
|
链接数
|
创建新的硬链接,链接数会增加,删除硬链接,链接数减少
|
创建或删除,链接数不会变化
|
文件夹
|
不支持
|
支持
|
相对路径
|
原始文件相对路径是相对于当前工作目录
|
原始文件的相对路径是相对于链接文件的相对路径
|
删除源文件
|
只是链接数减一,但链接文件的访问不受影响
|
链接文件将无法访问
|
文件类型
|
和源文件相同
|
链接文件,和源文件无关
|
文件大小
|
和源文件相同
|
源文件的路径的长度
|
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906116-1780926732.png)
硬链接:#ln message.txt hard_message.txt
软链接:#ln -s message.txt soft_message.txt
#ln -s /root/testdir /data/dir
删除软链接(目录)
#rm -rf /data/dir
注意----错误命令:rm -rf /data/dir/ 目录最后不带“/”
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906457-1465171177.png)
![0](https://img2023.cnblogs.com/blog/3073526/202301/3073526-20230101144906061-1150905744.png)
12. 说明linux命令管理工作流程,结合管道功能,自行设计几个题目。
linux管道:一个命令的输出(标准输出)被直接“用管道输送”到另一个命令的输入(标准输入)中,从而构成了linux(unix)的管道(pipe)
创建管道:为了用bash创建管道,用一个垂直的小节线 | 把这两个命令连接起来
进程组:连接在管道的所有进程被称为进程组
用户r正在寻找/etc目录下最大的文件,他先编写了find命令,列出所有大小超过100k字节的文件,如下:
find /etc -size +100k 2> /dev/null
find没有按照特定的顺序列出文件,现在用户r要对刚才的输出结果按照英文字母表排序------把find命令的输出用管道输出到sort命令的标准输入中
find /etc/ -size +100k 2> /dev/null | sort
sort命令默认是从标准输入读取数据的,此处利用了管道 | ,使得别的程序的标准输出传递给sort,作为sort的输入 ,充分体验了,管道| 就是把一个程序的标准输出输送到另一个程序的标准输入中
13. 说明标准输入,标准输出,标准错误输出的区别,及举例说明其功能。
当执行shell命令时,会默认打开3个文件,每个文件有对应的文件描述符来方便我们使用:
类型
|
文件描述符
|
默认情况
|
对应文件句柄位置
|
标准输入(standard input)
|
0
|
从键盘获得输入
|
/proc/self/fd/0
|
标准输出(standard output)
|
1
|
输出到屏幕(即控制台)
|
/proc/self/fd/1
|
错误输出(error output)
|
2
|
输出到屏幕(即控制台)
|
/proc/self/fd/2
|
平时在执行shell命令中,都默认是从键盘获得输入,并且将结果输出到控制台上。但是我们可以通过更改文件描述符默认的指向,从而实现输入输出的重定向。比如我们将1指向文件,那么标准的输出就会输出到文件中。
/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”
0表示标准输入 1表示标准输出 2表示标准错误输出 默认为标准输出重定向,与 1>相同 2>&1意思是把 标准错误输出重定向到标准输出. &>file意思是把 标准输出 和 标准错误输出 都重定向到文件file中 2>&1 > file 把错误出定向到标准输出(此时标准输出为终端,所以输出到终端), 标准输出定位到文件 file 2>&1 把标准输出定位到文件,错误输出到标准输出(此时标准输出指向文件,所以输出到文件)
输出重定向
输出重定向的使用方式很简单,基本的一些命令如下:
命令
|
介绍
|
command >filename
|
把标准输出重定向到新文件中
|
command 1>filename
|
同上
|
command >>filename
|
把标准输出追加到文件中
|
command 1>>filename
|
同上
|
command 2>filename
|
把标准错误重定向到新文件中
|
command 2>>filename
|
把标准错误追加到新文件中
|
输入重定向
对输入重定向的基本命令如下:
命令
|
介绍
|
command <filename< span="">
|
以filename文件作为标准输入
|
command 0<filename< span="">
|
同上
|
command <<delimiter< span="">
|
从标准输入中读入,直到遇到delimiter分隔符
|
标准错误重定向
#rm /data/f1.log 2> /data/all.log
清除大文件
cat /dev/null > /data/file.log
分别重定向
#ls /data/ /xxx > stdout.log 2> stderr.log
将标准输出和错误都重定向到同一个文件
#ls /data /xxx > /data/all.log 2>&1
#ls /data /xxx 2> /data/all.log 1>&2
#ls /data /xxx &> /data/all.log
#ls /data /xxx >& /data/all.log
#ls /data /xxx 2>&1 > /data/all.log
14. 总结学过的用户,组,权限相关的命令及选项,示例
用户管理命令
|
格式
|
常见选项
|
|
useradd
|
添加用户
|
useradd [options] LOGIN
|
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID 指明用户所属基本组,可为组名,也可以GID
-c "COMMENT“ 用户的注释信息
-d HOME_DIR 以指定的路径(不存在)为家目录
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...] 为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户 CentOS 6之前: ID<500,CentOS7 以后: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
-p 指定加密的密码
显示或更改默认设置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
|
newusers
|
批量添加用户
|
newusers /root/newusefile
|
/root/newusefile是passwd格式文件
linuxcool0:x:520:520::/home/zhangsan0:/bin/bash
linuxcool1:x:521:521::/home/zhangsan1:/bin/bash
linuxcool2:x:521:521::/home/zhangsan2:/bin/bash
|
chpasswd
|
批量修改用户口令
|
echo username:passwd | chpasswd
chpasswd < info.txt
|
info.txt 是用户及密码信息
zhang:12345678
wang:1234zxcv
|
生成sha512加密密码
|
openssl passwd -6 magedu
python3 -c 'import crypt,getpass;pw="magedu";print(crypt.crypt(pw))'
grub-crypt --sha-512
|
||
getent
|
查看系统的数据库中的相关记录
|
gentent passwd (+username)查看相关账户信息
getent group (+groupname)查看用户组的信息
|
|
usermod
|
修改用户属性
|
usermod [OPTION] login
|
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使
用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限,即宽限期
|
userdel
|
删除Linux 用户
|
userdel [OPTION]... Login
|
-f, --force
强制
-r, --remove 删除用户家目录和邮箱
|
id
|
查看用户的UID,GID等信息
|
id [OPTION]... [USER]
|
-u: 显示UID
-g: 显示GID
-G: 显示用户所属的组的ID
-n: 显示名称,需配合ugG使用
|
su
|
切换用户身份,并且以指定用户的身份执行命令
|
su [options...] [-] [user [args...]]
|
-l
--login
su -l UserName
相当于 su - UserName
-c, --command
pass a single command to the shell with -c
换个身份执行命令:
su [-] UserName -c 'COMMAND'
|
passwd
|
修改用户密码
|
passwd [OPTIONS] UserName
|
-d:删除指定用户密码
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-f:强制操作
-n mindays:指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码,Ubuntu无此选项
交互式修改用户密码
#echo -e '123456\n123456' | passwd mage
#echo '123456' | passwd --stdin mage
生成随机密码
#yum -y install expect
#mkpasswd -l 8 -c 2 -C 2 -d 2 -s 2 |tee passwd.txt | passwd --stdin wang
#passwd wang <<eof< span="">
> centos
> centos
> EOF
|
chage
|
修改用户密码策略
|
chage [OPTION]... LOGIN
|
-d LAST_DAY
#更改密码的时间
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-I --inactive INACTIVE #密码过期后的宽限期
-E --expiredate EXPIRE_DATE #用户的有效期
-l 显示密码策略
#chage -m 3 -M 42 -W 14 -I 7 -E 2020-10-10 wang
#下一次登录强制重设密码
#chage -d 0 wang
|
组账户维护命令
|
|||
groupadd
|
创建组
|
groupadd [OPTION]... group_name
|
-g GID 指明GID号;[GID_MIN, GID_MAX]
-r 创建系统组,CentOS 6之前: ID<500,CentOS 7以后: ID<1000
#groupadd -g 48 -r apache
|
groupmod
|
组属性修改
|
groupmod [OPTION]... group
|
-n group_name: 新名字
-g GID: 新的GID
|
groupdel
|
删除组
|
groupdel [options] GROUP
|
-f, --force 强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录
|
gpasswd
|
可以更改组密码,也可以修改附加组的成员关系
|
gpasswd [OPTION] GROUP
|
-a user 将user添加至指定组中
-d user 从指定附加组中移除用户user
-A user1,user2,... 设置有管理权限的用户列表
增加组成员
#gpasswd -a wang admins
删除组成员
#gpasswd -d wang admins
|
groupmems
|
管理附加组的成员关系
|
groupmems [options] [action]
|
-g, --group groupname
#更改为指定组 (只有root)
-a, --add username
#指定用户加入组
-d, --delete username #从组中删除用户
-p, --purge
#从组中清除所有成员
-l,
--list
#显示组成员列表
|
groups
|
查看用户组关系
|
groups [OPTION].[USERNAME]...
|
#groups wang
|