目录
1 获取帮助
-
whatis
-
comman --help
-
man and info
-
/usr/share/doc/
-
Red Hat documentation
-
其它网站和搜索
1.1 whatis
功能:显示命令的简短描述
新安装的电脑没有对应文档,输入时会显示nothing
可以使用mandb(C7之后)来提前生成数据库,这样后就可以使用whatis cmd
mandb 生成数据库 C7之后
makewhatis C6之前
whatis command
或
man -f command
1.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
{} 表示分组
注意:以上这些只适用于查询命令的帮助
1.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
1.4 info命令
作用:常用于命令参考,GNU工具,适合通用文档参考
没有参数,列出所有的页面,页面结构像一个网站,每一页分为”节点”,链接节点之前*
格式:
info [command]
导航info页:
方向键/PgUp/PgDn 导航
Tab键 移动到下一个链接
d 显示主题目录
Home 显示主题首部
Enter 进入选定链接
n/p/u/l 进入下/前/上一层/最后一个链接
s 文字文本搜索
q 退出info
1.5 Linux安装提供的本地文档获取帮助
Applications -> documentation -> help (C7)
System -> help (C6)
1.6 命令自身提供的官方使用指南
/usr/share/doc目录
多数安装了的软件包的子目录,包括了这些软件的相关原理说明常见文档:README INSTALL CHANGES, 不适合其它地方的文档的位置,配置文件范例,HTML/PDF/PS格式的文档,授权书详情
2 文件管理
2.1 文件系统目录结构
2.1.1文件系统的目录结构
各种规则:
-
文件和目录被组织成一个单根倒置树结构
-
文件系统从根目录下开始,用"/"表示
-
根文件系统(rootfs): root filesystem
-
标准Linux文件系统(如: ext4),文件名称大小写敏感,例如:MAIL,Mail,mail,mAil
-
以 . 开头的文件为隐藏文件
-
路径分隔的 /
-
文件名最长255个字节
-
包括路径在内文件名称最长4095个字节
-
蓝色-->目录 绿色-->可执行文件 红色->压缩文件 浅蓝色->链接文件 灰色>其他文件
-
除了斜杠和NULL,所有字符都有效,但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用
-
每个文件都有两类相关数据: 元数据: metadata,即属性;数据: data,即文件内容
Linux的文件系统分层结构:FHS Filesystem Hierarchy Standard 文件系统层次化标准
2.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后的某些目录已经成为快捷方式
2.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
2.1.4Linux下的文件类型
共7种:
-
- 普通文件
-
d 目录文件 directory
-
b 块设备 block character
-
c 字符设备 character
-
l 符号链接文件 link
-
p 管道文件 pipe
-
s 套接字文件 socket
一般显示在文件头
2.2文件操作命令
2.2.1显示当前工作目录
命令:
pwd
2.2.2绝对和相对路径
绝对路径:
-
以正斜杠/即根目录开始
-
完整的文件的位置路径
-
可用于任何想指定一个文件名的时候
相对路径名:
-
不以斜线开始
-
一般情况下,指定相对于当前工作目录,或特殊场景下相对于某目录的位置
-
可以作为一个简短的形式指定一个文件名
basename 基名: 只取文件名而不要路径
dirname 目录名:只取路径,不要文件名
对于这样一个目录/etc/sysconfig/network-scripts/
-
basename 即 network-scripts/
-
dirname 即 /etc/sysconfig/
同时,basename和dirname本身也是2个命令
basename 目录 显示基名
dirname 目录 显示目录名
2.2.3更改目录
命令:cd:change directory,可以使用绝对或相对路径
cd .. 切换至父目录,即上级目录
cd 切换至当前用户主目录
cd - 切换至以前的工作目录
选项:-P 切换至物理路径,而非软链接目录
相关的环境变量:
-
PWD:当前目录路径
-
OLDPWD:上一次目录路径
注意: . 表示当前目录 .. 表示上级目录
2.2.4列出目录内容
ls命令可以列出当前目录的内容或指定目录
ls [options] [files_or_dirs]
options:
-a 包含隐藏文件
-l 显示额外的信息
-R 目录递归
-ld 目录和符号链接信息
-1 文件分行显示
-S 按从大到小排序
-t 按mtime排序
-u 配合-t选项,显示并按atime从新到旧排序
-U 按目录存放顺序显示
-X 按文件后缀排序
说明: ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS和@LS_COLORS变量定义
2.2.5查看文件状态stat
文件相关信息: metadata, data 每个文件有三个时间戳
-
atime:access time 访问时间,读取文件内容
-
mtime:modify time 修改时间,改变文件内容 (数据)
-
ctime:change time 改变时间,元数据发生改变
2.2.6确定文件内容
文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定打开命令或应用程序的适当使用 格式:
file [options] <filename>...
常用选项:
-b 列出文件辨识结果时,不显示文件名称
-f filelist 列出文件filelist中文件名的文件类型
-F 使用指定分隔符号替换输出文件名后默认的”.”分隔符
-L 查看对应软链接对应文件的文件类型
--help 显示命令在线帮助
转换文件格式:
查看全球编码列表:
iconv -l
将gb2312文本格式转换成utf-8
iconv -f gb2312 filename1 -t utf-8 -o filename2
将windows的文本格式修改为Linux的文本格式:
dos2unix filename
将Linux的文本格式修改为Windows的文本格式:
unix2dos filename
2.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:]: 十六进制字符
例题:
#4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录列表
ls -d /etc/rc[0-6]* (加-d不进入目录,只显示目录本身)
#5、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录列表
ls -d /etc/[nmrp]*.conf
# 6、只显示/root下的隐藏文件和目录列表
ls -d .* 或l. (加-d不进入目录,只显示目录本身;l.本身就是ls -d .*的别名)
#7、只显示/etc下的非隐藏目录列表,不要文件
ls -d /etc/*/
2.2.8创建空文件和刷新时间
touch命令可以用来创建空文件或刷新文件的时间
格式:
touch [OPTIONS]... FILE...
options:
-a 仅改变 atime和ctime
-m 仅改变 mtime和ctime
-t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
-c 如果文件不存在,则不予创建
2.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,会继续使用纯~形式,如果使用过,则后续会跟上数字后缀)
-backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ 保留多个备份
注意: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.2.10移动和重命名文件
mv命令可以实现文件或目录的移动和改名
-
同一分区移动数据,速度很快:数据位置没有变化
-
不同分区移动数据,速度相对慢:数据位置发生了变化
格式:
mv [OPTION]...[-T] SOURCE DEST
mv [OPTION]...SOURCE... DIRECTORY
mv [OPTION]...-t DIRECTORY SOURCE...
options:
-i 交互式
-f 强制
-b 目标存在,覆盖前先备份
利用rename 可以批量修改文件名
格式:
rename [options] <expression> <replacement> <file>...
2.2.11 删除文件
使用 rm 命令可以删除文件
格式:
rm [OPTION]... FILE...
常用选项:
-i 交互式
-f 强制删除
-r 递归
--no-preserve-root 删除根/
例:
删除全部文件(包括隐藏和非隐藏文件):
rm -rf * .[^.]*
删除某些特殊文件,如 有个文件名就叫 -f
rm -- -f 或
rm ./-f 写出文件的绝对路径,较为通用
注意: 此命令非常危险,慎重使用,建议使用mv 代 rm
alias rm='mv -t /tmp/recycle/"%F_5T"
rm虽然删除了文件,但是被删除的文件仍然可能被恢复,在安全要求较高的场景下,可以使用shred安全删除文件
格式:
shred [OPTION]... FILE.
options:
-z 最后一次覆盖添加0,以隐藏覆盖操作
-v 能够显示操作进度
-u 覆盖后截断并删除文件
-n# 指定覆盖文件内容的次数 (默认值是3次)
2.2.12 显示目录树
2.2.12.1 显示目录树 tree
options:
-d: 只显示目录
-L level: 指定显示的层级数目
-P pattern: 只显示由指定wild-card pattern匹配到的路径
2.2.12.2 创建目录mkdir
options:
-p: 使我们连续创建目录时不因目录尚不存在而报错,且可自动创建所需的各目录
-v: 显示详细信息
-m MODE: 创建目录时直接指定权限
2.2.11.3 删除空目录rmdir
options:
-p 递归删除父的空目录
-V 显示详细信息
注意: rmdir只能删除空目录,如果想删除非空目录,可以使用rm -r命令,递归删除目录树
例:
(1)如何创建/testdir/dir1/x,/testdir/dir1/y,/testdir/dir1/x/a,
/testdir/dir1/x/b, /testdir/dir1/y/a,/testdir/dir1/y/b
mkdir -pv /testdir/dir1/{x..y} /testdir/dir1/{x..y}/{a..b}
(2)如何创建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a, /testdir/dir2/x/b
mkdir -pv /destdir/dir2/x/{a..b} destdir/dir2/y
3 文件元数据和节点表结构
3.1 inode表结构
每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这些元数据是存放在node (index node) 表中。node 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息 第一个node表记录对应的保存了以下信息:
-
inode number 节点号
-
文件类型
-
权限
-
UID
-
GID
-
链接数 (指向这个文件名路径名称个数)
-
该文件的大小和不同的时间戳
-
指向磁盘上文件的数据块指针
-
有关文件的其他数
目录 目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系
-
文件引用inode号
-
通过文件名来引用一个文件
-
目录是目录下的文件名和文件inode号之间的映射
-
文件名不存在inode表中
各种命令的实际运行效果 cp和inode
cp 命令
-
分配一个空闲的inode号,在inode表中生成新条目
-
在目录中创建一个目录项,将名称与inode编号关联
-
拷贝数据生成新的文件
rm和inode
-
rm 命令
-
链接数递减,从而释放的inode号可以被重用
-
把数据块放在空闲列表中
-
删除目录项
-
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖
mv和inode 如果mv命令的目标和源在相同的文件系统,作为mv 命令
-
用新的文件名创建对应新的目录项
-
删除旧目录条目对应的旧的文件名
-
不影响inode表(除时间戳)或磁盘上的数据位置: 没有数据被移动!
如果目标和源在一个不同的文件系统,mv相当于p和rm
3.2 硬链接ln
硬链接本质上就给一个文件起一个新的名称,实质是同一个文件
特性:
-
创建硬链接会增加额外的记录项以引用文件
-
对应于同一文件系统上一个物理文件
-
每个目录引用相同的inode号
-
创建时链接数递增
-
删除文件时: rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
-
不能跨越驱动器或分区
-
不支持对目录创建硬链接
格式:
ln filename [linkname]
链接数:相当于名字的个数
3.3 符号(或软)链接 (浅蓝色文件)
一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件 特点:
-
一个符号链接的内容是它引用文件的名称
-
可以对目录创建软链接
-
可以跨分区的文件实现
-
指向的是另一个文件的路径,其大小为指向的路径字符串的长度,不增加或减少目标文件inode的引用计数
-
软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录
格式:
ln -s filename [linkname]
3.4 硬链接和软链接区别总结
-
本质
硬链接: 本质是同一个文件
软链接: 本质不是同一个文件
-
跨设备 硬链接: 不支持 软链接: 支持
-
inode 硬链接: 相同 软链接: 不同
-
链接数 硬链接: 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 软链接: 创建或删除,链接数不会变化
-
文件夹 硬链接: 不支持 软链接: 支持
-
相对路径 硬链接: 原始文件相对路径是相对于当前工作目录 软链接: 原始文件的相对路径是相对于链接文件的相对路径
-
删除源文件 硬链接: 只是链接数减一,但链接文件的访问不受影响 软链接: 链接文件将无法访问
-
文件类型 硬链接: 和源文件相同 软链接: 链接文件,和源文件无关
upgrade/rollback:删除原链接,重新对新或旧版本加上软链接即可
删除链接时,切记不要加上斜线/,否则会删除链接到目录下的所有文件
如 rm -rf data/ 会删除data下所有文件,而rm -rf data,只是删除软链接
文件夹的链接数默认是2,根据.或..的数量可以增加
4 标准I/O重定向和管道
4.1 标准输入和输出
程序: 指令+数据 读入数据: Input 输出数据: Output 打开的文件都有一个fd: file descriptor (文件描述符)
Linux给程序提供三种 I/0 设备
-
标准输入 (STDIN): 0 默认接受来自终端窗口的输入
-
标准输出 (STDOUT):1 默认输出到终端窗口
-
标准错误 (STDERR):2 默认输出到终端窗口
4.2 I/O重定向redirect
I/O重定向: 将默认的输入,输出或错误对应的设备改变,指向新的目标
4.2.1 标准输出和错误重新定向
STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端 格式:
命令 操作符号 文件名
支持的操作符号包括:
1> 或 > 把STDOUT重定向到文件
>| 强制覆盖
>2> 把STDERR重定向到文件(如一些无法实现的错误指令的报错、或是覆盖文件时的提示是否要覆盖?)
>&> 把所有输出重定向到文件
>2>&1 把标准错误重定向进标准输出中
>以上如果文件已存在,文件内容会被覆盖
set -C 禁止将内容覆盖已有文件,但可追加, 利用 >| 仍可强制覆盖
set +C 允许覆盖,默认
标准输出和错误输出各自定向至不同位置:
COMMAND > /path/to/file.out 2> /path/to/error.out
%>> 合并标准输出和错误输出为同一个数据流进行重定向
&> 覆盖重定向
&>> 追加重定向
COMMAND > /path/to/file.out 2>&1 (顺序很重要)
COMMAND >> /path/to/file.out 2>&1
合并多个程序:
(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 不行
4.2.2 标准输入重定向
从文件中导入STDIN,代替当前终端的输入设备,使用< 来重定向标准输入
某些命令能够接受从文件中导入的STDIN
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 使用计算器自动计算文件中数据
编辑
4.2.2.1 tr 命令
tr [OPTION]...SET1 [SET2] tr 转换和删除字符
选项:
-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换行符
4.2.2.2标准输入重定向
利用"<"可以将标准输入重定向 比如:
cat > file
hello
babe
按ctrl+d离开,可以使用文件来代替键盘的输入
cat < filel > file2
cat < file1 >> filel
4.2.2.3 多行重定向
使用"<<终止词"命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时被称 为就地文本 (here documents)
其中终止词可以是任何一个或多个符号,比如: !,@,$,EOF (End of File) ,magedu等,其中EOF比较常用
如:
使用PS2= ?可以修改输入前的提示符>
4.3 管道
4.3.1 管道
管道 (使用符号"|"表示) 用来连接多个命令 格式
cmd1 | cmd2 | cmd3 ..
功能说明:
-
将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
-
所有命令会在当前shell进程的子shell进程中执行
-
组合多种工具的功能
注意: STDERR默认不能通过管道转发,可利用 2>&1 或 & 实现,格式如下
命令1 2>&1 | 命令2
命令1 |& 命令2
管道符前命令必须支持标准输出,后命令必须支持标准输入
rev 可以反转字符串
向其他人发邮件:echo "Hello Joyce" | mail -s hello joyce1299575088@gmail.com
4.3.2 管道中的 - 符号
管道中有时会使用 - 符号
示例:
将/home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,将 tar -cvf.
/home 传送给后面的 tar -xvf-,后面的这个则是取前一个命令的 stdout,因此,就不需要使用临时file了
tar -cvf - /home tar -xvf
4.3.3 tee 命令
利用tee命令可以重定向到多个目标
cmd1 | tee [-a ] filename | cmd2
以上可以把cmd1的STDOUT保存在文件中,做为cmd2的输入
选项:
-a 追加
功能:
-
保存不同阶段的输出
-
复杂管道的故障排除
-
同时查看和记录输出
找一个程序的路径:使用ps aux查看程序左侧的pid编号,进入/proc目录下的pid编号文件夹,然后找到exe查看就是真正的路径
例:
1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
cat /etc/issue | tr -t 'a-z' 'A-Z' > /tmp/issue.out
cat /etc/issue | tr -t '[:lower:]' '[:upper:]' > /tmp/issue.out
3、一个linux用户给root发邮件,要求邮件标题为"help”,邮件正文如下:
Hello, l am 用户名,The system version is here,please help me to check it ,thanks!
操作系统版本信息
mail -s help root << EOF
>Hello,I am `whoami` ,the system vision is here,please help me to check it!
>`cat /etc/redhat-release`
4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
ls -a | tr '\012' ' '
5、计算1+2+3+...+99+100的总和
echo {1..100} | tr ' ' '+' | bc
7、处理字符串"xt.,| 1 jr#!$mn 2 c*/fe 3 uz 4",只保留其中的数字和空格
tr -cd '[:digit:]''[:space:]' 输入后回车,再输入上面字符串,最后按ctrl+d结束
8、将PATH变量每个目录显示在独立的一行
#echo $PATH | tr '/' '\n'
10、将文件/etc/centos-release中每个单词 (由字母组成)显示在独立一行,并无空行
cat /etc/centos-release | tr ' ' '\n'