第四章 命令行管理文件 2
1. 创建普通文件
1.1 touch
- 用法一:
文件不存在时创建新文件(可以使用花括号)
touch a.txt touch b{1..4..2}.txt- 用法二:
文件存在时,文件的三个时间会修改
时间:
访问时间(atime):文件最后被访问的时间
修改时间(mtime):文件内容修改时间
更改时间(ctime):文件元数据(属性)修改时间(文件修改时文件大小也会修改,mtime修改时ctime也会修改)
1.2 dd
- 创建指定大小和数量的大文件
- 格式
dd if=来源 of=文件名 count=数据块数量 bs=块大小if=/dev/zero:空数据设备文件,填充无数个数据 0(创建指定容量的空文件)
of=文件名:新文件路径
count=:数据块数量
bs=:块大小(文件的总容量 = 数据块数量 × 块大小)
例如:
2. 查看普通文件
2.1 直接查看普通文件
2.1.1 cat
- 查看文件内容(适合内容较少的文件)
- 文件内容直接显示在终端屏幕上
- 格式
cat [选项] 文件- 选项
| -n | 显示行号(空行也显示) |
| -b | 空行不显示行号 |
| 不加选项 | 直接显示内容 |
例如:
2.1.2 tac
- 倒叙查看文件内容
- 格式
tac 文件2.1.3 more
- 翻页查看文件内容(适合内容较多的)
- 回车往下翻一行,空格(或者上下键)翻页,q 退出(或者看完文件自动退出)
- 退出后文件会保留在屏幕上
- 访问到底会自动退出
- 不能进行搜索
- 格式
more -选项 文件- 选项
| 选项 | 功能 |
| -s | 压缩多个空行为一个空行 |
2.1.4 less
- 与more相同
- 但退出后内容不会保留在屏幕上
- 访问到底后不会自动退出
- 可以进行搜索
- 格式
less -选项 文件- 选项
| 选项 | 功能 |
|---|---|
| -s | 压缩多个空行为一个空行 |
2.1.5 head
- 显示前n行内容(默认是显示前10行)
- 格式
head -选项 文件- 选项
| 选项 | 功能 |
|---|---|
| -数字 | 显示行数 |
2.1.6 tail
- 显示后n行内容(默认是后10行)
- 格式
tail -选项 文件- 选项
| 选项 | 功能 |
|---|---|
| -数字 | 显示行数 |
| -f | 动态查看文件内容 |
tail -f 动态查看这个日志文件,su 切换用户,开两个终端分屏查看,日志文件更新
2.2 进一步处理文件内容
2.2.1 |
- 管道符,将左边的命令结果作为右边命令的输入
- 格式
命令A | 命令B | 命令C注意:使用管道会加大耗时,在极致追求效率 / 高性能的场景,要「尽量少用管道 | 」,且管道越多、耗 时越明显。
2.2.2 grep
- 过滤文件内容(将文件中查找含有指定的字符)
- 格式
grep -选项 查找条件 文件- 选项
| 选项 | 功能 |
|---|---|
| -c | 显示查找到的行数(统计行) |
| -i | 忽略大小 |
| -n | 显示行号 |
| -v | 取反 |
| -r | 递归搜索文件内容(当前目录递归) |
| -w | 按完整单词匹配 |
| -A 数字 | 匹配行及下n行 |
| -B 数字 | 匹配行及上n行 |
| -C 数字 | 匹配行及上下n行 |
#将包含a的行标记出来
grep a anaconda-ks.cfg
#将包含a的行数量统计出来
[root@redhat ~]#grep -c a anaconda-ks.cfg
#将包含A/a的行数显示出来
[root@redhat ~]#grep -ic a anaconda-ks.cfg
#将包含a的行统计出来标号
[root@redhat ~]# grep -n a anaconda-ks.cfg
#将不含a的行显示出来
[root@redhat ~]# grep -v a anaconda-ks.cfg
#将按完整单词过滤
[root@redhat ~]# grep -w root /etc/passwd
#显示包含root行以及下两行
[root@redhat ~]# grep -A2 root /etc/passwd
#显示包含root行以及上两行
[root@redhat ~]# grep -B2 root /etc/passwd
#显示包含root行以及上下两行
[root@redhat ~]# grep -C2 root /etc/passwd
- 加上符号过滤
| 命令 | 说明 |
|---|---|
| grep ^root 文件 | 匹配以root单词开头的行 |
| grep ^[root] 文件 | 匹配以r o t 开头的行 |
| grep ^[ ^ab] 文件 | 匹配不以 a 或 b 开头的行 |
| grep ^[0-9] 文件 | 匹配以数字开头的行 |
| grep ^[a-zA-Z] 文件 | 匹配以字母开头的行 |
| grep q$ 文件名 | 匹配以 q 结尾的行 |
| grep ^$ | 匹配空白行 |
| grep -r h . | 递归匹配当前目录下的子目录和子文件中包含 h 的行(包括隐藏文件) |
| grep -r h ./* | 递归匹配当前目录下的子目录和子文件中包含 h 的行(不包括隐藏文 件) |
| grep -d skip h ./* | 只查找当前目录下的普通文件,不递归查找子目录(不包括隐藏文件) |
#匹配以a开头的行
[root@redhat ~]# grep ^a /etc/passwd
#匹配以h结尾的行
[root@redhat ~]# grep h$ /etc/passwd
#匹配以root开头的行并加上行号
[root@redhat ~]# grep -n ^root /etc/passwd
[root@redhat ~]# grep -n "^root" /etc/passwd
#匹配以r o t开头的行
[root@redhat ~]# grep ^[root] /etc/passwd
#匹配空行并加上行号
[root@redhat ~]# grep -n ^$ a1
2.2.3 cut
- 按列提取文本内容
- 格式
cut -d “分隔符” -f 列数字 文件名#提取用户名
[root@redhat ~]# cut -d : -f 1 /etc/passwd
#提取内核版本号
[root@redhat ~]# uname -a | cut -d " " -f3
2.2.4 tr
- 替换、删除文本,输出到屏幕上
- 缩减多个字符
- 源文件不会更改
- 格式
tr -选项 内容 新内容- 选项
| 选项 | 功能 |
|---|---|
| -c | 取反 |
| -d | 删除 |
| -s | 缩减连续重复字符为单个字符(常将空格缩减) |
#替换文件字符
[root@redhat ~]# cat /etc/passwd | tr a-z A-Z
#删除文件的字符
[root@redhat ~]# cat /etc/passwd | tr -d a-z
#提取IP地址
[root@redhat ~]# ip a | grep ens160$ | tr -s " " | cut -d / -f 1 | cut -d " " -f 3
#提取MAC地址
[root@redhat ~]# ip a | grep link/ether | tr -s " " | cut -d " " -f 3
2.2.5 sort
- 排列显示
- 格式
sort -选项 文件- 选项
| 选项 | 功能 |
|---|---|
| -f | 忽略大小写(默认a>A) |
| -n | 数值排序 |
| -r | 逆序 |
| -u | 排序后,去除重复行 |
| -t | 指定间隔符 |
| -k | 按照第几列进行排序 |
#将用户名排序
[root@redhat ~]# cut -d ":" -f 1 /etc/passwd | sort
#排序不区分大小写
[root@redhat ~]# sort -f file
#去除重复行
[root@redhat ~]# sort -u file
#数值排序
[root@redhat ~]# cut -d ":" -f 3 /etc/passwd | sort -n
#数值从大到小
[root@redhat ~]# cut -d ":" -f 3 /etc/passwd | sort -nr
#按照用户数值排序
[root@redhat ~]# sort -t ":" -k 3 -n /etc/passwd
2.2.6 uniq
- 去重显示
- 去除文本中的“连续”重复行
- 格式
uniq -选项 文件- 选项
| 选项 | 功能 |
|---|---|
| -c | 统计重复行出现的次数 |
| 不加 | 去除重复行 |
#将重复内容去重
[root@redhat ~]# uniq file1
#将重复行的行数统计出来
[root@redhat ~]# uniq -c file1
练习:
#列出所有账号的账号名(/etc/passwd)
[root@redhat ~]# cut -d ":" -f 1 /etc/passwd
#将 /etc/passwd 中内容按照冒号隔开的第三个字符从大到小排序后输出所有内容
[root@redhat ~]# sort -t ":" -k 3 -nr /etc/passwd
#列出 /etc/passwd 中的的 15 - 20 行内容
[root@redhat ~]# head -20 /etc/passwd | tail -6
#切割出你的 IP 地址和 mac 地址
[root@redhat ~]# ip a | grep ens160$ | cut -d "/" -f 1 | tr -s " " | cut -d " " -f 3
#切割出 /etc/passwd 最后一个字段并进行重复内容的重复次数统计
[root@redhat ~]# cut -d ":" -f 7 /etc/passwd | sort | uniq -c
