一、文件和目录命令
Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令和外部命令。所谓 Shell 内置命令,就是 Shell 自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,所以会有命令的执行文件。Linux 中的绝大多数命令是外部命令,而 cd 命令是一个典型的 Shell 内置命令,所以 cd 命令没有执行文件所在路径。
1、cd命令:是 Change Directory 的缩写,用来切换工作目录。
cd 命令的基本格式如下: [root@localhost ~]# cd [相对路径或绝对路径]
除此之外,cd 命令后面可以跟一些特殊符号,表达固定的含义
特殊符号 | 作 用 |
---|---|
~ | 代表当前登录用户的主目录 |
~用户名 | 表示切换至指定用户的主目录 |
– | 代表上次所在目录 |
. | 代表当前目录 |
.. | 代表上级目录 |
[root@localhost vbird]# cd ~ #表示回到自己的主目录,对于 root 用户,其主目录为 /root [root@localhost ~]# cd #没有加上任何路径,也代表回到当前登录用户的主目录 [root@localhost ~]# cd ~vbird #代表切换到 vbird 这个用户的主目录,亦即 /home/vbird [root@localhost ~]# cd .. #表示切换到目前的上一级目录,亦即是 /root 的上一级目录的意思; 需要注意的是,在 Linux 系统中,根目录确实存在 .(当前目录)以及 ..(当前目录的父目录)两个目录,但由于根目录是最顶级目录,因此根目录的 .. 和 . 的属性和权限完全一致,也就是说,根目录的父目录是自身。 [root@localhost /]# cd – #表示回到刚刚的那个目录 [root@localhost ~]# cd /usr/local/src #进入/usr/local/src目录 [root@localhost src]# cd .. #进入上级目录 [root@localhost local]# cd . #进入当前目录
2、pwd命令:是 Print Working Directory (打印工作目录)的缩写,功能是显示用户当前所处的工作目录。
[root@localhost mail]# pwd /var/mail
3、ls命令:是list 的缩写,是最常见的目录操作命令。
命令的基本格式为:
ls [选项] 目录名称
下面是ls 命令常用的选项以及各自的功能
选项 | 功能 |
---|---|
-a | 显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。 |
-A | 显示全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录。 |
-d | 仅列出目录本身,而不是列出目录内的文件数据。 |
-f | ls 默认会以文件名排序,使用 -f 选项会直接列出结果,而不进行排序。 |
-F | 在文件或目录名后加上文件类型的指示符号,例如,* 代表可运行文件,/ 代表目录,= 代表 socket 文件,| 代表 FIFO 文件。 |
-h | 以人们易读的方式显示文件或目录大小,如 1KB、234MB、2GB 等。 |
-i | 显示 inode 节点信息。 |
-l | 使用长格式列出文件和目录信息。 |
-n | 以 UID 和 GID 分别代替文件用户名和群组名显示出来。 |
-r | 将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。 |
-R | 连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。 |
-S | 以文件容量大小排序,而不是以文件名排序。 |
-t | 以时间排序,而不是以文件名排序。 |
–color=never –color=always –color=auto |
never 表示不依据文件特性给予颜色显示。 always 表示显示颜色,ls 默认采用这种方式。 auto 表示让系统自行依据配置来判断是否给予颜色。 |
–full-time | 以完整时间模式 (包含年、月、日、时、分)输出 |
–time={atime,ctime} | 输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间。 |
注意,当 ls 命令不使用任何选项时,默认只会显示非隐藏文件的名称,并以文件名进行排序,同时会根据文件的具体类型给文件名配色(蓝色显示目录,白色显示一般文件)。除此之外,如果想使用 ls 命令显示更多内容,就需要使用表 1 相应的选项。
ls 命令还使用了 -l 选项,因此才显示出了文件的详细信息,此选项显示的这 7 列的含义分别是:
- 第一列:规定了不同的用户对文件所拥有的权限,具体权限的含义将在后续章节中讲解。
- 第二列:引用计数,文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。
- 第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
- 第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
- 第五列:大小,默认单位是字节。
- 第六列:文件修改时间,文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
- 第七列:文件名或目录名。
#查看某个目录的详细信息
[root@localhost ~]# ls -l /root/ -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 #显示目录本身的信息 [root@localhost ~]# ls -ld /root/ dr-xr-x—.2 root root 4096 1 月 20 12:30 /root/ #按照人们习惯的单位显示文件大小 [root@localhost ~]# ls -lh -rw——-.1 root root 1.2K 1 月 14 18:18 anaconda-ks.cfg -rw-r-r–.1 root root 25K 1 月 14 18:17 install.log -rw-r-r–.1 root root 7.6K 1 月 14 18:17 install.log.syslog
4、mkdir 命令:是 make directories 的缩写,用于创建新目录
mkdir 命令的基本格式为:
[root@localhost ~]# mkdir [-mp] 目录名
- -m 选项用于手动配置所创建目录的权限,而不再使用默认权限。
- -p 选项递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/test 以及 /home/test/demo。
#递归创建目录
[root@localhost ~]# mkdir -p lm/movie/jp/cangls
#使用 -m 选项自定义目录权限
[root@localhost ~]# mkdir -m 711 test2
5、rmdir命令:rmdir(remove empty directories 的缩写)命令用于删除空目录
命令的基本格式为:
[root@localhost ~]# rmdir [-p] 目录名
#rmdir 命令可以使用 -p 选项递归删除目录
[root@localhost ~]# rmdir -p lm/movie/jp/cangls
注意,此方式先删除最低一层地目录(这里先删除 cangls),然后逐层删除上级目录,删除时也需要保证各级目录是空目录。
6、touch 命令
touch 命令不光可以用来创建文件(当指定操作文件不存在时,该命令会在当前位置建立一个空文件),此命令更重要的功能是修改文件的时间参数(但当文件存在时,会修改此文件的时间参数)。
Linux 系统中,每个文件主要拥有 3 个时间参数(通过 stat 命令进行查看),分别是文件的访问时间、数据修改时间以及状态修改时间:
- 访问时间(Access Time,简称 atime):只要文件的内容被读取,访问时间就会更新。例如,使用 cat 命令可以查看文件的内容,此时文件的访问时间就会发生改变。
- 数据修改时间(Modify Time,简称 mtime):当文件的内容数据发生改变,此文件的数据修改时间就会跟着相应改变。
- 状态修改时间(Change Time,简称 ctime):当文件的状态发生变化,就会相应改变这个时间。比如说,如果文件的权限或者属性发生改变,此时间就会相应改变。
touch 命令的基本格式如下:
[root@localhost ~]# touch [选项] 文件名
选项:
- -a:只修改文件的访问时间;
- -c:仅修改文件的时间参数(3 个时间参数都改变),如果文件不存在,则不建立新文件。
- -d:后面可以跟欲修订的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间。
- -m:只修改文件的数据修改时间。
- -t:命令后面可以跟欲修订的时间,而不用目前的时间,时间书写格式为
YYMMDDhhmm
。
7、建立链接(硬链接和软链接)文件
ext4 文件系统会把分区主要分为两大部分(暂时不提超级块):小部分用于保存文件的 inode (i 节点)信息;剩余的大部分用于保存 block 信息。
inode 的默认大小为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。大家如果仔细查看,就会发现 inode 中是不记录文件名的,那是因为文件名记录在文件所在目录的 block 中。
block 的大小可以是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,如果一个 block 放不下数据,则可以占用多个 block。例如,有一个 10KB 的文件需要存储,则会占用 3 个 block,虽然最后一个 block 不能占满,但也不能再放入其他文件的数据。这 3 个 block 有可能是连续的,也有可能是分散的。
由此,我们可以知道以下 2 个重要的信息:
- 每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向;
- 如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块;
ln 命令用于给文件创建链接,根据 Linux 系统存储文件的特点,链接的方式分为以下 2 种:
- 软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。
- 硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。
ln 命令的基本格式如下:
[root@localhost ~]# ln [选项] 源文件 目标文件
选项:
- -s:建立软链接文件。如果不加 “-s” 选项,则建立硬链接文件;
- -f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;
#创建硬链接
[root@localhost ~]# touch cangls [root@localhost ~]# ln /root/cangls /tmp #建立硬链接文件,目标文件没有写文件名,会和原名一致 #也就是/tmp/cangls 是硬链接文件
#创建软链接
[root@localhost ~]# touch bols [root@localhost ~]# In -s /root/bols /tmp #建立软链接文件
注意:软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接文件会报错。这是初学者非常容易犯的错误。
8、cp命令:复制文件和目录
cp 命令的基本格式如下:
[root@localhost ~]# cp [选项] 源文件 目标文件
选项:
- -a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
- -d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
- -i:询问,如果目标文件已经存在,则会询问是否覆盖;
- -l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
- -s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
- -p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
- -r:递归复制,用于复制目录;
- -u:若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。
#把源文件不改名复制到 /tmp/ 目录下
[root@localhost ~]# cp cangls /tmp/
#改名复制
[root@localhost ~]# cp cangls /tmp/bols
#如果复制的目标位置已经存在同名的文件,则会提示是否覆盖,因为 cp 命令默认执行的是“cp -i”的别名
[root@localhost ~]# cp cangls /tmp/ cp:是否覆盖”/tmp/cangls”?y #目标位置有同名文件,所以会提示是否覆盖
#复制目录只需使用“-r”
[root@localhost ~]# cp -r /root/movie/ /tmp/ #目录原名复制
#复制软链接文件
[root@localhost ~]# ln -s /root/cangls /tmp/cangls_slink #建立一个测试软链接文件/tmp/cangls_slink [root@localhost ~]# ll /tmp/cangls_slink lrwxrwxrwx 1 root root 12 6 月 14 05:53 /tmp/cangls_slink -> /root/cangls #源文件本身就是一个软链接文件 [root@localhost ~]# cp /tmp/cangls_slink /tmp/cangls_t1 #复制软链接文件,但是不加”-d”选项 [root@localhost ~]# cp -d /tmp/cangls_slink /tmp/cangls_t2 #复制软链接文件,加入”-d”选项 [root@localhost ~]# ll /tmp/cangls_t1 /tmp/cangls_t2 -rw-r–r– 1 root root 0 6月 14 05:56 /tmp/cangls_t1 #会发现不加”-d”选项,实际复制的是软链接的源文件,而不是软链接文件 lrwxrwxrwx 1 root root 12 6 月 14 05:56/tmp/ cangls_t2-> /root/cangls #而如果加入了”-d”选项,则会复制软链接文件
如果在复制软链接文件时不使用 “-d” 选项,则 cp 命令复制的是源文件,而不是软链接文件;只有加入了 “-d” 选项,才会复制软链接文件。请大家注意,”-d” 选项对硬链接是无效的。
#保留源文件属性复制
[root@localhost ~]# cp /var/lib/mlocate/mlocate.db /tmp/ [root@localhost ~]# ll /var/lib/mlocate/mlocate.db -rw-r—–1 root slocate2328027 6月 14 02:08/var/lib/mlocate/mlocate.db #注意源文件的时间和所属组 [root@localhost ~]#ll /tmp/mlocate.db -rw-r—– 1 root root2328027 6 月 14 06:05/tmp/mlocate.db #由于复制命令由root用户执行,所以目标文件的所属组为了root,而且时间也变成了复制命令的执行时间
而当我们执行备份、曰志备份的时候,这些文件的时间可能是一个重要的参数,这就需执行 “-p” 选项了。这个选项会保留源文件的属性,包括所有者、所属组和时间。
[root@localhost ~]# cp -p /var/lib/mlocate/mlocate.db /tmp/mlocate.db_2 #使用”-p”选项 [root@localhost ~]# ll /var/lib/mlocate/mlocate.db /tmp/mlocate.db_2 -rw-r—– root slocate 2328027 6月 14 02:08 /tmp/mlocate.db_2 -rw-r—– root slocate 2328027 6月 14 02:08 /var/lib/mlocate/mlocate.db #源文件和目标文件的所有属性都一致,包括时间
#”-l” 和 “-s” 选项
我们如果使用 “-l” 选项,则目标文件会被建立为源文件的硬链接;而如果使用了 “-s” 选项,则目标文件会被建立为源文件的软链接。
暂无评论内容