目录
1. 制作一个教程,说明vmware软件如何下载安装。安装rocky 系统, ubuntu 系统,并挑选一个中意的远程工具,演示如何通过远程IP登入系统。
3. 结合man命令总结linux常用基本命令用法,以及查看帮助文档的方法。
6. 总结文件元数据相关的知识点,包含硬链接和软连接的区别等知识。
7. 总结通配符,管道,重定向,并且结合示例,添加注释信息。
8. 总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息。
9. 总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释
一、作业原文
第一周的视频任务 (班级进度以老万的内容布置的)
第一周
第1天-行业介绍和计算机基础
第2天-Linux基础入门和帮助
第3天-Linux文件管理和I0重定向
---------------------------
第一周作业
1. 制作一个教程,说明vmware软件如何下载安装。安装rocky 系统, ubuntu 系统,并挑选一个中意的远程工具,演示如何通过远程IP登入系统。
2. 总结什么是shell,以及常见的各类shell。
3. 结合man命令总结linux常用基本命令用法,以及查看帮助文档的方法。
4. 总结linux文件系统目录结构和目录的功能
5. 总结文件操作常见的命令和文件夹常见操作和命令
6. 总结文件元数据相关的知识点,包含硬链接和软连接的区别等知识
7. 总结通配符,管道,重定向,并且结合示例,添加注释信息
8. 总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息
9. 总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释
二、详细解答过程
1. 制作一个教程,说明vmware软件如何下载安装。安装rocky 系统, ubuntu 系统,并挑选一个中意的远程工具,演示如何通过远程IP登入系统。
注:本次安装的是rocky 8.6 及Ubuntu 22.04 版本的系统
1.1 下载相关软件镜像
- 通过链接下载VMware程序;rocky;Ubuntu系统镜像;远程工具xshell7绿色版。
- 下载链接: 百度网盘 请输入提取码
- 提取码: 1111
1.2 安装VMware并激活
用户体验设置建议全部取消
快捷方式根据个人喜好选择
激活软件,输入安装包中的秘钥
打开虚拟机检查许可证
1.3 安装系统前的准备
1.4 VMware安装rocky系统
#镜像下载地址
https://mirrors.nju.edu.cn/rocky-vault/8.6/isos/x86_64/Rocky-x86_64-dvd.iso
https://dl.rockylinux.org/vault/rocky/8.6/isos/x86_64/Rocky-x86_64-dvd.iso
1.4.1 新建虚拟机
1. 点击左上角 ”文件“,在下拉中选择第一项 “新建虚拟机”;
2. 选择 “自定义(高级)C”,然后点击 “下一步”;
3. "硬件兼容性(H)" 使用默认值,点击 “下一步”;
4. 选择 “稍后安装操作系统(S)”,点击 “下一步”;
5. “客户机操作系统”,选择第二项 “Linux”,版本选择 “CentOS 8 64位”,点击 “下一步”;
6. “虚拟机名称” 填写 “Rocky8.6-1”,“位置” 不用更改,点击 “下一步”;
7. “处理器数量” 下拉,选择 “2”,其它项不变,点击 “下一步“;
8. ”此虚拟机内存(M)“,填写 “2048” MB,点击 “下一步”;
9. “网络类型” 选择第二项 “使用网络地址转换(NAT)(E)”,点击 “下一步”;
10. “SCSI控制器” 选择第二项 “LSI Logic(L) ”,点击 “下一步”;
11. “虚拟磁盘类型” 选择第二项 “SCSI(S)”,点击 “下一步”;
12. “磁盘” 选择第一项 “创建新虚拟磁盘”,点击 “下一步”;
13. “最大磁盘大小 (GB)(S): ” 填写 “200”,不要勾选 “立即分配所有磁盘空间(A)”,下方选择 “将虚拟机磁盘存储为单个文件(O)”,点击 “下一步”;
14. “磁盘文件”,文件名用默认 "Rocky8.6-1.vmdk",点击 “下一步”;
15. 点击 “完成”;
1.4.2 rocky系统安装
在左侧菜单栏中,定位到刚新建的虚拟机,右键,设置 。
选择镜像
开始安装
上下按键控制选择
选择英语
选择磁盘分区
时区选择 shanghai
开启网络,设置主机名 rocky86
设置root用户密码 123456
创建一个普通用户,用户名 mage 密码 123456
等待安装结束
安装玩成,重启
同意许可
安装完成,显示登录界面
1.5 VMware安装Ubuntu 系统
#镜像下载地址
http://mirrors.aliyun.com/ubuntu-releases/22.04/ubuntu-22.04.2-live-serveramd64.iso
https://mirrors.tuna.tsinghua.edu.cn/ubuntucdimage/releases/22.04/release/ubuntu-22.04.2-live-server-arm64.iso
1.5.1 新建虚拟机
1. 点击左上角 ”文件“,在下拉中选择第一项 “新建虚拟机”;
2. 选择 “自定义(高级)C”,然后点击 “下一步”;
3. "硬件兼容性(H)" 使用默认值,点击 “下一步”;
4. 选择 “稍后安装操作系统(S)”,点击 “下一步”;
5. “客户机操作系统”,选择第二项 “Linux”,Ubuntu 64 位”,点击 “下一步”;
6. “虚拟机名称” 填写 “Rocky8.6-1”,“位置” 不用更改,点击 “下一步”;
7. “处理器数量” 下拉,选择 “2”,其它项不变,点击 “下一步“;
8. ”此虚拟机内存(M)“,填写 “2048” MB,点击 “下一步”;
9. “网络类型” 选择第二项 “使用网络地址转换(NAT)(E)”,点击 “下一步”;
10. “SCSI控制器” 选择第二项 “LSI Logic(L) ”,点击 “下一步”;
11. “虚拟磁盘类型” 选择第二项 “SCSI(S)”,点击 “下一步”;
12. “磁盘” 选择第一项 “创建新虚拟磁盘”,点击 “下一步”;
13. “最大磁盘大小 (GB)(S): ” 填写 “200”,不要勾选 “立即分配所有磁盘空间(A)”,下方选择 “将虚拟机
磁盘存储为单个文件(O)”,点击 “下一步”;
14. “磁盘文件”,文件名用默认 "Rocky8.6-1.vmdk",点击 “下一步”;
15. 点击 “完成”;
1.5.2 Ubuntu系统安装
在左侧菜单栏中,定位到刚新建的虚拟机,右键,设置
选择镜像
开始安装
选择英语
开始安装
安装完成,重启
登录界面
1.5 安装远程工具xshell并远程登录
1.5.1 解压安装xshell
安装完成
1.5.2 远程连接rocky
#查询本机IP
ip a
打开xhell,连接
远程登录成功
1.5.3 远程连接Ubuntu
登录成功
查询本机IP
#查询本机IP
ip a
打开xshell,连接
新建一个终端
远程连接成功
2. 总结什么是shell,以及常见的各类shell。
1.Shell是Linux系统的用户界面,它作为用户与内核之间的桥梁,提供了交互操作的接口。
2.Shell接收用户输入的命令,将其解析并送入内核执行。
3.Shell不仅是一种命令解释器,还是一种高级程序设计语言,具备变量、函数、条件判断、循环等编程语言的功能。
4.由于Shell本身是一个程序,用户可以自行开发各种Shell以替代默认的Shell。
在Linux系统中,可以通过cat /etc/shells命令查看系统支持的所有Shell类型,
包括/bin/bash、/usr/bin/sh、/usr/bin/bash、/bin/tcsh、/bin/csh等。
其中,/bin/bash是最常用的Shell类型,也是Linux系统默认的Shell。
3. 结合man命令总结linux常用基本命令用法,以及查看帮助文档的方法。
在Linux中,man命令是一个非常重要的工具,用于查看系统命令、函数、配置文件等的帮助文档
# 查看帮助文档的方法
1. 基本用法
man 命令名 来查看该命令的详细帮助文档
2. 显示所有相关手册页:
man -aw 命令名 来显示所有与指定命令相关的手册页路径
3. 指定章节的手册页:
man -w 章节 命令名 来查看特定章节的手册页。
4. 显示中文手册页:
man -M /usr/local/share/man/zh_CN 来显示中文手册页内容。
5. 查看手册页的路径:
manpath 命令来显示系统中所有手册页的路径。
6. 指定手册页路径:
man -M /path/dir 命令名 来查看指定路径下的手册页。
7. 查看gz压缩格式的手册页:
man /path/to/your/file.gz 来查看gz压缩格式的手册页。
8. 查看troff或preprocessor输入格式的手册页:
man -l /path/to/your/file 来查看troff或preprocessor输入格式的手册页。
-------------------------
# 常用快捷键
e, ctrl+E, j, ctrl+J, enter, ↓:向下移动一行
y, ctrl+Y, k, ctrl+K, ctrl+P, ↑:向上移动一行
z, f, ctrl+F, ctrl+V, space:向下滚动一屏
w, b, ctrl+B, esc+v:向上滚动一屏
d, ctrl+D:向下滚动半屏
u, ctrl+U:向上滚动半屏
1G:跳到首行
G:跳到文档末尾
/abc:向下搜索abc,按n向下跳转,按N向上跳转
?abc:向上搜索abc,按n向下跳转,按N向上跳转
q:退出`man`页面
--------------------------
# 常用关键字及格式
[]: 可选项
<>: 必选项
a|b:二选一
...:同一内容可出现多次
{ }:分组
--------------------------
# 段落说明
NAME:名称及说明
DESCRIPTION:详细说明
SYNOPSIS:使用格式
FILES:相关文件
OPTIONS:选项
AUTHOR:作者
REPORTING BUGS:相关bug信息
COPYRIGHT:版权及开源协议信息
EXAMPLES:使用示例
SEE ALSO:可参考其它部分
4. 总结linux文件系统目录结构和目录的功能。
4.1 Linux文件系统的目录结构
- 文件和目录被组织成一个单根倒置树结构
- 文件系统从根目录下开始,用“/”表示
- 根文件系统(rootfs):root filesystem
- 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
- 以 . 开头的文件为隐藏文件
- 路径分隔的 /
- 文件名最长255个字节
- 包括路径在内文件名称最长4095个字节
- 蓝色-->目录 绿色-->可执行文件 红色-->压缩文件 浅蓝色-->链接文件 灰色-->其他文件
- 除了斜杠和NUL,所有字符都有效,但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
- 每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容
4.2 Linux文件系统的目录的功能
- 根目录(/):所有目录或文件的最高层级,是Linux文件系统的起点。
- /boot/:系统启动目录,存放系统启动相关的文件,如内核文件和启动引导程序(如grub)文件等。
- /etc/:配置文件保存位置,系统内所有采用默认安装方式的服务的配置文件全部保存在此目录中,如用户信息文件/etc/passwd等。
- /lib/:系统调用的函数库保存位置,存放共享程序库和映像文件,可供多个程序使用,以减少每个程序分别保存库文件的需要。
- /proc/:虚拟目录,目录中所有信息都是内存的映射,可以与内核内部数据结构进行交互,获取有关进程的信息,同时也可以在系统运行中修改内核参数。与其他目录不同,/proc存在于内存中,而不是硬盘上。
- /bin/:存放所有用户使用的基本命令,这些命令不能关联至独立分区,因为它们是OS启动即会用到的程序。
- /sbin/:存放管理类的基本命令,同样不能关联至独立分区,因为它们是OS启动即会用到的程序。
- /lib64/:专用于x86_64系统上的辅助共享库文件存放位置。
- /home/USERNAME/:普通用户的家目录,每个用户都有自己的目录,用于存放个人文件和设置。
- /root/:管理员的家目录,用于存放管理员的个人文件和设置。
- /media/:便携式移动设备的挂载点,如USB驱动器或外部硬盘。
- /mnt/:临时文件系统挂载点,用于临时挂载其他文件系统。
- /dev/:设备文件及特殊文件存储位置,包括块设备(block device)和字符设备(character device)。
- /opt/:第三方应用程序的安装位置,通常用于安装非标准包管理器的软件。
- /srv/:系统上运行的服务用到的数据,如Web服务器的文档根目录。
- /tmp/:临时文件存储位置,用于保存系统两次重启之间产生的临时数据。
- /usr/:universal shared, read-only data,包含系统和应用程序的只读数据,如应用程序、库文件和文档。
- /var/:variable data files,用于存储可变数据,如应用程序缓存、日志文件和状态信息。
- /sys/:用于输出当前系统上硬件设备相关信息的虚拟文件系统。
- /selinux/:security enhanced Linux,存储与SELinux相关的安全策略等信息。
5. 总结文件操作常见的命令和文件夹常见操作和命令。
1、命令名称:ls (显示目录文件)
命令的格式:命令 [-选项] [参数]
选项:
-a 显示所有文件,包括隐藏文件(“.”开头的文件)
-l 详细信息显示
-d 查看文件属性
-h 文件大小显示为常见单位
-i 查询文件的Inode号
-R 递归显示目录及子目录
-n 显示文件的UID和GID
2、命令名称:touch【创建空文件/更新修改时间/访问时间】
命令格式:touch 文件名
ls /root/hf2401
根目录 上级目录与下级文件/目录的分隔符
“/”:根目录 根目录下boot :根目录下分区
/boot :根下boot分区
/home :根下home分区
### 🔶Linux文件命名规则
- 1. 除了“/”之外所有字符都合法
- 2. 有些字符最好不用(!@ # % & ……特殊符号)
- 3. 避免使用“.”作为普通文件的开头
- 4. Linux严格区分大小写
- 5. 长度不能超过255字符
3、命令名称:mkdir(创建新目录)
命令格式:命令 [-选项] [参数]
选项:
-v:显示创建过程
-p:递归创建
使用方式:mkdir -pv /root/a/b/c/d #显示递归创建目录的过程
4、命令名称:cd(切换目录)
命令格式:命令[-选项][参数]
语法: cd 目录
cd ~ 进入当前用户的家目录
cd - 进入上次目录
cd .. 返回上一级目录 (上级目录iNode号)
cd ../.. 返回上两级目录
cd . 进入当前目录
倒置的树状图,最顶端的为根目录(/)
5、命令名称:pwd(显示当前目录)
6、命令名称:tree(显示目录树)
6.5 命令:pstree (查看进程树之间的关系)
命令格式:pstree [选项]
选项:
-A :进程树之间的链接以ASCII码字符链接
-p :同时列出每个进程的PID
-u :同时列出每个进程的所属账号名称
7、命令:cp (复制、复制并改名)
命令格式:cp 源文件或目录 目标目录
选项:
-r :复制目录
-p :保留文件属性
-a :相当于 -rp (复制目录并保留文件属性)
8、命令:mv (剪切、改名)
9、命令:rm (删除)
命令:rm #删除
选项:
-r :删除目录
-f :强制删除
#删除文件或目录后无法恢复;删除目录时会**确认是否**删除
常见用法:rm -rf #强制删除
10、命令:rmdir (删除空目录)
命令:rmdir (删除空目录)
选项:
-p :递归删除空目录
-v :显示指令执行的过程中
#rmdir命令 带判断性;判断删除的是不是目录,要是目录并且是空目录。
11、命令:cat (显示文件内容)(非交互式命令)
命令格式:cat 文件名 (显示文件内容)
选项:
-n :列出文件号
cat:显示多个文件内容
cat /etc/issue /etc/fstab /etc/passwd
cat:将多个文件合并后显示(按文件先后顺序)
(如果文件超过一页内容后只能看到最后一页的内容)
12、命令:ln (创建链接文件)
命令:ln [选项] 源文件位置 链接文件位置 #创建链接文件
选项
-s :创建符号链接(软链接)
使用:
ln 可以用来创建硬链接或软链接(符号链接)
ln 文件原位置 文件现位置 硬链接
ln -s 文件原位置 文件现位置 软链接
ln /root/def /opt/ #在/opt/目录下创建/root/def 文件的硬链接
ln -s /root/def /opt/ #在/opt/目录下创建/root/def 文件的软链接
6. 总结文件元数据相关的知识点,包含硬链接和软连接的区别等知识。
在Linux系统中,一切皆文件,
每个文件,又分为文件元数据和具体内容两部份,
一个文件元数据和其具体内容数据,在磁盘分区上,是分开存放的。
-----------------------------------------------磁盘在格式化时,系统会自动将磁盘分为两个区域,一个是 inode 区(inode table),用来存放文件的 inode,另一个是数据区,分成很多个block(块),用来存放文件的具体内容数据,一个磁盘分区上有多少个inode和多少个block,由系统自行决定,跟文件系统,磁盘分区大小,数据块大小有关,一个磁盘分区,能存放多少个文件,由文件大小,磁盘分区大小,inode数量决定,inode 编号可重复使用,当删除一个文件之后,其inode 编号会被回收,供下次新文件使用。
-----------------------------------------------
cp和inode
cp 命令:
分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
rm和inode
rm 命令:
链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode
如果mv命令的目标和源在相同的文件系统,作为mv 命令
用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
如果目标和源在一个不同的文件系统, mv 相当于cp 和 rm
🔴硬链接与软链接的区别
🔶硬链接
1.硬链接创建后,文件链接数量+1
2.互为硬链接的文件内容相同,互为硬链接的文件,修改任意一个,其余均会发生变化。
3.每删除一次硬链接,文件链接数量-1,当文件链接数量为1时,再次进行删除,为永久删除。
4.硬链接无法跨分区创建。
5.用户不能给目录创建硬链接。
🔶软链接(符号链接)
1.软链接创建后,文件链接数量不变。源文件和软链接文件inode号不同。
2.创建软链要使用绝对路径。
3.软链接的文件类型是l。
4.修改源文件,软链接会发生变化。修改软链接,源文件也会发生变化。
5.软链接删除,源文件不受影响。源文件删除,软链接变为失效状态。
6.软链接可以跨分区创建。
7.软链接可以对目录创建。
7. 总结通配符,管道,重定向,并且结合示例,添加注释信息。
7.1 通配符
#文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件
#通配符采用特定的符号,表示特定的含义,此特定符号称为元 meta 字符
#常见的通配符如下:
* #匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
? #匹配任何单个字符,一个汉字也算一个字符,
~ #当前用户家目录
. #当前工作目录
~+ #当前工作目录
~- #前一个工作目录
~mage #用户mage家目录
[0-9] #匹配数字范围
[a-z] #一个字母
[A-Z] #一个字母
[wang] #匹配列表中的任何的一个字符
[^wang] #匹配列表中的所有字符以外的字符
[^a-z] #匹配列表中的所有字符以外的字符
#匹配以a开头的
[root@ubuntu2204 ~]# ll a*
#匹配包含a的
[root@ubuntu2204 ~]# ll *a*
#匹配任意单字符文件名的文件
[root@ubuntu2204 ~]# ll ?
-rw-r--r-- 1 root root 0 Jul 22 22:34 a
#匹配两个字符
[root@ubuntu2204 ~]# ll ??
-rw-r--r-- 1 root root 0 Jul 22 22:34 ab
[ ] 和 { }
[root@rocky b]# ll file{1..5}
ls: cannot access 'file1': No such file or directory
ls: cannot access 'file2': No such file or directory
-rw-r--r--. 1 root root 0 Nov 22 10:07 file3
-rw-r--r--. 1 root root 0 Nov 22 10:07 file4
-rw-r--r--. 1 root root 0 Nov 22 10:07 file5
[root@rocky b]# ll file[1-5]
-rw-r--r--. 1 root root 0 Nov 22 10:07 file3
-rw-r--r--. 1 root root 0 Nov 22 10:07 file4
-rw-r--r--. 1 root root 0 Nov 22 10:07 file5
7.2 管道
管道(pipe):名顾思义,水管,从一端进去,再从另一端出来。
将前一个命令的输出作为后一个命令的输入,就像拿水管将两个命令连起来;
使用管道,要求前一个命令必须支持标准输出,后一个命令必须支持标准输入;
注意:STDERR 默认不能通过管道转发,可利用 2>&1 或 |& 实现
标准输出和标准错误输出同时使用管道
[root@ubuntu2204 ~]# ls fstab null 2>&1 | tr 'a-z' 'A-Z'
LS: CANNOT ACCESS 'NULL': NO SUCH FILE OR DIRECTORY
FSTAB
tee 命令
将标准输入复制到每个指定文件,并显示到标准输出
tee [OPTION]... [FILE]...
#常用选项
-a|--append #内容追加到给定的文件而非覆盖
-i|--ignore-interrupts #忽略中断信号
-p #对写入非管道的行为排查错误,其使用的是 warn-nopipe
--output-error[=模式] #设置写入出错时的行为 (warn|warn-nopipe|exit|exitnopipe)
#管道重定向
[root@ubuntu2204 ~]# echo hello | tee tee.log
hello
#tee.log 里面是hello,终端输出是HELLO
[root@ubuntu2204 ~]# echo hello | tee tee.log | tr 'a-z' 'A-Z'
HELLO
#追加
[root@ubuntu2204 ~]# echo hello | tr 'a-z' 'A-Z' | tee -a tee.log
HELLO
7.3 重定向
I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标
覆盖操作符,如果文件存在,会被覆盖
> #把STDOUT重定向到文件
1> #同上
2> #把STDERR重定向到文件
&> #把标准输出和错误都重定向
>& #和上面功能一样,建议使用上面方式
追加操作符,在原有文件的基础上追加内容
>> #追加标准输出重定向至文件
1>> #同上
2>> #追加标准错误重定向至文件
&>> #追加重定向
#标准输入重定向是使用文件来代替键盘的输入,
#从文件中读取数据,代替当前终端的输入设备输入的数据,
#此处要严格区分命令是否支持标准输入,标准输入和参数是两个概念;
#怎么判断命令能使用标准输入重定向?
不跟任何选项参数,直接回车,看是否等待标准输入,如果是,则该命令可以使用标准输入重定向。
标准输出至其它终端标准错误输出至其它终端
[root@ubuntu2204 ~]# cat fstab > /dev/pts/1
[root@ubuntu2204 ~]# cat null 2> /dev/pts/1
标准输出和错误输出各自定向至不同位置
[root@ubuntu2204 ~]# ls fstab null > out.log 2> err.log
合并标准输出和错误输出为同一个数据流进行重定向
标准输出重定向至 out.log,标准错误输出重定向至标准输出
[root@ubuntu2204 ~]# ls fstab null > out.log 2>&1
标准错误输出重定向到 out.log,标准输出重定向至标准错误输出
[root@ubuntu2204 ~]# ls fstab null 2> out.log 1>&2
[root@ubuntu2204 ~]# ls fstab null &> out.log
错误写法:
#标准错误输出重定向至标准输出之前,要先定义好标准输出的文件
[root@ubuntu2204 ~]# ls fstab null 2>&1 > out.log
清除大文件:
#通用
[root@ubuntu2204 ~]# cat /dev/null > /data/file.log
#依赖于shell类型,不通用
[root@ubuntu2204 ~]# > /data/file.log
-----------------
标准输入重定向
tr 命令
用于转换字符、删除字符和压缩重复的字符。它从标准输入读取数据并将结果输出到标准输出
tr [OPTION]... SET1 [SET2]
#常用选项
-c|-C|--complement #用SET2替换SET1中没有包含的字符
-d|--delete #删除SET1中所有的字符,不转换
-s|--squeeze-repeats #压缩SET1中重复的字符,即删除重复的字符
-t|--truncate-set1 #将SET1用SET2替换,SET2中不够的,就不处理
#将issue文件中的小写字母换成大写,然后输出
[root@ubuntu2204 ~]# tr [:lower:] [:upper:] </etc/issue
#多行执行
[root@ubuntu2204 ~]# seq -s + 10 > a.txt;bc<a.txt>rs.txt
[root@ubuntu2204 ~]# cat rs.txt
55
------------------
标准输入多行重定向
使用 "<<终止词" 命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,
有时被称为就地文本(here documents),其中终止词可以是任何一个或多个符号,比如:!,@,$,
EOF(End Of File),magedu等,其中EOF比较常用
[root@ubuntu2204 ~]# cat > abc.txt <<EOF
> 123
> 456
> 789
> EOF
[root@ubuntu2204 ~]# cat abc.txt
123
456
789
-----------------
cmd <<< "string"
含义是 here-string ,表示传给给cmd的stdin的内容从这里开始是一个字符串。
[root@ubuntu2204 ~]# tr 'a-z' 'A-Z' <<< "welcome to magedu"
WELCOME TO MAGEDU
[root@ubuntu2204 ~]# tr 'a-z' 'A-Z' <<< `hostname`
ROCKY86
cmd1 < <(cmd2)
名称为 Process substitution ,是由两个部分组成
<(cmd2) 表示把cmd2的输出写入一个临时文件
注意:< 符号 与( 符号之间没有空格
cmd1 < 这是一个标准的stdin重定向
把两个合起来,就是把cmd2的输出stdout传递给cmd1作为输入stdin, 中间通过临时文件做传递
[root@ubuntu2204 ~]# tr 'a-z' 'A-Z' < <(hostname)
ROCKY86
#查看中间文件
[root@rocky ~]# ll <(hostname)
lr-x------. 1 root root 64 Nov 24 10:02 /dev/fd/63 -> 'pipe:[216239]'