赞
踩
它们分别表示2的10次方(1,024),2的20次方(1,048,576),2的40次方(1,099,511,627,776)。而G则表示2的30次方(1,073,741,824)。
而大写字母“B”,则是“Byte(s)”的缩写。“Byte”的汉语译词一般为“字节”。一个字节即由2的3次方即8个(几乎一定是连续的)Bit(s)组成。“Bit”的汉语译词一般为“位元”或“位”或“比特”。位元是计算机系统可以存放或传输信息的最小单位:在一个位元中,要么存放一个0,要么存放一个1。“Bit”的缩写形式,一般是小写字母“b”。
但在业界,衡量硬盘之类的存储设备,通常所用到的K、M、G、T则分别指代10的3次方(1,000)、10的6次方(1,000,000)、10的9次方(1,000,000,000)、10的12次方(1,000,000,000,000)。为了与以2作为底数的计数方法下的K、M、G、T区别看来,后者也经常被写作Ki、Mi、Gi、Ti —— 这里的小写字母i代表了“Binary”。
回到“Partition Editor”,这里的硬盘容量若是显示“GB”,其实指的是“GiB”。所以,如果你购置了一块标称容量为1TB的硬盘装在电脑里的话,那么此时可能会显示为900多GB。
接着,在“Partition Editor”界面中,用左右方向键选择<Create>来创建一个分区。我们选择“GPT”,<OK>后程序告诉我们已经成功为这一块物理硬盘建立了GPT。其实,这一步并不是创建分区,而是创建了一个Partition Scheme,只是因为当前连一个分区也没有,所以选择<Create>之后首先要创建一个 Scheme。
这时,在物理硬盘容量的右边,又跟着显示了“GPT”,说明前述操作生效。如果要“反悔”上一步操作,那么就用左右方向键选择<Revert>。
现在,我们再选择<Create>,就可以正式地创建分区了。
在“Add Partition”界面中,我们看到有四项指标,分别是:
Type、Size、Mountpoint、Label。
关于Type,在 GPT的背景下,我们只有三种types可以选择:
freebsd-boot、freebsd-ufs、freebsd-swap。
“boot”是“Bootstraps”(拔靴带)的缩略,因为“Bootstraps”一词有“依靠自己力量”的引申义,所以“Boot”就是指电脑启动的过程 注4 。具体地说,以PC上经典的MBR体系为例,通常的Boot的过程是:
PC通电开机,PC上固有的BIOS(基本输入输出系统)对PC的硬件进行POST(Power On Self Test),之后,BIOS在第一块物理硬盘上寻找它上面的最外磁道(Track)上的第一个扇区(Sector),这个扇区被称为MBR(Master Boot Record,主引导记录)。对于硬盘来说,一个扇区的大小为512 Bytes。所以,MBR的大小恒定为512 Bytes。在这512B的空间中,开头的446B被规定为Bootstrap(有“启动代码”与“启动程序”两种翻译,但有的地方把“Boot Loader”也翻译为“启动程序”,汉语学界的翻译显得十分混乱,所以,最好的办法,还是遵守英语原文用法),随后的64B被规定为Partition Table(分区表),最后的2B为结束标志(被规定为“55AA”)。
一般说来,为/boot、/home、/tmp、/var、/usr这五个分支目录设置独立的分区,缘由是这样的:
/boot 前面已经说过了,为这个目录设置独立的分区,主要是为了规避x86架构下有“第1024 Cylinder 限制”。
/home 这里存放着属于用户自己的文件。对于一个具有实用的面向多用户的系统(比如为多用户服务的在线服务器)来说,这个目录是最主要的工作空间,也是最耗费硬盘资源的区域,所以,非常有必要为此目录设置独立的分区,甚至为其配备独立的物理硬盘或磁盘阵列。然而,对于那些具有另外特殊用途的系统(比如Router(路由器))来说,这个目录却是几乎是无用的。
/tmp 由于这里存放着临时文件,且其中的数据访问权限是完全开放的,所以就有必要为其设置独立的分区,从而避免某些心怀恶意的使用者往其中充塞大量垃圾数据以至于侵扰系统上其他部分的合法资源。
/var 正如这个目录的名字(Variable)所揭示的,这里存放的数据富于变化性,这些数据包括了诸如Log(日志)之类的文件。与为/tmp设置独立分区的理由类似,一旦自动轮替机制(最新的信息会覆盖掉最旧的信息)失效,独立分区的方案可以避免大量的数据挤占系统上其他部分的合法资源。
/usr 前面我们看到,这个目录的结构与根目录的结构非常类似,可谓是一个“小根目录”,所以它的结构与内容也颇为庞杂,且耗费的硬盘资源也是相当可观的,并且它里面的内容可以是Read-Only(只读不写)的,所以,我们有非常充分的理由,为它设置独立的分区(甚至可以用只读模式来挂载它)。
下面,给出一个分配硬盘资源并设置分区与挂载点的例子,供学员们参考。
还是假设有两块物理硬盘,第一块是SATA的,容量是400GB,第二块是SCSI的,容量是800GB,再假设电脑内存容量是8GB。
/dev/ada0p1 freebsd-boot /boot 512MB(FreeBSD推荐的为64KB的boot设置)
/dev/ada0p2 freebsd-ufs / 40GB
/dev/ada0p3 freebsd-ufs /usr 359.5GB
/dev/da0p1 freebsd-ufs /tmp 16GB
/dev/da0p2 freebsd-ufs /var 200GB
/dev/da0p3 freebsd-ufs /home 560GB(如果系统上用户不多,可以适当缩减此项配额,转而扩大/var所在的分区规模)
/dev/da0p4 freebsd-swap swap 24GB
※ 这里出现的路径“/dev/”表示:分区都是以“/dev/”目录下的文件形式存在于系统之中的 —— 这一点,在“Partition Editor”阶段并不会显明,但以后我们会体会到这一点。
学员可以根据自己的电脑的实际情况以及自己的具体需求,设置分区与挂载点。
在设置过程中,若出现错误,想“反悔”时,可以用<Revert>回滚。
若想调整、补充已经设置好的内容,可以用<Modify>。
对于Boot分区(freebsd-boot)与Swap Space(freebsd-swap),挂载点都不必填写。
顺便说一句,其实,UNIX-like系统的分区与挂载点设置,一点都不难,跟屌丝们在Microsoft Windows里配置他们电脑的道理是一样的,比如说,如果屌丝们的电脑上挂有两块硬盘,一块较小一块很大,较小的那块硬盘设两个分区:C盘装系统,D盘安放应用程序(软件);很大的那块硬盘也设两个分区:E盘存放自己的普通文档,而F盘则非常非常大,且目录层次也异常庞杂,用来存放长年日以继夜下载得来并严选珍存的“A片”…… 屌丝们把捣鼓自己Windows下的硬盘资源的那种废寝忘食的劲头,分一些些在学习UNIX-like上,那也足够让自己脱屌了!
当一切确认无误之后,选择<Finish>,设置将会生效,且硬盘将进入准备格式化阶段。在接下来的“Confirmation”对话框中,程序给出“data will be PERMANENTLY ERASED”(硬盘数据将被永久抹除)的警告,选择<Commit>进行确认。
只要你对于上述每一步操作都认真仔细地完成(并检查确认)了,那么,接下来,你就可以松一口气了,FreeBSD系统进入自动安装阶段。
这一阶段的安装结束之后,进入设置系统基本信息阶段,此时,画面回到单色的TUI界面,要求你设置root密码 —— root是整个系统的最高级管理员。
接着又进入“Network Configuration(网络配置)”界面,此时,会显示出系统所寻找到的网络适配器(一般就是俗称“网卡”),如果仅有一个适配器,就直接按<Ok>进入下一步,如果适配器不止一个,则要逐个配置。
接下来出现的对话框,是询问用户是否要为选定的适配器设置IPv4和DHCP,可以直接按<Yes>让系统自行继续。之后则是IPv6,这个可以暂时忽略选择<No>。
之后,会出现IPv4 DNS的设置,这跟Microsoft Windows中关于网络适配器的TCP/IP设置很类似,一般就使用你的路由器的IP地址,比如就是系统自动获取到的192.168.1.1等。
接下来,是“Select local or UTC clock”的对话框,对于中国学员,可以选<No>继续。之后,选择国家或地区(比如Asia->China或Hong Kong或Taiwan)。
而后,进入“System Configuration”界面,这里需要你选择需要开启的系统服务,一般地,用空格键全部选中,然后按<Ok>。接着,进入“Dumpdev Configuration”对话框,这里提示该项功能会透过/var目录耗用大量磁盘空间,如果满足这个条件,就可以按<Yes>继续。
接下来,进入“Add User Accounts”界面,强烈建议你选<Yes>为系统增加新的用户 —— 在UNIX-like的使用过程中,要尽量避免使用root账户来进行日常的一般性操作,应该代之以普通用户的身份行事。
此时,应该根据提示,逐项输入信息。
最后,进入“Final Configuration”界面,可以直接选定Exit结束整个安装过程,但之后又会有提示“Manual Configuration”即系统可以提供一个Shell界面让用户可以手动配置系统,我们选<Yes>。
此时,我们就正式进入了最具UNIX-like本色的操作环境 —— Shell!
下面,我们要开始学习关于Shell以及CLI的一些基本知识,并藉着这样的途径,开始进一步(但仍然是初阶地)了解UNIX-like系统。
我们使用电脑,无非是向电脑(系统)表达我们的意图 —— 这种意图的表达,是以Command(命令)方式存在的,而命令则是以Text(文本,即由键盘输入的信息,与利用鼠标进行点击、拖拽等的图形界面相对)形式存在的,然后,我们期待电脑就我们的命令做出相应的反馈。
我们希望向电脑表达的意图,通常是这样的:
I want you(指电脑) to get/do/make/take something in some way.
在所有的这样的意图表述中,“I want you”这个部分是雷同的,所以,就可以省略它。那么,上面的语句就可以表达为:
To get/do/make/take something in some way.
在自然语言的语法看来,“To get/do/make/take”是谓语动词,所以,我们将它统合地概念化为:
V
而“something”是V的Object(对象,宾语),所以,我们将它概念化为:
O
因此, “To get/do/make/take something”就可以概念化为:
V(O)
而最后的“in some way”则是表达了进行V(O)所须要遵从的法则、方法、依据(Argument),所以,我们将它概念化为:
A
那么,“To get/do/make/take something in some way.”就可以概念化为:
V(O,A)
或
V(A,O)
我们将O与A放在V所作用的同一对括号中,暗示着:在V看来,O和A的概念可以彼此交换(混同),也就是说,对于某些场景,在V看来,A也可以被当作O,反之亦然。
举个例子:我们希望系统将当前目录的上一级目录中的文件foo.bar复制到当前目录来,自然语言的表达是:
To copy the file which name is “foo.bar “ and which is in the parent directory from there to the current directory.
按照V(O,A)的概念范式,这里的V是“copy”,O是“the file which name is “foo.bar “ and which is in the parent directory”,A则是“from there to the current directory”。
在UNIX-like命令体系中:
V是“cp”。
O则用“../foo.bar”表达 —— 其中的“../”表示“the parent directory(当前目录的上一级目录)”。
A则用“./”表达 —— 其中的“./”表示“the current directory(当前目录)”。
于是,整个意图用命令表达就是:
cp ../foo.bar ./
我们注意到,原本意图中的“from there to...”这个部分,藉由“将A放置在O后面”这个“语序”被表达了。也就是说,在命令中,概念O在表达时,向V指明了它的行动(具体指copy动作)的源头(Source),而概念A在表达时,向V指明了它的行动的目的地(Destination)。
在里的“源头”不仅是行动对象的所处的位置,更是行动对象本身,类似地,这里的“目的地”也不仅可以是行动的目的位置,也可以是行动的结果本身。所以,我们若将上述命令中的“./”用“./foo.bar”代替,效果是一样的 —— 请记住:效果一样的两种实现,我们(命令的设计者)自然会“更加喜欢”最简单的表达方式。
既然可以在概念A中有“./foo.bar”这样的表达,我们完全可以有这样的表达:
cp ../foo.bar ./foo.baz
cp -i ../foo.bar ./
cp ../foo.bar ./ -i
cp -i -f ../fobar ./
cp -f -i ../fobar ./
cp -f -i -f ../fobar ./
cp -i -f -i ../fobar ./
cp -f ../fobar ./
cp -i ../fobar ./
cp -fffffiiiiiiffifiifffiiiii ../fobar ./
clear
ls
ls -a
ls -A
ls -l
drwxr-xr-x 7 root wheel 1024 Jan 3 2012 boot
rwxr-xr—
chmod
chmod go-w,a+x foo.bar
chmod go= foo.bar
我们回到ls命令来 ——
ls foo
ls foo*
echo $SHELL
/bin/csh
diff /bin/csh /bin/tcsh
echo 123
123
echo 1+2
1+2
echo SHELL
SHELL
echo Foo_{A,b,C,d}
Foo_A Foo_b Foo_C Foo_d
1218
1218: Command not found.
env
HOME=/root
cd ~
pwd
echo I love $OSTYPE!
I love FreeBSD!
./foo
setenv VARNAME value
export VARNAME=”value”
setenv PATH $PATH\:$HOME
$SHELL
echo \$SHELL
setenv PATH ${PATH}:$HOME
mkdir
rm
mv
shutdown
shutdown -r now
ls foo*
ls foo0 foo1 foo2 foo3 …… foo9998 foo9999
ls | grep "^foo.*"
w
USER TTY FROM LOGIN@ IDLE WHAT
root v0 - 3:31PM 2 -csh (csh)
ls -l /dev/tty*
ls > /dev/ttyv3
(foo > bar) >& qux
foo > bar
foo 1> bar
foo 2> qux
所以,我们要引入一个新的范式:
STDIN-PROG-STDOUT(-STDERR)
简写作:
I-P-O(-E)
这个范式跟之前(关于用户与系统之间关系)的V(O,A)范式不同,它是用来概念化为PROGrams(程序)与Shell为其所提供的标准I/O环境及其要素的。在每个要素之间,川行的是数据流,数据流透过Stdio句柄被接纳或释出。
现在,我们考虑一个问题:既然程序可以由Shell为其创建的stdin(源头通常是键盘)来获取输入信息(流),那么,是否可以选择其他的信息输入源头呢?比如bar程序不再从用户的键盘获取输入信息,而是以foo的输出作为自己的输入源头,即:foo程序的stdout流与bar程序的stdin流“对接”(信息如水流自上而下地行进)?这样的“对接”完全是可以实现的,那就是利用Shell提供的“管道”机制!命令的形式如下:
foo | bar
ls | grep "^foo.*"
bar1
bar2
bar3
……
bar9998
bar9999
foo1
foo2
foo3
……
foo9998
foo9999
ls | less
whereis zsh
zsh: /usr/ports/shells/zsh
whereis tcsh
tcsh: /bin/tcsh /usr/share/man/man1/tcsh.1.gz
tar zxvf foo.tar.gz
./configure
make
make install
make clean
make install clean
===> Cleaning for zsh-4.3.14
rehash
whereis zsh
/usr/local/man/man1/zsh.1.gz
man 1 zsh
man 1 printf
man 3 printf
chsh
:q! √
chsh
:set number√
10G
c目的地
c$
bin/cs$
/Shell.*csh√
:s/bin.*$/usr\/local\/bin\/zsh√
:区域s/模板/被匹配的字符串将被更新为什么/参数√
:w√
:w! √
:wq√
:wq! √
exit
echo $SHELL
不过 …… 你会觉得,这个zsh跟原来的tcsh根本没有什么区别嘛……
的确是的,目前的Shell的Prompt(提示符,就是提示用户可以输入命令的特殊符号,由Shell提供)仍然是“主机名”加一个“#”(如果是root账户登录,就是“#”,此外就是“$”)。
现在我们掌握了vi的基本用法,就可以Customize(由客户定制)自己的zsh了。
我们进入自己的家目录,使用命令:
cd ~
vi .zshrc
ls | grep "^foo.*"
只要一行命令哦:
grep "^\s*136[0-9]{8}\s*[DISCUZ_CODE_106]quot; * -rho | sed 's/[^0-9]//g' | sort -nr | uniq -c | wc -l | sed 'i\Qty of 136-numbers:' | tee stat.txt
cd /usr/ports/editors/vim/
make install clean
如同给zsh配备初始化脚本(一个dot file)一样,我们也需在Vim安装完成之后,为其配备初始化脚本,这样的脚本,在系统中已经有现成的了,我们直接使用命令copy到当前用户的家目录即可:
cp /usr/local/share/vim/vim73/vimrc_example.vim ~/.vimrc
此后,使用命令:
vim foo.txt
就可以打开Vim,编辑你所需要的文件了。你将会发现,Vim比vi要好用得多。
:split 文件名
:vsplit 文件名
:qall
:only
; Verse 1
org 0x7c00
; Verse 2
mov ax, cs
mov ds, ax
mov es, ax
call PrintStr
jmp fin
; Verse 3
fin:
hlt
jmp fin
; Verse 4
PrintStr:
mov bp, MyBoot
mov cx, 80
mov ax, 0x1301
mov bh, 0x00
mov bl, 0x09
mov dl, 35
mov dh, 12
int 0x10
jmp fin
ret
; Verse 5
MyBoot:
db "Just A Tiny Tiny Boot!"
times 510-($-$) db 0
dw 0xaa55
nasm 源程序名 -o 二进文件名
mount -t msdosfs /dev/da0 /media
umount /media
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。