学科分类
目录
Linux编程

文件处理与管理命令

Linux操作系统中秉持“一切皆文件”的思想,将其中的文件、设备等统统当做文件来操作与处理,因此,文件处理与管理文件命令是Linux常用命令的基础,也是至关重要的一部分。文件处理与管理命令又可细分为四类,分别为:文件处理命令、文件查看命令、权限管理命令和文件搜索命令。

下面将从每种命令的功能入手,结合案例,对各个文件处理与管理命令依次进行讲解。

1. 文件处理命令

常用的文件处理命令有:ls、cd、pwd、touch、mkdir、cp、mv、rm、rmdir等,涵盖了文件的属性查看、目录切换、目录查看、删除、复制等功能。

① ls

ls命令的原意为list,即“列出”,用于列出参数的属性信息,其命令格式如下:

ls [选项] [参数]

ls的参数通常为文件或目录,其常用的选项列表如表1所示。

表1 ls命令常用选项

参数 说明
-l 以详细信息的形式展示出当前目录下的文件
-a 显示当前目录下的全部文件(包括隐藏文件)
-d 查看目录属性
-t 按创建时间顺序列出文件
-i 输出文件的inode编号
-R 列出当前目录下的所有文件信息,并以递归地方式显示各个子目录中的文件和子目录信息

案例1:显示当前目录下的所有文件信息。

[itheima@localhost ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos

当参数缺省时,ls命令默认列出当前目录中的内容。

案例2:显示当前目录下的所有文件信息。

[itheima@localhost ~]$ ls -a
.       .dmrc    .gtk-bookmarks     .pulse
..       Documents  .gtk-bookmarks.LSTSNY .pulse-cookie
(……)

当显示所有文件信息时,我们发现结果中多了许多以“.”开头的文件,这些文件是Linux中的隐藏文件。隐藏文件中又有两个特殊的文件:“.”和“..”,分别代表当前目录和上一级目录(由于使用“ls -a”命令时,显示的内容较多,因此将部分显示内容省略。以上输出结果中的“(……)”代表省略内容,而非实际输出内容,被省略部分不影响知识讲解,在之后的案例中可能遇到同种情况,将不再赘述。)

② cd

cd命令的原意为“change directory”,即更改目录。若执行该命令的用户具有切换目录的权限,cd命令将更改当前工作目录到对象目录。该命令的格式如下:

cd 参数

cd命令没有选项,其参数不可省略。

案例3:使用cd命令切换目录。

[itheima@localhost ~]$ cd ./Public
[itheima@localhost Public]$ cd ..
[itheima@localhost ~]$ cd /etc/yum
[itheima@localhost yum]$ cd ~

以上共有四条路径切换命令,其对应的功能依次如下:

● 切换工作路径到当前目录下的Public目录中;

● 切换工作路径到上一级目录;

● 切换工作路径到etc目录下的yum目录中;

● 切换工作路径为当前用户的家目录。

③ pwd

pwd命令的原意为“print working directory”,即打印当前工作目录的绝对路径。该命令可直接使用,用法及打印结果如下案例所示:

案例4:使用pwd命令获取当前目录。

[itheima@localhost ~]$ pwd
/home/itheima

④ touch

touch命令的主要功能,是将已存在文件的时间标签更新为系统的当前时间,若指定的文件不存在,该命令将会创建一个新文件,所以该命令有个附加功能,即创建新的空文件。touch命令的格式如下:

touch 参数

touch命令的参数可以是文件,也可以是一个目录。

案例5:修改文件file的时间标签为当前时间。

[itheima@localhost ~]$ ls -l file
-rw-rw-r--. 1 itheima itheima 0 Sep 13 08:30 file
[itheima@localhost ~]$ touch file
[itheima@localhost ~]$ ls -l file
-rw-rw-r--. 1 itheima itheima 0 Sep 13 08:31 file

在该案例中,先使用ls -l命令打印了文件file的属性信息,再使用touch命令对file进行操作,之后再次打印文件file的属性信息,对比两次打印结果,可知touch成功更新了文件file的时间标签。

⑤ mkdir

mkdir命令的原意为“make directory”,即创建目录。mkdir命令的格式如下:

mkdir [选项] 参数

mkdir命令的参数一般为目录或路径名,当参数为目录时,为保证新目录可成功创建,使用该命令前应确保新建目录不与其同路径下的目录重名;当参数为路径时,需保证路径中的目录都已存在,或通过选项创建路径中缺失的目录。mkdir命令的常用选项如表2所示。

表2 mkdir命令常用选项

参数 说明
-p 若路径中的目录不存在,则先创建目录;
-v 查看文件创建过程。

案例6:在当前路径下的“itheima”目录中创建“bxg”目录。

[itheima@localhost ~]$ mkdir ./itheima/bxg
mkdir: cannot create directory `./itheima/bxg': No such file or directory
[itheima@localhost ~]$ mkdir -p ./itheima/bxg
[itheima@localhost ~]$ ls
a    Documents itheima Pictures Templates
Desktop Downloads Music  Public  Videos

如上所示,若路径中的目录不存在,又未使用参数-p,将会报错,提示没有发现相应文件或目录;之后添加-p选项,则会在先路径中创建itheima目录,之后再在itheima目录中创建子目录bxg。

⑥ cp

cp命令的原意为“copy”,即拷贝,该命令的功能为将一个或多个源文件复制到指定的目录,其命令格式如下:

cp [选项] [源文件或目录] [目的目录]

默认情况下,该命令不能复制目录,若要复制目录,需同时使用“-R”选项。cp命令常用的选项如表3所示。

表3 cp命令常用选项

参数 说明
-R 递归处理,将指定目录下的文件及子目录一并处理
-p 拷贝的同时不修改文件属性,包括所有者、所属组、权限和时间
-f 强行复制文件或目录,无论目的文件或目录是否已经存在

案例7:将当前路径下的文件a复制到目录dir中。

[itheima@localhost ~]$ cp a ./dir

案例8:将当前目录下的Public目录复制到./itheima/bxg。

[itheima@localhost ~]$ cp -R Public ./itheima/bxg

⑦ mv

mv命令的原意为“move”,该命令用于移动文件或目录,若同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则该命令会将前面指定的多个文件或目录复制到最后一个目录中。其命令格式如下:

mv 源文件或目录 目的目录

若该命令操作的对象是相同路径下的两个文件,则其功能为修改文件名。

案例9:将文件a移动到目录./itheima/bxg中

cast@localhost ~]$ mv a ./itheima/bxg

案例10:使用mv命令修改文件名。

#mv file file2
[itheima@localhost ~]$ mv ./itheima/a ./itheima/b
[itheima@localhost ~]$ cd ./itheima
[itheima@localhost itheima]$ ls
b bxg

根据以上展示的结果可知,mv命令将目录itheima中的文件a的文件名改为了b。

⑧ rm

rm命令的原意为“remove”,功能为删除目录中的文件或目录,该命令可同时删除多个对象,其命令格式如下:

rm [选项] 文件或目录

若要使用rm命令删除目录,需再参数前添加-r选项。除-r外,rm常用的选项列表如表4所示。

表4 rm命令常用选项

参数 说明
-f 强制删除文件或目录
-rf 选项-r与-f结合,删除目录中所有文件和子目录,并且不一一确认
-i 在删除文件或目录时对要删除的内容逐一进行确认(y/n)

案例11:删除家目录下的目录itheima。

[itheima@localhost ~]$ rm itheima
rm: cannot remove `itheima': Is a directory
[itheima@localhost ~]$ rm -ri itheima
rm: descend into directory `itheima'? y
rm: remove regular empty file `itheima/b'? y
rm: descend into directory `itheima/bxg'? y
rm: remove directory `itheima/bxg/Public'? y
rm: remove regular empty file `itheima/bxg/a'? y
rm: remove directory `itheima/bxg'? y
rm: remove directory `itheima'? y
[itheima@localhost ~]$

注意:

使用rm删除的文件无法恢复,在删除文件之前,一定要再三确认。

⑨ rmdir

rmdir命令的原意为“remove directory”,该命令与rm命令类似,但该命令仅用于删除目录。rmdir的命令格式如下:

rmdir [-p] 目录

rmdir命令可删除指定路径中的一个或多个空目录,若在命令中添加参数-p,此条命令将会在删除指定目录后检测其上层目录,若该目录的上层目录已变成空目录,则将其一并删除。

案例12:删除itheima目录下的bxg目录。

[itheima@localhost ~]$ rmdir itheima/bxg
[itheima@localhost ~]$ mkdir -p itheima/bxg

2. 文件查看命令

文件查看命令主要用于查看文件中存储的内容,常用的文件查看命令有:cat、more、head、tail等。

① cat

cat命令的愿意为“concatenate and display files”,即连接和显示文件,cat的功能为将文件中的内容打印到输出设备,该命令的格式如下:

cat 文件名

案例13:打印etc目录下用户信息文件中的内容,该文件的路径为/etc/passwd。

[itheima@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
……

② more

more命令用于分页显示文件内容,more的命令格式如下:

more [文件名]

在使用more命令分页显示文件内容时,可以使用快捷键进行翻页等操作,其快捷键如下表5所示。

表5 more快捷键说明

快捷键 说明
f/Space 显示下一页
Enter 显示下一行
q/Q 退出

案例14:分页显示etc目录下用户信息文件中的内容。

[itheima@localhost ~]$ more /etc/passwd

(打印结果不再展示,读者可自行实验)

③ head

head命令也用于查看文件内容,但该命令可指定只查看文件的前n行。head命令的格式如下:

head -n filename

其中n为要查看的行数,filename为待查看文件的文件名。

案例15:使用head命令查看etc目录下passwd文件中前两行内容。

[itheima@localhost ~]$ head -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

④ tail

tail命令与head命令的相反,用于查看文件的后n行内容。tail命令的格式如下:

tail -n filename

其中n为要查看的行数,filename为待查看文件的文件名。

案例16:使用tail命令查看etc目录下passwd文件后三行内容。

[itheima@localhost ~]$ tail -3 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
itheima:x:500:500:itheima:/home/itheima:/bin/bash

3. 权限管理命令

根据用户的权限,Linux系统中的用户大体分为两类:超级用户root和普通用户。其中超级用户拥有操作Linux系统的所有权限,但为保证系统安全,一般不使用超级用户登陆,而是创建普通用户,使用普通用户进行一系列操作。为避免普通用户权限过大,或权限不足,通常需要由root用户创建拥有不同权限的多个用户,或变更某个用户的权限,此时便需用到一系列的权限管理命令。

在学习权限管理命令之前,我们需先了解Linux系统中用户与文件、与其它用户的关系,与文件权限的含义。根据用户与文件的关系,Linux系统中将用户分为文件或目录的拥有者、同组用户、其他组用户和全部用户;又根据用户对文件的权限,将用户权限分为读取权限(read)、写入权限(write)和执行权限(execute)。表6列出了文件与目录拥有对应权限时的含义。

表6 权限说明

权限 对应字符 文件 目录
读权限 r 可查看文件内容 可以列出目录中的内容
写权限 w 可修改文件内容 可以在目录中创建、删除文件
执行权限 x 可执行该文件 可以进入目录

常用的权限管理命令有:chmod、chown、chgrp等,使用这些命令往往需要管理员权限,但登录时系统默认的是普通用户,因此我们应先将用户切换到root。切换用户时使用的命令是“su”,其用法如下:

[itheima@localhost ~]$ su
Password:

经过如上操作后,此时的工作目录切换为root用户的根目录。若需要切换回原用户时,使用“exit”命令退出即可,示例如下:

[root@localhost itheima]# exit
exit

当然普通用户也可使用权限管理命令,但只能操作属于该用户的文件,若想对其它用户的文件进行操作,需要先提升自身的权限。提升用户权限的命令为sudo,该命令将在第4章中讲解,此处则以root用户为主,讲解相应命令。下面我们将从功能入手,结合案例,来讲解常用的权限管理命令。

① chmod

chmod命令的原意为“change the permissions mode of file”,其功能为变更文件或目录的权限,该命令的格式如下:

chmod [{augo}{+-=}] [文件或目录]

其中“a”表示所有用户,“u”表示用户名user,“g”表示组名group,“o”表示其它;“+”表示添加权限,“-”表示取消权限,“=”表示设定权限。

案例17:创建一个目录b,为目录b设置权限,要求:用户自己拥有读取、写入及执行权限,同组用户拥有读取和执行权限,其他组用户拥有读取权限。

[root@localhost itheima]# mkdir b
[root@localhost itheima]# ls -l b
-rw-r--r-- 1 root root 0 Sep 14 02:46 b
[root@localhost itheima]# chmod u+x,g+x b
[root@localhost itheima]# ls -l b
-rwxr-xr-- 1 root root 0 Sep 14 02:46 b

除了上述方法外,还可以以数值的形式表示权限。

使用数值表示权限时,可以方便地设置某个文件的所有者权限、所在组权限与其它人的权限。不同的权限对应不同的数值:读权限对应的数值为4,写权限对应的数值为2,执行权限对应的数值为1。简单来说,若设置某个文件的权限为777,则表示所有用户对该文件或用户都有读权限、写权限和可执行权限。

案例18:在itheima目录中创建bxg目录,为bxg目录设置权限,要求:用户自己拥有读取、写入及执行权限,同组用户拥有读取和执行权限,其他组用户拥有读取权限。

[root@localhost itheima]# ls -l
total 4
drwxr-xr-x 2 root root 4096 Sep 14 03:00 bxg
[root@localhost itheima]# chmod 754 bxg
[root@localhost itheima]# ls -l
total 4
drwxr-xr-- 2 root root 4096 Sep 14 03:00 bxg

对比两次打印结果可知,bxg目录的权限由755变为了754,即其它用户的权限由可读可执行,变为了只读。

在管理权限时,若权限的变动较小,可以使用字符方式进行设置;若权限的变动较大,多个对象的多项权限都要发生改变,使用数值表示法进行设置更为方便。

② chown

chown命令的原意为“change the owner of file”,其功能为更改文件或目录的所有者。默认情况下文件的所有者为创建该文件的用户,或在文件被创建时通过命令指定的用户,但在需要时,可使用chown对文件的所有者进行修改。该命令的格式如下:

命令格式:chmod [用户] [文件或目录]

案例19:改变文件file的所有者为itheima。

[root@localhost itheima]# ls -l
total 4
drwxr-xr--. 2 root root 4096 Sep 14 03:00 bxg
[root@localhost itheima]# chown itheima bxg
[root@localhost itheima]# ls -l
total 4
drwxr-xr--. 2 itheima root 4096 Sep 14 03:00 bxg

对比两次打印结果可知,目录bxg的所有者由root变为了itheima。

③ chgrp

chgrp命令的原意为“change file group”,用于更改文件或目录的所属组。一般情况下,文件或目录与创建该文件的用户属于同一组,或在被创建时通过选项指定所属组,但在需要时,可通过chgrp命令更改文件的所属组。chgrp命令的格式如下:

chgrp [组名] [文件或目录]

案例20:修改目录bxg的所属组为itheima。

[root@localhost itheima]# chgrp itheima bxg
[root@localhost itheima]# ls -l
total 4
drwxr-xr--. 2 itheima itheima 4096 Sep 14 03:00 bxg

由以上输出结果可看出,目录bxg的所属组由root变为了itheima。

4. 文件搜索命令

文件搜索命令可根据文件名或关键字,搜索文件所在路径,或根据关键字符搜索文件内容。常用的文件搜索命令有:which、find、locate、grep等,下面我们将从其功能入手,结合案例,来讲解这些命令。

① which

我们所使用的每一条Linux命令也以文件的形式保存在系统中,使用which命令可查看命令所在的目录。which命令的格式如下:

which 命令

案例21:查找命令ls所在的路径。

[itheima@localhost ~]$ which ls
alias ls='ls --color=auto'
  /bin/ls

与which类似,whereis也能找到命令所在的位置,不同的是,which还能找到命令的别名记录,而whereis可以同时展示命令帮助文档所在的路径。

② find

find命令可借助搜索关键字查找文件或目录,该命令的格式如下:

find 搜索路径 [选项] 搜索关键字

其中搜索关键字可以为文件名、文件大小、文件所有者等。find常用的选项列表如表7。

表7 find命令常用选项

参数 说明
-name 根据文件名查找
-size 根据文件大小查找
-user 根据文件所有者查找

案例22:按文件名在etc目录下查找passwd文件。

[root@localhost itheima]# find /etc -name passwd
/etc/pam.d/passwd
/etc/passwd

③ locate

locate命令也可借助搜索关键字查找文件或目录,该命令的格式如下:

locate [选项] 搜索关键字

案例23:搜索etc目录下所有以pas开头的文件。

[root@localhost itheima]# locate /etc/pas
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

locate的功能与“find -name”相同,但在速度上,locate要比find命令快很多,因为它不是搜索Linux的整个目录,而是搜索数据库/var/lib/locatedb。但是即便你确定某个文件存在时,locate也有可能搜索不到该文件,如以上案例搜索结果就不理想。

这是因为,这个数据库中包含本地所有文件信息,Linux系统一般自动创建这个数据库,并每天自动更新一次,所以使用locate命令查不到最新变动的文件。为了避免此种情况,可以在使用locate命令之前,先使用updatedb命令,手动更新数据库。具体演示如下。

[root@localhost itheima]# updatedb
[root@localhost itheima]# locate /etc/pas
/etc/passwd
/etc/passwd-
/etc/passwd.OLD

④ grep

grep命令用于在文件中搜索与字符串匹配的行并输出,该命令的格式如下:

grep 指定字符 源文件

案例24:查找etc目录下的services文件中包含root的行。

[root@localhost itheima]# grep root /etc/services
rootd      1094/tcp        # ROOTD
rootd      1094/udp        # ROOTD
[root@localhost itheima]#

image-20200629175128765多学一招:文件详细信息

我们可使用“ls –l /etc”显示目录/etc中文件的详细信息:

[itheima@localhost ~]$ ls -l /etc | more
total 1396
drwxr-xr-x 3 root root    97 Jun 30 18:20 abrt
-rw-r--r-- 1 root root    16 Jun 30 18:25 adjtime
-rw-r--r-- 1 root root   1518 Jun 7 2013 aliases
-rw-r--r-- 1 root root  12288 Jun 30 10:27 aliases.db
……

由以上输出结果可以看出,使用“ls –l”命令查看目录信息时,会得到目录文件数量统计和一个由空格划分的7个字段的列表,该列表的每个字段所表示的信息依次为:文件类型与权限、文件硬链接数、文件所有者、文件所有者所属组、文件所占空间、文件最近访问/修改时间、文件名。下面对这些信息进行讲解。

① 文件名

列表中每行信息的最后一个字段为该文件的文件名。若文件是一个链接文件,则文件名中会有一个“->”,该符号之后为其所指文件的文件名。

② 文件类型与权限

此部分对应列表中每行信息的第一个字段,共由10个字符组成:

第1个字符代表文件的类型,不同的文件对应不同的字符,其中字符“-”表示该文件是一个普通文件,字母“d”表示该文件是一个目录(directory),字母“l”表示该文件是一个链接文件。这三类是较为常见的文件类型。其次还有字符“b”、“c”、“p”、“s”,依次代表“块(block)设备文件”、“字符(character)设备文件”、命令管道文件和与shell编程有关的socket文件。

第2~第10个字符,符每3位为一组,依次代表所有者对应权限、所有者所在组对应权限与其它用户对应的权限。

③ 文件硬链接数

若一个文件不是目录,则该字段表示这个文件所具有的硬链接数。

④ 文件所有者

该字段表示当前文件属于哪个用户。

⑤ 文件所有者所属组

该字段表示当前文件所有者的所属组。

⑥ 文件所占空间

该字段表示文件大小,若该文件是一个目录,则其表示的是该目录的大小,而非该目录以及它的子目录与文件的总大小。

⑦ 文件最近访问/修改时间

顾名思义,即文件最近被访问或者被修改的时间,此项可以使用“touch”命令来修改。

点击此处
隐藏目录