文件处理与管理命令
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]#
多学一招:文件详细信息
我们可使用“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”命令来修改。