Linux:就是一组软件,一套操作系统=核心+系统呼叫接口层。
1、操作系统
操作系统 = 核心(内核) + 系统呼叫(接口)
操作系统其实也是一组程序,重点在于管理计算机的所有活动以及驱动系统中的所有硬件。
初识操作系统,我们从一张图片开始:
核心:即是我们通常所说的操作系统内核,其主要负责整个计算机系统相关的资源分配与管理,可归纳为以下几大核心功能
- 程序管理:程序资源分配及调度执行等管理。
- 内存管理:内存的控制与使用。
- 文件系统管理:文件格式支持,数据输入/输出等等。
- 硬件驱动管理:驱动硬件供使用这是内核的主要工作,目前都支持【可加载模块】方式管理硬件。
系统呼叫接口:方便程序开发者可以轻易透过与内核的沟通,使用硬件资源。
2、计算机组成
冯诺依曼提出的计算机基本工作原理:
- 用二进制形式表示数据和指令;
- 采用存储程序方式执行;
- 计算机由算数逻辑运算器、控制器、存储器、输入设备和输出设备5大部分组成。[运控存入出]
CPU的组成:运算器+高速缓冲存储器
实体计算机内部结构:
上图是Intel生产的典型的x86架构主板。
3、计算机开机过程
1.BIOS:写入到主板上的一个软件程序,BIOS在开机的时候,计算机系统会主动执行的第一个程序。BIOS会去分析计算机里面有哪些存储设备,比如:以硬盘为例,BIOS会依据使用者的设定去取得能够开机的硬盘,并且到该硬盘里面去读取第一个扇区的MBR位置。BIOS工作结束,MBR内的开机管理程序开始工作。
2.MBR存放的内容:放置最基本的开机管理程序。MBR的目的:是在加载(load)核心档案,这个开始管理程序是系统提供的,所以去读取核心档案,核心档案开始工作,开机管理程序结束。
3.开机管理程序(boot loader):一支可读取核心档案来执行的软件。
- 提供选单:用户可以通过选择不同的开机项目,多重引导,即安装不同的系统。
- 载入核心档案:直接指向开机的程序区段来开始操作系统。
- 转交给其他loader:将开机管理功能转交给其他loader负责。
4.核心档案:开始操作系统的功能...
CMOS:记录各项硬件参数且嵌入在主板上的存储器。
台式机与笔记本开机过程有些许差异,但主要过程大致相同:按下开机键 –> EC检测到开机键(高低电平变化)-> CPU上电完成并获得控制权 -> 读取BIOS及CMOS中参数完成系统所有设备上电和自检 -> CPU根据BIOS设置的顺序找到第一个可开机设备,读取其第一个扇区MBR所在的位置 -> CPU运行扇区MBR中的开机管理程序(boot loader),boot loader程序则根据分区表找到可启动分区并加载其中的系统内核(核心档案) -> 完成开机。
开机过程,可通过流程图如下:
红色字体是需求我们留意的,其中涉及到这样几个概念或者实体:第一个扇区、boot loader、分区表及系统内核。
开机管理示意图如下:MBR提供2个选单,建议一般先安装windows[安装程序会主动覆盖掉MBR以及自己所在分割槽的启动扇区]在安装linux[因为linux可以进行选择将开机管理程序安装在MBR或各别分割槽的启动扇区].
4、磁盘概览
由于机械硬盘更形象,因此这里以机械硬盘来介绍上述的概念。当下固态在逐步成为主流,其与机械硬盘最大的区别在于工作原理:固态硬盘是以半导体状态做记忆介质,机械硬盘是以磁作为记忆介质。
硬盘容量=磁头数*磁轨数*扇区数*扇区大小(512Bytes)
=读取头*上下总共n圈磁轨的数量*一圈扇区口的数量*扇区口的大小(512Bytes)
硬盘的数据存储在一个个的盘片上,每个盘片由多个同心圆磁轨组成,每个磁轨又由多个扇区组成。扇区是数据存储的基本单位,人为规定每个扇区大小为512Bytes。硬盘可以有多个盘片,每个盘片上相同的磁轨组成了磁柱,而磁柱是分区的基本单位。
磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达。数据写入是在磁盘盘上面,磁盘盘上面又可细分出扇区(sector)与磁柱(Cylinder)。扇区大小默认是512bytes。磁盘盘如下:
磁盘的扇区并不是都一样重要,最重要的是磁盘的第一个扇区,因为它记录了整颗磁盘的重要信息,主要有以下两个重要信息:
- MBR(Master Boot Record)主要启动记录区,大小446Bytes,用于安装开机管理程序;
- 分割表(partition table),记录整颗硬盘的分割状态,64Bytes。
4.1 磁盘分区
文件系统的最小单位:开始磁柱和结束磁柱,也是分割槽的最小单位。利用参考对照磁柱号码的方式进行处理。
分割表所在的64Bytes容量中,总共分为四组记录区,每组记录区记录了该区段(分区)的启始与结束的磁柱号码。
仅有主分区磁盘分区,磁盘分区表的作用示意图:
假设该磁盘只有400个磁柱,共分割成为四个分割槽,第四个分割槽起始位置是从301开始,400号磁柱的范围。
从windaow角度:第一个到第四个分割槽的代码应该是C,D,E,F。当你的资料写入F槽时,你的数据会被写入这颗磁盘的301~400磁柱之间。
//假设上面的硬盘装置文件名 /dev/hda //四个分割槽在linux系统中的装置文件名,重点是档案名后面会再接一个数字,数字与分割槽所在的位置有关 p1:/dev/hda1 p2:/dev/hda2 p3:/dev/hda3 p4:/dev/hda4
引入扩展分区磁盘分区,磁盘分区表的作用示意图:
硬盘的四个分割记录仅使用了两个,P1为主要分割,P2则为扩展分区。
注意,引入扩展分区的目的:使用额外的扇区来记录分割信息,扩展分区本身并不能被拿来格式化。需要将扩展分区的分区段继续分割后(分割后的分区成为逻辑分区)才能进一步格式化。
//假设上面的硬盘装置文件名 /dev/hda //分割槽在linux系统中的装置文件名。P开始的分区保留3和4,L开头的逻辑分区的装置名称从5开始。 p1:/dev/hda1[主分区] p2:/dev/hda2 L1:/dev/hda5 L2:/dev/hda6 L3:/dev/hda7 L4:/dev/hda8 L5:/dev/hda9 //缺少/dev/hda3、/dev/hda4的原因:前面4个号码都是保留给Primary或Extended。Extened分区本身并不能进行进行结构化。
总结:
- 主要分区与扩展分区最多有四个(硬盘的限制)。
- 扩展分区最多只能有一个。
- 逻辑分区是由扩展分区切割出来的分割槽。
- 能够被格式化,作为数据存取的分区只有主要分区和逻辑分区,扩展分区无法格式化。
- 逻辑分区的数量根据操作系统而定,比如linux:IDE硬盘最多有59个逻辑分区(5-63号),SATA硬盘则有11个逻辑分区(5-15号)。
4.2 加载系统
加载系统主要用到第一颗可启动设备的第一个扇区的MBR位置。MBR里面放置的就是最基本的开机管理程序(boot loader),它的作用就是加载操作系统内核。Boot loader有3项基本任务:
- 提供选单:当有多重引导时,可同用户选择不同的开机项目;
- 载入系统内核:指向可开机的程序区段来开始操作系统;
- 转交其他loader:将开机管理功能转交其他loader负责------能实现多重引导的根本。
PS:如果电脑安装多系统,需要先安装windows系统,在安装linux系统。
5 Linux目录结构
在Linux系统中,所有数据都是以文件[档案的形态]形式呈现,因此整个Linux系统最重要的地方就在于目录树架构。所谓目录树架构就是以根目录为主,然后向下呈树形分支状的目录结构,因此目录树架构最重要的就是根目录,在Linux中以一条斜线/表示。目录树的呈现方式如下图所示:
所有的文件都是由根目录(/)来的,而次目录之下还能够有其他的数据存在。比如上图长方形表示目录,波浪形为文件。
至于系统有哪些目录,以及各种目录放置哪些数据,为了规范这些东西,于是就有了所谓的FHS(Filesystem Hierachy tandard)。FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随便更动,而将目录定义成为四种交付作用的形态:
- 可分享的:可以分享给其他系统挂载使用功能的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。
- 不可分享的:自己机器上面运作的装置档案或者是程序有关的socket档案等,只与机器本身有关,不适合分享给其他主机。
- 不变的:数据不会经常变动,比如:函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等
- 可变动的:经常改变的数据,例如登录文件、一般用户可自动收受的新闻组等。
事实上,FHS针对目录树架构仅定义出三层目录下应该放置的数据:
- /(根目录) : 与系统开机、回复、备份相关;
- /usr(unix software resource) : 与软件安装/执行相关;
- /var(variable): 与系统运行过程有关。包括快取(cache)、log日志(log file)以及某些软件运作所产生的档案, 包括程序档案(lock file, run file).
目录树的特性:
- 目录的起始点为根目录(/,root)
- 每一个目录不止能使用本地端的partition的文件系统,也可以使用网络上的filesystem。比如:利用Networdk File System(NFS)服务器挂载某特定目录等。
- 每一个档案在此目录树中的文件名(包含完整路径)都是独一无二的。
目录树架构示意图如下:
绝对路径与相对路径:
- 绝对路径:由根目录(/)开始写起的文件名或目录名称,例如/home/dmtsai/.bashrc。
- 相对路径:./home/dmtsai或../../home/dmtsai/等等,反正开头不是/就属于相对路径的写法。
// 其中.表示当前的目录: ./ //当前目录所在位置:/var/spool/mail;需求:进入/var/spool/log目录 cd ./log //..表示上一层目录: ../ //当前所在目录:/var/spool/mail/目录;需求:进入/var/spool/scron/目录 cd /var/spool/mail cd ../cron
FHS官方文档可参看: http://www.pathname.com/fhs
6 分区挂载与目录映射
截止目前,我们知道整个Linux系统使用的是目录树架构,但是我们的文档数据其实是放置磁盘分区中,所以现在的问题是“如何结合目录树架构与磁盘分区内的数据?”答案是“挂载(mount)”。
挂载:就是利用一个目录当成进入点,将磁盘分区中的数据放置在该目录下;换种说法就是,进入该目录就可以读取到相应分区内的数据。将目录与分区映射这个动作就叫“挂载”,进入点的目录就叫挂载点。
目录树与分割区之间的相关性:
假设我的硬盘分为2个区,分区1是挂载到根目录,分区2则是挂载到/home这个目录。比如我的数据放在/home内的次目录下时,数据是放在分区2的,如果不是放在/home低下的目录,那么数据就会被放置在分区1了。
常见的挂载点与磁盘分区的规划:
- 初次接触Linux: 分割为/及swap两个分区即可;
- 建议分区方式:/, /boot, /var, /usr, /home, swap;
- 根据服务器具体用途分区;
# df -T //查看已挂载的分区和相应的文件系统类型
7 目录及文件权限
在介绍文件与目录权限之前,简要解释一下拥有者,群组,及非本群组外其他人三个概念,并结合ll命令查看文件权限及目录权限。
场景:linux是多人多任务的系统,可能常常会有多人同时使用这部主机来进行工作的情况,因此产生文件拥有者角色。
文件的拥有者、群组以及其他人的示意图:
比如以王三毛为例,王三毛这个文件属于文件的拥有者、他属于王大毛这个群组,而张小猪对于王三毛来说,则只是一个其他人others。
linux用户身份与群组记录的档案:所有的系统上的账号与一般身份使用者,还有那个root的相关信息,都是记录在/etc/passwd这个档案,个人密码记录在etc/shadow这个档案下,linux所有的组名都记录在/etc/group内。用户及用户组常用管理命令可参考:
eg1: cat /etc/passwd //查看账号信息 cat /etc/group //查看用户组信息 cat /etc/shadow //查看用户密码信息 ### 用户相关操作 新增用户 useradd UserName 在运行上面命令后,一般需要用passwd UserName来进行秘密设置 删除用户 userdel UserName 修改用户 usermod UserName ### 用户组相关操作 与用户联系非常紧密的还有用户组的概念,与用户组相关的命令常见如下: 新增用户组 groupadd GroupName 删除用户组 groupdel GroupName 修改用户组 groupmod GroupName
https://blog.51cto.com/taoismli/1977864
有了上述用户、用户组及权限概念之后,再来了解一下权限之于文档及目录的意义.
权限对档案的重要性:档案是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。权限于文档的意义:
- r (read):可读取此一档案的实际内容,如读取文本文件的文字内容等;
- w (write):可以编辑、新增或者是修改该档案的内容(但不含删除该档案);
- x (execute):该档案具有可以被系统执行的权限。
权限对目录的重要性:目录主要的内容是记录文件名列表,文件名与目录有强烈的关联。
- r (read):表示具有读取目彔结构列表的权限,所以当你具有读取(r)一个目彔的权限时,表示你可以查询该目彔下的文件名数据。 所以你就可以利用 ls 这个指令将该目彔的内容列表显示出来!
- w (write):表示具有移动该目彔结构列表的权限,也就是底下这些权限:x (execute):代表的是用户能否进入该目彔成为工作目彔。
- 建立新的文档与目彔;
- 删除已经存在的文档与目彔(无论该文档的权限为何!);
- 更名文档与目录;
- 移动该目彔内的文档、目彔位置;
//在目录/tmp中建立一个名为testing的目录,该目录权限为744且目录拥有者为root. //在testing目录下建立一个空的文件,文件名为:testing //建立目录可用mkdir cd /tmp //切换工作目录到/tmp mkdir testing //建立新目录 chmod 744 testing //变更权限 touch testing/testing //建立空的文件 chmod 600 testing/testing //变更权限 su -vbird //切换身份成为vbird
8 linux文件权限概念
linux文件属性的示意图:
档案的类型与权限之内容:[档案类型][档案拥有者之权限][档案所属群组之权限][其他人之权限]。其中每三个分别代表[可读][可写][可执行][无权限]
//查看档案的指令[权限][连结][拥有者][群组][档案容量][修改日期][文件名] //ls:list,显示档案的文件名与相关属性,-al 则表示列出所有的档案详细的权限与属性(包含隐藏文件,就是文件名第一个字符为.) [wendy@cs010 ~]$ ls -al total 352 drwxr-xr-x 17 wendy wendy 4096 Apr 22 14:47 . drwxr-xr-x. 3 root root 4096 Mar 19 2019 .. drwxrwxr-x 4 wendy wendy 4096 Feb 28 15:06 logs
drwxrwxr-x //档案的类型与权限之内容:[档案类型][档案拥有者之权限][档案所属群组之权限][其他人之权限]。其中每三个分别代表[r可读][w可写][x可执行][-无权限] //d第一个字符代表这个档案是【目录、档案或链接文件等等】。 //d:表示目录,-:表示档案,l:连结档(link file),b:表示装置文件里面的可供储存的接口设备(可随机存取装置);c:表示装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。 //man ls 或info ls
//chgrp:改变文件所属群组 //chown:改变文件拥有者 //chmod:改变文件的权限,SUID,SGID,SBIT等等的特性 //改变所属群组,chgrp,[-R]表示进行递归(recursive)的持续变更,chgrp [-R] dirname/filename chgrp users install.log //改变install.log的所属群组为users. ls -l //改变文件拥有者,chown,[-R]账号名称 文件或目录 //chown [-R] 账号名称:组名 文件或目录,[-R]表示进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更 chown bin install.log //改变install.log的拥有者为bin这个账号 ls -l chown root:root install.log //将install.log的拥有者与群组改回为root. ls -l //chmod,改变权限,chmod [-R] xyz文件或目录,xyz:刚刚提到的数字类型的权限属性,为rwx属性数值的相加。-R:进行递归(recursive)的持续变更,亦即连同次目录下的所有档案都会变更 //权限的设定有2种,分别可以使用数字或者是符号来进行权限的变更:数字类型改变文件权限和符号类型改变档案权限 //数字类型改变文件权限、r:4 w:2 x:1,每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: [-rwxrwx---] 分数则是: owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= --- = 0+0+0 = 0 //符号类型改变文件权限,user、group、others三种身份,由u、g、o代表,a表示all。读写权限可写成r,w,x。 chmod 777 .bashrc ls -al .bashrc
9 linux文件扩展名
linux档案扩展名:
- *.sh:脚本或批处理文件(scripts),因为批处理文件为使用shell写成的,所以扩展名就变成.sh;
- *Z,*.tar,*.tar.gz,*.zip,*.tgz:经过打包的压缩文件;
- *.html,*.hph:网页相关档案,分别代表HTML语法与PHP语法的网页档案。.html的档案可使用网页浏览器来直接开启,至于.php的档案,则可透过client端的浏览器来server端浏览,以得到运算后的网页。
linux档案长度限制:使用预设的Ext2/Ext3文件系统时,针对档案的档名长度限制。
- 单一档案或目录的最大容许文件名为255个字符。
- 包含完整路径名称及目录(/)之完整档名为4096个字符。
linux文件名的限制:
- 避免使用特殊字符:* ? > < ; & ! [ ] | ' " ` ( ) { }。
10 目录管理
- ls: 列出目录
- cd:切换目录
- pwd:显示目前的目录
- mkdir:创建一个新的目录
- rmdir:删除一个空的目录
- cp: 复制文件或目录
- rm: 移除文件或目录
- mv: 移动文件与目录,或修改文件与目录的名称
查看具体的指标,使用命令:man ls
10.1 目录相关的操作
//特殊目录 . 表示此层目录 ..表示上一层目录 - 表示【目前用户身份】所在的home目录 ~表示 account这个用户的home目录(account是个账号名称) //目录处理指令,cd 表示change directory,变换工作目录的指令 cd 表示变换目录,cd [相对路径或绝对路径] pwd 表示显示当前目录 mkdir 表示建立新的目录 rmdir 表示删除空的目录
//pwd 显示目录所在的目录 pwd [-P] 表示显示出真正的完整路径,而非使用链接(link)路径。pwd:Print Working Directory pwd //显示当前路径 //mkdir(建立新目录);mkdir [-mp] 目录名称 -m表示配置文件的权限,直接设定,-p 表示将你所需要的目录递归建立起来.mk:make directory。 mkdir test //建立一个名为test的新目录 mkdir -p test1/test2/test3/test4 //自行建立多层目录 //rmdir(删除空目录):rmdir -p 目录名称 rmdir test //直接删除,如果test内有内容,无法进行删除 rmdir -p test1/test2/test3/test4 //递归删除,如果任何一级内有内容,无法进行删除 //$PATH,PATH这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)隔开,每个目录是由顺序之分的。 PATH="$PATH":/root // 表示/root加入到执行文件搜索路径PATH中
10.2 文件与目录管理
//ls:文件与目录的检视 ls -al ~ //将home目录下的所有文件列出来(含属性与隐藏文件);-l表示长串显示数据内容; -a 表示将隐藏档也一起列出来的数据内容 //cp:复制文件或目录,建立快捷方式。cp [-adfilprsu] 来源文件(source) 目标文件(destination),eg:cp [options] source1 source2 source3...directory cp ~/.bashrc /tmp/bashrc //home目录下的.bashrc复制到/tmp下,并更名为bashrc cp -i ~/.bashrc /tmp/bashrc // -i表示覆盖 cp -a ~/.bashrc /tmp/bashrc // -a表示将文件所有的特性一起复制 PS:[cp复制行为会复制执行者的属性与权限],所以会涉及到chmod权限的修改。 //rm:删除文件或目录,rm [-fir] 文件或目录。fir:force[忽略不存在的档案,不会出现警告讯息]、互动模式、递归删除 rmdir /tmp/etc //mv:移动文件、目录或更名。mv [-fiu] source destionation。fiu:force[强制覆盖]、已经存在的文件,就会询问是否覆盖、若目标文件已经存在,且source比较新,才会更新(update)
//eg:mv [options] source1 source2 source3 ...directory[目录]。 mv test001 test2 //移动test001到test002的内容 eg: [wendy@cs010 hbase-1.4.12]$ basename /opt/wendy/local local //取得路径的文件名 [wendy@cs010 hbase-1.4.12]$ dirname /opt/wendy/local /opt/haishu //取得路径的目录名称
10.3 文件内容查询
//直接查看文件内容:cat,tac,nl
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示,可以看出tac是cat的倒着写
- nl 显示的时候,顺道输出行号!
//直接查看文件内容:cat,tac,nl[concatenate,] //cat[-AbEnTv] 选项不参数: -A :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已; -b :列出行号,仅针对非空白行做行号显示,空白行不标行号! -E :将结尾的断行字符 $ 显示出来; -n :打印出行号,连同空白行也会有行号,不 -b的选项不同; -T :将 [tab] 按键以 ^I 显示出杢; -v :列出一些看不出来的特殊字符 eg:
test.txt文件内容如下:
wendy001
wendy002
wendy003
[wendy@cs010 logs]$ cat test.txt wendy001 wendy002 wendy003 [wendy@cs010 logs]$ cat -n test.txt 1 wendy001 2 wendy002 3 4 wendy003 [wendy@cs010 logs]$ cat -b test.txt 1 wendy001 2 wendy002 3 wendy003 [wendy@cs010 logs]$ cat -A test.txt wendy001$ wendy002$ $ wendy003$ //tac(反向列式) [wendy@cs010 logs]$ tac test.txt wendy003 wendy002 wendy001 //nl(添加行号打印),nl[-bnw]档案,-b指定行号,主要有两种;列出行号表示的方法,主要有三种 选项不参数: -b :指定行号指定的方式,主要有两种: -b a :表示不管是否为空行,也同样列出行号(类似 cat -n); -b t :如果有空行,空的那一行要列出行号(默认值); -n :列出行号表示的方法,主要有三种: -n ln :行号在屏幕的最左方显示; -n rn :行号在自己字段的最右方显示,且不加 0 ; -n rz :行号在自己字段的最右方显示,且加 0 ; -w :行号字段的占用的位数。 [wendy@cs010 logs]$ nl test.txt 1 wendy001 2 wendy002 3 wendy003 [wendy@cs010 logs]$ nl -b a test.txt //[-b a]类似cat -n,无论是否为空行,同样列出行号 1 wendy001 2 wendy002 3 4 wendy003 [wendy@cs010 logs]$ nl -b a -n rz test.txt //[-n rz]表示行号在自己字段的最右方显示,且加0 000001 wendy001 000002 wendy002 000003 000004 wendy003 [wendy@cs010 logs]$ nl -b a -n rz -w 3 test.txt //[-w]表示行号字段的占用的位数 001 wendy001 002 wendy002 003 004 wendy003
//可翻页查看:more less
- more 一页一页的显示文件内容
- less与more类似,但是比more更好的是,可以往前翻页
//more(一页一页翻动) 空格键 (space):代表向下翻一页; Enter :代表向下翻『一行』; /字符串 :代表在这个显示的内容中,向下搜寻『字符串』这个关键词; :f :立刻显示出文件名以及目前显示的行数; q :代表立刻离开 more ,不再显示该文件内容。 b 或 [ctrl]-b :代表往回翻页,不过这动作叧对文件有用,对管线无用。
eg: [wendy@cs010 logs]$ more test.txt wendy001 wendy002 wendy003 //less(一页一页翻动) 空格键 :向下翻动一页; [pagedown]:向下翻动一页; [pageup] :向上翻动一页; /字符串 :向下搜寻『字符串』的功能; ?字符串 :向上搜寻『字符串』的功能; n :重复前一个搜寻 (与 / 或 ? 有关!) N :反向的重复前一个搜寻 (与 / 或 ? 有关!) q :离开 less 这个程序;
eg: [wendy@cs010 logs]$ less test.txt wendy001 wendy002 wendy003
//资料截取
head 只看头几行
tail 只看尾巴几行
//资料截取 head
eg: [wendy@cs010 logs]$ head -n 2 test.txt wendy001 wendy002 [wendy@cs010 logs]$ head test.txt wendy001 wendy002 wendy003 [wendy@cs010 logs]$ tail -n 1 test.txt wendy003 [wendy@cs010 logs]$ tail -f test.txt wendy001 wendy002 wendy003
//非纯文本档
od 以二进制的方式读取文件内容!
//修改文件时间与建置新档
touch
//touch [-acdmt] 档案,选项与参数 -a :仅修订 access time; -c :仅修改文件的时间,若该文件不存在则不建立新文件; -d :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间" -m :仅修改 mtime ; -t :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]
10.4 文件与目录的默认权限与隐藏权限
- 文件预设权限:umask
- 文件隐藏属性:chattr,lsattr
- 文件特殊权限:SUID,SGID,SBIT,权限设定
- 观察文件类型:file
//档案预设权限,umask:指定目前用户在建立文件或目录时候的权限默认值.比如:002 user、group并没有被拿掉任何权限,others的权限被拿掉了2(r:4,w:2,x:1) [wendy@cs010 logs]$ umask -S u=rwx,g=rwx,o=rx [haishu@cs010 logs]$ umask 0002 eg: //umask 为 003 ,所以拿掉的权限为wx,因此: 文件:(-rw-rw-rw-) - (--wx) = -rw-rw-r-- 目录:(drwxrwxrwx) - (--wx) = drwxrwxr--
//隐藏文件属性chattr(配置文件隐藏属性),chattr [+-=][ASacdistu]文件或目录名称 选项与参数: + :增加某一个特殊参数,其他原本存在参数则不动。 - :移除某一个特殊参数,其他原本存在参数则不动。 = :设定一定,且仅有后面接的参数 a :设定a之后,这个档案将只能增加数据,而不能删除也不能修改数据,只有root 才能设定这个属性。 c :这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存。 i :一个文件不能被删除、改名、设定连结此属性。 //显示文件隐藏属性lsattr,lsattr [-adR] 文件或目录 选项与参数: -a :将隐藏文件的属性进行显示; -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名; -R :连同子目录的数据也一并列出来 eg: chattr +ajj test lsattr test
档案特殊权限
SUID有这样的限制与功能:
- SUID 权限仅对二进制程序(binary program)有效;
- 执行者对于该程序需要具有 x 的可执行权限;
- 本权限仅在执行该程序的过程中有效 (run-time);
- 执行者将具有该程序拥有者 (owner) 的权限
Set GID
- SGID 对二进制程序有用;
- 程序执行者对亍该程序来说,需具备 x 的权限;
- 执行者在执行的过程中将会获得该程序群组的支持!
//观察文件类型:file file 目录名或文件
10.5 指令与文件的搜索
- 脚本文件名的搜索:which
- 文件名的搜索:whereis,locate,find
//which(寻找执行档),-a 表示将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称 which ifconfig //文件名的搜索,whereis [-bmsu] 文件或目录名 选项与参数: -b :只找 binary 格式的文件 -m :只找在说明文件 manual 路径下的文件 -s :叧找 source 来源文件 -u :搜寻不在上述三个项目当中的其他特殊文件 whereis ifconfig eg: [wendy@cs011 local]$ whereis ifconfig ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz [wendy@cs011 local]$ which ifconfig /usr/sbin/ifconfig
11 linux 磁盘与文件系统管理
11.1 认识EXT2 文件系统
文件系统特性
- 磁盘分区后需要进行格式化,原因:操作系统设定的文件属性/权限不同,为了存放这些档案所需的数据,分区需要进行格式化,以适应文件系统格式。比如windows主要用的是FAT/NTFS,linux主要是Ext2.
- 一个分区 格式化 一个文件系统
Ext2文件系统的内容
主要包含6部分:boot sector[启动扇区]、superblock、inode bitmap、block bitmap、inode table、data block。
- boot sector:启动扇区,可以安装开机管理程序。
- superblock:超级区块,记录此filesystem的整体信息,包括block/inode的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
- inode:记录文件的属性/权限等数据,其他重要项目为:每个inode大小均固定为128bytes,每个文件都仅会占用一个inode而已,因此文件系统能够建立的文件数量与inode的数量有关,每个inode基于一个block号码要花掉4bytes.
- inode table(inode 表格):文件的存取模式(r/w/e),文件的拥有者与群组(owner/group),文件的容量,文件建立或状态改变的时间(ctime),最近一次读取的时间(atime),最近修改的时间)(mtime),定义文件特性的标识(flag),如SetUID,文件真正内容的指向(pointer)。
- inode bitmap:inode对照表,记录使用与未使用的inode号码。
- block:记录文件的实际数据,若文件太大时,会占用多个block。目录的block则在记录目录底下文件名与其inode号码的对照表。
- data block:资料区块,用来放置文件内容数据地方,ext2系统支持的block大小有1K,2K,4K三种。在格式化时block的大小就固定了,且每个block都有编号,以方便inode的记录。
- block bitmap:区块对照表,记录使用与未使用的block号码。删除数据时,block bitmap当中相对应到该block号码的标志修改为未使用中。
- 日志式文件系统:多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间。
PS:inode table与data block称为数据存放区域,superblock、block bitmap、inode bitmap等区段称为metadata[中介资料]。
linux的正统文件系统为Ext2,Ext2文件系统的数据存取为“索引式”文件系统,该文件系统内的信息主要有:superblock、inode、block.每个inode与block都有编号,每个文件都会占用一个inode,inode内则有文件数据放置的block号码。ext2 文件系统示意图:
inode结构示意图:
inode/block资料存取示意图:数据存取的方式是“索引式”文件系统,文件系统格式化出inode与block的区块,假设某一个文件的属性与权限数据放在inode 4号,inode记录了文件数据放在2、7、13、15这4个block号码,就可以根据此来排列磁盘的阅读顺序,可以一口气将四个block内容读出来。
“索引式文件系统”数据存取如下:
“FAT文件系统”数据存取方式如下:文件的数据依序写入1 -> 7 -> 4 -> 15号这4个block号码中,但是文件系统没有办法一口气知道是个block号码。
目录:在ext2文件系统建立一个目录时,ext2会分配一个inode与至少一块block给该目录。
目录占用的block记录的数据示意图:
文件:ext2建立一个一般文件时,会分配一个inode与相对于该文件大小的block数量给该文件。
目录树的读取:透过挂载的信息可以找到挂载点的inode号码,此时能够得到根目录的inode内容,并已经该inode读取根目录的block内的文件名数据,在一层一层的往下读到正确的文件名。
11.2 文件系统的简单操作
磁盘与目录的容量:df,du
//磁盘的整体数据放在superblock区域中,但是每个个别文件的容量则在inode当中记载的。 //df:列出文件系统的整体磁盘使用量,df [-ahikHTm][目录或文件名] -a:列出所有的文件系统,包括系统特有的/proc等文件系统 -k:以KBytes的容量显示各文件系统 -m:以MBytes的容量显示各文件系统 -i : 不使用硬盘容量,而以inode的数量来显示 -h: 以易读的方式进行显示 eg: [wendy@cs011 ~]$ df -ih Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda2 2.3M 1.4M 912K 61% / devtmpfs 2.0M 393 2.0M 1% /dev tmpfs 2.0M 2 2.0M 1% /dev/shm tmpfs 2.0M 638 2.0M 1% /run tmpfs 2.0M 16 2.0M 1% /sys/fs/cgroup /dev/vdb1 500M 1.9M 499M 1% /opt tmpfs 2.0M 1 2.0M 1% /run/user/1000 //du:评估文件系统的磁盘使用量(常用在推估目录所占容量),du [-ahskm] 文件或目录名称 -a:列出所有的文件与目录容量,因为默认仅统计目录底下的文件数量。 -h:易读的方式进行显示 -s:列出总量,不列出各目录占用容量 eg: [wendy@cs011 reading-system]$ du 1656736 ./log 1759460 . [wendy@cs011 reading-system]$ du -h 1.6G ./log 1.7G . [wendy@cs011 reading-system]$ du -s 1759460 . [wendy@cs011 reading-system]$ du -sh 1.7G .
实体链接与符号链接:ln
linux底下的链接有种方式:一种是类似windows快捷方式功能,快速链接到文件或目录,另一种是透过文件系统的inode连结来产生新档名,这种称为实体链接。
- Hard Link:实体链接,硬式连结或实际连结。每个文件都会占用一个inode,文件内容由inode的记录来指向。如果要读取该文件,先要经过目录记录的文件名来指向到正确的inode号码才能进行读取。
实体链接的文件读取示意图:不能跨文件系统,不能link目录。
- symbolic Link:符号链接,快捷方式。
符号链接的文件读取示意图:
//ln [-sf] 来源文件 目标文件 -s:符号链接,默认是硬链接 -f:如果目标文件存在时,就主动的将目标文件直接移除后再建立
11.3 磁盘的分割、格式化、检验与挂载
磁盘的使用必需要经过:分割、格式化与挂载,3个指令如下:fdisk -> mkfs -> mount。
磁盘分区:fdisk、partprobe.
//fdisk [-l] 装置名称 -l : 输出后面接的装置所有的分区内容。
磁盘格式化:mkfs、make2fs.
//mkfs [-t 文件系统格式] 装置文件名 -t:可以接文件系统格式,例如ext3,ext2,vfat等 mkfs -t ext3 /dev/hdc6 // 制作的/dec/hdc6格式化为ext3 文件系统 //mkfs[tab][tab],按下2个tab键,会发现mkfs支持的文件格式有很多,其中还可以格式化为vfat。 //mke2fs [-b block 大小][-i block 大小][-L 标头][-cj]装置 -b:可以设定每个block的大小,目前支持1024,2048,4096 bytes三种 -i: 多少容量给予一个inode呢 -c:检查磁盘错误 -L:后面可以接标头名称(Label) -j: mke2fs是ext2,加上-j后,会主动加入journal而成为ext3.
磁盘检验:fsck、badblocks.
//fsck [-t 文件系统][-ACay] 装置名称 ,用来检验文件系统是否出错 -t:如同mkfs一样,需要指定文件系统 fsck [tab][tab] //系统有多少文件系统支持的fsck软件。 //badblocks -[svw] 装置名称,用来检查硬盘或软件扇区有没有坏轨的指令,可以通过[mke2fs -c 装置文件名 ]在进行格式化时处理磁盘表面的读取测试。 -s:在屏幕上列出进度 -v:可以在屏幕上看到进度 -w:使用写入的方式来测试。 badblocks -sv /dev/hdc6
磁盘挂载与卸除:mount、unmount.
挂载点 = 目录,而这个目录是进入磁盘分区的入口。挂载前确定点如下:
- 单一文件系统不应该被重复挂载在不同的挂载点(目录)中。
- 单一目录不应该重复挂载多个文件系统。
- 要作为挂载点的目录,理论上都是空目录。
文件系统挂载到我们的linux系统上,就要使用mount。
//mount -a //mount [-l] //mount [-t 文件系统][-L Label名][-o 额外选项][-n]装置文件名 挂载点 -a:按配置文件/etc/fstab的数据将所有未挂载的磁盘都进行挂载 -l:输入mount会显示目前挂载的信息。 -n:默认会将实际挂载的情况时实时写入/etc/mtab中。 mkdir /mnt/hdc6 mount /dev/hdc6 /mnt/hdc6 df /etc/filesystem:系统指定的测试挂载文件系统类型 /proc/filesystems:linux系统已经加载的文件系统类型 mount -l //查看已挂载的文件,包含各文件系统的Label名称
// unmount [-fn] 装置文件名或挂载点 ,将装置文件卸除 -f:强制卸除!可用在类似网络文件系统(NFS)无法读取到的情况下 -n:不更新 /etc/mtab情况下卸除 eg: unmount /dev/hdc6 //用装置文件名来卸除 unmount /media/cdrom //用挂载点来卸除 unmount /mnt/flash //因为挂载点比较好记忆 unmount /dev/df0 //用装置文件名 unmount /mnt/home //一定要用挂载点,挂载的是目录
磁盘参数修订:mknod、e2label、tune2fs、hdparm.
11.4 设定开机挂载
开机挂载:/etc/fstab、/etc/mtab
特殊装置loop挂载(映象档不刻录就挂载使用)
11.5 内存置换空间(swap)之建置
使用实体分区建置swap
//实体分区建置swap //1、分割:先使用fdisk在你的磁盘中分割出一个分割槽给系统作为swap. //2、格式化:利用建立swap格式的[mkswap 装置文件名]就能格式化该分割槽称为swap格式 //3、使用:启动swap装置启动,方法:swapon 装置文件名 //4、观察,free指令查看内存用量 eg: fdisk /dev/hdc partprobe //核心更新分区表 mkswap /dev/hdc7 free
使用文件建置swap
swap使用上的限制