私房菜第二篇 linux文件、目录与磁盘格式
linux系统中比较羽肿不同的是有一个用户和群组的概念,不同的这主要是为了给用户权限,实现一套linux平台的文件的安全机制。
文件权限
列出文件
ls -al //将列出包括隐含文件在内的所有文件,并且能够列出文件的类型,权限归属等属性,见下图
这一块将的甚是详细,可以认真参阅原书。这里这提示一种需要注意的情况:
drwx---r-- 2 root root 4096 Oct 19 21:24 tmp/
该目录是非root账号的其他用户均不可进入
tmp/目录,因为x与目录的关系相当重要,如果您在该目录下不能执行任何指令,那么自然
也就无法执行ls,cd等指令,所以,也就无法进入。因此,请特别注意,如果您想开放某个
目录,请记得将该目录的x属性也开放。
改变文件或目录所属的用户或者用户组,文件->用户
改变文件所属群组 change group
chgrp 群组名称 文件或目录
chgrp users tmp
改变文件的拥有者 change own===>chown
chown [ -R ] 账号名称文件或目录
chown [ -R ] 账号名称:群组名称文件或目录
[-R]参数实现递归作用,如果目录县还有目录或者文件,不断的递归改变他们的权限
改变文件的归属,什么时候用呢最常见的就是复制一个文件给某人的时候,复制文件之后,一定要修改文件的属性,不然别人是没有rwx的权限的
修改文件的权限 chmod 这是 用户 - > 文件
数字类型改变文件的权限
r 4
w 2
x 1
[ -rwxrwxrwx ]这9个属性是三三一组,把同一组的数字相加,
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
所以,三组属性生成的数值就是770
chmod的语法:
chmod [-R] xyz 文件或目录 //xyz是421组合相加的某一个结果
最常发生的一个问题是,我们以vi编辑一个shell的文本文件后,
它的属性通常是-rw-rw-rw-即666的属性,如果要将它变成可执行文件,并且不让他人修改,
就需要-rwxr-xr-x即755的属性,所以需要输入chmod 755 test.sh。
符号类型改变文件形态
,基本上9个属性分别是user,group和others三组,那么我们可以用u,g和o来代表3个组的属性。此外,a则代表all亦即全部的三个组
示意图如下:
假如要把一文件的属性设定为-rwxr-xr-x,如下:
chmod u=rwx,og=rx .bashrc
请注意,r=rwx,og=rx这一段文字之间并没有用空格符隔开
给所有人加入写入权限chmod a+w .bashrx
, 给所有人取出执行权限chmod a-x .bashrc
---
---
linux文件系统的格式与种类
ext级别的,现在估计 都ext4了吧,有些distro版本支持ntfs有些不支持。
文件种类
- 正规文件(regular file):就是一般类型的文件,即由ls -al显示出的文件中其第一个属性为[ - ]的文件。另外,依照文件的内容,又可以将其细分为下列两种:
- 纯文本文件(ASCII):这是Unix系统中最多的一种类型,我们可以用来设定的文件几乎都属于这一种;
- 二进制文件(binary):通常除了脚本(文字型批处理文件)之外,执行文件就是这种文件格式。
- 目录(directory):就是目录,其第一个属性为[ d ]。
- 链接文件(link):类似Windows下的快捷方式,其第一个属性为[ l ]。
- 设备文件(device):与系统外设相关的文件,通常都集中在/dev目录下。通常又分为两种:
- 块(block)设备文件:就是用于储存数据以提供系统存取的接口设备,简单地说就是硬盘。例如您的主硬盘代码是/dev/hda1。这类文件的第一个属性[ b;
字符(character)设备文件:即一些串行端口的接口设备,例如键盘、鼠标等。这类文件的第一个属性为[ c ]
文件的后缀名
原则上来时,从文件的种类就能看出是哪一类文件,所以linux中可以不用后缀名,但是我们往往会加上一些有意义的后缀,当我们看到后缀,就知道这个文件的用途
- 批处理文档(脚本):通常以*.sh代表(因为批处理文档使用shell写成,所以后缀名为.sh);
- 打包或压缩文档:通常后缀名为.Z,.tar,.tar.gz,.zip,*.tgz等,这是因为压缩软件分别为gunzip,tar等,其后缀名因不同的压缩软件而不同。
网页文件:通常使用.html与.php等后缀名,
linux中的目录结构
比较重要的目录
- / 根目录,一切的基础
- /root 管理员的家目录,很重要
- /user 相当于windows中的programfile文件,安装的软件的目录,更要命的是,系统也安装在这里
- /boot 启动系统的一些核心重要文件
- /etc 整个系统中的重要配置文件所在的位置
- /var 系统中动态变化的文件再的地方,比如各种重要的log文件
/tmp 临时数据存放的地方,有时一些软件默认安装在这里,所以这里注意清理,注意数据的备份
vbird的提醒
- /etc:这个目录相当重要,如前所述,启动与系统数据文件均在这个目录下,因此当这个目录被破坏,您的系统也就差不多该死掉了!而在后面,您会发现我们常常使用这个目录下的/etc/rc.d/init.d子目录,因为该目录用于存放启动一些Linux系统服务的脚本(可以认为是批处理文档)。而在/etc/rc.d/rc.local这个文件是启动执行文件,有点类似旧Windows系统下的autoexec.bat及config.sys。所以,如果您有需要在启动时加载的服务或执行文件,可以写在这个文件的最后一行,则启动时就会自动加载执行文件了。
· /bin,/sbin,/usr/bin,/usr/sbin:这是系统默认的执行文件的放置目录,例如root常用的userconf,netconf,perl,gcc,C++等数据都放在这几个目录中,所以如果您在提示符下找不到某个执行文件,可以在这4个目录中查找。其中,/bin和/usr/bin是系统用户使用的目录,而/sbin和/usr/sbin则是系统管理员使用的目录。 - /usr/local:这是系统预留的让您安装后来升级的套件的目录。例如,当您发现有更新的Web套件(如Apache),而又不想以RPM的方式升级套件,则可以将apache套件安装在/usr/local下。安装在这里有个好处,因为目前大家的系统都差不多,所以如果您的系统要让别人接管,也较容易上手,比较容易找到数据。因此,如果需要,通常我都会将/usr/local/bin路径加到我的path中。
- /home:这是系统默认的用于存放用户账号的根目录。
- /var:这个目录很重要。登入、各类服务发生问题时的记录,以及常规性的服务记录等都记在这个目录下,所以当您的系统出现问题,就需要在这个目录记录的文件数据中查看问题所在。另外,mail的默认位置也在这里,所以这个目录非常重要。
/usr/share/man,/usr/local/man:这两个目录为放置各类套件说明文档的地方,例如,您执行man man,则系统自动查找这两个目录下的所有说明文件,如果有相同的数据就会显示出来。
一般比较常见的分区安排是:
/
/boot
/usr
/home
/var
---
文件与目录管理
明白绝对路径与相对路径的使用
常用目录的符号意义
. 代表当前层目录
.. 代表上层目录
~ 代表自己的根目录
~user 代表到user这个人的根目录
目录与路径中常用的几个命令:
cd 变换目录
pwd 显示当前目录
mkdir 建立一个新目录
rmdir 删除一个内容为空的空目录
cd 是changge directory的缩写
[root @test /root]# cd .. <==回到上一层目录
[root @test /root]# cd ../home <==相对路径的写法
[root @test /root]# cd /var/www/html <==绝对路径的写法
[root @test /etc]# cd <==回到用户的根目录
[root @test /etc]# cd ~ <==回到用户的根目录
[root @test /etc]# cd ~test <==回到test用户的根目录
pwd 是print work directory的缩写
### 建立 和 删除目录 mrdie rmdir
环境变脸PATH
这个概念,在windows中也有,只要某个程序的据对路径加入到了Path中,那么在任何目录下,输入程序名称就可以执行这个程序,明白一下三个问题
- 查看PATH值 echo $PATH
- 添加一个路径到PATH
PATH="$PATH":/root
- 两个文件重名,当时在不同的目录中,看谁的路径写在PATH中比较靠前的位置,先查到的,先执行
既然如此问什么不把,当前路径"." 加入到path的最前面,因为这样不够安全,可能会造成安全性的问题,如果别人在/tmp目录随便写了一个恶意程序,都能执行。
文件与目录的管理
几个重要常用的指令
ls 显示文件名称、属等
cp 复制文件或目录
rm 删除文件或目录
mv 移动文件或目录
ls
语法:
[root @test /root ]# ls [-ailS]
参数说明:
-a :列出所有文件(连同隐藏文档)
-i :打印inode的值
-l :详细列出,连同文件大小、属性数据等
-S :以文件大小排序
--color=never :不显示颜色
--color=always :均显示颜色
--color=auto :由系统自行判断
cp
语法:
[root @test /root ]# cp [-drsu] [源文件] [目标文件]
参数说明:
-d :进行复制时,如果是复制到链接文件,若不加任何参数,则默认情况下会将链接到的源文件复制到目的地,若加-d,则链接文件可原封不动地将链接这个快捷方式复制到目的地。
-r :可以进行目录的复制,实现了递归
-s :做成链接文件,与ln指令功能相同。
-u, --update:如果源文件较新,或者没有目标文件,才会进行复制动作。可用于备份操作。
rm
语法:
[root @test /root ]# rm [-fir] [文件名]
参数说明:
-i :提供用户确认(这是默认值)。
-r :循环删除,直到没有东西为止。
-f :force,就是强制删除。
经常 rm -rf filename组合比较多,这种情况是确认我不要这个文件了
不过在Linux系统下,为了避免误删文件,都带有-i参数,-i参数用于在每个文件被删除之前让用户确认,以防误删文件。
mv 移动文件,文件重命名
[root @test /root ]# mv [-u] [源文件] [目标文件]
参数说明:
-u :同样,为update的简写,当源文件比目标文件还新时才会动作!mv -u 比较的是时间节点的心就,cp -u则是比较文件的内容是不是有变动
查看文件的内容
cat 由第一行开始显示文件内容
tac 从最后一行开始显示,可以看出,tac是cat的倒写
more 一页一页地显示文件内容
less 与more类似,但其优点是,可以往前翻页
head 只看头几行
tail 只看末尾几行
nl 显示时同时输出行号
od 以二进制方式读取文件内容
cat与tac,从名字都能看出,一个是正看一个是到看,一次性显示所有内容,管你能看多少
cat [-n] filename // -n显示行号
more和less
more比cat人性一点,可以分屏显示,
less比more更任性,可以一行行的向下现实,也可以一屏一屏的前后滚动,也可向前后搜索关键词
head与tail
head [-n x] filename -n属性表示x行,现实前面x行。默认情况下现实前面10行
tail表示现实后面的若干行。
nl
语法:
[root @test /root ]# nl [文件名]
参数说明:
范例:
[root @test /root]# nl ~/.bashrc
nl指令的用法和cat -n用法相似,即查看文件的同时可以显示行号
od
当文件是二进制的时候,使用more less vi都读不出来内容,这个时候可以使用od读取,可以以2进制,十进制,十六机制输出,对工程师比较有用
连接文件的介绍
inode
这个要先来看一下 ls -i
,属性可以产看到文件的inode节点的属性,inode节点到底什么。是这样的,文件的最小存储单位是block一般是n*512bytes,例如是4K。一个文件会被存储到若干个block中,inode则描述了这个文件到底是在那几个block块中。一般inode在一开始是设定好的,inode的个数“硬盘纵容来那个 / 一个容量”,这个容量会比block稍微大一点,比如block=4K,这个容量就是8K,那么1G的空间就对应有13107个inode。一个inode的大小是128bytes。所以一个硬盘分好区以后,数据区域就被分成了两部分一部分是inode table,一部分是真正存储数据的地方
连接相当于是指针,连接又分为两种硬链接hard,符号链接ssymbolic link,二者是有区别的。
ln [-s] source destination // 默认情况就是硬链接,-s属性就是符号链接
文件的索引就是依靠inode,当我们在硬盘上存储一个文件的时候,在inode table中生成了一个inode,如果没有粉盒的inode指向这个文件的block块这个文件就相当于是被删除了。
ln source des-ln
硬链接
干的事情就是,借助原来的inode也就是原来的source,有创建了一个和原来的inode指向同一个文件的inode,我们把这个新的inode叫做硬链接,很明显这消耗了inode table中的一天记录。硬链接相当于java中的引用的概念,两个引用同时指向数据区的一块空间,其中一个引用null后,我们可以用另一个应用来索引这块空间。硬链接存在以下连个问题:
- 不能跨文件系统,因为不同的文件系统都有自己的inode table,
- 不能链想inode,因为 inode table中的记录会不断的消耗掉。
符号链接,容易让大家教程软连接
符号链接干了一件什么事:穿件了一个新的独立文件,这个文件里面记录了目标文件的inode的值。如果说,硬链接是床架了两个指向同一个文件的指针p,q;那么符号谅解则只是创建了一个指向指针的指针,也就是说他不想是硬链接也代表原来的文件,他只是一个符号,罢了。用伪码描述如下:
硬链接是指向同一个文件的两个指针
int a;
int* p = &a;
int* hard = &a; // 这就是穿件连接的操作
(p == hard) = true;
符号链接就是一个二级指针
int a= 1;
int *p = &a;
int* soft = &p;
很明显一旦p删除之后,soft就再也再也找不到a了,windows中的快捷方式更像是软连接。
注意,linux中的连接无论软硬,只要是对连接的作用,最终都会影响到连接指定的block块中的文件。
文件(目录)的权限,属性
chown,chhgrp改变所有者和所有的群组,前面已经介绍过了,这里略
设置文件或者目录的初始默认属性umask
umask
umask //查看默认值,root登录时,返回的是0022,有效的也就后面三位022
umask 002 //设定这个值为022
默认情况下,新建文件的默认最多是666,没有可执行属性;新建目录的默认属性最高是777,umask的意思就是在新建文件目录的时候,减去这几个属性。
比如:
umask 002 // 设置umask的值为002
touch test1 //新建一个文件,那么这个文件的属性就是 666-002 = 664,文件的属性就是 -rw-rw-r--
medir dirtest //目录的属性就是 777-002=775 即-rwxrwxr-x
设计的妙处一般设写权限都是很重要的,把新建的用户的写权限向别的用户关闭,在root目录下的文件很重要,一般新建的文件的写权限也会关闭,这样加强安全性。
chattr 和 lsattr
chattr
语法:
[root @test /root ]# chattr [+-=][ASacdistu] [文件或目录名称]
参数说明:
+-= :分别为“+”(增加)、“-”(减少)、“=”(设定)属性
A :当设定了属性A,这个文件(或目录)的存取时间atime (access)将不可被修改,可避免
诸如手提电脑容易产生磁盘I/O错误的情况
S :这个功能有点类似sync,是将数据同步写入磁盘中,可以有效避免数据流失
a :设定a后,这个文件将只能增加数据而不能删除,只有root才能设定这个属性。
c :设定这个属性之后,将会自动将此文件压缩,在读取时自动解压缩。但是在存储的时候,会
先进行压缩再存储(对于大文件很有用)
d :当dump(备份)程序被执行,设定d属性将可使该文件(或目录)具有dump功效
i :这个参数可以让一个文件“不能被删除、更名、设定链接也无法写入或新增数据”,对于系
统安全性有相当大的助益
j :当使用ext3文件系统格式时,设定j属性将使文件在写入时先记录在日志中,但是当
filesystem设定参数为data=journalled时,由于已经设定了日志,所以这个属性无效
s :当文件设定了s参数时,它会被完全移出这个硬盘空间
u :与s相反,当使用u配置文件时,数据内容其实还存在于磁盘中,可以用来取消删除
chattr设置的上面的这些属性都是隐藏的,一般的ll指令是看不到的,要看到上面属性额值,就必须使用专用的指令,lsattr
这两个指令可以高度的保证安全。使用的会后要注意,比如你把 chattr +i 、etc/shadow这个属性添加账户和密码的,一旦这样泥猴,你会发现没有办法添加账户了,这个时候使用 lsattr /etc/shadow查看一下是不是 加了锁定,可以使用charttr -i /etc/shadow解锁
搜寻(查找)文件或者目录
which 查看可执行文件的位置
whereis 查看文件的位置
locate 配合数据库查看文件位置
find 实际搜寻硬盘查询文件名称
通常我们都是先使用whereis或locate来查找,如果真的找不到,才使用find,因为whereis与locate是利用数据库来搜寻数据,所以相当快,而且没有实际搜寻硬盘,比较省时间。
which,通过PATH进行虚招所以基本的功能在与寻找bin指令的位置
which passwd
whereis
语法:
[root @test /root ]# whereis [-bmsu] [目录名称]
参数说明:
-b :只找二进制文件
-m :只找在说明文件manual路径下的文件
-s :只找source源文件
-u :没有说明文档的文件!
whereis -b passwd
locate
[root @test /root ]# locate [目录名称]
locate passwd
为什么whereis和locate回避find的搜索速度快,而且有时会把一些已经删除的文件再次找出来,这是因为这两个文件查找的时候,会到系统各种的一个数据苦衷去查找,系统会默认一段时间updatedb一次,所以有些文件杀出了但是可能还在数据库中,而且有时新的一个文件时候locate查不到这是因为还没根新数据库所以查不到。这个数据库的危害默认在 /var/lib/slocate
中,并不是所有的数据都需要建立数据库,我们可以设置,配置文件是/etc/updatedb.config
刚刚实验了一下才发现cenos7中没有暗转locate命令,需要自己安装
find
语法:
[root @test /root ]# find [路径] [选项] 参数
参数说明:
- 时间:
-atime n :将n24小时内被存取过的文件列出来
-ctime n :将n24小时内被改变、新增的文件或目录列出来
-mtime n :将n*24小时内被修改过的文件列出来
-newer file :把比file还要新的文件列出来 - 使用名称:
-gid n :寻找群组ID为n的文件
-group name :寻找群组名称为name的文件
-uid n :寻找拥有者ID为n的文件
-user name :寻找用户名称为name的文件
-name file :寻找文件名为file的文件名称(可以使用通配符)
-type type :寻找文件属性为type的文件,type包含了b, c, d, p, l, s,
这些与前一章的属性相同。例如l为Link而d为目录
[root@iZ0zpl7q0nklmuZ ~]# find /home -user test
[root@iZ0zpl7q0nklmuZ ~]# find /home -user test
[root@iZ0zpl7q0nklmuZ ~]# find / -name testing
[root@iZ0zpl7q0nklmuZ ~]# find . -ctime 1
[root@iZ0zpl7q0nklmuZ ~]# find /home -mtime 1
[root@iZ0zpl7q0nklmuZ ~]# find /home -atime 1
文件的几个特殊属性UID,GID 和 SUID, SGID, 以及sticky bit
UID和GID
uid就是user id的缩写,gid就是grup id的缩写,前面有讲到过,linux中的用户身份都是用一个id标志的。并不是说把一账户名叫做root那么这个账户就拥有了root权限,只要一个杭虎的UID,和GID都是0的话,那么这个账户就变成了root的身份自然也就有了root权限
SUID 和 SGID
这两个标志就不是简单的id号的问题。这里的s有super的意思。先来看这么一个情景;当一个账户修改密码是使用的/usr/bin/passwd指令,会默认的修改 /etc/shadow这个文件
ll /user/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
ll /etc/shadow
-rw------- 1 root root 819 Aug 1 08:46 /etc/shadow
查看这个文件发现这个文件只有root有rw的权限,那么一般的用户执行passwd指令是怎么修改shadow这个文件的呢,注意观察passwd的属性是-rwsr-xr-x,user的属性中的x被s替换了,这个意思就是表明SUID的,一旦任何用户执行passwd这个文件,就将拥有该文件拥有者(root)的权限,passwd这个文件是属于root的,s替代了root在passwd上user属性中的x,那么当test用户执行passwd的时候就将又有root属性的权利,root可以rw、etc/shadow文件,那么test用户执行passwd指令的时候也就拥有了修改shadow文件的能力,这就实现了密码的修改。SGID的意义就可以类推了。
不得不佩服设计的巧妙。
sticky bit
一次类推s如果取代了other属性中的x呢?这样做事没有意义的,既然other具有s,和把这个文件的x属性开放给别的用户是没有区别的。这个时候会出现一个sticky bit(t)标志位。 /tmp 目录有这个标志位,我自己把这个标志位,翻译成一种黏连:在/tmp目录下常见的目录有个特点:一个用户创建的文件只能由这个用户和root两个人能够删除,别人都无法删除,因为/tmp有t标志,那么这个目录下的文件就有这种特性,别人不能删除这个文件,只能由创建者和root来删除。
file [文件名]
可以查看一个文件的属性。
硬盘和硬件管理 chapter7
硬盘的物理结构
硬盘由多个硬盘盘片组成,每个硬盘盘片上都有一个磁头(Head)进行该硬盘盘片的读写工作,当磁头固定不动,硬盘盘片旋转一周所走轨迹就是磁(Track)。所有硬盘盘片上同一段磁道组成了磁柱(Cylinder)。一段磁道就是硬盘分区时的最小单位,即扇区(Sector),是最小的硬盘储存物理量,通常为512 bytes。这就是整个硬盘的结构。
一般一块磁盘最小的存储单位扇区(sector)的大小设计成512Bytes(也就是0.5K),然后一个磁盘又会划分成若干个存储文件的block块,一个block的大小一般设计成n*sector,比如,n=16,blck = 8K.一个block最多可以存放一个文件,如果一个文件的额大小小于block,那么block的限制的内容只能浪费掉了。所以block的大小不能太大也不能太小太小的话,inode太多,查找文件时特别的费时间;block太大,磁盘的利用率比较低。
每个硬盘的起始部分有一块固定的分区叫做MBR里面存储两部分内容:开机启动程序和partition table,partition table最多只能存4个p和e。如果一个愉快硬盘的mbr坏掉了,这块硬盘也就报废了。
每个分区的就是一个文件系统,每个分区的其实的几个block叫做super block,这个区块里面记载了本分区内的block使用情况,和开机启动程序,可以配合mbr中的开机启动会层序完成多重启动。
记住一个非常重要的概念每个文件系统就是一个磁盘分区,每个文件系统就是一个磁盘分区,每个文件系统就是一个磁盘分区。
常用的指令:
df 查看硬盘的总容量、已用容量与inode,分区情况等
du 查看文件已用容量
df
语法:
[root @tsai /root ]# df -[ikm]
参数说明:
-i: 使用 i-nodes 显示结果
-k: 使用 KBytes 显示结果
-m: 使用 MBytes 显示结果
du
语法:
[root @test /root ]# du [-abckms] [目录名称]
参数说明:
[目录名称] 可以省略,如果省略,表示要统计当前所在目录的文件容量
-a :列出所有的文件与目录,默认值是列出目录的值
-b :列出的值以bytes输出
-c :最后求总total
-k :列出的值以KB输出
-m :列出的值以MB输出
-s :只列出最后求总的值
磁盘分割与格式化
fdisk 硬盘分区工具
e2label 修改硬盘的label(表头名称)的工具
mke2fs Linux下重要的格式化工具
fdisk
[root @test /root ]# fdisk [-l] [设备名称]
参数说明:
-l :直接列出该硬盘设备的分区表
fdisk 设备名称
fdisk /dev/vda
m //查看帮助信息
p //打印当前的分区状态,相当于fdisk -l 设备名
然后跟着指令的提示可以完成相应的删除,添加分区等操作。
使用fdisk分区之后,就要对分区进行格式化,使用命令make2file,意思就是说生成文件系统(file system )
make2fs
语法:
[root @test /root ]# mke2fs [-b block-size] [-i inode-size]
[root @test /root ]# mke2fs [-c]
[root @test /root ]# mke2fs [-L]
[root @test /root ]# mke2fs [-j]
参数说明:
-b :设定每个数据块占用的大小,目前支持的大小有
1024, 2048和4096 三种
-i :设定 inode 值
-c :检查磁盘错误,会比较慢
-L :设定这个扇区的label(表头名称)
-j :建立ext3这个具有日志管理功能的文件格式
[root @test /root]# mke2fs /dev/hda5
用mke2fs默认的条件(ext2)格式化/dev/hda5
[root @test /root]# mke2fs -c /dev/hda5
在格式化过程中同时检查硬盘
[root @test /root]# mke2fs –j -b 8192 -i 8192 /dev/hda5
改变block,由4096默认值改为8192
e2label
语法:
[root @test /root ]# e2label [/dev/hd...] [label_name]
参数说明:
范例:
[root @test /root]# e2label /dev/hda1 /
将/dev/hda1设备名设为“/”
这个就相当于windows中,修改磁盘驱动器的名字一样。
mknod
语法:
[root @test root]# mknod [device] [bcp] [Major] [ Minor]
参数说明:
b :设定节点为外部设备文档
c :设定节点为接口设备,如鼠标等
p :建立FIFO
很少能用的指令,说实话,也没法实战。
减产硬盘坏轨与数据同步写入
建立新的分区并格式化之后,我们还可以检测分区(硬盘得)坏道情况,有专用的执行即是fsck,如果有损毁的话,会把相应的文件放到lost+found
目录下面,这个目录平时是没有的。操作系统都有缓存的概念,用来提高读写速度,但是遇到突发情况,缓存中的数据没有协会内存的话就会导致数据的不同步,于是有一个专用的指令 sync。
fsck 检查硬盘有没有坏轨
sync 将内存中的数据同步写入硬盘
fsck
语法:
[root @test /root ]# fsck [-Aar] [设备名称]
参数说明:
-A :依据/etc/fstab的内容,将所有的设备都扫描一次
(通常启动过程中就会执行此指令)
-a :自动修复检查到的问题扇区,所以您不用一直按y
-r :一定要让用户决定是否需要修复,这与上一个-a参数刚好相反
注意这个指令也是在硬盘有问题的时候才是用,一般情况下不要使用,可能会对文件造成伤害。
sync
语法:
[root @test /root ]# sync
参数说明:
例:
[root @test /root]# sync; sync
这几节书,现实中真正比较有用的指令,应当也就df, du, fdisk, sync.一般在这边记录的都是比较有用,或者能够实践的。
硬盘的装载
自己新安装了一块硬盘使用上面的方法,分区格式化之后,要想能够ranglinux真正的使用治这块硬盘,就需要把硬盘挂载到文件系统,这一块就会讲到挂在的问题都是很实用,甚至可以在双系统的时候,挂碍winddows的分区。
假设我们的 / 为/dev/hda1而/home为/dev/hda2,那么/home/test下的内容也就都归/dev/hda2所有。需要特别留意的是,装载硬盘的时候得先建立装载目录(即装载点)。除此之外,如果装载目录中不为空,那么装载之后,原目录下的东西就会暂时消失。
mount
语法:
[root @test /root ]# mount [-ahlV]
[root @test /root ]# mount -t type /dev/hdxx /mountpoint
[root @test /root ]# mount -o [options]
[root @test /root ]# umount /mountpoint
参数说明:
-a :依照/etc/fstab的内容装载所有相关的硬盘
-h :只列出mount相关的参数,并不装载任何设备
-l :列出当前已经装载的设备、文件系统名称与装载点
-V :列出mount的版本信息
type :将后面/dev/hdxx设备以type的文件格式装载到
/mountpoint这个点。常见的type有下面几个:
vfat, msdos :是支持Windows系统的文件格式,其中vfat较常用
ext, ext2 :是Linux的主要文件格式
iso9660 :光驱的文件格式
nfs, ntfs, ufs :Windows 2000使用的NTFS格式
-o :这个参数后面接的项很多,如下:
rw :让装载的硬盘为可擦写
suid :允许该硬盘配置文件为SUID状态
exec :允许该硬盘执行二进制文件
auto :允许该硬盘使用mount -a参数设定
nouser :禁止他人(非root用户)使用装载功能,这是默认值。
async :允许硬盘进行异步记录(内存与硬盘不同步,最常用)
defaults:同时具有rw, suid, dev, exec, auto, nouser, async这些功能
nosuid :不许该硬盘具有SUID文件属性
ro :设定为只读属性
remount :让系统已经装载的硬盘重新被装载
当然这一块内容可能有点老,但是他山之石,可以攻玉,看看作为参考还是可以的
装载光驱
[root @test /root]# mount -a
[root @test /root]# mount -t iso9660 /dev/cdrom /mnt/cdrom
装载Windows文件系统的软驱,这个好像只支持fat32的文件系统
[root @test /root]# mount -t vfat /dev/fd0 /mnt/floppy
装载Linux文件系统的软驱
[root @test /root]# mount -t ext2 /dev/fd0 /mnt/floppy
装载Linux文件格式的硬盘
[root @test /root]# mount -t ext2 /dev/hdc6 /home
让根目录重新装载为可读。这在单人维护模式下很好用这个指令只有root才能执行
[root @test /root]# mount -o remount,rw /
依照/etc/fstab的参数内容将所有的磁盘重新装载上
mount -a
如何卸载外部的存储装置
umount
语法:
[root @test root]# umount [-f] [device|mount_point]
参数说明:
-f :强制将该文件系统退出,最常使用在无法退出的NTFS文件系统中
[root @test root]# umount /home
[root @test root]# umount /mnt/cdrom
注意 卸载某一个外部设备的时候,一定不能在这个设备的内部
文件系统的装载
原来现在所用的这个md的编辑器的原发嵌套要用空格分割。
以前是装载软盘,现在就是装载u盘了,软盘是fdnumber命名的
[root @test /] # mount -t ext2 /dev/fd0 /mnt/floppy <==Linux格式
[root @test /] # mount -t vfat /dev/fd0 /mnt/floppy <==Windows格式
[root @test /] # umount /mnt/floppy <==将软驱卸载
挂在光盘这
[root @test / ]# modprobe cdrom
[root @test / ]# modprobe ide-cd
[root @test / ]# mount -t iso9660 /dev/cdrom /mnt/cdrom
[root @test / ]# umount /mnt/cdrom
我用的是阿里云的虚拟主机,第二条指令发生错误。
作者介绍了 modprobe cdrom指令加载光驱模块,可以man 一下这个指令。
第三条指令等价于mount /dev/cdrom /mnt/cdrom
默认带有-t iso9660的属性。
挂在windows分区
感觉这一块还是很实用的,尤其是在双系统中。一种方法是在装linux系统的时候(当然默认是现状了windows系统),建一个目录,然后把相应的windows的分分区挂在上去,这样以后每次启动linux系统的时候,就会自动挂在windows的分区了。下面介绍的就是装linux的时候没有挂在windows分区的情况。
首先使用fdisk 查看windows分区的 hdx 代号
下面是只有一块硬盘的时候
fdisk -l /dev/hda1
...
[root @tsai / ]# mkdir /mnt/win98
[root @tsai / ]# mount -t vfat /dev/hda1 /mnt/win98
[root @tsai / ]# mount -t vfat -o iocharset=cp950 /dev/hda5 /mnt/win98 //iocharset字符编码的选项
设置启动时挂在
每次都这样手动挂在绝对很麻烦于是可以通过文/etc/fstab件的配置,在启动时就挂在windows分区。
不过要注意一下问题
- 根目录/必须装载,而且一定先于其他装载点。
- 其他装载点必须为已建立的目录,可以任意指定,但一定要遵守必要的系统目录架构原则。
- 所有装载点在同一时间内只能装载一次。
- 所有分区在同一时间内只能装载一次。
- 若进行卸载,必须先将工作目录移到装载点(及其子目录)之外。
打开/etc/fstab文件,在问价的最后加内容bash /dev/hdb1 /disk2 ext2 defaults 1 1
~~~~
添加的这一行对应6colomn,分别是:
device MountPoint filesystem parameters dump fsck
原书对各字段介绍的很详细,可以参看原书。