Linux鸟哥私房菜 笔记一

in Linux with 0 comment

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 表示装置文件里的串行端口设备,键盘,鼠标等

个人理解说明:

  1. r就是读的权限比如用cat查看就是读的权限
  2. w就是写的权限,比如vi编辑的时候虽然写了东西,但是保存不下来
  3. x就是可执行权限,即在shell下可以执行的二进制文档
改变档案权限
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档案分类与附档名

档案分类

  1. 纯文字文件(ASCII):最多的一种类型,里边放的是字母,数字等 cat 命令可查看
  2. 二进制文件(binary),比如vi命令就是一个binary file.
  3. 数据格式文件:data file,特定格式的档案,如登录数据 /var/log/wtmp ,通过last可以读出来,但通过cat是不行的,读出来是乱码
  1. 区块(block)设备档:就是一些储存数据,/dev/hda1硬盘分区
  2. 字符设置档:character: 即是一些串行端口的接口设备,如键盘,鼠标,第一个属性为c

附档名(.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放共享数据等等.

目录树特性:

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

  1. 建议不可与root partition分开的目录
    一般有这些 /etc /sbin /bin /dev /lib
  2. 建议与/的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下是如何读取一个档案的呢?上边的图演示了这一点

image

例如我们要读取 /etc/crontab 档案,那系统是如何查找到crontab的呢?

首先系统根据根目录中的inode信息中的指针找到对应block信息,再从block信息找到/etc这个目录,然后由/etc这个目录中的Block找到crontab名字[block存放文件名],再由crontab的inode找到对应的block从而读取内容

关于ext2系统有几点要注意
ext2的几个特色
  1. Blocks 与 inodes数量 在一开始格式化时 (format) 就已经固定了
  2. 一个 partition 能够容纳的档案数与 inode 有关
  3. 一般来说,每 4Kbytes 的硬盘空间分配一个 inode
  4. 一个 inode 的大小为 128 bytes
  5. Block 为固定大小,目前支持 1024/2048/4096 bytes 等
  6. Block 越大,则损耗的硬盘空间也越多
  7. 单一档案 若 block size=1024,大容量为 16GB,若 block size=4096,容量大为 2T
  8. 一个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 就有上述的这些部分。如下图

image

我们将 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 数据存放区

当我们新增一个档案或目录时:

  1. 根据 inode bitmap / block bitmap 的信息,找到尚未被使用的 inode 与 block , 进而将档 案的属性与数据分别记载进 inode 与 block
  2. 将刚刚被利用的 inode 与 block 的号码 (number) 告知 superblock、inode bitmap、block bitmap 等,让这些 metadata 更新信息

ext3等日志式(journal)文件系统

在一些不可控的情况下ext2文件系统在记录数据的时候会出现问题,例如metadata中记录的数据与实际上的inode与block中的数据不一致,这样下次启动的时候就要进行比对强制检查数据的一致性,这是效率非常低的动作,因为要检查整个partition.

ext3文件系统记录过程:

  1. 当系统要写入一个档案的时候,会先在日志记录区块中纪录(journal):某个档案准备要写入磁盘了
  2. 开始写入档案的权限与数据
  3. 开始更新 metadata 的数据
  4. 完成数据与 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常见支持的档案系统有:

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有两个缺点:

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/


磁盘的分割,格式化,校验,挂载

  1. 对磁盘进行分割,以建立可用的 partition
  2. 对该 partition 进行格式化( format ),以建立系统可用的 filesystem
  3. 若想要仔细一点,则可对刚刚建立好的 filesystem 进行检验
  4. 在 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

虚拟内存的限制:

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

//好像一长了,写的东西偶尔会消失。。。。再开一篇

评论