Linux 文件操作

文件操作

概念

文件的定义

  • 广义:一切皆文件
  • 狭义:磁盘文件

Linux 中文件是一个字符流序列

  • 普通文件(文本文件、可执行文件)

  • 目录

  • 磁盘、键盘、打印机、网卡等设备

文件的成分

  • 索引节点(i 结点):

  • 文件的信息:文件权限、文件主、文件大小、存放位置、建立日期等

  • 文件使用的一个标识符,同一个文件有相同的 inode 号。

  • 数据:文件的实际内容、

查看文件的 i 节结号:ls -I

文件名

文件名最长可多达 255 个字符,除斜线 / 和空字符以外,文件名可以包含任意的 ACSII 字符

避免使用特殊字符 ;、|、>、<、”、`、$、!、%、&、*、?、\、(、)、[、]、空格、制表符或者其他的控制字符

习惯上允许使用 “_” 或 “.” 来区别文件的类型;同类文件应使用同样的后缀或扩展名

文件名区分大小写

以圆点 “.” 开头的文件名是隐含文件,必须使用 ls –a 才能在屏幕上显示。

文件目录

用于标识系统中的文件及物理地址,提供给检索文件使用。

文件目录项包含:文件名、i 结点号。

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620204717166.png

文件系统层次结构标准(FHS)

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620204722807.png

  • / :linux 系统目录树的起点

  • bin:命令文件目录,也称二进制目录

  • boot:存放系统的内核文件和引导装载程序文件

  • dev:设备文件目录,存放所有的设备文件,例如 cdrom 为光盘设备

  • etc:存放系统配置文件,如 password 文件

  • home:包含系统中各个用户的主目录,子目录名即为各用户名

  • lib:存放各种编程语言库

  • media:系统设置的自动挂载点,如 u 盘的自动挂载点

  • opt:表示可选择的意思,有些软件包会被安装在这里;

  • usr:最大的目录之一,很多系统中,该目录是作为独立的分区挂载的,该目录中主要存放不经常变化的数据,以及系统下安装的应用程序目录

  • mnt:主要用来临时挂载文件系统,为某些设备默认提供挂载点 (WSL 中 windows 系统的文件会被挂载在这个目录)

  • proc:虚拟文件系统,该目录中的文件是内存中的映像。

  • sbin:保存系统管理员或者 root 用户的命令文件。

  • tmp:存放临时文件

  • var:通常保存经常变化的内容,如系统日志、邮件文件等

  • root:系统管理员主目录

文件路径

分类

绝对路径:从 / 目录开始直到目标文件或者目录的路径

相对路径:相对路径是指从当前所在的目录出发,直到目标文件或者目录的路径。

表示目录的特殊符号

  • ~ 表示用户的主目录

  • . 表示当前目录

  • .. 表示上一级目录

文件类型

普通文件(-)

常规文件,包含各种长度的字符串。 内核对这些数据没有进行结构化,只是有序的字节序列

  • 文本文件 :信件、脚本等

  • 数据文件:电子表格、数据库等

  • 可执行的二进制文件:linux 系统所提供的各种命令

目录文件(d)

目录也称为文件夹,是一类特殊的文件;

每个目录的第一项:表示目录本身,并以 . 为文件名。

每个目录的第二项:表示该目录的父目录,用 .. 表示

设备文件(c、b)

设备文件除了存放在文件节点中的信息外,它们不包含任何数据。

设备文件通常在 /dev 目录下:

  • 字符(character)设备:键盘、终端、打印机和鼠标。

  • 块(block)设备:硬盘、光盘等。

链接文件(l)

Linux 具有为一个文件起多个名字的功能,称为链接

其他

  • 套接字(sockets)

  • 管道(pipe)

image-20210620204728377

基本操作

创建文件

  • vi filename (vi 编辑器的基本用法)

  • cat > filename (输出重定向)

  • touch 命令

    • 更新一个文件的访问和修改时间,如果没有对应文件则新建该文件。
    • touch <file-name/file-path>

查看文件

ls 命令(list)

  • 功能:显示目录内容,默认显示当前目录的文件列表。 如果所给的参数是文件,则仅列出与该文件有关的信息。

  • 格式:ls [-选项] [文件或目录路径]

  • 重要选项

    • -a(all):列出目录中所有项,包括以“.”开始的项(以点开头的为隐藏文件)。
    • -l(use a long listing format):以长格式来显示文件的详细信息。每行列出 的信息依次是:文件的类型与权限、链 接数、文件属主、文件属组、文件大小、 建立或者最近修改的时间。
    • -i(inode):在输出的第一列显示文件的索引节点号。
    • -d(directory):仅列出目录本身的信息,而非列出目录中的文件列表信息
  • 常用

    • 按时间排序,以列表的方式显示目录项 ls -lrt

删除文件

rm 命令

  • 功能:删除文件与目录
  • 格式:rm [选项] 文件名
  • 选项
    • -f 文件名 不提示直接删除,强制删除
    • -r 目录名 递归删除目录文件 危险操作!

其他

file 命令

  • 功能:确定指定文件类型
  • 格式:file 文件名 [文件名…]
  • 实例:file *

目录操作

新建目录

mkdir 命令

  • 功能:新建目录

  • 格式:mkdir [选项] [目录名]

  • 实例

    • 新建目录 dir1
      • mkdir dir1
    • 同时创建 2 个目录
      • mkdir dir2 dir3
    • 递归生成目录 dir4、dir5
      • 即 dir4 是当前目录的子目录,而 dir5 又是 dir4 的子目录
      • mkdir –p dir4/dir5
    • 对生成的目录指定权限: 744(111 100 100)
      • mkdir –m 744 dir6

切换目录

cd 命令

  • 功能:更改当前目录 (执行和读权限)
  • 格式:cd [目录路径]
  • 实例
1
2
3
4
cd  /etc  # 切换到/etc 目录下,可以是绝对路径、相对路径
cd        # 移到自己的主目录,适合于任何用户及任意目录下直接回到用户主目录下 
cd ~      # 移动到主目录下 
cd ..     # 上移一层目录 

删除空目录

rmdir 命令

  • 功能:删除空目录

  • 格式:rmdir [选项] [目录路径]

  • 实例

1
2
3
rmdir dir1  # 删除空目录 

rmdir dir4  # 非空目录, dir4 目录下还有目录(dir5)或者文件要用 “rm –r”

复制文件或目录

cp 命令

  • 功能:复制文件或者目录

  • 格式:cp [选项] 源文件或者目录路径 目标文件或者目录路径

  • 常用选项

    • -b 若存在同名文件,覆盖前先备份原来的文件
    • -r 以递归的方式复制文件,用于复制源目录内的内容(保留源目录 结构)
    • -a 复制时包含当前目录

实例 1:将文件 m1 复制为 f1(f1 不存在)

1
2
3
4
5
mkdir dir1 # 创建新目录 
cd dir1    # 切换目录到 dir1 
cat > m1   # 创建 m1 文件内容为 m1 
cp m1 f1       
cat f1     # 查看 f1 的内容和 m1 一致

实例 2:将文件 m1 复制为 f1(f1 存在,内容为 m1)

1
2
3
cat > m2   # 创建 m2 文件内容为 m2 
cp m2 f1       
cat f1     # f1 内容被 m2 内容覆盖

实例 3:将文件 m3 复制为 f1,如果 f1 文件已经存在,则备份原来的 f1 文件。

1
2
3
cat > m3     # 创建 m3 的内容为 m3 
cat f1     	 # 查看 f1 的内容 
cp –b m3 f1  # 备份的文件名为 f1~;查看文件内容的变化

实例 4:将当前目录(dir1)下的所有文件(不包含目录)复制到 test 目录中

1
2
3
4
cd .. 
mkdir test    # 在 user 目录下创建目录 test 
cd dir1 
cp ./* /home/user/test  # 将当前目录下的所有文件(不包含目录)复制到 test 目录中

实例 5:复制目录 test 的所有内容到 dir1 中

1
cp -a test dir1      //复制目录

移动文件或目录

mv 命令

move

功能:移动(剪切)或重命名文件或者目录。

格式

1
mv [选项] 源文件或者目录路径  目标文件或者目录路径 

常用选项

  • -b 若存在同名文件,覆盖前先备份原来的文件

  • -f 强制覆盖同名文件

实例 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 将文件名从 f1 变成 f2 
touch f1 
mv f1 f2 

# 将目录 dir4 改名为 dir5 
mkdir dir4 
mv dir4 dir5

# 将以 m 开头命名的多个文件移到 dir4 目录中(剪切) 
mv m* dir4

查找、检索、排序文件

find

功能:从指定路径开始向下搜索满足表达式的文件和目录。

格式

1
find [路径] [表达式] [操作]
  • 常用表达式

    • -name 文件 按文件名查找,可以使用通配符

    • -type 文件类型 按文件类型查找;f 为普通文件、d 为目录文件,l 为链接 文件,b 为块设备文件、C 为字符设备文件

    • -size [+|-] 文件大小 查找指定大小的文件; c:字节 ; k: Kb ;M:Mb ; G:Gb

    • -user 用户名 查找文件所有者为指定用户的文件

    • -group 组名 查找文件所属组为指定组的文件

    • -perm 权限值 按权限查找

    • -mtime(mmin),-atime (amin),-ctime(cmin) +/-n 按时间属性进行检索

  • 常用操作

    • -delete 删除搜索到的文件和目录

    • -exec 命令名 { } ; 对搜索到的结果执行特定的命令

  • 时间属性检索

    • -mtime(Modification time):文件内容(内容数据)修改时间
    • -ctime(Change time):文件属性(权限)修改时间
    • -atime(Access time):文件被读取时间
    • -mtime n: n 为数字,意义为在 n 天之前的一天以内被更改过的文件。
    • -mtime +n: 列出 n 天之前(不含 n 天本身)被更改过的文件
    • -mtime -n: 列出 n 天之内(含有 n 天本身)被更改过的文件

1
2
# 查找 3 天之内修改过的文件 
find –type f (–a 与)(-o 或)(!非) –mtime -3 

grep

功能:从指定文本文件或者标准输出中查找符合条件的字符串,默认显示其所在行的内容。

格式

1
grep [选项] 字符串 [文件…]

常用选项

  • -i 忽略字符大小写的差别

  • -n 在显示符合的字符串之前,标出该行的行号

  • -v 显示不包含指定字符串的行

1
2
3
4
5
# 在 passwd 文件中检索 root 字符串 

grep root /etc/passwd 

cat /etc/passwd | grep root  

sort

功能:对文件进行排序与合并

格式

1
sort [选项] [文件列表] 

实例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
sort file1            	 # 对 file1 文件按每行第一个字符进行排序输出 

sort file1 file2      	 # 对 file1 和 file2 两个文件合并起来排序并输出 

sort -r file1         	 # 对 file1 文件按每行第一个字符进行反向排序 

sort –r -o outf1 file1   # 对 file1 文件按每行第一个字符进行反向排序,并把 结果放在 outf1 中 

sort -n file1            # 对 file1 文件按每行第一个字段进行数值排序 

sort -k 3 file1          # 对 file1 文件按每行第 3 个字段为关键字进行排序 

sort –n -k 3 file1       # 对 file1 文件按每行第 3 个字段进行数值排序

1
2
# 把当前目录下的所有文件按文件由大到小进行排序 
ls –l |sort –n –r –k 5

文件权限

详见:https://blog.csdn.net/u013197629/article/details/73608613

概念

文件权限是指文件的访问控制,即哪些用户可以访问文件以及执行 什么样的操作

用户分类

  • 文件所有者(owner):建立文件或者目录的用户
  • 同组用户(group):文件所属组群中的所有用户
  • 其他用户(other):既不是文件所有者,也不是同组用户的其他用户

文件的三类访问权限

  • 读取权限:浏览文件/目录中内容的权限

  • 写入权限

    • 文件:修改文件内容的权限
    • 目录:删除、添加和重命名目录内文件的权限
  • 执行权限

    • 文件:对可执行文件而言,是允许执行的权限
    • 目录:进入目录的权限
  • 默认权限

    • 新建一个文件或者目录时,系统会为文件设置默认权限。
    • 默认权限的设置与系统的 umask 值有关 可以通过 umask 命令查看当前系统的 umask 设置

访问权限的表示方法

字母表示法
  • r(读)
  • w(写)
  • x(可执行或查找)
  • -(无权限)

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620204810297.png

数字表示法

相应权限位有权限表示为 1,无权限表示为 0,然后转换为八进制表示

image-20210620204900212

修改文件的权限

chmod 命令

change mode

功能:修改文件的访问权限(文件属主或者 root)

http://markdown-1303167219.cos.ap-shanghai.myqcloud.com/image-20210620204912530.png

格式

1
2
3
chmod 字母模式 文件名 
# or
chmod 数字模式 文件名

1
2
3
4
5
# 新建文件 file1 (权限为 110 110 100) 
chmod g+x , o-r file1  # 给同组用户增加 x 权限,其他用户取消 r 权限

# 新建文件 file2(权限为 110 110 100) 
chmod 670 file2  # 为同组用户增加 x 权限,其他用户取消 r 权限
chown 命令

change owner

功能:修改文件的所有者,并可一并修改文件的所属组群

格式

1
chown 文件所有者 [:组群] 文件

1
2
3
4
5
6
7
8
# 将文件 f3 所有者由 root 改为 zlh
chown zlh f3 

# 将 f4 文件的所有者和所属组群设置为 zlh 用户和 zlh 组群 
chown zlh :zlh f4 

# 将文件 f5 所属组群修改为 zlh 
chown :zlh f5 
chgrp 命令

change group

功能:修改文件的所属组群

格式

1
chgrp 组群 文件

1
2
# 将 f6 所属的组群由 root 改为 zlh
chgrp zlh f6