一、Linux常用命令
1. ls命令:显示当前目录下的文件
ls 是最常见的目录操作命令,主要作用是显示目录下的内容。这个命令的基本信息如下:
命令名称:ls。
英文原意:list。
所在路径:/bin/ls。
执行权限:所有用户。
功能描述:显示目录下的内容。
命令格式
[root@localhost ~]#ls [选项][文件名或目录名]
选项:
-a:显示所有文件;
--color=when:支持颜色输出,when 的值默认是 always(总显示颜色),也可以是 never(从不显示颜色)和 auto(自动);
-d:显示目录信息,而不是目录下的文件;
-h:人性化显示,按照我们习惯的单位显示文件大小;
-i:显示文件的 i 节点号;
-l:长格式显示;
常见用法
【例 1】"-a"选项
-a 选项中的 a 是 all 的意思,也就是显示隐藏文件。例如:
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog
[root@localhost ~]# Is -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 列分别是什么含义?
- 第一列:权限,具体权限的含义将在后续章节中讲解。
- 第二列:引用计数,文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。
- 第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户
- 第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
- 第五列:大小,默认单位是字节。
- 第六列:文件修改时间,文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
- 第七列:文件名。
【例 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
2. cd命令:切换目录
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 命令可以识别一些特殊符号,用于决速切换所在目录,这些符号如表 1 所示。
<caption>表 1 cd 命令的特殊符号</caption>
特殊符号 | 作 用 |
---|---|
~ | 代表用户的家目录 |
- | 代表上次所在目录 |
. | 代表当前目录 |
.. | 代表上级目录 |
这些简化用法以加快命令切换,我们来试试。
[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 目录了。
3. mkdir命令:创建目录(文件夹)
mkdir 是创建目录的命令,其基本信息如下:
命令名称:mkdir。
英文原意:make directories。
所在路径:/bin/mkdir。
执行权限:所有用户。
功能描述:创建空目录。
命令格式
[root@localhost -]# mkdir [选项]目录名
选项:
-p: 递归建立所需目录
mkdir 也是一个非常简单的命令,其主要作用就是新建一个空目录。
常见用法
【例 1】建立目录。
[root@localhost ~]#mkdir cangls
[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. rmdir命令:删除空目录
既然有建立目录的命令,就一定会有刪除目录的命令 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/"失败:目录非空