0%

Linux命令之文件操作

这里介绍Linux下对文件操作的常见命令

abstract.jpg

文件拷贝:cp命令

概述

该命令的形式如下,其将源文件复制到指定目的地下。当有多个源文件时,目的地为目录文件

1
2
cp [option] source  dest
cp [option] source ... dest_directory

常见可选参数option如下:

  • -r: 递归处理。将源目录下的文件与子目录一并复制

拷贝文件

拷贝文件过程中,如果目的文件不存在,其将创建此文件。如果目的文件存在,则会对其覆盖

1
cp main.c main.c.backup

figure 1.jpg

Note: 目的文件可以不存在,但是目的文件所在的路径目录必须存在,否则命令将报错

拷贝目录:连同源目录本身进行复制(含隐藏文件)

当源文件指定的是一个目录时,下述命令则可以实现连同源目录本身一并复制到指定目录下。此时源目录中的隐藏文件也将会一并复制过去。注意此时,源目录的名称后面不要添加斜杠。因为添加斜杠的命令后在Mac与Linux中的行为表现不一致。为便于记忆,统一使用下述这种源目录的名称后面不添加斜杠的形式,实现连同源目录本身进行复制的目的

1
2
# 将springboot1目录连同源目录本身(含源目录中的隐藏文件)复制到target目录中
cp -r springboot1 target/

figure 2.jpg

拷贝目录:只对源目录中的内容进行复制(含隐藏文件)

当源文件指定的是一个目录时,下述命令则可以实现只将源目录中的内容复制到指定目录下。此时源目录中的隐藏文件也将会一并复制过去

1
2
# 只将springboot1目录中的内容(含源目录中的隐藏文件)复制到target目录中
cp -r springboot1/. target/

figure 3.jpg

拷贝目录:只对源目录中的内容进行复制(不含隐藏文件)

当源文件指定的是一个目录时,下述命令则可以实现只将源目录中的内容复制到指定目录下。但不会将源目录中的隐藏文件复制过去

1
2
# 只将springboot1目录中的内容(不含源目录中的隐藏文件)复制到target目录中
cp -r springboot1/* target/

figure 4.jpg

文件移动:mv命令

概述

该命令可以实现将文件、目录移动到指定位置

1
2
mv [options] source target
mv [options] source ... dest_directory

重命名

在同一个目录下,进行文件或目录移动操作。当目的文件不存在时,本质上就是对其重命名操作

1
2
3
4
5
# 将当前目录下的main.c文件,重命名为 main.java
mv main.c main.java

# 将当前目录下的srcCode目录,重命名为 src
mv srcCode src/

figure 5.jpg

移动文件

在移动文件的同时,还可以对其进行重命名

1
2
3
4
5
# 将当前目录下的 usrMapper.java文件 移动 src目录下
mv usrMapper.java src/

# 将当前目录下的 usrController.java文件 移动 src目录下,并重命名为 controller.java
mv usrController.java src/controller.java

figure 6.jpg

移动目录:连同源目录本身进行移动(含隐藏文件)

当源文件指定的是一个目录时,下述命令则可以实现连同源目录本身一并移动到指定目录下。此时源目录中的隐藏文件也将会一并移动过去

1
2
# 将springboot1目录连同源目录本身(含源目录中的隐藏文件)移动到target目录中
mv springboot1 target/

figure 7.jpg

移动目录:只对源目录中的内容进行移动(不含隐藏文件)

当源文件指定的是一个目录时,下述命令则可以实现只将源目录中的内容移动到指定目录下。但不会将源目录中的隐藏文件移动过去

1
2
# 只将springboot1目录中的内容(不含源目录中的隐藏文件)移动到target目录中
cp -r springboot1/* target/

figure 8.jpg

创建目录:mkdir命令

概述

该命令创建目录

1
mkdir [-pv] [-m mode] directory_name ...

常用选项:

  • -p:批量创建目录、子目录
  • -v:显示创建的目录
  • -m:指定目录权限

创建目录

创建目录,命令如下

1
2
3
4
5
# 创建名为foo的目录,目录权限为707
mkdir -m 707 foo

# 创建名为demo1的目录
mkdir demo1

figure 9.jpg

利用-p选项则可以快速的创建一系列的子目录

1
2
# 依次创建出 src、main、java 的父子目录结构
mkdir -p src/main/java/

figure 10.jpg

查看文件

查看文件类型:file命令

利用file命令可以判断出文件类型、编码等信息

1
2
# 分析指定文件的文件类型
file filename

figure 11.jpg

对于二进制可执行文件而言,file还可以分析出其编译所面向的平台及依赖库等信息

1
2
# 分析ls可执行文件
file /bin/ls

figure 12.jpg

查看文件整个内容

cat、tac命令

cat命令支持查看整个文件。但其会一次性将文件的内容全部输出完毕

1
2
3
4
5
# 查看整个文件
cat a.txt

# 查看整个文件,同时添加行号信息
cat -n a.txt

figure 13.jpg

tac命令与cat命令类似,只不过其是将文件内容按行反序全部进行输出的。即输出的第一行为文件内容的最后一行,以此类推

1
2
# 按行反序查看整个文件
tac a.txt

figure 14.jpg

more、less命令

cat命令的缺点在于命令执行后无法控制后续操作。而more命令则会在输出每页内容后暂停下来。常用地浏览操作有:通过键盘的j、k键即可进行往后、往前浏览整个文件。结束后,可按q键退出即可。而less命令则是more命令的升级版,其支持更多的文件浏览操作

1
2
3
4
5
# 查看passwd文件
more /etc/passwd

# 查看passwd文件
less /etc/passwd

查看文件部分内容

head命令

head命令可以实现查看文件的头部。默认显示文件的前10行

1
2
3
4
5
# 显示文件的前10行
head a.txt

# 显示文件的前3行
head -3 a.txt

figure 15.jpg

tail命令

tail命令可以实现查看文件的尾部。默认显示文件的最后10行

1
2
3
4
5
# 显示文件的最后10行
head a.txt

# 显示文件的最后5行
head -5 a.txt

figure 16.jpg

此外在开发中,查看日志文件时,常用使用 -f 选项,其会把文件的最尾部的内容不断刷新输出。实现实时查看日志文件

1
2
# 实时查看文件
tail -f a.txt

figure 17.jpg

参考文献

  1. Linux命令行与shell脚本编程大全·第4版 Richard Blum、Christine Bresnahan著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝