出于需要Drupal这个东东,第一次尝试在ubuntu中搭建Apache+PHP+MySQL的的环境,回过头来看虽然就那么几句命令,不过还是遇到了一些小问题,问题主要是在安装配置Drupal的时候自检提示缺少组件什么的,还好都顺利解决了,记下来方便以后用。 阅读全文>>
我从[我的笔记本]中划了60个G装上了ubuntu9.10,除了无线网卡认不出来以外其他一切正常,只能自己找驱动装了。网卡是11b/g/n Wireless LAN Mini-PCI Express Adapter II,这块网卡还蛮BT的BT3(破解无线密码那个)也在这块卡上用不成,郁闷。
驱动地址:http://launchpadlibrarian.net/33927923/rtl8192se_linux_2.6.0010.1012.2009.tar.gz
这个得自己编译再安装。解压后在命令行下切到该驱动文件夹下执行make进行编译,一切顺利,执行sudo make install进行安装的时候报错了,
No rule to make target `kernel/bounds.c’, needed by `kernel/bounds.s’. Stop.
晕倒…
还好又找到了另一安装方法:
1.将HAL/rtl8192/r8192se_pci.ko文件复制到/lib/modules/2.6.31-14-generic/kernel/net/wireless
2.复制firmware下的RTL8192SE文件夹到/lib/firmware/下
3.执行命令sudo depmod -a
4.执行命令sudo modprobe r8192se_pci
现在看看,无线指示灯亮了。
哎~本来都已经决定好了今后就用[UBUNTU] 了,为了方便还专门在UBUNTU上用VirtualBox装好了个XP。没想到的是VirtualBox中的那个XP装着装着竟提示空间不足了…用了3天左右的UBUNTU吧,感觉真的是相当爽!可惜啊,可惜啊…谁让现在N多的软件都是运行在Windows上呢?而且大家都用习惯了,UBUNTU中我又没法用VS2005搞.NET开发还有等等一系列的问题接踵而来。
我在想,他微软不是在打击盗版么?一个正版不是很贵么?不是人人都喜欢免费的东西么?那干嘛不联合起来,软件开发商和使用者大家都搬迁到LINUX平台上去呢?岂不是对谁都好,当然微软例外,让他一边凉快着去!可是,我这也只能纯属YY一下了。
这不,我又把系统装成Windows 2003 Server版的了,UBUNTU看来又得回到我的虚拟机里面去了。哎~那个在[拥抱UBUNTU] 中留言的salors同学,我真的很佩服你,竟然坚持了俩月…您问我“看看你能坚持多久”,现在我可以回答你了,答:“3天!”
苍天啊!大地啊!我什么时候才能好好的用用LINUX啊?
PS:貌似被微软打败的不止我一个。
即上次在虚拟机里面[安装ubuntu]之后, 昨天突然不想在虚拟机里面玩UBUNTU了,于是傻乎乎的又跑到UBUNTU官方网站去下载ISO包。下载到10%左右的时候,突然想起来这个包我不是已经下载过了嘛,装虚拟机的时候不就用了嘛,又花时间去下载那个600M多的安装包干吗?

往虚拟机里面装好装,直接在虚拟机里面加载ISO安装包,就像用光盘在光驱上安装Windows一样。但是,现在我是要从硬盘给真实的机子安装UBUNTU,虽说UBUNTU的光盘是可以免费索取的,不过感觉太麻烦,还要等好长时间他给你邮寄过来。从硬盘安装Windows我倒是熟悉的不得了,为了避免造成无必要的严重后果,经过百度一番,看了N+1个硬盘安装UBUNTU的文章,几乎说法不一,不过看了这么多倒也对此了解了不少了,于是乎开工了~
没想到安装是那么的顺利,安装过程中几乎没有要让手工设置的地方(可能是安装方法有问题,我记得在虚拟机中安装的时候还要动手设置的),而且整个系统从安装到完成也就10分钟左右,远比安装Windows快多了。
安装完后重启,接下来是一个类似Windows启动时候的滚动条,滚动条满了之后就要求输入用户名和密码,最后进入桌面,感觉很爽阿~看图:


修改了网络连接属性以便上网,不一会系统就提示有更新包需要下载安装,直接按照提示安装好了。然后登上TX的网站下载了Linux版的QQ,结果没想到Linux版的QQ不光体积较小、无广告而且登录也神速。接着花了几个小时熟悉了一下环境,安装了SCIM的拼音输入法,给系统默认的Firefox浏览器安装了中文语言包以及几个扩展插件,安装了一些必要的音频视频解码器,在你打开某个无法打开的文件时系统会提示你去下载安装程序,你所需要做的就是点安装,至于从哪下载、版本什么的都不需要你去考虑(甚至包括各种硬件驱动程序),为了能让UBUNTU发出声音了花了我不少时间,结果发现原来解决方法无非就是动动鼠标选几个选项。
加上昨天一个下午的使用,现在基本上已经熟悉这个操作系统了。感觉实在是太爽了,运行速度很快很流畅,如果出现程序没法关闭你可以直接KILL掉。要不是因为现在多数主流程序都跑在Windows上,我真想立刻彻底和Windows告别。
现在正在琢磨着在UBUNTU里面用VirtualBox OSE虚拟机来安装一个XP,嘿嘿~以后只有在用Widnows的时候我才用在虚拟机里面用它,其他时候都用UBUNTU。
Linux系统管理命令
wall命令
功能:这个命令的功能是对全部已登录的用户发送信息,用户可以先把要发送的信息写好存入一个文件中,然后输入:
# wall < 文件名
这样就能对所有的用户发送信息了。
在上面的例子中符号“<”表示输入重定向,有关它的含义和用法请参阅第十章的有关内容。 例如:
# wall ‘Thank you!’
Broadcast message from root (tty1) Fri Nov 26 14:15:07 1999…
Thank you!
#
执行以上命令后,用户的屏幕上显示出“Thank you!”信息后,并不出现系统提示符$(#),再次按回车键后,屏幕出现系统提示符。
write命令
功能:write命令的功能是向系统中某一个用户发送信息。
格式:write 用户帐号 [终端名称]
例如: $ write xxq hello
此时系统进入发送信息状态,用户可以输入要发送的信息,输入完毕,希望退出发送状态时,按组合键< Ctrl+c>即可。
上述命令执行的结果是,用户xxq的屏幕上会显示:
message from test@test.tlc.com.cn tty1 at 15:51…
hello
EOF
mesg指令
mesg命令设定是否允许其他用户用write命令给自己发送信息。如果允许别人给自己发送信息,输入命令:
# mesg y
否则,输入:
# mesg n
对于超级用户,系统的默认值为 n;而对于一般用户系统的默认值为y。 如果mesg后不带任何参数,则显示当前的状态是y还是n,如:
$ mesg is
y
或:
# mesg is
n
sync命令
功能:sync命令是在关闭Linux系统时使用的。 用户需要注意的是,不能用简单的关闭电源的方法关闭系统,因为Linux象其他Unix系统一样,在内存中缓存了许多数据,在关闭系统时需要进行内存数据与硬盘数据的同步校验,保证硬盘数据在关闭系统时是最新的,只有这样才能确保数据不会丢失。一般正常的关闭系统的过程是自动进行这些工作的,在系统运行过程中也会定时做这些工作,不需要用户干预。 sync命令是强制把内存中的数据写回硬盘,以免数据的丢失。用户可以在需要的时候使用此命令。
格式: sync
shutdown命令
功能:shutdown 命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。精确时间的格式是hh:mm,表示小时和分钟;时间段由“+”和分钟数表示。系统执行该命令后,会自动进行数据同步的工作。
格式:shutdown [选项] [时间] [警告信息]
参数:
- k 并不真正关机,而只是发出警告信息给所有用户。
- r 关机后立即重新启动。
- h 关机后不重新启动。
- f 快速关机,重启动时跳过fsck。
- n 快速关机,不经过init程序。
- c 取消一个已经运行的shutdown。
需要特别说明的是,该命令只能由超级用户使用。
例1:系统在十分钟后关机,并且马上重新启动。
# shutdown – r +10
例2:系统马上关机,并且不重新启动。
# shutdown – h now
free命令
功能:free命令的功能是查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。
格式: free [-b | -k | -m]
参数:
-b 以字节为单位显示。
-k 以K字节为单位显示。
-m 以兆字节为单位显示。
例:
$ free
total used free shared buffers cached
Mem: 63076 32020 31056 8204 16360 6048
-/+ buffers/cache: 9612 53464
Swap: 64476 2240 62236
uptime命令
功能:uptime命令显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
格式: uptime
例:
# uptime
4:43pm up 1 day, 5:51, 2 user, load average: 0.01, 0.01, 0.00
VI的使用
相信用过Linux的朋友一定不会对vi陌生吧,它是Linux环境中使用最为普遍的全屏幕编文本辑器。但由于我们一般用户最初接触的都是微软的产品,它和DOS下的EDIT和Windows下的记事本的使用方法不尽相似,所以另初学Linux朋友觉得vi很难用,甚至无从下手,下面我就向大家介绍vi的使用方法。
首先需要说明的是,vi分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作命令来处理,如:q代表退出,而编辑状态则是用来输入文字资料的。当你进入vi时,会首先进入命令状态。现在对vi也有了基本的认识,如果你有兴趣请接着往向看。
要进入vi,直接在系统提示符下键入vi <文件名>,当你键入的文件名是已有文件时,则系统自动打开此文件,否则将建立一个新文件。这时你将会看到屏幕左边会出现波浪线~,这就代表该行是空的,没有任何文字,这时系统正在命令状态,怎样切换到编辑状态输入文字呢?按键盘上的Insert键即可,这时我们就可以像使用其它的编辑器一样进行文字的编辑了,功能键也和其它编辑器差不多,下面就是一些功能键的说明,是不是很简单?
===========================================================
说明 功能键
===========================================================
移动光标到所在行的最前面 Home
移动光标到所在行的最后面 End
向下翻一页 Page Down
向上翻一页 Page Up
删除光标所在位置字符 Delete
删除光标所在位置前面的字符 Backspace
移动光标 ←↑↓→
===========================================================
另外,vi还支持粘贴与复制,不过用键盘来做实在很麻烦,现在哪台电脑没有鼠标呢?和Windows中一样,从你要复制的开始位置拖动鼠标到结束位置,这块区域就反白了,再将光标移到你要粘贴的位置,按鼠标中键即可完成粘贴(如果你的鼠标是两个键的,同时按左右键即可模拟三键鼠标的中键),这比Windos里方便吧。也许有的朋友会问,如何进行查找呢?下面我们按键盘上的Esc键切换到命令状态,输入“?<你要查找的字符串>”(不带引号)就执行向下查找操作,而“/<你要查找的字符串>”表示向上查找,键盘上的n表示重复一次,而N表示反方向重复一次。
说了半天,可能你的文件已经编辑完成了,但如何存盘呢?现在我们还是保持在命令状态,按:w按后回车即完成了存盘工作,而退出vi返回到Linux的命令是:q,这两个命令也可以组合使用,如:wq代表存盘退出。
好了,说了半天,可能你的头已经大了,上面讲到的那些只是vi中最常用的功能,至于其它的功能你可以在使用中慢慢体会。顺便说一句,不要强记那些命令,它们看起来多而毫无规律,多用几次自然就熟练了,现在我觉得比Windows中的记事本方便多了
Linux启动过程综述 作者:杨沙洲
内容:
一. Bootloader
二.Kernel引导入口
三.核心数据结构初始化–内核引导第一部分
四.外设初始化–内核引导第二部分
五.init进程和inittab引导指令
六.rc启动脚本
七.getty和login
八.bash
附:XDM方式登录 作者:杨沙洲
本文以Redhat 6.0 Linux 2.2.19 for Alpha/AXP为平台,描述了从开机到登录的 Linux 启动全过程。该文对i386平台同样适用。
一. Bootloader
在Alpha/AXP平台上引导Linux通常有两种方法,一种是由MILO及其他类似的引导程序引 导,另一种是由Firmware直接引导。MILO功能与i386平台的LILO相近,但内置有基本的磁盘 驱动程序(如IDE、SCSI等),以及常见的文件系统驱动程序(如ext2,iso9660等), firmware有ARC、SRM两种形式,ARC具有类BIOS界面,甚至还有多重引导的设置;而SRM则具 有功能强大的命令行界面,用户可以在控制台上使用boot等命令引导系统。ARC有分区 (Partition)的概念,因此可以访问到分区的首扇区;而SRM只能将控制转给磁盘的首扇区。 两种firmware都可以通过引导MILO来引导Linux,也可以直接引导Linux的引导代码。
“arch/alpha/boot”下就是制作Linux Bootloader的文件。“head.S”文件提供了对 OSF PAL/1的调用入口,它将被编译后置于引导扇区(ARC的分区首扇区或SRM的磁盘0扇区), 得到控制后初始化一些数据结构,再将控制转给“main.c”中的start_kernel(), start_kernel()向控制台输出一些提示,调用pal_init()初始化PAL代码,调用openboot() 打开引导设备(通过读取Firmware环境),调用load()将核心代码加载到START_ADDR(见 “include/asm-alpha/system.h”),再将Firmware中的核心引导参数加载到ZERO_PAGE(0) 中,最后调用runkernel()将控制转给0×100000的kernel,bootloader部分结束。
“arch/alpha/boot/bootp.c”以“main.c”为基础,可代替“main.c”与“head.S” 生成用于BOOTP协议网络引导的Bootloader。
Bootloader中使用的所有“srm_”函数在“arch/alpha/lib/”中定义。
以上这种Boot方式是一种最简单的方式,即不需其他工具就能引导Kernel,前提是按照 Makefile的指导,生成bootimage文件,内含以上提到的bootloader以及vmlinux,然后将 bootimage写入自磁盘引导扇区始的位置中。
当采用MILO这样的引导程序来引导Linux时,不需要上面所说的Bootloader,而只需要 vmlinux或vmlinux.gz,引导程序会主动解压加载内核到0×1000(小内核)或0×100000(大 内核),并直接进入内核引导部分,即本文的第二节。
对于I386平台
i386系统中一般都有BIOS做最初的引导工作,那就是将四个主分区表中的第一个可引导 分区的第一个扇区加载到实模式地址0x7c00上,然后将控制转交给它。
在“arch/i386/boot”目录下,bootsect.S是生成引导扇区的汇编源码,它首先将自己 拷贝到0×90000上,然后将紧接其后的setup部分(第二扇区)拷贝到0×90200,将真正的内核 代码拷贝到0×100000。以上这些拷贝动作都是以bootsect.S、setup.S以及vmlinux在磁盘上 连续存放为前提的,也就是说,我们的bzImage文件或者zImage文件是按照bootsect,setup, vmlinux这样的顺序组织,并存放于始于引导分区的首扇区的连续磁盘扇区之中。
bootsect.S完成加载动作后,就直接跳转到0×90200,这里正是setup.S的程序入口。 setup.S的主要功能就是将系统参数(包括内存、磁盘等,由BIOS返回)拷贝到 0×90000-0x901FF内存中,这个地方正是bootsect.S存放的地方,这时它将被系统参数覆盖。 以后这些参数将由保护模式下的代码来读取。
除此之外,setup.S还将video.S中的代码包含进来,检测和设置显示器和显示模式。最 后,setup.S将系统转换到保护模式,并跳转到0×100000(对于bzImage格式的大内核是 0×100000,对于zImage格式的是0×1000)的内核引导代码,Bootloader过程结束。
对于2.4.x版内核
没有什么变化。
二.Kernel引导入口
在arch/alpha/vmlinux.lds的链接脚本控制下,链接程序将vmlinux的入口置于 "arch/alpha/kernel/head.S"中的__start上,因此当Bootloader跳转到0×100000时, __start处的代码开始执行。__start的代码很简单,只需要设置一下全局变量,然后就跳转 到start_kernel去了。start_kernel()是"init/main.c"中的asmlinkage函数,至此,启 动过程转入体系结构无关的通用C代码中。
对于I386平台
在i386体系结构中,因为i386本身的问题,在"arch/alpha/kernel/head.S"中需要更多的设置,但最终也是通过call SYMBOL_NAME(start_kernel)转到start_kernel()这个体系结构无关的函数中去执行了。
所不同的是,在i386系统中,当内核以bzImage的形式压缩,即大内核方式 (__BIG_KERNEL__)压缩时就需要预先处理bootsect.S和setup.S,按照大核模式使用$(CPP) 处理生成bbootsect.S和bsetup.S,然后再编译生成相应的.o文件,并使用 "arch/i386/boot/compressed/build.c"生成的build工具,将实际的内核(未压缩的,含 kernel中的head.S代码)与"arch/i386/boot/compressed"下的head.S和misc.c合成到一起,其中的head.S代替了"arch/i386/kernel/head.S"的位置,由Bootloader引导执行 (startup_32入口),然后它调用misc.c中定义的decompress_kernel()函数,使用 "lib/inflate.c"中定义的gunzip()将内核解压到0×100000,再转到其上执行 "arch/i386/kernel/head.S"中的startup_32代码。
对于2.4.x版内核
没有变化。
三.核心数据结构初始化–内核引导第一部分
start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。 这些动作有的是公共的,有的则是需要配置的才会执行的。
在start_kernel()函数中,
输出Linux版本信息(printk(linux_banner))
设置与体系结构相关的环境(setup_arch())
页表结构初始化(paging_init())
使用"arch/alpha/kernel/entry.S"中的入口点设置系统自陷入口(trap_init())
使用alpha_mv结构和entry.S入口初始化系统IRQ(init_IRQ())
核心进程调度器初始化(包括初始化几个缺省的Bottom-half,sched_init())
时间、定时器初始化(包括读取CMOS时钟、估测主频、初始化定时器中断等,time_init())
提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options())
控制台初始化(为输出信息而先于PCI初始化,console_init())
剖析器数据结构初始化(prof_buffer和prof_len变量)
核心Cache初始化(描述Cache信息的Cache,kmem_cache_init())
延迟校准(获得时钟jiffies与CPU主频ticks的延迟,calibrate_delay())
内存初始化(设置内存上下界和页表项初始值,mem_init())
创建和设置内部及通
一、什么是INIT:
init是Linux系统操作中不可缺少的程序之一。
所谓的init进程,它是一个由内核启动的用户级进程。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
二、运行级别
那么,到底什么是运行级呢?
简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。
不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)
# 0 – 停机(千万不能把initdefault 设置为0 )
# 1 – 单用户模式
# 2 – 多用户,没有 NFS
# 3 – 完全多用户模式(标准的运行级)
# 4 – 没有用到
# 5 – X11 (xwindow)
# 6 – 重新启动 (千万不要把initdefault 设置为6 )
这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)
三、运行级别的配置
运行级别的配置是在/etc/inittab行内进行的,如下所示:
12 : 2 : wait : / etc / init.d / rc 2
第一个字段是一个任意指定的标签;
第二个字段表示这一行适用于运行那个级别(这里是2);
第三个字 段表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。/etc/init.d/rc命令运行启动和终止输入以便进入运行级别2时所需的任何命令。
第四个字段中的命令执行设置运行级别时的一切“杂活”。它启动已经没有运行的服务,终止不应该再在新运行级别内运行的服务。根据Linux版本的不同,采用的具体命令也不同,而且运行级别的配置也是有差别的。
init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:
id : 2 : initdefault :
你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。比如说,内核命令行参数的指定可通过LILO来执行。这样一来,你就可以选择单用户模式了(即运行级别1)。
系统正在运行时,telinit命令可更改运行级别。运行级别发生变化时, init 就会从/etc/inittab运行相应的命令。
四、/etc/inittab中的特殊配置
/etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。这些特殊特性都是用第三个字段中的特殊关键字标记出来的。比如:
1. powerwait
允许init在电源被切断时,关闭系统。其前提是具有U P S和监视U P S并通知init电源已被切断的软件。
2. ctrlaltdel
允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将C t r l + A l t + D e l组合键配置为别的行为,比如忽略等。
3. sysinit
系统启动时准备运行的命令。比如说,这个命令将清除/tmp。
上面列出的特殊关键字尚不完整。其他的关键字及其使用详情,可参考你的inittab手册页。
五、在单用户模式下引导
一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登录。单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死。
一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了。内核同时也为init指定命令行, init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。
有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。
如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的。文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。
由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。
不同的运行级有不同的用处,也应该根据自己的不同情形来设置。
例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。在启动后的 lilo 提示符下输入:
init=/bin/sh rw 使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。
在您开始安装Linux之前,您必须做以下的准备工作:
1. 备份您硬盘上的所有重要数据! 首先建议您将您硬盘上的重要数据备份到软盘/光盘/磁带上,以免发生意外时,给您造成不必要的损失.
2.如果采用硬盘,网络安装,或者bios不支持光盘启动,则要准备一,两张安装软盘。
所需的img文件可在redhat安装光盘的/images/目录下找到,所需的img文件(/images/boot.img,bootnet.img)
阅读全文>>
Linux支持数量众多的本地文件系统类型和几种通过网络访问远程磁盘的文件系统,分析/proc/filesystems文件的内容即可找出当前Linux内核提供了对哪些文件系统的支持。
Linux默认直接支持的文件系统是ext2文件系统。
阅读全文>>
