Linux学习笔记——1、Basic knowledge

参考鸟哥的Linux私房菜地址:http://vbird.dic.ksu.edu.tw/linux_basic/linux_basic.php

参考网中人地址:http://www.study-area.org/linux/linuxfr.htm

工具书:《Linux系统最佳实践工具》

Linux命令在线速查:https://ganquan.info/linux/

在学习Linux前,应具备基本的《计算机概论》知识,如果对计算机的组成完全不了解,将很难学好Linux。

Linux入门笔记

路线:1、安装CentOS——2、首次登陆&在线求助——3、权限&目录管理——4、文件&目录管理——5、磁盘&文件系统管理(20130117)

学Linux一定要懂硬件吗?

文件系统在Linux中是一个非常重要的概念,就像C语言一样,Linux把所有装置&设备都看成是一个个的文件。这样做是为了降低硬件与OS之间的耦合,所以,不具备硬件知识也能学习Linux,但要学好Linux必须了解硬件知识。

什么事挂载?

Linux以树目录结构(directory tree)来管理&呈现文件系统,硬盘分区通过混连的方式与文件目录形成联系,这种联系被Linux定义为挂载(mount),即利用一个目录当成一个分区的进入点。

eg:/是Linux的根目录,我把/与partition1进行mount,而/home与partition2进行mount,虽然/home位于根目录/下,从逻辑上理解,它们是父目录与子目录的关系,但物理上,它们却分别代表partition1&partition2的进入点(代表2个分区)。


1、安装CentOS

1)练习机的规划(尤其是分区参数)

(1)硬盘&分区

硬盘(Hard Disk,简称hd)&分区(Partition Table,简称PT):

一个hd可以被分割成多个分区(partition),比如windows有c、d、e盘符,这样做是便于数据的分类管理,同样的linux也具有类似功能,区别于windows,linux用一个文件关联一个设备的形式进行管理。

这要分为两部分了解:(1)计算机中可以有多块hd,那么hd在linux以什么文件形式来表示它们?(2)对于单块hd,linux以什么形式对它进行分区管理?

(2)家用机常见硬盘有IDE、SATA两种,以IDE为例,由于一个IDE排线可以连接2个IDE硬盘,一般主板会提供2个IDE接口,因此,2个IDE接口==2个IDE排线==4个IDE硬盘。

IDE\Jumper Master Slave
IDE1(Primary) /dev/hda /dev/hdb
IDE2(Secondary) /dev/hdc /dev/hdd
Notice:主板的2个IDE接口区分为Primary&Secondary,每根排线上的2个IDE硬盘区分为Master&Slave。

同样的,SATA硬盘在Linux中简称sd,第一块SATA硬盘就是sda,第二块sdb,vice versa。

(3)hd上主要用来存储信息的部分称为磁盘,磁盘的主要组成部分为磁区(Sector)&磁柱(Cylinder),每个Sector约可容纳512bytes的数据,通常每个hd的First Sector记录了两个重要信息:

(#1)主要启动记录区(Master Boot Record,MBR),可以安装启动管理程序的区域,一般446bytes。

(#2)分割表(Partition Table),记录整个hd分割的状态,一般64bytes。

重点来了,PT内总共分为4组记录区,每组记录区记录了该区段的起始&结束的Cylinder Number,这意味着理论上它只能被分为4个记录区。

记录区编号 记录区内容 Linux中的文件表示
P1 1~100 /dev/hda1
P2 101~200 /dev/hda2
P3 201~300 /dev/hda3
P4 301~400 /dev/hda4

可实际中,我们可以通过扩展分区(Extended)的方式建立更多的逻辑分区(Logical Partition,简称LP)。

记录区编号 记录区内容 Linux中的文件表示 扩展编号 扩展内容 Linux中的文件表示
P1 1~100 /dev/hda1      
P2 101~400 Extended L1 101~160 /dev/hda5
P3     L2 161~220 /dev/hda6
P4     L3 221~280 /dev/hda7
      L4 281~340 /dev/hda8
      L5 341~400 /dev/hda9
Notice:LP信息被记录在Extend的开始,记录区固定的编号是hda1~4,逻辑分区的编号则有变化,Linux允许IDE的LP编号是hda5~64,SATA的LP编号是sda5~15。

(4)启动流程

(#1)单系统启动流程:开机==>BIOS启动==>BIOS读取MBR==>MBR运行boot loader==>boot loader加载核心文件。

不过,启动管理程序(boot loader)除了安装在MBR上外,还可安装在每个分区的boot sector,这是为了多系统运行而使用的。

(#2)多系统启动流程:开机==>BIOS启动==>BIOS读取MBR==>MBR运行多系统菜单选择分支==>根据分支不同加载相应分区的boot sector上的boot loader==>boot loader加载核心文件。

Notice:只有主分区(Primary)的First sector有MBR,每个次分区的First sector是boot sector,boot loader即可安装在MBR(单系统),也可安装在boot sector(多系统),boot loader只认自身分区内的核心文件。

Notice:Windows自动覆盖MBR,如果打算安装Linux&Windows双系统的话,应先安装Windows。

2)开始安装CentOS 5

每个Linux distribution源自于官方所提供的Linux kernel,因此,不同distribution实际上有着一定的相通性。选择CentOS作为入门的原因是,它是目前顶尖Linux distribution的Red Hat的克隆版,两者具有完全兼容性。

(1)调整启动媒体(BIOS)

(2)选择安装结构与开机

(3)选择语系数据

(4)磁盘分区

硬盘分割技巧需要对Linux文件结构有相当程度的了解后才能做出比较完善的规划。所以,建议第一次安装可以使用customer选项。如果尝试自己分割,至少请为/(通常不小于5GB)&swap(内存的1.5~2倍)分配足够空间。

(5)引导装载程序、网络、时区设置与root 密码

(6)软件选择

(7)其他功能:RAM testing、安装笔记本电脑的内核参数(Option):linux nofb apm=off acpi=off pci=noacpi

3)安装后的首次设置

http://vbird.dic.ksu.edu.tw/linux_basic/0157installcentos5_3.php#post_install

4)多重引导安装流程与技巧


2、首次登陆&在线求助

1)首次登录系统

(1)首次登录CentOS 5.x 图形界面

Linux是多人多任务OS,它为每一个用户提供了用户目录位于/home下,在进入Linux会看到右上方更新提示,这是yum提供的更新,它对于OS的安全性起着重要作用。(关于yum详见http://baike.baidu.com/view/157053.htm)

(2)GNOME 的操作与注销

(3)KDE 的操作与注销

(4)X Window 与命令行模式的切换

不同于Windows,窗口界面只是Linux中的一款软件,Linux是基于命令行使用的OS,要在X-Window与文本模式进行切换,可按:

[Ctrl] + [Alt] + [F1] ~ [F6] :文本接口登陆 tty1 ~ tty6 终端机;

[Ctrl] + [Alt] + [F7] :X-Window。

(5)在终端界面登录linux

Linux登录模式有两种:一种是纯文本接口(run level3,可使用tty1~6终端界面)的登录环境,另一种是图形接口(run level5,可使用tty1~7终端界面)的登录环境。

Linux提供了7个等级的run level,最常用的就是3、5这两者,默认启动run level5,如果想默认启动run level3可修改/etc/inittab文件。(如果进入了文本模式想启动X-Window,可使用startx命令)

CentOS release 5.3 (Final) 
Kernel 2.6.18-128.el5 on an i686 ##这两行信息来自/etc/issue
localhost login: root
Password: 
[root@localhost ~]$ _ 

2)在命令行模式下执行命令

(1)开始执行命令

(2)基础命令的操作

(#1)基础命令:ls显示当前目录文件列表、date显示日期、cal显示日历、bc计算机

文本模式下与我们交互的程序称为Shell,一般命令格式:

[root@localhost ~]$ command [-options] parameter1 parameter2

试一下第一个命令,输入ls按Enter,就看到了当前目录下的所有文件,如果在末尾加上-al,就会看到输出包括了相关属性&隐藏目录。

Notice:Linux是区分大小写的,date可以输出日期,而Date则会输出错误提示。

(#2)乱码处理

Linux支持多国语言,因此显示中文时如果出现了乱码,可以用以下命令解决:

1.显示当前语言
[root@localhost ~]$ echo $LANG 
zh_CH.UTF-8 
# 上面的意思是说,目前的语系(LANG)为zh_CH.UTF-8,亦即中文简体 
 
2. 修改语言成为英文
[root@localhost ~]$ LANG=en_US 
# 注意到上面的命令中没有空格符,且英文语系为en_US才对喔! 
[root@localhost ~]$ echo $LANG 
en_US 
# 再次确认一下,结果出现,确实是en_US这个英文!

(#3)Linux一共有多少命令

可以通过连按两次Tab查看。以CentOS5.8为基准,已有2911个命令,要背下来谈何容易,因此,还是以理解为基础,用到去查为好。当然一些常用命令必须事先掌握。

命令行下一些基本快捷键(类似Vi):

鼠标框选后按中建 复制
长按ESC松开再按“。” 复制上句命令参数
Ctrl+A 至行首
Ctrl+E 至行末
Ctrl+左右键头 以单词为单位移动光标
Ctrl+U 从光标删至行首
Ctrl+K 从光标删至行末
touch xx 创建名为xx的文本文件
^xx^yy 重新执行上句命令并将参数xx换成yy

(3)重要的热键[Tab], [ctrl]-c,[ctrl]-d

基础热键:Tab命令&文件补全、Ctrl+c中断目前程序、Ctrl-d相当于exit

(4)错误信息的查看

[root@localhost ~]$ DATE 
-bash: DATE: command not found 

bash是shell的名称,Linux的默认壳程序就是bash,后面代表DATE:命令找不到。

对于有一些英语基础的人来说,查看错误信息并非难事,就算遇到读不懂的错误信息也可以借由百度。

3)Linux 系统的在线求助man page 与info page

(1)man page

man命令可以查询其它命令的帮助文档(man page),试着输入man date看看效果,空格键=下翻、q键=退出查看。

帮助文档(man page)第一行可以看到Date(1),括号内1的意思如下,可通过man 7 man查看更详细的说明。

代号 代表内容
1* 使用者在shell环境中可以操作的命令或可运行文件
2 系统核心可呼叫的函数与工具等
3 一些常用的函数(function)与函式库(library),大部分为C的函式库(libc)
4 装置文件的说明,通常在/dev下的文件
5* 配置文件或者是某些文件的格式
6 游戏(games)
7 惯例与协议等,例如Linux文件系统、网络协议、ASCII code等等的说明
8* 系统管理员可用的管理命令
9 跟kernel有关的文件

Notice:其中1、5、8比较重要,必须记下。

通过whatis xxx查看需要命令的介绍,然后通过man 1 xxx查看内容,数字1表示命令所在章节,对应上表代号。

man page结构说明:

代号 内容说明
NAME 简短的命令、数据名称说明
SYNOPSIS 简短的命令下达语法(syntax)简介
DESCRIPTION 较为完整的说明,这部分最好仔细看看!
OPTIONS 针对 SYNOPSIS 部分中,有列举的所有可用的选项说明
COMMANDS 当这个程序(软件)在运行的时候,可以在此程序(软件)中下达的命令
FILES 这个程序或数据所使用或参考或连结到的某些文件
SEE ALSO 可以参考的,跟这个命令或数据有相关的其他说明!
EXAMPLE 一些可以参考的范例
BUGS 是否有相关的臭虫!

man page常用键整理:

/ 当你按下『/』之后,光标就会移动到屏幕的最下面一行, 并等待你输入搜寻的字符串
按键 进行工作
空格键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[Home] 去到第一页
[End] 去到最后一页
/string 向『下』搜寻 string 这个字符串,如果要搜寻 root 的话,就输入 /root
?string 向『上』搜寻 string 这个字符串
n, N 利用 / 或 ? 来搜寻字符串时,可以用 n 来继续下一个搜寻 (不论是 / 或 ?) ,可以利用 N 来进行『反向』搜寻。举例来说,我以 /root搜寻 root字符串, 那么可以 n 继续往下查询,用 N 往上查询。若以 ?root向上查询 root 字符串, 那我可以用 n 继续『向上』查询,用 N 反向查询。
q 结束这次的 man page

Notice:根据命令查找某些特定的命令或者是修改某些特定的配置文件,man -f date来实现查找。(等价于whatis)

Notice:找出系统的说明文件中,只要有man这个关键词就将该说明列出来,man -k man。(等价于apropos)

Notice:whatis&apropos这两个命令的使用必须建立在创建whatis数据库(以root身份输入makewhatis)。

(2)info page

info是man的网页版,以网络状模式显示帮助文档(info page)。

按键 进行工作
空格键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[tab] 在 node 之间移动,有 node 的地方,通常会以 * 显示。
[Enter] 当光标在 node 上面时,按下 Enter 可以进入该 node 。
b 移动光标到该 info 画面当中的第一个 node 处
e 移动光标到该 info 画面当中的最后一个 node 处
n 前往下一个 node 处
p 前往上一个 node 处
u 向上移动一层
s(/) 在 info page 当中进行搜寻
h 显示求助菜单
? 命令一览表
q 结束这次的 info page

(3)其他有用的文件(documents)

man page(man文件位于/usr/share/man中)。

info page(info文件位于/usr/share/info/中)。

/usr/share/doc中的帮助文档。

不同的distribution的帮助文档的目录有些差异,可以通过修改/etc/man.config改善这个问题。

4)超简单文本编辑器:nano(20130118)

文本模式下,如果想查看&编辑某个文件,可以通过nano filename启动这个最简单的文本编辑器(类似Windows的记事本)。

5)正确的关机方法

『who』查看目前登陆的用户,『 netstat -a 』查看网络的联机状态,『 ps -aux 』查看进程运行状态。

(1)数据同步写入磁盘:sync

『sync』将内存中的驻留数据同步到硬盘。

(2)惯用的关机命令:shutdown

(3)重启、关机:reboot,halt,poweroff

『shutdown』『halt』『poweroff』『reboot』,自行通过man查看。

sync;sync;sync;reboot;#进行3次数据同步,然后重启

(4)切换执行等级:init

通过『init』可以进行不同运行等级的切换,run level 0:关机,run level 3:纯文本模式,run level 5:图形接口模式,run level 6:重新启动。

(5)关机命令总结:

init 0
poweroff
shutdown -h now

6)开机过程的问题排解

(1)文件系统错误的问题

启动故障(因为断电或不正常关机所导致的文件系统发生错误、硬盘使用率过高或主机所在环境不良也是一个可能的原因):

方案:根目录无损坏,可通过提示进入系统,如果根目录损毁,通过LiveCD启动系统(或单人维护模式),进入系统后,在文本模式下通过『fsck /dev/sdxN』进行修复。

(2)忘记root密码

方案:先将系统重新启动,在读秒的时候按下任意键,按下『e』进入grub的编辑模式,将光标移动到kernel那一行,再按一次『 e 』进入kernel该行的编辑画面,最后方输入 single,按下『 Enter 』确定之后,按下 b 就可以启动进入单人维护模式。(单人维护模式无需输入密码,且直接是root权限)

 

3、权限&目录管理(20130123)

1)用户与用户组

2)Linux 文件权限概念

(1)文件属性

drwx------   3    root   root     4096   Sep  5 10:37 .gconf      <=范例说明处
drwx------   2    root   root     4096   Sep  5 14:09 .gconfd
-rw-r--r--   1    root   root    42304   Sep  4 18:26 install.log <=范例说明处
-rw-r--r--   1    root   root     5661   Sep  4 18:25 install.log.syslog
[    1   ][  2 ][   3  ][  4 ][    5   ][     6      ][       7        ]
[  权限  ][连结][拥有者][群组][文件容量][  修改日期  ][     文檔名      ]
权限说明:d | rwx | r-x | --x
                  1 |   2   |  3  |  4
第1部分
[ d ] 目录,例如上边名为『.gconf』的那一行
[ - ] 文件,例如上边名为『install.log』那一行
[ l ] 连结档(link file),类似快捷方式
[ b ] 设备文件:可供储存的接口设备(可随机存取装置)
[ c ] 设备文件:串行端口设备,例如键盘、鼠标(一次性读取装置)
第2、3、4部分(r-读、w-写、x-执行)
第2部分 文件拥有者的权限,例如:rwx = 读写执行
第3部分 同群组的权限,例如:r-x = 读执行
第4部分 其他非本群组的权限,例如:--x = 执行

Notic:如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。因此,要开放目录给某个群组,最少要给予r、x权限。

(2)如何改变文件属性与权限

(#1)chgrp改变文件所属群组

[root@www ~]# chgrp [-R] dirname/filename ...
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录
     都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
范例:
[root@www ~]# chgrp users install.log
[root@www ~]# ls -l
-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
[root@www ~]# chgrp testing install.log
chgrp: invalid group name `testing' <== 发生错误讯息啰~找不到这个群组名~

(#2)chown改变文件拥有者

[root@www ~]# chown [-R] 账号名称 文件或目录
[root@www ~]# chown [-R] 账号名称:组名 文件或目录
选项与参数:
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更

范例:将install.log的拥有者改为bin这个账号:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log

范例:将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log

(#3)chmod改变权限 

方式一(直观的字符):

chmod u
g
o
a
+(加入)
-(除去)
=(设定)
r
w
x
文件或目录名
[root@www ~]# ls -al .bashrc
-rwxr-xr-x  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod  a+w  .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

方式二(抽象的数字):

r:4、w:2、x:1

[-rwxrwx---]

owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0

[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod -R 777 test  ##-R用递归改变文件夹本身和文件夹内其它文件的权限

用mkdir(建立目录)&touch(建立空文件)命令创建一个新文件,尝试一下以上命令。file命令可查看文件类型。

(3)目录与文件的权限意义

(4)Linux 文件种类与扩展名

3)Linux 目录配置

(1)Linux 目录配置标准:FHS

(2)目录树(directory tree)

(3)绝对路径与相对路径

(4)CentOS 的查看

查看当前系统信息命令:cat /etc/redhat-release、lsb_release -a、uname -a


4、文件&目录管理(20130128)

1)目录&路径:

(1)相对路径&绝对路径

(2)目录的相关操作

切换目录:cd,change directory,cd [相对路径or绝对路径]。cd ~,其中“~”代表一个变量,是当前用户的家目录。cd -,其中“-”代表上一次所在目录。

(3)关于执行文件路径的操作:$PATH

用vim xx.sh命令在/root下写一个只有一条#!/bin/bash(换行)date命令的脚本,然后在命令行输入xx.sh,会提示command not found,这是因为命令执行时linux会依次寻找PATH中设置的目录,在PATH中没有/root。

查看环境变量:echo $PATH,然后使用PATH=".../root"将root目录加入环境变量中,再执行xx.sh就会成功显示日期了。

2)文件&目录管理

(1)查看文件与目录:ls

ls -s(查看大小)-sh(以适合人类的方式显示大小)-shd /(不加d表示查看文件夹下属文件的信息,加d表示查看文件夹本身的信息)、du -sh(查看文件夹+里面文件的大小)、ls -R /(R代表递归,会显示根目录下所有文件)、ls -l --time=ctime xx.sh(ctime=create创建时间、atime=access访问时间)

(2)复制、删除与移动:cp、rm、mv,创建&删除文件夹:mkdir、rmdir

cp [source] [destination],cp /etc/service .(“.”代表当前目录,把service拷贝到当前目录)、cp /etc/service /opt/aa(service&aa都不是文件夹,把service拷贝到opt目录下,并重命名aa替换原来的aa)、cp -rf /etc/ /opt(r递归、f强制,强制把etc目录下的所有文件拷贝到opt目录下)、cp -p /etc/service .(p连同源文件属性一同拷贝)、cp -a /etc/ .(a=rfp)。

rm -rf etc/(强制删除etc下所有文件)、rm -rf /etc/(etc前面多一个“/”表示把etc目录删除)。

mv [source] [destination],mv /etc/service /etc/service2(service重命名为service2)、mv /etc/service /opt(service剪切到opt目录下)。

mkdir -p dd/dd1/dd2(创建dd2,如果父文件夹dd1不存在就一起创建,依次类推)、tree以树状结构查看当前目录。

rmdir删除文件夹,但只能删除空目录。删除非空目录还是要用rm -rf(这个命令没有删除不了的东西)、rmdir -p dd/dd1/(删除dd1,如果父目录dd成为空目录就一并删除)。

(3)取得路径的文件名与目录名称

ls /boot/grub/grub.conf显示绝对路径/boot/grub/grub.conf、basename /boot/grub/grub.conf仅显示文件名grub.conf、dirname仅显示路径/boot/grub。

3)文件内容查阅

(1)直接查看文件内容

cat /etc/service(查看service内容,一次显示完)、cat -n /etc/hosts(n同时显示行号)、cat -A /etc/hosts(A用“^I”替代tab打出来的空格)、tac /etc/hosts(倒过来显示内容)、nl /etc/hosts(等同cat -n)、nl -b a /etc/hosts(空行也显示行号)。

(2)可翻页查看

more /root/install.log(分屏显示,但只能向前翻,Enter翻行,Blank翻页)、less /root/install.log(分屏显示,可输入关键字查找位置,n向下查找,N向上查找)、head -n 3 /root/install.log(查看前3行,不写默认前10行,-n可省略直接写数字)、tail(与head类似,查看尾10行)、tail -f install.log(实时查看install变化,可用于查看日志文件)、tailf(等同于tail -f)。

(3)数据选取

(4)非纯文本文件:od

od -t c /bin/ls(以16进制显示该二进制文件)、strings /bin/ls(将二进制文件转换为字符形式显示)。

(5)修改文件时间或创建新文件:touch

touch xx(创建文件xx)、touch hosts(hosts文件已存在,则改变其创建时间为现在)、touch -t 201212210101 xx(改变文件创建时间)。

4)文件&目录的默认权限与隐藏权限

(1)文件默认权限:umask

umask是权限过滤符,eg:umask=022=----w--w-,创建文件时,文件夹默认777=rwxrwxrwx,过滤后rwxr-xr-x,文件默认666=rw-rw-rw-,过滤后rw-r--r--,可以看出并不是单纯的加减运算,而是换算为权限标识符后再进行排除。

(2)文件隐藏属性:chattr、lsattr

lsattr查看文件隐藏属性。

[root@www ~]# chattr [+-=][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 才能配置

范例:请尝试到/tmp底下创建文件,并加入 i 的参数,尝试删除看看。
[root@www ~]# cd /tmp
[root@www tmp]# touch attrtest     <==创建一个空文件
[root@www tmp]# chattr +i attrtest <==给予 i 的属性
[root@www tmp]# rm attrtest        <==尝试删除看看
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted  <==操作不许可
# 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除配置!

范例:请将该文件的 i 属性取消!
[root@www tmp]# chattr -i attrtest

(3)文件特殊权限:SUID、SGID、SBIT

SUID,仅能用在binary program,不能用于shell script,eg:/etc/shadow(存放用户密码)仅root具有可读写权限,passwd(-rws(=SUID)r-xr-x)具有SUID,因此,普通用户可借由passwd对shadow进行写操作,但直接cat shadow是无效的。

SGID是SUID的群组版,它们都有效于binary program(SGID也对目录有效),当被标识为SGID时,非该群组用户执行该binary program,(只要binary program允许)也能对仅该群组用户具有操作权限的文件进行读写操作。

[root@www ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x 1 root slocate   23856 Mar 15  2007 /usr/bin/locate
-rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.db

SBIT,对某一目录具有写权限,则能对目录下文件进行删除修改,SBIT限制了对某一目录具有写权限时,仅能对用户自己创建的文件进行删除修改。

chmod可对文件进行特殊权限赋值,chmod 7777,后面3个7不解释了,第一个7代表(SUID-4,SGID-2,SBIT-1)。

(4)查看文件类型:file

5)命令&文件的查询

(1)脚本文件名的查询

http://vbird.dic.ksu.edu.tw/linux_basic/0220filemanager_5.php

(2)文件名的查找

6)权限与命令间的关系(极重要)


5、Linux磁盘&文件系统管理

1)认识EXT2 文件系统

(1)硬盘组成与分区的复习

(2)文件系统特性

(3)Linux 的EXT2 文件系统(inode)

(4)与目录树的关系

(5)EXT2/EXT3 文件的访问与日志文件系统的功能

(6)挂载点(mount point)的意义

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

2)文件系统的简单操作

(1)磁盘与目录的容量:df, du

(2)连接文件:ln

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

(1)磁盘分区:fdisk

(2)磁盘格式化

(3)磁盘检验:fsck,badblocks

(4)磁盘挂载与卸载

(5)磁盘参数修改

4)设置开机挂载

(1)开机挂载/etc/fstab 及/etc/mtab

(2)特殊设备loop 挂载(镜像文件不刻录就挂载使用)

5)内存交换空间(swap)的构建

(1)使用物理分区构建swap

(2)使用文件构建swap

(3)swap 使用上的限制

6)文件系统的特殊查看与操作

(1)boot sector 与superblock 的关系

(2)磁盘空间的浪费问题

(3)利用GNU 的parted 进行分区行为

 

一、Linux基础(20130111)

1、Linux简介

Linux是UNIX的一种克隆系统。于1991年10月5日第一次对外公布。借助Internet网络上的爱好者力量逐渐发展。

详细介绍:http://zh.wikipedia.org/wiki/Linux

2、Linux的版本号

可分两类:Kernel(指的是在Linux领导下的开发小组开发出来的系统内核版本号)、Distribution(是由组织或公司开发的以Kernel为基础的作业系统)。

Kernel版本号格式:major(主版本号,结构性变化).minor(次版本号,新增功能,奇数-测试版,偶数-生产版).patch(对minor的修订次数或补丁包)-build(编译或构建的次数,即优化).desc(描述当前版本的特殊信息,有随意性)

desc举例:rc(release candidate)、smp(Symmetric MultiProcessing)、pp(pre-patch)、EL(Enterprise Linux)、fc(Fedora Core)、mm(测试新技术、功能的版本)

3、Linux Distribution的主要版本(所有版本查看网站:www.distrowatch.com)

Red Hat Linux:http://zh.wikipedia.org/wiki/Red_Hat 商业版:Red Hat Enterprise Lnux 社区版:Fedora Core 克隆版:CentOS

Mandriva Linux:http://zh.wikipedia.org/wiki/Mandriva_Linux

Debian Linux:http://zh.wikipedia.org/wiki/Debian_Linux

Ubuntu Linux:http://zh.wikipedia.org/wiki/Ubuntu_Linux

Slackware Linux:http://zh.wikipedia.org/wiki/Slackware_Linux

Suse Linux:http://zh.wikipedia.org/wiki/SUSE_Linux

Gentoo Linux:http://zh.wikipedia.org/wiki/Gentoo_Linux

Xandros Linux:http://zh.wikipedia.org/wiki/Xandros

红旗Linux:http://zh.wikipedia.org/wiki/%E7%B4%85%E6%97%97Linux

CentOS:http://zh.wikipedia.org/wiki/Centos(学习建议使用CentOS)

4、Linux优势

开放性(遵循OSI)、多用户、多任务、图形集成界面、支持广泛的网络协议、支持多种应用程序及开发工具、具有内核编程接口、可移植性、标准兼容性、安全性

二、Linux的文件系统

Linux应用程序、库文件、系统文件和用户文件都驻留在文件系统上,因此了解文件系统是全面掌握Linux的基础。在Linux中,所有内容被表示为文件,组织文件的各种方法便被称为不同的文件系统。Linux支持多文件系统,使之能够与不同的操作环境实现资源共享,这也是Linux作为网络OS的明显优势。

1、什么是文件系统

文件系统是对一个存储设备上的数据和元数据进行组织的机制。由于存在着多种类型的文件形式,Linux使用分层的体系结构实现这一接口,以隔开接口层、文件系统和底层驱动。

  用户接口   用户空间
  GUN C库  
  系统接口   内核空间
节点缓存 VFS 目录缓存
  个体文件系统  
  缓存区缓存  
  设备驱动  

用户空间包含一些应用程序(例如,文件系统的使用者)和GNU C库(gclib),他们为温ianxitong调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换机,它将系统调用从用户控件发送到内核空间中适的当端点。

VFS是底层文件系统的主要接口。这个组件导出一组接口,然后将他们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode&dentry)。他们缓存最近使用过的文件系统对象。每个个体文件系统实现(比如ext2、JFS等)导出一组通用接口,供VFS使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用sync命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的数据发送到设备驱动程序,进而发送到存储设备)。

相关术语:

挂载(mount):将一个文件系统和一个存储设备关联起来的过程。

块设备:以块(比如磁盘扇区)为单位收发数据的设备,它们支持缓冲和随机访问(不必顺序读取)。

2、Linux文件系统结构(20130113)

Linux的文件系统采用阶层式树状目录结构,最上层是“/”,然后在下边创建其他目录。(Linux允许开发者修改OS,为了避免造成目录混乱的局面,而规定了一套规范,Filesystem Hierarchy Standard,FHS,www.pathname.com/fhs/)

接口设备文件,如hda。

/ Linux系统根目录,也是出于最高一级的目录。
/bin Binary的缩写,基础(最小)系统所需要的命令均存放于此,此文件夹中存放的都是可执行命令,和/usr/bin类似。
/boot 包含wmlinuz,initrd.img等启动文件,一般情况下,GRUB或LILO系统引导管理器也位于这个目录。
/dev 所有硬件设备都在此目录下
/etc 系统配置文件的所在地,服务器配置文件也在此,比如账户密码的配置文件。
/home 一般用户的主目录,如FTP目录等。
/lib 库文件存放目录,包括执行/bin和/sbin目录的二进制文件时所需要的共享函数库。
/mnt 各项装置的文件系统的加载点,例如:/mnt/cdrom是光驱的加载点。
/opt 表示可选择的意思,有些软件包(比如自定义软件包)会安装在这里。
/proc OS运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。
/root 管理员的主目录
/sbin 大多数涉及系统管理命令的存放地,也是超级用户root的可执行命令的存放地。与/usr/sbin、/usr/X11R6/sbin或/usr/local/sbin相似。
/tmp Temporary,存放暂存盘的目录。
/usr 系统存放程序的目录,比如命令、帮助文件等。当安装一个Linux Distribution官方提供的软件包时,多是安装于此。
/var 这个目录的内容是经常变动的,可理解为vary的缩写,/var/log存放系统日志,/var/www是定义Apache服务器站点存放目录,/var/lib存放一些比如MySQL的库文件。

比较重要的子目录:/etc、/usr、/var、/proc(时间充裕可额外了解)。

3、Linux文件系统的组成

在Linux系统内部,一个文件系统是由逻辑块的序列组成的,每块为512个字节。

引导块(存在于开头的扇区,用于读入并启动OS) 超级块(记录文件系统的当前状态) 索引节点区(Linux系统中每个文件和目录都占据一个索引节点) 数据区(文件数据&用于文件管理的数据)

4、文件类型

5种基本的文件类型:

1)普通文件(又分text file&binary file)

一般的文档和程序都属于此类,包括:图片、影像、声音等。

2)目录文件

设计目录文件的主要目的是用于管理&组织系统中的大量文件。Linux把目录看成是文件,称为目录文件。目录是由OS用于形成文件系统树状结构的一个节点单位。目录文件里包含普通文件和下一级的目录,并且包含指向下属文件和子目录的指针。

C语言中,经常使用指针编程,同样,Linux也是通过对地址的指针寻址来实现其对目录和文件的管理。当用mv命令对存在于当前目录中的一个文件重新命名时,所做的事只是改变该文件在目录文件中的说明。如果把一个文件从一个目录移动到另一个目录中,所做的事只是改变文件在目录文件中的指针地址。实际上Linux通过读取索引节点表来检测这种行为,而文件只是被赋予了一个新的索引节点而已。同样,当用rm命令删除文件时,Hnux标记该索引节点时自由的,并把它放回可供使用的空闲索引节点表中。在此,还将简单介绍子目录与父目录的关系:如果一个目录是包含在另一个目录下的,则这个目录就是它上一级目录的子目录,对应地,上一级目录就是这个目录的父目录。

3)链接文件

Hard Link是通过索引节点来进行的链接。在Linux的文件系统中,保存在磁盘分区中的文件,不管是什么类型,都给它分配一个编号,称为inode index。在Linux中,多个文件名指向同一个inode index是存在的。这种链接一般就是Hard Link。其作用那个是允许一个文件拥有堕恶有效路径名,这样用户就可以建立Hard Link到重要文件,以防止“误删”。只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。Hard Link可实现文件共享。

Symbilc Link又称软链接,是特殊文件的一种。

4)设备文件

Linux把每一个I/O设备看成一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。从用户角度,对I/O设备的使用和一般文件的使用一样,不必了解I/O设备的细节。设备文件可以细化为块设备文件(存取以字符块为单位)和字符设备文件(以单个字符为单位)。

5)管道文件

源自UNIX,管道是通过通常的IO接口存取的字节流。管道文件是一种特殊文件,主要用于不同进程间的信息传递。通常管道建立在调整缓存中。

5、文件系统的特性

Linux文件系统的特性决定文件的属性,比如我们通过chattr+i来避免某个文件被改动,通过chattr+i来改其为只读文件,在ext2&ext3下是可以的,但在ReiserFS下不起任何作用。不同的文件系统有不同的特性,这种特性往往决定着文件系统文件和目录的属性。每个文件系统都有一系列的工具,包括创建、修复、备份等。

6、Linux主流文件格式

文件系统指文件存在的物理空间。在Linux中,每个分区都是一个文件系统,都有自己的目录层次结构。Linux的重要特征之一(Virtual File System)就是支持多种文件系统。

1)ext

ext是第一个专门开发的Linux文件系统类型,由于其在稳定性、速度和兼容性上存在许多缺陷,现在很少使用。

2)ext2

ext2是为解决ext缺陷而设计的可扩展的、高性能的文件系统,在速度和CPU利用率上较为突出,是GNU/Linux系统中标准的文件系统。ext2支持256字节的长文件名,其单一文件大小和文件系统本身的容量上限与文件系统本身的簇大小有关。在常见的Intel x86兼容处理器的系统中,簇最大为4KB,单一文件大小上限为2048GB,而文件系统的容量上限为6384GB。缺陷:设计者主要考虑性能方面的问题,而在写入文件内容的同时,并没有写入文件的meta-data(和文件有关的信息,例如权限、所有者及创建和访问时间),等到系统空闲时才进行此操作。换句话说,如果在写入内容后,系统断电,meta-data没有写入,就可能造成文件系统处于不一致的状态。因此,尽管文件系统的容量上限是6384GB,但实际上能用的文件系统容量最大也只有2048GB。

(补充知识:日志式文件系统起源于Oracle、Sybase等大型DB。数据库操作往往是由多个相关的、相互依赖的子操作组成的,任何一个子操作的失败都意味着整个操作的无效性,对DB数据的任何修改都要恢复到操作以前的状态。Linux日志式文件系统就是由此发展而来的。它通过增加一个叫做日志的、新的数据结构来解决这个“fsck”问题。这个日志是位于磁盘上的结构。在对元数据做任何改变以前,文件系统驱动程序会向日志中写入一个条目,这个条目描述了它将要做些什么,所以日志文件具有可伸缩性和健壮性。在分区中保存日志记录文件的好处是:文件系统写操作首先是对记录文件进行操作,若整个些操作由于某种原因(断电等)而中断,则在下次系统启动时就会读日志记录文件的内容,恢复到没有完成的写操作,这个过程一般只需要两三分钟。)

3)ext3

ext3是由开放资源社区开发的日志文件系统,在ext2的基础上加入了记录元数据的日志功能,努力保持向前和向后的兼容性,日志式文件系统的优越性在于由于文件系统都有快取层参与运作,不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。因此,每当系统要关机时,必须将其所有的文件系统全部卸下后才能关机。然而,这个过程是相当耗时的,由于ext3基于ext2的代码,所以它的磁盘格式和ext2的相同,这意味着一个干净卸载的ext3文件系统可以作为ext2文件系统毫无问题地重新挂载。缺陷:没有现代文件系统所具有的、能提高文件数据处理速度和解压的高性能。

4)JFS

JFS是一种提供日志的字节级文件系统。该文件系统主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计、开发的。JFS是为面向事务的高性能系统而开发的。在IBM的AIX系统上,JFS已经过较长时间的测试,结果表明它是可靠、快速和容易使用的。JFS也是一个有大量用户安装使用的企业级文件系统,与非日志文件系统相比,它突出的优点是快速重启能力,JFS能在几秒或几分钟内就把文件系统恢复到一致状态。它还可以用于想得到高性能和可靠性的客户机配置,因为在系统崩溃时JFS能提供快速文件系统重启时间,所以它是Intelnet文件服务器的关键技术。非日志式文件系统可能要花几小时or几天进行恢复。缺陷:性能上会有一定损失,系统资源占用的比例也偏高,因为当它保存一个日志时,系统需要写许多数据。

5)ReiserFS

ReiserFS的开发者相信最好的文件系统是能够有助于创建独立的共享环境或命名空间的文件系统,应用程序可以在其中更直接、有效和有力地相互作用。FeiserFS使用了特殊的、优化的平衡树(每个文件系统一个)来组织所有的文件系统数据,这为其自身提供了非常不错的性能改进,也能够减轻文件系统设计上的人为约束。另一个使用平衡树的好处就是,ReiserFS能够像其他大多数的下一代文件系统一样,根据需要动态地分配索引节。传统UNIX文件系统是按磁盘块来进行空间分配的,对于目录和文件等的查找使用了简单的线性查找,但随着磁盘容量的增大和应用需要的增加,存储效率、速度和功能上显得落后。缺陷:ReiserFS版本升级需要格式化磁盘,且安全性和稳定性与ext3相比有一定的差距。如果创建一个超过768字符的文件目录,并使用ls或其他echo命令,可能导致系统挂起。

6)XFS

XFS是一种非常优秀的日志文件系统,作为一个64位文件系统,支持大数量的文件(9000*1GB),可在大型2D和3D数据方面提供显著性能。XFS有能力预测其他文件系统薄弱环节,同时可在不妨碍性能的情况下增强可靠性和快速的事故恢复。XFS被设计成可升级的,以面对大多数的存储容量和I/O存储需求。XFS有能力动态地位文件分配索引空间,使系统形成高效支持大数量文件的能力。XFS可以很好地满足I/O请求的大小和并发I/O请求的数量。XFS可作为root文件系统,并被LILO支持,也可以在NFS服务器上使用,并支持RAID和LVM。由于XFS比较复杂,实施起来有一些难度,所以目前主要应用于Linux企业应用的高端。

7)其他文件系统

Minix、Xia、ISO 9660、NFS、SysV、UMSDOS、MSDOS、VFAT、HPFT、SMB、NCPFS、NTFS。

7、查看文件相关命令

1)ls

-a 列出目录下的所有文件,包括以“.”开头的隐含文件。
-b 把文件名中不可输出的字符用反斜杠加字符编号(就像在C中一样)的形式列出。
-c 输出文件的i节点的修改时间,并以此排序。

2)cat

3)rm

4)less

5)cp

6)mv

7)grep

8)head

9)tail

10)sort

11)uniq

12)diff

13)diffstat

14)file

15)echo

16)date

17)script

18)apropos

19)locate

20)rmdir

21)basename

22)chattr

23)cksum

24)cmp

25)split

26)dirname

27)find

28)findfs

29)ln

30)lndir

31)lsattr

32)od

33)paste

34)stat

35)tee

36)tmpwatch

37)touch

38)tree

39)umask

40)chmod

41)chgrp

42)chown

三、Linux磁盘管理及其相关命令(20130115)

1、硬盘相关的概念

1)简介

Hard Disk使用磁介质来存储数据,所以又称“磁盘”。由于它的盘基由硬金属制成,与尼龙软基的软盘相对,所以叫Hard Disk。1956年9月,IBM的一个工程小组展示了第一台磁盘存储系统IBM 350 RAMAC。1973年,IBM又发明了Winchester硬盘,其特点是工作时磁头悬浮在高速转动的盘片上方,而不与盘片直接接触,这便是现代Hard Disk的原型。

2)组成

一般来说,无论哪种Hard Disk,都是由盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等部件组成的。所有盘片都固定在一个旋转轴上这个轴即盘片主轴。而所有盘片之间是绝对平行的。在每个盘片的存储面上都有一个磁头,磁头与盘片之间的距离比头发丝的直径还小。所有的磁头连在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向动作,而盘片以每分钟数千转到上万转的速度在高速旋转,这样磁头就能对盘片上的指定位置进行数据的读/写操作。

3)外部结构

目前市场上常见的Hard Disk没有元器件的一面贴有产品标签,俗称正面。标签上面标有生产厂家、转速、容量、工作电压等信息。另一面从外观上看,具有金属外壳,裸露着控制芯片、电阻等电子元件,这样裸露的原因是有利于散热。

(1)接口包含电源接口和数据接口(数据接口根据连接方式不同分IDE、SCSI、SATA)。

(2)控制电路板大多采用贴片式元件焊接,包括主轴调速电路、磁头驱动与伺服定位电路、读/写电路、控制与接口电路等。在电路板上还有一块高校的单片机ROM,其固化的软件可进行硬盘的初始化、加电、启动主轴电机、加电初始寻道、定位及故障检测等。在电路板上还安装有容量不等的高速缓存芯片。

(3)固定盖板标有产品的型号、产地、设置数据等,和底板结合成一个密封的整体,保证硬盘盘片和机构的稳定运行。固定盖板和盘体侧面还设有安装孔,以方便安装。

4)内部结构

主要由固定面板、控制电路板、盘头组建、接口及附件等几大部分组成。盘头组建(Hard Disk Assembly,HAD)是构成硬盘的核心,封装在硬盘的净化腔内,包括浮动磁头组件、磁头驱动机构、盘片及主轴驱动机构、前置读/写控制电路等。

(1)浮动磁头组件

浮动磁头组件由I/O磁头、传动杆和传动轴三部分组成。磁头是硬盘技术中最重要和最关键的一环,实际上是集成工艺制成的多个磁头的组合,它采用了非接触式结构,加电后在高速旋转的磁盘表面飞行,飞高间隙只有0.1~0.3um,可以获得极高的数据传输率。现在转速为5400r/min的硬盘飞高间隙低于0.3um,以利于读取较大的高信噪比信号,提供数据传输存储的可靠性。

(2)磁头驱动机构

磁头驱动机构由音圈电机和磁头驱动小车组成。新型大容量硬盘还具有高效的防震动机构。高精度的轻型磁头驱动机构能够对磁头进行正确的驱动和定位,并在很短的时间内精确定位系统指令指定的磁道,保证数据读写的可靠性。磁头机构的电机有步进电机、力矩电机和音圈电机三种,前两种应用在低容量磁盘中,现已被淘汰,大容量磁盘多采用音圈电机驱动。音圈是中间插有与磁头相连的磁棒的线圈,当电流通过线圈时,磁棒会发生位移,进而驱动装载磁头的小车,并根据控制器在盘面上磁头位置的信息编码来得到磁头移动的距离,达到准确定位的目的。音圈电机是密封型的控制系统,能够自动调整,速度比早期的驱动电机快,而且安全系数高。

(3)盘片和主轴组件

盘片是硬盘存储数据的载体,现在的盘片大都采用金属薄膜磁盘,与软盘的不连续颗粒载体相比,这种金属薄膜具有更高的记忆密度,同时还具有高剩磁和高矫顽力的特点。主轴组件包括主轴部件(如轴瓦)和驱动电机等。随着磁盘容量的扩大,主轴电机的速度也不断提升,导致了传统滚珠轴承电机磨损加剧、温度升高、噪声增大的弊病,对速度的提高带来了负面影响,因而生产厂商开始采用精密机械工业的液态轴承电机技术。液态轴承电机使用黏膜液态轴承,以油膜代替滚珠可以避免金属面的直接摩擦,使噪声和温度减小到最低。而油膜具有有效吸收震动的能力,可以提高主轴的抗震能力。从理论上讲,液态轴承电机无磨损,寿命无限长,是目前超高速硬盘的发展趋势。

(4)前置控制电路

前置控制电路用于控制磁头感应的信号、主轴电机调速、磁头驱动和伺服定位等。由于磁头读取的信号微弱,将放大电路密封在腔体内可减少外来信号的干扰,提高操作指令的准确性。

2、硬盘的性能指标

1)转速

是一分钟内的旋转圈数,主流的IDE硬盘又5400r/min和7200r/min两种,不过低端市场5400r/min的硬盘仍以其高性价比占主要位置。现在10000r/min的硬盘市场上也有了。

2)平均寻道时间

是磁头移动到数据所在磁道时所用的时间,单位为ms。现在的硬盘完成数据搜索的时间只需要11ms,所以一般应该选择平均寻道时间低于9ms的产品。

3)反应时间

是完成第一次转轮旋转的时间,它是反映非曲直硬盘转速最直接的一个性能指标。5400r/ms的硬盘拥有5.55ms的反应时间,7200r/ms则是4.17ms。

4)平均潜伏期

是指当磁头移动到数据所在的磁道后,等待所要的数据继续转动(半圈或多些、少些)到磁头下的时间,单位为ms。

5)最大内部数据传输率

也叫Sustained Transfer Rate,是指磁头到磁盘缓存间的最大数据传输率,单位Mb/s。(MB/s=Mb/s/8)最大内部数据传输率一般取决于硬盘转速和盘片数据线密度(指同一磁道上的数据间隔度)。

6)外部数据传输率

是指从硬盘缓存区读取数据的速率,常以数据接口速率代替,单位以MB/s。

7)数据缓存

是指硬盘内部的高速缓存,就像电脑中的内存将一些数据暂时性地保存起来以供读取和再读取。ATA硬盘位2MB,SCSI硬盘最高已达到16MB。由于缓存的速度远远高于磁头的速度,因此当CPU执行某一簇数据的时候,磁头预先将下一簇数据存进缓存以便CPU需要调用时能立即获得。

8)单碟容量

是硬盘盘体内每张磁碟的最大容量。每块磁盘都有若干张碟片,所有碟片的容量之和就是磁盘的总容量。要提高单碟容量,就必须提高磁记录的密度,目前几乎所有的磁盘都采用了GMR磁头技术来提高磁记录密度。单碟容量是影响磁盘数据传输率的一个重要技术指标,因为高密度片可使硬盘在读取相同数据量时将磁头的寻道动作和移动距离减少,从而减少平均寻道时间,加快硬盘速度,目前单碟容量已达160GB。

3、硬盘的接口方式

硬盘接口的作用是在硬盘缓存和主机内存之间传输数据,其优劣直接影响程序运行快慢和系统性能好坏。

1)IDE

Integrated Drive Electronic,它本意是指把硬盘控制器与盘体集成在一起的硬盘驱动器。好处是减少了硬盘接口的电缆数目与长度,数据传输可靠性得到了加强,制造变得容易(不必再担心硬盘与控制器的兼容性)。用户安装也变得容易。IDE代表硬盘的一种类型,但在实际应用中,人们习惯用IDE称呼最早出现的IDE类型的硬盘ATA-1,它已经被淘汰,后来发展出现更多类型的硬盘接口,比如ATA、UltraATA、DMA、UltraDMA等都属于IDE。

2)SCSI

Small Computer System Interface,是与IDE完全不同的接口,IDE是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,但较高的价格使它很难入IDE普及。因此,SCSI主要应用于高端服务器和工作站中。

3)光钎通道

Fibre Channel,和SCSI类似,最初也不是为硬盘设计开发的接口技术,是专门为网络系统设计的,随着存储系统对速度的需求,才逐渐应用到硬盘系统中。光钎通道硬盘是为提高多硬盘存储系统的速度和灵活性才开发的。主要特点:热插拔、高速带宽、远程连接、连接设备数量大等。它是为像Server这样的多硬盘系统环境而设计的,能满足高端工作站、Server、海量存储子网络、外设间通过集线器、交换机和点对点连接进行双向、串行数据通信等系统对高数据传输率的呀求。

4)SATA

Serial ATA,又叫串口硬盘,是未来PC趋势。2001年,由Intel、APT、Dell、IBM、希捷、迈拓几个厂商组成的Serial ATA委员会正式确立了1.0规范。2002年,确立了2.0规范。它采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令进行检查,若发现错误自动矫正,很大程度提高了可靠性。串行接口还具有结构简单、支持热插拔的优点。

5)SAS

Serial Attached SCSI,2001年,由Compaq、IBM、LSI逻辑、Maxtor、Seagate联合成立SAS工作组,目标定义一个新的串行点对点的企业级存储设备接口。SAS技术引入了SAS扩展器,使SAS系统可以连接更多地设备,其中每个扩展器允许连接多个端口,每个端口可以连接SAS设备、主机或其他SAS扩展器。为保护用户投资,SAS规范也兼容了SATA,这使得SAS的背板可以兼容SAS和SATA两类硬盘,对用户来说,使用不同类型的硬盘时不需要再重新投资。目前,SAS接口速率为3Gbps,扩展器多位12个端口。不久,会有6Gbps或更高的出现,端口数量也会28或得到更高提升。

4、Linux服务器硬盘的选择

Server硬盘在性能上的要求远高于台式机硬盘,这是受Server大数据量、高负荷、高速度等要求所决定的。Server一般采用SCSI接口,高端还有采用光钎通道接口的,极少的低端Server采用ATA硬盘,性能受很大影响。Server硬盘特点:

1)速度快(配备较大回写式缓存)

2)可靠性高

Server硬盘几乎是24小时工作的,除了采用家用硬盘具备的S.M.A.R.T(自检测、分析和报告技术),硬盘厂商都采用了各自独有的先进技术来保证数据的安全。

3)带宽大

大约10~50人同时随机访问的Server和工作站,建议采用SCSI硬盘。

5、Linux磁盘分区

安装Linux是每个初学者的第一个门槛。在这个过程中,最大的困惑莫过于给硬盘分区。

1)设备管理

在Linux中,每一个硬盘设备都映射到一个系统的文件,硬盘、光驱等IDE或SCSI设备也不例外。Linux把各种IDE设备分配了一个由hd前缀组成的文件;而对于各种SCSI设备,则分配了一个由sd前缀组成的文件。eg:第一个IDE设备=hda,第二个IDE设备=hdb,vice versa。

2)分区数量

要进行分区,就必须针对每一个硬件设备进行操作,这就有可能是一块IDE硬盘或一块SCSI硬盘。对于每一个硬盘设备,Linux分配了1~16的序列号码,代表了分区号码。eg:第一个IDE硬盘的第一个分区=hda1,第二个分区=hda2,vice versa。

3)各分区的作用

Linux中规定,每一个硬盘设备最多能由4个主分区(其中包含扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多4个。对于早期DOS和Windows,系统只承认一个主分区,可以通过在扩展分区增加逻辑盘符(逻辑分区)的方法,进一步细化分区。

主分区的作用是计算机用来启动操作系统的,因此每一个操作系统的启动,或者称作引导程序,都应该存放在主分区上。这就是主分区和扩展分区及逻辑分区的最大区别。我们在指定安装引导Linux的bootloader时,都要指定在主分区上,就是最好的证明。

Linux规定了主分区(或扩展分区)占用1~16号码中的前4个号码。以第一个IDE硬盘为例说明,主分区(或扩展分区)占用了hda1~4,而逻辑分区占用了hda5~16等12个号码。

对于逻辑分区,Linux规定它们必须建立在扩展分区上(DOS&Windows上也是如此),而不是主分区上。因此,我们可以看到扩展分区能够提供更加灵活的分区模式,但不能用来作为OS的引导。

4)分区指标

对于每一个Linux分区来讲,分区的大小类型是最主要的指标。分区的类型规定了这个分区上的文件系统的格式。Linux支持多文件系统格式,其中包含了我们熟悉的FAT32、FAT16、NTFS、HP-UX,以及各种Linux特有的Linux Native&Linux Swap分区类型。在Linux系统中,可以通过号码来区别这些不同类型的分区。

分区类型 分区类型
空白 00 Novell Netware 386 65
DOS 12-bit FAT 01 PIC/IX 75
XENIX root 02 Old Minix 80
XENIX usr 03 Linux/Minux 81
DOS 16-bit <=32M 04 Linux交换区 82
扩展 05 Linux Native 83
DOS 16-bit >=32M 06 Linux扩展 85
OS/2 HPFS 07 Amoeba 93
AIX 08 Amoeba BBt 94
AIX可引导 09 BSD/386 a5
OS/2引导管理器 0a OpenBSD a6
Win95 FAT32 0b NEXTSTEP a7
Win95 FAT32(LBA) 0c BSDI fs b7
Win95 FAT16(LBA) 0e BSDI swap b8
Win95 扩展(LBA) 0f Syrinx c7
Venix 80286 40 CP/M db
Novell 51 DOS access e1
Microport 52 DOS R/O e3
GNU HURD 63 DOS secondary f2
Novell Netware 286 64 BBT ff

5)磁盘分区与挂载点

与DOS/Windows很不一样的是,Linux在分区建立后,无法直接使用,也不会指定如C、D、E等驱动器,如果要使用此分区,则需要先通过挂载(Mount)程序,来与某一目录产生关联。eg:如果将dev/hda3挂载到/usr目录中,则表示/usr目录中的所有文件及目录都会实际保存在/dev/hda3分区上。另外,在已Mount的目录中,其下的子目录也允许再次Mount至其它分区,/dev/hda3已mount到/usr目录,但是/dev/hda5分区也可以mount到/usr/local目录。因此,/usr/local/man目录实际保存在/dev/hda5种。

6)Linux必须建立的分区

理论上,硬盘足够时可以建立任意数量的分区(挂载点),但除非在极为特殊的条件下,否则建议至少建立以下三个分区。

(1)swap

这是所谓的Virtual Memory,当物理内存无法提供足够的处理空间时,其余的数据就会暂时写入swap分区中,待物理内存可处理时再由swap中将数据移入。建议至少为物理内存的2倍。

(2)/boot

这个分区存放着OS的Kernel,用来启动Linux。建议32MB以上。

(3)/

这是整个OS的根目录,几乎所有的文件都位于此目录之下,因此它的容量越大越好。建议剩余的磁盘容量都给它。

6、磁盘操作相关命令

1)df

2)du

3)dd

4)fdisk

5)mount

6)umount

7)mkfs

8)mks.ext2

9)mkbootdisk

10)fsck

11)fsck.ext2

12)hdparm

13)mkswap

14)dump

15)restore

16)sync

17)e2label

18)badblock

19)quota

20)quotacheck

21)quotaoff

22)quotaon

23)quotastats

24)repquota

25)mdadm

26)parted

7、Linux磁盘操作实例

1)为Linux添加新硬盘

随着时间增长,Linux硬盘空间减少,有必要进行添加。

(1)物理准备工作

(#1)如果安装了其他驱动器,请确保电脑至少有一个剩余的驱动器托架,很多品牌台式机电脑只有一个驱动器托架并已使用,对于这些电脑而言,唯一的选择就是升级硬盘驱动器。

(#2)确保电脑中的主板支持所要安装的驱动器类型,兼容性最好的驱动器是IDE、Utra-IDE和串行ATA。

(#3)如果要向电脑添加其他硬盘驱动器,可能还需要升级电源。特别是如果还要添加如内存或CD或DVD驱动器等其他部件时。

(#4)如果向已安装有IDE驱动器的电脑添加IDE驱动器,则可能需一条有三个接口的IDE连接线。某些电脑使用的IDE连接线只有两个借口,一个用于主板连接,另一个连接到驱动器的后部。

(#5)如果要更换驱动器,请准备适用于你的电脑型号的恢复光盘。

(#6)准备一把十字螺丝刀和中等大小的平头螺丝刀。

(#7)强烈建议操作电脑时使用防静电腕带和导电泡沫垫。

(#8)在无地毯的地板上准备一个平稳的工作面。

(2)添加IDE或者SATA接口硬盘

(#1)注意IDE有关概念:一般的PC机上有两个IDE接口(硬盘排线插口),分为主和从(一般来讲,离CPU越近的应该是主的),从每个插口引出的排线上能够安排两个IDE设备(如硬盘和光驱等),主的两个设备叫hda(主),hdb(从);从的两个设备叫hdc(主),hdd(从)。

(#2)注意新添加硬盘的时候,不要随便动以前的硬盘接口,否则系统无法启动了。将硬盘挂在机器上以后,启动机器,能够进BIOS中去看看主板有没有认出你新加载的硬盘。

(#3)然后启动机器到Linux下面,使用命令:fdisk -l,能够看到刚刚安装上去的硬盘,下一步对硬盘进行分区和格式化。

todo

四、Linux进程及其管理命令(20130116)

1、Linux进程基础

1)进程的基本概念

进程是一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机程序。进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。了解进程的本质,对于理解、描述和设计操作系统有着极为重要的意义。了解进程的活动、状态,也有利于编制复杂程序。

2)进程的属性

一个进程是一个程序的一次执行的过程;程序是静态的,它是一些保存在磁盘上的可执行的代码和数据集合;进程是一个动态的概念,它是Linux系统的基本的调度单位;一个进程由如下元素组成:

#程序读取的上下文,它表示程序读取执行的状态。

#程序当前执行的目录。

#程序服务的文件和目录。

#程序访问的权限。

#内存和其他分配给进程的系统资源。

Linux进程中最知名的属性就是它的进程号(Process Idenity Number,PID)和它的父进程号(Parent Process ID,PPID)。PID、PPID都是非零正整数。一个PID唯一地标识一个进程。一个进程创建新进程称为创建了子进程(Child Process)。相反地,创建子进程的进程称为父进程。所有进程追溯其始祖最终会落到进程号为1的进程身上,这个进程叫做init进程,是内核自举后第一个启动的进程。init进程始终扮演父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些逝去了父进程的子进程就都会以init作为他们的父进程。如果执行一下ps-af命令,可以列出许多父进程ID为1的进程来。Linux提供了一条pstree命令,允许用户查看系统内正在运行的各个进程之间的继承关系。直接在命令行中输入pstree即可,程序会以树状结构方式列出系统中正在运行的各进程之间的继承关系。

3)理解Linux下进程的结构

Linux中一个进程在内存里有三部份数据,就是“数据段”、“堆数据”和“代码段”。基于I386兼容的中央处理器,都有上述三种段寄存器,以方便OS的运行。

代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。而数据段则存放程序的全局变量、常数及动态数据分配的数据空间。堆栈段存放的就是子程序的返回地址、子程序的参数及程序的局部变量。堆栈段包含在进程控制块PCB,Process Control Block中。PCB处于进程核心堆栈的底部,不需要额外分配空间。

4)进程状态

进程在生存周期中的各种状态及状态的转换。下面是Linux系统的进程状态哦性的各种状态。

#用户状态:进程在用户状态下运行的状态。

#内核状态:进程在内核状态下运行的状态。

#内存中就绪:进程没有执行,但处于就绪状态,只要内核调度它,就可以执行。

#内存中睡眠:进程中正在睡眠并且进程存储在内存中,没有被交换到SWAP设备。

#就绪且换出:进程处于就绪状态,但是必须把它换入内存,内存才能再次调度它运行。

#睡眠且换出:进程正在睡眠,且被换出内存。

#被抢先:进程从内核状态返回用户状态时,内核抢先于它做了上下文切换,调度了另一个进程。原先这个进程成就处于被抢先状态。

#创建状态:进程刚被创建。该进程存在,但既不是就绪状态,也不是睡眠状态。这个状态时除了进程0以外的所有进程的最初状态。

#僵死状态(zombie):进程调用exit结束,进程不再存在,但在进程表项中仍有记录,该记录可由父进程收集。

现在我们从进程的创建到退出来看看进程的状态转换。需要说明的是,进程在它的生命周期中并不需要经历所有状态。

5)Linux进程的创建

fork函数在Linux下产生新的进程的系统调用,这个函数名是英文中“分叉”的意思。为什么取这个名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就“分叉”了,所以这个名字取得很形象。fork语法如下:

#include 
#include 
pid_t fork();

在Linux网络编程中经常用到fork()系统调用。例如在一个客户及/Web服务器构建的网络环境中,Web服务器往往可以满足许多客户端的请求。如果一个客户机要访问Web服务器,需要先发送一个请求,此时由服务器生成一个父进程,然后父进程通过fork()系统调用产生一个子进程,此时客户机的请求由子进程完成。父进程可以再度回到等待状态不断处理服务其它客户端。

有一个更简单的执行其它程序的函数system,参数string传递给一个命令解释器(一般为sh)执行,即string被解释为一条命令,由sh执行该命令。若参数string为一个空指针,则检查命令解释器是否存在。该命令可以和同命令行下的命令形式相同,但由于命令作为一个参数放在系统调用中,应注意编译时对特殊意义字符的处理。命令的查找是按PATH环境变量的定义执行的。命令所生成的后果一般不会对父进程编程造成影响。返回值:当参数为空指针时,只有当命令解释器有效时返回值为非零。若参数不为空指针,返回值为该命令的返回状态(同waitpid())的返回值。命令无效或语法错误则返回非零值,所执行的命令被终止。其它情况则返回-1。它是一个较高层的函数,实际上相当于在Shell下执行一条命令,除了system之外,系统调用exec来执行一个可执行文件,来代替当前进程的执行映像。系统调用exit的功能是终止发出调用的进程。sleep函数调用用来指定进程挂起的秒数。wait函数用来等待和控制进程。poppen函数和system函数类似,区别是它用管道方式处理输出。

父进程和子进程的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止。但子进程终止时,父进程并不一定终止。比如httpd服务器运行时,我们可以杀掉其子进程,父进程并不因为子进程的终止而终止。

6)进程的管理

(1)启动进程

输入需要运行的程序的程序名,回车执行,其实也是启动了一个进程。在Linux系统中,每个进程都具有一个进程号(PID),用于系统识别和调度进程。启动一个进程又两个主要途径:手工启动和调度启动,后者是事先进行设置,根据用户要求自行启动。由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程类型不同、性质不同,实际结果也不一样。

(#1)前台启动

前台启动是手工启动一个进程的最常用的方式。用户键入一个命令“df”,就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经处于多进程状态。有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。有的用户在键入“df“命令后赶紧是用”ps -x“查看,却没有看到df进程,会觉得很奇怪。其实这是因为df这个进程结束太快,是用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程,例如在根命令下运行:find,然后是用ps aux查看,就会看到在里面有一个find进程。

(#2)后台启动

直接从后台手工启动一个进程用的比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果。假设用户要启动一个需要长时间运行的格式化文本文件的进程,为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。

(2)进程调度

当需要中断一个前台进程的时候,通常使用Ctrl-C组合键。但是对于一个后台进程,就不是一个组合键所能解决的了,这时就必须使用kill命令。该命令可以终止后台进程。至于终止后台进程的原因有很多,或许是该进程占用CPU时间过多;或许是该进程已经挂死。这种情况是经常发生的。kill命令的工作原理是:向Linux系统的内核发送一个OS信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。

7)Linux的第一个进程:init

init是Linux执行的第一个进程,进程ID为1,是系统所有进程的起点,主要用来执行一些开机初始化脚本和监视进程。Linux系统在完成内核引导以后就开始运行init程序,init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它由若干行命令组成。

你可能感兴趣的:(Linux)