第二部分 Linux文件、目录与磁盘格式
第5章 Linux的文件权限与目录配置
5.1 用户与用户组
1.文件拥有着
2.什么是用户组?
用户组最有用的功能之一,就是使用它的团队协同功能。
每个账号可以有多个用户组来支持。
用户的意义:用户只能使用用户自己的所属的文件
用户组的概念:在同一个用户组里用户可以使用他们能够使用的文件
3.其他人概念
4.在Linux里面,任何一个文件都具有用户(User)、所属群组(Group)、其他人(Other)三种身份的个别权限。
5.Linux用户身份与用户组记录的文件?
在Linux系统总所有的帐号信息都记录在/etc/passwd这个文件内,个人密码则是记录在/etc/shadow这个文件内。另外Linux所有的组名都记录在/etc/group中。
5.2 Linux文件权限概念
5.2.1 Linux文件属性
6.ls命令?
ls就是list意思就是列举的意思。
[dmtsai@study ~]$ su -
密码:
上一次登录:三 8月 5 14:14:07 CST 2020pts/0 上
[root@study ~]# ls -al
总用量 44
dr-xr-x---. 14 root root 4096 8月 5 09:59 .
dr-xr-xr-x. 17 root root 224 8月 4 15:03 ..
-rw-------. 1 root root 2255 8月 4 14:31 anaconda-ks.cfg
-rw-------. 1 root root 587 8月 5 17:02 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
drwx------. 12 root root 244 8月 5 09:56 .cache
drwxr-xr-x. 14 root root 261 8月 5 09:56 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------. 3 root root 25 8月 4 14:32 .dbus
-rw-------. 1 root root 16 8月 5 09:54 .esd_auth
-rw-------. 1 root root 310 8月 5 09:54 .ICEauthority
-rw-r--r--. 1 root root 2286 8月 4 14:32 initial-setup-ks.cfg
drwx------. 3 root root 19 8月 5 09:54 .local
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 0 8月 5 09:58 .Xauthority
drwxr-xr-x. 2 root root 6 8月 5 09:54 公共
drwxr-xr-x. 2 root root 6 8月 5 09:54 模板
drwxr-xr-x. 2 root root 6 8月 5 09:54 视频
drwxr-xr-x. 2 root root 6 8月 5 09:54 图片
drwxr-xr-x. 2 root root 6 8月 5 09:54 文档
drwxr-xr-x. 2 root root 6 8月 5 09:54 下载
drwxr-xr-x. 2 root root 6 8月 5 09:54 音乐
drwxr-xr-x. 2 root root 6 8月 5 09:54 桌面
7.
以上图可以看出:第一组为文件拥有者的权限,该文件的拥有者可以读写但不可以执行;
第二组为加入此用户组之帐号的权限
第三组为非本人且没有加入本用户组的其他帐号的权限
rw的位置是不会改变的,有该权限就会显示字符,没有该权限就会变成减号。
在Linux系统下,你的帐号会加入一个或多个的用户组中。
[root@study ~]# ll /etc/services /root/initial-setup-ks.cfg
-rw-r--r--. 1 root root 670293 6月 7 2013 /etc/services
-rw-r--r--. 1 root root 2286 8月 4 14:32 /root/initial-setup-ks.cfg
以上内容分别为日期(月/日)及时间,如果这个文件被修改的时间距离现在太久,那么时间部分会仅显示年份而已。
以上所示,/etc/services为2013年所修改过的文件,离现在太久远,所以只显示年份
至于/root/initial-setup-ks.cfg是今年所建立的,所以就显示完整的时间了。
8.利用[ls-l--full-time]可以显示完整的时间格式:
[root@study ~]# ls -l --full-time
总用量 8
-rw-------. 1 root root 2255 2020-08-04 14:31:11.584487954 +0800 anaconda-ks.cfg
-rw-r--r--. 1 root root 2286 2020-08-04 14:32:49.943471524 +0800 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 公共
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 模板
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.866041939 +0800 视频
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.866041939 +0800 图片
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 文档
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 下载
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.866041939 +0800 音乐
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 桌面
以上显示时间格式包含:年年月月日日时时分分秒秒
9.使用ls和ls -a可以查询隐藏的文件名?
[root@study ~]# ls
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
[root@study ~]# ls -a
. .bash_profile .dbus .tcshrc 图片
.. .bashrc .esd_auth .Xauthority 文档
anaconda-ks.cfg .cache .ICEauthority 公共 下载
.bash_history .config initial-setup-ks.cfg 模板 音乐
.bash_logout .cshrc .local 视频 桌面
10.如何理解Linux文件权限概念下的7个栏目概念?
第一栏代表这个文件的类型和权限
第二栏代表有多少个文件名链接到此节点(inode)
第三栏代表这个文件(或目录)的拥有者帐号
第四栏代表这个文件的所属用户组
第五栏代表这个文件的容量大小、默认单位为Bytes
第六栏代表这个文件的创建日期或是最近的修改日期
第七栏代表这个文件名
11.ls和dir的区别?
功能上差不多都可以实现文件和功能的列表,但ls在一些重要的文件字体上会标识为绿色让你很容易看到,而dir文件字体只是黑色。
ls不同的颜色代表不同的文件类型,文件类型与颜色的对应关系如下:
目录->深蓝色;
一般文件->浅灰色;
执行文件->绿色;
图形文件->紫色;
链接文件->浅蓝色;
压缩文件->红色;
FIFO文件(命名管道)->棕色;
设备文件->黄色
12.Linux权限的重要性?
(1)系统保护的功能
(2)团队开发软件或数据共享的功能
(3)未将权限设置妥当的危害
在修改你的Linux文件与目录的属性之前,一定要先搞清楚,什么数据是可变的什么样的数据是不可变的。
5.2.2 如何修改文件属性与权限
13.如何修改文件的权限?
chgrp:修改文件所属用户组;
chown:修改文件拥有者;
chmod:修改文件的权限,SUID、SGID、SBIT等的特性。
如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上-R的选项即可。
14.如何修改用户组,chgrp
15.如何修改文件拥有者,chown
16.如何修改权限chomod
权限的设置方法有两种:可以用数字或者字符进行权限的修改。
(1)数字类型修改:
Linux文件的基本权限就有9个,分别是拥有者(owner)、所属群组(group)、其他人(others)三种身份各有自己的读(read)、写(write)、执行(execute)权限。
使用数字来代表各个权限:
r:4
w:2
x:1
每种身份(owner、group、others)各自的三个权限(r、w、x)数字是需要累加的,例如:
owner=rwx=4+2+1=7(拥有者)
group=rwx=4+2+1=7(群组)
others=--=0(其他人)
[dmtsai@study ~]$ mkdir vbird
[dmtsai@study ~]$ chmod 777 .bashrc
创建vbird文件夹并且把权限设置成777(亦即是可读可写可执行)。
17.改变文件拥有者:chown
chown的用法很多,常见的:如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上-R的选项即可。
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
总用量 8
-rw-------. 1 root root 2255 8月 4 14:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 2286 8月 4 14:32 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 8月 10 11:50 test1
drwxr-xr-x. 2 root root 6 8月 10 15:02 user2
drwxr-xr-x. 2 root root 6 8月 5 09:54 公共
drwxr-xr-x. 2 root root 6 8月 5 09:54 模板
drwxr-xr-x. 2 root root 6 8月 5 09:54 视频
drwxr-xr-x. 2 root root 6 8月 5 09:54 图片
drwxr-xr-x. 2 root root 6 8月 5 09:54 文档
drwxr-xr-x. 2 root root 6 8月 5 09:54 下载
drwxr-xr-x. 2 root root 6 8月 5 09:54 音乐
drwxr-xr-x. 2 root root 6 8月 5 09:54 桌面
事实上,chown也可以使用[chown user.group file]。就是拥有者和用户组之间加上小数点[.]也行。
使用cp命令添加源文件 目标文件
将.bashrc这个文件复制成为.bashrc_test文件名,且是要给bin。
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# cp .bashrc .bashrc_test
[root@study ~]# ls -al .bashrc*
-rw-r--r--. 1 root root 176 12月 29 2013 .bashrc
-rw-r--r--. 1 root root 176 8月 12 10:29 .bashrc_test
18.修改权限:chmod
文件权限的修改使用的是chmod这个命令,但是,权限的设置方法有两种:分别是可以使用数字或符号来进行权限的修改。
数字类型修改文件权限:
Linux文件的基本类型就有9个,分别是拥有者(ower)、所属群组(group)、其他人(others)、
三种身份各有自己的的读(read)、写(write)、执行(execute)权限
各权限的数字对照表如下:
r:4
w:2
x:1
owner=rwx=4+2+1=7
group=rwx=4+2+1=7
others---=0+0+0=0
要将.bashrc这个文件所有的权限都设置启用,那么就执行:设置777/754
[dmtsai@study ~]$ ls -al .bashrc
-rw-r--r--. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
[dmtsai@study ~]$ chmod 777 .bashrc
[dmtsai@study ~]$ ls -al .bashrc
-rwxrwxrwx. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
[dmtsai@study ~]$ ls -al .bashrc
-rwxrwxrwx. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
[dmtsai@study ~]$ chmod 754 .bashrc
[dmtsai@study ~]$ ls -al .bashrc
-rwxr-xr--. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
符号类型修改文件类型:
u
g +(加入) r
chmod o —(移除) w 文件或目录
a =(设置) x
假设我们是设置一个文件的权限成为[-rwxr-xr-x]时,基本上就是:
user(u):具有可读、可写、可执行的权限;
group与others(g/o):具有可读与执行的权限。
[dmtsai@study ~]$ chmod u=rwx,go=rx .bashrc(u=rwx,go=rx是连在一起,中间没有空格)
[dmtsai@study ~]$ ls -al .bashrc
-rwxr-xr-x. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
[dmtsai@study ~]$ ls -al .bashrc
-rwxr-xr-x. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
[dmtsai@study ~]$ chmod a+w .bashrc(加入权限)
[dmtsai@study ~]$ ls -al .bashrc
-rwxrwxrwx. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
[dmtsai@study ~]$ chmod a-x .bashrc (去掉权限)
[dmtsai@study ~]$ ls -al .bashrc
-rw-rw-rw-. 1 dmtsai dmtsai 231 8月 3 2017 .bashrc
[dmtsai@study ~]$ chmod 644 .bashrc
+与-的状态下,只要是没有指定到的项目,则该权限不会变动。
5.2.3 目录与文件的权限意义
19.Linux系统内文件的三种身份(拥有者、用户组与其他人),知道每种权限都有三种权限(rwx),也知道能够使用chown、chgrp、chmod修改这些权限与属性。
20.权限对文件的重要性?
文件是实际含有数量的地方,包括一般文本文件、数据库文件、二进制可执行文件(binary program)等。因此,权限对文件来说,它的意义是这样的:
r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
w(write):可以编辑、新增或是修改ga该文件的内容(但不含删除该文件);
x(execute):该文件具有可以被系统执行的权限。
windows下面一个文件是否具有执行的能力是借由扩展名来判断的,例如:exe、bat、com等,但是在Linux下面,我们的文件是否能被执行,则是借由是否具有[x]这个权限来决定的,跟文件名是没有绝对关系的。
当你对一个文件具有w(写入)权限,你可以具有写入、编辑、新增、修改文件内容的权限,但是并不具备删除该文件本身的权限。
20.目录主要是存储什么?
目录主要的内容在记录文件名列表,文件名与目录有强烈的关联。如果有针对目录时,r、w、x的意义?
r(read contents in directory)
表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你可以利用ls这个命令将该目录的内容列表显示出来。
rm可以直接删除目录下的文件,dmtsai目录下的WinSCP-5.17.7-Setup.exe文件。
[dmtsai@study ~]$ rm WinSCP-5.17.7-Setup.exe
就可以直接删除文件,注意rmdir是删除文件目录(也就是文件夹)。
w(modify contents of directory)
这个可写入的权限对目录来说,是很了不起的,因为它表示你具有改动该目录结构列表的权限,也就是下面这些权限:
建立新的文件与目录;
删除已经存在的文件或目录(不论该文件的权限是什么)
将已存在的文件或目录进行更名;
移动该目录内的文件、目录位置;
总之,目录的w权限就与该目录下面的文件名的变动有关。
x(access directory)
目录x代表的是用户能否进入该目录成为工作目录的用途,所谓的工作目录(work directory)就是你目前所在的目录。
要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给.
20.如何使用root的身份建立所需要的文件与目录环境?
[root@study ~]# cd /tmp ==切换工作目录到/tmp
[root@study tmp]# mkdir testing ==建立新目录
[root@study tmp]# chmod 744 testing ==修改权限
[root@study tmp]# touch testing/testing ==建立空文件
[root@study tmp]# ls -ald testing testing/testing ==修改权限
drwxr--r--. 2 root root 21 8月 12 14:24 testing
-rw-r--r--. 1 root root 0 8月 12 14:24 testing/testing
仔细看一下,目录的权限是744,且所属用户组与使用者均是root。
那么再这样的情况下面,一般身份使用者对这个目录/文件的权限是什么?
21.一般用户的读写权限是什么?
[dmtsai@study tmp]$ cd /tmp
[dmtsai@study tmp]$ ls -l testing/
ls: 无法访问testing/testing: 权限不够
总用量 0
-????????? ? ? ? ? ? testing
虽然告知权限不足,但因为具有r的权限可以查询文件名,由于权限不足(没有x)。
[dmtsai@study tmp]$ cd testing /
-bash: cd: testing: 权限不够
因为不具有x,所以当然没有进入的权限。
22.如果该目录属于用户本身,会有什么情况?
先用root的身份来搞定/tmp/testing的属性、权限设置。
[root@study ~]# chown dmtsai /tmp/testing
[root@study ~]# ls -ld /tmp/testing
drwxr--r--. 2 dmtsai root 21 8月 12 14:24 /tmp/testing
dmtsai是具有全部权限的。
再用dmtsai的账号来处理下/tmp/testing/testing这个文件看看。
[root@study ~]# cd /tmp/testing
[root@study testing]# ls -l
总用量 0
-rw-r--r--. 1 root root 0 8月 12 14:24 testing
[root@study testing]# rm testing
rm:是否删除普通空文件 "testing"?
23.用户操作功能与权限?
5.2.4 Linux文件种类与扩展名
24.除了常见的一般文件(-)与目录文件(d)之外,还有哪些常见的文件类型?
常规文件(regular file)
就是常见的读写文件类型,在由ls -al所显示出来的属性方面,第一个字符[-],例如[-rwxrwxrwx]。另外,依次文件的内容,又大概可以分为:
纯文本文件(ASCII):这是Linux系统中最多的一种文件类型,称为纯文本文件是因为内容为我们人类可以直接读取的数据。
二进制文件(binary):我们的系统其实仅仅认识可以执行二进制文件(binary file)
数据文件(data):有些数据在运行的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件(data file)。
25.目录(directory)、链接文件(link)、设备与设备文件?
目录就是目录,第一个属性为[d],例如[drwxrwxrwx]
链接文件就是类似于Windows系统下面的快捷方式,第一个属性为[l](英文L的小写),例如[lrwxrwxrwx]。
设备与周边及存储等相关的一些文件,通常都集中在/dev这个目录下面,通常又分为两种:
区块(block)设备文件:就是一些存储数据,用来提供一些系统随机存取的接口设备。
字符(character)设备文件:亦即是一些串行端口的接口设备,例如:键盘、鼠标等
26.数据接口文件(sockets)
既然被称为数据接口文件,这种类型的文件通常被用在网络上的数据交换了。
27.数据传送文件(FIFO,pipe)
FIFO也是一种特殊的文件类型,它主要的目的就是为了解决多个程序同时读写一个文件所造成的的错误问题,FIFO死先进先出(first-in-first-out)的缩写,即管道,第一个属性为[p]。
socket与FIFO文件比较难理解,因为这两个东西与进程(process)比较有关系,
28.Linux文件的扩展名
一个Linux文件能不能被执行,与它的第一栏的十个属性有关,与文件名根本一点关系也没有。
跟Windows中的概念不一样,能被执行的文件扩展名通常为com、exe、bat等,而在Linux下面,只要你的权限当中具有x的话,例如[-rwxr-xr-x]即代表这个文件具备可以被执行的能力。
*sh:脚本或批处理文件(scripts),因为批处理文件使用shell写成,所以扩展名就变成.sh;
*Z *tar *tar.gz *zip *tgz经过打包的压缩文件,这是因为压缩软件分别为gunzip、tar等,由于不同的的压缩软件,而取其相关的扩展名。
html、php:网页相关文件,分别代表HTML语法与PHP语法的网页文件。.html的文件可以使用网页浏览器来直接开启,至于php的文件,则可以通过客户端的浏览器来服务端浏览,以得到运算后的网页结果。
29.如何了解Linux系统中的文件用途?
Linux系统上的文件名只是让你了解该文件可能的用途而已,真正的执行与否仍然需要权限的规范。
29.Linux文件名的长度限制?
Linux系统中传统的文件系统有ext2、ext3、ext4以及近来被CentOS7当作默认文件系统的xfs而言,针对文件的文件名长度限制为:
单一文件或目录最大容许文件名为255字节,以一个ASCII英文占用一个字节来说,则大约可以达到255个字符长度,若是以每个汉字占用2个字节来说,最大文件名就是大约在128个汉字之间。
30.Linux文件名有哪些限制?
由于Linux命令行模式下的一些常用命令操作关系,一般来说设置Linux文件名时最好避免一些特殊字符:例如;* ? > <;& ! [] | \ ' " 、 (){}
最好避免开头使用-和+来命名。
5.3 Linux目录配置
5.3.1 Linux目录配置的依据——FHS
31.FHS标准的主要目的?
希望让用户可以了解到已安装软件通常放置于哪个目录下,
根据FHS的变动与使用将它分为四种交互作用的形态:
可分享(shareable) 不可分享(unshareable)
可变(static) /opt(第三方辅助软件) /boot(配置与内核文件)
可变动(variable) /var/mail(用户邮箱) /var/run(程序相关)
/var/spool/news /var/lock(程序相关)
目录下的四个类型以及组要区别?
可分享:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录;
不可分享:自己设备上面运行的设备文件或是与程序有关的socket文件等,由于仅与自身机器有关,所以就不适合分享给其他主机;
不变:有些数据是不会经常变动的,跟随着发行版而不变动。例如:函数库、文件说明、系统管理员所管理的主机服务配置文件等。
可变动:经常修改的数据。
- FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已,分别是下面三个目录的定义:
/(root,根目录):与启动系统有关
/usr(unix software resource):与软件安装/执行有关
/var(variable):与系统运行过程有关;
33.FHS目录下为什么要定义三层目录?
每层目录下面应该要放置的目录也都有特定的规定。
在Linux系统内,以帐号角度来看,所谓的root指的是系统管理员的身份,如果以目录的角度来看,所谓的root意即是指的是根目录。
34.根目录(/)的意义与内容
根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生而来的,同时根目录也与启动、还原、系统修复等操作有关。
FHS标准建议:根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较佳,根目录所在的文件系统也较不容易发生问题。
35.第一部分:FHS必须要求存在的目录?
/bin
系统有很多存放执行文件的目录,但/bin比较特殊。因为/bin放置的是在单一维护模式下还能够被使用的命令。在/bin下面的命令可以被root与一般账号所使用,主要有:cat、chmod、chown、date、mv、mkdir、cp、bash等常用的命令。
/boot
这个目录主要在放置启动会使用到的文件,包括Linux内核文件以及启动选项与所需配置文件等。Linux内核常用的文件名为:vmlinuz,如果使用的是gurb2这个启动引导程序,则还会存在/boot/grub2/这个目录。
/dev
在Linux系统上,任何设备与接口设备都是以文件的形式存在于这个目录当中。你只要通过读写这个目录下面的某个文件,就等于读写某个设备,比较重要的文件有/dev/null、/dev/zero、/dev/tty、/dev/loop、/dev/sd等
/etc
系统主要的配置文件都放置在这个目录内,例如人员的账号密码文件、各种服务的启动文件等。一般来说,这个目录下的各文件属性是可以让一般用户查看,但是只有root有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有:/etc/modprobe.d/、/etc/passwd、/etc/fstab、/etc/issue等。另外FHS还规划几个重要的目录要存在/etc/目录下:
/etc/opt(必要):这个目录在放置第三方辅助软件/opt的相关配置文件;
/etc/X11(建议):与X Windows有关的各种配置文件都在这里,尤其是xorg.conf这个Sever的配置文件;
/etc/sgml(建议):与SGML格式有关的各项配置文件;
/etc/xml(建议):与XML格式有关的各项配置文件
/lib
系统的函数库非常多,而/lib放置的则是在启动时会用到函数库,以及在/bin或/sbin下面的命令会调用的函数库而已。什么是函式库?你可以把它想象成外挂,某些命令必须要有这些外挂才能够顺利完成程序的执行之意,另外FHS还要求下面的目录必须要存在:
/lib/modules/:这个目录主要放置可抽换式的内核相关模块(驱动程序)
/media
media是媒体的英文,顾名思义,这个/media下面放置的就是可删除设备,包括软盘、光盘、DVD等设备都暂时挂载于此。常见的文件名有:/media/floppy、/media/cdrom等
/mnt
如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中。在早些的时候,这个目录的用途与/media相同。只有有了/media之后,这个目录就暂时用来挂载。
/opt
这个是给第三方辅助软件放置的目录。什么是第三方辅助软件?举例来说,KDE这个桌面管理系统是一个独立的软件,不过它可以安装到Linux系统中,因此KDE的软件就建议放置到此目录下。另外,你想要自行安装额外的软件(非原本的发行版提供),那么也能够将你的软件安装到这里来。不过,以前Linux系统中,我们还是习惯放置在/usr/local的目录下
/run
早期的FHS规定系统启动后所产生的各项信息应该放置到/var/run目录下,新版的FHS规范到/run下面,由于/run可以使用内存来模拟,因此性能上会好很多
/sbin
Linux有非常多命令是用来设置系统环境的,这个命令只有root才能够用来设置系统,其他用户最多只能用来查询而已。放在/sbin下面的为启动过程中所需要的,里面包括了启动、修复、还原系统所需要的命令。至于某些服务器程序,一般则放置到/usr/sbin当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中了。常见的命令包括:fdisk、fsck、ifconfig、mkfs等
/srv
srv可以视为service的缩写,是一些网络服务启动之后,这些服务所需要使用的数据目录,常见的服务例如WWW、FTP等。举例来说,WWW服务器需要的网页数据就可以放置在/srv/www/里面。不过,系统的服务数据如果尚未要提供给因特网任何人浏览的话,默认还是建议放置到/var/lib下面即可
/tmp
这是让一般用户或是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够存取的,所以你需要定期地清理一下。当然,重要数据不可放置到此目录。因为FHS甚至建议在启动时,应该要将/tmp下的数据都删除。
/usr
/var
第二部分: FHS建议可以存在的目录
/home
这是系统默认的用户家目录(home directory)。在你新增一个一般用户账号时,默认的用户家目录都会规范到这里来,比较重要的是家目录有两种代号:
~:代表目前这个用户的家目录
~dmtsai:则代表dmtsai的家目录
/lib
用来存放与/lib不同的格式的二进制函数库,例如支持64位的/lib64函数库等
/root
系统管理员(root)的家目录,之所以放在这里,是因为如果进入单人维修模式而仅挂载根目录时,该目录就能够拥有root的家目录,所以我们会希望root的家目录与根目录放置在同一个分区中
Linux下面还有许多目录需要了解下:
/lost+found
这个目录是使用标准的ext2、ext3、ext4文件系统格式才会产生一个目录,目的在于当文件系统发生错误时,将一些遗失的片段放置到这个目录下,不过如果使用的是xfs文件系统的话,就不会存在这个目录
/pro
这个目录本身是一个虚拟文件系统(virtual filesystem),它放置的数据都是在内存当中,例如系统内核、进程信息(process)、外接设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间。比较重要的文件例如:/pro/cupinfo、/pro/dma、/proc/interrupts、/proc/ioports、/proc/net/*等
/sys
这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录内核与系统硬件信息相关的内容。包括目前已加载的内核模块与内核检测到的硬件设备信息等,这个目录同样不占用硬盘容量
早期的Linux设计时候,如果发生故障在恢复中仅挂载目录,因此有五个重要的目录被要求一定要与根目录放置在一起,那就是/etc、/bin、/dev、/lib、/sbin等五个重要目录。
36./usr的意义与内容
/usr里面放置的数据属于可分享与不可变动(shareable,static),usr的缩写是UNIX Software Resource。
/usr目录下有以下文件内容
第一部分:FHS必须要存在的目录
/usr/bin
所有一般用户能够使用的命令都放在这里。目前最新的CentOS已经将全部的用户命令放置在这里。而使用链接文件的方式将/bin连接至此。也就是说,/usr/bin与/bin是一模一样的。另外,FHS要求此目录下不应该有子目录
/usr/lib
基本上,与/lib功能相同,所以/lib就是链接到此目录中的
/usr/local
系统管理员在本机安装自己下载的软件(非发行版默认提供者),建议安装到此目录,这样会比较好便于管理。举例来说,你的发行版提供的软件版本很旧,你想要安装较新的软件又不想删除旧的软件,此时你可以将新版软件安装于/usr/local目录下,可与原先的旧版软件又分别。你可以自行到/usr/local去看看,该目录下也是具有bin、etc、include、lib......的子目录
/usr/sbin/
非系统正常运行所需要的系统命令,最常见的就是某些网络服务器软件的服务命令(daemon)。不过基本功能与/sbin也差不多,因此目前/sbin就是链接到此目录中的。
/usr/share/
主要放置只读的数据文件,当然也包括共享文件,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,因为几乎都是文本文件。在此目录下常见的还有这些子目录:
/usr/share/man:在线帮助文件;
/usr/share/doc:软件的说明文档
/usr/share/zoneinfo:与时区有关的时区文件
第二部分:FHS建议可以存在的目录
/usr/games/ 与游戏比较相关的数据放置处
/usr/include/ c/c++等语言的头文件(header)与包含文件(include)放置处,当我们以Tarball方式(*tar.gz的方式安装软件)安装某些程序时,会使用到里面的许多文件
/usr/libexec
某些不被一般用户常用的执行文件或脚本(script)等,都会放置到此目录中。例如大部分的X窗口下面的操作命令,很多都是放在此目录下
/usr/lib
与lib
/usr/src/
一般源代码建议放置到这里,src有source的意思。至于内核源代码则建议放置到/usr/Linux/目录下
37./var的意义与内容
/var针对的主要是经常性的变动文件,包括缓存(cache)、日志文件(log file)以及某些软件运行时候所产生的文件,包括程序文件(lock file、run file),或例如MYSQL数据库文件等。
/var下面常见的子目录
第一部分:FHS要求必须要存在的目录
/var/cache/
应用程序本身运行过程中会产生一些缓存
/var/lib
程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。举例来说,MYSQL的数据库放置到/var/lib/mysql而rpm的数据库则放到/var/lib/rpm中
/var/lock/
某些设备或是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,因此就需要在这个设备上加个锁(lock),以确保该设备只给单一的软件使用。目前此目录已经挪到/run/lock中
/var/log
重要到不行。这是日志文件放置的目录,里面比较重要的文件有/var/logmessage、/var/log/wtmp(记录登记信息)等
/var/mail
放置个人电子邮箱的目录,不过这个目录被放置到/var/spool/mail目录中,通常这两个目录是互为链接文件
/var/run/
某些程序或是服务启动后,会将它们的PID放置在这个目录下,与/run相同,这个目录链接到/run目录
/var/spool/
这个目录通常放置一些队列数据,所谓的队列就是排队等待其他程序使用的数据,这些数据被使用后通常都会被删除。
38.针对FHS,各家发行版的异同,与CentOS 7的变化
FHS仅是定义最上层(/)及次层(/usr与/var)的目录内容应该要放置的文件或目录数据,因此在其他子目录层级内,就可以随开发者自行来配置。
5.3.2 目录树(tree directory)
39.什么叫做目录树?以及目录树的特点?
在Linux下面所有的文件与目录都是由根目录开始的,那是所有目录与文件的源头,然后再一个一个的分支下来,有点像是树枝状。
(1)目录树的起始点为根目录(/,root)
(2)每一个目录不止能使用本地分区的文件系统,也可以使用网络上的文件系统。
(3)每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。
5.3.3 绝对路劲与相对路径
40.怎么区分路径?以及定义路径?
根据文件名写法的不同,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。这两种文件名写法的依据如下所示:
绝对路径:由根目录(/)开始写起的文件名或目录名称,例如/home/dmtsai/.bashrc
相对路径:相对目前路径的文件名写法,例如./home/dmtsai
目录树架构示意图
因为你在/home下面,所以要回到上一层(../)之后,才能继续往/var来移动。特别要注意这两个特殊的目录:
.:代表当前的目录,也可以使用./来表示;
..:代表上一层目录,也可以../来代表
5.3.4 CentOS 的观察
通过uanme检查Linux内核与操作系统的架构版本。
[root@study cron]# uname #查看内核版本
Linux
[root@study cron]# uname -r
3.10.0-693.el7.x86_64
[root@study cron]# uname -m 查看操作系统的架构版本
x86_64
假设你的CentOS 7确实有网络可以使用的情况下(需要root的身份)
[root@study ~]# yum install redhat-lsb
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
- base: mirrors.163.com
- extras: mirrors.163.com
- updates: mirrors.163.com
正在解决依赖关系
......
================================================================================
安装 1 软件包 (+77 依赖软件包)
总下载量:26 M
安装大小:78 M
Is this ok [y/d/N]:
....已安装:
redhat-lsb.x86_64 0:4.1-27.el7.centos.1
作为依赖被安装:
foomatic-filters.x86_64 0:4.0.9-9.el7 gdbm-devel.x86_64 0:1.10-8.el7 libdb-devel.x86_64 0:5.3.21-25.el7
libmng.x86_64 0:1.0.10-14.el7 mailcap.noarch 0:2.1.41-2.el7 mesa-libGLU.x86_64 0:9.0.0-4.el7
perl-B-Lint.noarch 0:1.17-3.el7 perl-Business-ISBN.noarch 0:2.06-2.el7 perl-Business-ISBN-Data.noarch 0:20120719.001-2.el7
perl-CGI.noarch 0:3.63-4.el7 perl-CPAN.noarch 0:1.9800-295.el7 perl-Class-ISA.noarch 0:0.36-1010.el7
perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 perl-Digest.noarch 0:1.17-245.el7
perl-Digest-MD5.x86_64 0:2.52-3.el7 perl-Digest-SHA.x86_64 1:5.85-4.el7 perl-Encode-Locale.noarch 0:1.03-5.el7
perl-Env.noarch 0:1.04-2.el7 perl-ExtUtils-Install.noarch 0:1.58-295.el7 perl-ExtUtils-MakeMaker.noarch 0:6.68-3.el7
perl-ExtUtils-Manifest.noarch 0:1.61-244.el7 perl-ExtUtils-ParseXS.noarch 1:3.18-3.el7 perl-FCGI.x86_64 1:0.74-8.el7
perl-File-CheckTree.noarch 0:4.42-3.el7 perl-File-Listing.noarch 0:6.04-7.el7 perl-HTML-Parser.x86_64 0:3.71-4.el7
perl-HTML-Tagset.noarch 0:3.20-15.el7 perl-HTTP-Cookies.noarch 0:6.01-5.el7 perl-HTTP-Daemon.noarch 0:6.01-8.el7
perl-HTTP-Date.noarch 0:6.02-8.el7 perl-HTTP-Message.noarch 0:6.06-6.el7 perl-HTTP-Negotiate.noarch 0:6.01-5.el7
perl-IO-Compress.noarch 0:2.061-2.el7 perl-IO-HTML.noarch 0:1.00-2.el7 perl-IO-Socket-IP.noarch 0:0.21-5.el7
perl-IO-Socket-SSL.noarch 0:1.94-7.el7 perl-LWP-MediaTypes.noarch 0:6.02-2.el7 perl-Locale-Codes.noarch 0:3.26-2.el7
perl-Locale-Maketext.noarch 0:1.23-3.el7 perl-Module-Pluggable.noarch 1:4.8-3.el7 perl-Mozilla-CA.noarch 0:20130114-5.el7
perl-Net-HTTP.noarch 0:6.06-2.el7 perl-Net-LibIDN.x86_64 0:0.12-15.el7 perl-Net-SSLeay.x86_64 0:1.55-6.el7
perl-Pod-Checker.noarch 0:1.60-2.el7 perl-Pod-LaTeX.noarch 0:0.61-2.el7 perl-Pod-Parser.noarch 0:1.61-2.el7
perl-Pod-Plainer.noarch 0:1.03-4.el7 perl-Sys-Syslog.x86_64 0:0.33-3.el7 perl-Test-Simple.noarch 0:0.98-243.el7
perl-Text-Soundex.x86_64 0:3.04-4.el7 perl-Text-Unidecode.noarch 0:0.04-20.el7 perl-TimeDate.noarch 1:2.30-2.el7
perl-URI.noarch 0:1.60-9.el7 perl-WWW-RobotRules.noarch 0:6.02-5.el7 perl-XML-LibXML.x86_64 1:2.0018-5.el7
perl-XML-NamespaceSupport.noarch 0:1.11-10.el7 perl-XML-SAX.noarch 0:0.99-9.el7 perl-XML-SAX-Base.noarch 0:1.08-7.el7
perl-autodie.noarch 0:2.16-2.el7 perl-devel.x86_64 4:5.16.3-295.el7 perl-libwww-perl.noarch 0:6.05-2.el7
perl-local-lib.noarch 0:1.008010-4.el7 qt.x86_64 1:4.8.7-8.el7 qt-settings.noarch 0:19-23.10.el7.centos
qt-x11.x86_64 1:4.8.7-8.el7 qt3.x86_64 0:3.3.8b-51.el7 redhat-lsb-core.x86_64 0:4.1-27.el7.centos.1
redhat-lsb-cxx.x86_64 0:4.1-27.el7.centos.1 redhat-lsb-desktop.x86_64 0:4.1-27.el7.centos.1 redhat-lsb-languages.x86_64 0:4.1-27.el7.centos.1
redhat-lsb-printing.x86_64 0:4.1-27.el7.centos.1 redhat-lsb-submod-multimedia.x86_64 0:4.1-27.el7.centos.1 redhat-lsb-submod-security.x86_64 0:4.1-27.el7.centos.1
spax.x86_64 0:1.5.2-13.el7 systemtap-sdt-devel.x86_64 0:4.0-11.el7
[root@study ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.8.2003 (Core)
Release: 7.8.2003
Codename: Core
第6章 Linux文件与目录管理
6.1 目录与路径
6.1.1 相对路径与绝对路径
41.什么是路径?
路径就是相对路径与绝对路径。
绝对路径:路径的写法“一定由根目录/写起”
路径:路径的写法“不是由/写起”
42.相对路径的用途是什么?绝对路径的用途是什么?
相对于文件名的正确性来说,绝对路径的正确度要比较好。
6.1.2 目录的相关操作
43.在所有的目录下面都会存在的两个目录,分别是“.”“..”分别代表的是此层与上层目录的意思。
44.常见的几个处理目录的命令是什么?
cd:切换目录
pwd:显示当前目录
mkdir:建立一个新目录
rmdir:删除一个空目录
45.cd(change directory,切换目录)
[dmtsai@study mail]$ su - 先切换下身份成为root
密码:
上一次登录:五 8月 14 14:54:56 CST 2020pts/0 上
[root@study ~]# cd [相对路径或绝对路径]
最重要的就是目录的绝对路径与相对路径,还有一些特殊的符号
[root@study ~]# cd ~dmtsai
代表进入了dmtsai这个家目录
[root@study dmtsai]# cd ~
代表进入root这个家目录
[root@study ~]# cd
也可以代表进入家目录的意思
[root@study ~]# cd ..
代表回到上一层记录的意思,就是指的是root的上层目录。
[root@study /]# cd -
/root
表示回到刚刚那层目录,也就是root。
[root@study ~]# cd /var/spool/mail
这个是绝对路径的写法。直接指定要去的完整路径名称
[root@study mail]# cd ../postfix
这个是相对路径的写法,我们由/var/spool/mail到/var/spool/postfix就这样写的
利用相对路径的写法必须要确认你目前的路径才能正确地去到想要去的目录。
我们的Linux的默认命令行模式(bash shell)具有文件补齐功能,你要常常利用[Tab]按键来自动补全目录路径。
46.pwd(显示目前所在的目录)
[root@study ~]# pwd
/root #显示出当前目录的地址
[root@study ~]# cd /var/mail #var/mail是一个链接文件
[root@study mail]# pwd -P #加上-P不会显示链接文件的路径,而是显示正确的完整路径。
/var/spool/mail #把链接到/var/spool/mail里面
[root@study mail]# ls -ld /var/mail
lrwxrwxrwx. 1 root root 10 8月 4 15:03 /var/mail -> spool/mail
因为/var/mail是链接文件,链接到/var/spool/mail
47.mkdir(建立新目录)
[dmtsai@study ~]$ cd /tmp
[dmtsai@study tmp]$ mkdir test #建立一个名为
[dmtsai@study tmp]$ mkdir test1/test2/test3/test4
mkdir: 无法创建目录"test1/test2/test3/test4": 文件已存在
[dmtsai@study tmp]$ mkdir -p test1/test2/test3/test4
[dmtsai@study tmp]$ mkdir -m 711 test2
mkdir: 无法创建目录"test2": 文件已存在
[dmtsai@study tmp]$ ls -ld test*
drwxrwxr-x. 2 dmtsai dmtsai 6 8月 14 15:47 test
drwxr-xr-x. 3 root root 19 8月 14 15:36 test1
drwx--x--x. 2 root root 6 8月 14 15:37 test2
drwxr--r--. 2 dmtsai root 21 8月 12 14:24 testing
仔细看上面的权限,如果没有加上-m来强制设置属性,系统会使用默认属性。
以上的默认属性需要使用umask才能了解到。
在默认情况下,你所需要的目录得一层层的建立才行。
如果该目录本来就已经存在时,系统也不会显示错误信息。
48.rmdir(删除“空”的目录)
[root@study ~]# cd /tmp
[root@study tmp]# ls -ld test*
drwxrwxr-x. 2 dmtsai dmtsai 6 8月 14 15:47 test
drwxr-xr-x. 3 root root 19 8月 14 15:36 test1
drwx--x--x. 2 root root 6 8月 14 15:37 test2
drwxr--r--. 2 dmtsai root 21 8月 12 14:24 testing
[root@study tmp]# rmdir test
[root@study tmp]# rmdir test1
rmdir: 删除 "test1" 失败: 目录非空
[root@study tmp]# rmdir -p test1/test2/test3/test4
[root@study tmp]# ls -ld test*
drwx--x--x. 2 root root 6 8月 14 15:37 test2
drwxr--r--. 2 dmtsai root 21 8月 12 14:24 testing
注意:目录需要一层一层的删除才行,而且被删除的目录里面必定不能存在其他的目录或文件,这也是所谓的空目录(empty directory)的意思。如果想要把所有目录下的文件都删除,就需要使用到[rm -r test]。还是使用rmdir比较安全,你也可以尝试以-p选项来删除上层空的目录。
6.1.3 关于执行文件路径的变量:$PATH
查看文件的属性命令ls完整文件名为:/bin/ls(这是绝对路径),为什么可以得到这个结果,是因为环境变量PATH的帮助所致的。
[root@study ~]# echo $PATH #先以root的身份来查看路径
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@study ~]# exit
登出
[dmtsai@study ~]$ echo $PATH #以dmtsai的身份来查看路径
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dmtsai/.local/bin:/home/dmtsai/bin
PATH(一定要大写)变量的内容由一堆目录所组成的,目录中间用(:)来隔开,目录之间也有顺序之分。
因为/root这个目录并不在PATH指定的目录中,所以,即使你在/root目录下,也不能够查找到ls这个命令。
另外,除了$PATH之外,如果想要更明确地定义出变量的名称,可以使用大括号${PATH}来处理变量的调用。
为了安全起见,不建议“.”加入PATH的查找目录中,这一点同Windows的习惯不同。
不同身份用户默认的PATH不同,默认能够随意执行的命令也不同(如root与dmtsai);
PATH是可以修改的;
使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查找PATH来的正确;
命令应该要放置到正确的目录下,执行才会比较方便;
本目录(.)最好不要放到PATH当中。
6.2 文件与目录管理
6.2.1 文件与目录的查看:ls
[root@study ~]# ls -a
. .bash_profile .cshrc .local 视频 桌面
.. .bashrc .dbus .tcshrc 图片
anaconda-ks.cfg .bashrc_test .esd_auth .Xauthority 文档
.bash_history .cache .ICEauthority 公共 下载
.bash_logout .config initial-setup-ks.cfg 模板 音乐
[root@study ~]#
全部的文件,连同隐藏文件(开头 .的文件)一起列出来(常用);
[root@study ~]# ls -A
anaconda-ks.cfg .bashrc .cshrc initial-setup-ks.cfg 公共 文档
.bash_history .bashrc_test .dbus .local 模板 下载
.bash_logout .cache .esd_auth .tcshrc 视频 音乐
.bash_profile .config .ICEauthority .Xauthority 图片 桌面
全部的文件,连同隐藏文件,但不包括.与..这两个目录;
[root@study ~]# ls -d
.
-d:仅列处目录本身,而不是列出目录内的文件数据(常用)
[root@study ~]# ls -f
. .tcshrc .bash_history 音乐 .Xauthority
.. anaconda-ks.cfg 桌面 图片 .bashrc_test
.bash_logout .cache 下载 视频
.bash_profile .dbus 模板 .ICEauthority
.bashrc initial-setup-ks.cfg 公共 .local
.cshrc .config 文档 .esd_auth
直接列出结果,而不进行排序(ls默认会以文件名排序)
[root@study ~]# ls -F
anaconda-ks.cfg 公共/ 视频/ 文档/ 音乐/
initial-setup-ks.cfg 模板/ 图片/ 下载/ 桌面/
根据文件、目录等信息,给予附加数据结构。
[root@study ~]# ls -h
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
将文件容量以人类较易读的方式(例如GB、KB等)列出来
[root@study ~]# ls -i
25165890 anaconda-ks.cfg 8460265 模板 25782090 文档 25782085 桌面
25165894 initial-setup-ks.cfg 17836521 视频 769649 下载
17836520 公共 8460288 图片 769650 音乐
列出inode号码,包含文件的属性与权限等数据(常用);
[root@study ~]# ls -l
总用量 8
-rw-------. 1 root root 2255 8月 4 14:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 2286 8月 4 14:32 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 8月 5 09:54 公共
drwxr-xr-x. 2 root root 6 8月 5 09:54 模板
drwxr-xr-x. 2 root root 6 8月 5 09:54 视频
drwxr-xr-x. 2 root root 6 8月 5 09:54 图片
drwxr-xr-x. 2 root root 6 8月 5 09:54 文档
drwxr-xr-x. 2 root root 6 8月 5 09:54 下载
drwxr-xr-x. 2 root root 6 8月 5 09:54 音乐
drwxr-xr-x. 2 root root 6 8月 5 09:54 桌面
详细信息显示,包含文件的属性与权限等数据(常用)
[root@study ~]# ls -n
总用量 8
-rw-------. 1 0 0 2255 8月 4 14:31 anaconda-ks.cfg
-rw-r--r--. 1 0 0 2286 8月 4 14:32 initial-setup-ks.cfg
drwxr-xr-x. 2 0 0 6 8月 5 09:54 公共
drwxr-xr-x. 2 0 0 6 8月 5 09:54 模板
drwxr-xr-x. 2 0 0 6 8月 5 09:54 视频
drwxr-xr-x. 2 0 0 6 8月 5 09:54 图片
drwxr-xr-x. 2 0 0 6 8月 5 09:54 文档
drwxr-xr-x. 2 0 0 6 8月 5 09:54 下载
drwxr-xr-x. 2 0 0 6 8月 5 09:54 音乐
drwxr-xr-x. 2 0 0 6 8月 5 09:54 桌面
列出UID与GID而非使用者与用户组的名称(UID与GID会在帐号管理中提到)
[root@study ~]# ls -r
桌面 下载 图片 模板 initial-setup-ks.cfg
音乐 文档 视频 公共 anaconda-ks.cfg
将排序结果反向输出,例如,原本文件名由小到大,反向则为由大到小
[root@study ~]# ls -R
.:
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
./公共:
./模板:
./视频:
./图片:
./文档:
./下载:
./音乐:
./桌面:
连同子目录内容一起列出来,等于该目录下所有文件都会显示出来
[root@study ~]# ls -S
initial-setup-ks.cfg 公共 视频 文档 音乐
anaconda-ks.cfg 模板 图片 下载 桌面
[root@study ~]#
以文件容量大小排序,而不是用文件名排序
[root@study ~]# ls -t
视频 音乐 模板 下载 initial-setup-ks.cfg
图片 公共 文档 桌面 anaconda-ks.cfg
依时间排序,而不是用文件名
[root@study ~]# ls --color=never
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
--color=never:不要依据文件特性给予颜色显示;
[root@study ~]# ls --color=always
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
--color=always:显示颜色
[root@study ~]# ls --color=auto
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
--color=auto:让系统自行依据设置来判断是否给予颜色;
[root@study ~]# ls --full-time
总用量 8
-rw-------. 1 root root 2255 2020-08-04 14:31:11.584487954 +0800 anaconda-ks.cfg
-rw-r--r--. 1 root root 2286 2020-08-04 14:32:49.943471524 +0800 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 公共
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 模板
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.866041939 +0800 视频
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.866041939 +0800 图片
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 文档
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 下载
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.866041939 +0800 音乐
drwxr-xr-x. 2 root root 6 2020-08-05 09:54:03.865041932 +0800 桌面
--full-time=:以完整时间模式(包含年、月、日、时、分)输出
[root@study ~]# ls --time={atime,ctime}
initial-setup-ks.cfg 图片 音乐 模板 桌面
视频 文档 公共 下载 anaconda-ks.cfg
--time={atime,ctime}:输出access时间或改变权限属性时间(ctime),而非容易修改时间(modification time)
在Linux中,默认显示的只有与:非隐藏文件的文件名、以文件名进行排序及文件名代表的颜色显示如此而已。
[root@study ~]# ls -al ~
总用量 48
dr-xr-x---. 14 root root 4096 8月 12 11:48 .
dr-xr-xr-x. 17 root root 224 8月 4 15:03 ..
-rw-------. 1 root root 2255 8月 4 14:31 anaconda-ks.cfg
-rw-------. 1 root root 2740 8月 14 18:58 .bash_history
-rw-r--r--. 1 root root 18 12月 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 12月 29 2013 .bash_profile
-rwxrwxrwx. 1 777 root 176 12月 29 2013 .bashrc
-rw-r--r--. 1 root root 176 8月 12 10:29 .bashrc_test
drwx------. 12 root root 244 8月 5 09:56 .cache
drwxr-xr-x. 14 root root 261 8月 5 09:56 .config
-rw-r--r--. 1 root root 100 12月 29 2013 .cshrc
drwx------. 3 root root 25 8月 4 14:32 .dbus
-rw-------. 1 root root 16 8月 5 09:54 .esd_auth
-rw-------. 1 root root 310 8月 5 09:54 .ICEauthority
-rw-r--r--. 1 root root 2286 8月 4 14:32 initial-setup-ks.cfg
drwx------. 3 root root 19 8月 5 09:54 .local
-rw-r--r--. 1 root root 129 12月 29 2013 .tcshrc
-rw-------. 1 root root 0 8月 5 09:58 .Xauthority
drwxr-xr-x. 2 root root 6 8月 5 09:54 公共
drwxr-xr-x. 2 root root 6 8月 5 09:54 模板
drwxr-xr-x. 2 root root 6 8月 5 09:54 视频
drwxr-xr-x. 2 root root 6 8月 5 09:54 图片
drwxr-xr-x. 2 root root 6 8月 5 09:54 文档
drwxr-xr-x. 2 root root 6 8月 5 09:54 下载
drwxr-xr-x. 2 root root 6 8月 5 09:54 音乐
drwxr-xr-x. 2 root root 6 8月 5 09:54 桌面
可以看到以开头几个文件,以及目录文件(.)、(..). .config等
不过,目录文件文件名都是以深蓝色显示,看点不容易看清楚
6.2.2 复制、删除与移动:cp、rm、mv
49.cp(复制文件或目录)
除了复制功能之外还可以作为链接文件(就是快捷方式)
用root身份,将家目录下的.bashrc复制到/tmp下,并更名为bashrc。
[dmtsai@study ~]$ cp ~/.bashrc /tmp/bashrc
[dmtsai@study ~]$ cp -i ~/.bashrc /tmp/bashrc
cp:是否覆盖"/tmp/bashrc"? [dmtsai@study ~]$ cp ~/.bashrc /tmp/bashrc
[dmtsai@study ~]$ cp -i ~/.bashrc /tmp/bashrc
cp:是否覆盖"/tmp/bashrc"?
重复两次操作,,由于/tmp下面已经存在bashrc了,加上-i选项后。
则在覆盖前会询问使用者是否确定,可以按下n或y来二次确认。
切换目录到/tmp,并将/var/log/wtmp复制到/tmp且观察属性:
[dmtsai@study tmp]$ cd ~
[dmtsai@study ~]$ cd /tmp
[dmtsai@study tmp]$ cp /var/log/wtmp . 复制到到目前的目录,不要忘了最后的 .。
[dmtsai@study tmp]$ ls -l /var/log/wtmp wtmp
-rw-rw-r--. 1 root utmp 46080 8月 15 09:52 /var/log/wtmp
-rw-rw-r--. 1 dmtsai dmtsai 46080 8月 15 09:53 wtmp
[dmtsai@study tmp]$ cp -a /var/log/wtmp wtmp_2
[dmtsai@study tmp]$ ls -l /var/log/wtmp wtmp_2
-rw-rw-r--. 1 root utmp 46080 8月 15 09:52 /var/log/wtmp
-rw-rw-r--. 1 dmtsai dmtsai 46080 8月 15 09:52 wtmp_2
在默认的情况下,cp的源文件与目标文件权限是不同的,目标文件的拥有者通常会是命令操作者本身。
[dmtsai@study tmp]$ cp /etc/ /tmp
cp: 略过目录"/etc/"
[root@study ~]# ls -l .bashrc
-rwxrwxrwx. 1 777 root 176 12月 29 2013 .bashrc
[root@study ~]# cp -s .bashrc bashrc_slink
[root@study ~]# cp -l .bashrc bashrc_hlink
[root@study ~]# ls -l bashrc*
-rwxrwxrwx. 2 777 root 176 12月 29 2013 bashrc_hlink
lrwxrwxrwx. 1 root root 7 8月 15 11:04 bashrc_slink -> .bashrc
-l就是所谓的硬链接(hard link),至于-s则是符号链接(symbolic link),至于-s则是符号符号链接(symbolic link),简单来说,bashrc_slink是一个快捷方式,这个快捷方式会链接到bashrc。
[root@study ~]# cp -a /var/log/wtmp /tmp/dmtsai_wtmp
[root@study ~]# ls -l /var/log/wtmp /tmp/dmtsai_wtmp
-rw-rw-r--. 1 root utmp 46464 8月 15 11:22 /tmp/dmtsai_wtmp
-rw-rw-r--. 1 root utmp 46464 8月 15 11:22 /var/log/wtmp
因为cp有种种的文件属性与权限的特性,所以,在复制时候,应该需要清楚地了解以下几点:
是否需要完整的保留源文件的信息?
源文件是否为符号链接文件(symbolic link file)?
源文件是否为特殊的文件,例如FIFO、socket等
源文件是否为目录?
50.rm(删除文件或目录)
将刚刚在cp的范例中建立的bashrc删除掉
[root@study ~]# cd /tmp
[root@study tmp]# rm -i bashrc
rm:是否删除普通文件 "bashrc"?
如果加上-i的选项就会主动询问,避免你删除到错误的文件名。
通过通配符*的帮忙,将/tmp下面开头为bashrc的文件名通通删除。
[root@study tmp]# rm -i bashrc*
rm:是否删除普通文件 "bashrc"?
注意那个星号,代表的是0到无穷多个任意字符
[dmtsai@study ~]$ rmdir /tmp/etc
rmdir: 删除 "/tmp/etc" 失败: 目录非空
[dmtsai@study ~]$ rm -r /tmp/etc
rm:是否删除有写保护的普通文件 "/tmp/etc/pki/ca-trust/extracted/java/cacerts"?
rm: 无法删除"/tmp/etc/pki/ca-trust/extracted/java": 目录非空
rm:是否删除有写保护的普通文件 "/tmp/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt"?
rm: 无法删除"/tmp/etc/pki/ca-trust/extracted/openssl": 目录非空
rm:是否删除有写保护的普通文件 "/tmp/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem"?
rm:是否删除有写保护的普通文件 "/tmp/etc/pki/ca-trust/extracted/pem/email
......
因为身份是root,默认已经加入了-i的选项,所以你要一直按y才能删除
如果不想要继续按y,可以按下[Ctrl]-c来终止rm的工作
这是一种保护的操作,如果确定要删除掉此目录而不要询问,可以这样操作。
[dmtsai@study ~]$ \rm -r /tmp/etc
rm:是否删除有写保护的普通文件 "/tmp/etc/pki/ca-trust/extracted/java/cacerts"?
rm: 无法删除"/tmp/etc/pki/ca-trust/extracted/java": 目录非空
rm:是否删除有写保护的普通文件 "/tmp/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt"?
.....
咋命令前加上反斜杠,可以忽略掉alias的指定选项,至于alias我们在bash后谈。
不可以删除/etc,删除后系统可以会挂了。
[dmtsai@study tmp]$ touch ./-aaa-
[dmtsai@study tmp]$ ls -l
总用量 208
drwxrwxr-x. 2 dmtsai dmtsai 6 8月 14 15:39 777
-rw-rw-r--. 1 dmtsai dmtsai 0 8月 15 11:44 -aaa-
-rwxrwxr-x. 1 dmtsai dmtsai 231 8月 15 09:05 bashrc
-rw-rw-r--. 1 root utmp 46464 8月 15 11:22 dmtsai_wtmp
drwxr-xr-x. 133 dmtsai dmtsai 8192 8月 15 11:37 etc
drwx------. 3 root root 17 8月 11 00:19 systemd-private-54dd65de4dc245d090a48b5dd7c3b21d-chronyd.service-PWKhT6
drwx------. 3 root root 17 8月 11 00:19 systemd-private-54dd65de4dc245d090a48b5dd7c3b21d-colord.service-BTePp6
drwx------. 3 root root 17 8月 11 00:19 systemd-private-54dd65de4dc245d090a48b5dd7c3b21d-cups.service-TD5mZQ
drwx------. 3 root root 17 8月 11 00:19 systemd-private-54dd65de4dc245d090a48b5dd7c3b21d-rtkit-daemon.service-JHUIKQ
drwx------. 3 root root 17 8月 7 15:52 systemd-private-6471ffaa5a254c8ba27fcf778e206a0e-chronyd.service-xl1rJL
drwx------. 3 root root 17 8月 7 15:53 systemd-private-6471ffaa5a254c8ba27fcf778e206a0e-colord.service-tNmyzB
drwx------. 3 root root 17 8月 7 15:52 systemd-private-6471ffaa5a254c8ba27fcf778e206a0e-cups.service-1kTZ26
drwx------. 3 root root 17 8月 7 15:52 systemd-private-6471ffaa5a254c8ba27fcf778e206a0e-rtkit-daemon.service-FEAg2F
drwx------. 3 root root 17 8月 10 21:11 systemd-private-9a0784f57ac545fcbc0117d4d99bfd1c-chronyd.service-oMg2PV
drwx------. 3 root root 17 8月 10 21:11 systemd-private-9a0784f57ac545fcbc0117d4d99bfd1c-colord.service-yqJDJh
drwx------. 3 root root 17 8月 10 21:11 systemd-private-9a0784f57ac545fcbc0117d4d99bfd1c-cups.service-U6xg44
drwx------. 3 root root 17 8月 10 21:11 systemd-private-9a0784f57ac545fcbc0117d4d99bfd1c-rtkit-daemon.service-kTbtHp
drwx--x--x. 2 root root 6 8月 14 15:37 test2
drwxr--r--. 2 dmtsai root 21 8月 12 14:24 testing
drwx------. 2 root root 6 8月 5 09:55 tracker-extract-files.0
drwx------. 2 dmtsai dmtsai 6 8月 7 13:35 tracker-extract-files.1000
-rw-rw-r--. 1 dmtsai dmtsai 46080 8月 15 09:53 wtmp
-rw-rw-r--. 1 dmtsai dmtsai 46080 8月 15 09:52 wtmp_2
-rw-------. 1 root root 24354 8月 14 13:47 yum_save_tx.2020-08-14.13-47.6hnPSq.yumtx
-rw-------. 1 root root 24354 8月 14 13:49 yum_save_tx.2020-08-14.13-49.RHB17C.yumtx
在Linux系统中为了怕系统会被误删一般都会加入-i这个选项,如果连目录下所有的文件都删除那么可以加入rm -r这个命令。
不过在使用rm -r这个命令之前,请千万注意了,因为该目录或文件肯定会被root删除。
51.mv(移动文件与目录,或重命名)
复制一文件,建立一目录,将文件移动到目录中
[dmtsai@study ~]$ cd /tmp
[dmtsai@study tmp]$ cp ~/.bashrc bashrc
[dmtsai@study tmp]$ mkdir mvtest
[dmtsai@study tmp]$ mv bashrc mvtest
将某个文件移动到某个目录去,就是这样做。
将上面的目录名称更名为mvtest2
[dmtsai@study tmp]$ mv mvtest mvtest2
这样就重命名,并非针对单一文件名修改,与mv不同,请man rename
再建立两个文件,再全部移动到/tmp/mvtest2
[dmtsai@study tmp]$ cp ~/.bashrc bashrc1
[dmtsai@study tmp]$ cp ~/.bashrc bashrc2
[dmtsai@study tmp]$ mv bashrc1 bashrc2 mvtest2
如果有多个源文件或目录,则最后一个目标文件一定是[目录]
将所有的文件移动到该目录的意思
6.2.3 获取路径的文件名与目录名称
6.3 文件内容查看
52.cat由第一行开始显示文件内容
tac从最后一行开始显示,可以看出tac是cat的倒着写
nl显示的时候,同时输出行号
more一页一页地显示文件内容
less与more类似,但是比more更好的是,它可以玩前翻页
head只看前面几行
tail只看后面几行
od以二进制的方式读取文件内容
6.3.1 直接查看文件内容
查看/etc/issue这个文件的内容
[dmtsai@study ~]$ cat /etc/issue
\S
Kernel \r on an \m
打印符号cat -n,如果不想要看到空白处可以使用 cat -b
[dmtsai@study ~]$ cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
[dmtsai@study ~]$ cat -n /etc/issue
1 \S
2 Kernel \r on an \m
3
[dmtsai@study ~]$ cat -b /etc/issue
1 \S
2 Kernel \r on an \m
将/etc/man_db.conf的内容完整的显示出来(包含特殊字符)
[dmtsai@study ~]$ cat -A /etc/man_db.conf
$
$
This file is used by the man-db package to configure the man and cat paths.$
It is also used to provide a manpath for those without one by examining$
their PATH environment variable. For details see the manpath(5) man page.$
$
Lines beginning with `#' are comments and are ignored. Any combination of$
tabs or spaces may be used as `whitespace' separators.$
$
There are three mappings allowed in this file:$
--------------------------------------------------------$
MANDATORY_MANPATHII^Imanpath_element$
MANPATH_MAPIIpath_element^Imanpath_element$
MANDB_MAPIIglobal_manpath^I[relative_catpath]$
---------------------------------------------------------$
every automatically generated MANPATH includes these fields$
$
MANDATORY_MANPATH II^I/usr/src/pvm3/man$
$
MANDATORY_MANPATHII^I/usr/man$
MANDATORY_MANPATHII^I/usr/share/man$
MANDATORY_MANPATHII^I/usr/local/share/man$
---------------------------------------------------------$
set up PATH to MANPATH mapping$
ie. what man tree holds man pages for what binary directory.$
$
IIPATH ->^IMANPATH$
$
MANPATH_MAPI/binIII/usr/share/man$
MANPATH_MAPI/usr/binI^I/usr/share/man$
MANPATH_MAPI/sbinIII/usr/share/man$
MANPATH_MAPI/usr/sbinI^I/usr/share/man$
MANPATH_MAPI/usr/local/binI^I/usr/local/man$
MANPATH_MAPI/usr/local/binI^I/usr/local/share/man$
MANPATH_MAPI/usr/local/sbinI^I/usr/local/man$
MANPATH_MAPI/usr/local/sbinI^I/usr/local/share/man$
MANPATH_MAPI/usr/X11R6/binI^I/usr/X11R6/man$
MANPATH_MAPI/usr/bin/X11I^I/usr/X11R6/man$
MANPATH_MAPI/usr/gamesI^I/usr/share/man$
MANPATH_MAPI/opt/binI^I/opt/man$
MANPATH_MAPI/opt/sbinI^I/opt/man$
---------------------------------------------------------$
For a manpath element to be treated as a system manpath (as most of those$
above should normally be), it must be mentioned below. Each line may have$
an optional extra string indicating the catpath associated with the$
manpath. If no catpath string is used, the catpath will default to the$
given manpath.$
$
You must provide all system manpaths, including manpaths for alternate$
operating systems, locale specific manpaths, and combinations of both, if$
they exist, otherwise the permissions of the user running man/mandb will$
be used to manipulate the manual pages. Also, mandb will not initialise$
the database cache for any manpaths not mentioned below unless explicitly$
requested to do so.$
$
In a per-user configuration file, this directive only controls the$
location of catpaths and the creation of database caches; it has no effect$
on privileges.$
$
Any manpaths that are subdirectories of other manpaths must be mentioned$
before the containing manpath. E.g. /usr/man/preformat must be listed$
before /usr/man.$
$
IIMANPATH ->^ICATPATH$
$
MANDB_MAPI/usr/manI^I/var/cache/man/fsstnd$
MANDB_MAPI/usr/share/manI^I/var/cache/man$
MANDB_MAPI/usr/local/manI^I/var/cache/man/oldlocal$
MANDB_MAPI/usr/local/share/manI/var/cache/man/local$
MANDB_MAPI/usr/X11R6/manI^I/var/cache/man/X11R6$
MANDB_MAPI/opt/manI^I/var/cache/man/opt$
$
---------------------------------------------------------$
Program definitions. These are commented out by default as the value$
of the definition is already the default. To change: uncomment a$
definition and modify it.$
$
DEFINE IpagerIless -s$
DEFINE IcatIcat$
DEFINE ItrItr '\255\267\264\327' '\055\157\047\170'$
DEFINEIIgrep^Igrep$
DEFINE ^Itroff ^Igroff -mandoc$
DEFINE ^Inroff ^Inroff -mandoc -c$
DEFINE ^Ieqn ^Ieqn$
DEFINE IneqnIneqn$
DEFINE ^Itbl ^Itbl$
DEFINE ^Icol ^Icol$
DEFINE ^Ivgrind ^I$
DEFINE ^Irefer ^Irefer$
DEFINE ^Igrap ^I$
DEFINE ^Ipic ^Ipic -S$
$
DEFINEIIcompressor^Igzip -c7$
---------------------------------------------------------$
Misc definitions: same as program definitions above.$
$
DEFINEIIwhatis_grep_flagsII-i$
DEFINEIIapropos_grep_flagsII-iEw$
DEFINEIIapropos_regex_grep_flags^I-iE$
---------------------------------------------------------$
Section names. Manual sections will be searched in the order listed here;$
the default is 1, n, l, 8, 3, 0, 2, 5, 4, 9, 6, 7. Multiple SECTION$
directives may be given for clarity, and will be concatenated together in$
the expected way.$
If a particular extension is not in this list (say, 1mh), it will be$
displayed with the rest of the section it belongs to. The effect of this$
is that you only need to explicitly list extensions if you want to force a$
particular order. Sections with extensions should usually be adjacent to$
their main section (e.g. "1 1mh 8 ...").$
$
SECTIONII1 1p 8 2 3 3p 4 5 6 7 9 0p n l p o 1x 2x 3x 4x 5x 6x 7x 8x$
$
---------------------------------------------------------$
Range of terminal widths permitted when displaying cat pages. If the$
terminal falls outside this range, cat pages will not be created (if$
missing) or displayed.$
$
MINCATWIDTH^I80$
MAXCATWIDTH^I80$
$
If CATWIDTH is set to a non-zero number, cat pages will always be$
formatted for a terminal of the given width, regardless of the width of$
the terminal actually being used. This should generally be within the$
range set by MINCATWIDTH and MAXCATWIDTH.$
$
CATWIDTH^I0$
$
---------------------------------------------------------$
Flags.$
NOCACHE keeps man from creating cat pages.$
NOCACHE$
53.tac(反向列示)
[dmtsai@study ~]$ tac /etc/issue
Kernel \r on an \m
\S
cat与tac写法是两个单词时刚刚相反的,意义上cat是由第一行到最后一行连续显示在屏幕上,而tac则是由最后一行到第一行反向在屏幕上显示出来。
54.nl(添加行号打印)
用nl列出/etc/issue内容
[dmtsai@study ~]$ nl /etc/issue
1 \S
2 Kernel \r on an \m
以上文件其实有三行,但是第三行为空白
因为它是空白行,所以nl不会加上行号,如果确定要加上行号,可以这样做。
[dmtsai@study ~]$ nl -b a /etc/issue
1 \S
2 Kernel \r on an \m
3
补上0最后又变成三行
[dmtsai@study ~]$ nl -b a -n rz /etc/issue
000001 \S
000002 Kernel \r on an \m
000003
自动栏位上补上0,默认栏位是6位数,如果想要变成3位数。
[dmtsai@study ~]$ nl -b a -n rz -w 3 /etc/issue
001 \S
002 Kernel \r on an \m
003
6.3.2 可翻页查看
54.more(一页一页翻动)
[dmtsai@study ~]$ more /etc/man_db.conf
This file is used by the man-db package to configure the man and cat paths.
It is also used to provide a manpath for those without one by examining
their PATH environment variable. For details see the manpath(5) man page.
......
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
MANPATH_MAP /sbin /usr/share/man
空格键(space):代表向下翻一页
Enter:代表向下翻一页
/字符串:代表在这个显示的内容当中,向下查找字符串这个关键词
:f:立刻显示出文件名以及目前显示的行数
q:代表立刻离开more,不再显示该文件内容
b或[ctrl]-b:代表往回翻页,不过这操作只对文件有用,对管道无用。
[dmtsai@study ~]$ more /etc/man_db.conf
.....
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
---------------------------------------------------------
55.less(一页一页翻动)
[dmtsai@study ~]$ less /etc/man_db.conf
This file is used by the man-db package to configure the man and cat paths.
It is also used to provide a manpath for those without one by examining
their PATH environment variable. For details see the manpath(5) man page.
Lines beginning with `#' are comments and are ignored. Any combination of
tabs or spaces may be used as `whitespace' separators.
There are three mappings allowed in this file:
--------------------------------------------------------
MANDATORY_MANPATH manpath_element
MANPATH_MAP path_element manpath_element
MANDB_MAP global_manpath [relative_catpath]
---------------------------------------------------------
every automatically generated MANPATH includes these fields
MANDATORY_MANPATH /usr/src/pvm3/man
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
---------------------------------------------------------
/etc/man_db.conf
.....
空格键:向下翻动一页;
[Pagedown]:向下翻动一页
[pageup]:向上翻动一页
/字符串:向下查找字符串的功能
?字符串:向上查找字符串的功能
n:重复前一个查找(与/或?有关)
N:反向的重复前一个查找(与/或?有关)
g:前进到这个数据的第一行
G:前进到这个数据的最后一行去(注意大小写)
q:离开less这个程序
6.3.3 数据截取
55.head(取出前面几行)
[dmtsai@study ~]$ head -n 20 /etc/man_db.conf
This file is used by the man-db package to configure the man and cat paths.
It is also used to provide a manpath for those without one by examining
their PATH environment variable. For details see the manpath(5) man page.
Lines beginning with `#' are comments and are ignored. Any combination of
tabs or spaces may be used as `whitespace' separators.
There are three mappings allowed in this file:
--------------------------------------------------------
MANDATORY_MANPATH manpath_element
MANPATH_MAP path_element manpath_element
MANDB_MAP global_manpath [relative_catpath]
---------------------------------------------------------
every automatically generated MANPATH includes these fields
MANDATORY_MANPATH /usr/src/pvm3/man
MANDATORY_MANPATH /usr/man
[dmtsai@study ~]$ head -n -100 /etc/man_db.conf
This file is used by the man-db package to configure the man and cat paths.
It is also used to provide a manpath for those without one by examining
their PATH environment variable. For details see the manpath(5) man page.
Lines beginning with `#' are comments and are ignored. Any combination of
tabs or spaces may be used as `whitespace' separators.
There are three mappings allowed in this file:
--------------------------------------------------------
MANDATORY_MANPATH manpath_element
MANPATH_MAP path_element manpath_element
MANDB_MAP global_manpath [relative_catpath]
---------------------------------------------------------
every automatically generated MANPATH includes these fields
MANDATORY_MANPATH /usr/src/pvm3/man
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
---------------------------------------------------------
set up PATH to MANPATH mapping
ie. what man tree holds man pages for what binary directory.
PATH -> MANPATH
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
MANPATH_MAP /sbin /usr/share/man
56.tail(取出后面几行)
-n:后面接数字,代表显示几行的意思。
-f:表示持续刷新显示后面所接文件中的内容,要等到按下[ctrl]-c才会结束。
[dmtsai@study ~]$ tail /etc/man_db.conf
formatted for a terminal of the given width, regardless of the width of
the terminal actually being used. This should generally be within the
range set by MINCATWIDTH and MAXCATWIDTH.
CATWIDTH 0
---------------------------------------------------------
Flags.
NOCACHE keeps man from creating cat pages.
NOCACHE
默认情况下,显示最后的十行,如果要显示20行就应该这样:
[dmtsai@study ~]$ tail -n 20 /etc/man_db.conf
---------------------------------------------------------
Range of terminal widths permitted when displaying cat pages. If the
terminal falls outside this range, cat pages will not be created (if
missing) or displayed.
MINCATWIDTH 80
MAXCATWIDTH 80
If CATWIDTH is set to a non-zero number, cat pages will always be
formatted for a terminal of the given width, regardless of the width of
the terminal actually being used. This should generally be within the
range set by MINCATWIDTH and MAXCATWIDTH.
CATWIDTH 0
---------------------------------------------------------
Flags.
NOCACHE keeps man from creating cat pages.
NOCACHE
显示/etc/man_db.conf的第11行和20行:
[dmtsai@study ~]$ cat -n /etc/man_db.conf | head -n 20 | tail -n 10
11 # --------------------------------------------------------
12 # MANDATORY_MANPATH manpath_element
13 # MANPATH_MAP path_element manpath_element
14 # MANDB_MAP global_manpath [relative_catpath]
15 #---------------------------------------------------------
16 # every automatically generated MANPATH includes these fields
17 #
18 #MANDATORY_MANPATH /usr/src/pvm3/man
19 #
20 MANDATORY_MANPATH /usr/man
6.3.4 非纯文本文件:od
57.将/usr/bin/passwd的内容使用ASCII方式来显示(c :利用ASCII字符来输出)
[root@study ~]# od -t c /usr/bin/passwd
0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020 003 \0 > \0 001 \0 \0 \0 H 2 \0 \0 \0 \0 \0 \0
0000040 @ \0 \0 \0 \0 \0 \0 \0 220 e \0 \0 \0 \0 \0 \0
......
0066140 \0 \0 \0 \0 \0 \0 \0 \0 8 ` \0 \0 \0 \0 \0 \0
0066160 D 004 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0066200 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0066220 001 \0 \0 \0 003 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0066240 \0 \0 \0 \0 \0 \0 \0 \0 | d \0 \0 \0 \0 \0 \0
0066260 021 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0066300 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0066320
a :利用默认的字符来输出:
c :利用ASCII字符来输出
d[size] :利用十进制(decimal)来输出数据,每个整数占用size bytes
f[size] :利用浮点数值(flocating)来输出数据,每个数据占用size bytes
o[size] :利用八进制(octal)来输出数据,每个整数占用size bytes
x[size] :利用十六进制(hexadecimal)来输出数据,每个整数占用size bytes
将/etc/issue这个文件的内容以八进制列出存储值与ASCII的对照表
[root@study ~]# od -t oCc /etc/issue
0000000 134 123 012 113 145 162 156 145 154 040 134 162 040 157 156 040
\ S \n K e r n e l \ r o n
0000020 141 156 040 134 155 012 012
a n \ m \n \n
0000027
6.3.5 修改文件时间或创建新文件:touch
58.Linux系统下面有哪三个主要的变动时间参数?
(1)修改时间(modification time,mtime);
当该文件的[内容数据]变更时,就会更新这个时间,内容数据指的是文件的内容,而不是文件的属性或权限
(2)状态时间(status time,ctime)
当该文件的(状态(status)改变时,就会更新这个时间,举例来说,像是权限与属性被更改了都会更新这个时间。
(3)读取时间(access time,atime)
当[该文件的内容被读取]时,就会更新这个读取时间(access),举例来说,我们使用cat去读取/etc/man_db.conf,就会更新该文件的atime。
默认情况下,ls显示出来的是该文件的mtime,也就是这个文件的内容上次被修改的时间。
[root@study ~]# cd /tmp
[root@study tmp]# touch testtouch
[root@study tmp]# ls -l testtouch
-rw-r--r--. 1 root root 0 8月 17 14:21 testtouch
touch命令最常使用的情况是:
建立一个空文件;
将某个文件日期自定义为日期(mtime与atime)
6.4 文件与目录的默认权限与隐藏权限
6.4.1 文件默认权限:umask
59.如何得知或设置umask?以及如何合理使用umask?
umask就是指定目前用户在建立文件或目录时候的权限默认值。
查看umask指定条件方式如下:(1)直接输入umask,可以看到数字类型的权限默认值;
(2)加入-S(Symbolic)这个选项,就会以符号类型的方式来显示出权限了。
默认权限的基础上,目录与文件是不一致的。
若用户建立为文件则默认没有可执行(x)权限,即只有rw这两个项目,也就是最大为666,默认权限如下:-rw-rw-rw-
若用户建立为空,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即777,默认权限如下:drwxrwxrwx
umask的数字指的是该默认值需要减掉的权限。
[root@study tmp]# rmdir test2
[root@study tmp]# touch test1
[root@study tmp]# mkdir test2
[root@study tmp]# ll -d test*
-rw-r--r--. 1 root root 0 8月 17 15:19 test1
drwxr-xr-x. 2 root root 6 8月 17 15:19 test2
drwxr--r--. 2 dmtsai root 21 8月 12 14:24 testing
-rw-r--r--. 1 root root 0 8月 17 14:36 testtouch
建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
建立目录时,(drwxrwxrwx) - (d----w--w-) ==>drwxr-xr-x
6.4.2 文件隐藏属性
60.chattr命令只能在ext2、ext3、ext4的Linux传统文件系统上面的完整生效。
到
[root@study ~]# umask 0002
[root@study ~]# touch test3
[root@study ~]# mkdir test4
[root@study ~]# ll -d test[34]
-rw-rw-r--. 1 root root 0 8月 17 15:39 test3
drwxrwxr-x. 2 root root 6 8月 17 15:39 test4
chattr在系统数据安全上很重要,由于这些属性是隐性的性质,所以需要以lsattr才能看到该属性。最重要的属性当以:+i和+a。
+i可以让一个文件无法被修改,对于需要强烈的系统安全的人来说,是很重要的,里面还是许多属性需要root权限才能设置的。
61.lsattr(显示文件隐藏属性)
-a:将隐藏文件的属性也显示出来:
[root@study ~]# cd /tmp
[root@study tmp]# chattr +aiS attrtest
[root@study tmp]# lsattr attrtest
--S-ia---------- attrtest
-d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R:连同子目录的数据也一并列出来;
特别要注意下chattr和lsattr的属性。
6.4.3 文件特殊权限:SUID、SGID、SBIT
62.Set UID的权限与功能?
SUID权限仅对二进制程序(binary program)有效
执行者对于该程序需要具有x的可执行权限
本权限仅在执行该程序的过程中有效(run-time)
执行者将具有该程序拥有者(owner)的权限
从上图可以得出:dmtsai对于/usr/bin/passwd这个程序来说是具有x的权限,表示dmtsai能执行passwd;
passwd的拥有者是root这个账号
dmtsai执行passwd的过程中,会[暂时]获得root的权限
/etc/shadow就可以被dmtsai所执行的passwd所修改
SUID仅可用在二进制程序上,不能够用在shell脚本上面。
63.Set GID
当s的标志在文件拥有者的x项为SUID,那s在用户组的x时称为Set GID(SGID);
[root@study ~]# ls -l /usr/bin/locate
-rwx--s--x. 1 root slocate 40512 11月 5 2016 /usr/bin/locate
SGID有如下的功能:
SGID对二进制程序有用;
程序执行者对于该程序来说,需要具备x的权限
执行者在执行的过程中将会获得该程序用户组的执行
[root@study ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 40512 11月 5 2016 /usr/bin/locate
-rw-r-----. 1 root slocate 4225871 8月 19 03:35 /var/lib/mlocate/mlocate.db
当一个目录设置了SGID的权限后,它还具备如下的功能:
用户若对于此目录具有r与x的权限时,该用户能够进入此目录;
用户在此目录下的有效用户组(effective group)将会变成该目录的用户组;
用途:若用户在此目录下具有w的权限(可以新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同。
64.Sticky Bit(简称SBIT)
SBIT目前仅对目录有效,对文件已经没效果了。
SBIT的作用是:当用户对于此目录具有w、x权限,既具有写入的权限;
当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件。
SUID/SGID/SBIT权限设置:
4为SUID
2为SGID
1为SBIT
6.4.4 观察文件类型:file
65.如果想要某个文件的基本信息,可以采用以下方式:
告诉我们是ASCII的纯文本文件。
执行文件的数据可就多的不得了,包括这个文件的SUID权限、兼容Intel x86-64等级的硬件平台
使用的是Linux内核2.6.32的动态链接库等信息;
6.5 命令与文件的查找
6.5.1 脚本文件的查找
66.which(查找[执行文件])
查找ifconfig这个命令的完整文件名:
用which去找出which的文件名是什么?
找出history这个命令的完整文件名:
这个命令是根据[PATH]这个环境变量所规范的路径,去查找执行文件的文件名。
加上-a可以找到同名文件的执行文件
6.5.2 文件的查找
67.whereis(由一些特定的目录中查找文件)
找出ifconfig这个文件名:
只找出跟passwd有关的[说明文件]文件名(man page)。
只有在man里面的文件名才显示出来
68.locate/updatedb
找出系统中与passwd相关的文件名,且只列出5个。
列出locate查询所使用的数据库文件之文件名与各数据量
udatedb(更新数据库)根据/etc/updatedb.conf的设置去查找系统硬盘内的文件,并更新/var/lib/mlocate内的数据库文件;
locate:依据/var/lib/mlocate内的数据库记录,找出用户所输入关键词的文件名
-newer用在辨别两个文件之间的新旧关系是很有用的
图中最右边为目前的时间,越往左边则代表越早之前的时间轴,
+4代表大于5天前的文件:ex>find /var -mtime +4
-4代表小于等于5天内的文件:ex>find/var -mtime -4
4则是代表4-5那一天的文件:ex>find/var -mtime 4
-uid n:n为数字,这个数字是使用者的账号ID,亦即UID,这个UID是记录在/etc/passwd里面 与账号名称对应的数字
-gid n:n为数字,这个数字是用户组名称的ID,亦即GID,这个GID记录在/etc/group,
-user name:name为使用者账号名称,例如dmtsai
-group name:为用户组名称,例如users
-nouser:查找文件的拥有者不在/etc/passwd中,
-nogroup:查找文件的拥有用户不存在于/etc/group的文件,当你自行安装软件时,很可能该软件的属性当中并没有文件拥有者,这是可能的,这个时候可以使用-nouser与-noggroup查找。
查找/home下面属于dmtsai的文件;
[root@study ~]# find /home -user dmtsai
/home/dmtsai
/home/dmtsai/.mozilla
/home/dmtsai/.mozilla/extensions
/home/dmtsai/.mozilla/plugins
/home/dmtsai/.bash_logout
/home/dmtsai/.bash_profile
/home/dmtsai/.bashrc
/home/dmtsai/.cache
.....
/home/dmtsai/.gnupg/pubring.gpg
/home/dmtsai/.gnupg/trustdb.gpg
/home/dmtsai/.gnupg/gpg.conf
/home/dmtsai/.gnupg/secring.gpg
/home/dmtsai/.ssh
/home/dmtsai/vbird
/home/dmtsai/test3
/home/dmtsai/test4
/home/dmtsai/linux-inst.sh
通过这个命令,可以轻易的就找出那些不太正常的文件,如果有找到不属于系统任何用户的文件时。
不要太紧张,那有时候是正常的,尤其是你曾经的源代码自行编译软件时。
找出文件名为passwd这个文件
。
{}代表的是由find找到的内容,如上所示:find的结果会被放置到{}位置中;
-exec一直到\;是关键词,代表find额外操作的开始(-exec)到结束(\;),在这中间的就是find命令内的额外操作。
因为[;]在bash环境下是具有特殊意义的,因此利用反斜杠来转义。
6.6 极重要的复习,权限与命令间的关系
让用户能进入某目录成为可工作目录的基本权限是什么?
可以使用的命令:例如cd等变换工作目录的命令;
目录所需权限:用户对这个目录至少需要具有x的权限;
额外需求:如果用户想要在这个目录内利用ls查看文件名,则用户对此目录还需要r的权限
用户在某个目录内读取一个文件的基本权限是什么?
可以使用的命令:例如:cat、more、less等
目录所需权限:用户对这个目录至少需要具有x权限
文件所需权限:用户对文件至少需要r权限
让用户可以修改一个文件的基本权限是什么?
可以使用的命令:例如:nano或未来要介绍的vi编辑器等
目录所需权限:用户在该文件所在的目录至少有x权限
文件所需权限:用户对该文件至少有r、w权限
让一个用户可以建立一个文件的基本权限是什么?
目录所需权限:用户在该目录要具有w、x的权限,重点在w;
让用户进入某目录并执行该目录下的某个命令之基本权限是什么?
目录所需权限:用户在该目录至少要有x的权限
文件所需权限:用户在该文件至少需要有x的权限
第7章 Linux磁盘与文件系统管理
7.1 认识Linux文件系统
68.Linux最传统的文件系统(filesystem)使用的是ext2格式。
7.1.1 磁盘组成与分区的复习
69.磁盘主要有哪几方面组成的?
圆形的碟片(主要记录数据的部分)
机械手臂,与在机械手臂上的磁头(可擦写碟片上的数据)
主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据
扇区(secor)为最小的物理存储单位,且依据磁盘设计的不同,目前主要有512b与4kb两种格式。
将扇区组成一个圆,那就是柱面(Cylinder)
早期的分期主要是以柱面为最小分区单位,现在的分区通常使用扇区为最小分区单位(每个扇区都有其号码,就好像座位一样);
磁盘分区表主要有两种格式,一种是限制较多的MBR分区表,一种是较新且限制较少的GPT分区表;
MBR分区表中,第一个扇区最重要,里面有:主引导记录(Master boot record,MBR)及分区表(partition table ),其中MBR占用446B,而分区表则占有64B;
GPT分区表除了分区数量扩展较多之外,支持的磁盘容量也可以超过2TB;
/dev/sd[a-p][1-128]:为物理磁盘的文件名;
/dev/vd[a-d][1-128]:为虚拟磁盘的文件名;
7.1.2 文件系统特性
70.可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。
71.文件系统如何运行?
文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到数据区块中。
72.每个inode与区块都有编号,至于这三个数据的意义可以简略说明如下:
超级区块:记录此文件系统的整体信息,包括inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的区块号码;
数据区块:实际记录文件的内容,若文件太大时,会占用多个区块。
73.什么叫索引文件系统?
每种操作系统使用的文件系统都不一样;
windows:NTFS;
在Windows下:安装好系统后需要对硬盘进行格式化,这样做得目的是为了让硬盘能够被Windows系统识别使用好。
Linux:EXT4系统;
在Linux系统中,文件的权限与属性放到inode中,实际数据则放置到data block区块中。还有一个超级区块superblock会记录整个文件系统的整体信息,包括inode与block使用量,剩余量等。
inode:记录一个文件的所有属性,以及这个文件所对应的block的号码(一个文件对应一个inode)
block:存放文件的实际数据(若文件数据太大,则使用多个block存放)
super block:记录文件系统的整体信息,包括:inode、block的数量、文件系统的使用量、剩余量等。
在Linux系统中,为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。
系统是通过索引节点(而不是文件名)来定位每一个文件。
系统先格式化出inode与block的区块。如下图,要访问一个文件时,首先找到这个文件的inode,根据inode中的权限查看当前用户是否有权力读取这个文件;然后根据inode中记录的block的号码,操作系统据此排列磁盘阅读顺序,一口气将四个block内容读出。最后找到block,读出数据。这种文件系统就叫做索引式文件系统。
74.什么叫碎片整理?
需要碎片整理的原因就是文件写入的区块太过于离散,此时文件读取的性能将会变得很差所致。这个时候可以通过碎片整理将同时所需的区块整合在一起,这样的数据的读取会比较容易。简而言之就是将相同区块的碎片文件整合到一起。
7.1.3 Linux的ext2文件系统(inode)
75.文件系统一开始就将inode与数据区块规划好了,除非重新格式化(或利用了resize2fs等命令修改其大小),否则inode与数据区块固定后就不再变动。
76.ext2文件系统格式化的时候基本上是区分为多个区块群组(block group),每个区块群组都有独立的inode、数据区块、超级区块系统。
在整体的规划当中:文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装启动引导程序,这是个非常重要的设计,因为如此以来我们就能够将不同的启动引导程序安装到别的文件系统最前端,而不用覆盖整块磁盘唯一的MBR,这样也才能够制作多重引导的环境。
数据区块(date block)
数据区块用来存放数据的地方,在ext2文件系统中所支持的区块大小有1K、2K及4K三种。格式化时候各个区块大小一致,各个区块都有编号,方便inode的记录。需要注意区块大小的差异会导致文件系统所支持的最大磁盘容量与最大单一文件容量并不相同,,因为区块大小而产生的ext2文件系统限制如下:
Block大小 1KB 2KB 4KB
最大单一文件限制 16GB 256GB 2TB
最大文件系统总容量 2TB 8TB 16TB
77.ext2文件系统的基本限制如下:
原则上,区块的大小与数量在格式化完就不能够再被修改(除非重新格式化);
每个区块内最多只能够放置一个文件的数据;
承上,如果文件大于区块的大小,则一个文件会占用多个区块数量;
承上,若文件小于区块,则该区块的剩余容量就不能够再被使用了(磁盘空间会浪费)
78.inode table(inode表)
inode记录的数据至少有以下几个方面:
该文件的读写属性(read、write、excute)
该文件的拥
有者与用户组(owner、group)
该文件的大小
该文件建立或状态改变的时间(ctime)
最近一次的读取时间(atime)
最近修改的时间(mtime)
定义文件特性的标识(flag),如SetUID
该文件真正内容的指向(pointer)
inode的数量与大小也是在格式化时就已经固定了,除此之外inode还有些其他特色?
每个inode大小均固定为128B(新的ext4与xfs可设置到256B);
每个文件都会占用一个inode而已;
承上,因此文件系统能够建立的问价数量与inode的数量有关;
系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能读取区块的内容。
总额:将直接、间接、双间接、三间接相加,得到12+256+256256+256256*256(K)=16GB
79.Superblock(超级区块):
超级区块是记录整个文件系统相关信息的地方,没有超级区块,就没有这个超级系统,记录的信息如下:
数据区块与inode的总量;
未使用与已使用的inode与数据区块 数量;
数据区块与inode的大小(block为1、2、4K,inode为B或25B);
文件系统的挂载时间、最近一次写入数据的时候、最近一次检测磁盘(fsck)的时间等文件系统的相关信息;
一个有效位数值,若此文件系统已被挂载,则有效为0,若未被挂载,则有效位为1;
80.Filesystem Description(文件系统描述说明):
这个区段可以描述每个区块群组的开始与结束的区块,以及说明每个区段(超级区块、对照表、inode对照表、数据区块)分别介于哪一个区块之间,这部分也能够用dumpe2fs来观察。
81.区块对照表(block bitmap)
新增文件时候需要用到空区块来记录新文件的数据。通过区块对照表来查询哪个区块是空文件。
82.inode对照表(inode bitmap)
类似于区块对照表的功能类似,只是区块对照比记录的是使用与未使用的区块号码,inode对照表则是记录使用与未使用的inode号码。
83.dumpe2fs:查询ext系列超级区块信息的命令:
[root@study ~]$ blkid #这个命令可以显示出目前系统被格式化的设备。
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda2: UUID="14675e74-00c6-424c-9c67-d197f60bbaa0" TYPE="xfs" PARTUUID="4ab13645-58ab-4075-bf3b-a56895d691e7"
/dev/sda3: UUID="8Hb2ZB-0Fyc-DrhT-ciUd-tggj-PIeh-1m0XT3" TYPE="LVM2_member" PARTUUID="2cef3016-1297-4a87-a26d-0838622bd9e5"
/dev/mapper/centos-root: UUID="62d0ac1c-8d6f-4d33-ac9a-f5d717781594" TYPE="xfs"
/dev/mapper/centos-swap: UUID="8bf34ed7-253a-4d51-803a-614c063077e0" TYPE="swap"
/dev/mapper/centos-home: UUID="6f937442-cde2-44c0-8488-fd82a454919a" TYPE="xfs"
7.1.4 与目录树的关系
84.目录
当我们在Linux文件系统下创建一个目录时,文件系统会分配一个inode与至少一块区块给目录。
ls -li
总用量 12
25165890 -rw-------. 1 root root 2255 8月 4 14:31 anaconda-ks.cfg
26480535 -rwxrwxrwx. 2 777 root 176 12月 29 2013 bashrc_hlink
26753577 lrwxrwxrwx. 1 root root 7 8月 15 11:04 bashrc_slink -> .bashrc
25165894 -rw-r--r--. 1 root root 2286 8月 4 14:32 initial-setup-ks.cfg
26745194 -rw-rw-r--. 1 root root 0 8月 17 15:39 test3
26745197 drwxrwxr-x. 2 root root 6 8月 17 15:39 test4
26745199 -rw-r--r--. 1 root root 0 8月 17 14:18 testtouch
26741053 -rw-r--r--. 1 root root 0 8月 17 14:18 touchtest
17836520 drwxr-xr-x. 2 root root 6 8月 5 09:54 公共
8460265 drwxr-xr-x. 2 root root 6 8月 5 09:54 模板
17836521 drwxr-xr-x. 2 root root 6 8月 5 09:54 视频
8460288 drwxr-xr-x. 2 root root 6 8月 5 09:54 图片
25782090 drwxr-xr-x. 2 root root 6 8月 5 09:54 文档
769649 drwxr-xr-x. 2 root root 6 8月 5 09:54 下载
769650 drwxr-xr-x. 2 root root 6 8月 5 09:54 音乐
25782085 drwxr-xr-x. 2 root root 6 8月 5 09:54 桌面
86.文件
当我们在Linux下面的ext2建立一个一般文件时,ext2他会分配一个inode与相对于该文件大小的区块数量给该文件。
87.目录树读取
[root@study ~]# ll -di / /etc /etc/passwd
64 dr-xr-xr-x. 17 root root 224 8月 4 15:03 /
16797761 drwxr-xr-x. 144 root root 8192 8月 17 16:22 /etc
17547991 -rw-r--r--. 1 root root 2221 8月 17 16:22 /etc/passwd
/的inode
通过挂载点的信息找到inode号码为128的根目录inode,且inode规范的权限让我们可以读取该区块的内容(r与x);
/的区块
经过以上步骤还能找到该内容有etc/目录的inode号码(33595521)
etc/的区块
经过以上的步骤取得号码并找到该内容有passwd文件的inode号码(36628004);
passwd的inode
读取36628004号inode得知dmtsai具有r的权限,因此可以读取passwd的区块内容;
passwd的区块
最后将该区块内容的数据读出来
文件系统大小与内容的数据读出来:
为什么会发现文件数据离散的问题?
因为文件数据的读来读去无法统一连续在一起,而是填入式的将数据写入没有被使用的区块当中。如果文件写入的区块很分散,此时就会有所谓的文件数据离散的问题发生了。
7.1.5 ext2/ext3/ext4文件的存取与日志式文件系统的功能
88.假设我们想要新增一个文件,此时文件系统的操作是:
先确定用户对于欲新增文件的目录是否具有w与x的权限,若有的话才能新增;
根据inode对照表找到没有使用的inode号码,并将新文件的权限/属性写入;
根据区块对照表找到没有使用中的区块号码,并将实际的数据写入区块中,且更新inode的区块指向数据;
将刚刚写入的inode与区块数据同步更新inode对照表与区块对照表,并更新超级区块的内容。
数据存放区域:我们将inode对照表与数据区块称为数据存放区域,
元数据(metadata):至于其他例如超级区块、区块对照表与inode对照表等区段就被称为元数据(metadata),因为超级区块、inode对照表区块对照表的数据是经常变动的,每次新增、删除、编辑时都会影响到这三个部分的数据,因此被称为元数据。
89.数据的不一致(Inconsistent)状态
日志式文件系统(Journaling filesystem)
预备:当系统要写入一个文件时,会先在日志记录区块中就某个文件准备要写入的信息;
实际写入:开始写入文件的权限与数据;开始更新metadata的数据;
结束:完成数据与metadata的更新后,在日志记录区块当中完成该文件的记录;
7.1.6 Linux文件系统的运行
90.什么叫做异步处理(asynchronously)的方式?
当系统加载一个文件到内存中,如果该文件没有被修改,则该内存区段的文件数据会被设置为干净(clean)。
如果该文件被修改了,此时该内存的数据会被设置为[脏的(Dirty)],此时所有的操作都还在内存中执行,并没有写到磁盘中去。
系统会不定时的将内存中设置为[Dirty]的数据写回磁盘,以保持磁盘与内存数据的一致性。
91.Linux系统上面的文件系统与内存的关系?
系统会将常用的文件数据放置到内存的缓冲区,以加速文件系统的读写操作;
承上,因此Linux的物理内存最后都会被用光,这是正常的情况,可加速系统性能;
你可以手动使用sync来强制内存中的设置为Dirty的文件回写到磁盘中;
若非正常关机时,关机命令会主动调用sync来将内存的数据回写入磁盘内;
但若不正常关机(如断电、宕机或其他不明原因),由于数据尚未回写到磁盘内,因此重新启动后可能会花很多时间在进行磁盘校验,甚至可能导致文件系统的损坏(非磁盘损坏)。
7.1.7 挂载点的意义(mount point)
92.什么叫挂载?
将文件系统与目录树结合的操作我们称为目录树
挂载点一定是目录,该目录为进入该文件系统的入口。
挂载点一定要挂载到目录树后面这个目录才能够使用
93.Linux系统上的三个挂载点:/、/boot、/home三个,对应的设备文件LVM、LVM、/dev/vda2。
同一个文件系统的某个inode只会对应到一个文件内容而已(因为一个文件占用一个inode)
三个文件均在一个文件系统内,三个文件的inode号码均为128号,三个文件名指向同一个inode号码,三个文件的内容也完全一模一样。
7.1.8 其他Linux支持的文件系统与VFS
94.常见支持文件系统有:
传统文件系统:ext2、minix、FAT(用vfat模块)、iso9660(光盘)等
日志式文件系统:ext3、ext4、ReiserFS、Winodws'NTFS、IBM's JFS、SGI's XFS、ZFS
网络文件系统:NFS、SMBFS
95.Linux VFS(Virtual Filesystem Switch)
VFS就是我们不需要知道硬盘中的文件系统是什么,VFS会主动帮我们进行读取的操作和管理。
7.1.9 XFS文件系统能够简介
96.为什么CentOS 7开始文件系统由ext4文件系统转换为xfs文件系统?
ext系列支持广泛,但是格式起来速度比较慢。
在虚拟化环境下,ext系列的使用率不高。
97.XFS文件系统的配置
xfs文件系统在数据的分布上,主要规划为三个部分,一个数据区(data section)、一个文件系统活动登录区(log section)、实时运行区(realtime section)
数据区(data section)
包含inode、数据区块、超级区块等数据,这个区块与ext系列的区块群组类似。也分为多个存储区群组(allocation groups)来分别放置文件系统所需的数据。
每个存储区都包含了(1)整个文件系统的超级区块(2)剩余空间的管理机制(3)inode的分配与追踪。此外,inode与区块都是系统需要用到时才动态配置产生,所以格式化操作超级快。
与ext系列不同的是,xfs的区块与inode有多种不同的容量可供设置,区块容量可在512B64KB调整,不过,在Linux环境下,由于存储控制的关系(页面文件pagesize的容量之故),因此最高可以使用的区块大小为4K而已。至于inode容量可在256B2MB,不过,大概还是保留256B的默认值就够用。
文件系统的活动登录区(log section)
主要记录了文件系统的变化日志信息,文件的变化会在这里记录下来。直到该变化完整的记录下来,这条记录才会消失不见。如果系统不小心宕机或者损毁,系统会拿出来这个登录区块进行修复。
实时运行区(realtime section)
XFS文件系统的描述数据观察
因为我们没有使用磁盘阵列,因此设备里面的sunit与extent就没有额外的指定值。
7.2 文件系统的简单操作
7.2.1 磁盘与目录的容量
98.如何查询磁盘容量和使用量?
df:列出文件系统的整体磁盘使用量;
du:查看文件系统的磁盘使用量(常用在查看目录所占磁盘空间);
df -a:列出所有的文件系统,包括系统特有的/proc等文件系统;
[dmtsai@study ~]$ df -a
文件系统 1K-块 已用 可用 已用% 挂载点
sysfs 0 0 0 - /sys
proc 0 0 0 - /proc
devtmpfs 492116 0 492116 0% /dev
securityfs 0 0 0 - /sys/kernel/security
tmpfs 508072 0 508072 0% /dev/shm
devpts 0 0 0 - /dev/pts
tmpfs 508072 32740 475332 7% /run
tmpfs 508072 0 508072 0% /sys/fs/cgroup
cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore 0 0 0 - /sys/fs/pstore
cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio
cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup 0 0 0 - /sys/fs/cgroup/devices
cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup 0 0 0 - /sys/fs/cgroup/pids
configfs 0 0 0 - /sys/kernel/config
/dev/mapper/centos-root 9754624 4899120 4855504 51% /
selinuxfs 0 0 0 - /sys/fs/selinux
systemd-1 - - - - /proc/sys/fs/binfmt_misc
mqueue 0 0 0 - /dev/mqueue
debugfs 0 0 0 - /sys/kernel/debug
hugetlbfs 0 0 0 - /dev/hugepages
nfsd 0 0 0 - /proc/fs/nfsd
/dev/sda2 9754624 182708 9571916 2% /boot
/dev/mapper/centos-home 19523584 54388 19469196 1% /home
sunrpc 0 0 0 - /var/lib/nfs/rpc_pipefs
tmpfs 101616 12 101604 1% /run/user/42
binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
tmpfs 101616 0 101616 0% /run/user/1000
df -k:以KBytes的容量显示各文件系统;
[dmtsai@study ~]$ df -k
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 492116 0 492116 0% /dev
tmpfs 508072 0 508072 0% /dev/shm
tmpfs 508072 32740 475332 7% /run
tmpfs 508072 0 508072 0% /sys/fs/cgroup
/dev/mapper/centos-root 9754624 4899100 4855524 51% /
/dev/sda2 9754624 182708 9571916 2% /boot
/dev/mapper/centos-home 19523584 54368 19469216 1% /home
tmpfs 101616 12 101604 1% /run/user/42
tmpfs 101616 0 101616 0% /run/user/1000
df -m:以MBytes的容量显示各文件系统;
[dmtsai@study ~]$ df -m
文件系统 1M-块 已用 可用 已用% 挂载点
devtmpfs 481 0 481 0% /dev
tmpfs 497 0 497 0% /dev/shm
tmpfs 497 32 465 7% /run
tmpfs 497 0 497 0% /sys/fs/cgroup
/dev/mapper/centos-root 9526 4785 4742 51% /
/dev/sda2 9526 179 9348 2% /boot
/dev/mapper/centos-home 19066 54 19013 1% /home
tmpfs 100 1 100 1% /run/user/42
tmpfs 100 0 100 0% /run/user/1000
df-h:以人们较易阅读的GBytes、Mbytes、KBytes等格式自行显示;
[dmtsai@study ~]$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 481M 0 481M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 32M 465M 7% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/mapper/centos-root 9.4G 4.7G 4.7G 51% /
/dev/sda2 9.4G 179M 9.2G 2% /boot
/dev/mapper/centos-home 19G 54M 19G 1% /home
tmpfs 100M 12K 100M 1% /run/user/42
tmpfs 100M 0 100M 0% /run/user/1000
这里会以G/M等容量格式显示出来,比较容易看。
df -H:以M=1000K替换M=1024K的进位方式;
[dmtsai@study ~]$ df -H
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 504M 0 504M 0% /dev
tmpfs 521M 0 521M 0% /dev/shm
tmpfs 521M 34M 487M 7% /run
tmpfs 521M 0 521M 0% /sys/fs/cgroup
/dev/mapper/centos-root 10G 5.1G 5.0G 51% /
/dev/sda2 10G 188M 9.9G 2% /boot
/dev/mapper/centos-home 20G 56M 20G 1% /home
tmpfs 105M 13k 105M 1% /run/user/42
tmpfs 105M 0 105M 0% /run/user/1000
df -T:连同该硬盘分区的文件系统名称(例如xfs)也列出;
[dmtsai@study ~]$ df -T
文件系统 类型 1K-块 已用 可用 已用% 挂载点
devtmpfs devtmpfs 492116 0 492116 0% /dev
tmpfs tmpfs 508072 0 508072 0% /dev/shm
tmpfs tmpfs 508072 32732 475340 7% /run
tmpfs tmpfs 508072 0 508072 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 9754624 4899040 4855584 51% /
/dev/sda2 xfs 9754624 182708 9571916 2% /boot
/dev/mapper/centos-home xfs 19523584 54368 19469216 1% /home
tmpfs tmpfs 101616 12 101604 1% /run/user/42
tmpfs tmpfs 101616 0 101616 0% /run/user/1000
df -i:不用磁盘容量,而以inode的数量来显示;
[dmtsai@study ~]$ df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 123029 394 122635 1% /dev
tmpfs 127018 1 127017 1% /dev/shm
tmpfs 127018 607 126411 1% /run
tmpfs 127018 16 127002 1% /sys/fs/cgroup
/dev/mapper/centos-root 4882432 181005 4701427 4% /
/dev/sda2 4882432 347 4882085 1% /boot
/dev/mapper/centos-home 9766912 219 9766693 1% /home
tmpfs 127018 9 127009 1% /run/user/42
tmpfs 127018 1 127017 1% /run/user/1000
df:将系统内所有的文件系统全列出来。
[dmtsai@study ~]$ df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 492116 0 492116 0% /dev
tmpfs 508072 0 508072 0% /dev/shm
tmpfs 508072 32732 475340 7% /run
tmpfs 508072 0 508072 0% /sys/fs/cgroup
/dev/mapper/centos-root 9754624 4899040 4855584 51% /
/dev/sda2 9754624 182708 9571916 2% /boot
/dev/mapper/centos-home 19523584 54368 19469216 1% /home
tmpfs 101616 12 101604 1% /run/user/42
tmpfs 101616 0 101616 0% /run/user/1000
在Linux下面如果df没有加任何选项,那么默认会将系统内所有的(不含特殊的内存内的文件系统与swap)都以1KBytes的容量列出来,至于那个/dev/shm是与内存有关的挂载,先不要理他。
所输出的信息结果显示:
Filesystem:代表该文件系统是哪个硬盘分区,所以列出设备名称;
1k-block:说明下面的数字单位是1KB,可利用-h或-m来改变容量;
Used:使用掉的磁盘容量;
Available:就是剩下的磁盘空间大小;
Use%:就是磁盘的使用量,如果使用量达到90%以上,最好需要注意下,免得容量不足造成系统问题,/var/spool/mail这个目录是最容量沾满空间;
Mounted on:就是磁盘的挂载目录(挂载点)
将系统内所有特殊文件格式及名称都列出来:
[dmtsai@study ~]$ df -aT
文件系统 类型 1K-块 已用 可用 已用% 挂载点
sysfs sysfs 0 0 0 - /sys
proc proc 0 0 0 - /proc
devtmpfs devtmpfs 492116 0 492116 0% /dev
securityfs securityfs 0 0 0 - /sys/kernel/security
tmpfs tmpfs 508072 0 508072 0% /dev/shm
devpts devpts 0 0 0 - /dev/pts
tmpfs tmpfs 508072 32732 475340 7% /run
tmpfs tmpfs 508072 0 508072 0% /sys/fs/cgroup
cgroup cgroup 0 0 0 - /sys/fs/cgroup/systemd
pstore pstore 0 0 0 - /sys/fs/pstore
cgroup cgroup 0 0 0 - /sys/fs/cgroup/perf_event
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup cgroup 0 0 0 - /sys/fs/cgroup/hugetlb
cgroup cgroup 0 0 0 - /sys/fs/cgroup/net_cls,net_prio
cgroup cgroup 0 0 0 - /sys/fs/cgroup/cpuset
cgroup cgroup 0 0 0 - /sys/fs/cgroup/devices
cgroup cgroup 0 0 0 - /sys/fs/cgroup/freezer
cgroup cgroup 0 0 0 - /sys/fs/cgroup/blkio
cgroup cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup cgroup 0 0 0 - /sys/fs/cgroup/pids
configfs configfs 0 0 0 - /sys/kernel/config
/dev/mapper/centos-root xfs 9754624 4899044 4855580 51% /
selinuxfs selinuxfs 0 0 0 - /sys/fs/selinux
systemd-1 - - - - - /proc/sys/fs/binfmt_misc
mqueue mqueue 0 0 0 - /dev/mqueue
debugfs debugfs 0 0 0 - /sys/kernel/debug
hugetlbfs hugetlbfs 0 0 0 - /dev/hugepages
nfsd nfsd 0 0 0 - /proc/fs/nfsd
/dev/sda2 xfs 9754624 182708 9571916 2% /boot
/dev/mapper/centos-home xfs 19523584 54368 19469216 1% /home
sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs
tmpfs tmpfs 101616 12 101604 1% /run/user/42
binfmt_misc binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
tmpfs tmpfs 101616 0 101616 0% /run/user/1000
系统里面其实还有很多特殊的文件系统存在,那些比较特殊的文件系统几乎都在内存当中。
/proc这个挂载点。因此,这写特殊的文件系统都不会占据磁盘空间。
将/etc下面的磁盘容量以易读的容量格式显示;
[dmtsai@study ~]$ df -h /etc
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 9.4G 4.7G 4.7G 51% /
在df后面加上目录或是文件时候,df会自动分析该目录或文件所在的磁盘分区,并将该硬盘分区的容量显示出来。所以就知道某个目录下面还有多少容量可以使用了。
将目前各个硬盘分区可用的inode数量列出来;
[dmtsai@study ~]$ df -ih
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs 121K 394 120K 1% /dev
tmpfs 125K 1 125K 1% /dev/shm
tmpfs 125K 607 124K 1% /run
tmpfs 125K 16 125K 1% /sys/fs/cgroup
/dev/mapper/centos-root 4.7M 177K 4.5M 4% /
/dev/sda2 4.7M 347 4.7M 1% /boot
/dev/mapper/centos-home 9.4M 219 9.4M 1% /home
tmpfs 125K 9 125K 1% /run/user/42
tmpfs 125K 1 125K 1% /run/user/1000
这个范例主要列出可用的inode剩余量与总容量,还可以清楚地看清通常inode的剩余数量都比区块还要多。
99.du
du
列出目前目录下的所有文件容量;
[dmtsai@study ~]$ du
0 ./.mozilla/extensions
0 ./.mozilla/plugins
0 ./.mozilla
4 ./.cache/abrt
0 ./.cache/gdm
8 ./.cache/imsettings
0 ./.cache/evolution/addressbook/trash
0 ./.cache/evolution/addressbook
0 ./.cache/evolution/calendar/trash
0 ./.cache/evolution/calendar
0 ./.cache/evolution/mail/trash
0 ./.cache/evolution/mail
0 ./.cache/evolution/memos/trash
0 ./.cache/evolution/memos
0 ./.cache/evolution/sources/trash
0 ./.cache/evolution/sources
0 ./.cache/evolution/tasks/trash
0 ./.cache/evolution/tasks
0 ./.cache/evolution
0 ./.cache/gnome-shell
3300 ./.cache/tracker
0 ./.cache/media-art
812 ./.cache/gnome-software/3.22/ratings
724 ./.cache/gnome-software/3.22/extensions
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/objects
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp/cache
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/extensions
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/state
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/heads
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/remotes
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp
4 ./.cache/gnome-software/3.22/flatpak
1540 ./.cache/gnome-software/3.22
1540 ./.cache/gnome-software
488 ./.cache/gstreamer-1.0
0 ./.cache/yelp/WebKitCache/Version 10/Blobs
0 ./.cache/yelp/WebKitCache/Version 10
0 ./.cache/yelp/WebKitCache
0 ./.cache/yelp
0 ./.cache/gnome-control-center/backgrounds
0 ./.cache/gnome-control-center
108 ./.cache/thumbnails/large
4 ./.cache/thumbnails/fail/gnome-thumbnail-factory
4 ./.cache/thumbnails/fail
112 ./.cache/thumbnails
12 ./.cache/libgweather
5480 ./.cache
0 ./.config/abrt
0 ./.config/imsettings
0 ./.config/gnome-session/saved-session
0 ./.config/gnome-session
40 ./.config/pulse
4 ./.config/ibus/bus
4 ./.config/ibus
8 ./.config/dconf
4 ./.config/evolution/sources
4 ./.config/evolution
0 ./.config/goa-1.0
0 ./.config/gconf
4 ./.config/gtk-3.0
4 ./.config/nautilus
4 ./.config/yelp
0 ./.config/enchant
4 ./.config/gedit
88 ./.config
0 ./桌面
0 ./下载
0 ./模板
0 ./公共
0 ./文档
0 ./音乐
0 ./图片
0 ./视频
12 ./.local/share/keyrings
4 ./.local/share/gnome-shell
8 ./.local/share/telepathy/mission-control
8 ./.local/share/telepathy
0 ./.local/share/evolution/addressbook/trash
0 ./.local/share/evolution/addressbook/system/photos
24 ./.local/share/evolution/addressbook/system
24 ./.local/share/evolution/addressbook
0 ./.local/share/evolution/calendar/trash
4 ./.local/share/evolution/calendar/system
4 ./.local/share/evolution/calendar
0 ./.local/share/evolution/mail/trash
0 ./.local/share/evolution/mail
0 ./.local/share/evolution/memos/trash
0 ./.local/share/evolution/memos
0 ./.local/share/evolution/tasks/trash
0 ./.local/share/evolution/tasks
28 ./.local/share/evolution
0 ./.local/share/applications
0 ./.local/share/sounds
188 ./.local/share/tracker/data
188 ./.local/share/tracker
0 ./.local/share/icc
0 ./.local/share/gnome-settings-daemon
0 ./.local/share/nautilus/scripts
0 ./.local/share/nautilus
108 ./.local/share/gvfs-metadata
0 ./.local/share/flatpak/system-cache
0 ./.local/share/flatpak/repo/objects
0 ./.local/share/flatpak/repo/tmp/cache
0 ./.local/share/flatpak/repo/tmp
0 ./.local/share/flatpak/repo/extensions
0 ./.local/share/flatpak/repo/state
0 ./.local/share/flatpak/repo/refs/heads
0 ./.local/share/flatpak/repo/refs/remotes
0 ./.local/share/flatpak/repo/refs
4 ./.local/share/flatpak/repo
4 ./.local/share/flatpak
1136 ./.local/share/app-info/xmls
1136 ./.local/share/app-info
0 ./.local/share/webkitgtk/localstorage
0 ./.local/share/webkitgtk
0 ./.local/share/Trash/info
0 ./.local/share/Trash/files
0 ./.local/share/Trash/expunged
0 ./.local/share/Trash
1500 ./.local/share
1500 ./.local
12 ./.gnupg
0 ./.ssh
0 ./vbird
0 ./test4
21296 .
du -a:列出所有的文件与目录容量,因为默认仅统计目录下面的文件量;
[root@study ~]# du -a
4 ./.bash_logout
4 ./.bash_profile
4 ./.bashrc
4 ./.cshrc
4 ./.tcshrc
4 ./anaconda-ks.cfg
4 ./.cache/dconf/user
4 ./.cache/dconf
4 ./.cache/abrt/lastnotification
0 ./.cache/abrt/applet_dirlist
4 ./.cache/abrt
4 ./.cache/imsettings/log
4 ./.cache/imsettings
0 ./.cache/evolution/addressbook/trash
0 ./.cache/evolution/addressbook
0 ./.cache/evolution/calendar/trash
0 ./.cache/evolution/calendar
0 ./.cache/evolution/mail/trash
0 ./.cache/evolution/mail
0 ./.cache/evolution/memos/trash
0 ./.cache/evolution/memos
0 ./.cache/evolution/sources/trash
0 ./.cache/evolution/sources
0 ./.cache/evolution/tasks/trash
0 ./.cache/evolution/tasks
0 ./.cache/evolution
0 ./.cache/gnome-shell/update-check-3.22
0 ./.cache/gnome-shell
4 ./.cache/tracker/db-version.txt
1252 ./.cache/tracker/meta.db
4 ./.cache/tracker/db-locale.txt
1308 ./.cache/tracker/meta.db-wal
32 ./.cache/tracker/meta.db-shm
352 ./.cache/tracker/ontologies.gvdb
4 ./.cache/tracker/parser-sha1.txt
4 ./.cache/tracker/locale-for-miner-user-guides.txt
4 ./.cache/tracker/locale-for-miner-apps.txt
4 ./.cache/tracker/last-crawl.txt
4 ./.cache/tracker/first-index.txt
2972 ./.cache/tracker
0 ./.cache/media-art
12 ./.cache/event-sound-cache.tdb.study.centos.vbird.x86_64-redhat-linux-gnu
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/config
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/objects
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp/cache
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/extensions
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/state
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/heads
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/remotes
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/.changed
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp
4 ./.cache/gnome-software/3.22/flatpak
812 ./.cache/gnome-software/3.22/ratings/odrs.json
812 ./.cache/gnome-software/3.22/ratings
724 ./.cache/gnome-software/3.22/extensions/gnome.json
724 ./.cache/gnome-software/3.22/extensions
1540 ./.cache/gnome-software/3.22
1540 ./.cache/gnome-software
488 ./.cache/gstreamer-1.0/registry.x86_64.bin
488 ./.cache/gstreamer-1.0
0 ./.cache/yelp/WebKitCache/Version 10/Blobs
0 ./.cache/yelp/WebKitCache/Version 10
0 ./.cache/yelp/WebKitCache
0 ./.cache/yelp
5024 ./.cache
4 ./.dbus/session-bus/67751db1022f4183a259f86ed2befa0e-9
4 ./.dbus/session-bus
4 ./.dbus
4 ./initial-setup-ks.cfg
0 ./.config/abrt
0 ./.config/imsettings
4 ./.config/user-dirs.dirs
4 ./.config/user-dirs.locale
0 ./.config/gnome-session/saved-session
0 ./.config/gnome-session
4 ./.config/ibus/bus/67751db1022f4183a259f86ed2befa0e-unix-1
4 ./.config/ibus/bus
4 ./.config/ibus
4 ./.config/dconf/user
4 ./.config/dconf
4 ./.config/evolution/sources/system-proxy.source
4 ./.config/evolution/sources
4 ./.config/evolution
0 ./.config/goa-1.0
0 ./.config/gconf
8 ./.config/pulse/67751db1022f4183a259f86ed2befa0e-device-volumes.tdb
12 ./.config/pulse/67751db1022f4183a259f86ed2befa0e-stream-volumes.tdb
4 ./.config/pulse/67751db1022f4183a259f86ed2befa0e-card-database.tdb
4 ./.config/pulse/cookie
4 ./.config/pulse/67751db1022f4183a259f86ed2befa0e-default-sink
4 ./.config/pulse/67751db1022f4183a259f86ed2befa0e-default-source
40 ./.config/pulse
4 ./.config/gtk-3.0/bookmarks
4 ./.config/gtk-3.0
4 ./.config/nautilus/desktop-metadata
4 ./.config/nautilus
4 ./.config/gnome-initial-setup-done
4 ./.config/yelp/yelp.cfg
4 ./.config/yelp
76 ./.config
12 ./.bash_history
0 ./桌面
0 ./下载
0 ./模板
0 ./公共
0 ./文档
0 ./音乐
0 ./图片
0 ./视频
4 ./.ICEauthority
0 ./.local/share/gnome-shell
4 ./.local/share/telepathy/mission-control/accounts.cfg
4 ./.local/share/telepathy/mission-control/accounts-goa.cfg
8 ./.local/share/telepathy/mission-control
8 ./.local/share/telepathy
0 ./.local/share/evolution/addressbook/trash
24 ./.local/share/evolution/addressbook/system/contacts.db
0 ./.local/share/evolution/addressbook/system/photos
24 ./.local/share/evolution/addressbook/system
24 ./.local/share/evolution/addressbook
0 ./.local/share/evolution/calendar/trash
0 ./.local/share/evolution/calendar
0 ./.local/share/evolution/mail/trash
0 ./.local/share/evolution/mail
0 ./.local/share/evolution/memos/trash
0 ./.local/share/evolution/memos
0 ./.local/share/evolution/tasks/trash
0 ./.local/share/evolution/tasks
24 ./.local/share/evolution
4 ./.local/share/gsettings-data-convert
0 ./.local/share/applications
0 ./.local/share/sounds
0 ./.local/share/icc
100 ./.local/share/tracker/data/tracker-store.journal
76 ./.local/share/tracker/data/tracker-store.ontology.journal
176 ./.local/share/tracker/data
176 ./.local/share/tracker
0 ./.local/share/gnome-settings-daemon/input-sources-converted
0 ./.local/share/gnome-settings-daemon
4 ./.local/share/gvfs-metadata/root
32 ./.local/share/gvfs-metadata/root-cda4094e.log
36 ./.local/share/gvfs-metadata
4 ./.local/share/flatpak/repo/config
0 ./.local/share/flatpak/repo/objects
0 ./.local/share/flatpak/repo/tmp/cache
0 ./.local/share/flatpak/repo/tmp
0 ./.local/share/flatpak/repo/extensions
0 ./.local/share/flatpak/repo/state
0 ./.local/share/flatpak/repo/refs/heads
0 ./.local/share/flatpak/repo/refs/remotes
0 ./.local/share/flatpak/repo/refs
4 ./.local/share/flatpak/repo
0 ./.local/share/flatpak/.changed
4 ./.local/share/flatpak
0 ./.local/share/nautilus/scripts
0 ./.local/share/nautilus
0 ./.local/share/webkitgtk/localstorage
0 ./.local/share/webkitgtk
1136 ./.local/share/app-info/xmls/extensions-web.xml
1136 ./.local/share/app-info/xmls
1136 ./.local/share/app-info
1388 ./.local/share
1388 ./.local
4 ./.esd_auth
0 ./.Xauthority
4 ./.bashrc_test
0 ./bashrc_slink
4 ./.mysql_history
0 ./touchtest
0 ./testtouch
0 ./test3
0 ./test4
0 ./.pki/nssdb
0 ./.pki
4 ./.viminfo
6556 .
du -h:以人们较易读的容量格式(G/M)显示;
[root@study ~]# du -h
4.0K ./.cache/dconf
4.0K ./.cache/abrt
4.0K ./.cache/imsettings
0 ./.cache/evolution/addressbook/trash
0 ./.cache/evolution/addressbook
0 ./.cache/evolution/calendar/trash
0 ./.cache/evolution/calendar
0 ./.cache/evolution/mail/trash
0 ./.cache/evolution/mail
0 ./.cache/evolution/memos/trash
0 ./.cache/evolution/memos
0 ./.cache/evolution/sources/trash
0 ./.cache/evolution/sources
0 ./.cache/evolution/tasks/trash
0 ./.cache/evolution/tasks
0 ./.cache/evolution
0 ./.cache/gnome-shell
3.0M ./.cache/tracker
0 ./.cache/media-art
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/objects
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp/cache
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/extensions
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/state
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/heads
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/remotes
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs
4.0K ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo
4.0K ./.cache/gnome-software/3.22/flatpak/installation-tmp
4.0K ./.cache/gnome-software/3.22/flatpak
812K ./.cache/gnome-software/3.22/ratings
724K ./.cache/gnome-software/3.22/extensions
1.6M ./.cache/gnome-software/3.22
1.6M ./.cache/gnome-software
488K ./.cache/gstreamer-1.0
0 ./.cache/yelp/WebKitCache/Version 10/Blobs
0 ./.cache/yelp/WebKitCache/Version 10
0 ./.cache/yelp/WebKitCache
0 ./.cache/yelp
5.0M ./.cache
4.0K ./.dbus/session-bus
4.0K ./.dbus
0 ./.config/abrt
0 ./.config/imsettings
0 ./.config/gnome-session/saved-session
0 ./.config/gnome-session
4.0K ./.config/ibus/bus
4.0K ./.config/ibus
4.0K ./.config/dconf
4.0K ./.config/evolution/sources
4.0K ./.config/evolution
0 ./.config/goa-1.0
0 ./.config/gconf
40K ./.config/pulse
4.0K ./.config/gtk-3.0
4.0K ./.config/nautilus
4.0K ./.config/yelp
76K ./.config
0 ./桌面
0 ./下载
0 ./模板
0 ./公共
0 ./文档
0 ./音乐
0 ./图片
0 ./视频
0 ./.local/share/gnome-shell
8.0K ./.local/share/telepathy/mission-control
8.0K ./.local/share/telepathy
0 ./.local/share/evolution/addressbook/trash
0 ./.local/share/evolution/addressbook/system/photos
24K ./.local/share/evolution/addressbook/system
24K ./.local/share/evolution/addressbook
0 ./.local/share/evolution/calendar/trash
0 ./.local/share/evolution/calendar
0 ./.local/share/evolution/mail/trash
0 ./.local/share/evolution/mail
0 ./.local/share/evolution/memos/trash
0 ./.local/share/evolution/memos
0 ./.local/share/evolution/tasks/trash
0 ./.local/share/evolution/tasks
24K ./.local/share/evolution
0 ./.local/share/applications
0 ./.local/share/sounds
0 ./.local/share/icc
176K ./.local/share/tracker/data
176K ./.local/share/tracker
0 ./.local/share/gnome-settings-daemon
36K ./.local/share/gvfs-metadata
0 ./.local/share/flatpak/repo/objects
0 ./.local/share/flatpak/repo/tmp/cache
0 ./.local/share/flatpak/repo/tmp
0 ./.local/share/flatpak/repo/extensions
0 ./.local/share/flatpak/repo/state
0 ./.local/share/flatpak/repo/refs/heads
0 ./.local/share/flatpak/repo/refs/remotes
0 ./.local/share/flatpak/repo/refs
4.0K ./.local/share/flatpak/repo
4.0K ./.local/share/flatpak
0 ./.local/share/nautilus/scripts
0 ./.local/share/nautilus
0 ./.local/share/webkitgtk/localstorage
0 ./.local/share/webkitgtk
1.2M ./.local/share/app-info/xmls
1.2M ./.local/share/app-info
1.4M ./.local/share
1.4M ./.local
0 ./test4
0 ./.pki/nssdb
0 ./.pki
6.5M .
du -s:仅列出总量,而不列出每个个别的目录所占用容量;
[root@study ~]# du -s
6564 .
du -S:不包括子目录下的总计,与-s有点差别;
[root@study ~]# du -S
4 ./.cache/dconf
4 ./.cache/abrt
4 ./.cache/imsettings
0 ./.cache/evolution/addressbook/trash
0 ./.cache/evolution/addressbook
0 ./.cache/evolution/calendar/trash
0 ./.cache/evolution/calendar
0 ./.cache/evolution/mail/trash
0 ./.cache/evolution/mail
0 ./.cache/evolution/memos/trash
0 ./.cache/evolution/memos
0 ./.cache/evolution/sources/trash
0 ./.cache/evolution/sources
0 ./.cache/evolution/tasks/trash
0 ./.cache/evolution/tasks
0 ./.cache/evolution
0 ./.cache/gnome-shell
2972 ./.cache/tracker
0 ./.cache/media-art
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/objects
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp/cache
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/extensions
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/state
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/heads
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/remotes
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp
0 ./.cache/gnome-software/3.22/flatpak
812 ./.cache/gnome-software/3.22/ratings
724 ./.cache/gnome-software/3.22/extensions
0 ./.cache/gnome-software/3.22
0 ./.cache/gnome-software
488 ./.cache/gstreamer-1.0
0 ./.cache/yelp/WebKitCache/Version 10/Blobs
0 ./.cache/yelp/WebKitCache/Version 10
0 ./.cache/yelp/WebKitCache
0 ./.cache/yelp
12 ./.cache
4 ./.dbus/session-bus
0 ./.dbus
0 ./.config/abrt
0 ./.config/imsettings
0 ./.config/gnome-session/saved-session
0 ./.config/gnome-session
4 ./.config/ibus/bus
0 ./.config/ibus
4 ./.config/dconf
4 ./.config/evolution/sources
0 ./.config/evolution
0 ./.config/goa-1.0
0 ./.config/gconf
40 ./.config/pulse
4 ./.config/gtk-3.0
4 ./.config/nautilus
4 ./.config/yelp
12 ./.config
0 ./桌面
0 ./下载
0 ./模板
0 ./公共
0 ./文档
0 ./音乐
0 ./图片
0 ./视频
0 ./.local/share/gnome-shell
8 ./.local/share/telepathy/mission-control
0 ./.local/share/telepathy
0 ./.local/share/evolution/addressbook/trash
0 ./.local/share/evolution/addressbook/system/photos
24 ./.local/share/evolution/addressbook/system
0 ./.local/share/evolution/addressbook
0 ./.local/share/evolution/calendar/trash
0 ./.local/share/evolution/calendar
0 ./.local/share/evolution/mail/trash
0 ./.local/share/evolution/mail
0 ./.local/share/evolution/memos/trash
0 ./.local/share/evolution/memos
0 ./.local/share/evolution/tasks/trash
0 ./.local/share/evolution/tasks
0 ./.local/share/evolution
0 ./.local/share/applications
0 ./.local/share/sounds
0 ./.local/share/icc
176 ./.local/share/tracker/data
0 ./.local/share/tracker
0 ./.local/share/gnome-settings-daemon
36 ./.local/share/gvfs-metadata
0 ./.local/share/flatpak/repo/objects
0 ./.local/share/flatpak/repo/tmp/cache
0 ./.local/share/flatpak/repo/tmp
0 ./.local/share/flatpak/repo/extensions
0 ./.local/share/flatpak/repo/state
0 ./.local/share/flatpak/repo/refs/heads
0 ./.local/share/flatpak/repo/refs/remotes
0 ./.local/share/flatpak/repo/refs
4 ./.local/share/flatpak/repo
0 ./.local/share/flatpak
0 ./.local/share/nautilus/scripts
0 ./.local/share/nautilus
0 ./.local/share/webkitgtk/localstorage
0 ./.local/share/webkitgtk
1136 ./.local/share/app-info/xmls
0 ./.local/share/app-info
4 ./.local/share
0 ./.local
0 ./test4
0 ./.pki/nssdb
0 ./.pki
72 .
du -k:以KBytes列出容量显示;
[root@study ~]# du -k
4 ./.cache/dconf
4 ./.cache/abrt
4 ./.cache/imsettings
0 ./.cache/evolution/addressbook/trash
0 ./.cache/evolution/addressbook
0 ./.cache/evolution/calendar/trash
0 ./.cache/evolution/calendar
0 ./.cache/evolution/mail/trash
0 ./.cache/evolution/mail
0 ./.cache/evolution/memos/trash
0 ./.cache/evolution/memos
0 ./.cache/evolution/sources/trash
0 ./.cache/evolution/sources
0 ./.cache/evolution/tasks/trash
0 ./.cache/evolution/tasks
0 ./.cache/evolution
0 ./.cache/gnome-shell
2972 ./.cache/tracker
0 ./.cache/media-art
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/objects
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp/cache
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/extensions
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/state
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/heads
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/remotes
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo
4 ./.cache/gnome-software/3.22/flatpak/installation-tmp
4 ./.cache/gnome-software/3.22/flatpak
812 ./.cache/gnome-software/3.22/ratings
724 ./.cache/gnome-software/3.22/extensions
1540 ./.cache/gnome-software/3.22
1540 ./.cache/gnome-software
488 ./.cache/gstreamer-1.0
0 ./.cache/yelp/WebKitCache/Version 10/Blobs
0 ./.cache/yelp/WebKitCache/Version 10
0 ./.cache/yelp/WebKitCache
0 ./.cache/yelp
5024 ./.cache
4 ./.dbus/session-bus
4 ./.dbus
0 ./.config/abrt
0 ./.config/imsettings
0 ./.config/gnome-session/saved-session
0 ./.config/gnome-session
4 ./.config/ibus/bus
4 ./.config/ibus
4 ./.config/dconf
4 ./.config/evolution/sources
4 ./.config/evolution
0 ./.config/goa-1.0
0 ./.config/gconf
40 ./.config/pulse
4 ./.config/gtk-3.0
4 ./.config/nautilus
4 ./.config/yelp
76 ./.config
0 ./桌面
0 ./下载
0 ./模板
0 ./公共
0 ./文档
0 ./音乐
0 ./图片
0 ./视频
0 ./.local/share/gnome-shell
8 ./.local/share/telepathy/mission-control
8 ./.local/share/telepathy
0 ./.local/share/evolution/addressbook/trash
0 ./.local/share/evolution/addressbook/system/photos
24 ./.local/share/evolution/addressbook/system
24 ./.local/share/evolution/addressbook
0 ./.local/share/evolution/calendar/trash
0 ./.local/share/evolution/calendar
0 ./.local/share/evolution/mail/trash
0 ./.local/share/evolution/mail
0 ./.local/share/evolution/memos/trash
0 ./.local/share/evolution/memos
0 ./.local/share/evolution/tasks/trash
0 ./.local/share/evolution/tasks
24 ./.local/share/evolution
0 ./.local/share/applications
0 ./.local/share/sounds
0 ./.local/share/icc
176 ./.local/share/tracker/data
176 ./.local/share/tracker
0 ./.local/share/gnome-settings-daemon
36 ./.local/share/gvfs-metadata
0 ./.local/share/flatpak/repo/objects
0 ./.local/share/flatpak/repo/tmp/cache
0 ./.local/share/flatpak/repo/tmp
0 ./.local/share/flatpak/repo/extensions
0 ./.local/share/flatpak/repo/state
0 ./.local/share/flatpak/repo/refs/heads
0 ./.local/share/flatpak/repo/refs/remotes
0 ./.local/share/flatpak/repo/refs
4 ./.local/share/flatpak/repo
4 ./.local/share/flatpak
0 ./.local/share/nautilus/scripts
0 ./.local/share/nautilus
0 ./.local/share/webkitgtk/localstorage
0 ./.local/share/webkitgtk
1136 ./.local/share/app-info/xmls
1136 ./.local/share/app-info
1388 ./.local/share
1388 ./.local
0 ./test4
0 ./.pki/nssdb
0 ./.pki
6564 .
du -m:以MBytes列出容量显示;
[root@study ~]# du -m
1 ./.cache/dconf
1 ./.cache/abrt
1 ./.cache/imsettings
0 ./.cache/evolution/addressbook/trash
0 ./.cache/evolution/addressbook
0 ./.cache/evolution/calendar/trash
0 ./.cache/evolution/calendar
0 ./.cache/evolution/mail/trash
0 ./.cache/evolution/mail
0 ./.cache/evolution/memos/trash
0 ./.cache/evolution/memos
0 ./.cache/evolution/sources/trash
0 ./.cache/evolution/sources
0 ./.cache/evolution/tasks/trash
0 ./.cache/evolution/tasks
0 ./.cache/evolution
0 ./.cache/gnome-shell
3 ./.cache/tracker
0 ./.cache/media-art
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/objects
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp/cache
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/tmp
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/extensions
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/state
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/heads
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs/remotes
0 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo/refs
1 ./.cache/gnome-software/3.22/flatpak/installation-tmp/repo
1 ./.cache/gnome-software/3.22/flatpak/installation-tmp
1 ./.cache/gnome-software/3.22/flatpak
1 ./.cache/gnome-software/3.22/ratings
1 ./.cache/gnome-software/3.22/extensions
2 ./.cache/gnome-software/3.22
2 ./.cache/gnome-software
1 ./.cache/gstreamer-1.0
0 ./.cache/yelp/WebKitCache/Version 10/Blobs
0 ./.cache/yelp/WebKitCache/Version 10
0 ./.cache/yelp/WebKitCache
0 ./.cache/yelp
5 ./.cache
1 ./.dbus/session-bus
1 ./.dbus
0 ./.config/abrt
0 ./.config/imsettings
0 ./.config/gnome-session/saved-session
0 ./.config/gnome-session
1 ./.config/ibus/bus
1 ./.config/ibus
1 ./.config/dconf
1 ./.config/evolution/sources
1 ./.config/evolution
0 ./.config/goa-1.0
0 ./.config/gconf
1 ./.config/pulse
1 ./.config/gtk-3.0
1 ./.config/nautilus
1 ./.config/yelp
1 ./.config
0 ./桌面
0 ./下载
0 ./模板
0 ./公共
0 ./文档
0 ./音乐
0 ./图片
0 ./视频
0 ./.local/share/gnome-shell
1 ./.local/share/telepathy/mission-control
1 ./.local/share/telepathy
0 ./.local/share/evolution/addressbook/trash
0 ./.local/share/evolution/addressbook/system/photos
1 ./.local/share/evolution/addressbook/system
1 ./.local/share/evolution/addressbook
0 ./.local/share/evolution/calendar/trash
0 ./.local/share/evolution/calendar
0 ./.local/share/evolution/mail/trash
0 ./.local/share/evolution/mail
0 ./.local/share/evolution/memos/trash
0 ./.local/share/evolution/memos
0 ./.local/share/evolution/tasks/trash
0 ./.local/share/evolution/tasks
1 ./.local/share/evolution
0 ./.local/share/applications
0 ./.local/share/sounds
0 ./.local/share/icc
1 ./.local/share/tracker/data
1 ./.local/share/tracker
0 ./.local/share/gnome-settings-daemon
1 ./.local/share/gvfs-metadata
0 ./.local/share/flatpak/repo/objects
0 ./.local/share/flatpak/repo/tmp/cache
0 ./.local/share/flatpak/repo/tmp
0 ./.local/share/flatpak/repo/extensions
0 ./.local/share/flatpak/repo/state
0 ./.local/share/flatpak/repo/refs/heads
0 ./.local/share/flatpak/repo/refs/remotes
0 ./.local/share/flatpak/repo/refs
1 ./.local/share/flatpak/repo
1 ./.local/share/flatpak
0 ./.local/share/nautilus/scripts
0 ./.local/share/nautilus
0 ./.local/share/webkitgtk/localstorage
0 ./.local/share/webkitgtk
2 ./.local/share/app-info/xmls
2 ./.local/share/app-info
2 ./.local/share
2 ./.local
0 ./test4
0 ./.pki/nssdb
0 ./.pki
7 .
du -sm/*
经常被使用的功能,利用通配符*来代表每个目录,如果想要检查某个目录下。
哪个子目录占用最大的容量,可以用这个方法找出来。值得注意的是,如果刚刚安装好Linx时候。
那么整个系统容量最大的应该是/usr。而/proc虽然有列出容量,但是它的容量在内存中;
不占磁盘空间。至于/proc里面会列出一堆[No such file or directory]的错误;
别担心,因为内存中的程序,程序执行结束就会消失,因此某些目录找不到是正确的。
7.3.2 硬链接与符号链接:ln
99.硬链接与软链接的关系和区别?
Linux下面的链接文件有两种:一种是类似Windows的快捷方式功能的文件,可以让你快速地链接到目录文件(或目录);另一种则是通过文件系统的inode链接来产生新文件名,而不是产生新文件,这种被称为硬链接。
硬链接(Hard Link,硬式链接或实际链接);
每个文件都会占用一个inode,文件内容是由inode的记录指向来决定的;
想要读取该文件,必须要经过目录记录的文件名来指向到正确的inode号码才能读取的。
简单的来说硬链接就是在某个目录下新增一条文件名链接到某个inode号码的关连记录而已。
[root@study ~]# ll -i /etc/crontab
17814789 -rw-r--r--. 1 root root 451 6月 10 2014 /etc/crontab
[root@study ~]# ln /etc/crontab
[root@study ~]# ll -i /etc/crontab crontab
17814789 -rw-r--r--. 2 root root 451 6月 10 2014 crontab
17814789 -rw-r--r--. 2 root root 451 6月 10 2014 /etc/crontab
如果你将任何一个文件名删除,其实inode与区块都还是存在的。
一般来说采取硬链接设置文件链接时候,磁盘空间与inode的数目都不会改变的。
硬链接只能在单一文件系统里进行,不可以进行跨文件系统。所以硬链接是有限制的:
不能跨文件系统;
不能连接目录;
100.符号链接(Symbolic Link,亦即是快捷方式)
基本上,符号链接就是建立一个独立的文件,而这个文件会让数据的读取指向它链接的那个文件的文件名。
当源文件被删除之后,符号链接的文件会[打不开了],会一直说[无法打开某文件],实际上就是找不到原始文件名而已。
建立一个符号链接文件到/etc/crontab去看看
[root@study ~]# ln -s /etc/crontab crontab2
[root@study ~]# ll -i /etc/crontab /root/crontab2
17814789 -rw-r--r--. 2 root root 451 6月 10 2014 /etc/crontab
26771878 lrwxrwxrwx. 1 root root 12 8月 25 14:54 /root/crontab2 -> /etc/crontab
链接文件的重要内容就是它会写上目录文件的文件名
这个符号链接与Windows的快捷方式可以给它划上等号,由符号链接所建立的文件为一个独立的新的文件,所以会占用inode与区块。
硬链接也是相对很安全的,如果删除关联的文件数据也没事只要关联的文件还在就行。
[root@study tmp]# cp -a /etc/passwd .
[root@study tmp]# du -sb ;df -i .
37937791 .
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 4882432 181009 4701423 4% /
将/etc/passwd复制到/tmp下面,并且观察inode与区块;
将/tmp/passwd制作硬链接成为passwd-hd文件,并查看文件与容量。
[root@study tmp]# ln passwd passwd-hd
[root@study tmp]# du -sb ;df -i .
37937791 .
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 4882432 181009 4701423 4% /
即使多了一个文件在/tmp下面,整个inode与区块的容量并没有改变。
[root@study tmp]# ls -il passwd*
17547788 -rw-r--r--. 2 root root 2221 8月 17 16:22 passwd
17547778 -rw-r--r--. 1 root root 2221 8月 17 16:22 passwdhd
17547788 -rw-r--r--. 2 root root 2221 8月 17 16:22 passwd-hd
原来是指向同一个inode,这个是重点,另外,那个第二栏的链接数也会增加。
将/tmp/passwd建立一个符号链接;
[root@study tmp]# ln -s passwd passwd-so
[root@study tmp]# ls -li passwd*
17547788 -rw-r--r--. 2 root root 2221 8月 17 16:22 passwd
17547778 -rw-r--r--. 1 root root 2221 8月 17 16:22 passwdhd
17547788 -rw-r--r--. 2 root root 2221 8月 17 16:22 passwd-hd
17547789 lrwxrwxrwx. 1 root root 6 8月 25 15:34 passwd-so -> passwd
passwd-so指向的inode number不同了。这是一个新的文件,这个文件的内容是指向passwd这个文件。
passwd-so的大小是6Bytes,因为[passwd]这个单词共有六个字符之故。
[root@study tmp]# du -sb ;df -i .
37937797 .
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 4882432 181010 4701422 4% /
整个容量与inode使用数都在改变。
删除原始文件passwd,其他两个文件是否能够开启?
[root@study tmp]# ll passwd*
-rw-r--r--. 1 root root 2221 8月 17 16:22 passwdhd
-rw-r--r--. 1 root root 2221 8月 17 16:22 passwd-hd
lrwxrwxrwx. 1 root root 6 8月 25 15:34 passwd-so -> passwd
使用ln如果不加任何参数的话,那么就是硬链接(。)
[root@study tmp]# ls -ld /tmp
drwxrwxrwt. 26 root root 4096 8月 25 15:41 /tmp
[root@study tmp]# mkdir /tmp/testing1
[root@study tmp]# ls -ld /tmp
drwxrwxrwt. 27 root root 4096 8月 25 15:46 /tmp
[root@study tmp]# ls -ld /tmp/testing1
drwxr-xr-x. 2 root root 6 8月 25 15:46 /tmp/testing1
新的目录的链接数为2,而上层目录的链接数则会增加-1]。
7.3 磁盘的分区、格式化、检验与挂载
101.如果在系统里面新增一块硬盘需要注意哪些问题?
对硬盘进行划分,以建立可用的硬盘分区。
对该硬盘分区进行格式化(format),以建立系统可用的文件系统。
若想要仔细一点,则可对刚刚建立好的文件系统进行检验。
在Linux系统上,需要建立挂载点(亦即是目录),并将它挂载上来。
7.3.1 观察磁盘分区状态
102.列出本系统下面所有磁盘与磁盘内的分区信息。
[root@study tmp]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 9.3G 0 part /boot
└─sda3 8:3 0 28.9G 0 part
├─centos-root 253:0 0 9.3G 0 lvm /
├─centos-swap 253:1 0 976M 0 lvm [SWAP]
└─centos-home 253:2 0 18.6G 0 lvm /home
sr0 11:0 1 4.2G 0 rom
sr1 11:1 1 1024M 0 rom
vda3分为三个分区,vad3还有因为LVM而产生的文件系统。
默认的输出信息有哪些:
NAME:就是设备的文件名,会省略/dev等前导目录;
MAJ:MIN:其实内核识别的设备都是通过这两个代码来实现的,分别是主要与次要设备代码;
RM:是否为可卸载设备(removable device),如光盘、USB磁盘等;
SIZE:当然就是容量;
RO:是否为只读设备的意思;
TYPE:是磁盘(disk)、分区(partition)还是只读存储器(rom)等输出;
MOUNTPOINT:就是前一章谈到的挂载点。
103.仅列出/dev/vda设备内的所有数据的完整文件名。
[root@study ~]# lsblk -ip /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
/dev/sda 8:0 0 50G 0 disk
|-/dev/sda1 8:1 0 2M 0 part
|-/dev/sda2 8:2 0 9.3G 0 part /boot
-/dev/sda3 8:3 0 28.9G 0 part |-/dev/mapper/centos-root 253:0 0 9.3G 0 lvm / |-/dev/mapper/centos-swap 253:1 0 976M 0 lvm [SWAP]
-/dev/mapper/centos-home 253:2 0 18.6G 0 lvm /home
104.blkid列出设备的UUID等参数:
什么是UUID?
UUID是全局唯一标识符(universally unique identifier),而Linux会将系统内所有的设备都给予一个独立屋尔的标识符,这个标识符被拿来作为挂载或是使用这个设备或文件系统。
[root@study ~]# blkid
/dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sda2: UUID="14675e74-00c6-424c-9c67-d197f60bbaa0" TYPE="xfs" PARTUUID="4ab13645-58ab-4075-bf3b-a56895d691e7"
/dev/sda3: UUID="8Hb2ZB-0Fyc-DrhT-ciUd-tggj-PIeh-1m0XT3" TYPE="LVM2_member" PARTUUID="2cef3016-1297-4a87-a26d-0838622bd9e5"
/dev/mapper/centos-root: UUID="62d0ac1c-8d6f-4d33-ac9a-f5d717781594" TYPE="xfs"
/dev/mapper/centos-swap: UUID="8bf34ed7-253a-4d51-803a-614c063077e0" TYPE="swap"
/dev/mapper/centos-home: UUID="6f937442-cde2-44c0-8488-fd82a454919a" TYPE="xfs"
/dev/sda1: PARTUUID="930de3b5-069d-4952-a12a-f4a914521346"
每一行代表一个文件系统,主要列出设备名称、UUID名称以及文件系统的类型(TYPE).
105.parted列出磁盘的分区表类型与分区信息
Model: QEMU QEMU DVD-ROM (scsi)
Disk /dev/sr0: 4521MB
Sector size (logical/physical): 2048B/2048B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system 标志
2 4751kB 41.6MB 36.8MB primary
7.3.2 磁盘分区:gdisk/fdisk
MBR分区表请使用fdisk分区,GPT分区表请使用gdisk分区。
106.gdisk
先查看下自己磁盘下分区结构图,我这里用的是dev/sda;
[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 9.3G 0 part /boot
└─sda3 8:3 0 28.9G 0 part
├─centos-root 253:0 0 9.3G 0 lvm /
├─centos-swap 253:1 0 976M 0 lvm [SWAP]
└─centos-home 253:2 0 18.6G 0 lvm /home
sr0 11:0 1 4.2G 0 rom /run/media/dmtsai/CentOS 7 x86_64
sr1 11:1 1 1024M 0 rom
gdisk/dev/sdb
[root@study ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): ?
b back up GPT data to a file
c change a partition's name 更改一个分区的名字
d delete a partition 删除一个分区
i show detailed information on a partition
l list known partition types
n add a new partition 增加一个分区
o create a new empty GUID partition table (GPT)
p print the partition table 打印出分区表(常用)
q quit without saving changes 不保存分区就直接离开gdisk
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit 保存分区操作后离开
x extra functionality (experts only)
? print this menu
Command (? for help):
Command (? for help): p 输入p可以查看磁盘目前的状态
Disk /dev/sda: 104857600 sectors, 50.0 GiB 磁盘文件名/扇区数与总容量
Logical sector size: 512 bytes
Disk identifier (GUID): C03233DC-4590-4341-BA59-0309EA0087B1 磁盘的GPT标识码
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 24702909 sectors (11.8 GiB)
Number Start (sector) End (sector) Size Code Name 下面为完整的分区信息
1 2048 6143 2.0 MiB EF02
2 6144 19535871 9.3 GiB 0700
3 19535872 80156671 28.9 GiB 8E00
分区编号 开始扇区号码 结束扇区号码 容量大小
command (? for help):q
想要不保存直接输入q不能输入w。
Number:分区编号,1号指的是/dev/vda这样计算。
Start(sector):每一个分区的开始扇区号码位置;
End(sector):每一个分区的结束扇区号码位置,与start之间可以算出分区的总容量;
Size:就是分区的容量;
Code:就是分区内的可能的文件系统类型,Linux为8300,swap为8200,不过这个项目只是一个提示而已,不见得真的代表此分区内的文件系统。
Nanme:文件系统的名称;
从上面可以看出来:
整块磁盘可以进行额外的划分;
分区的设计中,新分区通常选用上一个分区结束扇区号码数家1作为开始扇区号码。
注意:以上使用的磁盘名不要加上数字,因为磁盘分区是针对整个磁盘设备而不是某个分区。
107.用gdisk新增分区;
[root@study ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk /dev/sda: 104857600 sectors, 50.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C03233DC-4590-4341-BA59-0309EA0087B1
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 24702909 sectors (11.8 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 19535871 9.3 GiB 0700
3 19535872 80156671 28.9 GiB 8E00
找到最后一个sector的号码是很重要的。
[root@study ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk /dev/sda: 104857600 sectors, 50.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C03233DC-4590-4341-BA59-0309EA0087B1
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 24702909 sectors (11.8 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 19535871 9.3 GiB 0700
3 19535872 80156671 28.9 GiB 8E00
找到最后一个sector的号码是很重要的
Command (? for help): ? #查一查新分区的命令是什么?
b back up GPT data to a file
c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu
Command (? for help): n #就是这个,所以开始新增的操作。
Partition number (4-128, default 4): 4 #默认就是4,所以也能回车即可。
First sector (34-104857566, default = 80156672) or {+-}size{KMGTP}: 80156672 #也能回车
Last sector (80156672-104857566, default = 104857566) or {+-}size{KMGTP}: +1G #绝不要回车
通过+容量的办法自己去计算扇区号码 绝对不可以使用Last sector的默认值不然会用完磁盘的所有容量,因为他默认的会选择最大的扇区号码。
就可以让gdisk主动去帮你算出最接近你需要容量的扇区号码。
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): #使用默认值即可,直接回车即可。
Changed type of partition to 'Linux filesystem'
这里在让你选择未来这个分区预计使用的文件系统,默认都是Linux文件系统的8300.
Command (? for help): p
Disk /dev/sda: 104857600 sectors, 50.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C03233DC-4590-4341-BA59-0309EA0087B1
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 22605757 sectors (10.8 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
2 6144 19535871 9.3 GiB 0700
3 19535872 80156671 28.9 GiB 8E00
4 80156672 82253823 1024.0 MiB 8300 Linux filesystem
每次用完后在用p命令查看下磁盘的容量
ive MBR; using GPT.
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
gdisk会先警告你可能的问题,我们确定分区是对的,这时才按下y,不过怎么还有警告呢?
这是因为这块磁盘目前正在使用当中,因此系统无法立即加载新的分区表
[root@study ~]# cat /proc/partitions
major minor #blocks name
11 0 4415488 sr0
11 1 1048575 sr1
8 0 52428800 sda
8 1 2048 sda1
8 2 9764864 sda2
8 3 30310400 sda3
253 0 9764864 dm-0
253 1 999424 dm-1
253 2 19533824 dm-2
没有发现vda4、vda5、vda6,这是因为内核还没有更新。
108.partprobe
[root@study ~]# partprobe -s
/dev/sda: gpt partitions 1 2 3
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
/dev/sr0: msdos partitions 2
[root@study ~]# lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 9.3G 0 part /boot
└─sda3 8:3 0 28.9G 0 part
├─centos-root 253:0 0 9.3G 0 lvm /
├─centos-swap 253:1 0 976M 0 lvm [SWAP]
└─centos-home 253:2 0 18.6G 0 lvm /home
[root@study ~]# cat /proc/partitions #内核的分区记录信息
major minor #blocks name
11 0 4415488 sr0
11 1 1048575 sr1
8 0 52428800 sda
8 1 2048 sda1
8 2 9764864 sda2
8 3 30310400 sda3
253 0 9764864 dm-0
253 1 999424 dm-1
253 2 19533824 dm-2
109.用gdisk删除一个分区
[root@study ~]# gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): d
Partition number (1-2): 2
Command (? for help): p
Disk /dev/sda: 104857600 sectors, 50.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): C03233DC-4590-4341-BA59-0309EA0087B1
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 104853437 sectors (50.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 6143 2.0 MiB EF02
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 9.3G 0 part /boot
└─sda3 8:3 0 28.9G 0 part
├─centos-root 253:0 0 9.3G 0 lvm /
├─centos-swap 253:1 0 976M 0 lvm [SWAP]
└─centos-home 253:2 0 18.6G 0 lvm /home
sr0 11:0 1 4.2G 0 rom /run/media/dmtsai/CentOS 7 x86_64
sr1 11:1 1 1024M 0 rom
[root@study ~]# partprobe -s
Error: Partition(s) 2, 3 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.
Warning: 无法以读写方式打开 /dev/sr0 (只读文件系统)。/dev/sr0 已按照只读方式打开。
/dev/sr0: msdos partitions 2
[root@study ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 2M 0 part
├─sda2 8:2 0 9.3G 0 part /boot
└─sda3 8:3 0 28.9G 0 part
├─centos-root 253:0 0 9.3G 0 lvm /
├─centos-swap 253:1 0 976M 0 lvm [SWAP]
└─centos-home 253:2 0 18.6G 0 lvm /home
sr0 11:0 1 4.2G 0 rom /run/media/dmtsai/CentOS 7 x86_64
sr1 11:1 1 1024M 0 rom
110.fdisk
[root@study ~]# fdisk /dev/sda
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):m #输入m后,就会看到下面这些命令介绍:
命令操作
d delete a partition #删除一个磁盘分区
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
l list known partition types
m print this menu
n add a new partition #新增一个磁盘分区
o create a new empty DOS partition table
p print the partition table #在屏幕上新增分区表
q quit without saving changes #不保存离开fdisk程序
s create a new empty Sun disklabel
t change a partition's system id
v verify the partition table
w write table to disk and exit #将刚刚保存的数据写入分区表
x extra functionality (experts only)
命令(输入 m 获取帮助):
7.3.3 磁盘格式化(创建文件系统)
111.XFS文件系统mkfs.xfs
格式化应该叫做创建文件系统(make filesystem)比较合适,所以使用的命令是mkfs。
-b:后面接的是区块内容,可由512到64K,不过最大容量限制为Linux的4K。
[root@study ~]# mkfs.xfs -b
mkfs.xfs:选项需要一个参数 -- b
unknown option -b
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
-d:后面接的是重要的 data section的相关参数值,主要的值有:
agcount=数值:设置需要几个存储群组的意思(AG),通常与CPU有关。
agsize=数值:每个AG设置为多少容量的意思,通常的agcount/agsize只选一个设置即可。
file :指的是[格式化的设备是个文件而不是个设备]的意思,(例如虚拟机磁盘)
size=数值 :data section的容量,亦即你可以不将全部的设备容量用完的意思。
su=数值 :当有RAID时,那个stripe数值的意思,与下面的sw搭配使用。
sw=数值 :当有RAID时,用于保存数据的磁盘数量(须扣除备份盘与备用盘)。
sunit=数值 :与su相当,不过单位使用的是[几个section(512Bytes大小)]的意思。
swidth=数值:就是su*sw的数值,但是以[几个sector(512Bytes)大小]来设置。
[root@study ~]# mkfs.xfs -d
mkfs.xfs:选项需要一个参数 -- d
unknown option -d
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
-f:如果设备内已经有文件系统,则需要使用这个-f来强化格式化才行。
[root@study ~]# mkfs.xfs -f
no device name given in argument list
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
-i:与inode有较相关的设置,主要的设置值有:
size=数值 :最小是256Bytes最大是2K,一般保留256就足够使用了。
internal[0|1]:log设备是否为内置?默认为1内置,如果要用外部设备,使用下面设置。
logdev=device:log设备为后面接的那个设备上面的意思,需设置internal=0才可。
size=数值 :指定这块登录区的容量,通常最小得要有512个区块,大约2M以上才行。
[root@study ~]# mkfs.xfs -i
mkfs.xfs:选项需要一个参数 -- i
unknown option -i
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
-L:后面接这个文件系统的标头名称Lable name的意思。
[root@study ~]# mkfs.xfs -L
mkfs.xfs:选项需要一个参数 -- L
unknown option -L
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
-r:指定realtime section的相关设置值,常见的有:
extsize=数值 ; 就是那个重要的extent数值,一般不需设置,但有RAID时,
最好设置与swidth的数值相同较佳。最小为4K最大为1G。
[root@study ~]# mkfs.xfs -r
mkfs.xfs:选项需要一个参数 -- r
unknown option -r
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
将/dev/sda/sda2格式化为xfs文件系统:
[root@study ~]# mkfs.xfs /dev/sda2
mkfs.xfs: /dev/sda2 contains a mounted filesystem
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
很快格式化完毕,都是用默认值,较重要的是inode与区块的数值。
[root@study ~]# blkid /dev/sda2
/dev/sda2: UUID="14675e74-00c6-424c-9c67-d197f60bbaa0" TYPE="xfs"
确定好创建xfs文件系统了。
找出你系统的CPU数,并据以设置你的gacount数值。
[root@study ~]# grep 'processor' /proc/cpuinfo
processor : 0
[root@study ~]# mkfs.xfs -f -d agcount=2 /dev/sda2
mkfs.xfs: /dev/sda2 contains a mounted filesystem
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
跟前一个案例对比你会发现agcount变成2.
此外,因为已经格式化过一次,因此mkfs.xfs可能会出现不给你格式化的警告,因此需要使用-f。
112.XFS文件系统for RAID性能优化(Optional)
磁盘阵列就是多块磁盘组成一块磁盘并且磁盘的读取速度有所加快。
[root@study ~]# mkfs.xfs -f -d agcount=2,su=256k,sw=7 -r extsize=1792k /dev/sda2
mkfs.xfs: /dev/sda2 contains a mounted filesystem
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
113.ext4文件系统mkfs.ext4
[root@study ~]# mkfs.xfs /dev/sda2
mkfs.xfs: /dev/sda2 contains a mounted filesystem
Usage: mkfs.xfs
/* blocksize / [-b log=n|size=num]
/ metadata / [-m crc=0|1,finobt=0|1,uuid=xxx]
/ data subvol / [-d agcount=n,agsize=n,file,name=xxx,size=num,
(sunit=value,swidth=value|su=num,sw=num|noalign),
sectlog=n|sectsize=num
/ force overwrite / [-f]
/ inode size / [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,
projid32bit=0|1]
/ no discard / [-K]
/ log subvol / [-l agnum=n,internal,size=num,logdev=xxx,version=n
sunit=value|su=num,sectlog=n|sectsize=num,
lazy-count=0|1]
/ label / [-L label (maximum 12 characters)]
/ naming / [-n log=n|size=num,version=2|ci,ftype=0|1]
/ no-op info only / [-N]
/ prototype file / [-p fname]
/ quiet / [-q]
/ realtime subvol / [-r extsize=num,size=num,rtdev=xxx]
/ sectorsize / [-s log=n|size=num]
/ version */ [-V]
devicename
xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).
113.其他文件系统mkfs
mkfs其实是个综合命令而已,当我们使用mkfs -t xfs时,它会跑去找mkfs.xfs相关的参数给我们使用。如果想要知道系统还支持哪些功能可以再按[Tab]按键。
[root@study ~]# mkfs
mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
7.3.4 文件系统校验
114.xfs_repair处理XFS文件系统
-f:后面的设备其实是个文件而不是实体设备:
[root@study ~]# xfs_repair -f
Usage: xfs_repair [options] device
Options:
-f The device is a file
-L Force log zeroing. Do this as a last resort.
-l logdev Specifies the device where the external log resides.
-m maxmem Maximum amount of memory to be used in megabytes.
-n No modify mode, just checks the filesystem for damage.
-P Disables prefetching.
-r rtdev Specifies the device where the realtime section resides.
-v Verbose output.
-c subopts Change filesystem parameters - use xfs_admin.
-o subopts Override default behaviour, refer to man page.
-t interval Reporting interval in seconds.
-d Repair dangerously.
-V Reports version and exits.
-n:单纯检查并不修改文件系统的任何数据(检查而已)
[root@study ~]# xfs_repair -n
Usage: xfs_repair [options] device
Options:
-f The device is a file
-L Force log zeroing. Do this as a last resort.
-l logdev Specifies the device where the external log resides.
-m maxmem Maximum amount of memory to be used in megabytes.
-n No modify mode, just checks the filesystem for damage.
-P Disables prefetching.
-r rtdev Specifies the device where the realtime section resides.
-v Verbose output.
-c subopts Change filesystem parameters - use xfs_admin.
-o subopts Override default behaviour, refer to man page.
-t interval Reporting interval in seconds.
-d Repair dangerously.
-V Reports version and exits.
-d:通常用在单人维护模式下面,针对根目录(/)进行检查与修复的操作,很危险,不要随便使用。
[root@study ~]# xfs_repair -d
Usage: xfs_repair [options] device
Options:
-f The device is a file
-L Force log zeroing. Do this as a last resort.
-l logdev Specifies the device where the external log resides.
-m maxmem Maximum amount of memory to be used in megabytes.
-n No modify mode, just checks the filesystem for damage.
-P Disables prefetching.
-r rtdev Specifies the device where the realtime section resides.
-v Verbose output.
-c subopts Change filesystem parameters - use xfs_admin.
-o subopts Override default behaviour, refer to man page.
-t interval Reporting interval in seconds.
-d Repair dangerously.
-V Reports version and exits.
xfs_repair可以检查/修复文件系统,不过,因为修复文件系统是个很庞大的任务。并且修复文件的时候也不能被挂载,
115.fsck.ext4处理ext4文件系统
fsck是综合命令,如果是针对ext4的话,直接建议使用fsck.ext4来检测比较妥当,那fsck.ext4的选项有下面几个常见的项目:
-p:当文件系统在修复
[root@study ~]# fsck.ext4 -p
Usage: fsck.ext4 [-panyrcdfvtDFV] [-b superblock] [-B blocksize]
[-I inode_buffer_blocks] [-P process_inode_size]
[-l|-L bad_blocks_file] [-C fd] [-j external_journal]
[-E extended-options] device
Emergency help:
-p Automatic repair (no questions)
-n Make no changes to the filesystem
-y Assume "yes" to all questions
-c Check for bad blocks and add them to the badblock list
-f Force checking even if filesystem is marked clean
-v Be verbose
-b superblock Use alternative superblock
-B blocksize Force blocksize when looking for superblock
-j external_journal Set location of the external journal
-l bad_blocks_file Add to badblocks list
-L bad_blocks_file Set badblocks list
注意:通常只有身为root且你的文件系统有问题的时候才使用这个命令,否则在正常状况下使用此命令,否则在正常状况下使用此命令,可能会造成对系统的危害。
被检查的硬盘分区务必不可挂载到系统上,亦即是需要在挂载的状态。
7.3.5 文件系统挂载与卸载
115.要进行挂载前,最好先确定几件事:
单一文件系统不应该被重复挂载多个文件系统;
单一目录不应该重复挂载多个文件系统;
要作为挂载点的目录,理论上应该都是空目录才行;
以上的内容中:如果你要挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时地消失。
mount
-a:依照配置文件/etc/fstab的数据将所有未挂载的磁盘都挂载起来。
-l:单纯地输入mount会显示目前挂载的信息,加上-l可增列Label名称。
-t:可以加上文件系统种类来执行欲挂载的类型,常见的Linux支持类型有:xfs、ext3、ext4、reiserfs
vfat、iso9660(光盘格式)、nfs、cifs、smbfs(后三种为网络文件系统类型)
-n:在默认的情况下,系统会将实际挂载的情况及时写入/etc/mtab中,以利其他程序的运行。
但在某些情况下(单人维护模式)为了避免问题会刻意不写入,此时就得要使用-n选项。
-o:后面可以接一下挂载时额外加上的参数。比如说帐号、密码、读写权限等;
async,sync:此文件系统是否使用同步写入(sync)或非同步(async)的内存机制,请参考文件系统运行方式,默认为async。
atime;noatime:是否修改文件的读取时间(atime)。为了性能,某些时刻可使用noatime。
ro;rw:挂载文件系统成为只读(ro)或可读写(rw)。
auto,noauto:允许此文件系统被以mount -a自动挂载(auto)。
dev,nodev:是否允许此文件系统可建立设备文件?dev为可允许。
suid,nosuid:是否允许此文件系统含有suid/sgid的文件格式?
exec,noexec:是否此文件系统让任何使用者执行mount?一般来说,mount仅有root可以进行,但执行user参数,则可让一般user也能够对此分区进行mount。
defaults:默认值为:rw、suid、dev、exec、auto、nouser、andsync。
remount:重新挂载,这在系统出错,或重新更新参数时很有用。
/etc/filesystems:系统指定的测试挂载文件系统类型的优先级;
/proc/filesystems:Linux系统已经加载的文件系统类型;
/lib/modules/$(uname-r)/kernel/fs/
116.挂载 xfs/ext4/vfat等文件系统:
[root@study ~]# blkid /dev/sda3
/dev/sda3: UUID="8Hb2ZB-0Fyc-DrhT-ciUd-tggj-PIeh-1m0XT3" TYPE="LVM2_member"
[root@study ~]# mkdir -p /sda3
[root@study ~]# df /data/xfs
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 9754624 4944264 4810360 51% /
顺利挂载,且容量约为1G左右没问题。
使用相同的办法将/dev/sda3挂载于/data/sda3。
[root@study ~]# blkid /dev/sda3
/dev/sda3: UUID="8Hb2ZB-0Fyc-DrhT-ciUd-tggj-PIeh-1m0XT3" TYPE="LVM2_member"
[root@study ~]# df /data/ext4
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 9754624 4944328 4810296 51% /
117.挂载CD或DVD光盘:
光驱一挂载之后就无法退出光盘了,除非你将它卸载才能够退出。
118.挂载vfat中文移动磁盘(USB磁盘)
119.重新挂载根目录与挂载不特定目录
根目录是不能够被卸载的,如果你挂载的参数要改变或是根目录出现[只读]状态时,只有重启(reboot)卸载挂载文件。
将/var这个目录暂时挂载到/data/var下面:
[root@study ~]# mkdir /data/var
[root@study ~]# mount --bind /var /data/var
[root@study ~]# ls -lid /var /data/var
69 drwxr-xr-x. 22 root root 4096 8月 17 16:22 /data/var
69 drwxr-xr-x. 22 root root 4096 8月 17 16:22 /var
内容完全一模一样,因为挂载目录的缘故。
[root@study ~]# mount |grep var
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/mapper/centos-root on /data/var type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
120.umount(将设备文件卸载):
-f:强制卸载,可用在类似的网络文件系统(NFS)无法读取到的情况下;
-l:立刻卸载文件系统,比-f还强;
-n:不更新/etc/mtab情况下卸载;
7.3.6 磁盘/文件系统参数自定义
121.mknod:
Linux下面所有的设备都是以文件来表示,文件如何代表设备?很简单,就是通过文件的major与minor数值来替代。
/dev/sda下设备的代码:
[root@study ~]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 8月 26 13:06 /dev/sda
brw-rw----. 1 root disk 8, 1 8月 27 09:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 8月 26 13:06 /dev/sda2
brw-rw----. 1 root disk 8, 3 8月 26 13:06 /dev/sda3
常见的磁盘文件名/dev/sda与/dev/loop0的设备代码如下:
磁盘文件名 major minor
/dev/sda 8 0~15
/dev/sdb 8 16~31
/dev/loop0 7 0
/dev/loop1 7 1
上述介绍我们知道/dev/sda3设备代码252 10,请建立并查看此设备。
[root@study ~]# mknod /dev/vda10 b 252 10
[root@study ~]# ll /dev/sda3
brw-rw----. 1 root disk 8, 3 8月 26 13:06 /dev/sda3
以上的255与10是有意义的,不要随意设置。
建立一个FIFO文件,文件名为/tmp/testpipe
[root@study ~]# mknod /tmp/testpipe p
[root@study ~]# ll /tmp/testpipe
prw-r--r--. 1 root root 0 8月 27 14:37 /tmp/testpipe
注意,这个文件可不是一般文件,不可以随便就放在这里。
测试完毕后请删除这个文件,看一下这个文件的类型,是P。
[root@study ~]# rm /dev/sda3 /tmp/testpipe
rm:是否删除块特殊文件 "/dev/sda3"?
122.xfs_admin修改XFS文件系统的UUID与Label name
123.tune2fs修改ext4的label name与UUID
7.4 设置启动挂载
7.4.1 启动挂载/etc/fstab及/etc/mtab
124.系统挂载的一些限制条件?
(1)根目录/是必须挂载的,而且一定要先于其他挂载点(mount point)被挂载起来。
(2)其他挂载点必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构原则(FHS)。
(3)所有挂载点在同一时间之内,只能挂载一次。
(4)所有硬盘分区在同一时间之内,只能挂载一次。
(5)如若进行卸载,您必须先将工作目录移动到挂载点(及其子目录)之外。
查询一下/etc/fstab这个文件的内容:
[root@study ~]# cat /etc/fstab
/etc/fstab
Created by anaconda on Tue Aug 4 13:26:09 2020
Accessible filesystems, by reference, are maintained under '/dev/disk'
See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos-root / xfs defaults 0 0
UUID=14675e74-00c6-424c-9c67-d197f60bbaa0 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/etc/fstab(filesystem table)就是在我们利用mount命令进行挂载时,将所有的选项与参数写入的文件。除此之外/etc/fstab还加入dump这个备份用命令的支持,与启动时是否进行文件系统检验fsck等命令有关。这个文件的命令共有六个字段:
第一栏:磁盘设备文件名/UUID/LABEL name
这个字段可以填写的数据主要有三个项目:
文件系统或磁盘的设备文件名,如/dev/sda2等;
文件系统的UUID名称,如UUID=xxx;
文件系统的LABEL名称,例如LABEL=xxx;
第二栏:挂载点(mount point)
挂载点是什么?一定是目录。
第三栏:磁盘分区的文件系统
在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要写入文件系统才行,包括xfs、ext4、vfat、reiserfs等;
第四栏:磁盘分区的文件系统
参数 内容意义
async/sync 异步/同步 设置磁盘是否以异步方式运行,默认为async(性能较佳)
auto/noatuo 自动/非自动 当执行 mount -a时,此文件系统默认是否会被主动测试挂载,默认为auto
rw/o 可擦写/只读 让该分区以可读写或只读的状态挂载上来,如果你想要分享的数据是不给用户随意变更,这里也能够设置为只读,则
不论在此文件系统的文件是否设置w权限,都无法写入。
exec/noexec 可执行/不可执行 限制在此文件系统内是否可以进行[执行]的工作?如果是纯粹用来存储数据的目录,那么可以设置为noexec会比较安
全。不过,这个参数也不能随便使用,因为你不知道该目录下是否默认会有执行文件。
user/nouser 允许/不允许用户挂载 是否允许用户使用mount命令来挂载?一般而言,我们当然不希望一般身份的user能使用mount,因为太不安全了,
因此太不安全,因此这里应该要设置为nouser。
suid/nosuid 具有/不具有suid权限 该文件系统是否允许SUID的存在?如果不是执行文件放置目录,也可以设置为nosuid来取消这个功能。
dedaults 同时ju'y具有rw、suid、dev、exec、auto、nouser、async等参数,基本上,默认情况使用defaults设置即可。
第五栏:能否被dump备份命令使用
dump是y一个y用来做为备份的命令,不过现在y有太多的备份方案,所以这个项目可以不要理会,直接输入0就好。
第六栏:是否以fsck检验扇区
早期的启动流程,会有一段时间去检验本机的文件系统,看看文件是否完整(clean)。
[root@study ~]# umount /dev/sda2 卸载挂载的磁盘
测试下写入的/etc/fstab的语法有没有错误,这点很重要。因为这个文件如果写错了,则你的Linux很可能无法顺利启动完成。
[root@study ~]# mount -a
[root@study ~]# df /data/xfs
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 9754624 4953216 4801408 51% /
/etc/fstab是启动时的配置文件,不过,实际文件系统的挂载是记录到/etc/mtab与/proc/mounts这两个文件中。
[root@study ~]# mount -n -o remount,rw /
7.4.2 特殊设备loop挂载(镜像文件不刻录就挂载使用)
125.挂载CD/DVD镜像文件
[root@study ~]# ll /data/centos_dvd
总用量 0
测试完成后需要将设备拆除。
126.建立大文件以制作loop设备文件:
127.建立大型文件:
dd就好像在叠砖一样,将512块、每块1MB的砖块堆砌成为一个大文件(/srv/loopdev),最终就会出现一个512MB的大文件。
128.大型文件的格式化
默认xfs是不能够格式化的文件,所以要格式化文件得要加入特别的参数才行,让我们自己看下:
129.挂载:
如何挂载就是利用mount特殊参数,就是-o loop的参数来处理。
7.5 内存交换分区(swap)之创建
130.怎么样建立你的内存交换分区?
设置一个内存交换分区
建立一个虚拟内存的文件
7.5.1 使用物理分区创建内存交换分区
131.建立内存交换分区的步骤?
(1)分区:先使用gdisk在你的磁盘中划分一个分区给系统作为内存交换分区,由于Linux的gdisk默认会将分区的ID设置为Linux的文件系统,所以你可能还要设置一下system ID。
(2)格式化:利用建立内存交换分区格式的[mkswap 设备文件名]就能够格式化该分区成为内存交换分区格式。
(3)使用:最后将该swap设备启动,方法为[swapon设备文件名]。
(4)观察:最后通过free与swapon -s这个命令来观察一下内存的使用量。
1.先进行分区操作:
[root@study ~]# gdisk /dev/sda2
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-19529694, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-19529694, default = 19529694) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sda2: 19529728 sectors, 9.3 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 0D635784-4FB5-4BDD-A2EC-CE18B320C838
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 19529694
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 19529694 9.3 GiB 8300 Linux filesystem
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda2.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
鸟哥有简化输出,结果可以看到我们多了一个/dev/sda2可以使用于内存交换分区。
2.开始创建swap格式:
3.开始观察与加载看看
7.5.2 使用文件创建内存交换文件
1.使用dd这个命令在/tmp下面新增一个128MB的文件
[root@study ~]# mkswap /dev/sda1
mkswap: /dev/sda1: warning: wiping old vfat signature.
正在设置交换空间版本 1,大小 = 2044 KiB
无标签,UUID=4ca6ab57-0dfa-465b-8184-db9b8681a55b
[root@study ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128
记录了128+0 的读入
记录了128+0 的写出
134217728字节(134 MB)已复制,0.465493 秒,288 MB/秒
2.使用mkswap将/tmp/swap这个文件格式化为内存交换文件的文件格式:
[root@study ~]# mkswap /tmp/swap
正在设置交换空间版本 1,大小 = 131068 KiB
无标签,UUID=ae9feabe-04e2-4a3f-a1c6-ad1f6692eeb2
3.使用swapon来将/tmp/swap启动
[root@study ~]# swapon /tmp/swap
swapon: /tmp/swap:不安全的权限 0644,建议使用 0600。
[root@study ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/dm-1 partition 999420 184744 -1
/tmp/swap file 131068 0 -2
4.使用swapoff关闭swap file,并设置自动启动
7.6 文件系统的特殊观察与操作
7.6.1 磁盘空间之浪费问题
[root@study ~]# ll -sh
总用量(total) 20K
4.0K -rw-------. 1 root root 2.3K 8月 4 14:31 anaconda-ks.cfg
4.0K -rwxrwxrwx. 2 777 root 176 12月 29 2013 bashrc_hlink
0 lrwxrwxrwx. 1 root root 7 8月 15 11:04 bashrc_slink -> .bashrc
0 lrwxrwxrwx. 1 root root 4 8月 25 15:44 bin -> /bin
4.0K -rw-r--r--. 2 root root 451 6月 10 2014 crontab
0 lrwxrwxrwx. 1 root root 12 8月 25 14:54 crontab2 -> /etc/crontab
4.0K -rw-r--r--. 1 root root 2.3K 8月 4 14:32 initial-setup-ks.cfg
4.0K -rw-r--r--. 1 root root 2.2K 8月 17 16:22 passwd
0 -rw-rw-r--. 1 root root 0 8月 17 15:39 test3
0 drwxrwxr-x. 2 root root 6 8月 17 15:39 test4
0 -rw-r--r--. 1 root root 0 8月 17 14:18 testtouch
0 -rw-r--r--. 1 root root 0 8月 17 14:18 touchtest
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 公共
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 模板
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 视频
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 图片
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 文档
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 下载
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 音乐
0 drwxr-xr-x. 2 root root 6 8月 5 09:54 桌面
7.6.2 利用GNU的parted进行分区操作(可选)
parted可以直接在一行命令行就完成分区,是一个非常好用的命令,常用的语法如下:
[root@study ~]# parted /dev/sda3 print
Model: 未知 (unknown)
Disk /dev/sda3: 31.0GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
[root@study ~]# parted /dev/sda2 print
Model: 未知 (unknown)
Disk /dev/sda2: 9999MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 9999MB 9998MB Linux filesystem
[root@study ~]# parted /dev/sda1 print
Model: 未知 (unknown)
Disk /dev/sda1: 2097kB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system 标志
1 0.00B 2097kB 2097kB linux-swap(v1)
1.Number:分区的号码。
2.Start:分区的起始位置在这块磁盘的多少MB处?
3.End:此分区的结束位置在这块磁盘的多少MB处?
4.Size:由上述两者的分析,得到这个分区有多少容量。
5.File system:分析可能的文件系统类型是什么意思。
6.Name:就如同gdisk与System ID之意
Start与End单位不一致,如果你想要固定单位。
[root@study ~]# parted /dev/sda3 unit mb print
Model: 未知 (unknown)
Disk /dev/sda3: 31038MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
如果你想要将MBR改成GPT分区表,或原本的GPT分区表改成MBR分区表,也能使用parted,但是请不要使用vda来测试,因为分区表格式不能转换。
第8章 文件与文件系统的压缩
8.1 压缩文件的用途与技术
130.什么叫压缩比?
压缩后与压缩的文件所占用的磁盘空间大小,就可以被称为是压缩比。
8.2 Linux系统常见的压缩命令
131.Linux常见的压缩文件扩展名?
*.Z compress程序压缩的文件;
*.zip zip程序压缩的文件;
*.gz gzip程序压缩的文件;
*.bz2 bzip2程序压缩的文件;
*.xz xz程序压缩的文件
*.tar tar程序打包的文件
*.tar.gz tar程序打包的文件,并且经过gzip的压缩;
*.tar.bz2 tar程序打包的文件,并且经过bzip2的压缩;
*.tar.xz tar程序打包的文件,并且经过x的压缩;
Linux常见的压缩命令就是gzip、bzip2以及最新的xz
8.2.1 gzip,zcat/zmore/zless/zgrep
132.找出/etc下面(不含子目录)容量最大的文件,并将它复制到/tmp,然后以gzip压缩。
[root@study ~]# ls -ldSr /etc/* ;
-rw-r--r--. 1 root root 0 6月 10 2014 /etc/wvdial.conf
-rw-r--r--. 1 root root 0 4月 1 12:29 /etc/subuid
-rw-r--r--. 1 root root 0 4月 1 12:29 /etc/subgid
-rw-r--r--. 1 root root 0 6月 7 2013 /etc/motd
-rw-r--r--. 1 root root 0 6月 7 2013 /etc/exports
-rw-r--r--. 1 root root 0 4月 1 12:29 /etc/environment
-rw-------. 1 root root 0 8月 4 13:26 /etc/crypttab
-rw-------. 1 root root 0 8月 3 2017 /etc/cron.deny
......
-rw-r--r--. 1 root root 7265 8月 4 13:47 /etc/kdump.conf
-rw-r--r--. 1 root root 8892 6月 10 2014 /etc/nanorc
drwxr-xr-x. 2 root root 12288 8月 4 13:51 /etc/brltty
-rw-r--r--. 1 root root 12288 8月 4 16:28 /etc/aliases.db
-rw-r--r--. 1 root root 14392 8月 4 2017 /etc/autofs.conf
-rw-r--r--. 1 root root 21929 8月 7 2017 /etc/brltty.conf
-rw-r--r--. 1 root root 26832 8月 3 2017 /etc/dnsmasq.conf
-rw-r--r--. 1 root root 51787 5月 15 2013 /etc/mime.types
-rw-r--r--. 1 root root 88518 8月 14 13:56 /etc/ld.so.cache
-rw-r--r--. 1 root root 670293 6月 7 2013 /etc/services
8.3 打包命令
133.tar
最简单使用tar就只要记住下面命令即可:
压缩:tar-jcv -f filename.tar.bz2 要被压缩的文件或目录名称;
查询;tar-jtv-f filename.tar.bz2;
解压缩:tar-jxv-f filename.tar.bz2-C欲解压缩的目录
使用tar加入-z、-j或-J的参数备份/etc/目录
[root@study ~]# time tar -zpcv -f /root/etc.tar.gz /etc
.....
/etc/fcoe/
/etc/fcoe/cfg-ethx
/etc/sudoers.d/
real 0m13.325s #多了time会显示程序运行的时间,看real就好了,花去了13.325s
user 0m2.703s
sys 0m0.464s
由于加上了-v这个选项,因此正在作用中的文件名就会显示在屏幕上。
如果你可以翻到第一页,会发现出现上面的错误信息,
至于-p的选项,重点在于[保留原本文件的权限与属性]之意
[root@study ~]# time tar -jpcv -f /root/etc.tar.bz2 /etc
....
/etc/fcoe/
/etc/fcoe/cfg-ethx
/etc/sudoers.d/
real 0m7.798s
user 0m7.374s
sys 0m0.181s
显示的信息会跟上面一样,不过花的时间会更多,使用-J时,会花更多时间。
[root@study ~]# ll /root/etc*
-rw-r--r--. 1 root root 10607785 9月 3 09:35 /root/etc.tar.bz2
-rw-r--r--. 1 root root 12447424 9月 3 09:30 /root/etc.tar.gz
[root@study ~]# du -sm /etc
44 /etc #实际占有28MB的意思
备份的数据越大花费的时间相对也是越大的
加上[-P]这个选项的原因是为了保存原本文件的权限与属性。
查看tar文件的数据内容(可查看文件名),与备份文件名有否根目录的意义
[root@study ~]# tar -jtv -f /root/etc.tar.bz2
.......
-rw-r--r-- root/root 44 2014-06-10 06:49 etc/setuptool.d/99timeconfig
-rw-r--r-- root/root 3390 2017-08-08 05:18 etc/nfsmount.conf
drwxr-xr-x root/root 0 2020-08-04 13:59 etc/fcoe/
-rw-r--r-- root/root 678 2017-08-08 09:45 etc/fcoe/cfg-ethx
drwxr-x--- root/root 0 2017-08-04 22:38 etc/sudoers.d/
查看tar文件内部的文件列表非常的简单
如果加上-v详细文件权限/属性都会被列出来。
如果只是想文件名那么可以不加上-v
我们使用tar备份的数据的时候可能需要解压缩回来使用,在tar所记录的文件名(就是我们刚刚使用tar -jtvf所查看到的文件名)那就是解压缩后的实际文件名。
如果没有去掉根目录,解压缩后的文件名就会是绝对路径,即解压缩后的数据一定会放置到/etc/xxx去。如此一来,你的原本的/etc/下面的数据,就会被备份数据所覆盖。
[root@study ~]# tar -jpPcv -f /root/etc.and.root.tar.bz2 /etc
......
/etc/setuptool.d/99system-config-firewall-tui
/etc/setuptool.d/99system-config-network-tui
/etc/setuptool.d/99timeconfig
/etc/nfsmount.conf
/etc/fcoe/
/etc/fcoe/cfg-ethx
/etc/sudoers.d/
如果加上-P这个选项,那么文件内的根目录就会存在。
将备份的数据解压?很简单的办法就是直接进行解压打包。
[root@study ~]# tar -jxv -f /root/etc.tar.bz2
.....
etc/setuptool.d/99timeconfig
etc/nfsmount.conf
etc/fcoe/
etc/fcoe/cfg-ethx
etc/sudoers.d/
此时该打包文件会在本目录下进行解压缩的操作。
[root@study ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
.....
etc/nfsmount.conf
etc/fcoe/
etc/fcoe/cfg-ethx
etc/sudoers.d/
将文件在不同的目录解开。
[root@study ~]# rm -rf /root/etc /tmp/etc
处理完成后将这两个文件删除。
仅解开单一文件的方法:
使用-jtv找到你想要的文件名,然后将该文件名解开即可:
先找到我们要的文件名,假设解开shadow文件。
[root@study ~]# tar -jtv -f /root/etc.tar.bz2 | grep 'shadow'
-rw-r--r-- root/root 214 2017-08-08 05:38 etc/pam.d/sssd-shadowutils
---------- root/root 762 2020-08-17 16:22 etc/gshadow
---------- root/root 1241 2020-08-17 16:22 etc/shadow
---------- root/root 751 2020-08-15 15:50 etc/gshadow-
---------- root/root 1219 2020-08-15 15:50 etc/shadow-
先查找重要的文件名,其中那个grep是[截取]关键词的功能
这里需要有个概念管道|配合grep可以截取关键词的意思。
将该文件解开,语法与实际做法如下:
[root@study ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow
etc/shadow
[root@study ~]# ll etc
总用量 4
----------. 1 root root 1241 8月 17 16:22 shadow
很有趣。此时只会解开一个文件而已不过,重点是那个文件名,你需要找到正确的文件名。
在上例中,你不能写成/etc/shadow,因为记录在etc.tar.bz2内的并没有。
打包某目录,但不含该目录下的某些文件之做法
仅备份比某个时刻还要新的文件
-newer
--newer-mtime
使用find找出比/etc/passwd还要新的文件。
[root@study ~]# find /etc -newer /etc/passwd
/etc
/etc/logrotate.d
/etc/shadow
/etc/selinux/.config.swp
/etc/sysconfig
/etc/cups
/etc/cups/subscriptions.conf.O
/etc/cups/subscriptions.conf
/etc/systemd/system/multi-user.target.wants
/etc/systemd/system/multi-user.target.wants/httpd.service
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.modules.d
/etc/httpd/logs
/etc/httpd/modules
/etc/httpd/run
此时会显示比/etc/passwd这个文件的mtime还要新的文件名。
这个结果在每台主机都不相同,您先行查看自己的主机即可
[root@study ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2221 8月 17 16:22 /etc/passwd
那么使用tar来进行打包!日期为上面看到的2020/09/03。
基本名称:ru'g、tarball?
如果没有进行压缩的支持,例如[tar-jcv-f file.tar.bz2]时,我们就称为tarball。
特殊应用:利用管道命令与数据流
在tar的使用中,有一种特殊的方式,那就是通过标准输入输出的数据流重定向(standard input/standard output),以及管道命令(pipe)的方式,将待处理的文件一边打包一边解压缩到目标目录。
将/etc整个目录一边打包一边在/tmp解开
[root@study tmp]# tar -cvf - /etc | tar -xvf -
134.将备份的数据解压缩,并考虑特定目录的解压缩操作(-C选项的应用)
[root@vibird ~]# tar -jxv -f /root/etc.tar.bz2
tar (child): /root/etc.tar.bz2: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
[root@vibird ~]# ll
total 8
-rw-------. 1 root root 1784 Sep 3 19:29 anaconda-ks.cfg
-rw-r--r--. 1 root root 1815 Sep 8 13:14 initial-setup-ks.cfg
此时打包文件会在本目录下进行解压缩的操作。
[root@vibird tmp]# ll /tmp
total 12
-rw-r--r--. 1 root root 1661 Sep 8 13:14 anaconda.log
drwxr-xr-x. 2 root root 18 Sep 3 18:45 hsperfdata_root
-rw-r--r--. 1 root root 574 Sep 8 13:14 ifcfg.log
-rwx------. 1 root root 836 Sep 3 19:28 ks-script-QtDX9z
-rw-r--r--. 1 root root 0 Sep 8 13:14 packaging.log
-rw-r--r--. 1 root root 0 Sep 8 13:14 program.log
-rw-r--r--. 1 root root 0 Sep 8 13:14 sensitive-info.log
-rw-r--r--. 1 root root 0 Sep 8 13:14 storage.log
drwx------. 3 root root 17 Sep 8 13:14 systemd-private-28269a09e5494ef0b8850685d620fcb1-colord.service-24jEYX
drwx------. 3 root root 17 Sep 8 13:13 systemd-private-28269a09e5494ef0b8850685d620fcb1-cups.service-GRMed0
drwx------. 3 root root 17 Sep 8 13:13 systemd-private-28269a09e5494ef0b8850685d620fcb1-rtkit-daemon.service-WqcvUJ
-rw-------. 1 root root 0 Sep 3 18:30 yum.log
[root@vibird ~]# rm -rf /root/etc /tmp/etc
清除使用过的目录。
135.解开单一文件的办法:
如果我只想打开包文件内的其中一个文件而已,可以使用-jtv找到你想要的文件。然后将该文件解开即可:
136.解压缩后的SELinux问题:
SELinux的权限问题可能会让你的系统无法读写某些配置文件内容,导致影响到系统的正常使用。
137.如何解决系统备份后无法恢复正常?
通过各种可行的恢复方式deng'lu系统,然后修改/etc/selinux/config文件,将SELinux改成permissive模式,重新启动后系统就正常了。
在第一次恢复系统后,不要立刻重新启动,先使用restorecon -Rv /etc自动修复一下SELinux的类型即可。
通过各种可行的方式登录系统,建立/.autorelabel文件,重新启动后系统会自动修复SELinux的类型,并且又会再次重新启动之后就正常了。
8.4 XFS文件系统的备份与还原
8.4.1 XFS文件系统备份xfsdump
138.什么叫增量备份?
第一次备份磁盘的所有文件叫做完整备份(full backup);以后磁盘文件如果有增加再次备份时候不会备份已经备份过得文件,这种备份增加的文件备份叫做增量备份。
完整备份在xfsdump当中被定义为level 0.
使用xfsdump时,注意以下的限制:
xfsdump不支持没有挂载的文件系统备份,所以只能备份已经挂载的文件系统;
xfsdump必须使用root的权限才能操作(涉及文件系统的关系)
xfsdump只能备份xfs文件系统;
xfsdump备份下来的数据(文件或存储媒介)只能让xfsrestore解析;
xfsdump是通过文件系统UUID来辨别各备份文件,因此不能备份两个具有相同UUID的文件系统。
xfsdump默认只支持文件系统的备份,并不支持特定目录的备份,所以你不能用xfsdump去备份/etc,因为/etc从来就不是一个独立的文件系统。
139.用xfsdump备份完整的文件系统。
先确定/boot是独立的文件系统
[root@vibird ~]# df -h /boot
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 1014M 210M 805M 21% /boot
的出来结论,/boot是挂载点。
将完整的文件名记录成为/srv/boot.dump。
[root@vibird ~]# xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 0 dump of vibird.study.centos:/boot #开始备份本机/boot
xfsdump: dump date: Thu Sep 10 14:58:22 2020 #备份的时间
xfsdump: session id: 2a906913-7eaf-499d-83e3-4273ae3c83d8 #这次dump的ID
xfsdump: session label: "boot_all" #简单给予一个名称
xfsdump: ino map phase 1: constructing initial dump list #开始备份程序
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 185303168 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 184993792 bytes
xfsdump: dump size (non-dir files) : 184746544 bytes
xfsdump: dump complete: 5 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /srv/boot.dump OK (success)
xfsdump: Dump Status: SUCCESS
在命令的执行方面,你也可以不加-L及-M,只是那就会进入交互模式,要求你回车。
而执行xfsdump的过程中会出现如上的一些信息,您可以仔细的观察。
[root@vibird ~]# ll /srv/boot.dump
-rw-r--r--. 1 root root 184993792 Sep 10 14:58 /srv/boot.dump
[root@vibird ~]# ll /var/lib/xfsdump/inventory
total 16
-rw-r--r--. 1 root root 312 Sep 10 14:58 8c566167-d46a-4bb4-89eb-906adf667856.InvIndex
-rw-r--r--. 1 root root 5080 Sep 10 14:58 9a70e0ce-10cb-4f74-bfdc-0cd6d9ffa4ab.StObj
-rw-r--r--. 1 root root 576 Sep 10 14:58 fstab
使用了xfsdump之后才会有上述/var/lib/xfsdump/inventory内的文件产生。
140.用xfsdump进行增量备份(Incremental backups)
0. 看一下没有任何文件系统被xfsdump过得数据?
[root@vibird ~]# xfsdump -I
file system 0:
fs id: 8c566167-d46a-4bb4-89eb-906adf667856
session 0:
mount point: vibird.study.centos:/boot
device: vibird.study.centos:/dev/sda2
time: Thu Sep 10 14:58:22 2020
session label: "boot_all"
session id: 2a906913-7eaf-499d-83e3-4273ae3c83d8
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /srv/boot.dump
start: ino 69 offset 0
end: ino 1572935 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 184993792
mfile start: ino 69 offset 0
mfile end: ino 1572935 offset 0
media label: "boot_all"
media id: 6508e3ba-716f-433e-9224-b3f06dc00357
xfsdump: Dump Status: SUCCESS
我们可以看到目前仅有一个session 0的备份数据而已,而且是level 0。
[root@vibird ~]# dd if=/dev/zero of=/boot/testing.img bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.0123541 s, 849 MB/s
开始建立差异备份文件,此时我们使用level 1。
[root@vibird ~]# xfsdump -l 1 -L boot_2 -M boot_2 -f /srv/boot.dump1 /boot
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsdump: level 1 incremental dump of vibird.study.centos:/boot based on level 0 dump begun Thu Sep 10 14:58:22 2020
xfsdump: dump date: Thu Sep 10 15:22:43 2020
xfsdump: session id: 96d490fe-a818-4f6f-9c2e-b4c22b29fbfa
xfsdump: session label: "boot_2"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: pruning unneeded subtrees
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 10506880 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 10510952 bytes
xfsdump: dump size (non-dir files) : 10488008 bytes
xfsdump: dump complete: 2 seconds elapsed
xfsdump: Dump Summary:
xfsdump: stream 0 /srv/boot.dump1 OK (success)
xfsdump: Dump Status: SUCCESS
看看文件大小,就是刚刚建立的文件大小。
最后再看一下是否记录level 1备份的时间?
[root@vibird ~]# xfsdump -I
file system 0:
fs id: 8c566167-d46a-4bb4-89eb-906adf667856
session 0:
mount point: vibird.study.centos:/boot
device: vibird.study.centos:/dev/sda2
time: Thu Sep 10 14:58:22 2020
session label: "boot_all"
session id: 2a906913-7eaf-499d-83e3-4273ae3c83d8
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /srv/boot.dump
start: ino 69 offset 0
end: ino 1572935 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 184993792
mfile start: ino 69 offset 0
mfile end: ino 1572935 offset 0
media label: "boot_all"
media id: 6508e3ba-716f-433e-9224-b3f06dc00357
session 1:
mount point: vibird.study.centos:/boot
device: vibird.study.centos:/dev/sda2
time: Thu Sep 10 15:22:43 2020
session label: "boot_2"
session id: 96d490fe-a818-4f6f-9c2e-b4c22b29fbfa
level: 1
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /srv/boot.dump1
start: ino 89 offset 0
end: ino 90 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 10510952
mfile start: ino 89 offset 0
mfile end: ino 90 offset 0
media label: "boot_2"
media id: 28511ce2-f013-49fd-b668-24c47af4314d
xfsdump: Dump Status: SUCCESS
通过这个方式我们可以备份差异文件的部分。
8.4.2 XFS文件系统还原xfsrestore
141.用xfsrestore观察xfsdump后的备份数据内容
[root@vibird ~]# xfsrestore -I
file system 0:
fs id: 8c566167-d46a-4bb4-89eb-906adf667856
session 0:
mount point: vibird.study.centos:/boot
device: vibird.study.centos:/dev/sda2
time: Thu Sep 10 14:58:22 2020
session label: "boot_all"
session id: 2a906913-7eaf-499d-83e3-4273ae3c83d8
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /srv/boot.dump
start: ino 69 offset 0
end: ino 1572935 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 184993792
mfile start: ino 69 offset 0
mfile end: ino 1572935 offset 0
media label: "boot_all"
media id: 6508e3ba-716f-433e-9224-b3f06dc00357
session 1:
mount point: vibird.study.centos:/boot
device: vibird.study.centos:/dev/sda2
time: Thu Sep 10 15:22:43 2020
session label: "boot_2"
session id: 96d490fe-a818-4f6f-9c2e-b4c22b29fbfa
level: 1
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: /srv/boot.dump1
start: ino 89 offset 0
end: ino 90 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 10510952
mfile start: ino 89 offset 0
mfile end: ino 90 offset 0
media label: "boot_2"
media id: 28511ce2-f013-49fd-b668-24c47af4314d
xfsrestore: Restore Status: SUCCESS
要找出xfsdump的内容就使用xfsrestore -l来查看即可,不需要加任何参数,因为xfsdump与xfsrestore都会到/var/lib/xfsdump/inventory/里面去取数据来显示,因此两者输出是相同的。
将不重要的数据删除,所以上面的输出是经过简化的结果。
我们可以看到这个文件系统是/boot挂载点,然后有两个备份,一个是level 0 一个level 1。
也看到这两个备份的数据它的内容大小,更重要的就是那个session label。
141.简单恢复level 0的文件系统
直接将数据给它覆盖回去即可:
8.5 光盘写入工具
8.5.1 mkisofs:建立镜像文件
142.制作一般数据光盘镜像文件
mkisofs有非常多好用的选项可以选择,如果我们只是想要制作数据光盘,上述的选项就足够了。光盘的格式一般称为is9660,这种格式一般仅支持旧版的DOS文件名,亦即文件名只能以8.3(文件名8个字符,扩展名3个字符)的方式存在的。加上-r的选项后文件名展示的就比较完整。
所有要被加到镜像文件中的文件都会被放置到镜像文件中的根目录,可能会造成刻录后文件名分类不清的问题。
镜像文件中的目录所在等于实际Linux文件系统的目录所在;
/movies/=/srv/movies/(在Linux的/srv/movies内的文件,加至镜像文件中的/movies/的目录);
/linux/etc=/etc(将Linux中的/etc/内的所有数据备份到镜像文件中的/linux/etc/目录)。