首页 > 代码库 > LINUX知识

LINUX知识

两个重要概念:

所有的程序或系统装置都是档案

不管构建编辑器还是附属档案,所写的程序只有一个目的,且要有效的完成目标。

在Linux系统中,每个装置都被当成一个文件来对待

 整个Linux系统最重要的地方在于目录树架构,

目录树架构以根目录为主,然后向下呈现分支的目录结构的一种文件结构。所以,整个目录树架构最重要的就是那个根目录(root directory),根目录的表示方法为一条斜线 ‘/’.

挂载 就是利用一个目录当成进入点,将磁盘分区槽的数据放置在改目录下;也就是说进入该目录就可以读取该分割槽的意思。这个动作称之为挂载,那个进入点的目录我们称之为挂载点。

由于整个Linux系统是最重要的是根目录,因此根目录一定要挂载到某个分割槽的。至于其他的目录则可依使用者自己的需求来给予挂载到不通的分割槽。

 

‘~‘符号代表的是 ‘用户的家目录’ 的意思,这是个变量。例如 root的家目录在/root,因此~就代表/root的意思。而vbird的家目录在/home/vbird, 所以如果你以vbird登陆时,看到的 ~ 就会等于/home/vbird。(鸟哥的 Linux 私房菜

在Linux当中,默认root的提示字符为 # ,而一般身份用户的提示字符为 $ 

 

在Linux系统下最好常使用一般账号来登陆即可

 

echo $LANG 查看当前终端的语系

LANG=zh_CN.utf-8 临时设置当前终端的语系

date  [+%Y/%m/%d ] 显示日期

cal  [montn] [year]显示日历

bc 计算器 

 

命令列模式里面下达命令时,会有两种主要的情况:

  • 一种是该命令会直接显示结果然后回到命令提示字符等待下一个命令的输入;
  • 一种是进入到该命令的环境,直到结束该命令才回到命令提示字符的环境。

重要的几个热键[Tab], [ctrl]-c, [ctrl]-d:

[Tab]:『命令补全』与『文件补齐』的功能

[ctrl]-c:中断目前程序

[ctrl]-d:键盘输入结束(End Of File, EOF 或 End Of Input)』的意思! 另外,也可以用来取代exit的输入,直接离开命令窗口,可以直接按下[Ctrl]-d就能够直接离开了(相当于输入exit啊!)

 

在文本模式下,你可以直接按下两个[Tab]按键,看看总共有多少命令可以用

 

man [command] 查看命令的帮助信息

man, info, /usr/share/doc/  了解命令 和 软件的详细信息

 

正确的关机方法:

观察系统的使用状态要看目前有谁在在线,可以下达『who』这个命令,而如果要看网络的联机状态,可以下达 『 netstat -a 』这个命令,而要看背景运行的程序可以运行『 ps -aux 』这个命令。使用这些命令可以让你稍微了解主机目前的使用状态!当然啰,就可以让你判断是否可以关机了 

  • 将数据同步写入硬盘中的命令: sync
  • 惯用的关机命令: shutdown
  • 重新启动,关机: reboot, halt, poweroff

事实上sync也可以被一般账号使用喔!只不过一般账号用户所升级的硬盘数据就仅有自己的数据, 不像root可以升级整个系统中的数据了

切换运行等级: init

Linux共有七种运行等级:

  • run level 0:关机
  • run level 3:纯文本模式
  • run level 5:含有图形接口模式
  • run level 6:重新启动

如果你想要关机的话, 除了上述的shutdown -h now以及poweroff之外,你也可以使用如下的命令来关机:init 0

 通常我们也称文本模式为终端机接口, terminal 或 console喔!Linux默认的情况下会提供六个Terminal来让使用者登陆, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。系统会将[F1] ~ [F6]命名为tty1 ~ tty6的操作接口环境。 也就是说,当你按下[crtl] + [Alt] + [F1]这三个组合按钮时 (按着[ctrl]与[Alt]不放,再按下[F1]功能键), 就会进入到tty1的terminal界面中了。同样的[F2]就是tty2啰!那么如何回到刚刚的X窗口接口呢?很简单啊!按下[Ctrl] + [Alt] + [F7]就可以了!(鸟哥的 Linux 私房菜)

 

忘记 root 密码:只要以单人维护模式登陆即可更改你的root密码 init 1

########################################################################################

 

 Linux 的文件权限与目录配置:

在Linux里面,任何一个文件都具有『User, Group及Others』

 在Linux系统当中,默认的情况下,

所有的系统上的账号与一般身份使用者,还有那个root的相关信息, 都是记录在/etc/passwd这个文件内的。

至于个人的密码则是记录在/etc/shadow这个文件下。

此外,Linux所有的组名都纪录在/etc/group内!

 

Linux文件属性:

ls [-al]  则表示列出所有的文件详细的权限与属性 (包含隐藏档,就是文件名第一个字符为『 . 』的文件)

 

如何改变文件属性与权限:

  • 改变所属群组, chgrp  (要被改变的组名必须要在/etc/group文件内存在才行)
  • 改变文件拥有者, chown(用户必须是已经存在系统中的账号,也就是在/etc/passwd 这个文件中有纪录的用户名称才能改变

   还可以顺便直接修改群组的名称

   chown [-R] 账号名称:组名 文件或目录

  • 改变权限, chmod

    数字类型改变文件权限

    符号类型改变文件权限

 

目录与文件之权限意义:

     权限对文件的重要性:

  • r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x (execute):该文件具有可以被系统执行的权限。

    在Windows底下一个文件是否具有执行的能力是藉由『 扩展名 』来判断的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的

   权限对目录的重要性:

  目录主要的内容在记录文件名列表,文件名与目录有强烈的关连.

  • r (read contents in directory)表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!
  • w (modify contents of directory)表示你具有异动该目录结构列表的权限,也就是底下这些权限:

      • 建立新的文件与目录;
      • 删除已经存在的文件与目录(不论该文件的权限为何!)
      • 将已存在的文件或目录进行更名;
      • 搬移该目录内的文件、目录位置。
  • x (access directory)目录的x代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录

        如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权.要开放目录给任何人         浏览时,应该至少也要给予r及x的权限,但w权限不可随便给.

 

Linux文件种类与扩展名:任何装置在Linux底下都是文件

Linux文件种类:

  • 正规文件(regular file )

   纯文本档(ASCII)、二进制文件(binary)、数据格式文件(data)

  • 目录(directory)
  • 连结档(link)就是类似Windows系统底下的快捷方式啦! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] 
  • 设备与装置文件(device)

    与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:

    区块(block)设备档 :就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是啦!自行查一下/dev/sda看看, 会发现              第一个属性为[ b ]

    字符(character)设备文件:亦即是一些串行端口的接口设备, 例如键盘、鼠标等等。第一个属性为 [ c ]

  • 数据接口文件(sockets)

          这种类型的文件通常被用在网络上的数据承接了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。

  • 数据输送文件(FIFO, pipe):

    FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性    为[p] 。

 

Linux文件扩展名:

  Linux的文件是没有所谓的『扩展名』,一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与档名根本一点关系也没有。这个观念跟       Windows的情况不相同喔!在Windows底下, 能被执行的文件扩展名通常是 .com .exe .bat等等,而在Linux底下,只要你的权限当中具有x的话,例  如[ -rwx-r-xr-x ] 即代表这个文件可以被执行。 但是能不能执行成功,当然就得要看该文件的内容。

  虽然如此,通常我们还是会以适当的扩展名来表示该文件是什么种类的。

  *.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh ;

  *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等;

  基本上,Linux系统上的文件名真的只是让你了解该文件可能的用途而已, 真正的执行与否仍然需要权限的规范才行! 

 

Linux文件长度限制:

     在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件的档名长度限制为:

  • 单一文件或目录的最大容许文件名为 255 个字符;
  • 包含完整路径名称及目录 (/) 之完整档名为 4096 个字符。

 

Linux目录配置:

Linux目录配置的依据--FHS 规范每个特定的目录下应该要放置什么样子的数据而已

FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

  • / (root, 根目录):与开机系统有关;
  • /usr (unix software resource):与软件安装/执行有关;
  • /var (variable):与系统运作过程有关。

根目录(/)所在分割槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题

FHS 标准建议:

 /bin  放置的是在单人维护模式下还能够被操作的指令,在/bin底下的指令可以被root与一般账号所使用

/boot 放置开机会用到的文件,包括Linux核心文件以及开机选项与开机所需的配置文件等。Linux kernel 常用的档名为:vmlinuz,如果使用grub这个开机管理程序,则还会存在/boot/grub/这个目录

/dev 任何装置与接口设备都是以文件的形式存在于这个目录当中的

/etc  系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件、各种服务的起始档等,建议不要放置可执行文件在这个目录中,其下重要的目录有:/etc/init.d/: 所有服务的预启动script都放置在这里的,

   /etc/xinetd.d/: 这就是所谓的super daemon管理的各项服务的配置文件目录。

   /etc/X11/: 与X Window有关的各种配置文件

/home   系统默认的用户家目录。在你新增一个一般使用者的账号时,默认的用户家目录都会规范到这里来。家目录有两种代号:

    ~  代表目前这个用户的家目录      ~dmtsai 代表dmstai的家目录

/lib  放置的则是在开机时会用到的函数库,以及在/bin或/sbin底下的指令会调用的函式库。尤其重要的是/lib/modules/这个目录,因为该目录会放置核心相关的模块(驱动程序)

/media     放置的是可移除的装置,包括软盘、光盘 DVD 等装置都暂时挂载于此

/mnt       暂时挂载某些额外的装置

/opt        给第三方协议软件放置的目录

/root      系统管理员的家目录 

/sbin      放在/sbin底下的为开机过程中所需要的,里面包括开机、修复、还原系统所需的指令。至于某些服务器软件程序,一般则放置在/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary),则放置到/usr/local/sbin/当中了

/srv    srv可以视为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP等                 等。举例来说,WWW服务器需要的网页数据就可以放置在/srv/www/里面。

 /tmp      这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理                 一 下。当然,重要数据不可放置在此目录

 

/lost+found 这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录『/disk/lost+found』

/proc      这个目录本身是一个『虚拟文件系统(virtual filesystem)』,他放置的数据都是在内存当中, 例如系统核心、进程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间!比较重要的文件例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等

/sys      也是一个虚拟的文件系统,主要也是记录与核心相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量

  • /etc:配置文件
  • /bin:重要执行档
  • /dev:所需要的装置文件
  • /lib:执行档所需的函式库与核心所需的模块
  • /sbin:重要的系统执行文件

这五个目录千万不可与根目录分开在不同的分割槽

 

#####################

/usr 的意义与内容

/usr/X11R6/   为X window System重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本是第11版,且改版第6次释放之意

/usr/bin/     绝大部分的用户可使用的指令放在这里,与/bin的不通在于是否与开机过程有关

/usr/include/    C/C++等语言程序的档头(header)与包含档(include)放置处,当我们以tarball 方式(*.tar.gz的方式安装软件)安装某些数据时,会使用到里面的许多包含档

/usr/lib/      包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script). 要注意的是,如果你使用的是X86_64的Linux系统, 那可能会有/usr/lib64/目录产生

/usr/local/   系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录,便于管理。

/usr/sbin/     非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)

/usr/share/   放置共享文件的地方,多是文本文件。常见的次目录:

  • /usr/share/man:联机帮助文件
  • /usr/share/doc:软件杂项的文件说明
  • /usr/share/zoneinfo:与时区有关的时区文件

/usr/src/      一般原始码建议放置到这里,src(source).核心原始码建议放置到/usr/src/linux/目录下

 

#################

/var 的意义与内容:

/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:

/var/cache/     应用程序本身运作过程中会产生的一些暂存档

/var/lib/       程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录

/var/lock/    某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用

/var/log/    登录文件放置的目录。里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)

/var/mail/   放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中! 通常这两个目录是互为链接文件

/var/run/    某些程序或者是服务启动后,会将他们的PID放置在这个目录下

/var/spool/    通常放置一些队列数据,

 

目录树 的特性:

  • 目录树的启始点为根目录 (/, root);
  • 每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
  • 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的

 技术分享

 

 绝对路径与相对路径:

  • .  :代表当前的目录,也可以使用 ./ 来表示;
  • .. :代表上一层目录,也可以 ../ 来代表。

uname -r  查看实际的Linux核心版本

lsb_release  -a 查看使用的Linux标准

 

###################################

Linux 文件与目录管理:

.         代表此层目录..        代表上一层目录-         代表前一个工作目录~         代表『目前使用者身份』所在的家目录~account  代表 account 这个使用者的家目录(account是个帐号名称)


cd:变换目录

pwd:显示目前的目录

mkdir:创建一个新的目录 mkdir -p创建多层目录  mkdir -m 设置目录新的权限

rmdir:删除一个空的目录 仅能删除空的目录

 

环境变量 $PATH:

PATH="$PATH":/路径     加入环境变量

  • 不同身份使用者默认的PATH不同,默认能够随意运行的命令也不同;
  • PATH是可以修改的,所以一般使用者还是可以透过修改PATH来运行某些位於/sbin或/usr/sbin下的命令来查询;
  • 使用绝对路径或相对路径直接指定某个命令的档名来运行,会比搜寻PATH来的正确;
  • 命令应该要放置到正确的目录下,运行才会比较方便;
  • 本目录(.)最好不要放到PATH当中

文件与目录的检视 : ls

复制、删除与移动:cp, rm ,mv

cp复制文件或目录:cp [-adfilprsu] 来源文档(source)  目标档(destination)  

           cp [options] source1 source2 source3 ....   directory  (如果来源档有两个以上,则最后一个目的档一定要是目录才行)

         在默认的条件中, cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是命令操作者本身.

         cp -s  复制成为符号连接档(sysmbolic link),即捷径文件

           cp -l  进行硬式连结(hard link)的连接档创建,而非复制文件本身,即所谓的实体连结(hard link)

         cp -d 若来源档为连接档的属性,则复制连接档属性而非文件本身

在复制时,必须要清楚的了解到:

  • 是否需要完整的保留来源文件的资讯?
  • 来源文件是否为连结档 (symbolic link file)?
  • 来源档是否为特殊的文件,例如 FIFO, socket 等?
  • 来源档是否为目录?

 

rm 移除文件或目录:rm [-fir] 文件或目录  

-f  :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;-i  :若目标文件 (destination) 已经存在时,就会询问是否覆盖!-u  :若目标文件已经存在,且 source 比较新,才会升级 (update)

mv (移动文件与目录,或更名)  mv [-fiu] source destination

               mv [options] source1 source2 source3 .... directory

 

basename /etc/sysconfig/network  取得最后的档名

dirname /etc/sysconfig/network   取得目录名

 

文件内容查阅:

cat  由第一行显示文件内容 (Concatenate )

  cat [-AbEnTv]

  -A 相当于 -vET的整合选项,列出特殊字符 如换行

  -b 列出行号,仅针对空白符做行号显示

  -E 将结尾的断行字节 $ 显示出来

  -n 列出行号 连同空白行 

  -T 将[tab]建以, I 显示出来

  -v 列出一些看不出来的特殊字符

 

tac 从最后一行开始显示文件内容

nl  显示的时候,输出行号

more 一页页的显示内容

less   和more类似,但可以往前翻页

  • 空白键    :向下翻动一页;
  • [pagedown]:向下翻动一页;
  • [pageup]  :向上翻动一页;
  • /字串     :向下搜寻『字串』的功能;
  • ?字串     :向上搜寻『字串』的功能;
  • n         :重复前一个搜寻 (与 / 或 ? 有关!)
  • N         :反向的重复前一个搜寻 (与 / 或 ? 有关!)
  • q         :离开 less 这个程序;

head  只看头几行

  head [-n number] 文件

tail    只看尾巴几行

od    以二进位的方式读取文件内容,针对非纯文字文档(可以将data file 或者是 binary file 的内容数据给他读出来,透过 -t c 的选项与参数来将数据内的字节以 ASCII 类型的字节来显示)

  od  [-t type]  文件

  a:利用默认的字节输出

  c:使用ASCII字节来输出

  d[size]:利用十进位来输出数据,每个整数占用size bytes

  f[size]:利用浮点数值。。。。

  o[size]:利用八进位。。。。

  x[size]:利用十六进位........

 

touch 新建文档或修改文件时间

 

****************************

文件默认权限:

umask  指定 『目前使用者在创建文件或目录时候的权限默认值

在默认权限的属性上,目录与文件是不一样的

文件默认权限:-rw-rw-rw-

目录默认权限:drwxrwxrwx

umask 的分数指的是 “该默认值需要减掉的权限”

文件隐藏属性:

chatattr [+-=][ASacdistu] 文件或目录名称  (配置文件隐藏属性)

 选项与参数:

+   :添加某一个特殊参数,其他原本存在参数则不动。-   :移除某一个特殊参数,其他原本存在参数则不动。=   :配置一定,且仅有后面接的参数A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime     将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助S  :一般文件是非同步写入磁碟的(原理请参考第五章sync的说明),如果加上 S 这个     属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root      才能配置这个属性。 c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,     但是在储存的时候,将会先进行压缩后再储存(看来对於大文件似乎蛮有用的!)d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份i  :这个 i 可就很厉害了!他可以让一个文件『不能被删除、改名、配置连结也无法     写入或新增数据!』对於系统安全性有相当大的助益!只有 root 能配置此属性s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘     空间,所以如果误删了,完全无法救回来了喔!u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还     存在磁碟中,可以使用来救援该文件喔!注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置

 

lsattr  [-adR] 文件或目录          显示文件隐藏属性

 

文件特殊权限:SUID,SGID,SBIT

SUID (Set UID): 

  SUID 权限仅对二进位程序有效

  运行者对改程序需要具有 x 的课运行权限

  本权限仅在运行该程序的过程中有效

  运行者将具有改程序拥有者的权限

 

SGID (Set GID)

  与 SUID 不同的是,SGID 可以针对文件或目录来配置,如果是对文件来说, SGID 有如下的功能:

  SGID 对二进制程序有用;

  程序运行者对于改程序来说,需具备x的权限;

  运行者在运行的过程中,将会获得改程序群组的支持

Sticky Bit

  当使用者对於此目录具有 w, x 权限,亦即具有写入的权限时;

  当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件

 

观察文件类型: file

 

***************************************************************

命令与文件的搜寻:

命令档名的搜寻:

which [-a] command

-a :将所有由 PATH 目录中可以找到的命令均列出来,而不止第一个找到的命令名称

 

文件档名的搜寻:

whereis [-bmsu] 文件或目录名

locate [-ir] keyword

find    [PATH] [option] [action]

 

 *************************************************************

 EXT2 文件系统:

磁盘的组成与分割:

扇区(Sector)为最小的物理存储单位,每个扇区为512 bytes;

将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小单位;

第一个扇区最重要,里面有:(1)主要启动区(master boot record,MBR)及分割表(partition table),其中MBR占有 446bytes ,而partition table 则占有 64 bytes.

各种接口的磁盘在linux中的文件名分别为:

  • /dev/sd[a-p][1-15]:为SCSI, SATA, U盘, Flash闪盘等接口的磁盘文件名;
  • /dev/hd[a-d][1-63]:为 IDE 接口的磁盘文件名;

磁盘分区意即指定分割槽的启始与结束磁柱。

指定分割区的磁柱范围,记录在第一个扇区的分割表中,因为分割表仅有64bytes,因此最多只能记录四个分个区的记录,这四个记录称为主要(primary)或延伸(extended)分割区,其中延伸分割区还可以分割出逻辑分割区(logical),而能被格式化的则仅有主要分割区与逻辑分割区。

分区:

  • 主要分割与扩展分配最多可以有四笔(硬盘的限制)
  • 扩展分配最多只能有一个(操作系统的限制)
  • 逻辑分割是由扩展分配持续切割出来的分割区;
  • 能够被格式化后,作为数据存取的分割区为主要分割与逻辑分割。扩展分配无法格式化;
  • 逻辑分割的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分割(5号到63号), SATA硬盘则有11个逻辑分割(5号到15号)。

###################################

文件系统特性:

格式化:因为每种操作系统所配置的文件属性/权限并不相同, 为了存放这些文件所需的数据,因此就需要将分割槽进行格式化,以成为操作系统能够利用的『文件系统格式(filesystem)』

一个可被挂载的数据为一个文件系统而不是一个分割槽

 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中,

 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

  • superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
  • block:实际记录文件的内容,若文件太大时,会占用多个 block 。

  Linux 的 EXT2 文件系统(inode)使用这种 inode 为基础的文件系统

 

    dumpe2fs [-bh] 装置文件名 查看文件系统信息

 

与目录树的关系:

  目录:在ext2文件系统创建一个目录时,ext2会分配一个 inode 与至少一块 block给改目录,其中inode记录改目录的相关权限与属性。并可记录分配到的那块block号码。而block则是记录在这个目录下的文件名与该文件名占用的inode 号码数据。

  实际观察目录内的文件所占用的 inode 号码时,可以使用 ls -i 这个选项来处理

  文件:当在linux下的ext2创建一个一般文件时,ext2会分配一个inode与相对于该文件大小的block数量给改文件

  目录树读取数据:读取某个文件时,就会经过目录的inode 与 block,然后才能够找到那个待读取文件的inode号码,最终才会读到正确的文件的内的数据

  由于目录树是由根目录开始读起,因此系统透过挂载的信息可以找到挂载点的inode号码(通常一个文件系统的最顶层inode号码会由2开始)。此时就能够得到根目录的inode内容,并依据该inode读取根目录的block内的文件名数据,再一层一层的往下读到正确的档名。

 

  文件系统 大小与磁盘读取效能:当一个文件系统规划德很大时,会造文件数据离散的问题

 

EXT2/EXT3 文件的存取与日志式文件系统的功能:

新增一个文件,此时文件系统的行为是:

  1. 先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增;
  2. 根据 inode bitmap 找到没有使用的 inode 号码,并将新文件的权限/属性写入;
  3. 根据 block bitmap 找到没有使用中的 block 号码,并将实际的数据写入 block 中,且升级 inode 的 block 指向数据;
  4. 将刚刚写入的 inode 与 block 数据同步升级 inode bitmap 与 block bitmap,并升级 superblock 的内容

 一般来说,我们将 inode table 与 data block 称为数据存放区域,至于其他例如 superblock、 block bitmap 与 inode bitmap 等区段就被称为 metadata (中介数据) ,因为 superblock, inode bitmap 及 block bitmap 的数据是经常变动的,每次新增、移除、编辑时都可能会影响到这三个部分的数据。

 

日志式文件系统 (Journaling filesystem)

  为了避免数据的不一致 (Inconsistent) 状态,因此我们的前辈们想到一个方式, 如果在我们的 filesystem 当中规划出一个区块,该区块专门在记录写入或修订文件时的步骤, 可以简化一致性检查的步骤.

Linux 文件系统的运行:

所有的数据都得要加载到内存后 CPU 才能够对该数据进行处理,为了解决这个效率的问题,Linux 使用的方式是透过一个称为异步处理 (asynchronously) 的方式.

挂载点的意义 (mount point):

每个 filesystem 都有独立的 inode / block / superblock 等信息,这个文件系统要能够链接到目录树才能被我们使用。 将文件系统与目录树结合的动作我们称为『挂载』.

挂载点一定是目录,该目录为进入该文件系统的入口。 因此并不是你有任何文件系统都能使用,必须要『挂载』到目录树的某个目录后,才能够使用该文件系统的。

其他 Linux 支持的文件系统与 VFS

 

  • 传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
  • 日志式文件系统: ext3 / ReiserFS / Windows‘ NTFS / IBM‘s JFS / SGI‘s XFS
  • 网络文件系统: NFS / SMBFS

 Linux 支持的文件系统: ls -l /lib/modules/$(uname -r)/kernel/fs

系统目前已加载到内存中支持的文件系统: cat /proc/filesystem

 

Linux VFS (Virtual Filesystem Switch):

那么 Linux 的核心又是如何管理这些认识的文件系统呢? 其实,整个 Linux 的系统都是透过一个名为 Virtual Filesystem Switch 的核心功能去读取 filesystem 的。 也就是说,整个 Linux 认识的 filesystem 其实都是 VFS 在进行管理,我们使用者并不需要知道每个 partition 上头的 filesystem 是什么.

 

###################################################

文件系统的简单操作:

 

df [-ahikHTm] [目录或文件名]

Filesystem :代表该文件系统是哪个partition,所以列出装置名

Mounted on:磁盘挂载的目录所在。

由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个命令显示结果的速度非常的快速!在显示的结果中你需要特别留意的是那个根目录的剩余容量! 因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,那你的 Linux 可能就问题很大了

那个 /dev/shm/ 目录,其实是利用内存虚拟出来的磁盘空间

 

du [-ahskm] 文件或目录名称

评估文件系统的磁盘使用量(常用在推估目录所占容量)

 

 

du -sm 目录 列出某个目录占用的总量

 

实体链接与符号链接: ln

在 Linux 底下的连结档有两种,一种是类似 Windows 的快捷方式功能的文件,可以让你快速的链接到目标文件(或目录); 另一种则是透过文件系统的 inode 连结来产生新档名.

Hard Link (实体链接, 硬式连结或实际连结)

hard link 只是在某个目录下新增一笔档名链接到某 inode 号码的关连记录而已。

  • 不能跨 Filesystem;
  • 不能 link 目录。

Symbolic Link (符号链接,亦即是快捷方式): 就是创建一个独立的文件,而这个文件会让数据的读取指向他link的那个文件的档名。

Symbolic Link与Windows的快捷方式可以给他划上等号,由Symbolic link 所创建的文件为一个独立的新的文件,所以会占用掉一个inode 与block等

制作连接档命令:ln [-sf]  来源文件 目标文件

##########################################

磁盘的分区、格式化、检验与挂载:

磁盘分区:fdisk 

 查阅硬盘的 partition 信息

 这个 fdisk 只有 root 才能运行,此外,请注意, 使用的『装置文件名』请不要加上数字,因为 partition 是针对『整个硬盘装置』而不是某个 partition 

删除磁盘分区

新增磁盘分区

磁盘格式化:  mkfs [-t 文件系统格式] 装置文件名

      mke2fs [-b block大小] [-i block大小] [-L 标头] [-cj] 装置

 

磁盘检验:fsck, badblocks

 

#####################################

linux常见的压缩命令:

在linux的环境中,压缩文件的扩展名大多是:*.tar, *.tar.gz, *.tgz, *.gz, *.Z, *.bz2


*.Z    compress 程序压缩的文件;
*.gz    gzip 程序压缩的文件;
*.bz2    bzip2 程序压缩的文件;
*.tar    tar 程序打包的数据,并没有压缩过;
*.tar.gz    tar 程序打包的文件,其中并且经过 gzip 的压缩
*.tar.bz2    tar 程序打包的文件,其中并且经过 bzip2 的压缩

 

gzip  [-cdtv#]   档名

-c  :将压缩的数据输出到萤幕上,可透过数据流重导向来处理;-d  :解压缩的参数;-t  :可以用来检验一个压缩档的一致性~看看文件有无错误;-v  :可以显示出原文件/压缩文件的压缩比等资讯;-#  :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6

zcat  档名.gz  读取压缩档

 

bzip2,bzcat

bzip2 [-cdkzv#]  档名

选项与参数:-c  :将压缩的过程产生的数据输出到萤幕上!-d  :解压缩的参数-k  :保留原始文件,而不会删除原始的文件喔!-z  :压缩的参数-v  :可以显示出原文件/压缩文件的压缩比等资讯;-#  :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

bzcat  档名.bz 读取压缩档

#######################################

打包命令: tar

tar [-j|-z]  [cv] [-f 创建的档名]   filename......             打包与压缩

tar [-j|-z]  [tv] [-f 创建的档名]                                  查看档名

tar [-j|-z]  [xv] [-f 创建的档名] [-C 目录]        解压缩

选项参数:

-c : 创建打包文件,可搭配 -v 来查看过程中被打包的档名

-t : 察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;

-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开

  特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。

 -j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2

-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz

-v :在压缩/解压缩的过程中,将正在处理的档名显示出来!

-f  filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗!

-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。

 

-p :保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档

-P :保留绝对路径,亦即允许备份数据中含有根目录存在之意;

--exclude=FILE:在压缩的过程中,不要将 FILE 打包!

 

 

 

 

 

 

 

 

LINUX知识