一、主机的规划与磁盘分区
1、linux与硬件的搭配
- 各个组件或者装置在linux底下都是一个文件。
- 开机流程
- BIOS:开机主动执行的韧体,会认识第一个可开机的装置
- MBR:第一个可开机的装置的第一个扇区内的主要启动记录区块,内含开机管理程序
- 开机股那里程序(boot loader):一支可读取核心文件来执行的软件
- 提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能!
- 载入核心文件:直接指向可开机的程序区段来开始操作系统
- 转交其他loader:将开机管理功能转交给其他loader负责
- 核心文件:开始操作系统的功能。。。
2、磁盘分区
- 目录树结构:整个目录树架构最重要的就是那个根目录(root directory)这个根目录的表示方法为一条斜线/
- 挂载:就是利用一个目录当作进入点,将磁盘分区槽的数据放置在该目录下;也就是说,进入该目录就可以读取该分区槽的意思。这个动作叫做挂在,进入的点叫做挂载点。
二、安装centos7
- 若安装笔记本电脑失败时,可尝试在开机时加入【linux nofb apm=off acpi=off】来关闭省电功能
- 安装过程进入分区后,请以【自定义的分区模式】来处理自己规划的分区方式
- centos 7预设使用xfs作为文件系统
- 没有连上Internet时,可尝试关闭防火墙,但SELinux最好选择强制状态
- 设定时不要选择启动kdump,应为那是给核心开发查阅当机数据
- 如果我的磁盘分区时使用MBR方式,并设定了四个Primary分区槽,这是磁盘还有空间,由于最多只有四个Primary的磁盘分区槽,没有多的可以进行分区了,且由于没有Extended,就不能在使用Logical分区。
三、首次登入与在线求助
查看文档
- 空格键——向下翻一页
- 【Page Down】——向下翻一页
- 【Page Up】——向上翻一页
- 【Home】——去到第一页
- 【End】——去到最后一页
- /string 向【下】搜寻string这个字符串,如果要搜寻vbird的话,就输入/vbird
- ?string 向【上】搜寻string这个字符串
- n,N:继续往下查询N用于反向查询
- q 结束
Linux系统在线求助man page
man -f 指令 ,在某些情况下,你可能知道要使用某些特定的指令或者是修改某些特定的配置文件,但是偏偏忘记了该指令的完整名称。有些时候则是你只记得该指令的部分关键词。
【man -f man】
- 左边部分:指令(或文件)以及该指令所代表的意义(就是那个数字);
- 右边部分:这个指令的简易说明
【man 1 yum-groups-manager】
info page
- info page 则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写,并且在各个页面中还有类似的网页的【超链接】来跳到各不同的页面中,每个独立的页面也被称为一个节点。
总结:
- 在终端机模式中,如果你知道某个指令,但却忘记了相关选项与参数,请先善用 –help的功能来查询相关信息
- 当有任何你不知道的指令或文件格式这种玩意儿,请使用man或者info来查询
- 而如果你想要架设一些其他的服务,或想要利用一整套软件来达成某项功能时,到/usr/share/doc底下查一下有没有该服务的说明文档
超级文书编辑器:nano
- [ctrl]-G:取得联机帮助(help),很有用的!
- [ctrl]-X:离开 naon 软件,若有修改过文件会提示是否需要储存喔!
- [ctrl]-O:储存文件,若你有权限的话就能够储存文件了;
- [ctrl]-R:从其他文件读入资料,可以将某个文件的内容贴在本文件中;
- [ctrl]-W:搜寻字符串,这个也是很有帮助的指令喔!
- [ctrl]-C:说明目前光标所在处的行数与列数等信息;
- [ctrl]-_:可以直接输入行号,让光标快速移动到该行;
- [alt]-Y:校正语法功能开启或关闭(单击开、再单击关)
- [alt]-M:可以支持鼠标来移动光标的功能
正确的关机方法
在你看不到的屏幕背后其实可能有相当多人同时在你的主机上面工作,若不正常关机,则可能造成文件系统的损毁。
观察系统的使用状态:
- 如果要看目前有谁在线,可以下达【who】这个指令,而如果要看网络的联机状态,可以下达【netstat -a】这个指令,要看背景执行的程序可以执行【ps -aux】这个指令
关机:shutdown
重启:reboot
相关指令
将数据同步写入硬盘中的指令:sync
转换为管理员权限
- su -
- 输入密码后转为管理员权限
- tips:
- sync可以被一般账号使用,只不过一般账号用户所更新的硬盘数据就仅有自己的数据,不像root可以更新整个系统中的数据了。
- su -
惯用的关机指令:shutdown
shutdown 【参数】
-k:不要真的关机,只是发送警告讯息出去!
-r:在将系统的服务停掉之后就重新启动(常用)
-h:将系统的服务停掉后,立即关机。(常用)
-c:取消已经在进行中的shutdown指令内容。
时间:指定系统关机的时间!世家你的范例地下会说明。若没有这个项目,则默认1分钟后自动进行。
例子:
1
2
3
4
5
6shutdown -h now #立刻关机,其中now相当于时间为0的状态
shutdown -h 20:25 #系统在今天的20:25分会关机,若在21:25才下达此指令,则隔天才关机
shutdown -h +10 #系统踩过十分钟后自动关机
shutdown -r now #系统立刻重启
shutdown -r +30 'The system will reboot' #再过三十分钟系统会重新启动,并显示后面的讯息给所有在线使用者
shutdown -k now 'This system will reboot' #仅发出警告信件的参数!系统并不会关机,吓唬人。
systemctl【指令】
- 指令项目包括如下:
- halt:进入系统停止模式,屏幕可能会保留一些讯息,这与你的电源管理模式有关
- poweroff:进入系统关机模式,直接关机没有提供电力
- reboot:直接重新启动
- suspend:进入休眠模式
- 指令项目包括如下:
重新启动,关机:reboot,halt,poweroff
- 重点回顾
- 为了避免瞬间断电造成的 Linux 系统危害,建议做为服务器的 Linux 主机应该加上不断电系统来持续提供稳定的电力;
- 养成良好的操作习惯,尽量不要使用 root 直接登入系统,应使用一般账号登入系统,有需要再转换身份
- 可以透过『活动总览』查看系统所有使用的软件及快速启用惯用软件
- 在 X 的环境下想要『强制』重新启动 X 的组合按键为:『[alt]+[ctrl]+[backspace]』;
- 预设情况下,Linux 提供 tty1~tty6 的终端机界面;
- 在终端机环境中,可依据提示字符为$或#判断为一般账号或 root 账号;
- 取得终端机支持的语系数据可下达『echo $LANG』或『locale』指令;
- date 可显示日期、cal 可显示日历、bc 可以做为计算器软件;
- 组合按键中,[tab]按键可做为(1)命令补齐或(2)档名补齐或(3)参数选项补齐,[crtl]-[c]可以中断目前正在运作中的程序;
- Linux 系统上的英文大小写为不同的资料
- 联机帮助系统有 man 及 info 两个常见的指令;
- man page 说明后面的数字中,1 代表一般账号可用指令,8 代表系统管理员常用指令,5 代表系统配置文件格式;
- info page 可将一份说明文件拆成多个节点(node)显示,并具有类似超链接的功能,增加易读性;
- 系统需正确的关机比较不容易损坏,可使用 shutdown, poweroff 等指令关机。
四、linux的文件权限与目录配置
- 文件权限read/write/execute权限
(一)使用者与群组
1、文件拥有者:
- linux是多人多任务的系统,为了考虑每个人的隐私以及每个人喜好的工作环境,【文件拥有者】的角色就显得的相当重要了。
2、群组概念:
- 群组最有用的功能是团队开发中使用,限制非自己团队的其他人不能阅览内容。
- 如果teacher这个账号是projecta与projectb这两个专题的老师,想同时观察两者的进度,则同时支持projecta与projectb这两个群组!也就是说:每个账号都可以由多个群组的支持-
- 使用者和群组的概念
- 使用者的意义:有使用权但是有的私人文件不能使用
- 群组:属于群组的都能使用
3、其他人的概念
- 群组意外的用户则为其他人
4、Linux用户身份与群组记录的文件
- linux系统中root相关信息,/etc/passwd这个文件内的。密码则记录在/etc/shadow这个文件下
- linux所有的组名都在/etc/group
(二)linux文件权限概念
1、linux文件按属性
- ls -al
-rw-r–r–. 1 root root 2150 10月 15 16:01 initial-setup-ks.cfg
1)第一栏代表这个文件的类型与权限(permission)
- 【rwx】的三个参数的组合,【r】代表可读的(read)【w】代表可写(write)【x】代表可执行(execute)
- 【-rwxr-xr–】:
- 【-】【rwx】【r-x】【r–】
- 【1】【234】【567】【890】
- 1:代表这个文件名为目录或者文件,本例中为文件(-)
- 234:拥有者的权限,本例中为可读,可写,可执行(rwx)
- 567:同群组用户权力,本例中为可读可执行(rx)
- 980:其他用户权力,本例中为可读(r),就是只读之意
- 同时注意到,rwx所在的位置是不会改变的,有该权限就会显示字符,没有该权限就变成减号(-)就是了
2)第二栏表示有多少档名连接到此节点(i-node)
每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录,因此每个档名就会链接一个i-node。这个属性记录的,就是有多少不同的档名连接到相同的一个i-node号码。
3)第三栏表示这个文件(或目录)的【拥有者账号】
4)第四栏表示这个文件的所属群组
5)第五栏为这个文件的容量大小,默认单位为bytes
6)第六栏为这个文件的建档日期或者是最近的修改日期
7)第七栏为这个文件的档名
- 如果档名之前多了一个【.】,则代表这个文件为【隐藏档】,可以使用【ls】【ls -a】。
2、linux文件权限的重要性
- 系统保护的功能
- 团队开发软件或数据共享工具
- 未将权限设定妥当的危害
- 在修改linux文件与目录属性之前,要先搞清楚什么数据是可变的,什么是不可变的。
3、如何改变文件属性与权限
chgrp:改变文件所属群组
chown:改变文件拥有者
chmod:改变文件的权限,SUID,SGID,SBIT等特性
- 改变所属群组,chgrp(change group的缩写)
1 | chgrp users test.txt |
- 改变文件拥有者,chown(change owner的缩写)
- /etc/passwd这个记录的用户名称才能改变,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上-R的选项即可。
1 | chown bin test.txt #将test.txt的拥有者改为bin这个账号 |
改变权限,chmod
数字类型改变文件权限
- 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+0+0=0
1 | chmod 777 test.txt #将test.txt这个文件权限都设定 |
4、目录与文件之权限意义
1)权限对文件的重要性
- r(read):可读取此文件的实际内容,如读取文本文件的文字内容
- w(write):可以编辑,新增或者修改该文件的内容(但不含删除该文件)
- x(eXecute):该文件具有可以被系统执行的权限
2)权限对目录的重要性
- r(read contents in directory ):表示具有读取目录结构列表的权限
- w(modify contents of directory ):表示你具有移动该目录结构列表的权限
- 建立新的文件与目录
- 删除已经存在的文件与目录(不论该文件的权限为何!)
- 将已经存在的文件或者目录进行更名;
- 搬移该目录内的文件,目录位置
- x(access directory):x代表的是用户能否进入该目录成为工作目录的用途,即你登陆Linux时,所在的家目录就是你当下的工作目录
- 如果你在某目录下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r或者w的权限
- 要开放目录给任何人浏览时,应该至少给r和x权限但是w权限不能随便给
5、Linux文件种类与扩展名
1)文件种类
- 正规文件
- 纯文本:人类可以读到的数据,例如数字,字母等
- 二进制文件:电脑可以执行的文件
- 数据格式文件:程序运作时候会读取特定格式的文件,例如我们登录数据,记录在/var/log/wtmp 中,我们可以用last读出来,但是用cat则是乱码
- 目录
- 连结档:类似window的快捷方式,第一个属性为【I】
- 设备与装置文件
- 与系统周边以及存储等相关的一些文件,通常都集中在/dev这个目录中,分为两种
- 区块设备档:一些存储设备,例如硬盘,/dev/sda
- 字符设备文件:一些串型设备,例如键盘鼠标等
- 与系统周边以及存储等相关的一些文件,通常都集中在/dev这个目录中,分为两种
- 资料接口文件(sockets):我们可以启动一个程序来监听客户端的要求,而客户端可以透过这个socket来进行数据的沟通。属性为【s】,位置/run/tmp
- 数据传输文件(FIFO,pips):特殊的文件类型,他主要目的解决多个程序同时存取一个文件造成的错误问题。属性为:【p】
2)Linux文件扩展名
一个linux文件能不能执行,我们通常与他第一栏的十个属性有关,在linux下,只要你有这个文件的权限为x时,则这个文件就有执行能力。
“具有可执行能力”和“具有可执行力的代码”是两回事
通常可执行的后缀名:
- *.sh:脚本或者批处理文件
- Z, .tar, .tar.gz, .zip, *.tgz:经过打包的压缩文件
- .html , .php :网页相关文件
3)Linux文件长度的限制
单一的文件或者目录最大允许文件名为:255bytes,以一个ASCII英文占用一个bytes来说,则大约可以255个字符长度,若以每中文字占用2bytes来说,最大档名大约在128个中文字之谱。
4)Linux文件名的限制
避免特殊字符
* ? > < ; & ! [ ] | \ ‘ “ ` ( ) { }
(三)Linux目录配置
1、Linux的目录配置依据:FHS
将目录分为四种交互形态:
可分享的:可以分享给其他挂载使用的目录,所以包括执行文件,与用户邮件等数据,是能够分享给网络上其他主机挂载用的目录
不可分享的:自己机器上运作的装置文件或者与程序有关的socket文件等,由于与自身机器有关,所以当然就不适合分享给其他主机了。
不变的:有些数据是不会经常变动的,跟随distribution而不变动,例如:函数库,文件说明,系统管理员所管理的主机配置文件
可变动的:经常改变的数据,例如登录文件,一般用户可自行收受的新闻组等。
/(root,根目录):与开机有关
/usr(unix software resource):与软件安装/执行有关
/var(variable):与系统运作过程有关
根目录(/)的意义与内容
根目录也与开机/还原/系统修复等动作有关
- 根目录所在的分区卡槽应该越少越好,应用程序所安装的软件最好不要与根目录放在同一个分区槽内,保持根目录越小越少。如此不但效能较佳,根目录所在的文件系统也较不容易发生的问题。
FHS要求必须要存在的目录
- /bin 放置 的是在单人维护模式下还能够被操作的指令
- /boot 这个目录主要在放置开机会使用到的文件,如果使用的是grub2这个开机管理程序,则还会存在/boot/grub2/这个目录
- /dev 这个目录任何装置与接口设备都是以文件的形态存在这个目录中。
/etc 系统主要的配置都放在这个目录里面,FHS建议不要放置可执行文件,
- /etc/opt(必要):这个目录放置第三方协力软件 /opt的相关配置文件
- /etc/X11(建议):与X Window有关的配置
- /etc/sgml(建议):与SGML格式有关的各项配置文件
- /etc/xml(建议):与xml格式有关的各项配置文件
lib /lib放置的则是在开机时会用到函数库,以及在/bin或/sbin底下的指令会呼叫的函式库而已。
- /lib/modules:这个目录主要放置可抽换的核心相关模块。
- media /media底下放置的是可移除的装置,如软盘,光盘。
- /mnt 暂时挂载
- /opt 这个是给第三方协力软件放置的目录
- /run 早期的FHS规定系统开机后所产生的各项信息应该要放置到/var/run目录下,新版的FHS则规范到/run底下
- /sbin 放在/sbin 底下的为开机过程中所需要的,里面包括了开机、修复、还原 系统所需要的指令,本机自行安装的软件所产生的系统执行文件,则防止到/usr/local/sbin/当中
- /srv 是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如www,ftp。
- /tmp 这是让一般用户或者正在执行的程序暂时放置的地方。每个人都能够存储的。建议每次开机都清除/tmp的数据。
- /usr 第二层FHS设定
- /var 第二层FHS设定,主要为放置变动性的数据
FHS建议可以存在的目录
- /home 这是系统默认的用户家目录,新增一个账号时,默认的用户家目录,都会规范在这里。
- /lib
用来存放在与 /lib 不同格式的二进制函式库 - /root 系统的管理员(root)的家目录 。
- /usr 的意义与内容:/usr里面防止的内容是可分享的与不可变动的。GHS建议所有软件开发者,应该将他们的数据合理的分别放置的到这个目录的次目录,而不自行建立该软件自己独立的目录。
- /var的意义与内容:
- 如果/usr 是安装时会占用较大硬盘容量的目录,那么/var 就是在系统运作后才会渐渐占用硬盘容量的目录。
第一部份:FHS 要求必须要存在的目录 | |
---|---|
/var/cache/ | 应用程序本身运作过程中会产生的一些暂存档; |
/var/lib/ | 程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的 目录。 举例来说,MySQL 的数据库放置到/var/lib/mysql/而 rpm 的数据库则放到/var/lib/rpm 去! |
/var/lock/ | 某些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就 可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。举 例来说,刻录机正在刻录一块光盘,你想一下,会不会有两个人同时在使用一个刻录机烧片? 如果 两个人同时刻录,那片子写入的是谁的资料?所以当第一个人在刻录时该刻录机就会被上锁, 第二 个人就得要该装置被解除锁定(就是前一个人用完了)才能够继续使用啰。目前此目录也已经挪到 /run/lock 中! |
/var/log/ | 重要到不行!这是登录文件放置的目录!里面比较重要的文件如/var/log/messages, /var/log/wtmp(记 录登入者的信息)等。 |
/var/mail/ | 放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中! 通常这两个目录 是互为链接文件啦! |
/var/run/ | 某些程序或者是服务启动后,会将他们的 PID 放置在这个目录下喔!至于 PID 的意义我们会在后续章 节提到的。 与 /run 相同,这个目录链接到 /run 去了! |
/var/spool/ | 这个目录通常放置一些队列数据,所谓的『队列』就是排队等待其他程序使用的数据啦!这些数据被 使用后通常都会被删除。举例来说,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信 件后该封信原则上就会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出 后就被删除。如果是工作排程数据(crontab),就会被放置到/var/spool/cron/目录中! |
1)针对FHS,各家distributions 的异同,与 CentOS7 的变化
CentOS 的网络设定数据放在/etc/sysconfig/network-scripts/ 目录下,但是 SuSE 则是将网络放置在 /etc/sysconfig/network/ 目录下,目录名称可是不同的呢! 】
- /bin –> /usr/bin
- /sbin –> /usr/sbin
- /lib –> /usr/lib
- /lib64 –> /usr/lib64
- /var/lock –> /run/lock
- /var/run –> /run
2、目录树
在linux底下,所有的文件与目录都是由根目录开始的。
- 目录树的起始点为根目录(/,root);
- 每一个目录不止能使用本地端的partition的文件系统,也可以使用网络上的filesystem。举例来说,可以利用Network File System(NFS)服务器挂载某特定目录
- 每一个文件在此目录中的文件名(包含完整路径)都是独一无二的
3、绝对路径和相对路径
- .:代表当前目录,也可以使用./来表示
- ..:代表上一层目录,也可以../来表示
4、Centos 的观察
1 | uname -r #查看核心版本 |
5、重点
更改文件的群组支持可用 chgrp,修改文件的拥有者可用 chown,修改文件的权限可用 chmod
修改文件权限
chmod 754 filename
配置数据
- /etc/ 几乎系统所有配置文件均在这里
- /boot/ 开机配置文件,
- /usr/bin, /bin 一般执行档摆放的地方
- /usr/sbin,/sbin 系统管理员常用的指令集
- /dev 所有系统装置文件的目录
- /var/log 系统注册表文件的地方
- /run 经常变动的项目
五、Linux文件与目录管理
1、目录与路径
文件与目录的检视:ls
复制、删除、移动:cp, rm, mv
2、文件与目录管理
取得路径的文件名与目录名称
basename /etc/sysconfig/network # network 取得最后的档名
- dirname /etc/sysconfig/network # /etc/sysconfig 取得目录名
3、文件内容查阅
- cat 由第一行还是显示文件内容
- tac 由最后一行显示文件内容(tac是cat倒着写的)
- nl 显示的时候 显示行号
- more 一页一页显示文件内容
- less与more类似 比more好的是,他可以往前翻页
- head 只看头几行
- tail 只看尾巴几行
- od 以二进制的方式读取文件内容
4、文件与目录的默认权限与隐藏权限
除了基本 r, w, x 权限外,在 Linux 传统的 Ext2/Ext3/Ext4 文件系统下,我们还可以设定其他的系统隐藏属性, 这部份可使用 chattr 来设定,而以 lsattr 来查看,最重要的属性就是可以设定其不可修改的特性!
文件预设权限:umask 用户在建立文件时默认的属性,修改权限则umask 后加对应数值,例如umask 002
文件隐藏属性:
- chattr(配置隐藏属性)
1
chattr [+-=][ASacdistu] 文件或目录名称
1
2
3
4
5
6
7
8
9
10范例:请尝试到/tmp 底下建立文件,并加入 i 的参数,尝试删除看看。
[root@study ~]# cd /tmp
[root@study tmp]# touch attrtest <==建立一个空文件
[root@study tmp]# chattr +i attrtest <==给予 i 的属性
[root@study tmp]# rm attrtest <==尝试删除看看
rm: remove regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted
# 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除设定!
范例:请将该文件的 i 属性取消!
[root@study tmp]# chattr -i attrtest
lsattr(显示文件隐藏属性)
1
lsattr [-adR] 文件或目录
1
2
3
4
5
6
7选项与参数:
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!
[root@study tmp]# chattr +aiS attrtest
[root@study tmp]# lsattr attrtest
--S-ia---------- attrtest
文件特殊权限
- SUID,SGID,SBIT
观察文件类型:file
5、指令与文件搜索
- 脚本文件名的搜寻
1 | which [-a] command |
1 | 选项或参数: |
- 文件档名的搜寻
1 | whereis [-bmsu] 文件或目录名 |
1 | 选项与参数: |
- locate/updatedb
- updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库
文件; - locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名。
- updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库
1 | [root@study ~]# locate [-ir] keyword |
- find
1 | find [PATH] [option] [action] |
1 | 选项与参数: |
1 | 范例一:将过去系统上面 24 小时内有更动过内容 (mtime) 的文件列出 |
1 | 选项与参数: |
6、复习
- 特殊目录有:., .., -, ~, ~account 需要注意;
- rmdir 仅能删除空目录,要删除非空目录需使用『 rm -r 』指令;
- cat -n 与 nl 均可显示行号,但默认的情况下,空白行会不会编号并不相同
- 文件具有 SUID 的特殊权限时,代表当用户执行此一 binary 程序时,在执行过程中用户会暂时具有程序拥有者的权限
- 目录具有 SGID 的特殊权限时,代表用户在这个目录底下新建的文件之群组都会与该目录的组名相同。
- 目录具有 SBIT 的特殊权限时,代表在该目录下用户建立的文件只有自己与 root 能够删除!
- 观察文件的类型可以使用 file 指令来观察;
- 搜寻指令的完整文件名可用 which 或 type ,这两个指令都是透过 PATH 变量来搜寻文件名;
搜寻文件的完整档名可以使用 whereis 找特定目录或 locate 到数据库去搜寻,而不实际搜寻文件系统;
利用 find 可以加入许多选项来直接查询文件系统,以获得自己想要知道的档名。
- 搜寻指令的完整文件名可用 which 或 type ,这两个指令都是透过 PATH 变量来搜寻文件名;
六、Linux磁盘与文件系统
6.1、认识Linux系统
- EXT2:是使用inode/block/superblock这种inode为基础的文件系统
- 我们在Linux下的文件系统建立一个目录时,文件就会分配一个inode与至少一块block给该目录。
- EXT3,4是EXT2的升级版本,新增了日志等功能,推荐直接用EXT4
- 挂载点:每个filesystem 都有独立的inode/block/superblock 。挂载点一定是目录,该目录为进入该文件系统的入口。
1 | [root@study ~]# ls -lid / /boot /home |
- inode号为128 filesystem为17,4,5则它们为不同的目录
1 | [root@study ~]# ls -ild / /. /.. |
inode号为128 filesystem为17则它们为相同的目录
查看Linux支持的文件系统
1 | ls -l /lib/modules/$(uname -r)/kernel/fs |
XFS:Centos 7 已经由原本的EXT4变成了XFS文件系统。
- Ext家族当前较伤脑筋的地方:支持度最广,但格式化超级慢
- xfs是一个日志式的文件系统,主要用在高容量磁盘以及高性能文件系统只用。
- 一个资料区(data section)
- 一个文件系统活动登录区(log section)
- 一个实时运作区(realtime section)
范例一
1 | 找出系统 /boot 这个挂载点底下的文件系统的 superblock 纪录 |
- 说明:
- 第 1 行里面的 isize 指的是 inode 的容量,每个有 256bytes 这么大。至于 agcount 则是前面谈到的储存区群组 (allocation group) 的个数,共有 4 个, agsize 则是指每个储存区群组具有 65536 个 block 。配合第 4 行的 block 设定为 4K,因此整个文件系统的容量应该就是 4655364K 这么大!
- 第 2 行里面 sectsz 指的是逻辑扇区 (sector) 的容量设定为 512bytes 这么大的意思。
- 第 4 行里面的 bsize 指的是 block 的容量,每个 block 为 4K 的意思,共有 262144 个 block 在这个文件系统内。
- 第 5 行里面的 sunit 与 swidth 与磁盘阵列的 stripe 相关性较高。这部份我们底下格式化的时候会举一个例子来说明。
- 第 7 行里面的 internal 指的是这个登录区的位置在文件系统内,而不是外部设备的意思。且占用了 4K *2560 个 block,总共约 10M 的容量。
- 第 9 行里面的 realtime 区域,里面的 extent 容量为 4K。不过目前没有使用。
6.2、文件系统的简单操作
6.2.1 磁盘与目录的容量
- df:列出文件的整体磁盘使用量
- -h 会以G/M等容量格式显示出来
- -aT 系统内的所有特殊文件格式及名称都列出来
1 | 将 /etc 底下的可用的磁盘容量以易读的容量格式显示 |
1 | 范例五:将目前各个 partition 当中可用的 inode 数量列出 |
- du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
1 | 选项与参数: |
- 直接输入du没有任何选项时,则默认分析当前目录
- du分析的是当前目录下的所有数据的总和,如果想减少此目录的加总则要加上-S
6.2.2 实体链接与符号链接 ln
在Linux底下的连接档有两种,一种是类似的Windows的快捷方式,可以快速的链接到目标文件,另一种则是透过文件系统的inode链接来产生新的文档名,这种链接称为实体链接。
1)建立实体链接 hard link
1 | [root@study ~]# ll -i /etc/crontab |
- 如果将任何一个档名删除,其实inode和block都还是存在的,不论在哪个档名修改,结果都会写入相同的inode与block中。
- hard link限制:
- 不能跨Filesytem
- 不能link目录
2)Symbolic Link(符号链接,亦既是快捷方式)
Symbolic link 就是在建立一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名!由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的文件会『开不了』 。
1 | [root@study ~]# ln -s /etc/crontab crontab2 |
- 选项
- -s:如果不加任何参数就进行链接则是hand link ,至于-s就是symbolic link
- -f:如果目标文件存在时,就主动将目标文件直接移除后再建立
6.3、磁盘的分区、格式化、检验、挂载
6.3.1 观察磁盘分区状态
- lsblk:列出磁盘上所有列表
- blkid:找出装置的UUID
- parted:列出磁盘分区表类型与分区信息
6.3.2 磁盘分区:gdisk/fdisk
【MBR 分区表用fdisk,GPT分区表用gdisk】
- partprobe 更新Linux核心的分区表信息
- gdisk 删除分区
1 | gdisk /dev/vda |
6.3.3 磁盘格式化(建置文件系统)
- XFS文件系统 mkfs.xfs
1 | mkfs.xfs -f /dev/sdb |
- XFS文件系统for RAID(磁盘阵列) 效能优化(Optional)
1 | [root@study ~]# mkfs.xfs -f -d agcount=2,sunit=512,swidth=3584 -r extsize=1792k /dev/vda4 |
- EXT4文件系统 mkfs.ext4
1 | [root@study ~]# mkfs.ext4 [-b size] [-L label] 装置名称 |
- 其他文件系统 mkfs
- mkfs 是综合指令使用mkfs -t xfs时就会找mkfs.xfs的相关参数给我们使用
1 | [root@study ~]# mkfs[tab][tab] |
6.3.4 文件系统检验
- xfs_repair 处理XFS文件系统
1 | xfs_repair [-find] 装置名称 |
- fsck.ext4 处理EXT4文件系统
1 | fsck.ext4 /dev/sdb |
6.3.5 文件系统的挂载与卸除
- mount
1 | mount /dev/sdb /data/cdrom |
1 | mount UUID="e0a6af55-26e7-4cb7-a515-826a8bd29e90" /data/xfs |
- 重新挂载根目录与挂载不特定目录
1 | 范例:将 / 重新挂载,并加入参数为 rw 与 auto |
- umount(将装置文件卸除)
1 | umount -f /dev/sdb |
6.3.6 磁盘/文件系统参数修订
- mknod
- xfs_admin 修改XFS文件系统UUID与Label name
1 | 范例:利用 uuidgen 产生新 UUID 来设定 /dev/vda4,并测试挂载 |
- tune2fs修改ext4的lable name 与 UUID
1 | 范例:列出 /dev/vda5 的 label name 之后,将它改成 vbird_ext4 |
6.4 设定开机挂载
6.4.1 开机挂载 /etc/fstab 及 /etc/mtab
- /etc/fstab 是将我们利用mount指令进行挂载时将所有选项与参数写入到这个文件中
1 | [root@bogon ~]# |
参数说明:
- 磁盘装置文件名/UUID/LABEL name:
- 文件系统或磁盘的装置文件名,如 /dev/vda2 等
- 文件系统的 UUID 名称,如 UUID=xxx
- 文件系统的 LABEL 名称,例如 LABEL=xxx
- 第二栏:挂载点 (mount point):
- 一定是目录
- 第三栏:磁盘分区槽的文件系统:
- 在手动挂载时可以让系统自动测试挂载,但在这个文件当中我们必须要手动写入文件系统才行!包括 xfs, ext4, vfat, reiserfs, nfs 等等。
- 第四栏:文件系统参数:
- defaults:同时具有 rw, suid, dev, exec, auto, nouser, async 等参数。 基本上,预设情况使用 efaults 设定即可!
- 第五栏:能否被 dump 备份指令作用:
- dump 是一个用来做为备份的指令,由于备份方案有很多,所以这里写0就好了。
- 第六栏:是否以 fsck 检验扇区:
- 早期开机流程中会校验,主要是透过fsck去做的,现在由于xfs文件系统会自己进行校验,不需要额外校验,直接填写0
- 磁盘装置文件名/UUID/LABEL name:
如果/etc/fstab输入错误导致无法开机
进入单人模式
1
[root@study ~]# mount -n -o remount,rw /
6.4.2 特殊装置loop挂载(映像档不刻录就挂载使用)
如果有光盘映像文件或者是使用文件作为磁盘的方式时,就用特殊的方式将他挂载起来-
- 挂载光盘/DVD映像文件 通过loop文件来挂载
1 | [root@study ~]# mount -o loop /tmp/CentOS-7.0-1406-x86_64-DVD.iso /data/centos_dvd |
建立大文件以制作loop装置文件
建立大文件
1
2
3
4
5
6
7
8
9
10
11#假设我要建立一个空的文件在 /srv/loopdev
[root@study ~]# dd if=/dev/zero of=/srv/loopdev bs=1M count=512
512+0 records in <==读入 512 笔资料
512+0 records out <==输出 512 笔数据
536870912 bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s
# 这个指令的简单意义如下:
# if 是 input file ,输入文件。那个 /dev/zero 是会一直输出 0 的装置!# of 是 output file ,将一堆零写入到后面接的文件中。
# bs 是每个 block 大小,就像文件系统那样的 block 意义;
# count 则是总共几个 bs 的意思。所以 bs*count 就是这个文件的容量了!
[root@study ~]# ll -h /srv/loopdev
-rw-r--r--. 1 root root 512M Jun 25 19:46 /srv/loopdev
大型文件格式化
1
2
3[root@study ~]# mkfs.xfs -f /srv/loopdev
[root@study ~]# blkid /srv/loopdev
/srv/loopdev: UUID="59615042-c25e-4ec8-acd2-5cf407f2b55e" TYPE="xfs
挂载
1
2
3
4[root@study ~]# mount -o loop UUID="7dd97bd2-4446-48fd-9d23-a8b03ffdd5ee" /mnt
[root@study ~]# df /mnt
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 520876 26372 494504
6.5 内存置换空间(swap)之建制
6.5.1 使用实体分区槽建置swap
- 先进行分区的行为
1 | [root@study ~]# gdisk /dev/vda |
- 开始建置 swap 格式
1 | [root@study ~]# mkswap /dev/vda6 |
- 开始观察与加载看看吧!
1 | [root@study ~]# free |
6.5.2 使用文件建置swap
- 使用dd这个指令来新增一个128MB的文件在/tmp底下:
1 | [root@study ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 |
- 使用 mkswap 将 /tmp/swap 这个文件格式化为 swap 的文件格式:
- 使用 swapon 来将 /tmp/swap 启动啰!
- 使用 swapoff 关掉 swap file,并设定自动启用
1 | [root@study ~]# nano /etc/fstab |
6.6 文件系统的特殊观察与操作
6.6.1 磁盘空间之浪费问题
一个 block 只能放置一个文件, 因此太多小文件将会浪费非常多的磁盘容量。
6.6.2 利用 GNU 的 parted 进行分区行为(Optional)
如果你想要将原本的 MBR 改成 GPT 分区表,或原本的 GPT 分区表改成 MBR 分区表,也能使用 parted ! 但是请不要使用 vda 来测试!因为分区表格式不能转换!因此进行底下的测试后,在该磁盘的系统应该是会损毁的!
七、文件与文件系统的压缩,打包与备份
7.1压缩文件的用途与技术
计算机工程师就利用一些复杂的计算方式, 将这些没有使用到的空间『丢』出来,以让文件占用的空间变小!这就是压缩的技术
7.2 Linux常见的压缩指令
7.2.1 gzip,zcat/zmore/zless/zgrep
1 | [dmtsai@study ~]$ gzip [-cdtv#] 檔名 |
当你使用 gzip 进行压缩时,在预设的状态下原本的文件会被压缩成为 .gz 的档名,源文件就不再存在了。
1 | 范例二:由于 services 是文本文件,请将范例一的压缩文件的内容读出来! |
1 | 范例三:将范例一的文件解压缩 |
7.2.2 bzip2,bzcat/bzmore/bzless/bzgrep
1 | [dmtsai@study ~]$ bzip2 [-cdkzv#] 檔名 |
使用和gzip一模一样,压缩率要更好一些,但是对于大文件需要的时间要长
7.2.3 xz, xzcat/xzmore/xzless/xzgrep
1 | [dmtsai@study ~]$ xz [-dtlkc#] 檔名 |
7.3 打包指令:tar
压缩:
1
2
3tar -jcv -f filename.tar.bz2 要被压缩的
tar -jtv -f filename.tar.bz2 查 询
tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录 解压缩:-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17选项与参数:
-c :建立打包文件,可搭配 -v 来察看过程中被打包的档名(filename)
-t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了;
-x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开
特别留意的是, -c, -t, -x 不可同时出现在一串指令列中。
-z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz
-j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2
-J :透过 xz 的支持进行压缩/解压缩:此时档名最好为 *.tar.xz
特别留意, -z, -j, -J 不可以同时出现在一串指令列中
-v :在压缩/解压缩的过程中,将正在处理的文件名显示出来!
-f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项啰!(比较不会忘记)
-C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
其他后续练习会使用到的选项介绍:
-p(小写) :保留备份数据的原本权限与属性,常用于备份(-c)重要的配置文件
-P(大写) :保留绝对路径,亦即允许备份数据中含有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包如果加上 -P 选项,那么文件名内的根目录就会存在喔!不过,鸟哥个人建议,还是不要加上 -P 这个选项来备份! 毕竟很多时候,我们备份是为了要未来追踪问题用的,倒不一定需要还原回原本的系统中! 所以拿掉根目录后,备份数据的应用会比较有弹性!也比较安全呢!
查阅内容
1
[root@study ~]# tar -jtv -f /root/etc.tar.bz2
解压缩
1
2
3
4[root@study ~]# tar -jxv -f /root/etc.tar.bz2
[root@study ~]# ll
....(前面省略)....
drwxr-xr-x. 131 root root 8192 Jun 26 22:14 etc解压缩到指定文件 -C
1
2
3
4
5# 解压缩到指定文件 -C
[root@study ~]# tar -jxv -f /root/etc.tar.bz2 -C /tmp
[root@study ~]# ll /tmp
....(前面省略)....
drwxr-xr-x. 131 root root解压缩单一文件的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 1. 先找到我们要的档名,假设解开 shadow 文件好了:
[root@study ~]# tar -jtv jtv -f /root/etc.tar.bz2 | grep 'shadow'
---------- root/root 721 2015-06-17 00:20 etc/gshadow
---------- root/root 1183 2015-06-17 00:20 etc/shadow-
---------- root/root 1210 2015-06-17 00:20 etc/shadow <==这是我们要的!
---------- root/root 707 2015-06-17 00:20 etc/gshadow-
# 先搜寻重要的档名!其中那个 grep 是『撷取』关键词的功能!我们会在第三篇说明!
# 这里您先有个概念即可!那个管线 | 配合 grep 可以撷取关键词的意思!
# 2. 将该文件解开!语法与实际作法如下:
[root@study ~]# tar -jxv -f f 打包檔.tar.bz2 待解待解开档开档名
[root@study ~]# tar -jxv -f /root/etc.tar.bz2 etc/shadow
etc/shadow
[root@study ~]# ll etc
total 4
----------. 1 root root 1210 Jun 17 00:20 shadow
# 很有趣!此时只会解开一个文件而已!不过,重点是那个档名!你要找到正确的档名。
# 在本例中,你不能写成 /etc/shadow !因为记录在 etc.tar.bz2 内的并没有 / 之故!
打包某目录,但不包含目录下的某些文件之作法 –exclude
1
2[root@study ~]# tar -jcv -f /root/system.tar.bz2 ----exclude=/root/etc* \
> ----exclude=/root/system.tar.bz2 /etc /root上面的指令是一整列的~其实你可以打成:『tar -jcv -f /root/system.tar.bz2 –exclude=/root/etc* –exclude=/root/system.tar.bz2 /etc /root』,如果想要两行输入时,最后面加上反斜杠 () 并立刻按下 [enter] , 就能够到第二行继续输入了。
仅备份比某个时刻还要新的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25# 1. 先由 find 找出比 /etc/passwd 还要新的文件
[root@study ~]# find /etc -newer /etc/passwd
....(过程省略)....
# 此时会显示出比 /etc/passwd 这个文件的 mtime 还要新的档名,
# 这个结果在每部主机都不相同!您先自行查阅自己的主机即可,不会跟鸟哥一样!
[root@study ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2092 Jun 17 00:20 /etc/passwd
# 2. 好了,那么使用 tar 来进行打包吧!日期为上面看到的 2015/06/17
[root@study ~]# tar -jcv jcv -f /root/etc.newer.then.passwd.tar.bz2 \
> --newer-mtime="2015/06/17" /etc/*
tar: Option --newer-mtime: Treating date `2015/06/17' as 2015-06-17 00:00:00
tar: Removing leading `/' from member names
/etc/abrt/
....(中间省略)....
/etc/alsa/
/etc/yum.repos.d/
....(中间省略)....
tar: /etc/yum.repos.d/CentOS-fasttrack.repo: file is unchanged; not dumped
# 最后行显示的是『没有被备份的』,亦即 not dumped 的意思!
# 3. 显示出文件即可
[root@study ~]# tar -jtv jtv -f /root/etc.newer.then.passwd.tar.bz2 | grep -v '/$'v '/$'
# 透过这个指令可以呼叫出 tar.bz2 内的结尾非 / 的檔名!就是我们要的啦!基本名称:tarfile,tarball
如果仅是打包而已,就是『 tar -cv -f file.tar 』而已,这个文件我们称呼为 tarfile 。 如果还有进行压缩的支持,例如『 tar -jcv -f file.tar.bz2 』时,我们就称呼为 tarball (tar 球?)!
特殊应用:利用管线命令与数据流
1
2
3
4
5
6
7
8# 1. 将 /etc 整个目录一边打包一边在 /tmp 解开
[root@study ~]# cd /tmp
[root@study tmp]# tar -cvf - /etc | tar -xvf xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在于输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!
# 简单的想法中,你可以将 - 想成是在内存中的一个装置(缓冲区)。
# 更详细的数据流与管线命令,请翻到 bash 章节啰!解压缩后的SELlinux课题
SELinux 的权限问题『可能会让你的系统无法存取某些配置文件内容,导致影响到系统的正常使用权』。
- 透过各种可行的救援方式登入系统,然后修改 /etc/selinux/config 文件,将 SELinux 改成 permissive 模式,重新启动后系统就正常了;
- 在第一次复原系统后,不要立即重新启动!先使用 restorecon -Rv /etc 自动修复一下 SELinux 的类型即可。
- 透过各种可行的方式登入系统,建立 /.autorelabel 文件,重新启动后系统会自动修复 SELinux 的类型,并且又会再次重新启动,之后就正常了!
7.4 XFS文件系统的备份与还原
7.4.1 XFS 文件系统备份 xfsdump
1 | [root@study ~]# xfsdump [-L S_label] [-M M_label] [-l #] [-f f 备份档] ] 待备份资料 |
- 用xfsdump备份完整的文件系统
1 | # 1. 先确定 /boot 是独立的文件系统喔! |
- 用xfsdump进行累计备份(Incremental backups)
1 | # 0. 看一下有没有任何文件系统被 xfsdump 过的资料? |
7.4.2 XFS 文件体统还原 xfsrestore
1 | [root@study ~]# xfsrestore -I <==用来察看备份文件资料 |
- 用xfsrestore观察xfsdump后的备份数据内容
1 | [root@study ~]# xfsrestore -I |
- 简单复原level 0的文件系统
1 | # 1. 直接将数据给它覆盖回去即可! |
- 复原累积备份资料
1 | # 继续复原 level 1 到 /tmp/boot 当中! |
- 仅还原部分文件的xfsrestore互动模式
1 | # 1. 先进入备份文件内,准备找出需要备份的文件名数据,同时预计还原到 /tmp/boot3 当中! |
7.5 光盘写入工具
- 先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 指令来处理;
- 将该映像文件刻录至光盘或 DVD 当中,利用 cdrecord 指令来处理。
7.5.1 mkisofs:建立映像档
- 制作一般数据光盘映像文件 mkisofs
1 | [root@study ~]# mkisofs [-o o 映像档] [] [-Jrv] [-V vol] [-m file] 待备份文件份文件... ... \ |
光盘的格式一般称为 iso9660 ,这种格式一般仅支持旧版的 DOS 檔名,亦即檔名只能以 8.3 (文件名 8 个字符,扩展名 3 个字符) 的方式存在。
1 | [root@study ~]# ll -h /tmp/system.img |
- -graft-point
1 | [root@study ~]# mkisofs -r r -V 'linux_file' -o /tmp/system.img \ |
- 制作修改可开机光盘映像档
1 | 1、先观察一下这片光盘里面有什么东西 |
此时你就有一个 /custom.img 的文件存在,可以将该光盘刻录出来啰!就这么简单!
7.5.2 cdrecord:光盘刻录工具
Centos 7使用的是wodim文字界面来进行刻录行为的,不过为了兼容旧版依然可以使用cdrecord,建议使用wodim。
1 | [root@study ~]# wodim ----devices dev=/dev/sr0... <==查询刻录机的 BUS 位置 |
- 检测你刻录机所在位置
1 | [root@study ~]# ll /dev/sr0 |
- 进行CD/DVD的刻录动作:
1 | # 0. 先抹除光盘的原始内容:(非可重复读写则可略过此步骤) |
7.6 其他常见的压缩和备份工具
7.6.1 dd
dd最大功能是用来备份
1 | [root@study ~]# dd if="input_file" of="output_file" bs="block_size" count="number" |
‘