Linux - 3 文件管理

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

执行效果如下图

Linux - 3 文件管理

使用 touch 创建批量空文件

在实际的开发过程中可能会出现一些情况,我们必须为某些测试创建大量空文件,这可以使用 touch 命令轻松实现

touch czbk-{1..10}.txt

在上面的例子中,我们创建了 10 个名为 czbk-1.txtczbk-10.txt` 的空文件,你可以根据需要更改名称和数字

执行查看命令

ls -l

执行效果如下

Linux - 3 文件管理

由上图我们发现,我们通过批量命令创建了10个txt文件

改变/更新文件访问时间

假设我们想要改变名为 czbk-devops.txt 文件的访问时间,在 touch 命令中使用 -a 选项,然后输入文件名。如下所示:

1、我们先 查看下czbk-devops.txt的时间属性

ls -l czbk-devops.txt 

执行效果如下

Linux - 3 文件管理

我们发现,最后的访问时间是12月 18 11:34

更新时间属性,如下

touch czbk-devops.txt 

执行ls命令查看,如下

ls -l czbk-devops.txt 

Linux - 3 文件管理

我们发现,访问时间变成了 12月 18 13:50

我们也可以使用stat命令进行查看,如下:

stat czbk-devops.txt 

执行效果如下图

Linux - 3 文件管理

由上图可知: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 重定向 >(覆盖) 和 >> (追加)

Linux - 3 文件管理

  • 默认情况下 命令的结果 输出到 控制台
  • 通过 重定向 可以将结果 输出到文件

6.2.3 实现

  • 第一步: 将命令的成功结果 覆盖 指定文件内容
 echo  传智博客 >czbk-txt.txt

执行结果如下(czbk-txt.txt文件如果没有会自动创建)

Linux - 3 文件管理

命令 作用
结果 > 文件名 > 表示输出, 会覆盖文件的原有内容
  • 第二步: 将命令的成功结果 追加 指定文件的后面
echo  黑马程序员 >> czbk-txt.txt

执行结果如下

Linux - 3 文件管理

命令 作用
命令 >> 文件名 >> 表示追加, 会将内容追加到已有文件的末尾
  • 第三步: 将命令的失败结果 追加 指定文件的后面
cat 不存在的目录  &>>  error.log

执行效果如下

Linux - 3 文件管理

命令 作用
命令 &>> 文件 &>> 表示不区分错误类型 都放到 日志中

总结

  • 通过 命令 > 文件命令的成功结果 覆盖 指定文件内容
  • 通过 命令 >> 文件命令的成功结果 追加 指定文件的后面
  • 通过 命令 &>> 文件命令的失败结果 追加 指定文件的后面

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/‘

执行效果如下

Linux - 3 文件管理

指定分割符, 根据下标显示内容

命令 含义
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}‘

执行效果如下

Linux - 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}‘

执行效果如下

Linux - 3 文件管理

Linux - 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)}‘

执行效果如下

Linux - 3 文件管理

求指定学科平均分

命令 含义
awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}‘ 文件名 BEGIN{ 这里面放的是执行前的语句 }
{这里面放的是处理每一行时要执行的语句}
END {这里面放的是处理完所有的行后要执行的语句 }

查看czbk-txt.txt 文件内容

cat czbk-txt.txt 

执行效果如下

Linux - 3 文件管理

查看总分

注意:这里计算的是第4列的总分

cat czbk-txt.txt| awk -F ‘ ‘ ‘BEGIN{}{total=total+$4} END{print total}‘

执行效果如下

Linux - 3 文件管理

查看总分, 总人数

注意:这里计算的是第4列的

cat czbk-txt.txt| awk -F ‘ ‘ ‘BEGIN{}{total=total+$4} END{print total, NR}‘

执行效果如下

Linux - 3 文件管理

查看总分, 总人数, 平均分

注意:这里计算的是第4列的

 cat czbk-txt.txt | awk -F ‘ ‘ ‘BEGIN{}{total=total+$4} END{print total, NR, (total/NR)}‘

执行效果如下

Linux - 3 文件管理

总结

awk在使用过程中主要用作分析

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理

1.5 软连接

软连接其实就类似于我们在Windows中的【快捷方式】
  • 在Linux文件名内容 是两个文件, 分开的!Linux - 3 文件管理

  • 创建软链接的原理, 如下Linux - 3 文件管理

    为什么有软连接?

    因为 某些文件和目录 的 路径很深, 所以 需要增加 软链接(快捷方式)

使用者权限:所有用户

语法如下:

命令 英文 作用
ln -s 目标文件绝对路径 快捷方式路径 link 给目标文件增加一个软链接, 通俗讲就是快捷方式

给home/itcast/txtfile.txt文件增加软连接

 ln  -s /home/itcast/txtfile.txt    czbk-txt

上面;我们将/home/itcast/路径下的txtfile.txt文件增加软连接到

czbk-txt,然后通过cat 访问czbk-txt也是可以正常访问的

如下图

Linux - 3 文件管理

总结

通过 `ln -s 源文件的绝对路径 其实就是给目标文件 增加 快捷方式

1.6 find查找

引子
find命令类似与在Windows中全局查找(如下图)

Linux - 3 文件管理

find概念

find命令用来在指定目录下查找文件。

任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

find <指定目录> <指定条件> <指定内容>

1、将目前目录及其子目录下所有延伸档名是 gz 的文件查询出来

find . -name "*.gz"

执行效果如下图

Linux - 3 文件管理

2、将目前目录及其子目录下所有最近 1天内更新过的文件查询出来

find . -ctime -1

执行效果如下

Linux - 3 文件管理

3、全局搜索czbk

/代表是全盘搜索,也可以指定目录搜索

 find / -name  ‘czbk‘

执行效果如下

Linux - 3 文件管理

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  #退出

执行效果如下

Linux - 3 文件管理

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

执行效果如下

Linux - 3 文件管理

总结

由此可看read命令不仅可以读取键盘输入,而且还可以读取静态文件

1.8 总结

文件命令是我们在开发过程中最经常使用的到的命令,所以,我们在学习过程中一定要认真学习文件的常用命令,比如文件创建、编写、读取命令。

Linux - 3 文件管理

上一篇:Linux随笔之二


下一篇:Linux - 2 目录与文件权限管理