Linux中目前可以识别的命令有上万条,如果没有分类,那么学习起来一定痛苦不堪。所以我们把命令分门别类,主要是为了方便学习和记忆。我们先来学习最为常用的和目录相关的操作命令。
ls是最常见的目录操作命令,主要作用是显示目录下的内容。这个命令的基本信息如下:
●命令名称:ls。
●英文原意:list。
●所在路径:/bin/ls。
●执行权限:所有用户。
●功能描述:显示目录下的内容。
对命令的基本信息进行说明:英文原意有助于理解和记忆命令;执行权限是命令只能被超级用户执行,还是可以被所有用户执行;功能描述指的是这个命令的基本作用。
本章主要讲解基本命令,基本信息有助于大家记忆,本章所有命令都会加入命令的基本信息。在后续章节中,大家要学会通过帮助命令、搜索命令来自己查询这些信息,所以不再浪费篇幅来写了。
[root@localhost ~]#ls [选项] [文件名或目录名]
选项:
-a: 显示所有文件
--color=when: 支持颜色输出,when的值默认是always(总显示颜色),也可以是never(从不显示颜色)和auto(自动)
-d: 显示目录信息,而不是目录下的文件
-h: 人性化显示,按照我们习惯的单位显示文件大小
-i: 显示文件的i节点号
-l: 长格式显示
学习命令,主要学习的是命令选项,但是每个命令的选项非常多,比如ls命令就支持五六十个选项,我们不可能讲解每个选项,也没必要讲解每个选项,本章只能讲解最为常用的选项,即可满足我们日常操作使用。
例子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号都是不一样的,当然也有例外(如硬链接),这些例外情况我们会在本章的链接小节中进行讲解。
cd是切换所在目录的命令,这个命令的基本信息如下。
●命令名称:cd。
●英文原意:change directory。
●所在路径:Shell内置命令。
●执行权限:所有用户。
●功能描述:切换所在目录。
Linux的命令按照来源方式分为两种:Shell内置命令和外部命令。所谓Shell内置命令,就是Shell自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,是外来命令,所以会有命令的执行文件。Linux中的绝大多数命令是外部命令,而cd命令是一个典型的Shell内置命令,所以cd命令没有执行文件所在路径。
[root@localhost ~]#cd [目录名]
cd命令是一个非常简单的命令,仅有的两个选项-P和-L的作用非常有限,很少使用。-P(大写)是指如果切换的目录是软链接目录,则进入其原始的物理目录,而不是进入软链接目录;-L(大写)是指如果切换的目录是软链接目录,则直接进入软链接目录。
例子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
#这个命令不会有目录的改变,只是告诉大家“.”代表当前目录
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目录了。
mkdir是创建目录的命令,其基本信息如下。
●命令名称:mkdir。
●英文原意:make directories。
●所在路径:/bin/mkdir。
●执行权限:所有用户。
●功能描述:创建空目录。
[root@localhost ~]# mkdir [选项] 目录名
选项:
-p: 递归建立所需目录
mkdir也是一个非常简单的命令,其主要作用就是新建一个空目录。
例子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目录都已经建立
所谓的递归建立,就是一级一级地建立目录。
既然有建立目录的命令,就一定会有删除目录的命令rmdir,其基本信息如下。
●命令名称:rmdir。
●英文原意:remove empty directories。
●所在路径:/bin/rmdir。
●执行权限:所有用户。
●功能描述:删除空目录。
[root@localhost ~]# rmdir [选项] 目录名
选项:
-p: 递归删除目录
[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节)。
tree命令以树形结构显示目录下的文件,其基本信息如下:
●命令名称:tree。
●英文原意:list contents of directories in a tree-like format。
●所在路径:/usr/bin/tree。
●执行权限:所有用户。
●功能描述:显示目录树。
tree命令非常简单,用法也比较单一,就是显示目录树,例如: