NAT服务:Network Address Translation,网络地址转换. 当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法.
NAT原理:使用NAT技术把内网IP地址在路由器等端封装成公网IP,然后再发送请求。
硬盘的基本架构
在 Windows 或者是 DOS 年代,硬盘以 FAT 表来切分时,他们的代表扇区为 C: D: E: ...但是在 Linux 中 则不然喔!一个『目录』可以代表一个『装置』!基本上,每一个硬盘在安插的 IDE 接口中,都有不同的代号
一般主板上面有两个IDE抛砖排线接口,每个IDE排线接口线上有两个端口,即可以接两块硬盘[Master,Slave],那这样整块主板就可以接四块硬盘,那在linux中是怎么命名的呢
IDE/Jumper | Master | Slave
IDE1(Primary) | /dev/hda | /dev/hdb
IDE2(Secondary) | /dev/hdc | /dev/hdd
硬盘安插的 IDE 接口 Linux 上面的磁盘名称
第一个 IDE 的 Master 上之硬盘 hda
第一个 IDE 的 Slave 硬盘 hdb
第二个 IDE 的 Master 硬盘 hdc
第二个 IDE 的 Slave 硬盘 hdd
硬盘分割: 硬盘是由最小的物理组成单位是扇区(sector),而数个扇区组成一个同心圆时那就是磁柱了(clylinder),整个最后构成整个硬盘的容量大小.
硬盘数据示意表
part 1 | part 2
---|---
MBR (partition table) | 实体资料存放区
可以看到磁盘里边有两个区域,一个是放置这个硬盘的信息区,我们称为Master Boot Recorder (MBR主要是开机扇区),一个则是实际档案数据放置的地方。MBR可以说是整个硬盘最重要的地方,因为MBR里记录两个重要的东西: 开机管理程序
和磁盘分割表
. 如果MBR的扇区坏了,基本上整块硬盘就不能用了.
其实我们在进行硬盘分割的时候就是在修改这个partition table了[它定义了第N个磁盘分区由第x个到第y个磁柱], 所以当系统要去读取第n块磁盘区块时就只会去x到y磁柱去找。
由于MBR区块的容量有限,当设计的时候,就只设计成4个分割记录[Primary与Extended], 也就是说一个硬盘最多只有4个[primary + extended],但一般不要分成四个primary, 因为这样如果有剩余容量就不能用到了.
要分割4个分区的时候,一般一定要有extended分区,并且必须把所有剩下的空间都分配给extended,然后再以logicial的分割区来规划extended的空间,考虑到硬盘的连续性,一般建议把extended的扇区分割在最后 的磁柱内
在 Linux 里面预设使用两种开机管理程序,分别是 LILO 与 GRUB 这两个好东西.
如果是一颗全新的硬盘,可能会发生如下的错误讯息,这个讯息仅是告知您, 安装程序找不到 partition
table 而已,还不需要太担心啦!此时, 直接按下『是』就可以了!
[磁盘hda上的磁盘分割表无法读取,要建立新分割区必须先初始化磁盘,这将会造成磁盘上的所有的资料流失.]
虚拟内存:可以使用硬盘来仿真内存的数据存取,这个就是所谓的『虚拟内存』! 不过,虚拟内存的
速度会比较慢呦!
当有数据被存放在物理内存里面,但是这些数据又不是常被 CPU 所取用时, 那么这些不常被使用的程序
将会被丢到虚拟内存当中, 而将速度较快的物理内存空间释放出来给真正需要的程序使用! 这就是虚拟
内存 的功效之一啦!通常 Swap 建议的值大约是『RAM 的两倍大』
选择开机管理程序
在 Linux 里面主要有 Lilo 与 grub 这两套开机管理程序,不过,目前 Lilo 已经比较少使用,取而代之的就是 grub 这个好用的管理程序啰! 所以,我们可以看到如下的画面:比较值得注意的是,开机管理程序可以被安装在 MBR 也可以安装在每个 partition前面的 super block 处。
linux一定要正常的开关机,因为不正常的开关机可能会造成数据丢失,因为Linux机房一般都有备用电源防止非法关机
linux安装时会有x-window模式和linux text模式[终端机接口/terminal/console/控制台],前者包括GNOME,KDE软件来显示类似windows的桌面效果,后者则是命令行模式.
Gnome与console切换
[Ctrl] + [Alt] + [F1] ~ [F6] :文字接口登入 tty1 ~ tty6 终端机;
[Ctrl] + [Alt] + [F7] :图形接口桌面。
而如果您是以文字接口启动 Linux 的,也就是说,您的 tty7 预设是没有东西的那您可以直接下达 startx
命令来启动图形接口.『前提是您的 X Window 需要设定 OK,且您有安装 KDE/GNOME
等桌面系统才行]
[root@linux ~]# //root
[dealdot@linux ~]$ // dealdot
date +%Y/%m/%d --->2016/11/14
date +%H:%M:%S ---> 16:08:23
bc
这个表示简易计算器,可以计算 + - * / % ^[指数]
除法时默认只输出整数,指定 scale = 3
时会输出小数部分
输入quit
则退出
control + D
通常用来表示退出当前的环境,相当于exit/quit
键盘上连续按两个tab键就可以显示所有的shell命令了,大概有2K个左右
使用man date
之类的系统命令操作的时候以下内容需要了解,以后就可以知道怎么查询文档了
DATE(1)
NAME
date --display or set date and time
DESCRIPTION
...
...
..
.
代号 | 代表内容
---|---
1 | 使用者可以操作的指令或可执行文件
2 | 系统核心可呼叫的函数与工具等
3 | 一些常用的函数(function)与函式库(library)
4 | 装置档案的说明
5 | 设定档或是某些档案的格式
6 | 游戏(games)
7 | 惯例与协议,例如linux标准档案系统,网络协议,ASCII CODE等等说明内容
8 | 系统管理员可用的管理指令
9 | 跟kernel有关的文件
man page的相关section含义
代号 | 内容说明
---|---
NAME | 简短的指令,数据名称说明
SYNOPSIS | 简短的指令下达语法(syntax)简介
DESCRIPTION | 较为完成的说明,这部分仔细看
OPTIONS | 针对SYNOPSI部分中,有列举的所有可用的参数说明
COMMANDS | 针对SYNOPSIS部分中,有列举的所有可用的参数说明
FILES | 这个程序或数据所使用参考或连结到的某些档案
SEE ALSO | 参考该指令相关的其它说明
关于man page下的相关操作按键
按键 | 工作
---|---
空格键 | 向下翻页
上方向键 | 向上翻页
下方向键 | 向下翻页
/string | 向下搜索string字符串
?string | 向上搜索sting字符串
n,N | 在字符串搜索模式中,n表示向下翻页,N表示向上翻页
q | 退出当前的man page
linux正确的关机步骤
1. sync:把内存中的数据同步保存到硬盘中
2. shutdown使用:
OPTIONS
-r 在将系统的服务停掉之后就重新开机
-h 将系统的服务停掉后,立即关机
-k 发送假消息吓唬人
-c 取消shutdown任务
shutdown -h now 立马关机
shutdown -h 20:20 在这一时间关机
shutdown -r now 立即重启
shutdown -k now 'system will be shutdown haha' #吓唬你的
重启命令
reboot: 跟shutdown -r now功能差不多
halt:重启
poweroff:重启
推荐磁盘分区[如果只把硬盘分区都挂载到/容易出问题]
/
/boot
/usr
/home
/var
练习:
请问如果我以文字模式登入 Linux 主机时,我有几个终端机接口可以使用?如何切换各个不同的 终端机接口?
共有六个, tty1 ~ tty6 ,切换的方式为 Crtl + Alt + [F1]~[F6],其中, [F7] 为图形接口的使用。
用
ps aux
命令的时候可以看到tty一栏有的是??,有的是tty1,tty2....,mac下显示ttys000,ttys001.... ??表示是在GNOME/KDE下的进程,而ttys000,ttys001则表示是终端运行的进程
linux下档案属性与目录配置
-rwx rwx rwx 1 root root 293 Oct 19 2014 demodirectory
- 表示档案类型
常见档案类型有:
d 表示目录
- 表示档案
l 表示链接文档 (link file)
b 表示装置文件里的可储存接口设备
c 表示装置文件里的串行端口设备,键盘,鼠标等
- 接下来的属性,三个为一组 r(可读),w(可写),x(可执行)
- 第一组的表示文档所有者的权限
- 第二组表示与所有者在一个组的权限
- 第三组表示others的权限
- 那个数字1表示连接数,为连结占用的节点 (i-node) 这个跟连结档 (link file) 比较有关<目录:目录下的文件数量有关>
个人理解说明:
- r就是读的权限比如用cat查看就是读的权限
- w就是写的权限,比如vi编辑的时候虽然写了东西,但是保存不下来
- x就是可执行权限,即在shell下可以执行的二进制文档
改变档案权限
- chgrp: 改变档案所在群组[chgrp users file.log,确保users组存在]
- chown: 改变档案所属人[chown root:root file.log,同时改变所在组 -R 为递归]
- chmod: 改变档案的属性,SUID等
chmod改变九个属性
- 以数字类型改变
r :4
w: 2
x: 1
e.g. -rwxrwx---
owner: rwx = 4+2+1 = 7
group: rwx = 4+2+1 = 7
others = --- =0+0+0 = 0
我们常用的vi编辑一个文档后属性为 -rw-rw-rw- 666,需要改为-rwxr-xr-x 即755,其它人就改不了了
有些档案不希望被其它人看到,-rwxr----- 740,则因为others没有r权限因此看不到
- 以符号类型改变
user/group/others 缩写表示为:u/g/o
-rwxr-xr-x: chmod u=rwx,go=rx file.log
-rwxr-xr--: chmod u=rwx,g=rx,o=r file.log
事先不知道档案属性:添加每个人都可以写 chmod a+w file.log
去除每个人的可写属性 chmod a-w file.log
r,w,x用于目录属性
r :表示具有读取目录结构清单的权限,例如可以用ls命令
w: 表示可写入的权限,对目录来说,不错可以在该目录内增,删,改档案或目录
x: 表示是否可以进入该目录进行操作,要有r,w权限必须建立在有x的权限基础之上
x: 用于文件表示有可执行权限
Linux档案分类与附档名
档案分类
- 正规档案
- 纯文字文件(ASCII):最多的一种类型,里边放的是字母,数字等 cat 命令可查看
- 二进制文件(binary),比如vi命令就是一个binary file.
- 数据格式文件:data file,特定格式的档案,如登录数据 /var/log/wtmp ,通过last可以读出来,但通过cat是不行的,读出来是乱码
- 目录:directory
- 连接档:link ,类似windows下的快捷方式 第一个属性为l ,如lrwxrwxrwx
- 设置与装置文件:[存放在/dev目录下的]
- 区块(block)设备档:就是一些储存数据,/dev/hda1硬盘分区
- 字符设置档:character: 即是一些串行端口的接口设备,如键盘,鼠标,第一个属性为c
- 资料接口文件:(sockets)监听客户端需求
srw-rw-rw- 1 root root 0 May 5 2015 acpid.socket
- 数据传送文件(FIFO,pipe):FIFO是一种特殊的档案类型,主要是解决多个程序同时存取一个档案所造成的错误问题.第一个属性为p
附档名(.sh, .tar.gz, .php, .pl, .html)
linux下其实没有附档名的,因为一个linux档案能不能被执行只与第一栏的十个属性想关,与文件名没有关系,通过我们会用这个附档名来表示文件类别
linux下每个档案或目录名最长达255个字符,加上完整路径时,最长有4096个字符
命名不要有 * ? > < ; & ! [] | ' " ` {} () 等这些字符,以.开头的是隐藏文档
Linux档案配置依据 FHS
FHS: FileSystem Hierarchy Standard ,它定义出两层规范,第一层是/下各个目录应该放什么档案,如/etc放设定档,/bin与/sbin放可执行文档.
第二层是针对 /usr和/var这两个目录的次目录来定义的.如 /var/log放置系统登录文件,/usr/share放共享数据等等.
目录树特性:
- 目录树的起始点为根目录 /, root
- 每个目录不止能用本地端的分区,也能用网络上的filesystem.
- 每个档案在此目录树中的文件名(包括完事路径)是独一无二的.
ls -l / 命令时 drw------ 9 root root 4096 Jul 13 11:33 root 表个root目录属性为700
常见的目录比如 / /root /var, /usr..都放些什么东西的话,见pdf page:240
使用者工作安排行程放在 /var/spool/cron/crontabs中
-rw------- 1 root crontab 1474 Oct 24 11:56 root
- 建议不可与root partition分开的目录
一般有这些 /etc /sbin /bin /dev /lib - 建议与/的partition分开的目录
/home /usr /var /tmp
Linux支持的档案系统
档案系统[File System]:目前多数操作系统是将数据从硬盘读出来,操作系统使用的硬盘都在x86的架构之上,那么操作系统对硬盘读取的方法不同就造成了不同的档案系统了.
常见的有ext2 ,ext3 现在也有ext4了,一般用ext3就可以了,相比ext2它增加了日志记录功能,这样在断电的情况下查找起来速度是很快的
Linux 磁盘与档案系统管理
硬盘的物理单位:
把一块硬盘想成3D的一环环类似哑玲的东西,环环组成的圆叫磁柱(cylinder),最内层的是结束磁柱,最外层的是开始磁柱,磁柱是分区partition的最小单位,类似切蛋糕把它切下一部分来叫扇区(sector),扇区是最小的储存物理量.一个sector大小约为512 Bytes.
在了解了磁盘的物理结构之后就要学习partition了,为什么要partition呢?
因为我们必须要告诉操作系统:我这块硬盘的存取区域是从A磁柱到B磁柱,这样操作系统才能控制硬盘磁头去A-B范围内的磁柱来存取数据了,如果没有告诉操作系统这个信息它就不知道该去哪里存取信息了,因此一块硬盘拿来要先进行partition 分区
那么这个分割区的起始与结束磁柱放在什么地方呢? MBR (Master Boot Recorder ),事实上MBR就是在一块硬盘的0轨上面,开机之后利用硬盘时候读取的第一个区域,这里面记录的就是分割信息。MBR的限制是四个partition的记忆,再多了记不过来。 4p/3p+1e.....
档案系统
在分区好后就接下来要格式化了,格式化为系统能识别的file system ,如ext2 ,ext3等,不管格式化为哪一种file system,数据需要写入硬盘,硬盘的最小储存单位是sector,不过数据的最小单位可不是sector,而是sector的2的n次方倍,这样做主要是为了效率,数据储存单位称为逻辑区块(block),block并不是越大越好,因为可能有些文件比较小,这样就浪费了资源空间
.
super block: 每个分区就是一个档案系统(file system),每个档案系统开始位置的那个block叫做super block;
前边说过一个档案或目录不止有内容还有属性,那么ext2系统是怎么样来记录这些东西的呢?
在ext2系统中,partition存储数据的部分被分为inode table与block area两部分。 inode部分用来放属性,block area用来放实际的档案内容
**一个inode table中存放的内容**
- 该档案的拥有者与群组(u/g/o)
- 该档案的存取模式(r/w/x)
- 该档案的类型
- 该档案建立或状态改变的时间(ctime),最近一次的读取时间(atime),最近一次的修改时间(mtime)
- 定义档案特性的标识,如 setUID
- 指向block (area)部分的指针
那么linux底下到底是如何读取一个档案的内容的呢?下边我们分别针对目录与档案来说明
目录
当我们在ext2系统下建立一个目录的时候,ext2会分配给该目录一个inode和至少一个Block,inode用来存取该目录的相关属性,并指向分配的block,block则存取这个目录下相关连的目录或档案的关联性.
档案
当在ext2档案系统下建立一个档案的时候,ext2会分配给该档案一个inode和至少一个block,inode用来存取该档案的相关属性,block用来存取该档案的实际内容,假设一个Block为4Kbytes,而我要建立一个100KB的档案,则需要25个block
要注意的是保存文件的inode本身并不存文件的名字,而是记录其相关属性,文件名则放其所在目录的block area中
那linux下是如何读取一个档案的呢?上边的图演示了这一点
例如我们要读取 /etc/crontab
档案,那系统是如何查找到crontab的呢?
首先系统根据根目录中的inode信息中的指针找到对应block信息,再从block信息找到/etc这个目录,然后由/etc这个目录中的Block找到crontab名字[block存放文件名],再由crontab的inode找到对应的block从而读取内容
关于ext2系统有几点要注意
- ext2 与 ext3 档案系统在在建立时 (format) 就已经设定好固定的 inode 数与 block 数目了
- 格式化 Linux 的 ext2 档案系统,可以使用 mke2fs 这个程序来执行!
- ext2 允许的 block size 为 1024, 2048 及 4096 bytes
- 一个 partition (filesystem) 所能容许的大档案数,与 inode 的数量有关, 因为一个档案 至少要占用一个 inode 啊
- 在目录底下的档案数如果太多而导致一个 Block 无法容纳的下所有的关连性数据时,Linux 会给 予该目录多一个 Block 来继续记录关连数据
- 通常 inode 数量的多寡设定为 (partition 的容量) 除以 (一个 inode 预计想要控制的容量),而一个inode是要占用128 Bytes的空间,因此一个硬盘拿过来分好区,格式化后空间就会小一些.
- 当 block 大小越小,而 inode 数量越多,则可利用的空间越多,但是大档案写入的效率较差
- 当 Block 大小越大,而 inode 数量越少时,大档案写入的效率较佳,但是可能浪费的硬盘空间 较多
ext2的几个特色
- Blocks 与 inodes数量 在一开始格式化时 (format) 就已经固定了
- 一个 partition 能够容纳的档案数与 inode 有关
- 一般来说,每 4Kbytes 的硬盘空间分配一个 inode
- 一个 inode 的大小为 128 bytes
- Block 为固定大小,目前支持 1024/2048/4096 bytes 等
- Block 越大,则损耗的硬盘空间也越多
- 单一档案 若 block size=1024,大容量为 16GB,若 block size=4096,容量大为 2T
- 一个partition 若 block size=1024,则容量达 2TB,若 block size=4096,则容量达 32TB
查看系统的详细inode,block记录 用命令
dumpe2fs /dev/vda1 |more
// Group 145为已经用过,Group146还没有用
Group 145: (Blocks 4751360-4784127) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x606d, unused inodes 8160
Block bitmap at 4718593 (bg #144 + 1), Inode bitmap at 4718609 (bg #144 + 17)
Inode table at 4719134-4719643 (bg #144 + 542)
28816 free blocks, 8160 free inodes, 0 directories, 8160 unused inodes
Free blocks: 4754814-4754943, 4755104, 4755108, 4755237, 4755240, 4755257-4755258, 4755260, 4755263, 4755291, 4755294, 4755380-4755381, 4755383, 4755386, 4755456-4784127
Free inodes: 1183201-1191360
Group 146: (Blocks 4784128-4816895) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x06c9, unused inodes 8160
Block bitmap at 4718594 (bg #144 + 2), Inode bitmap at 4718610 (bg #144 + 18)
Inode table at 4719644-4720153 (bg #144 + 1052)
32768 free blocks, 8160 free inodes, 0 directories, 8160 unused inodes
Free blocks: 4784128-4816895
Free inodes: 1191361-1199520
ext2/ext3档案的存取与日志档案系统的功能
当一个 ext2 的 filesystem 被建立时, 他拥有Super Super Block, superblock / group
description / block bitmap / inode bitmap / inode table / data blocks 等等区域。要注意的是,
每个 ext2 filesystem 在被建立的时候,会依据 partition 的大小, 给予数个 block group ,而每个
block group 就有上述的这些部分。如下图
我们将 inode table 与 block area 称为数据存储区域,至于其它的例如 superblock、 block
bitmap 与 inode bitmap 等记录就被称为 metadata
每个block group包含以下部分
- superBlock:这个superBlock是每个group的,而整个partition或file system 第0磁柱有一个总的SuperBlock,就叫Super Super Block
1. block与inode的总量
2. 未使用与已使用的 inode / block 数量
3. 一个 block 与一个 inode 的大小
4. filesystem 的挂载时间、近一次写入数据的时间、近一次检验磁盘 (fsck) 的时间 等档案系统的相关信息
5. 一个 valid bit 数值,若此档案系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1
- Group Description:记录此 block 由何处开始记录
- Block bitmap:此处记录那个 block 有没有被使用
- Inode bitmap:此处记录那个 inode 有没有被使用
- Inode table:为每个 inode 数据存放区
- Data Blocks:为每个 block 数据存放区
当我们新增一个档案或目录时:
- 根据 inode bitmap / block bitmap 的信息,找到尚未被使用的 inode 与 block , 进而将档 案的属性与数据分别记载进 inode 与 block
- 将刚刚被利用的 inode 与 block 的号码 (number) 告知 superblock、inode bitmap、block bitmap 等,让这些 metadata 更新信息
ext3等日志式(journal)文件系统
在一些不可控的情况下ext2文件系统在记录数据的时候会出现问题,例如metadata中记录的数据与实际上的inode与block中的数据不一致,这样下次启动的时候就要进行比对强制检查数据的一致性,这是效率非常低的动作,因为要检查整个partition.
ext3文件系统记录过程:
- 当系统要写入一个档案的时候,会先在日志记录区块中纪录(journal):某个档案准备要写入磁盘了
- 开始写入档案的权限与数据
- 开始更新 metadata 的数据
- 完成数据与 metadata 的更新后,在日志记录区块当中完成该档案的纪录
这样万一记录数据的时候发生了问题, 我们的系统只要去检测系统日志记录区块,这相当于给block group添加一个索引,这样速度就快了.
Linux档案系统的运作
为了效率,Linux 上面通常采取异步处理( asynchronously )的方式来处理硬盘的存取.
当系统读取了某一个档案, 则该档案所在的区块数据会被加载到内存当中,所以该磁盘区块就会被放置在主存储器的缓冲快取区中, 若这些区块的数据被改变时,刚开始数据仅有主存储器的区块数据会被改变, 而且在缓冲区当中的区块数据会被标记为『 Dirty 』.
这个时候磁盘实体区块尚未被修正! 所以亦即表示,这些『 Dirty 』区块的数据必需回写到磁盘当中, 以维持磁盘实体区块上的数据与主存储器中的区块数据的一致性。』
挂载点的意义(mount)
在鸟哥的 安装 FC4 范例当中,我们将硬盘分割为几大部分, 同时主要将 / 与 /home 设定为
两个 partition 的挂载点。假设 / 是接在 /dev/hda1 , 而 /home 是接在 /dev/hda2 上面,那么,也
就是说,在 /home 底下的所有次目录,使用的都是 /dev/hda2 那个 partition 的资料呢!而非 /home 的
则都是使用 /dev/hda1 的数据.
挂载点一定是『目录』而不是档案,这个挂载点就是进入该 filesystem 的入口[partition]
cat /proc/filesystems
查看系统启用的档案系统
linux常见支持的档案系统有:
- 传统档案系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等
- 日志式档案系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
- 网络档案系统: NFS / SMBFS
df 与du命令的使用
df命令:
df [-ahikHTm] [目录或文件名]
-a : 列出所有的档案系统[partition,一个partition对应一个档案系统],包括系统的/proc等档案系统
-k : 以KBytes显示档案系统容量
-m : 以MBytes来显示档案系统容量
-h : 以人们较易阅读的格式显示
-H : 以M=1000K代M=1024K来显示
-T :边同该partition的filesystem也列出(ext3,ext4...)
-i : 不用硬盘容易表示而用inode数来表示
root@test-month:~# df -h /home
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 8.4G 30G 23% /
在df后边跟上目录或档案时会自动分析当前目录或档案所在的partition,并将该partition的容量显示出来,这样就知道了这个目录还能多少容量了
如果使用 -a 这个参数时,系统会出现 /proc 这个扇区,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』的, 所以当然没有占任何的硬盘空间.
du命令:
du [-ahskm] 档案或目录名
-a : 列出所有的档案与目录占用容量,因为预设的仅统计目录底下的档案量而已
-h : 以人们较易读懂的容量格式来显示
-s : 列出总量而已
-k : 以KBytes列出容量
-m : 以MBytes列出容量
root@test-month:~# du -smh /*
9.6M /bin
46M /boot
4.0K /dev
5.0M /etc
4.9G /home
0 /initrd.img
353M /lib
4.0K /lib64
16K /lost+found
8.0K /media
4.0K /mnt
320K /opt
//查看home目录占用的空间
root@test-month:~# du -smh /home/*
556K /home/wwwlogs
4.9G /home/wwwroot
连接档的介绍 (ln)
linux下连接档分为硬连接(hard link)和软连接 (Symbolic Link ),两者都是叫连接,因此对生成的目标连接来说,修改目标连接会影响到源连接文件.[跟copy的区别]
Hard Link
Hard Link 只是在某个目录下新增一个该档案的关连数据而已,假设我的 /root/crontab 为一个 hard link 的档案,他连结到 /etc/crontab 这个档案,也就是说,其实 /root/crontab 与 /etc/crontab 是同一个档案,只是有两个目录( /etc 与 /root )记录了 crontab 这个档案的关连数据,可以想像成有两个目录[/etc与/root]的block area中的inode指针指向同一个inode table.这样做的好处就是 安全,因为如果不小心删除的源文档,连接生所的文档跟其数据是一样的,相当于一个备份,但跟备份是不同的.[因为修改备份的文档不会对原文档产生影响,而连接则会有影响,连接的文档两者是同步的]
一般来说,使用 hard link 设定连结文件时,磁盘的空间与 inode 的数目都不会改变
hard link有两个缺点:
- 不能跨filesystem
- 不能连接目录 [设想一下,目录block中的信息太多,它的档案及子目录这里边有很多东西,连接起来管理太复杂]
Symbolic Link
Symbolic Link 就像windows下的快捷方式,当源文档被删除之后symbolic link也会提示无法开启某个档案。由 Symbolic link 所建立的档案为一个独立的新的档案,所以会占用掉 inode 与 block。
// 一般symbolic link用的较多
ls -[sf] 源文档 目标文档
root@test-month:/tmp# cp -a /etc/passwd .
root@test-month:/tmp# ll
total 12
drwxrwxrwt 2 root root 4096 Nov 25 10:10 ./
drwxr-xr-x 22 root root 4096 Nov 9 09:21 ../
srwxrwxrwx 1 mysql mysql 0 Nov 9 09:21 mysql.sock=
-rw-r--r-- 1 root root 1241 Aug 17 11:16 passwd
srw-rw-rw- 1 www www 0 Nov 9 09:21 php-cgi.sock=
// 给passwd建立一个hard link
root@test-month:/tmp# ln passwd passwd-hd
root@test-month:/tmp# ll
total 16
drwxrwxrwt 2 root root 4096 Nov 25 10:12 ./
drwxr-xr-x 22 root root 4096 Nov 9 09:21 ../
srwxrwxrwx 1 mysql mysql 0 Nov 9 09:21 mysql.sock=
-rw-r--r-- 2 root root 1241 Aug 17 11:16 passwd
-rw-r--r-- 2 root root 1241 Aug 17 11:16 passwd-hd
srw-rw-rw- 1 www www 0 Nov 9 09:21 php-cgi.sock=
root@test-month:/tmp# ls -il passwd*
656924 -rw-r--r-- 2 root root 1241 Aug 17 11:16 passwd
656924 -rw-r--r-- 2 root root 1241 Aug 17 11:16 passwd-hd
// 可以看出两个文件指向同一个inode number
**ls -hil 可以看到文档所在的inode table编号**
//建立软连接
root@test-month:/tmp# ln -s passwd passwd-so
root@test-month:/tmp# ls -ilh passwd*
656924 -rw-r--r-- 2 root root 1.3K Aug 17 11:16 passwd
656924 -rw-r--r-- 2 root root 1.3K Aug 17 11:16 passwd-hd
659581 lrwxrwxrwx 1 root root 6 Nov 25 10:14 passwd-so -> passwd
**可见软连接的inode table与源文件不同**
// 建立软连接之前
/dev/vda1 2611200 104927 2506273 5% /
// 建立软连接之后
/dev/vda1 2611200 104930 2506270 5% /
* 比较可知软连接建立占用inode与block的,理解为建立一个文件当然要inode与block,而硬连接则只是一个指针而已 *
//删除源文档
root@test-month:/tmp# rm -rf passwd
//cat 软连接文档提示文档不存在,而硬连接的passwd-dh则依然存在
root@test-month:/tmp# cat passwd-so
cat: passwd-so: No such file or directory
// 关于目录link数(第二列的值)的变化
root@test-month:/# ls -ld /tmp
drwxrwxrwt 3 root root 4096 Nov 25 11:37 /tmp
root@test-month:/# mkdir /tmp/testing
root@test-month:/# ls -ld /tmp
drwxrwxrwt 4 root root 4096 Nov 25 11:40 /tmp
root@test-month:/# ls -ld /tmp/testing/
drwxr-xr-x 2 root root 4096 Nov 25 11:40 /tmp/testing/
磁盘的分割,格式化,校验,挂载
- 对磁盘进行分割,以建立可用的 partition
- 对该 partition 进行格式化( format ),以建立系统可用的 filesystem
- 若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验
- 在 Linux 系统上,需要建立挂载点 ( 亦即是目录 ),并将他挂载上来
这部分独立出来了见下边一篇 [linux下硬盘分区.md]
查看系统所支持的filesystem
ls /lib/modules/
uname -r/kernel/fs
测试硬盘的读取效能 `hdparm -Tt /dev/vda`
/dev/vda:
Timing cached reads: 12464 MB in 2.00 seconds = 6237.28 MB/sec
Timing buffered disk reads: 1114 MB in 3.00 seconds = 371.32 MB/sec
模拟xen技术建立虚拟主机
//dd建立一个每个block = 1024 共count个block的空文件
dd if=/dev/zero of=/tmp/loopdev bs=1024k count=2048
//格式化
mount -t ext3 -o loop /tmp/loopdev /media/cdrom
root@test-month:/media# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1008636 4 1008632 1% /dev
tmpfs 204860 380 204480 1% /run
/dev/vda1 41154348 8899524 30360112 23% /
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 1024288 0 1024288 0% /run/shm
none 102400 0 102400 0% /run/user
/dev/loop0 1998672 3140 1890676 1% /media/cdrom
添加虚拟内存:
root@test-month:/tmp# dd if=/dev/zero of=/tmp/swap bs=4k count=16382
16382+0 records in
16382+0 records out
67100672 bytes (67 MB) copied, 0.249567 s, 269 MB/s
root@test-month:/tmp# mkswap /tmp/swap
Setting up swapspace version 1, size = 65524 KiB
no label, UUID=9764acb8-f674-4f81-a469-724f7d5303ff
root@test-month:/tmp# free
total used free shared buffers cached
Mem: 2048576 1264124 784452 484 23548 1037680
-/+ buffers/cache: 202896 1845680
Swap: 0 0 0
root@test-month:/tmp# swapon /tmp/swap
root@test-month:/tmp# free
total used free shared buffers cached
Mem: 2048576 1263524 785052 484 23564 1038080
-/+ buffers/cache: 201880 1846696
Swap: 65524 0 65524
可以看到swap虚拟内存增加了64M
// 关闭虚拟内存
root@test-month:/tmp# swapoff /tmp/swap
root@test-month:/tmp# free
total used free shared buffers cached
Mem: 2048576 1264040 784536 484 23584 1039936
-/+ buffers/cache: 200520 1848056
Swap: 0 0 0
虚拟内存的限制:
- 在核心 2.4.10 版本以后(uname -r 查看),单一 swap 量已经没有 2GB 的限制了
- 最多还是仅能建立到 32 个 swap 的数量
- 由于目前 x86_64 (64 位) 大内存寻址到 64GB, 因此, swap 总量大也是仅能达 64GB
linux档案与目录管理
cd 命令
cd 表示使用者的家目录同cd ~
cd . 代表在当前目录
cd .. 代表上一层目录
cd - 代表前一个目录
cd ~ 代表目前使用者目录
cd ~account 代表account的家目录
----------------------------------------
pwd -P 显示目前所在的真正路径,而不是link的路径[Print Working Directory]
lrwxrwxrwx 1 root root 4 Aug 12 20:12 run -> /run/
root@test-month:/var/run# pwd
/var/run
root@test-month:/var/run# pwd -P
/run
-------------------------------------------
mkdir [-mp] 目录名
-m: 设定档案的权限
-p: 递归建立文档
mkdir -p /tmp/test1/test2/test3
mkdir -m 711 test3
drwx--x--x 2 root root 4096 Nov 26 09:45 test3/
rmdir [-p] 目录名
-p : 连同上层空目录也一起删除[必须保证是空目录]
rmdir test1/test2 :如果test1里边没有其它东东,则这个命令把test1也一起删除了
rm -rf 删除目录所有的东东
--------------------------------
echo $PATH
//输出环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
ls命令:
-a :全部档案
-A :全部但不包括. ..
-F :附加一定信息 *:a代表可执行 /:表示目录 =:表示 socket
-h : 以人类容易读的方式显示
-l : 长串数据输出,而非档案的属性
--color = never/always/auto
--full-time:以完整时间显示
root@test-month:/tmp# ls -FlhinR --color=auto --full-time
.:
total 65M
659581 drwxr-xr-x 2 0 0 4.0K 2016-11-25 11:36:14.091337053 +0800 demo/
652823 srwxrwxrwx 1 1000 1000 0 2016-11-09 09:21:48.318916000 +0800 mysql.sock=
656924 -rw-r--r-- 2 0 0 1.3K 2016-11-25 10:30:13.323337053 +0800 passwd
656924 -rw-r--r-- 2 0 0 1.3K 2016-11-25 10:30:13.323337053 +0800 passwd-hd
652813 srw-rw-rw- 1 1001 1001 0 2016-11-09 09:21:47.950916000 +0800 php-cgi.sock=
664196 -rw-r--r-- 1 0 0 64M 2016-11-25 16:54:23.459337053 +0800 swap
665400 drwxr-xr-x 2 0 0 4.0K 2016-11-26 09:55:23.019337053 +0800 test3/
663743 drwxr-xr-x 2 0 0 4.0K 2016-11-25 11:40:02.179337053 +0800 testing/
./demo:
total 0
./test3:
total 0
666338 -rw-r--r-- 1 0 0 0 2016-11-26 09:55:13.315337053 +0800 aa
./testing:
total 0
---------------cp命令-----------------------------------
cp [-adfilprsu] 来源档source 目的档destination
cp [options] source1 source2 source3 ... directory
-a : 相当于 -pdr
-d :若来源文档为连接文件(link file) ,则复制连接文件属性而非连接到的档案本身
-i : 寻问是否执行
-f : force 强制执行
-l : hard link
-s : symbolic link
-p : 连接档案的属性一起复制过去,而不用预设的属性
-r : 递归持续复制
-u : 若source比destination新 则复制
root@test-month:/tmp# cp -l bashrc bashrc_hlink
root@test-month:/tmp# cp -s bashrc bashrc_slink
root@test-month:/tmp# ls -l bashrc*
-rw-r--r-- 2 root root 3637 Nov 26 11:01 bashrc
-rw-r--r-- 2 root root 3637 Nov 26 11:01 bashrc_hlink
lrwxrwxrwx 1 root root 6 Nov 26 11:10 bashrc_slink -> bashrc
root@test-month:/tmp# cp bashrc_slink bashrc_slink2
root@test-month:/tmp# ls -l bashrc*
-rw-r--r-- 2 root root 3637 Nov 26 11:01 bashrc
-rw-r--r-- 2 root root 3637 Nov 26 11:01 bashrc_hlink
lrwxrwxrwx 1 root root 6 Nov 26 11:10 bashrc_slink -> bashrc
-rw-r--r-- 1 root root 3637 Nov 26 11:11 bashrc_slink2
复制两个文件到目录 属性会改变
root@test-month:/tmp# cp ~/.bashrc ~/.bash_history aaaccc/
-------------------------------------------------
rm [-fir] 档案或目录
-i : 询问模式
-f : 强制
-r : 递归
rm ./-aaa 删除-aaa这个文档 / rm -- -aaa-
--------------------------------------------
mv [-fiu] source destination
mv [options] source1 source2 source 3
-f : 强制
-i : 询问
-u :目标档案存在,且source比较亲,更新
mv file1 file1 常用来更新名字
basename /etc/sysconfig/network ==> network
dirname /etc/sysconfig/network ==> /etc/sysconfig
----------------------------------------------------
cat :
-n:显示行号
-A:显示除ASCII的$ ^I等这些换行符,tab符号等
cat -n filename 显示行号
nl filename 显示行号,但这个更全面
nl
-b
-b a :空行也加行号
-b t :空行不加行号
-n
-n ln :行号在左边
-n rl :行号在右边
-n rz :行号加0
-n rz w 数字[3] 三位数显示
root@test-month:/tmp/aaaccc# nl -b a -n rz -w 4 .bashrc
0001 # ~/.bashrc: executed by bash(1) for non-login shells.
0002 # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
0003 # for examples
0004
0005 # If not running interactively, don't do anything
0006 case $- in
0007 *i*) ;;
0008 *) return;;
0009 esac
//好像一长了,写的东西偶尔会消失。。。。再开一篇
本文由 dealdot <dealdot#163.com> 创作, Full Stack Developer @ DeepBlue
本文最后编辑时间为: Apr 9, 2017 at 16:49 pm
转载请注明来源