目录
1.命令提示符
2.命令的基本格式
1) 选项的作用
2) 参数的作用
2.cd命令:切换目录
3.pwd命令:显示当前路径
4.ls命令:查看目录下文件
5.mkdir命令:创建目录(文件夹)
6.rmdir命令:删除空目录
7.touch命令:创建文件及修改文件时间戳
8.文件拷贝dd
9.ln命令:建立链接(硬链接和软链接)文件
10.cp命令:复制文件和目录
11.rm命令:删除文件或目录
12.mv命令:移动文件或改名
13.df用法详解:查看文件系统硬盘使用情况
14.du命令:统计目录或文件所占磁盘空间大小
15.mount命令详解:挂载Linux系统外的文件
16.umount命令:卸载文件系统
17.什么是环境变量,Linux环境变量及作用
1.命令提示符
登录系统后,第一眼看到的内容是:
[root@localhost ~]#
这就是 Linux 系统的命令提示符。那么,这个提示符的含义是什么呢?
-
[]:这是提示符的分隔符号,没有特殊含义。
-
root:显示的是当前的登录用户,笔者现在使用的是 root 用户登录。
-
@:分隔符号,没有特殊含义。
-
localhost:当前系统的简写主机名(完整主机名是 localhost.localdomain)。
-
~:代表用户当前所在的目录,此例中用户当前所在的目录是家目录。
-
#:命令提示符,Linux 用这个符号标识登录的用户权限等级。如果是超级用户,提示符就是 #;如果是普通用户,提示符就是 $。
家目录(又称主目录)是什么? Linux 系统是纯字符界面,用户登录后,要有一个初始登录的位置,这个初始登录位置就称为用户的家:
-
超级用户的家目录:/root。
-
普通用户的家目录:/home/用户名。
用户在自己的家目录中拥有完整权限,所以我们也建议操作实验可以放在家目录中进行。我们切换一下用户所在目录,看看有什么效果。
myubuntu@ubuntu:~$ cd /home/用户名 myubuntu@ubuntu:~$
仔细看,如果切换用户所在目录,那么命令提示符中的会变成用户当前所在目录的最后一个目录(不显示完整的所在目录 /usr/ local,只显示最后一个目录 local)。
1.2.命令的基本格式
接下来看看 Linux 命令的基本格式:
myubuntu@ubuntu:~$ 命令[选项][参数]
命令格式中的 [] 代表可选项,也就是有些命令可以不写选项或参数,也能执行。那么,我们就用 Linux 中最常见的 ls 命令来解释一下命令的格式(有关 ls 命令的具体用法,后续章节会详细介绍)。如果按照命令的分类,那么 ls 命令应该属于目录操作命令。
1) 选项的作用
ls 命令之后不加选项和参数也能执行,不过只能执行最基本的功能,即显示当前目录下的文件名。那么加入一个选项,会出现什么结果?
myubuntu@ubuntu:~$ ls -l
total 44
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Desktop
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Documents
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Downloads
-rw-r--r-- 1 myubuntu myubuntu 8980 Dec 18 01:48 examples.desktop
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Music
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Pictures
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Public
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Templates
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Videos
如果加一个"-l"选项,则可以看到显示的内容明显增多了。"-l"是长格式(long list)的意思,也就是显示文件的详细信息。至于 "-l" 选项的具体含义,我们稍后再详细讲解。可以看到选项的作用是调整命令功能。如果没有选项,那么命令只能执行最基本的功能;而一旦有选项,则可以显示更加丰富的数据。
Linux 的选项又分为短格式选项(-l)和长格式选项(--all)。短格式选项是英文的简写,用一个减号调用,例如:
myubuntu@ubuntu:~$ ls -l
而长格式选项是英文完整单词,一般用两个减号调用,例如:
myubuntu@ubuntu:~$ ls --all
一般情况下,短格式选项是长格式选项的缩写,也就是一个短格式选项会有对应的长格式选项。当然也有例外,比如 ls 命令的短格式选项 -l 就没有对应的长格式选项。所以具体的命令选项可以通过后面我们要学习的帮助命令来进行査询。
2) 参数的作用
参数是命令的操作对象,一般文件、目录、用户和进程等可以作为参数被命令操作。例如:
myubuntu@ubuntu:~$ ls -l anaconda-ks.cfg
但是为什么一开始 ls 命令可以省略参数?那是因为有默认参数。命令一般都需要加入参数,用于指定命令操作的对象是谁。如果可以省略参数,则一般都有默认参数。
2.cd命令:切换目录
cd 命令,是 Change Directory 的缩写,用来切换工作目录。
Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令和外部命令。所谓 Shell 内置命令,就是 Shell 自带的命令,这些命令是没有执行文件的;而外部命令就是由程序员单独开发的,所以会有命令的执行文件。Linux 中的绝大多数命令是外部命令,而 cd 命令是一个典型的 Shell 内置命令,所以 cd 命令没有执行文件所在路径。
cd 命令的基本格式如下:
myubuntu@ubuntu:~$ cd [相对路径或绝对路径]
除此之外,cd 命令后面可以跟一些特殊符号,表达固定的含义,如表 1 所示:
测试用例:
myubuntu@ubuntu:~$ cd ~myubuntu
myubuntu@ubuntu:~$ cd ..
myubuntu@ubuntu:/home$ cd ..
myubuntu@ubuntu:/$ pwd
/
myubuntu@ubuntu:/$ cd .
myubuntu@ubuntu:/$ pwd
/
myubuntu@ubuntu:/$ cd ~
myubuntu@ubuntu:~$ pwd
/home/myubuntu
myubuntu@ubuntu:~$ cd -
/
myubuntu@ubuntu:/$ pwd
/
myubuntu@ubuntu:/$ cd ~
3.pwd命令:显示当前路径
当用户登陆 Linux 系统之后,其当前目录就是它的主目录。那么,如何确定当前目录呢?可以使用 Linux 系统的 pwd 命令来显示当前目录的绝对路径。
pwd 命令,是 Print Working Directory (打印工作目录)的缩写,功能是显示用户当前所处的工作目录。该命令的基本格式为:
myubuntu@ubuntu:/$ pwd
测试用例:
myubuntu@ubuntu:~$ whoami
myubuntu
myubuntu@ubuntu:~$ pwd
/home/myubuntu
whoami 命令用于确定当前登陆的用户.可以看到,myubuntu用户当前所在目录是它的主目录 /home/myubuntu。
4.ls命令:查看目录下文件
ls 命令,list 的缩写,是最常见的目录操作命令,其主要功能是显示当前目录下的内容。此命令的基本格式为:
myubuntu@ubuntu:~$ ls [选项] 目录名称
表 1 列出了 ls 命令常用的选项以及各自的功能
意,当 ls 命令不使用任何选项时,默认只会显示非隐藏文件的名称,并以文件名进行排序,同时会根据文件的具体类型给文件名配色(蓝色显示目录,白色显示一般文件)。除此之外,如果想使用 ls 命令显示更多内容,就需要使用表 1 相应的选项。
测试用例1:
myubuntu@ubuntu:~$ ls -al
total 100
文件权限 引用计数 用户 用户组 大小 文件修改时间 文件名/目录名
drwxr-xr-x 14 myubuntu myubuntu 4096 Dec 19 19:41 .
drwxr-xr-x 3 root root 4096 Dec 18 01:48 ..
-rw------- 1 myubuntu myubuntu 152 Dec 19 19:25 .bash_history
-rw-r--r-- 1 myubuntu myubuntu 220 Dec 18 01:48 .bash_logout
-rw-r--r-- 1 myubuntu myubuntu 3637 Dec 18 01:48 .bashrc
drwx------ 12 myubuntu myubuntu 4096 Dec 19 19:41 .cache
drwx------ 14 myubuntu myubuntu 4096 Dec 19 17:57 .config
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Desktop
-rw-r--r-- 1 myubuntu myubuntu 25 Dec 19 17:56 .dmrc
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Documents
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Downloads
-rw-r--r-- 1 myubuntu myubuntu 8980 Dec 18 01:48 examples.desktop
drwx------ 3 myubuntu myubuntu 4096 Dec 19 17:57 .gconf
-rw------- 1 myubuntu myubuntu 318 Dec 19 17:56 .ICEauthority
drwx------ 3 myubuntu myubuntu 4096 Dec 19 17:56 .local
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Music
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Pictures
-rw-r--r-- 1 myubuntu myubuntu 675 Dec 18 01:48 .profile
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Public
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Templates
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Videos
-rw------- 1 myubuntu myubuntu 103 Dec 19 19:41 .Xauthority
-rw------- 1 myubuntu myubuntu 711 Dec 19 17:56 .xsession-errors
不仅如此,这里的 ls 命令还使用了 -l 选项,因此才显示出了文件的详细信息,此选项显示的这 7 列的含义分别是:
-
第一列:规定了不同的用户对文件所拥有的权限mk
-
第二列:引用计数,文件的引用计数代表该文件的硬链接个数,而目录的引用计数代表该目录有多少个一级子目录。
-
第三列:所有者,也就是这个文件属于哪个用户。默认所有者是文件的建立用户。
-
第四列:所属组,默认所属组是文件建立用户的有效组,一般情况下就是建立用户的所在组。
-
第五列:大小,默认单位是字节。
-
第六列:文件修改时间,文件状态修改时间或文件数据修改时间都会更改这个时间,注意这个时间不是文件的创建时间。
-
第七列:文件名或目录名。
测试用例2:
如果我们想查看某个目录的详细信息,例如:
myubuntu@ubuntu:~$ ls -l /home/myubuntu/
total 44
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Desktop
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Documents
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Downloads
-rw-r--r-- 1 myubuntu myubuntu 8980 Dec 18 01:48 examples.desktop
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Music
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Pictures
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Public
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Templates
drwxr-xr-x 2 myubuntu myubuntu 4096 Dec 19 17:56 Videos
5.mkdir命令:创建目录(文件夹)
mkdir 命令,是 make directories 的缩写,用于创建新目录,此命令所有用户都可以使用。
mkdir 命令的基本格式为:
myubuntu@ubuntu:~$ mkdir [-mp] 目录名
-
-m 选项用于手动配置所创建目录的权限,而不再使用默认权限。
-
-p 选项递归创建所有目录,以创建 /home/test/demo 为例,在默认情况下,你需要一层一层的创建各个目录,而使用 -p 选项,则系统会自动帮你创建 /home、/home/test 以及 /home/test/demo。
测试用例:
myubuntu@ubuntu:~$ mkdir mytest
myubuntu@ubuntu:~$ ls
Desktop Documents Downloads mytest
myubuntu@ubuntu:~$ mkdir -p ./test/a
myubuntu@ubuntu:~$ ls
Desktop Documents Downloads mytest test
myubuntu@ubuntu:~$ cd test
myubuntu@ubuntu:~/test$ ls
a
myubuntu@ubuntu:~/test$ mkdir -m 666 abc
myubuntu@ubuntu:~/test$ ll
total 16
drwxrwxr-x 4 myubuntu myubuntu 4096 Dec 19 23:14 ./
drwxr-xr-x 16 myubuntu myubuntu 4096 Dec 19 23:11 ../
drwxrwxr-x 2 myubuntu myubuntu 4096 Dec 19 23:11 a/
drw-rw-rw- 2 myubuntu myubuntu 4096 Dec 19 23:14 abc/
6.rmdir命令:删除空目录
和 mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为:
myubuntu@ubuntu:~$ rmdir [-p] 目录名
-p 选项用于递归删除空目录。
测试用例:
myubuntu@ubuntu:~$ mkdir -p test/a
myubuntu@ubuntu:~$ ll
total 4
drwxrwxr-x 3 myubuntu myubuntu 4096 Dec 19 23:26 test/
myubuntu@ubuntu:~$ cd test
myubuntu@ubuntu:~/test$ ll
total 12
drwxrwxr-x 3 myubuntu myubuntu 4096 Dec 19 23:26 ./
drwxr-xr-x 16 myubuntu myubuntu 4096 Dec 19 23:26 ../
drwxrwxr-x 2 myubuntu myubuntu 4096 Dec 19 23:26 a/
myubuntu@ubuntu:~$ rmdir -p test/a
myubuntu@ubuntu:~$ ll
total 0
myubuntu@ubuntu:~$ mkdir test
myubuntu@ubuntu:~$ rmdir test
rmdir 命令的作用十分有限,因为只能刪除空目录,所以一旦目录中有内容,就会报错。
测试用例:
myubuntu@ubuntu:~$ rmdir mytest
rmdir: failed to remove ‘mytest’: Directory not empty
7.touch命令:创建文件及修改文件时间戳
touch 命令不光可以用来创建文件(当指定操作文件不存在时,该命令会在当前位置建立一个空文件),此命令更重要的功能是修改文件的时间参数(但当文件存在时,会修改此文件的时间参数)。
Linux 系统中,每个文件主要拥有 3 个时间参数(通过 stat 命令进行查看),分别是文件的访问时间、数据修改时间以及状态修改时间:
-
访问时间(Access Time,简称 atime):只要文件的内容被读取,访问时间就会更新。例如,使用 cat 命令可以查看文件的内容,此时文件的访问时间就会发生改变。
-
数据修改时间(Modify Time,简称 mtime):当文件的内容数据发生改变,此文件的数据修改时间就会跟着相应改变。
-
状态修改时间(Change Time,简称 ctime):当文件的状态发生变化,就会相应改变这个时间。比如说,如果文件的权限或者属性发生改变,此时间就会相应改变。
touch 命令的基本格式如下:
myubuntu@ubuntu:~$ touch [选项] 文件名
选项:
-
-a:只修改文件的访问时间;
-
-c:仅修改文件的时间参数(3 个时间参数都改变),如果文件不存在,则不建立新文件。
-
-d:后面可以跟欲修订的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间。
-
-m:只修改文件的数据修改时间。
-
-t:命令后面可以跟欲修订的时间,而不用目前的时间,时间书写格式为
YYMMDDhhmm
。
测试用例:
myubuntu@ubuntu:~/mytest$ ll
total 8
drwxrwxr-x 2 myubuntu myubuntu 4096 Dec 20 15:54 ./
drwxr-xr-x 15 myubuntu myubuntu 4096 Dec 20 15:26 ../
-rw-rw-r-- 1 myubuntu myubuntu 0 Dec 20 15:31 aa
-rw-rw-r-- 1 myubuntu myubuntu 0 Dec 20 15:54 bb
myubuntu@ubuntu:~/mytest$ touch bb
myubuntu@ubuntu:~/mytest$ ll
total 8
drwxrwxr-x 2 myubuntu myubuntu 4096 Dec 20 15:54 ./
drwxr-xr-x 15 myubuntu myubuntu 4096 Dec 20 15:26 ../
-rw-rw-r-- 1 myubuntu myubuntu 0 Dec 20 15:31 aa
-rw-rw-r-- 1 myubuntu myubuntu 0 Dec 20 16:04 bb
8.文件拷贝dd
命令如下: 将hehe文件得内容写入haha里 buka@buka:~$ dd if= hehe of =haha
cd
9.ln命令:建立链接(硬链接和软链接)文件
先解释下 ext 文件系统(Linux 文件系统)是如何工作的。我们在前面讲解了分区的格式化就是写入文件系统,而我们的 Linux 目前使用的是 ext4 文件系统。如果用一张示意图来描述 ext4 文件系统,则可以参考图 1。
图 1 ext4 文件系统示意图
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 块;
了解了 Linux 系统底层文件的存储状态后,接下来学习 ln 命令。
ln 命令用于给文件创建链接,根据 Linux 系统存储文件的特点,链接的方式分为以下 2 种:
-
软链接:软链接又叫符号链接(symbolic link),与硬链接不同的是软链接本身也是文件有自己独立的Inode号,软链接的文件内容是其所链接的另外一个文件或者目录的路径。当访问软链接时,会按照路径找到软链接所指向的实际目标文件。举个例子 软链接和Windows系统下的快捷方式十分类似。
-
硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。硬链接文件其实就是与原文件在不同或者同一目录(必须同分区)下的另外一个外号,与原文件指向同一个Inode,对应同样的磁盘数据块,具有相同的访问权限、属性等等。也就是说硬链接其实就是同一个人的别名或者是外号,不管叫什么其实都是指的同样的人。
ln 命令的基本格式如下:
myubuntu@ubuntu:~$ ln [选项] 源文件 目标文件
选项:
-
-s:建立软链接文件。如果不加 "-s" 选项,则建立硬链接文件;
-
-f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;
测试用例:
#软链接 源文件必须写成绝对路径
myubuntu@ubuntu:~$ ln -s /home/myubuntu/mytest/aa
myubuntu@ubuntu:~$ ll
lrwxrwxrwx 1 myubuntu myubuntu 24 Dec 20 16:32 aa -> /home/myubuntu/mytest/aa
#建立硬链接文件,目标文件没有写文件名,会和原名一致
myubuntu@ubuntu:~$ ln /home/myubuntu/mytest/aa atest
myubuntu@ubuntu:~$ ll
lrwxrwxrwx 1 myubuntu myubuntu 24 Dec 20 16:32 aa -> /home/myubuntu/mytest/aa
-rw-rw-r-- 2 myubuntu myubuntu 0 Dec 20 15:31 atest
drwxrwxr-x 3 myubuntu myubuntu 4096 Dec 20 16:29 mytest/
总结:硬链接具有相同的inode,删除硬链接的不同文件,其它文件不受影响。 软链接具有不同的inode,删除软链接的源文件,则链接目标文件不存在。删除软链接目标文件,源文件不受任何影响。
10.cp命令:复制文件和目录
cp 命令,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录,以及比对两文件的新旧而予以升级等功能。
cp 命令的基本格式如下:
myubuntu@ubuntu:~$ cp [选项] 源文件 目标文件
选项:
-
-a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
-
-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
-
-i:询问,如果目标文件已经存在,则会询问是否覆盖;
-
-l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
-
-s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
-
-p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
-
-r:递归复制,用于复制目录;
-
-u:若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。
需要注意的是,源文件可以有多个,但这种情况下,目标文件必须是目录才可以。
这里的软链接,类似于 Windows 系统中的快捷方式,而硬链接则是透过文件系统的 inode 号产生一个新的文件名。无论是复制软链接还是硬链接,都不是复制源文件。
测试用例:复制文件和文件夹
#将dd 文件复制到mytest文件夹下
myubuntu@ubuntu:~$ cp dd mytest/
myubuntu@ubuntu:~$ cd mytest
myubuntu@ubuntu:~/mytest$ ll
total 12
drwxrwxr-x 3 myubuntu myubuntu 4096 Dec 20 16:59 ./
drwxr-xr-x 15 myubuntu myubuntu 4096 Dec 20 16:59 ../
drwxrwxr-x 2 myubuntu myubuntu 4096 Dec 20 16:29 cc/
-rw-rw-r-- 1 myubuntu myubuntu 0 Dec 20 16:59 dd
#拷贝文件夹ee 到目录mytest下
myubuntu@ubuntu:~$ cp -r ee mytest/
11.rm命令:删除文件或目录
rm 是强大的删除命令,它可以永久性地删除文件系统中指定的文件或目录。在使用 rm 命令删除文件或目录时,系统不会产生任何提示信息。此命令的基本格式为:
[root@localhost ~]# rm[选项] 文件或目录
选项:
-
-f:强制删除(force),和 -i 选项相反,使用 -f,系统将不再询问,而是直接删除目标文件或目录。
-
-i:和 -f 正好相反,在删除文件或目录之前,系统会给出提示信息,使用 -i 可以有效防止不小心删除有用的文件或目录。
-
-r:递归删除,主要用于删除目录,可删除指定目录及包含的所有内容,包括所有的子目录和文件。
注意,rm 命令是一个具有破坏性的命令,因为 rm 命令会永久性地删除文件或目录,这就意味着,如果没有对文件或目录进行备份,一旦使用 rm 命令将其删除,将无法恢复,因此,尤其在使用 rm 命令删除目录时,要慎之又慎。
测试用例:
#删除文件
myubuntu@ubuntu:~/mytest$ rm dd
#递归删除目录
myubuntu@ubuntu:~/mytest$ rm -r cc
#询问是否删除文件夹ee
myubuntu@ubuntu:~/mytest$ rm -ir ee
rm: remove directory ‘ee’? y
#强制删除文件夹mytest
myubuntu@ubuntu:~$ rm -rf mytest
加入了强制功能之后,删除就会变得很简单,但是需要注意,数据强制删除之后无法恢复,除非依赖第三方的数据恢复工具,如 extundelete 等。但要注意,数据恢复很难恢复完整的数据,一般能恢复 70%~80% 就很难得了。
虽然 "-rf" 选项是用来删除目录的,但是删除文件也不会报错。所以,为了使用方便,一般不论是删除文件还是删除目录,都会直接使用 "-rf" 选项。
12.mv命令:移动文件或改名
mv 命令(move 的缩写),既可以在不同的目录之间移动文件或目录,也可以对文件和目录进行重命名。该命令的基本格式如下:
myubuntu@ubuntu:~$ mv 【选项】 源文件 目标文件
选项:
-
-f:强制覆盖,如果目标文件已经存在,则不询问,直接强制覆盖;
-
-i:交互移动,如果目标文件已经存在,则询问用户是否覆盖(默认选项);
-
-n:如果目标文件已经存在,则不会覆盖移动,而且不询问用户;
-
-v:显示文件或目录的移动过程;
-
-u:若目标文件已经存在,但两者相比,源文件更新,则会对目标文件进行升级;
需要注意的是,同 rm 命令类似,mv 命令也是一个具有破坏性的命令,如果使用不当,很可能给系统带来灾难性的后果。
测试用例:
#将ee文件夹移动到test 文件夹下
myubuntu@ubuntu:~$ mv ee test
#将ee 改名为etest
myubuntu@ubuntu:~/test$ mv ee etest
#将etest文件夹 移动到上层 详细显示移动过程
myubuntu@ubuntu:~/test$ mv -v etest ..
‘etest’ -> ‘../etest’
13.df用法详解:查看文件系统硬盘使用情况
df 命令,disk free .用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。
与整个文件系统有关的数据,都保存在 Super block(超级块)中,而 df 命令主要读取的数据几乎都针对的是整个文件系统,所以 df 命令主要是从各文件系统的 Super block 中读取数据。
df 命令的基本格式为:
[root@localhost ~]# df [选项] [目录或文件名]
表 1 列出了 df 命令几个常用的选项,以及它们各自的作用。
选项 | 作用 |
---|---|
-a | 显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统; |
-m | 以 MB 为单位显示容量; |
-k | 以 KB 为单位显示容量,默认以 KB 为单位; |
-h | 使用人们习惯的 KB、MB 或 GB 等单位自行显示容量; |
-T | 显示该分区的文件系统名称; |
-i | 不用硬盘容量显示,而是以含有 inode 的数量来显示。 |
14.du命令:统计目录或文件所占磁盘空间大小
du 命令,disk usagetr是统计目录或文件所占磁盘空间大小的命令。
需要注意的是,使用"ls -r"命令是可以看到文件的大小的。但是大家会发现,在使用"ls -r"命令査看目录大小时,目录的大小多数是 4KB,这是因为目录下的子目录名和子文件名是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。
大家可以将其想象成图书馆的书籍目录和实际书籍。如果我们用"ls-l"命令査看,则只能看到这些书籍占用了 1 页纸的书籍目录,但是实际书籍到底有多少是看不到的,哪怕它堆满了几个房间。
但是我们在统计目录时,不是想看父目录下的子目录名和子文件名到底占用了多少空间,而是想看父目录下的子目录和子文件的总磁盘占用量大小,这时就需要使用 du 命令才能统计目录的真正磁盘占用量大小。
du 命令的格式如下:
[root@localhost ~]# du [选项] [目录或文件名]
选项:
-
-a:显示每个子文件的磁盘 占用量。默认只统计子目录的磁盘占用量
-
-h:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等;
-
-s:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量
15.mount命令详解:挂载Linux系统外的文件
所有的硬件设备必须挂载之后才能使用,只不过,有些硬件设备(比如硬盘分区)在每次系统启动时会自动挂载,而有些(比如 U 盘、光盘)则需要手动进行挂载。
通过学习 Linux 文件系统,我们可以对挂载的含义进行引申,挂载指的是将硬件设备的文件系统和 Linux 系统中的文件系统,通过指定目录(作为挂载点)进行关联。而要将文件系统挂载到 Linux 系统上,就需要使用 mount 挂载命令。
mount 命令的常用格式有以下几种:
[root@localhost ~]# mount [-l]
单纯使用 mount 命令,会显示出系统中已挂载的设备信息,使用 -l 选项,会额外显示出卷标名称(读者可自行运行,查看输出结果);
[root@localhost ~]# mount -a
-a 选项的含义是自动检查 /etc/fstab 文件中有无疏漏被挂载的设备文件,如果有,则进行自动挂载操作。这里简单介绍一下 /etc/fstab 文件,此文件是自动挂载文件,系统开机时会主动读取 /etc/fstab 这个文件中的内容,根据该文件的配置,系统会自动挂载指定设备。
[root@localhost ~]# mount [-t 系统类型] [-L 卷标名] [-o 特殊选项] [-n] 设备文件名 挂载点
各选项的含义分别是:
-
-t 系统类型:指定欲挂载的文件系统类型。Linux 常见的支持类型有 EXT2、EXT3、EXT4、iso9660(光盘格式)、vfat、reiserfs 等。如果不指定具体类型,挂载时 Linux 会自动检测。
-
-L 卷标名:除了使用设备文件名(例如 /dev/hdc6)之外,还可以利用文件系统的卷标名称进行挂载。
-
-n:在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单人维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项;
-
-o 特殊选项:可以指定挂载的额外选项,比如读写权限、同步/异步等,如果不指定,则使用默认值(defaults)。具体的特殊选项参见表 1;
选项 | 功能 |
---|---|
rw/ro | 是否对挂载的文件系统拥有读写权限,rw 为默认值,表示拥有读写权限;ro 表示只读权限。 |
async/sync | 此文件系统是否使用同步写入(sync)或异步(async)的内存机制,默认为异步 async。 |
dev/nodev | 是否允许从该文件系统的 block 文件中提取数据,为了保证数据安装,默认是 nodev。 |
auto/noauto | 是否允许此文件系统被以 mount -a 的方式进行自动挂载,默认是 auto。 |
suid/nosuid | 设定文件系统是否拥有 SetUID 和 SetGID 权限,默认是拥有。 |
exec/noexec | 设定在文件系统中是否允许执行可执行文件,默认是允许。 |
user/nouser | 设定此文件系统是否允许让普通用户使用 mount 执行实现挂载,默认是不允许(nouser),仅有 root 可以。 |
defaults | 定义默认值,相当于 rw、suid、dev、exec、auto、nouser、async 这 7 个选项。 |
remount | 重新挂载已挂载的文件系统,一般用于指定修改特殊权限。 |
16.umount命令:卸载文件系统
前面介绍了如何将光盘和 U 盘挂载在系统中,而在使用完成后,需要先将其与挂载点取消关联,然后才能成功卸载。不过,硬盘分区是否需要卸载,取决于你下次是否还需要使用,一般不对硬盘分区执行卸载操作。
umount 命令用于卸载已经挂载的硬件设备,该命令的基本格式如下:
[root@localhost ~]# umount 设备文件名或挂载点
注意,卸载命令后面既可以加设备文件名,也可以加挂载点,不过只能二选一,比如:
[root@localhost ~]# umount /mnt/usb
#卸载U盘
[root@localhost ~]# umount /mnt/cdrom
#卸载光盘
[root@localhost ~]# umount /dev/sr0
#命令加设备文件名同样是可以卸载的
如果加了两个(如下所示),从理论上分析,会对光驱卸载两次,当然,卸载第二次的时候就会报错。
[root@localhost ~]# mount /dev/sr0 /mnt/cdrom/
另外,我们在卸载时有可能会出现以下情况:
[root@localhost ~]# cd /mnt/cdrom/
#进入光盘挂载点
[root@localhost cdrom]# umount /mnt/cdrom/
umount: /mnt/cdrom: device is busy.
#报错,设备正忙
这种报错是因为我们已经进入了挂载点,因此,如果要卸载某硬件设备,在执行 umount 命令之前,用户须退出挂载目录。
卸载硬件设备成功与否,除了执行 umount 命令不报错之外,还可以使用 df 命令或 mount -l
来查看目标设备是否还挂载在系统中。
17.什么是环境变量,Linux环境变量及作用
变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)、邮件存放位置(MAIL)等。
值得一提的是,Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范。
我们可以使用 env 命令来查看到 Linux 系统中所有的环境变量,执行命令如下:
myubuntu@ubuntu:~/test$ env
XDG_SESSION_ID=1
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.24.1 17949 22
SSH_TTY=/dev/pts/12
USER=myubuntu
......
Linux 系统能够正常运行并且为用户提供服务,需要数百个环境变量来协同工作,但是,我们没有必要逐一学习每个变量,这里给大家列举了 10 个非常重要的环境变量,如表 1 所示。
Linux 作为一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境,因此,一个相同的环境变量会因为用户身份的不同而具有不同的值。
echo $PATH
如果命令行的路径不在PATH环境变量路径中,则需要修改PATH环境变量,具体方法如下:
方法一:
export PATH=命令行路径:$PATH #配置完后可以通过echo $PATH查看配置结果。 #生效方法:立即生效 #有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置 #用户局限:仅对当前用户
方法二:
#通过修改.bashrc文件: sudo vim ~/.bashrc #在最后一行添上: export PATH=命令行路径:$PATH #生效方法:(有以下两种) #1、关闭当前终端窗口,重新打开一个新终端窗口就能生效 #2、输入“source ~/.bashrc”命令,立即生效 #有效期限:永久有效 #用户局限:仅对当前用户
方法三:
#通过修改profile文件: sudo vim /etc/profile export PATH=命令行路径:$PATH #生效方法(有以下两种) #1:source /etc/profile #有效性:只在当前终端生效 #2:系统重启 #有效期限:永久有效 #用户局限:对所有用户
方法四:
#通过修改environment文件: sudo vim /etc/environment 在PATH="/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin"中加入 ":命令行路径" #生效方法:系统重启 #有效期限:永久有效 #用户局限:对所有用户
注意:命令行路径可以是绝对路径,也可以是文件夹路径。如果是文件夹路径,则文件夹内所有可执行文件都会添加到环境变量中。