Linux - 3 文件管理
1.1 touch命令
在Windows系统中,我们如果想创建一个文本文档或者word文件的时候,通常的做法是
鼠标右键---新建---文本文档,这样的话,我们就成功的创建了一个文件,而在Linux中,我们可以通过字符命令的形式进行创建
touch命令用于创建文件、修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
ls -l 可以显示档案的时间记录
使用者权限:所有权限用户
语法
touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
- 参数说明:
- a 改变档案的读取时间记录。
- m 改变档案的修改时间记录。
- c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
- f 不使用,是为了与其他 unix 系统的相容性而保留。
- r 使用参考档的时间记录,与 --file 的效果一样。
- d 设定时间与日期,可以使用各种不同的格式。
- t 设定档案的时间记录,格式与 date 指令相同。
- --no-create 不会建立新档案。
- --help 列出指令格式。
- --version 列出版本讯息。
使用 touch 创建一个空文件
在 Linux 系统上使用 touch
命令创建空文件,键入 touch
,然后输入文件名。如下所示
touch czbk-devops.txt
查看
ls -l czbk-devops.txt
执行效果如下图
使用 touch 创建批量空文件
在实际的开发过程中可能会出现一些情况,我们必须为某些测试创建大量空文件,这可以使用 touch
命令轻松实现
touch czbk-{1..10}.txt
在上面的例子中,我们创建了 10 个名为 czbk-1.txt到
czbk-10.txt` 的空文件,你可以根据需要更改名称和数字
执行查看命令
ls -l
执行效果如下
由上图我们发现,我们通过批量命令创建了10个txt文件
改变/更新文件访问时间
假设我们想要改变名为 czbk-devops.txt 文件的访问时间,在 touch
命令中使用 -a
选项,然后输入文件名。如下所示:
1、我们先 查看下czbk-devops.txt的时间属性
ls -l czbk-devops.txt
执行效果如下
我们发现,最后的访问时间是12月 18 11:34
更新时间属性,如下
touch czbk-devops.txt
执行ls命令查看,如下
ls -l czbk-devops.txt
我们发现,访问时间变成了 12月 18 13:50
我们也可以使用stat命令进行查看,如下:
stat czbk-devops.txt
执行效果如下图
由上图可知:czbk-devops.txt的文件属性、包含访问时间、更改时间、最近改动时间都显示出来了。
关于stat命令:
stat命令用于显示inode内容。
stat以文字的格式来显示inode的内容。
语法
stat [文件或目录]
1.3 echo 命令
echo命令有点类似于我们在java se阶段学习的 System.out.print("hello")
但是,echo还有一个功能就是追加文件内容到文件,类似于我们在java se阶段学习的append文件流写入一样
使用者权限:所有用户
-
echo string
将字符串输出到控制台 , 通常和 重定向 联合使用
echo hello world
# 如果字符串有空格, 为了避免歧义 请增加 双引号 或者 单引号
echo "hello world"
6.3 重定向 >
(覆盖) 和 >>
(追加)
- 默认情况下 命令的结果 输出到 控制台
- 通过 重定向 可以将结果 输出到文件
6.2.3 实现
- 第一步: 将命令的成功结果 覆盖 指定文件内容
echo 传智博客 >czbk-txt.txt
执行结果如下(czbk-txt.txt文件如果没有会自动创建)
命令 | 作用 |
---|---|
结果 > 文件名 |
> 表示输出, 会覆盖文件的原有内容 |
-
第二步: 将命令的成功结果 追加 指定文件的后面
echo 黑马程序员 >> czbk-txt.txt
执行结果如下
命令 | 作用 |
---|---|
命令 >> 文件名 |
>> 表示追加, 会将内容追加到已有文件的末尾 |
-
第三步: 将命令的失败结果 追加 指定文件的后面
cat 不存在的目录 &>> error.log
执行效果如下
命令 | 作用 |
---|---|
命令 &>> 文件 |
&>> 表示不区分错误类型 都放到 日志中 |
总结
- 通过
命令 > 文件
将命令的成功结果 覆盖 指定文件内容- 通过
命令 >> 文件
将命令的成功结果 追加 指定文件的后面- 通过
命令 &>> 文件
将 命令的失败结果 追加 指定文件的后面
1.4 awk命令
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
具体语法如下
awk [选项参数] ‘script‘ var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
1、数据准备:czbk-txt.txt文本内容如下:
zhangsan 68 99 26
lisi 98 66 96
wangwu 38 33 86
zhaoliu 78 44 36
maq 88 22 66
zhouba 98 44 46
2、搜索含有 zhang 和 li 的学生成绩:
cat czbk-txt.txt | awk ‘/zhang|li/‘
执行效果如下
指定分割符, 根据下标显示内容
命令 | 含义 |
---|---|
awk -F ‘,‘ ‘{print $1, $2, $3}‘ 文件 | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
选项
选项 | 英文 | 含义 |
---|---|---|
-F ‘,‘ |
field-separator | 使用 指定字符 分割 |
$ + 数字 |
获取第几段内容 | |
$0 |
获取 当前行 内容 | |
NF |
field | 表示当前行共有多少个字段 |
$NF |
代表 最后一个字段 | |
$(NF-1) |
代表 倒数第二个字段 | |
NR |
代表 处理的是第几行 |
# 查看文档内容
cat czbk-txt.txt
#直接输出
cat score.txt | awk -F ‘ ‘ ‘{print $1,$2,$3}‘
执行效果如下
指定分割符, 根据下标显示内容
命令 | 含义 |
---|---|
awk -F ‘ ‘ ‘{OFS="==="}{print $1, $2, $3}‘ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
选项
选项 | 英文 | 含义 |
---|---|---|
OFS="字符" |
output field separator | 向外输出时的段分割字符串 |
转义序列 | 含义 |
---|---|
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
# 按照 === 进行分割, 打印 第一段 第二段 第三段
cat czbk-txt.txt | awk -F ‘ ‘ ‘{OFS="==="}{print $1,$2,$3}‘
# 按照 制表符tab 进行分割, 打印 第一段 第二段 第三段
cat czbk-txt.txt| awk -F ‘ ‘ ‘{OFS="\t"}{print $1,$2,$3}‘
执行效果如下
调用 awk 提供的函数
命令 | 含义 |
---|---|
awk -F ‘,‘ ‘{print toupper($2)}‘ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
常用函数如下:
函数名 | 含义 | 作用 |
---|---|---|
toupper() | upper | 字符 转成 大写 |
tolower() | lower | 字符 转成小写 |
length() | length | 返回 字符长度 |
# 打印第一段内容
cat czbk-txt.txt | awk -F ‘ ‘ ‘{print $1}‘
# 将第一段内容转成大写 且 显示
cat czbk-txt.txt | awk -F ‘ ‘ ‘{print toupper($1)}‘
执行效果如下
求指定学科平均分
命令 | 含义 |
---|---|
awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}‘ 文件名 | BEGIN{ 这里面放的是执行前的语句 } {这里面放的是处理每一行时要执行的语句} END {这里面放的是处理完所有的行后要执行的语句 } |
查看czbk-txt.txt 文件内容
cat czbk-txt.txt
执行效果如下
查看总分
注意:这里计算的是第4列的总分
cat czbk-txt.txt| awk -F ‘ ‘ ‘BEGIN{}{total=total+$4} END{print total}‘
执行效果如下
查看总分, 总人数
注意:这里计算的是第4列的
cat czbk-txt.txt| awk -F ‘ ‘ ‘BEGIN{}{total=total+$4} END{print total, NR}‘
执行效果如下
查看总分, 总人数, 平均分
注意:这里计算的是第4列的
cat czbk-txt.txt | awk -F ‘ ‘ ‘BEGIN{}{total=total+$4} END{print total, NR, (total/NR)}‘
执行效果如下
总结
awk在使用过程中主要用作分析
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
1.5 软连接
软连接其实就类似于我们在Windows中的【快捷方式】
-
在Linux文件名 和 内容 是两个文件, 分开的!
-
创建软链接的原理, 如下
为什么有软连接?
因为 某些文件和目录 的 路径很深, 所以 需要增加 软链接(快捷方式)
使用者权限:所有用户
语法如下:
命令 | 英文 | 作用 |
---|---|---|
ln -s 目标文件绝对路径 快捷方式路径 | link | 给目标文件增加一个软链接, 通俗讲就是快捷方式 |
给home/itcast/txtfile.txt文件增加软连接
ln -s /home/itcast/txtfile.txt czbk-txt
上面;我们将/home/itcast/路径下的txtfile.txt文件增加软连接到
czbk-txt,然后通过cat 访问czbk-txt也是可以正常访问的
如下图
总结
通过 `ln -s 源文件的绝对路径 其实就是给目标文件 增加 快捷方式
1.6 find查找
引子
find命令类似与在Windows中全局查找(如下图)
find概念
find命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find <指定目录> <指定条件> <指定内容>
1、将目前目录及其子目录下所有延伸档名是 gz 的文件查询出来
find . -name "*.gz"
执行效果如下图
2、将目前目录及其子目录下所有最近 1天内更新过的文件查询出来
find . -ctime -1
执行效果如下
3、全局搜索czbk
/代表是全盘搜索,也可以指定目录搜索
find / -name ‘czbk‘
执行效果如下
1.7 read命令
注意:
read命令属于文件范畴的命令
在下面的演示中,会涉及到shell,shell章节在最后一章
建议:讲解shell的时候在回过来说下read命令的语法
我们在综合案例中也会降到read
引子:
read命令相当于在java SE阶段我们学习的键盘录入输入Scanner(read命令会比Scanner更强大),开发人员可以动态的与程序交互,
read命令用于从标准输入读取数值。
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
语法
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
1、简单读取
#!/bin/bash
echo "请您输入网站名: "
#读取从键盘的输入
read website
echo "你输入的网站名是 $website"
exit 0 #退出
执行效果如下
3、读取文件
每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。
我们可以使用 cat 命令将结果直接传送给包含 read 命令的 while 命令。
测试文件 test.txt 内容如下:
AAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDD
================传智播客
脚本如下,可以将脚本放到xxx.sh中进行执行
#!/bin/bash
count=1
cat test.txt | while read line
# cat 命令的输出作为read命令的输入,read读到>的值放在line中
do
echo "Line $count:$line"
count=$[ $count + 1 ] # 注意中括号中的空格。
done
echo "finish"
exit 0
执行效果如下
总结
由此可看read命令不仅可以读取键盘输入,而且还可以读取静态文件
1.8 总结
文件命令是我们在开发过程中最经常使用的到的命令,所以,我们在学习过程中一定要认真学习文件的常用命令,比如文件创建、编写、读取命令。