标准错误重定向
标准错误重定向
标准错误重定向是一种Linux/Unix操作系统中常见的输入输出重定向技术,用于将程序的错误输出(stderr)重定向到文件或程序的标准输出(stdout)上,从而实现对程序输出结果的控制和管理。
在Linux/Unix系统中,每个进程都有三个标准的I/O流:
- 标准输入(stdin):通常输入设备为键盘;
- 标准输出(stdout):通常输出设备为屏幕;
- 标准错误(stderr):通常输出设备为屏幕,用于输出错误信息。
当程序执行时,如果没有进行重定向操作,三个I/O流将连接到终端设备(通常为屏幕和键盘)。当程序发生错误时,错误信息会输出到标准错误流(stderr),并打印在屏幕上。这时,用户不方便对错误信息进行保存、查看和处理。
使用标准错误重定向技术,可以将程序的错误输出流(stderr)重定向到文件或程序的标准输出流(stdout)上,以方便对程序的输出进行控制、管理和分析。例如,将错误日志输出到一个文件:
command > output.txt 2> error.txt
上述命令表示将命令command的标准输出重定向到output.txt文件中,将标准错误重定向到error.txt文件中。
需要注意的是,标准输入、标准输出和标准错误三者之间是相互独立的,因此需要对它们进行单独的重定向操作。
管道命令
命令A|命令B --> 命令A的输出当做命令B的输入
管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
例如,统计系统设备目录 /dev 下有多少个文件或子目录:
ls -l /dev | wc -l
IDE和SCSI硬盘命名规则
IDE(Integrated Drive Electronics)硬盘和 SCSI(Small Computer System Interface)硬盘在 Linux 中有不同的设备命名规则。
对于 IDE 硬盘,Linux 会将其命名为 /dev/hd[a-d][1-15]。其中,a-d 表示硬盘的 IDE 接口编号(a 表示第一接口,b 表示第二接口,以此类推),1-15 表示硬盘的分区编号(1 表示主分区,2-15 表示扩展分区中的逻辑分区)。例如,/dev/hda 表示第一接口上的主分区,/dev/hdb3 表示第二接口上的扩展分区中的第二个逻辑分区。
对于 SCSI 硬盘,Linux 会将其命名为 /dev/sd[a-p][1-15]。其中,a-p 表示 SCSI 硬盘的编号,1-15 表示硬盘的分区编号。例如,/dev/sda 表示第一个 SCSI 硬盘上的主分区,/dev/sdb3 表示第二个 SCSI 硬盘上的扩展分区中的第二个逻辑分区。
需要注意的是,对于一些新的硬盘,Linux 可能会将其命名为 /dev/nvme[0-9]n[1-31],其中 [0-9] 表示控制器编号,[1-31] 表示硬盘的分区编号。例如,/dev/nvme0n1 表示第一个 NVMe 硬盘上的主分区,/dev/nvme1n1p3 表示第二个 NVMe 硬盘上的扩展分区中的第一个逻辑分区。
总之,IDE 硬盘和 SCSI 硬盘在 Linux 中有不同的设备命名规则,需要根据具体情况选择正确的设备名称来进行操作。
Linux文件系统
Linux 文件系统是指 Linux 操作系统用于管理文件和目录的体系结构。在 Linux 中,文件系统是以文件的形式存储在硬盘中的,每个文件都有唯一的文件名和路径。Linux 文件系统的设计是基于树形目录结构,顶层目录为根目录(/),下面分别是各级子目录,最底层是文件或空目录。
Linux 文件系统支持多种类型的文件系统,如 ext2、ext3、ext4、XFS、JFS、Btrfs 等。每种文件系统都有其特定的优缺点和适用场景。
Linux 文件系统中的常用目录有:
/bin:存放常用的命令和可执行文件。
/boot:存放启动 Linux 系统所需的文件,例如 Linux 内核、引导程序等。
/dev:存放设备文件,Linux 中一切皆为文件,通过设备文件可以访问硬件设备。
/etc:存放系统的配置文件,例如用户信息、网络配置、服务配置等。
/home:存放用户的主目录。
/lib:存放系统库文件。
/media:自动挂载的可移动设备目录,例如 U 盘、光驱等。
/mnt:手动挂载的设备目录。
/opt:存放安装的可选软件。
/proc:存放内存中的进程信息和系统信息。
/root:root 用户的主目录。
/run:存放系统运行时的临时文件。
/sbin:存放系统管理员使用的命令和可执行文件。
/sys:存放系统硬件信息。
/tmp:存放临时文件。
/usr:存放用户安装的软件和文件,系统管理员不应该在此目录下进行操作。
/var:存放系统日志、邮件、数据库等可变的文件。
Linux 文件系统的根目录(/)是系统中所有文件和目录的起点,是文件系统的基础。在 Linux 中,通过文件系统的树形结构,用户可以方便地查找和管理系统中的文件和目录。
sed命令
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
基本语法
sed [options] '{command}[flags]' [filename]
# 中括号内容必有 大括号内容可有可无
sed # 执行命令
[options] # 命令选项
{command}[flags] # sed内部选项和参数
[filename] # 文件
命令选项
-e script 将脚本中指定的命令添加到处理输入时执行的命令中, 多条件,一行中要有多个操作
-f script 将文件中指定的命令添加到处理输入时执行的命令中
-n 抑制自动输出
-i 编辑文件内容
-i.bak 修改时同时创建.bak备份文件。
-r 使用扩展的正则表达式
! 取反 (跟在模式条件后与shell有所区别)
sed常用内部命令
a 在匹配后面添加
i 在匹配前面添加
p 打印
d 删除
s 查找替换
c 更改
y 转换 N D P
flags
数字 表示新文本替换的模式
g: 表示用新文本替换现有文本的全部实例
p: 表示打印原始的内容
w filename: 将替换的结果写入文件
awk命令
工作原理
逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
awk语法
awk ‘BEGIN {commands} pattern {commands}END{commands}' file1
BEGIN:处理数据前执行的命令
END:处理数据后执行的命令
pattern:模式,每一行都执行的命令
BEGIN和END里的命令只是执行一次
pattern里的命令会匹配每一行去处理
echo命令
echo是linux系统中使用频率很高的一个命令,它的主要作用是在屏幕上输出信息。
命令格式:echo args #args 可以是字符串和变量的组合
常用参数:
-n 不换行输出内容
-e 解析转义字符(见下面的字符)
转义字符
\n 换行
\r 回车
\t 制表符(tab)
\b 退格
\v 纵向制表符
man 命令
man 命令是 Linux 系统中的一个非常常用的命令,它用于显示 Linux 系统的帮助手册,即 man page。man page 是 Linux 系统中的一种在线帮助文档,它包含了系统命令、函数、配置文件等各种信息的详细说明。
语法格式
man [OPTION]... [SECTION] NAME...
其中,OPTION 表示 man 命令的选项,SECTION 表示要查看的 man page 的章节号,NAME 表示要查看的 man page 的名称。
参数介绍
-a:显示所有匹配的 man page。
-f:显示与指定名称相关的命令或函数。
-k:显示与指定关键字相关的 man page。
-w:仅显示 man page 的路径名,不进行分页显示。
-C:指定 man page 的缓存时间。
-I:忽略大小写。
-S:指定 man page 所在的软件包。
-M:指定 man page 的搜索路径。
-P:指定分页程序。
-p:指定搜索路径。
-t:将 man page 输出为 PostScript 格式文件。
-h:显示帮助信息。
在 man 命令中,SECTION 表示 man page 所在的章节号,一般有以下 8 个章节:
1:用户命令。
2:系统调用。
3:C 库函数。
4:设备文件。
5:配置文件。
6:游戏。
7:惯例和协议。
8:系统管理命令。
通过 man 命令,你可以查看系统中所有命令和函数的详细使用方法,并且可以很方便地进行搜索和查找。