购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 目录操作命令

Linux中目前可以识别的命令有上万条,如果没有分类,那么学习起来一定痛苦不堪。所以我们把命令分门别类,主要是为了方便学习和记忆。我们先来学习最为常用的和目录相关的操作命令。

4.2.1 ls命令

ls是最常见的目录操作命令,主要作用是显示目录下的内容。这个命令的基本信息如下:

●命令名称:ls。

●英文原意:list。

●所在路径:/bin/ls。

●执行权限:所有用户。

●功能描述:显示目录下的内容。

对命令的基本信息进行说明:英文原意有助于理解和记忆命令;执行权限是命令只能被超级用户执行,还是可以被所有用户执行;功能描述指的是这个命令的基本作用。

本章主要讲解基本命令,基本信息有助于大家记忆,本章所有命令都会加入命令的基本信息。在后续章节中,大家要学会通过帮助命令、搜索命令来自己查询这些信息,所以不再浪费篇幅来写了。

1.命令格式

[root@localhost ~]#ls [选项] [文件名或目录名]

选项:

-a:       显示所有文件

--color=when:  支持颜色输出,when的值默认是always(总显示颜色),也可以是never(从不显示颜色)和auto(自动)

-d:      显示目录信息,而不是目录下的文件

-h:      人性化显示,按照我们习惯的单位显示文件大小

-i:      显示文件的i节点号

-l:      长格式显示

学习命令,主要学习的是命令选项,但是每个命令的选项非常多,比如ls命令就支持五六十个选项,我们不可能讲解每个选项,也没必要讲解每个选项,本章只能讲解最为常用的选项,即可满足我们日常操作使用。

2.常见用法

例子1:“-a”选项

-a选项中的a是all的意思,也就是显示隐藏文件。例如:

[root@localhost ~]# ls

anaconda-ks.cfg install.log install.log.syslog

[root@localhost ~]# ls -a

.anaconda-ks.cfg .bash_logout .bashrc install.log .mysql_history .viminfo

...bash_history .bash_profile .cshrc install.log.syslog .tcshrc

可以看到,加入“-a”选项后,显示出来的文件明显变多了。而多出来的这些文件都有一个共同的特性,就是以“.”开头。在Linux中以“.”开头的文件是隐藏文件,只有通过“-a”选项才能查看。

说到隐藏文件的查看方式,曾经有学生问超哥:“为什么在Linux中查看隐藏文件这么简单?这样的话隐藏文件还有什么意义?”其实,他理解错了隐藏文件的含义。隐藏文件不是为了把文件藏起来不让其他用户找到,而是为了告诉用户这些文件都是重要的系统文件,如非必要,不要乱动!所以,不论是Linux还是Windows都可以非常简单地查看隐藏文件,只是在Windows中绝大多数的病毒和木马都会把自己变成隐藏文件,给用户带来了错觉,以为隐藏文件是为了不让用户发现。

例子2:“-l”选项

[root@localhost ~]# ls -l

总用量44

-rw-------.1 root root 1207 1月14 18:18 anaconda-ks.cfg

-rw-r--r--.1 root root 24772 1月14 18:17 install.log

-rw-r--r--.1 root root 7690 1月 14 18:17 install.log.syslog

#权限 引用计数所有者所属组大小文件修改时间 文件名

我们已经知道“-l”选项用于显示文件的详细信息,那么“-l”选项显示的这7列分别是什么含义?

●第一列:权限。具体权限的含义将在4.5节中讲解。

●第二列:引用计数。文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。

●第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户

●第四列:所属组。默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。

●第五列:大小。默认单位是字节。

●第六列:文件修改时间。文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。

●第七列:文件名。

例子3:“-d”选项

如果我们想查看某个目录的详细信息,例如:

[root@localhost ~]# ls -l /root/

总用量44

-rw-------.1 root root 1207 1月14 18:18 anaconda-ks.cfg

-rw-r--r--.1 root root 24772 1月14 18:17 install.log

-rw-r--r--.1 root root 7690 1月14 18:17 install.log.syslog

这个命令会显示目录下的内容,而不会显示这个目录本身的详细信息。如果想显示目录本身的信息,就必须加入“-d”选项。

[root@localhost ~]# ls -ld /root/

dr-xr-x---.2 root root 4096 1月20 12:30 /root/

例子4:“-h”选项

“ls-l”显示的文件大小是字节,但是我们更加习惯的是千字节用KB显示,兆字节用MB显示,而“-h”选项就是按照人们习惯的单位显示文件大小的,例如:

[root@localhost ~]# ls -lh

总用量44K

-rw-------.1 root root1.2K 1月14 18:18 anaconda-ks.cfg

-rw-r--r--.1 root root25K 1月14 18:17 install.log

-rw-r--r--.1 root root7.6K 1月14 18:17 install.log.syslog

例子5:“-i”选项

每个文件都有一个被称作inode(i节点)的隐藏属性,可以看成系统搜索这个文件的ID,而“-i”选项就是用来查看文件的inode号的,例如:

[root@localhost ~]# ls -i

262418 anaconda-ks.cfg 262147 install.log 262148 install.log.syslog

从理论上来说,每个文件的inode号都是不一样的,当然也有例外(如硬链接),这些例外情况我们会在本章的链接小节中进行讲解。

4.2.2 cd命令

cd是切换所在目录的命令,这个命令的基本信息如下。

●命令名称:cd。

●英文原意:change directory。

●所在路径:Shell内置命令。

●执行权限:所有用户。

●功能描述:切换所在目录。

Linux的命令按照来源方式分为两种:Shell内置命令和外部命令。所谓Shell内置命令,就是Shell自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,是外来命令,所以会有命令的执行文件。Linux中的绝大多数命令是外部命令,而cd命令是一个典型的Shell内置命令,所以cd命令没有执行文件所在路径。

1.命令格式

[root@localhost ~]#cd [目录名]

cd命令是一个非常简单的命令,仅有的两个选项-P和-L的作用非常有限,很少使用。-P(大写)是指如果切换的目录是软链接目录,则进入其原始的物理目录,而不是进入软链接目录;-L(大写)是指如果切换的目录是软链接目录,则直接进入软链接目录。

2.常见用法

例子1:基本用法

cd命令切换目录只需在命令后加目录名称即可。例如:

[root@localhost ~]# cd /usr/local/src/

[root@localhost src]#

#进入/usr/local/src/目录

通过命令提示符,我们可以确定当前所在目录已经切换。

例子2:简化用法

cd命令可以识别一些特殊符号,用于快速切换所在目录,这些符号如表4-1所示。

表4-1 cd命令的特殊符号

这些简化用法以加快命令切换,我们来试试。

[root@localhost src]# cd ~

[root@localhost ~]#

“cd~”命令可以快速回到用户的家目录,cd命令直接按回车键也是快速切换到家目录。

[root@localhost ~]# cd /etc/

[root@localhost etc]# cd

[root@localhost ~]#

#直接使用cd命令,也回到了家目录

再试试“cd-”命令。

[root@localhost ~]# cd /usr/local/src/

#进入/usr/local/src/目录

[root@localhost src]# cd -

/root

[root@localhost ~]#

#“cd –”命令回到进入src目录之前的家目录

[root@localhost ~]# cd -

/usr/local/src

[root@localhost src]#

#再执行一遍“cd –”命令,又回到了/usr/local/src/目录

再来试试“.”和“..”。

[root@localhost ~]# cd /usr/local/src/

#进入测试目录

[root@localhost src]# cd..

#进入上级目录

[root@localhost local]# pwd

/usr/local

#pwd是查看当前所在目录的命令,可以看到我们进入了上级目录/usr/local/

[root@localhost local]# cd.

#进入当前目录

[root@localhost local]# pwd

/usr/local

#这个命令不会有目录的改变,只是告诉大家“.”代表当前目录

3.绝对路径和相对路径

cd命令本身不难,但是这里有两个非常重要的概念,就是绝对路径和相对路径。初学者由于对字符界面不熟悉,所以有大量的错误都是因为对这两个路径没有搞明白,比如进错了目录、打开不了文件、打开的文件和系统文件不一致等。所以我们先来区分一下这两个路径。

首先,我们先要弄明白什么是绝对、什么又是相对。其实我们一直说现实生活中没有绝对的事情,没有绝对的大,也没有绝对的小;没有绝对的快,也没有绝对的慢。这只是由于参照物的不同或认知的局限,导致会暂时认为某些东西可能是绝对的、不能改变的。比如目前我们认为光速是最快的速度,我们不能突破光速的限制。但也有可能随着技术的进步,我们会突破这一限制。

但在Linux的路径中是有绝对路径的,那是因为Linux有最高目录,也就是根目录。如果路径是从根目录开始,一级一级指定的,那使用的就是绝对路径。例如:

[root@localhost ~]# cd /usr/local/src/

[root@localhost src]# cd /etc/rc.d/init.d/

这些切换目录的方法使用的就是绝对路径。

所谓相对路径,就是只从当前所在目录开始,切换目录。例如:

[root@localhost /]# cd etc/

#当前所在路径是/目录,而/目录下有etc目录,所以可以切换

[root@localhost etc]# cd etc/

-bash: cd: etc/:没有那个文件或目录

#而同样的命令,由于当前所在目录改变了,所以就算是同一个命令也会报错,除非在/etc/目录中还有一个etc目录

所以,虽然绝对路径输入更加烦琐,但是更准确,报错的可能性也更小。对初学者而言,超哥还是建议大家使用绝对路径。本书为了使命令更容易理解,也会尽量使用绝对路径。

再举个例子,假设我当前在root用户的家目录中。

[root@localhost ~]#

那么,该如何使用相对路径进入/usr/local/src/目录中呢?

[root@localhost ~]# cd ../usr/local/src/

从我当前所在路径算起,加入“..”代表进入上一级目录,而上一级目录是根目录,而根目录中有usr目录,就会一级一级地进入src目录了。

4.2.3 mkdir命令

mkdir是创建目录的命令,其基本信息如下。

●命令名称:mkdir。

●英文原意:make directories。

●所在路径:/bin/mkdir。

●执行权限:所有用户。

●功能描述:创建空目录。

1.命令格式

[root@localhost ~]# mkdir [选项] 目录名

选项:

-p:  递归建立所需目录

mkdir也是一个非常简单的命令,其主要作用就是新建一个空目录。

2.常见用法

例子1:建立目录

[root@localhost ~]#mkdircangls

[root@localhost ~]# ls

anaconda-ks.cfg cangls install.log install.log.syslog

我们建立一个名为cangls的目录,通过ls命令可以查看到这个目录已经建立。注意:我们在建立目录的时候使用的是相对路径,所以这个目录被建立到当前目录下。

例子2:递归建立目录

如果想建立一串空目录,可以吗?

[root@localhost ~]# mkdir lm/movie/jp/cangls

mkdir:无法创建目录"lm/movie/jp/cangls":没有那个文件或目录

李明老师想建立一个保存电影的目录,结果这条命令报错,没有正确执行。这是因为这4个目录都是不存在的,mkdir默认只能在已经存在的目录中建立新目录。而如果需要建立一系列的新目录,则需要加入“-p”选项,递归建立才可以。例如:

[root@localhost ~]# mkdir -p lm/movie/jp/cangls

[root@localhost ~]# ls

anaconda-ks.cfg cangls install.log install.log.syslog lm

[root@localhost ~]# ls lm/

movie

#这里只查看一级子目录,其实后续的jp目录、cangls目录都已经建立

所谓的递归建立,就是一级一级地建立目录。

4.2.4 rmdir命令

既然有建立目录的命令,就一定会有删除目录的命令rmdir,其基本信息如下。

●命令名称:rmdir。

●英文原意:remove empty directories。

●所在路径:/bin/rmdir。

●执行权限:所有用户。

●功能描述:删除空目录。

1.命令格式

[root@localhost ~]# rmdir [选项] 目录名

选项:

-p:  递归删除目录

2.常见用法

[root@localhost ~]#rmdir cangls

就这么简单,命令后面加目录名称即可。既然可以递归建立目录,当然也可以递归删除目录。例如:

[root@localhost ~]# rmdir -p lm/movie/jp/cangls/

但rmdir命令的作用十分有限,因为只能删除空目录,所以一旦目录中有内容,就会报错。例如:

[root@localhost ~]# mkdir test

#建立测试目录

[root@localhost ~]# touch test/boduo

[root@localhost ~]# touch test/longze

#在测试目录中建立两个文件

[root@localhost ~]# rmdir test/

rmdir: 删除 "test/" 失败: 目录非空

这个命令比较“笨”,所以我们不太常用。后续我们不论删除的是文件还是目录,都会使用rm命令(见4.4.1节)。

4.2.5 tree命令

tree命令以树形结构显示目录下的文件,其基本信息如下:

●命令名称:tree。

●英文原意:list contents of directories in a tree-like format。

●所在路径:/usr/bin/tree。

●执行权限:所有用户。

●功能描述:显示目录树。

tree命令非常简单,用法也比较单一,就是显示目录树,例如: WwADC+CKQYku96Vmrb1JXftK82PLGSgDeSkE2wakBoCRYJWFZy5b8zQPwL2TSBFl

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开