Linux基础_2

news2024/9/20 1:24:21

目录

一、获取帮助

1、whatis

2、查看命令的帮助

内部命令

外部命令

3、man命令

作用:提供命令帮助的文件

4、info命令

作用:常用于命令参考,GNU工具,适合通用文档参考

5、Linux安装提供的本地文档获取帮助

Applications -> documentation -> help (C7)System -> help (C6)

6、命令自身提供的官方使用指南

二、文件管理

1、文件系统目录结构

1.1文件系统的目录结构

1.2常见的文件系统目录功能

1.3应用程序的组成部分

1.4Linux下的文件类型

2、文件操作命令

2.1显示当前工作目录

2.2绝对和相对路径

2.3更改目录

2.4列出目录内容

2.5查看文件状态stat

2.6确定文件内容

2.7文件通配符模式 wildcard pattern

2.8创建空文件和刷新时间

2.9复制文件和目录

2.10移动和重命名文件

2.11 删除文件

2.12 显示目录树

2.12.1 显示目录树 tree

2.12.2 创建目录mkdir

2.11.3 删除空目录rmdir

三、文件元数据和节点表结构

1、inode表结构

cp和inode,cp 命令:

rm和inode,rm 命令:

mv和inode,mv 命令:

2、硬链接(hard)In

3、符号(symblic) / 软(soft)链接 (浅蓝色文件)

4、硬链接和软链接区别总结

四、标准I/O重定向和管道

1、标准输入和输出

2、I/O重定向 redirect

2.1标准输出和错误重新定向

到同一个文件的不同写法

2.2    标准输入重定向

2.2.1 tr 命令

2.2.2 标准输入重定向

2.2.3 多行重定向

3、管道

3.1 管道

3.2 管道中的 - 符号

3.3 tee 命令


一、获取帮助

  •  whatis
  • comman --help
  • man and info
  • /usr/share/doc/
  • Red Hat documentation
  • 其它网站和搜索

1、whatis

功能:显示命令的简短描述

新安装的电脑没有对应文档,输入时会显示nothing

可以使用mandb(C7之后)来提前生成数据库,这样后就可以使用whatis cmd

mandb 生成数据库 C7之后
makewhatis C6之前

whatis command
或
man -f command

2、查看命令的帮助

内部命令

内部命令:
help command
man bash

外部命令

外部命令:
command --help 或 command -h
man command 	使用manual手册
info command	信息页

对于command --help和command -h

功能:显示用法总结和参数列表,大部分命令都有,但不是全部

而大多数命令支持-help,少数支持--help和-h

对于命令的帮助,有如下格式说明:

  • []        表示可选项
  • caps <> 表示变化的数据
  • ...        表示一个列表
  • x|y|z    表示x或y或z,选其一
  • -abc    表示-a -b -c
  • {}        表示分组

注意:以上这些只适用于查询命令的帮助


3、man命令

作用:提供命令帮助的文件

其手册页存放在/usr/share/man,几乎每个命令都有man的页面

man页面分组为不同的章节,统称为Linux手册,man 1 man

1	用户命令
2	系统调用
3	C库调用
4	设备文件和特殊文件
5	配置文件格式
6	游戏
7	杂项
8	管理类的命令
9	Linux内核API

测试:我们使用whatis cmd,如whatis rm

这里显示的就是章节1

使用man查看帮助:

man [章节] keyword

 man帮助段落说明:

NAME		名称及简要说明
SYNOPSIS用法格式说明
[]			可选内容
<>			必选内容
a|b 		二选一
{}			分组
...			同一内容可出现多次
DESCRIPTION 详细说明
OPTIONS 	选项说明
EXAMPLES	示例
FILES		相关文件
AUTHOR		作者
COPYRIGHT	版本信息
REPORTING BUGS bug信息
SEE ALSO	其它帮助参考 

列出所有帮助,退出一个会提示是否进入下一个,直至最后一个

man -a keyword

搜索man手册

man -k keyword

显示man帮助文件的路径,类似但逊于wheris

man -w [章节] keyword

4、info命令

作用:常用于命令参考,GNU工具,适合通用文档参考

没有参数,列出所有的页面,页面结构像一个网站,每一页分为”节点”,链接节点之前*

格式:

info [command]

导航info页:

防向键/PgUp/PgDn	导航
Tab键		移动到下一个链接
d			显示主题目录
Home		显示主题首部
Enter		进入选定链接
n/p/u/l 	进入下/前/上一层/最后一个链接
s			文字文本搜索
q			退出info

5、Linux安装提供的本地文档获取帮助

Applications -> documentation -> help (C7)
System -> help (C6)


6、命令自身提供的官方使用指南

/usr/share/doc目录

多数安装了的软件包的子目录,包括了这些软件的相关原理说明常见文档:README INSTALL   CHANGES, 不适合其它地方的文档的位置,配置文件范例,HTML/PDF/PS格式的文档,授权书详情


二、文件管理

1、文件系统目录结构

1.1文件系统的目录结构

各种规则:

  • 文件和目录被组织成一个单根倒置树结构
  • 文件系统从根目录下开始,用"/"表示
  • 根文件系统(rootfs): root filesystem
  • 标准Linux文件系统(如: ext4),文件名称大小写敏感,例如:MAIL,Mail,mail,mAil
  • 以 . 开头的文件为隐藏文件
  • 路径分隔的 /
  • 文件名最长255个字节
  • 包括路径在内文件名称最长4095个字节
  • 蓝色-->目录 绿色-->可执行文件 红色->压缩文件 浅蓝色->链接文件 灰色>其他文件
  • 除了斜杠和NULL,所有字符都有效,但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
  • 每个文件都有两类相关数据: 元数据: metadata,即属性;数据: data,即文件内容

Linux的文件系统分层结构:FHS Filesystem Hierarchy Standard 文件系统层次化标准

1.2常见的文件系统目录功能

/boot: 	引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader, grub)都存放于此目录
/bin: 	所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
/sbin: 	管理类的基本命令; 不能关联至独立分区,OS启动即会用到的程序
/lib: 	启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
/lib64: 专用于x86_64系统上的辅助共享库文件存放位置
/etc: 	配置文件目录
/home/USERNAME: 普通用户家目录
/root: 	管理员的家目录
/media: 便携式移动设备挂载点
/mnt:	临时文件系统挂载点
/dev: 	设备文件及特殊文件存储位置
	b: block device 	 随机访问
	c: character device  线性访问
/opt: 	第三方应用程序的安装位置
/srv:	系统上运行的服务用到的数据
/tmp:	临时文件存储位置
/usr: 	universal shared,read-only data
	bin: 保证系统拥有完整功能而提供的应用程序
	sbin:
lib: 32位使用
lib64: 只存在64位系统
include: C程序的头文件(header files)
share: 	结构化独立的数据,例如doc, man等
	local: 第三方应用程序的安装位置
	bin, sbin, lib, lib64, etc, share
/var: variable data files
	cache: 	应用程序缓存数据目录
	lib: 	应用程序状态信息数据
	local: 	专用于为/usr/local下的应用程序存储可变数据
	lock: 	锁文件
	log: 	日志目录及文件
	opt: 	专用于为/opt下的应用程序存储可变数据
	run: 	运行中的进程相关数据,通常用于存储进程pid文件
	spool:	应用程序数据池
	tmp: 	保存系统两次重启之间产生的临时数据	
/proc: 		用于输出内核与进程信息相关的虚拟文件系统
/sys: 		用于输出当前系统上硬件设备相关信息虚拟文件系统
/selinux: security enhanced Linux,selinux相关的安全策略等信息的存储位置

C7及以后,目录结构有些许变化:

  • /bin    和 /usr/bin
  • /sbin    和 /usr/sbin
  • /lib     和 /usr/lib
  • /lib64     和 /usr/lib64

C7后的某些目录已经成为快捷方式

1.3应用程序的组成部分

  • 二进制程序: /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
  • 库文件: /lib,/lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
  • 配置文件: /etc,/etc/DIRECTORY, /usr/local/etc
  • 帮助文件: /usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc

1.4Linux下的文件类型

共7种:

  •  -    普通文件
  • d    目录文件 directory
  • b    块设备 block character
  • c    字符设备 character
  •  l    符号链接文件 link
  • p    管道文件 pipe
  • s    套接字文件 socket 

一般显示在文件头


2、文件操作命令

2.1显示当前工作目录

命令:

pwd

2.2绝对和相对路径

  • 绝对路径:

正斜杠/即根目录开始
    完整的文件的位置路径
    可用于任何想指定一个文件名的时候

  • 相对路径名:

不以斜线开始
    一般情况下,指定相对于当前工作目录,或特殊场景下相对于某目录的位置
    可以作为一个简短的形式指定一个文件名

basename	基名:	只取文件名而不要路径
dirname		目录名:	只取路径,不要文件名

对于这样一个目录/etc/sysconfig/network-scripts/

basename 即 network-scripts/
dirname 即 /etc/sysconfig/

同时,basename和dirname本身也是2个命令

basename   目录 显示基名
dirname    目录 显示目录名

2.3更改目录

命令:cd:change directory,可以使用绝对或相对路径

cd ..  切换至父目录,即上级目录
cd	   切换至当前用户主目录
cd -   切换至以前的工作目录

选项:-P 切换至物理路径,而非软链接目录

相关的环境变量:

  • PWD:当前目录路径
  • OLDPWD:上一次目录路径

注意:
.  表示当前目录
.. 表示上级目录

2.4列出目录内容

ls命令可以列出当前目录的内容或指定目录

ls [options] [files_or_dirs]

options:

  • -a  包含隐藏文件
  • -l   显示额外的信息
  • -R 目录递归
  • -ld 目录和符号链接信息
  • -1  文件分行显示
  • -S  按从大到小排序
  • -t   按mtime排序
  • -u  配合-t选项,显示并按atime从新到旧排序
  • -U 按目录存放顺序显示
  • -X 按文件后缀排序v
说明:
ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS和@LS_COLORS变量定义

2.5查看文件状态stat

文件相关信息: metadata, data

每个文件有三个时间戳

  • atime:access time 访问时间,读取文件内容
  • mtime:modify time 修改时间,改变文件内容 (数据)
  • ctime:change time 改变时间,元数据发生改变

stat可以查看文件时间、大小、编号等信息 

stat filename

2.6确定文件内容

文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定打开命令或应用程序的适当使用

file [options] <filename>...

options:

  • -b         列出文件辨识结果时,不显示文件名称
  • -f          filelist 列出文件filelist中文件名的文件类型
  • -F         使用指定分隔符号替换输出文件名后默认的 " . " 分隔符
  • -L         查看对应软链接对应文件的文件类型
  • --help    显示命令在线帮助

linux与windows的文本文件格式有所不同,win里换行和回车分开,Linux是合在一起

查看文件格式与改变编码格式:

查看全球编码列表:
iconv -l

将gb2312文本格式转换成utf-8
iconv -f gb2312 filename1 -t utf-8 -o filename2

将windows的文本格式修改为Linux的文本格式:
dos2unix filename

将Linux的文本格式修改为Windows的文本格式:
unix2dos filename

2.7文件通配符模式 wildcard pattern

文件通配符可以用来匹配符合条件的多个文件,方便批理管理文件

通配符采有特定的符号,表示特定的含义,此特符号称为元meta字符

一般用来搜索现有文件ls等,创建文件touch等不支持

常见的通配符如下:

*	匹配零个或多个字符,无法匹配隐藏文件或字符
?	匹配任何单个字符
~	当前用户家目录
~mage	当前mage家目录
~+和.	当前工作目录
~-		前一个工作目录
[0-9]	匹配数字范围
[a-z]	字母
[A-z]	字母
[wang]	匹配列表中的任何的一个字符
[Awang] 匹配列表中的所有字符以外的字符

另外还有在Linux系统中预定义的字符类: man 7 glob

[:digit:]: 	任意数字,相当于0-9
[:lower:]: 	任意小写字母,表示 a-z
[:upper:]:	任意大写字母,表示 A-Z
[:alpha:]:	任意大小写字母
[:alnum:]:	任意数字或字母
[:blank:]: 	水平空白字符
[:space:]: 	水平或垂直空白字符
[:punct:]: 	标点符号
[:print:]: 	可打印字符
[:cntr1:]: 	控制(非打印) 字符
[:graph:]: 	图形字符
[:xdigit:]: 十六进制字符

2.8创建空文件和刷新时间

touch命令可以用来创建空文件或刷新文件的时间

touch [OPTIONS]... FILE...

options:

  • -a 仅改变 atime和ctime
  • -m 仅改变 mtime和ctime
  • -t [[CC]YY]MMDDhhmm[.ss]    指定atime和mtime的时间戳
  • -c 如果文件不存在,则不予创建

直接使用touch filename会刷新文件3个时间

2.9复制文件和目录

利用 cp (copy)命令可以实现文件或目录的复制
格式:

cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...

options:

  • - i    如果目标存在,覆盖前提示是否覆盖
  • -n    不覆盖,注意两者顺序
  • -r,-R 递归复制目录及内部的所有内容
  • -a    归档,相当于-dR --preserv=all  常用于备份,保留所有了属性和文件
  • -d --no-dereference --preserv=links    不复制原文件,只复制链接名
  • --preserv[=ATTR_LIST]
  •     mode: 权限
  •     ownership: 属主属组
  •     timestamp: 时间戳
  •     links
  •     xattr
  •     context
  •     all
  • -p    等同--preserv=mode,ownership,timestamp
  • -v    --verbose
  • -f    --force
  • -u    --update 只复制源比目标更新文件或目标不存在的文件
  • -b    目标存在,覆盖前先备份旧文件,形式为 filename.~  只保留最近一个备份 
  • -backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~  保留多个备份

note:

    cp命令单纯使用复制可能会丢属性,完全复制需要加选项

 总结

练习:

#1、每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd_HH-MM-SS,备份
过程可见
cp -av /etc/ /data/backup`date +%F_%T`

#2、创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
cp -a /root /data/rootdir

2.10移动和重命名文件

mv命令可以实现文件或目录的移动和改名

  • 同一分区移动数据,速度很快:数据位置没有变化
  • 不同分区移动数据,速度相对慢:数据位置发生了变化
格式:
mv [OPTION]...[-T] SOURCE DEST

mv [OPTION]...SOURCE... DIRECTORY

mv [OPTION]...-t DIRECTORY SOURCE...

option:

  • -i     交互式,问你删不删
  • -f     强制
  • -b    目标存在,覆盖前先备份

同时把文件中所有文件(包括隐藏和非隐藏文件)移动到其他地方,可以写上 . 而不是*

同时,利用rename可以批量修改文件名

rename [options] <expression> <replacement> <file>...

如:file1.txt文件,我要把它改成file1.txt.bbb文件

rename .txt .txt.bbb file*

如果想改回可以写成 '' 即可 

2.11 删除文件

使用 rm 命令可以删除文件

rm [OPTION]... FILE...

options:

  • -i    交互式
  • -f    强制删除
  • -r    递归
  • --no-preserve-root 删除根/

删除全部文件(包括隐藏和非隐藏文件):

rm -rf * .[^.]*

删除某些特殊文件,如 有个文件名就叫 -f

rm -- -f 或
rm ./-f 写出文件的绝对路径,较为通用

注意: 此命令非常危险,慎重使用,建议使用mv 代 rm


rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件

shred [OPTION]... FILE.

options:

  • -z    最后一次覆盖添加0,以隐藏覆盖操作
  • -v    能够显示操作进度
  • -u    覆盖后截断并删除文件
  • -n#    指定覆盖文件内容的次数 (默认值是3次)

2.12 显示目录树

2.12.1 显示目录树 tree

tree [FILE]
options:
  • -d:        只显示目录
  • -L    level:    指定显示的层级数目
  • -P pattern:    只显示由指定wild-card pattern匹配到的路径

2.12.2 创建目录mkdir

mkdir [目录]
options:
  • -p: 使我们连续创建目录时不因目录尚不存在而报错,且可自动创建所需的各目录
  • -v: 显示详细信息
  • -m MODE: 创建目录时直接指定权限

2.11.3 删除空目录rmdir

rmdir [目录]

options:

  • -p 递归删除父的空目录
  • -V 显示详细信息

注意: rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r命令,递归删除目录树


三、文件元数据和节点表结构

1、inode表结构

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这些元数据是存放在node (index node) 表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息

第一个node表记录对应的保存了以下信息:

  • inode number 节点号
  • 文件类型
  • 权限
  • UID
  • GID
  • 链接数 (指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数

inode结构:

目录

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系

  • 文件引用inode号
  • 通过文件名来引用一个文件
  • 目录是目录下的文件名和文件inode号之间的映射
  • 文件名不存在inode表中

各种命令的实际运行效果

cp和inode,cp 命令:

  • 分配一个空闲的inode号,在inode表中生成新条目
  • 在目录中创建一个目录项,将名称与inode编号关联
  • 拷贝数据生成新的文件

rm和inode,rm 命令:

  • 链接数递减,从而释放的inode号可以被重用
  • 把数据块放在空闲列表中
  • 删除目录项
  • 数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv和inode,mv 命令:

  • 如果mv命令的目标和源在相同的文件系统,作为mv 命令

        用新的文件名创建对应新的目录项

        删除旧目录条目对应的旧的文件名

        不影响inode表(除时间戳)或磁盘上的数据位置: 没有数据被移动!

  • 如果目标和源在一个不同的文件系统,mv相当于p和rm,先拷贝再删除

2、硬链接(hard)In

硬链接本质上就给一个文件起一个新的名称,实质是同一个文件

特性:

  • 创建硬链接会增加额外的记录项以引用文件
  • 对应于同一文件系统上一个物理文件
  • 每个目录引用相同的inode号
  • 创建时链接数递增
  • 删除文件时: rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
  • 不能跨越驱动器或分区
  • 不支持对目录创建硬链接
ln filename [linkname]

 红色即链接数,链接数:相当于名字的个数


3、符号(symblic) / 软(soft)链接 (浅蓝色文件)

一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件

特点:

  • 一个符号链接的内容是它引用文件的名称
  • 可以对目录创建软链接
  • 可以跨分区的文件实现
  • 指向的是另一个文件的路径,其大小为指向的路径字符串的长度,不增加或减少目标文件inode的引用计数
  • 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
ln -s filename [linkname]

4、硬链接和软链接区别总结

1.本质

  • 硬链接:    本质是同一个文件
  • 软链接:    本质不是同一个文件

2. 跨设备

  • 硬链接:    不支持
  • 软链接:    支持

3. inode

  • 硬链接:    相同
  • 软链接:    不同

4.链接数

  • 硬链接:   创建新的硬链接,链接数会增加,删除硬链接,链接数减少
  • 软链接:   创建或删除,链接数不会变化

5.文件夹

  • 硬链接:    不支持
  • 软链接:    支持

6.相对路径 

  • 硬链接:    原始文件相对路径是相对于当前工作目录
  • 软链接:    原始文件的相对路径是相对于链接文件的相对路径

7.删除源文件

  • 硬链接:    只是链接数减一,但链接文件的访问不受影响
  • 软链接:    链接文件将无法访问

8.文件类型

  • 硬链接:    和源文件相同
  • 软链接:    链接文件,和源文件无关

note:

  • upgrade/rollback:删除原链接,重新对新或旧版本加上软链接即可
  • 删除链接时,切记不要加上斜线/,否则会删除链接到目录下的所有文件:如 rm -rf data/ 会删除data下所有文件,而rm -rf data,只是删除软链接
  • 文件夹的链接数默认是2,根据.或..的数量可以增加

四、标准I/O重定向和管道

1、标准输入和输出

程序: 指令+数据

读入数据: Input        输出数据: Output
打开的文件都有一个fd: file descriptor (文件描述符)

Linux给程序提供三种 I/0 设备:

  • 标准输入 (STDIN):    0    默认接受来自终端窗口的输入
  • 标准输出 (STDOUT):1    默认输出到终端窗口
  • 标准错误 (STDERR):2    默认输出到终端窗口

2、I/O重定向 redirect

I/O重定向: 将默认的输入,输出或错误对应的设备改变,指向新的目标

2.1标准输出和错误重新定向

STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端

CMD 操作符号 FILENAME

支持的操作符号包括:

  • 1> 或 >    把STDOUT重定向到文件
  • >|             强制覆盖
  • 2>            把STDERR重定向到文件(如一些无法实现的错误指令的报错、或是覆盖文件时的提示是否要覆盖?)
  • &>            把所有输出重定向到文件
  • 2>&1        把标准错误重定向进标准输出中

以上如果文件已存在,文件内容会被覆盖

  • set    -C    禁止将内容覆盖已有文件,但可追加, 利用 >| 仍可强制覆盖
  • set   +C    允许覆盖,默认

追加:

  • >>      在原有内容基础上,追加标准输出重定向至文件
  • 2>>    在原有内容基础上,追加标准错误重定向至文件
  • %>>   合并标准输出和错误输出为同一个数据流进行重定向
  • &>      覆盖重定向
  • &>>    追加重定向

合并多个程序:

(CMD1;CMD2...)或{CMD1;CMD2;...;}合并多个程序的STDOUT

标准输出重定向:

echo -n  > ./stdout.log 或 hostname 1> /dev/pst/1 等

标准错误重定向:

rm stdout.log 2> stdout2.log 或 hhh 2> stdout.log 等

清除大文件:

cat /dev/null > filename

同时有标准输出和标准错误信息重定向

ls /data /err > /data/stdout.log 2> /data/stderr.log
或ls /data /err &> /data/stdout.log

到同一个文件的不同写法

1s /data /xxx > /data/a11.1og 2>&1
1s /data /xxx 2> /data/a11.1og 1>&2
1s /data /xxx &> /data/a11.1og
1s /data /xxx 2>&1 > /data/a11.1og  不行

2.2    标准输入重定向

从文件中导入STDIN,代替当前终端的输入设备,使用< 来重定向标准输入
某些命令能够接受从文件中导入的STDIN
使用seq生成1-5的数字相乘序列并直接报错至文件中,使用重定向使bc计算器自动计算文件中的数据:
seq -s* 1 5     生成1*2*3*4*5序列
seq -s* 1 5 > cal.log 将序列重定向至cal.log文件
cat cal.log    查看cal.log文件中的数据
bc < cal.log    使用计算器自动计算文件中数据

 

2.2.1 tr 命令

tr [OPTION]...SET1 [SET2]		tr 转换和删除字符

options:

  • -c     -C --complement:     取字符集的补集
  • -d     --delete:            删除所有属于第一字符集的字符
  • -s     --squeeze-repeats:    把连续重复的字符以单独一个字符表示,即去重
  • -t      --truncate-setl:    将第一个字符集对应字符转化为第二字符集对应的字符
  • [:alnum:]:     字母和数字
  • [:alpha:]:      字母
  • [:digit:]:        数字
  • [:lower:]:      小写字母
  • [:upper:]:     大写字母
  • [:space:]:     空白字符
  • [:print:]:       可打印字符
  • [:punct:]:     标点符号
  • [:graph:]:     图形字符
  • [:cntr1:]:      控制(非打印) 字符
  • [:xdigit:]:     十六进制字符
例1:使用echo创建1-100之间的数字,使用tr将数字之间的空格替换为+号,最后使用bc计算器计算
例2:使用echo创建A-Z 26个字母,再使用tr将字母间的空格替换为\n换行符

2.2.2 标准输入重定向

利用"<"可以将标准输入重定向

cat > file
hello
babe

按ctrl+d离开,可以使用文件来代替键盘的输入

cat < filel > file2
cat < file1 >> filel

2.2.3 多行重定向

使用"<<终止词"命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时被称为就地文本 (here documents)
其中终止词可以是任何一个或多个符号,比如: !,@,$,EOF (End of File) ,magedu等,其中EOF比较常用

如:

 使用PS2= ?可以修改输入前的提示符>


3、管道

3.1 管道

管道 (使用符号"|"表示) 用来连接多个命令

cmd1 | cmd2 | cmd3 ..

功能说明:

  • 将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
  • 所有命令会在当前shell进程的子shell进程中执行
  • 组合多种工具的功能
  • cmd1必须有标准输出,cmd2必须有标准输入,以此类推

注意:

STDERR标准错误默认不能通过管道转发,可利用 2>&1 或 |& 实现,格式如下

  • 命令1 2>&1 | 命令2
  • 命令1 |& 命令2

例:

一般情况下,我们使用seq生成一串数字序列,然后我们需要将其传入文件中,再将文件重定向使用计算器计算得出结果

而使用管道,我们可以跳过传入文件这一步,不创建过度文件,直接将数字序列重定向进计算器进行计算

3.2 管道中的 - 符号

管道中有时会使用 - 符号
示例:
将/home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar -cvf.
/home 传送给后面的 tar -xvf-,后面的这个则是取前一个命令的 stdout,因此,就不需要使用临时file了

tar -cvf - /home tar -xvf

3.3 tee 命令

利用tee命令可以重定向到多个目标

cmd1 | tee [-a ] filename | cmd2

以上可以把cmd1的STDOUT保存在文件中,做为cmd2的输入

option:

  • -a   追加

功能:

  • 保存不同阶段的输出
  • 复杂管道的故障排除
  • 同时查看和记录输出

例:非交互式修改用户密码,使用管道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES6的类 vs TypeScript的类:解密两种语言中的面向对象之争

文章目录 ES6 类ES6 类的常见特性1. 构造函数2. 实例方法3. 静态方法4. 继承 TypeScript 类TypeScript 类的特性1. 类型注解2. 访问修饰符3. 类型推断4. 接口实现 ES6 类 ES6&#xff08;ECMAScript 2015&#xff09;引入了类的概念&#xff0c;为 JavaScript 增加了面向对象编…

费马原理与光的反射折射

费马原理&#xff1a;光传播的路径是光程取极值的路径 光的反射 如上图所示&#xff0c;光从P点出发射向x点&#xff0c;反射到Q点。 P 点到 x 点的距离 d 1 x 2 a 2 d1 \sqrt{x^2 a^2} d1x2a2 ​ Q 点到 x 点的距离 d 2 b 2 ( l − x ) 2 d2 \sqrt{b^2 (l-x)^2} d2…

WebAPIs-DOM操作元素属性/自定义属性

Web APIs web APIs 操作页面元素做出各种效果 DOM 文档对象模型 使用js操作页面文档 BOM 浏览器对象模型 使用js操作浏览器 API 应用程序接口 接口&#xff1a;无需关心内部如何实现&#xff0c;只需要调用就可以很方便实现某些功能 作用&#xff1a;使用js提供的接口来操…

SQL事务与隔离

事务 事务的定义 事务是完成一个任务的多条语句,这些语句中,只要有一条语句失败,那么整个事务就会失败,即使之前的语句已经执行完毕也会被撤回 举个例子: 我去银行给王哥转钱,这个转钱呢分两个步骤,第一步先把我的钱拿出来,第二步把钱给王哥,那万一刚把我钱拿出来但是没到王…

大数据分析案例-基于LightGBM算法构建公司破产预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

1.网络基础

什么是网络&#xff1f; 信息传递&#xff0c;资源共享 计算机—1946年2月14日—电脑 电流—二进制— 1001—人类语言&#xff08;抽象语言&#xff09;—应用程序—编译—编码—应用层 把人类语言转化为二进制—表示层&#xff08;编码表&#xff09; 网路层——路由器&#x…

AI 绘画 - 建筑绘图辅助设计之生图

前情提要 2023-06-16 周五 杭州 小雨 小记: 今天下班&#xff0c;回来比较晚&#xff0c;端午节去看老弟&#xff0c;只希望下周不要那么多乱七八糟的事情了&#xff0c;继续AI 绘画&#xff0c;之前上学的时候从来不爱做笔记的&#xff0c;现在或许是老了吧&#xff0c;。 …

C语言复习笔记5

1.函数 #include<stdio.h>void Add(int *p) {(*p); }int main() {int time0;Add(&time);printf("%d\n",time);return 0; }2.二分查找 #include<stdio.h>void Add(int *p) {(*p); }int main() {int time0;Add(&time);printf("%d\n",t…

Linux常用命令——findfs命令

在线Linux命令查询工具 findfs 标签或UUID查找文件系统 补充说明 findfs命令依据卷标&#xff08;Label&#xff09;和UUID查找文件系统所对应的设备文件。findfs命令会搜索整个磁盘&#xff0c;看是否有匹配的标签或者UUID没有&#xff0c;如果有则打印到标注输出上。find…

Spring中的设计模式

目录 1.Spring中使用到的设计模式有&#xff1a; 2.工厂模式 3.单例模式 4.代理模式 5.模板模式 6.适配器模式 1.Spring中使用到的设计模式有&#xff1a; 工厂模式&#xff1a;实现IoC容器 单例模式&#xff1a;将bean设置为单例 代理模式&#xff1a;AOP的底层实现 模板…

聊一聊.NET的网页抓取和编码转换

在本文中&#xff0c;你会了解到两种用于 HTML 解析的类库。另外&#xff0c;我们将讨论关于网页抓取&#xff0c;编码转换和压缩处理的知识&#xff0c;以及如何在 .NET 中实现它们&#xff0c;最后进行优化和改进。 文章目录 1. 背景2. 网页抓取3. 编码转换4. 网页压缩处理5.…

C#,数值计算——哈夫曼编码与数据压缩技术(Huffman Coding and Compression of Data)源代码

1 霍夫曼编码导论 霍夫曼编码是一种基于数据集中符号频率的无损数据压缩形式。它是一种前缀编码方案&#xff0c;这意味着编码的数据不包含任何冗余比特。霍夫曼编码广泛应用于各种应用&#xff0c;如图像和视频压缩、数据传输和数据存储。 2 霍夫曼编码的优点 以下是霍夫曼编…

[LeetCode周赛复盘] 第 326 场周赛20230702

[LeetCode周赛复盘] 第 326 场周赛20230702 一、本周周赛总结6909. 最长奇偶子数组1. 题目描述2. 思路分析3. 代码实现 6916. 和等于目标值的质数对1. 题目描述2. 思路分析3. 代码实现 6911. 不间断子数组1. 题目描述2. 思路分析3. 代码实现 6894. 所有子数组中不平衡数字之和…

【小沐学Unity3d】Unity播放视频(VideoPlayer组件)

文章目录 1、简介2、脚本播放示例3、界面播放示例3.1 2d界面全屏播放3.2 2d界面部分区域播放3.3 3d模型表面播放 结语 1、简介 使用视频播放器组件可将视频文件附加到游戏对象&#xff0c;然后在运行时在游戏对象的纹理上播放。 视频播放器 (Video Player) 组件: 属性功能Sourc…

Java实现OpenAI 模型训练(fine-tune)

本文章介绍如何用java实现OpenAI模型训练&#xff0c;仅供参考 提前准备工作 OpenAI KEY&#xff0c;获取方式可自行百度需要自备VPN 或 使用国外服务器转发需要训练的数据集&#xff0c;文章格式要求为JSONL&#xff0c;格式内容详见下图&#xff08;尽量不要低于500个问答&…

openai

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;人工智能。 目录 1、简介2、如何实现3、api文档 1、简介 OpenAI 提供了一个名为 OpenAI API 的库&#xff0c;用…

npm构建vite项目

基础环境 npm init vitelatest 依次输入项目名称、使用框架、使用语言。 生成的项目 进入目录&#xff0c;安装依赖&#xff0c;启动项目。 cd 0702_demo01npm installnpm run dev

网络安全进阶学习第四课——SSRF服务器请求伪造

文章目录 一、什么是SSRF&#xff1f;二、SSRF成因三、SSRF简析四、PHP存在SSRF的风险函数五、后台源码获取方式六、SSRF危害七、SSRF漏洞挖掘从WEB功能上寻找&#xff0c;从URL关键字中寻找 八、SSRF具体利用ssrf常利用的相关协议PHP伪协议读取文件端口扫描 九、SSRF存在的必要…

架构分层方法指导

在《不过时的经典层架构》里讲了经典的四层架构怎样对易变性做封装。咱们实际项目中&#xff0c;如果没有足够的实践和关键性思考&#xff0c;还是很可能使用名义上科学的分类理论&#xff0c;却在按照功能进行架构分层。今天咱们就通过一些简单的指导来尽量减少这种风险。 四问…

LeetCode 75 —— 70. 爬楼梯

LeetCode 75 —— 70. 爬楼梯 一、题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法…