??xml version="1.0" encoding="utf-8" standalone="yes"?>成人三级av在线,国产丝袜一区,国产一区欧美一区http://www2.blogjava.net/hszdz/category/11822.htmlzh-cnTue, 27 Feb 2007 19:31:55 GMTTue, 27 Feb 2007 19:31:55 GMT60SELinux中的Apache和MySQL讑֮http://www.aygfsteel.com/hszdz/articles/76382.html爪哇之家爪哇之家Fri, 20 Oct 2006 06:44:00 GMThttp://www.aygfsteel.com/hszdz/articles/76382.html 前两天我在用Fedora Core 3搭徏PHP+MySQL的WebServer时就遇到了一些问题。现在整理一下,如果您也遇到同样的问题,那么Q看q这文章,应该可以轻而易丄解决了?br /> 1. Apache - Document root must be a directory 问题?br /> 有可能和q个问题q发的问题还?403 Forbidden 止讉K的问题?br /> 现象描述Q?br /> 不用系l默认的 /var/www/html作ؓpȝ的Document RootQ自己新Z个目录后修改 /etc/httpd/conf/httpd.conf 中的配置Q然后重起Apache的DaemonQ发现Apache无法起动Q系l报错:
  Document root must be a directory
但是Q我们设|的DocumentRoot 的确是一个目录,而且apache用户h可读权限?br /> 另一U情况:新徏一个虚拟目录或文g后,无法讉KQ显C?Forbidden, 403 ErrorQ但文g或目录有可读权限?br /> 问题产生的原因:
一开始我x惛_想不Zؓ什么,但是l我感觉是权限的问题Q用传统的Linux的思维方式来看Q权限绝Ҏ有问题。但是仔l一惻ISELinux是不是会有其他安全的讑֮Q?br /> ?avc messageQ查?/var/log/messages文gQ发现有cM以下内容的这样一D:
Dec 24 17:54:59 hostname kernel: audit(1098222899.827:0): avc: \
denied { getattr } for pid=19029 exe=/usr/sbin/httpd \
path=/var/www/html/about.html dev=dm-0 ino=373900 \
scontext=root:system_r:httpd_t tcontext=user_ubject_r:user_home_t \
tclass=file
嘿嘿Q问题找CQ果然是SELinux的新Ҏ搞的鬼。我把目录或文g设成了user_home_tcdQ因此apache的进E没有权限,无法讉K? 针对Apache的进E所使用的SELinux target policy规定了apache的进E只能访问httpd_sys_content_tcd的目录或文g?br /> 解决办法Q?br /> 很简单,把目录或文g的策略类型改?httpd_sys_content_t 可以了
使用root用户
# chcon -t httpd_sys_content_t 目录名或文g?br /> 然后可以?ls -laZ 命o查看文g目录的策略类?br />
2. Mysql - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
刚搞定ApacheQmySQL又出问题了?br /> 问题现象Q?br /> 本机用mysql命o可以正常d数据库ƈ正常操作。但是在php写的面中,不管怎样Q连接mySQL数据库时Q都会报如下错误Q?br /> Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
问题原因Q?br /> 查看mysql.sock文gQ存在ƈ且Q何h都可d写。发现avc message (/var/log/messages)中同h{略错误的记录?br /> ?ps -efZ|grep mysql 命o查mysql的进E,发现mySQL使用了unconfined_t q个未定义策略类型在q行Q而mysql.sock以及mysqld文g的策 略类型都是var_lib_t。很明显Q这应该是个Fedora Core 3 ?BUGQSELinux target policy的BUGQredhatq没有ؓmySQL制定正确的target policy?br /> 解决办法Q?br /> 到redhat的bugzillapȝ上搜索,果然扑ֈ了这个BUG?br />  Bug #:  138421 
[url]https://bugzilla.redhat.com/bugzill...g.cgi?id=138421[/url]
在这个页面找到新的target policy的补丁安装即?br /> 补丁下蝲面Q?br /> [url]ftp://people.redhat.com/dwalsh/SELinux/FC3[/url]
你也可以从本文的附g中下?br /> 只要下蝲
selinux-policy-targeted-1.17.30-2.23以上的版本就能正怋用mySQL了?br /> 如果你原来的pȝ安装?selinux-policy-targeted-source (源代?Q那么你也必需下蝲source的rpm文gQƈ首先升q个包,因ؓ两个包有依赖关系?br /> 补丁安装办法Q?br /> 使用root用户?br /> 先升U新的target-policy-source (如果你之前安装了q个包的?
# rpm -Uvh selinux-policy-targeted-sources-1.17.30-2.61.noarch.rpm
升新的target-policy
# rpm -Uvh selinux-policy-targeted-1.17.30-2.61.noarch.rpm
更新mysql相关的target policy
# rpm -q -l mysql-server | restorecon -R -v -f -
# rpm -q -l mysql | restorecon -R -v -f -
重vmysql的服?br /> # service mysqld restart
试一下吧Q一定有效 

爪哇之家 2006-10-20 14:44 发表评论
]]>
Linux必学?0个命令:pȝ安全相关命ohttp://www.aygfsteel.com/hszdz/articles/72925.html爪哇之家爪哇之家Fri, 29 Sep 2006 16:49:00 GMThttp://www.aygfsteel.com/hszdz/articles/72925.htmlLinux必学?0个命令:pȝ安全相关命o
Linux必学的系l安全命?Q?Q?br /> 作者:曹元?发文旉Q?004.12.03
虽然Linux和Windows NT/2000pȝ一h一个多用户的系l,但是它们之间有不重要的差别。对于很多习惯了Windowspȝ的管理员来讲Q如何保证Linux操作pȝ安全、可靠将会面临许多新的挑战。本文将重点介绍Linuxpȝ安全的命令?/p>

passwd

1.作用
passwd命o原来修改账户的登陆密码,使用权限是所有用戗?/p>

2.格式
passwd [选项] 账户名称

3.主要参数
-lQ锁定已l命名的账户名称Q只有具备超U用h限的使用者方可用?br /> -uQ解开账户锁定状态,只有具备用户权限的用者方可用?br /> -x, --maximum=DAYSQ最大密码用时_天)Q只有具备超U用h限的使用者方可用?br /> -n, --minimum=DAYSQ最密码用时_天)Q只有具备超U用h限的使用者方可用?br /> -dQ删除用者的密码, 只有具备用户权限的用者方可用?br /> -SQ检查指定用者的密码认证U类, 只有具备用户权限的用者方可用?/p>

4.应用实例

$ passwd
Changing password for user cao.
Changing password for cao
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

从上面可以看刎ͼ使用passwd命o需要输入旧的密码,然后再输入两ơ新密码?/p>

su

1.作用
su的作用是变更为其它用者的w䆾Q超U用户除外,需要键入该使用者的密码?/p>

2.格式
su [选项]... [-] [USER [ARG]...]

3.主要参数
-f Q?--fastQ不必读启动文gQ如 csh.cshrc {)Q仅用于csh或tcsh两种Shell?br /> -l Q?--loginQ加了这个参C后,好像是重新登陆使用者一P大部分环境变量(例如HOME、SHELL和USER{)都是以该使用者(USERQؓ主,q且工作目录也会改变。如果没有指定USERQ缺省情冉|root?br /> -mQ?-p Q?-preserve-environmentQ执行su时不改变环境变数?br /> -c commandQ变更̎号ؓUSER的用者,q执行指令(commandQ后再变回原来用者?br /> USERQ欲变更的用者̎PARG传入新的Shell参数?/p>

4.应用实例
变更账号U用Pq在执行df命o后还原用者? su -c df root

umask

1.作用
umask讄用户文g和目录的文g创徏~省屏蔽|若将此命令放入profile文gQ就可控制该用户后箋所建文件的存取许可。它告诉pȝ在创建文件时不给谁存取许可。用权限是所有用戗?/p>

2.格式
umask [-p] [-S] [mode]

3.参数
QSQ确定当前的umask讄?br /> QpQ修改umask 讄?br /> [mode]Q修Ҏ倹{?/p>

4.说明
传统Unix的umask值是022Q这样就可以防止同属于该l的其它用户及别的组的用户修改该用户的文件。既然每个用户都拥有q属于一个自qU有l, 那么q种“组保护模式”就不在需要了。严密的权限讑֮构成了Linux安全的基Q在权限上犯错误是致命的。需要注意的是,umask命o用来讄q程所 创徏的文件的d权限Q最保险的值是0077Q即关闭创徏文g的进E以外的所有进E的d权限Q表CZؓ-rw-------。在 ?.bash_profile中,加上一行命令umask 0077可以保证每次启动Shell? q程的umask权限都可以被正确讑֮?/p>

5.应用实例

umask -S
u=rwx,g=rx,o=rx
umask -p 177
umask -S
u=rw,g=,o=

上述5行命令,首先昄当前状态,然后把umask值改?77Q结果只有文件所有者具有读写文件的权限Q其它用户不能访问该文g。这昄是一U非常安全的讄?/p>

chgrp

1.作用
chgrp表示修改一个或多个文g或目录所属的l。用权限是用户?/p>

2.格式
chgrp [选项]... l?文g...
?br /> chgrp [选项]... --reference=参考文?文g...

每?lt;文g>的所属组讑֮?lt;l?gt;?/p>

3.参数
-c, --changes Q像 --verboseQ但只在有更Ҏ才显C结果?br /> --dereferenceQ会影响W号链接所指示的对象,而非W号链接本n?br /> -h, --no-dereferenceQ会影响W号链接本nQ而非W号链接所指示的目的地(当系l支持更改符号链接的所有者,此选项才有??br /> -f, --silent, --quietQ去除大部分的错误信息?br /> --reference=参考文Ӟ使用<参考文?gt;的所属组Q而非指定?lt;l?gt;?br /> -R, --recursiveQ递归处理所有的文g及子目录?br /> -v, --verboseQ处理Q何文仉会显CZ息?/p>

4.应用说明
该命令改变指定指定文件所属的用户l。其中group可以是用LIDQ也可以?etc/group文g中用L的组名。文件名是以I格分开的要改变属组的文件列表,支持通配W。如果用户不是该文g的属L用户Q则不能改变该文件的l?/p>

5.应用实例
改变/opt/local /book/及其子目录下的所有文件的属组为bookQ命令如下:
$ chgrp - R book /opt/local /book

chmod

1.作用
chmod命o是非帔R要的Q用于改变文件或目录的访问权限,用户可以用它控制文g或目录的讉K权限Q用权限是用户?/p>

2.格式
chmod命o有两U用法。一U是包含字母和操作符表达式的字符讑֮法(相对权限讑֮Q;另一U是包含数字的数字设定法Q绝Ҏ限设定)?/p>

Q?Q字W设定法
chmod [who] [+ | - | =] [mode] 文g?/p>

◆操作对象who可以是下q字母中的Q一个或它们的组?br /> uQ表C用Px件或目录的所有者?br /> gQ表C同l用P即与文g属主有相同组ID的所有用戗?br /> oQ表C其它用戗?br /> aQ表C所有用P它是pȝ默认倹{?/p>

◆操作符?br /> +Q添加某个权限?br /> -Q取消某个权限?br /> =Q赋予给定权限,q取消其它所有权限(如果有的话)?/p>

◆设|mode的权限可用下q字母的Ll合
rQ可诅R?br /> wQ可写?br /> xQ可执行?br /> XQ只有目标文件对某些用户是可执行的或该目标文件是目录时才q加x属性?br /> sQ文件执行时把进E的属主或组ID|ؓ该文件的文g属主。方式“uQs”设|文件的用户ID位,“gQs”设|组ID位?br /> tQ保存程序的文本C换设备上?br /> uQ与文g属主拥有一L权限?br /> gQ与和文件属dl的用户拥有一L权限?br /> oQ与其它用户拥有一L权限?br /> 文g名:以空格分开的要改变权限的文件列表,支持通配W?br /> 一个命令行中可以给出多个权限方式,光用逗号隔开?/p>

Q?Q?数字讑֮?br /> 数字讑֮法的一般Ş式ؓQ?chmod [mode] 文g?/p>

数字属性的格式应ؓ3??的八q制敎ͼ光序是(u)(g)(o)文g名,以空格分开的要改变权限的文件列表,支持通配W?/p>

数字表示的权限的含义如下Q?001为所有者的执行权限Q?002为所有者的写权限;0004为所有者的L限;0010为组的执行权限;0020为组? 写权限;0040为组的读权限Q?100为其他h的执行权限;0200为其他h的写权限Q?400为其他h的读权限Q?000为粘贴位|位Q?000表示 假如q个文g是可执行文gQ则为组IDZ|位Q否则其中文仉定位|位Q?000表示假如q个文g是可执行文gQ则为用户IDZ|位?/p>

3.实例
如果一个系l管理员写了一个表?tem)让所有用户填写,那么必须授权用户对这个文件有d权限Q可以用命令:Qchmod 666 tem

上面代码中,q个666数字是如何计出来的呢?0002为所有者的写权限,0004为所有者的L限,0020为组的写权限Q?040为组的读权限Q? 0200为其他h的写权限Q?400为其他h的读权限Q这6个数字相加就?66Q注以上数字都是八进制数Q,l果见图1所C?/p>

? 用chmod数字Ҏ讑֮文g权限

从图1可以看出Qtem文g的权限是-rw-rw-rw-Q即用户对这个文件有d权限?/p>

如果用字W权限设定用下面命令:
Qchmod a =wx tem
chown

1.作用
更改一个或多个文g或目录的属主和属l。用权限是用户?/p>

2.格式
chown [选项] 用户或组 文g

3.主要参数
--dereferenceQ受影响的是W号链接所指示的对象,而非W号链接本n?br /> -h, --no-dereferenceQ会影响W号链接本nQ而非W号链接所指示的目的地(当系l支持更改符号链接的所有者,此选项才有??br /> --from=目前所有?目前l只当每个文件的所有者和l符合选项所指定的,才会更改所有者和l。其中一个可以省略,q已省略的属性就不需要符合原有的属性?br /> -f, --silent, --quietQ去除大部分的错误信息?br /> -R, --recursiveQ递归处理所有的文g及子目录?br /> -v, --verboseQ处理Q何文仉会显CZ息?/p>

4.说明
chown 指定文件的拥有者改为指定的用户或组Q用户可以是用户名或用户IDQ组可以是组名或lIDQ文件是以空格分开的要改变权限的文件列表,支持通配W。系l? 理员经怋用chown命oQ在文件拷贝到另一个用L目录下以后,让用h有用该文g的权限?/p>

5.应用实例
1.把文件shiyan.c的所有者改为wan
$ chown wan shiyan.c

2.把目?hi及其下的所有文件和子目录的属主ҎwanQ属l改成users?br /> $ chown - R wan.users /hi

chattr

1.作用
修改ext2和ext3文gpȝ属?attribute)Q用权限超U用戗?/p>

2.格式
chattr [-RV] [-+=AacDdijsSu] [-v version] 文g或目?/p>

3.主要参数
QRQ递归处理所有的文g及子目录?br /> QVQ详l显CZ改内容,q打印输出?br /> Q:失效属性?br /> Q:Ȁzd性?br /> = Q指定属性?br /> AQAtimeQ告诉系l不要修改对q个文g的最后访问时间?br /> SQSyncQ一旦应用程序对q个文g执行了写操作Qɾpȝ立刻把修改的l果写到盘?br /> aQAppend OnlyQ系l只允许在这个文件之后追加数据,不允怓Q何进E覆盖或截断q个文g。如果目录具有这个属性,pȝ只允许在这个目录下建立和修ҎӞ而不允许删除M文g?br /> iQImmutableQ系l不允许对这个文件进行Q何的修改。如果目录具有这个属性,那么M的进E只能修改目录之下的文gQ不允许建立和删除文件?br /> DQ检查压~文件中的错误?br /> dQNo dumpQ在q行文gpȝ备䆾ӞdumpE序忽略这个文件?br /> CQCompressQ系l以透明的方式压~这个文件。从q个文gdӞq回的是解压之后的数据;而向q个文g中写入数据时Q数据首先被压羃之后才写入磁盘?br /> sQSecure DeleteQ让pȝ在删除这个文件时Q?填充文g所在的区域?br /> uQUndeleteQ当一个应用程序请求删除这个文Ӟpȝ会保留其数据块以便以后能够恢复删除这个文件?/p>

4.说明
chattr 命o的作用很大,其中一些功能是由Linux内核版本来支持的Q如果Linux内核版本低于2.2Q那么许多功能不能实现。同PD查压~文件中的错? 的功能,需?.5.19以上内核才能支持。另外,通过chattr命o修改属性能够提高系l的安全性,但是它ƈ不适合所有的目录。chattr命o不能 保护/?dev?tmp?var目录?/p>

5.应用实例
1.恢复/root目录,卛_目录的所有文?br /> # chattr -R +u/root

2.用chattr命o防止pȝ中某个关键文件被修改
在Linux下,有些配置文g(passwd ,fatab)是不允许MZ改的Qؓ了防止被误删除或修改Q可以设定该文g的“不可修改位(immutable)”,命o如下Q?br /> # chattr +i /etc/fstab

sudo

1.作用
sudo是一U以限制配置文g中的命o为基Q在有限旉内给用户使用Qƈ且记录到日志中的命oQ权限是所有用戗?/p>

2.格式

sudo [-bhHpV] [-s <shell>] [-u <用户>] [指o]
sudo [-klv]

3.主要参数

QbQ在后台执行命o?br /> -hQ显C帮助?br /> -HQ将HOME环境变量设ؓ新n份的HOME环境变量?br /> -kQ结束密码的有效期,即下ơ将需要输入密码?br /> -lQ列出当前用户可以用的命o?br /> -pQ改变询问密码的提示W号?br /> -s <shell>Q执行指定的Shell?br /> -u <用户>Q以指定的用户ؓ新n份,不用时默认为root?br /> -vQg长密码有效期5分钟?/p>

4.说明
sudo 命o的配|在/etc/sudoers文g中。当用户使用sudoӞ需要输入口令以验证使用者n份。随后的一D|间内可以使用定义好的命oQ当使用配置 文g中没有的命oӞ会有报警的记录。sudo是系l管理员用来允许某些用户以rootw䆾q行部分/全部pȝ命o的程序。一个明昄用途是增强了站? 的安全性,如果需要每天以用户的n份做一些日常工作,l常执行一些固定的几个只有用户w䆾才能执行的命令,那么用sudo是非帔R合的?/p>

ps

1.作用
ps昄瞬间q程 (process) 的动态,使用权限是所有用者?/p>

2.格式
ps [options] [--help]

3.主要参数
ps的参数非常多, 此出仅列出几个常用的参数?/p>

-AQ列出所有的q程?br /> -lQ显C长列表?br /> -mQ显C内存信息?br /> -wQ显C加宽可以显C多的信息?br /> -eQ显C所有进E?br /> aQ显C终端上的所有进E?包括其它用户的进E?br /> -auQ显C详细的信息?br /> -auxQ显C所有包含其它用者的q程?/p>

4.说明
要对q程q行监测和控Ӟ首先要了解当前进E的情况Q也是需要查看当前进E。ps命o是最基本、也是非常强大的q程查看命o。用该命o可以定有哪 些进E正在运行、运行的状态、进E是否结束、进E有没有僵尸、哪些进E占用了q多的资源等。图2l出了ps-aux命o详解。大部分信息都可以通过执行? 命o得到。最常用的三个参数是u、a、x。下面就l合q三个参数详l说明ps命o的作用:ps aux

? ps-aux命o详解

?W?行代码中QUSER表示q程拥有者;PID表示q程标示W;%CPU表示占用的CPU使用率;%MEM占用的物理内存用率QVSZ表示占用的虚拟内存大;RSSE占用的物理内存|TTY为终端的ơ要装置L?/p>

STAT 表示q程的状态,其中DZ可中断的静止QI/O动作Q;R正在执行中;S静止状态;T暂停执行QZ不存在,但暂时无法消除;W没有_的内存分可? 配;高优先序的进E;N低优先序的进E;L有内存分分配ƈ锁在内存体内 (实时pȝ? I/O)。STARTE开始时间。TIME为执行的旉。COMMAND是所执行的指令?/p>

4.应用实例
在进行系l维护时Q经怼出现内存使用量惊人,而又不知道是哪一个进E占用了大量q程的情c除了可以用top命o查看内存使用情况之外Q还可以使用下面的命令:
ps aux | sort +5n

who

1.作用
who昄pȝ中有哪些用户登陆pȝQ显C的资料包含了用者ID、用的登陆l端、上U时间、呆滞时间、CPU占用Q以及做了些什么?使用权限为所有用戗?/p>

2.格式
who - [husfV] [user]

3.主要参数

-hQ不要显C标题列?br /> -uQ不要显CZ用者的动作/工作?br /> -sQ用简短的格式来显C?br /> -fQ不要显CZ用者的上线位置?br /> -VQ显C程序版本?/p>

4.说明
该命令主要用于查看当前在U上的用hc如果用h和其它用户徏立即旉信Q比如用talk命oQ那么首先要定的就是该用户实在线?不然 talkq程无法徏立v来。又如,pȝ理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命o。who命o应用h非常单,可以比较? 地掌握用户的情?所以用非常广泛?/p>

动手l习

1.使用Linux命o系l入侵?br /> 安装qMandrake Linux和Red Hat Linux的用户都会知道,Linuxpȝ会内|三U不同别(标准、高、更高)的防火墙Q当q行了Linux服务器的安装和一些基本的讄后,服务器应 该说是比较安全的Q但是也会有黑客通过各种Ҏ利用pȝ理员的疏忽侵入pȝ。如何快速查N客非帔R要。一般来_可以使用命o查询黑客是否入RQ见? 1?/p>

? 查询黑客入R现象的命令对应表

举例说明Q如果黑客嗅探网l,那么它必Mɾ|卡接口处于h模式Q用下面命令进行查询:

Qifconfig -a
eth0 Link encap:Ethernet HWaddr 00:00:E8:A0:25:86
inet addr:192.168.1.7 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING PROMISCUOUS MTU:1500 Metric:1
......

从这个命令的输出中,可以看到上面讲到的这些概c第一行的00:00:E8:A0:25:86是mac地址Q第二行?92.168.1.7是IP? 址Q第四行讲的是接收数据状态,q时正在被黑客嗅探。一般而言Q网卡有几种接收数据帧的状态,如Broadcast、Multicast? Promiscuous{。Broadcast是指接收所有类型ؓq播报文的数据QMulticast是指接收特定的组播报文;Promiscuous 则是通常说的h模式Q是指对报文中的目的g地址不加M查、全部接收的工作模式?/p>

2.限制su命o的滥?br /> 我们知道Q超U用户在Linux中有最大的权利Q几乎所有黑客都惛_到这个目标。Linux可以增加对切换到用户的限制。用PAM QPluggable Authentication ModulesQ可以禁止除在wheell以外的M人su成rootQ修?etc/pam.d/su文gQ除d蔽标?。? /usr/sbin/usermod G10 bjecadmbjecadmq个账号加入gid?0的组Q就是wheell。命令如下:

/etc/pam.d/su # 使用密码验证Q?br /> auth sufficient /lib/security/pam_wheel.so debug
# 限制只有wheell用h可以切换到rootQ?br /> auth required /lib/security/pam_wheel.so use_uid
chmod -G10 bjecadm

另外Q每当用戯图用su命oq入pȝ用户?命o在/usr/adm/sulog文g中写一条信?若该文g记录了大量试囄suq入root的无效操作信?则表明了可能有h企图破译root口o?/p>

Linux命o有着强大的功能。对于Linuxpȝ理员来_往往只需要通过各种安全命o技巧,l合构成安全防线。从计算机安全的角度看,世界上没有绝对安全的计算机系l,Linuxpȝ也不例外?/p>

爪哇之家 2006-09-30 00:49 发表评论
]]>
Linux必学?0个命?6)-其他http://www.aygfsteel.com/hszdz/articles/72926.html爪哇之家爪哇之家Fri, 29 Sep 2006 16:49:00 GMThttp://www.aygfsteel.com/hszdz/articles/72926.html Linux必学?0个命令:其它
Linux必学的重要命?Q?Q?br /> 作者:曹元?发文旉Q?004.12.16
在前面几讲中Q我们把Linux命o按照在系l中的作用分成几个部分分别予以介l。但是,q有一些命令不好划分,然而学习它们同h比较重要的?

tar

1.作用
tar命o是Unix/Linuxpȝ中备份文件的可靠ҎQ几乎可以工作于M环境中,它的使用权限是所有用戗?/p>

2.格式
tar [主选项+辅选项] 文g或目?/p>

3.主要参数
使用该命令时Q主选项是必要有的Q它告诉tar要做什么事情,辅选项是辅助用的Q可以选用?/p>

主选项Q?br /> -c 创徏新的档案文g。如果用h备䆾一个目录或是一些文Ӟp选择q个选项?/p>

-r 把要存档的文件追加到档案文g的未。例如用户已l做好备份文Ӟ又发现还有一个目录或是一些文件忘记备份了Q这时可以用该选项Q将忘记的目录或文gq加到备份文件中?br /> -t 列出档案文g的内容,查看已经备䆾了哪些文件?br /> -u 更新文g。就是说Q用新增的文件取代原备䆾文gQ如果在备䆾文g中找不到要更新的文gQ则把它q加到备份文件的最后?br /> -x 从档案文件中释放文g?/p>

辅助选项Q?br /> -b 该选项是ؓ带定的Q其后跟一数字Q用来说明区块的大小Q系l预讑րgؓ20Q?0×512 bytesQ?br /> -f 使用档案文g或设备,q个选项通常是必选的?br /> -k 保存已经存在的文件。例如把某个文gq原Q在q原的过E中遇到相同的文Ӟ不会q行覆盖?br /> -m 在还原文件时Q把所有文件的修改旉讑֮为现在?br /> -M 创徏多卷的档案文Ӟ以便在几个磁盘中存放?br /> -v 详细报告tar处理的文件信息。如无此选项Qtar不报告文件信息?br /> -w 每一步都要求认?br /> -z 用gzip来压~?解压~文Ӟ加上该选项后可以将档案文gq行压羃Q但q原时也一定要使用该选项q行解压~?/p>

4.应用说明
tar 是Tape ArchiveQ磁带归档)的羃写,最初设计用于将文g打包到磁带上。如果下载过Linux的源代码Q或许已l碰到过tar文g

h意,不要忘了Linux是区分大写的。例如,tar命o应该L以小写的形式执行。命令行开兛_以是大写、小写或大小写的混合。例如,-t?T执行不同的功能。文件或目录名称可以混合使用大小写,而且像命o和命令行开关一h区分大小写的?/p>

5.应用实例
tar是一个命令行的工P没有囑Ş界面。用Konsole打开一个终端窗口,接下来是一个简单的备䆾命oQ在/temp目录中创Z个back.tar的文Ӟ/usr目录中所有内定w包含在其中。)Q?br /> $tar cvf - /usr > /temp/back.tar

另外Qtar命o支持前面W三讲中讲过的crontab命oQ可以用crontab工具讄成基于时间的有规律地q行。例如,每晚6Ҏ/usr目录备䆾 到hda—第一个IDE接口的主驱动?(L位于W一个硬?中,只要下面语句添加到root的crontab中即可:
$00 06 * * * tar cvf /dev/hda1/usrfiles.tar - /usr

一般情况下Q以下这些目录是需要备份的Q?br /> ?etc 包含所有核心配|文Ӟ其中包括|络配置、系l名U、防火墙规则、用戗组Q以及其它全局pȝV?br /> ?/var 包含pȝ守护q程Q服务)所使用的信息,包括DNS配置、DHCPU期、邮件缓冲文件、HTTP服务器文件、dB2实例配置{?br /> ?home 包含所有默认用Lȝ录,包括个h讄、已下蝲的文件和用户不希望失ȝ其它信息?br /> ?root 根(rootQ用Lȝ录?br /> ?opt 是安装许多非pȝ文g的地斏VIBM软g安装在q里。OpenOffice、JDK和其它Y件在默认情况下也安装在这里?/p>

有些目录是可以不备䆾的:
?/proc 应该永远不要备䆾q个目录。它不是一个真实的文gpȝQ而是q行内核和环境的虚拟化视图,包括诸如/proc/kcoreq样的文Ӟq个文g是整个运行内存的虚拟视图。备份这些文件只是在费资源?br /> ?dev 包含g讑֤的文件表C。如果计划还原到一个空白的pȝQ就可以备䆾/dev。然而,如果计划q原C个已安装的Linux pȝQ那么备?dev是没有必要的?/p>

unzip

1.作用
unzip 命o位于/usr/bin目录中,它们和MS DOS下的pkzip、pkunzip及MS Windows中的Winzip软g功能一P文件压~成.zip文gQ以节省盘I间Q当需要的时候再压~文件用unzip命o解开。该命o使用? 限是所有用戗?/p>

2.格式
unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文g][文g][-d <目录>][-x <文g>]

3.主要参数
-cQ将解压~的l果昄到屏q上Qƈ对字W做适当的{换?br /> -fQ更新现有的文g?br /> -lQ显C压~文件内所包含的文件?br /> -pQ与-c参数cMQ会解压羃的结果显C到屏幕上,但不会执行Q何的转换?br /> -tQ检查压~文件是否正?br /> -uQ与-f参数cMQ但是除了更新现有的文g外,也会压~文件中的其它文件解压羃到目录中?br /> -vQ执行是时显Cl的信息?br /> -zQ仅昄压羃文g的备注文字?br /> -aQ对文本文gq行必要的字W{换?br /> -bQ不要对文本文gq行字符转换?br /> -CQ压~文件中的文件名U区分大写?br /> -jQ不处理压羃文g中原有的目录路径?br /> -LQ将压羃文g中的全部文g名改为小写?br /> -MQ将输出l果送到moreE序处理?br /> -nQ解压羃时不要覆盖原有的文g?br /> -oQ不必先询问用户Qunzip执行后覆盖原有文件?br /> -P<密码>Q用zip的密码选项?br /> -qQ执行时不显CZQ何信息?br /> -sQ将文g名中的空白字W{换ؓ底线字符?br /> -VQ保留VMS的文件版本信息?br /> -XQ解压羃时同时回存文件原来的UID/GID?br /> [.zip文g]Q指?zip压羃文g?br /> [文g]Q指定要处理.zip压羃文g中的哪些文g?br /> -d<目录>Q指定文件解压羃后所要存储的目录?br /> -x<文g>Q指定不要处?zip压羃文g中的哪些文g?br /> -Z unzipQ?Z{于执行zipinfo指o。在Linux中,q提供了一个叫zipinfo的工P能够察看zip压羃文g的详l信息。unzip最新版本是5.50?/p>

gunzip

1.作用
gunzip命o作用是解压文Ӟ使用权限是所有用戗?/p>

2.格式
gunzip [-acfhlLnNqrtvV][-s <压羃字尾字符?gt;][文g...]
或?br /> gunzip [-acfhlLnNqrtvV][-s <压羃字尾字符?gt;][目录]

3.主要参数
-a?-asciiQ用ASCII文字模式?br /> -c?-stdout?-to-stdoutQ把解压后的文g输出到标准输备?br /> -f?forceQ强行解开压羃文gQ不理会文g名称或硬q接是否存在Q以及该文g是否为符可接?br /> -h?-helpQ在U帮助?br /> -l?-listQ列出压~文件的相关信息?br /> -L?-licenseQ显C版本与版权信息?br /> -n?-no-nameQ解压羃Ӟ若压~文件内含有原来的文件名U及旉戌Q则其忽略不予处理?br /> -N?-nameQ解压羃Ӟ若压~文件内含有原来的文件名U及旉戌Q则其回存到解开的文件上?br /> -q?-quietQ不昄警告信息?br /> -r?-recursiveQ递归处理Q将指定目录下的所有文件及子目录一q处理?br /> -S<压羃字尾字符?gt;?-suffix<压羃字尾字符?gt;Q更改压~字֭W串?br /> -t?-testQ测试压~文件是否正无误?br /> -v?-verboseQ显C指令执行过E?br /> -V?-versionQ显C版本信息?/p>

4.说明
gunzip是个使用q泛的解压羃E序Q它用于解开被gzip压羃q的文gQ这些压~文仉设最后的扩展名ؓ?gz”。事实上Qgunzip是gzip的硬q接Q因此不论是压羃或解压羃Q都可通过gzip指o单独完成。gunzip最新版本是1.3.3 ?/p>

unarj

1.作用
unarj解压~格式ؓ.arj格式的文Ӟ使用权限是所有用戗?/p>

2.格式
unarj [eltx][.arj压羃文g]

3.主要参数
eQ解压羃.arj文g?br /> lQ显C压~文件内所包含的文件?br /> tQ检查压~文件是否正?br /> xQ解压羃时保留原有的路径?/p>

4.说明
带有.arj扩展名的文g是由用于MS DOS和Windows的ARJ实用E序创徏的。因为ARJ是一U不能免费获得源代码的共享gE序Q所以在

mtools

1.作用
mtools 实际上是一个命令集合,是DOS文gpȝ的工L序,它可以模拟许多DOS命oQ用v来非常方ѝ用权限是所有用戗Linuxpȝ提供了一l称? mtools的可UL工具Q可以让用户LC标准的DOS软盘上读、写文g和目录。它们对DOS和Linux环境之间交换文g非常有用。mtools? 使用非常单,如果x软盘里所有的文g都拷贝到盘上,那么可以执行以下命令:
mcopy a:*.*

也就是说Q只需要在相应的DOS命o之前加上一个字母“m”,可以完成对应的功能了。一般Linux发行版本中都有这个YӞ可以使用下面命o查一下?br /> rpm -qa|grep mtools

如果没有安装Q也没有关系Q可以从|上下蝲(http://mtools.linux.lu/)一个最新版本来安装。目前可供下载的最新mtools版本?/p>

2.包括的命?br /> mcd 目录名:改变MS DOS下的目录?br /> mcopy 源文?目标文gQ在MS DOS和Unix之间复制文g?br /> mdel 文g名:删除MS DOS下的文g?br /> mdir 目录名:昄MS DOS下的目录?br /> mformat 驱动器号Q在低格式化的软盘上创建MS DOS文gpȝ?br /> rnlabel 驱动器号Q生MS DOS下的h?br /> mmd 目录名:建立MS DOS下的目录?br /> mrd 目录名:删除MS DOS下的目录?br /> mren 源文?目标文gQ重新命名已存在的MS DOS文g?br /> mtype 文g名:昄MS DOS文g的内宏V?/p>

h意,q些命o和对应的MS DOS命o非常怼。在mtools命o中,?”和“\”是可以L的。因为文件列表的是DOSpȝ下的文档Q对大小写ƈ不敏感,所以“CDE”和“cde”在q里是一L?/p>

3.应用实例
(1)如果把Y盘进行快速格式化Q可以用命令mformatQ?br /> mformat AQ?/p>

mtools 当初发展的目的是用来处理DOS文gpȝ的,所以只能用在FAT文g格式的分Z。需要注意的是,如果用mount命o来挂载了FAT16/32分区Q那 么就不能使用mtools的指令来处理q些分区上的文g。这是因Z旦FAT16/32分区挂到了Linux文g目录下,Linux׃其视ؓ文gpȝ 本n的一部分Q这时如果要对其操作必M用Linux本n所附带的指令集?/p>

(2)DOS盘上的文件htca.c复制到当前目录下Qƈ用ls命oq行验证?/p>

$ mcopy a:\htca.c
$ ls -l htca.c
-rw-r- -r- - 1 xxq xxq 27136 Jan 1 01:80 htca.c

man

1.作用

man命o用来提供在线帮助Q用权限是所有用戗在Linuxpȝ中存储着一部联Z用的手册Q以供用户在l端上查找。用man命o可以调阅其中的帮助信息,非常方便和实用?/p>

2.格式
man 命o名称
man [-acdfhkKtwW] [-m system] [-p string] [-C config_file] [-M path] [-P pager] [-S section_list] [section] name ...

3.参数
-C config_fileQ指定设定文件man.confQ缺省值是/etc/man.conf?br /> -M pathQ指定了联机手册的搜寻\? 如果没有指定则用环境变数MANPATH的设定;如果没有使用MANPATHQ?则会使用/usr/lib/man.conf内的讑֮Q如果MANPATH是空字串Q则表示使用~省倹{?br /> -P pagerQ指定用何Upager.man会优先用此选项讑֮Q然后是依环境变数MANPAGER讑֮Q然后是环境变数PAGERQman~省使用/usr/bin/less -is?br /> -S section_list manQ所搜寻的章节列?以冒号分?Q此选项会覆盖环境变数MANSECT的设定?br /> -a manQ缺省情冉|在显C第一个找到的手册之后Q就会停止搜寻,使用此选项会强qmanl箋昄所有符合name的联机手册?br /> -cQ即使有最新的cat pageQ也l箋对联机手册重C排版Q本选项在屏q的行列数改变时或已排版的联机手册损坏时特别有意义?br /> -dQ不要真的显C机手册,只显C除错讯息?br /> -DQ同时显C机手册与除错讯息?br /> -hQ显C求助讯息然后结束程??br /> -KQ对所有的联机手册搜寻所指定的字丌Ӏ请注意Q本功能回应速度可能很慢Q如果指定sectionQ区域)会对速度有帮助?br /> -m systemQ依所指定的system名称而指定另一l的联机手册?br /> manQ是manualQ手册)的羃写。在输入命o有困难时Q可以立d到这个文档。例? 如果使用ps命o旉到困难,可以输入man ps得到帮助信息Q此时会昄出ps的手册页Qman pageQ?/p>

׃手册man page是用lessE序来看?可以方便C屏幕上翻和下?, 所以在man page里可以用less的所有选项?/p>

less中比较重要的功能键有:
[q] 退出;
[Enter] 一行行C;
[Space] 一页C;
[b] 上翻一;
[/] 后跟一个字W串和[Enter]来查扑֭W串Q?br /> [n] 发现上一ơ查扄下一个匹配?/p>

4.阅读手册?br /> 手册在很少的空间里提供了很多的信息Q?q里单介l一下大多数手册中都有的部分内宏VLinux手册主要有九个部分Q用h令、系l调用、程序库、设备说明、文件格式、游戏、杂V系l指令、内核,手册快照见?所C?/p>

? ps命o手册快?/p>

Linux手册布局见表1?/p>

5.应用实例
Linux 命o中有一些基的、重要的命oQ例如ps、find、cat和ls{。下面来举一个综合应用的例子Q由此可以看出man的地位在Linux中可谓至关重 要。但是,man所昄的信息却不是普通的文本Q如果直接将q些文字重定向到一个文本文Ӟ׃发现在man中高亮显C的文字变成了两个Q而且有不计其 数的制表W,使打印、编辑都变得非常不便。不q,使用下面q样一条语句就能得到ps命o打印?br /> # man ps | col -b | lpr

q条命o同时q用了输出重定向和管道两U技巧,作用是将ps命o的帮助信息可以直接打印出来。更多的Man文g可以查看Linux Man

unencode

1.作用
unencode命o可以把一个二q制文g表编码ؓ一个文本文Ӟ使用权限是所有用戗?/p>

2.格式
uuencode [-hv] [源文件] 目标文g

3.主要参数
QhQ列出指令用格?help) ?br /> QvQ列出版本信息?/p>

4.应用说明
uuencode指o可以二q制文g转化成可使用电子邮g发送的ASCII~码形式。uuencode~码后的资料都以 begin开始,以end作ؓl束Q且通常其中的每一行的开始均为“M”,中间部分是编码过的文Ӟ~码后的文g比源文g要大一些?/p>

uudecode

1.作用
uudecode命o用来uuencode~码后的档案q原Quudecode只会begin与end标记之间的编码资料还原,E序会蟩q标C外的资料。它的用权限ؓ所有用戗?/p>

2.格式
uuencode [-hv] [file1 ...]

3.主要参数
QhQ列出指令用格?help)?br /> QvQ列出版本信息?/p>

4.应用实例
使用下面命o一ơ还原几个文Ӟ
uuencode file1.uud file2.uud file3.uud

动手l习

1.在Linux命o行下发送邮?br /> 虽然Linux桌面应用发展很快Q但是命令行QShellQ在Linux中依然有很强的生命力。如果能认电子邮g服务器支?bit的字节,可以直接用下面命令:
cat Q附件文件名Q?| mail Q邮件地址Q?/p>

catQcat是concatenate的羃写)命o是将几个文g处理成一个文Ӟq将q种处理的结果保存到一个单独的输出文gQ这里我们用它来合ƈ邮g的文本?/p>

写好邮g名称Q比如叫cjkmailQ然后用下面命令:
$uuencode Q附件文件名Q?Q附件文件名Q?>>cjkmail

q样可以用vi~辑器写cjkmail文gQƈ在前面写上信的正文,然后寄出?/p>

Ҏ收到信后Q把信中属于cjkmail中的内容拯出来Q存为themail.uue。如果对Ҏ在Windows下,可以用WinRAR或WinZip解压Q这样就可以看到附g?/p>

如果Ҏ也用LinuxQ可以用undecode命oq原Q?br /> $ uudencode -oQ附件文件名Q?themail.uue

2.实现tar的分?br /> W者想把一?78MB的文件压~成多个63MB的文ӞW者的USB?4MBQ,使用下面命oQ?br /> $tar czvf - dir | split -d -b 63m

然后合ƈ命oQ?br /> $cat x* > dir.tgz

以上例子实际是由三个命ol合完成的,即用tar打包Q用split分割Q用cat合ƈ。“tar czvf - dir”的意思是把dir目录打包Qƈ输出到标准输出(argvQ,q样可以直接用道输出lsplit?/p>

3.q箋执行一个命?br /> 使用watch命oQ可以反复执行命令。如果和ls配合Q可以达到观察某文g大小变化的效果?br /> $watch ls Ql file.name

4.用tar命o导出一个文?br /> 有一个tar格式的DVD文gGLvPro6.4_linux.tarQ因文g非常大(4.7GBQ,如果全部解压比较ȝQ可以用下面命o先导出readme.txt看看?br /> tar xvf GLvPro6.4_linux.tar readme.txt

q样readme.txt单独被导出了?/p>

5.用tar打包一个目录时只备份其中的几个子目?br /> tar cf --exclude home/cjh home/cao

q样home目录下只有cjh和cao两个子目录备份?/p>

到此为止QLinux必学?0个命令已l全部介l完了。Linux的命令行方式功能强大Q如果熟l掌握了Linux的常用命令,往往只需要通过各种技? 可以组合构成一条复杂的命oQ从而完成用户Q务。Linuxpȝ中的命o实在是太多了Q不可能像在MS DOS中把所有的命o及参数都C。Linuxpȝ提供了一些方法,比如可以通过“help”和“man”来查询名o?/p>

爪哇之家 2006-09-30 00:49 发表评论
]]>
Linux必学?0个命?4)-|络操作http://www.aygfsteel.com/hszdz/articles/72924.html爪哇之家爪哇之家Fri, 29 Sep 2006 16:48:00 GMThttp://www.aygfsteel.com/hszdz/articles/72924.htmlLinux必学?0个命令:|络操作命o
Linux必学的网l操作命?Q?Q?br /> 作者:曹元?发文旉Q?004.11.18
因ؓLinuxpȝ是在Internet上v源和发展的,它与生俱来拥有强大的|络功能和丰富的|络应用软gQ尤其是TCP/IP|络协议的实现尤为成 熟。Linux的网l命令比较多Q其中一些命令像ping? ftp、telnet、route、netstat{在其它操作pȝ上也能看刎ͼ但也有一些Unix/Linuxpȝ独有的命令,如ifconfig? finger、mail{。Linux|络操作命o的一个特ҎQ命令参数选项和功能很多,一个命令往往q可以实现其它命令的功能?/p>

ifconfig

1.作用
ifconfig用于查看和更改网l接口的地址和参敎ͼ包括IP地址、网l掩码、广播地址Q用权限是用户?/p>

2.格式
ifconfig -interface [options] address

3.主要参数

-interfaceQ指定的|络接口名,如eth0和eth1?br /> upQ激zL定的|络接口卡?br /> downQ关闭指定的|络接口?br /> broadcast addressQ设|接口的q播地址?br /> pointopointQ启用点对点方式?br /> addressQ设|指定接口设备的IP地址?br /> netmask addressQ设|接口的子网掩码?/p>

4.应用说明
ifconfig是用来设|和配置|卡的命令行工具。ؓ了手工配|网l,q是一个必L握的命o。用该命o的好处是无须重新启动机器。要赋给eth0接口IP地址207.164.186.2Qƈ且马上激zdQ用下面命令:
#fconfig eth0 210.34.6.89 netmask 255.255.255.128 broadcast 210.34.6.127

该命令的作用是设|网卡eth0的IP地址、网l掩码和|络的本地广播地址。若q行不带M参数的ifconfig命oQ这个命令将昄机器所有激zL? 的信息。带有?a”参数的命o则显C所有接口的信息Q包括没有激zȝ接口。注意,用ifconfig命o配置的网l设备参敎ͼ机器重新启动以后会? 失?br /> 如果要暂停某个网l接口的工作Q可以用down参数Q?br /> #ifconfig eth0 down

ip

1.作用
ip是iproute2软g包里面的一个强大的|络配置工具Q它能够替代一些传l的|络理工具Q例如ifconfig、route{,使用权限U用戗几乎所有的Linux发行版本都支持该命o?/p>

2.格式
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]

3.主要参数
OPTIONS是修改ip行ؓ或改变其输出的选项。所有的选项都是?字符开_分ؓѝ短两种形式。目前,ip支持如表1所C选项?/p>

OBJECT是要理者获取信息的对象。目前ip认识的对象见?所C?/p>

? ip支持的选项

-V,-Version 打印ip的版本ƈ退出?br /> -s,-stats,-statistics 输出更ؓ详尽的信息。如果这个选项出现两次或多ơ,则输出的信息更?br /> -f,-family q个选项后面接协议种c,包括inet、inet6或linkQ强调用的协议U类。如果没有够的信息告诉ip使用的协议种c,ip׃使用默认值inet或any。link比较ҎQ它表示不涉及Q何网l协议?br /> -4 ?family inet的简写?br /> -6 ?family inet6的简写?br /> -0 ?family link的简写?br /> -o,-oneline Ҏ行记录都使用单行输出Q回行用字符代替。如果需要用wc、grep{工具处理ip的输出,则会用到q个选项?br /> -r,-resolve 查询域名解析pȝQ用获得的主机名代替LIP地址

COMMAND 讄针对指定对象执行的操作,它和对象的类型有兟뀂一般情况下Qip支持对象的增?add)、删?delete)和展C?show或list)。有? 对象不支持这些操作,或者有其它的一些命令。对于所有的对象Q用户可以用help命o获得帮助。这个命令会列出q个对象支持的命令和参数的语法。如果没 有指定对象的操作命oQip会用默认的命o。一般情况下Q默认命令是listQ如果对象不能列出,׃执行help命o?/p>

ARGUMENTS 是命令的一些参敎ͼ它们倚赖于对象和命o。ip支持两种cd的参敎ͼflag和parameter。flag׃个关键词l成Qparameter׃? 关键词加一个数值组成。ؓ了方便,每个命o都有一个可以忽略的默认参数。例如,参数dev是ip link命o的默认参敎ͼ因此ip link ls eth0{于ip link ls dev eth0。我们将在后面的详细介绍每个命o的用,命o的默认参数将使用default标出?/p>

4.应用实例
dIP地址192.168.2.2/24到eth0|卡上:
#ip addr add 192.168.1.1/24 dev eth0

丢弃源地址属于192.168.2.0/24|络的所有数据报Q?br /> #ip rule add from 192.168.2.0/24 prio 32777 reject

ping

1.作用
ping主机网l接口状态,使用权限是所有用戗?/p>

2.格式
ping [-dfnqrRv][-c][-i][-I][-l][-p][-s][-t] IP地址

3.主要参数

-dQ用Socket的SO_DEBUG功能?br /> -cQ设|完成要求回应的ơ数?br /> -fQ极限检?br /> -iQ指定收发信息的间隔U数?br /> -IQ网l界面用指定的|络界面送出数据包?br /> -lQ前|蝲入,讄在送出要求信息之前Q先行发出的数据包?br /> -nQ只输出数倹{?br /> -pQ设|填满数据包的范本样式?br /> -qQ不昄指o执行q程Q开头和l尾的相关信息除外?br /> -rQ忽略普通的Routing TableQ直接将数据包送到q端L上?br /> -RQ记录\pE?br /> -sQ设|数据包的大?br /> -tQ设|存zL值TTL的大?br /> -vQ详l显C指令的执行q程?/p>

ping 命o是用最多的|络指oQ通常我们使用它检网l是否连通,它用ICMP协议。但是有时会有这L情况Q我们可以浏览器查看一个网,但是却无? ping通,q是因ؓ一些网站处于安全考虑安装了防火墙。另外,也可以在自己计算Z试一试,通过下面的方法ɾpȝ对ping没有反应Q?br /> # echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

netstat

1.作用
查整个Linux|络状态?

2.格式
netstat [-acCeFghilMnNoprstuvVwx][-A][--ip]

3.主要参数

-a--allQ显C所有连U中的Socket?br /> -AQ列|络cdq线中的IP相关地址和网l类型?br /> -c--continuousQ持l列出网l状态?br /> -C--cacheQ显C\由器配置的快取信息?br /> -e--extendQ显C网l其它相关信息?br /> -F--fibQ显CFIB?br /> -g--groupsQ显C多重广播功能群l组员名单?br /> -h--helpQ在U帮助?br /> -i--interfacesQ显C网l界面信息表单?br /> -l--listeningQ显C监控中的服务器的Socket?br /> -M--masqueradeQ显CZ装的|络q线?br /> -n--numericQ直接用IP地址Q而不通过域名服务器?br /> -N--netlink--symbolicQ显C网l硬件外围设备的W号q接名称?br /> -o--timersQ显C时器?br /> -p--programsQ显C正在用Socket的程序识别码和程序名U?br /> -r--routeQ显CRouting Table?br /> -s--statisticeQ显C网l工作信息统计表?br /> -t--tcpQ显CTCP传输协议的连U状c?br /> -u--udpQ显CUDP传输协议的连U状c?br /> -v--verboseQ显C指令执行过E?br /> -V--versionQ显C版本信息?br /> -w--rawQ显CRAW传输协议的连U状c?br /> -x--unixQ和指定?A unix”参数相同?br /> --ip--inetQ和指定?A inet”参数相同?/p>

4.应用实例
netstat 主要用于Linux察看自n的网l状况,如开启的端口、在为哪些用h务,以及服务的状态等。此外,它还昄pȝ路由表、网l接口状态等。可以说Q它是一 个综合性的|络状态的察看工具。在默认情况下,netstat只显C已建立q接的端口。如果要昄处于监听状态的所有端口,使用-a参数卛_Q?/p>

#netstat -a
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:32768 *:* LISTEN
tcp 0 0 *:32769 *:* LISTEN
tcp 0 0 *:nfs *:* LISTEN
tcp 0 0 *:32770 *:* LISTEN
tcp 0 0 *:868 *:* LISTEN
tcp 0 0 *:617 *:* LISTEN
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:netbios-ssn *:* LISTEN
tcp 0 0 *:sunrpc *:* LISTEN
tcp 0 0 *:10000 *:* LISTEN
tcp 0 0 *:http *:* LISTEN
......

上面昄出,q台L同时提供HTTP、FTP、NFS、MySQL{服务?/p>

telnet

1.作用
telnet表示开启终端机阶段作业Qƈdq端L。telnet是一个Linux命oQ同时也是一个协议(q程登陆协议Q?/p>

2.格式
telnet [-8acdEfFKLrx][-b][-e][-k][-l][-n][-S][-X][L名称IP地址<通信端口>]

3.主要参数

-8Q允怋?位字W资料,包括输入与输出?br /> -aQ尝试自动登入远端系l?br /> -bQ用别名指定远端主机名U?br /> -cQ不d用户专属目录里的.telnetrc文g?br /> -dQ启动排错模式?br /> -eQ设|脱dW?br /> -EQo除脱dW?br /> -fQ此参数的效果和指定?F”参数相同?br /> -FQ用Kerberos V5认证Ӟ加上此参数可把本C机的认证数据上传到远端主机?br /> -kQ用Kerberos认证Ӟ加上此参数让q端L采用指定的领域名Q而非该主机的域名?br /> -KQ不自动dq端L?br /> -lQ指定要dq端L的用户名U?br /> -LQ允许输?位字W资料?br /> -nQ指定文件记录相关信息?br /> -rQ用类似rlogin指o的用L面?br /> -SQ服务类型,讄telnetq线所需的IP TOS信息?br /> -xQ假设主机有支持数据加密的功能,׃用它?br /> -XQ关闭指定的认证形态?/p>

4.应用说明
用户使用telnet命o可以q行q程dQƈ在远E计机之间q行通信。用户通过|络在远E计机上登录,像d到本地机上执行命令一栗ؓ了通过 telnetd到远E计机上,必须知道q程Z的合法用户名和口令。虽然有些系l确实ؓq程用户提供d功能Q但Z对安全的考虑Q要限制来宾的操? 权限Q因此,q种情况下能使用的功能是很少的?/p>

telnet只ؓ普通终端提供终端仿真,而不支持X-Window{图形环境。当允许q程用户dӞpȝ通常把这些用h在一个受限制的Shell中, 以防pȝ被怀有恶意的或不心的用L坏。用戯可以使用telnet从远E站点登录到自己的计机上,查电子邮件、编辑文件和q行E序Q就像在本地? 录一栗?/p>

ftp

1.作用
ftp命oq行q程文g传输。FTP是ARPANet的标准文件传输协议,该网l就是现今Internet的前w,所以ftp既是协议又是一个命令?/p>

2.格式
ftp [-dignv][L名称IP地址]

3.主要参数

-dQ详l显C指令执行过E,便于排错分析E序执行的情形?br /> -iQ关闭互动模式,不询问Q何问题?br /> -gQ关闭本C机文件名U支持特D字W的扩充Ҏ?br /> -nQ不使用自动登陆?br /> -vQ显C指令执行过E?/p>

4.应用说明
ftp 命o是标准的文g传输协议的用h口,是在TCP/IP|络计算Z间传输文件简单有效的ҎQ它允许用户传输ASCⅡ文件和二进制文件。ؓ了用ftp 来传输文Ӟ用户必须知道q程计算Z的合法用户名和口令。这个用户名/口o的组合用来确认ftp会话Qƈ用来定用户对要传输的文件进行什么样的访问? 另外Q用户需要知道对其进行ftp会话的计机名字的IP地址?/p>

用户可以通过使用ftp客户E序Q连接到另一台计机上;可以在目录中上下Ud、列出目录内容;可以把文件从q程计算机机拯到本地机上;q可以把文g从本地机传输到远E系l中。ftp内部命o?2个,下面列出主要几个内部命oQ?/p>

lsQ列E机的当前目录?br /> cdQ在q程Z改变工作目录?br /> lcdQ在本地Z改变工作目录?br /> closeQ终止当前的ftp会话?br /> hashQ每ơ传输完数据~冲Z的数据后显CZ?受?br /> getQmgetQ:从远E机传送指定文件到本地机?br /> putQmputQ:从本地机传送指定文件到q程机?br /> quitQ断开与远E机的连接,q出ftp?/p>

route

1.作用
route表示手工产生、修改和查看路由表?/p>

2.格式
#route [-add][-net|-host] targetaddress [-netmask Nm][dev]If]
#route [Qdelete][-net|-host] targetaddress [gw Gw] [-netmask Nm] [dev]If]

3.主要参数

-addQ增加\由?br /> -deleteQ删除\由?br /> -netQ\由到辄是一个网l,而不是一C机?br /> -hostQ\由到辄是一C机?br /> -netmask NmQ指定\q子网掩码?br /> gwQ指定\q|关?br /> [dev]IfQ强q\由链指定接口?/p>

4.应用实例

route命o是用来查看和讄Linuxpȝ的\׃息,以实C其它|络的通信。要实现两个不同的子|之间的通信Q需要一台连接两个网l的路由器,或者同时位于两个网l的|关来实现?/p>

在Linuxpȝ中,讄路由通常是ؓ了解决以下问题:该Linuxpȝ在一个局域网中,局域网中有一个网养I能够让机器访问InternetQ那么就需要将q台机器的IP地址讄为Linux机器的默认\由。用下面命令可以增加一个默认\由:
route add 0.0.0.0 192.168.1.1

rlogin

1.作用
rlogin用来q行q程注册?/p>

2.格式
rlogin [ -8EKLdx ] [ -e char ] [-k realm ] [ - l username ] host

3.主要参数
-8Q此选项始终允许8位输入数据通道。该选项允许发送格式化的ANSI字符和其它的Ҏ代码。如果不用这个选项Q除非远端的不是l止和启动字W,否则去掉奇偶校验位?br /> -EQ停止把M字符当作转义字符。当?8选项一起用时Q它提供一个完全的透明q接?br /> -KQ关闭所有的Kerberos认。只有与使用Kerberos 认协议的主接时才用这个选项?br /> -LQ允许rlogin会话在litout模式中运行。要了解更多信息Q请查阅tty联机帮助?br /> -dQ打开与远E主行通信的TCP sockets的socket调试。要了解更多信息Q请查阅setsockopt的联机帮助?br /> -eQؓrlogin会话讄转义字符Q默认的转义字符是“~”?br /> -kQ请求rlogin获得在指定区域内q程L的Kerberos许可Q而不是获得由krb_realmofhost(3)定的远E主机区域内的远E主机的Kerberos许可?br /> -xQؓ所有通过rlogin会话传送的数据打开DES加密。这会媄响响应时间和CPU利用率,但是可以提高安全性?/p>

4.使用说明
如果在网l中的不同系l上都有账号Q或者可以访问别人在另一个系l上的̎P那么要访问别的系l中的̎P首先p注册到系l中Q接着通过|络q程注册到̎h在的pȝ中。rlogin可以q程注册到别的系l中Q它的参数应是一个系l名?br /> rcp

1.作用
rcp代表q程文g拯Q用于计机之间文g拯Q用权限是所有用戗?/p>

2.格式
rcp [-px] [-k realm] file1 file2 rcp [-px] [-r] [-k realm] file

3.主要参数
-rQ递归地把源目录中的所有内Ҏ贝到目的目录中。要使用q个选项Q目的必L一个目录?br /> -pQ试图保留源文g的修Ҏ间和模式Q忽略umask?br /> -kQ请求rcp获得在指定区域内的远E主机的Kerberos许可Q而不是获得由krb_relmofhost(3)定的远E主机区域内的远E主机的Kerberos许可?br /> -xQؓ传送的所有数据打开DES加密?/p>

finger

1.作用
finger用来查询一CZ的登录̎L信息Q通常会显C用户名、主目录、停滞时间、登录时间、登录Shell{信息,使用权限为所有用戗?/p>

2.格式
finger [选项] [使用者] [用户@L]

3.主要参数
-sQ显C用h册名、实际姓名、终端名U、写状态、停滞时间、登录时间等信息?br /> -lQ除了用-s选项昄的信息外Q还昄用户ȝ录、登录Shell、邮件状态等信息Q以及用户主目录下的.plan?project?forward文g的内宏V?br /> -pQ除了不昄.plan文g?project文g以外Q与-l选项相同?/p>

4.应用实例
在计机上用fingerQ?/p>

[root@localhost root]# Finger
Login Name Tty Idle Login Time Office Office Phone
root root tty1 2 Dec 15 11
root root pts/0 1 Dec 15 11
root root *pts/1 Dec 15 11

5.应用说明
如果要查询远E机上的用户信息Q需要在用户名后面接“@L名”,采用[用户名@L名]的格式,不过要查询的|络L需要运行finger守护q程的支持?/p>

mail

1.作用
mail作用是发送电子邮Ӟ使用权限是所有用戗此外,mailq是一个电子邮件程序?/p>

2.格式

mail [-s subject] [-c address] [-b address]
mail -f [mailbox]mail [-u user]

3.主要参数

-b addressQ表CZ息的匿名收信人地址清单?br /> -c addressQ表CZ息的抄送(Q收信h地址清单?br /> -f [mailbox]Q从收gp指定邮p取邮件?br /> -s subjectQ指定输Z息的M行?br /> [-u user]Q端口指定优化的收gp取邮件?/p>

nslookup

1.作用
nslookup命o的功能是查询一台机器的IP地址和其对应的域名。用权限所有用戗它通常需要一台域名服务器来提供域名服务。如果用户已l设|好域名服务器,可以用q个命o查看不同L的IP地址对应的域名?/p>

2.格式
nslookup QIP地址/域名Q?/p>

3.应用实例
Q?Q在本地计算Z使用nslookup命o

$ nslookup
Default Server: name.cao.com.cn
Address: 192.168.1.9
>

在符号?gt;”后面输入要查询的IP地址域名Qƈ回R卛_。如果要退命oQ输入“exit”,q回车即可?/p>

Q?Q用nslookup命o试named
输入下面命oQ?br /> nslookup

然后p入交换式nslookup环境。如果named正常启动Q则nslookup会显C当前DNS服务器的地址和域名,否则表示named没能正常启动?/p>

下面单介l一些基本的DNS诊断?br /> ? 查正向DNS解析Q在nslookup提示W下输入带域名的L名,如hp712.my.comQnslookup应能昄该主机名对应的IP地址。如 果只输入hp712Qnslookup会根?etc/resolv.conf的定义,自动dmy.com域名Qƈ回答对应的IP地址?br /> ◆检查反向DNS解析Q在nslookup提示W下输入某个IP地址Q如192.22.33.20Qnslookup应能回答该IP地址所对应的主机名?br /> ◆检查MX邮g地址记录在nslookup提示W下输入Q?br /> set q=mx

然后输入某个域名Q输入my.com和mail.my.comQnslookup应能够回{对应的邮g服务器地址Q即support.my.com和support2.my.com?/p>

动手l习

1.危险的网l命?br /> 互联|的发展使安全成Z个不能忽视的问题Qfinger、ftp、rcp和telnet在本质上都是不安全的Q因为它们在|络上用明文传送口令和数据Q? 嗅探器可以非常容易地截获q些口o和数据。而且Q这些服务程序的安全验证方式也是有弱点的Q很Ҏ受到“中间服务器”方式的d。这里笔者把一些不安全? 命oҎ危险{列出Q见?所C?/p>

现在ftp、telnet可以被SSH命o代替l定在端?2上,其连接采用协商方式,使用RSA加密。n份鉴别完成之后,后面的所有流量都使用IDEA q行加密。SSHQSecure ShellQ程序可以通过|络d到远E主机,q执行命令。rcp、rlogin{远E调用命令也逐渐被VNC软g? ѝ?/p>

2.在一张网卡上l定多个IP地址
在Linux下,可以使用ifconfig方便地绑定多个IP地址C张网卡。例如,eth0接口的原有IP地址?92.168.0 .254Q可以执行下面命令:

ifconfig eth0:0 192.168.0.253 netmask 255.255.255.0
ifconfig eth0:1 192.168.0.252 netmask 255.255.255.0
......

3.修改|卡MAC地址
首先必须关闭|卡讑֤Q命令如下:
/sbin/ifconfig eth0 down

修改MAC地址Q命令如下:
/sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

重新启用|卡Q?br /> /sbin/ifconfig eht0 up

q样|卡的MAC地址更改完成了。每张网卡的MAC地址是惟一Q但不是不能修改的,只要保证在网l中的MAC地址的惟一性就可以了?/p>

4.初步部vIPv6
IPv4 技术在|络发展中vC巨大的作用,不过随着旉的流逝它无论在网l地址的提供、服务质量、安全性等斚w都越来越力不从心QIPv6gƲ出。Linux 是所有操作系l中最先支持IPv6的,一般LinuxZ2.4内核的Linux发行版本都可以直接用IPv6Q不q主要发行版本没有加载IPv6? 块,可以使用命o手工加蝲Q需要超U用L权限?/p>

(1)加蝲IPv6模块
使用命o,其中inet6 addr: fe80::5054:abff:fe34:5b09/64Q就是eth0|卡的IPv6地址?/p>

# modprobe IPv6
Qifconfig
eth0 Link encap:Ethernet HWaddr 52:54:AB:34:5B:09
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::5054:abff:fe34:5b09/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:21 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:1360 (1.3 Kb)
Interrupt:5 Base address:0xec00

(2)使用ping命o网卡的IPv6地址是否有效
#ping6 -I eth0 -c 2 fe80::200:e8ff:fea0:2586

和IPv4不一P使用ping6命o时必L定一个网卡界面,否则pȝ不知道将数据包发送到哪个|络讑֤。I表示Interface、eth0是第一个网卡,Qc表示回\Q?表示ping6操作两次。结果见?所C?/p>

? IPv6|络下的ping6命o

(3)使用ip命o在IPv6下ؓeth0增加一个IP地址
#ip -6 addr add 3ffe:ffff:0:f101::1/64 dev eth0

使用ifconfig命oQ查看网卡是否出现第二个IPv6地址?/p>

Linux|络的主要优Ҏ能够实现资源和信息的׃nQƈ且用户可以远E访问信息。Linux提供了一l强有力的网l命令来为用h务,q些工具能够帮助用户q行|络讑֮、检查网l状c登录到q程计算Z、传输文件和执行q程命o{?/p>

上面介绍了Linux中比较重要的|络命oQ其实Linuxq有许多命o需要学习。Linux|络操作命o的一个特点就是命令参数选项很多Qƈ不要求全部记住,关键在于理解命o的主要用途和学会使用帮助信息?



爪哇之家 2006-09-30 00:48 发表评论
]]>
Linux必学?0个命?3)-pȝ理http://www.aygfsteel.com/hszdz/articles/72923.html爪哇之家爪哇之家Fri, 29 Sep 2006 16:47:00 GMThttp://www.aygfsteel.com/hszdz/articles/72923.html

Linux必学?0个命令:pȝ理相关命o
Linux必学的系l管理命?br /> 作者:曹元?发文旉Q?004.10.18
对于Linuxpȝ来说Q无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,q是用户{都是文ӞLinuxpȝ理的命令是它正常运行的核心。熟悉了Linux常用的文件处理命令以后,q一讲介l对pȝ和用戯行管理的命o?/p>

df

1.作用
df命o用来查文件系l的盘I间占用情况Q用权限是所有用戗?/p>

2.格式
df [options]

3.主要参数
QsQ对每个Names参数只给出占用的数据块L?br /> QaQ递归地显C指定目录中各文件及子目录中各文件占用的数据块数。若既不指定QsQ也不指定-aQ则只显CNames中的每一个目录及其中的各子目录所占的盘块数?br /> QkQ以1024字节为单位列出磁盘空间用情c?br /> QxQ蟩q在不同文gpȝ上的目录不予l计?br /> QlQ计所有的文g大小Q对链接文件则计算多次?br /> QiQ显Cinode信息而非块用量?br /> QhQ以Ҏ理解的格式印出文件系l大,例如136KB?54MB?1GB?br /> QPQ用POSIX输出格式?br /> QTQ显C文件系l类型?/p>

4.说明
df命o被广泛地用来生成文gpȝ的用统计数据,它能昄pȝ中所有的文gpȝ的信息,包括d量、可用的I闲I间、目前的安装点等?/p>

权限用户使用df命o时会发现q样的情况:某个分区的容量超q了100Q。这是因为LinuxpȝU用户保留了10Q的I间Q由其单独支 配。也是_对于用户而言Q他所见到的硬盘容量将?10Q。这L安排对于pȝ理而言是有好处的,当硬盘被使用的容量接q?00Q时pȝ理? q可以正常工作?/p>

5.应用实例
Linux支持的文件系l非常多Q包括JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、vfat、MSDOS{。用df -T命o查看盘I间时还可以得到文gpȝ的信息:

Qdf QT
文gpȝ cd 定w 已用 可用 已用% 挂蝲?br /> /dev/hda7 reiserfs 5.2G 1.6G 3.7G 30% /
/dev/hda1 vfat 2.4G 1.6G 827M 66% /windows/C
/dev/hda5 vfat 3.0G 1.7G 1.3G 57% /windows/D
/dev/hda9 vfat 3.0G 2.4G 566M 82% /windows/E
/dev/hda10 NTFS 3.2G 573M 2.6G 18% /windows/F
/dev/hda11 vfat 1.6G 1.5G 23M 99% /windows/G

从上面除了可以看到磁盘空间的定w、用情况外Q分区的文gpȝcd、挂载点{信息也一览无遗?/p>

top

1.作用
top命o用来昄执行中的E序q程Q用权限是所有用戗?/p>

2.格式
top [Q] [d delay] [q] [c] [S] [s] [i] [n]

3.主要参数
dQ指定更新的间隔Q以U计?br /> qQ没有Q何gq的更新。如果用者有用户Q则top命o会以最高的优先序执行?br /> cQ显CE完整的路径与名U?br /> SQ篏U模式,会将己完成或消失的子行程的CPU旉累积h?br /> sQ安全模式?br /> iQ不昄M闲置(Idle)或无?Zombie)的行E?br /> nQ显C更新的ơ数Q完成后会退出top?/p>

4.说明
top命o是Linuxpȝ理的一个主要命令,通过它可以获得许多信息。这里我们结合图1来说明它l出的信息?/p>

? top命o的显C?/p>

在图1中,W一行表C的目依次为当前时间、系l启动时间、当前系l登录用h目、^均负载。第二行昄的是所有启动的q程、目前运行的、挂? (Sleeping)的和无用(Zombie)的进E。第三行昄的是目前CPU的用情况,包括pȝ占用的比例、用户用比例、闲|?Idle)比例? W四行显C物理内存的使用情况Q包括ȝ可以使用的内存、已用内存、空闲内存、缓冲区占用的内存。第五行昄交换分区使用情况Q包括ȝ交换分区、? 的、空闲的和用于高速缓存的大小。第六行昄的项目最多,下面列出了详l解释?br /> PIDQProcess IDQ:q程标示受?br /> USERQ进E所有者的用户名?br /> PRQ进E的优先U别?br /> NIQ进E的优先U别数倹{?br /> VIRTQ进E占用的虚拟内存倹{?br /> RESQ进E占用的物理内存倹{?br /> SHRQ进E用的׃n内存倹{?br /> SQ进E的状态,其中S表示休眠QR表示正在q行QZ表示僉|状态,N表示该进E优先值是负数?br /> %CPUQ该q程占用的CPU使用率?br /> %MEMQ该q程占用的物理内存和d存的癑ֈ比?br /> TIMEQ:该进E启动后占用的ȝCPU旉?br /> CommandQ进E启动的启动命o名称Q如果这一行显CZ下,q程会有一个完整的命o行?br /> top命o使用q程中,q可以用一些交互的命o来完成其它参数的功能。这些命令是通过快捷键启动的?br /> <I格>Q立d新?br /> PQ根据CPU使用大小q行排序?br /> TQ根据时间、篏计时间排序?br /> qQ退出top命o?br /> mQ切换显C内存信息?br /> tQ切换显CE和CPU状态信息?br /> cQ切换显C命令名U和完整命o行?br /> MQ根据用内存大进行排序?br /> WQ将当前讄写入~/.toprc文g中。这是写top配置文g的推荐方法?/p>

可以看到Qtop命o是一个功能十分强大的监控pȝ的工P对于pȝ理员而言其重要。但是,它的~点是会消耗很多系l资源?/p>

5.应用实例
使用top命o可以监视指定用户Q缺省情冉|监视所有用Lq程。如果想查看指定用户的情况,在终端中按“U”键Q然后输入用户名Q系l就会切换ؓ指定用户的进E运行界面,见图2所C?/p>

? 使用top命o监视指定用户

free

1.作用
free命o用来昄内存的用情况,使用权限是所有用戗?/p>

2.格式
free [Qb|Qk|Qm] [Qo] [Qs delay] [Qt] [QV]

3.主要参数
Qb Qk QmQ分别以字节QKB、MBQؓ单位昄内存使用情况?br /> Qs delayQ显C每隔多秒数来昄一ơ内存用情c?br /> QtQ显C内存d列?br /> QoQ不昄~冲节列?/p>

4.应用实例
free命o是用来查看内存用情늚主要命o。和top命o相比Q它的优Ҏ使用单,q且只占用很的pȝ资源。通过QS参数可以使用free命o不间断地监视有多内存在使用Q这样可以把它当作一个方便实时监控器?br /> Qfree Qb Qs5

使用q个命o后终端会q箋不断地报告内存用情况(以字节ؓ单位Q,?U更Cơ?/p>

quota

1.作用
quota命o用来昄盘使用情况和限制情况,使用权限用户?/p>

2.格式
quota [Qg][Qu][Qv][Qp] 用户?l名

3.参数
QgQ显C用h在组的磁盘用限制?br /> QuQ显C用L盘使用限制?br /> QvQ显C没有分配空间的文gpȝ的分配情c?br /> QpQ显C简化信息?/p>

4.应用实例
在企业应用中盘配额非常重要Q普通用戯学会看懂自己的磁盘用情c要查询自己的磁盘配额可以用下面命令(下例中用戯̎hcaojh)Q?/p>

Qquota caojh
Disk quotas for user caojh(uid 502):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda3 58 200000 400000 41 500 1000

以上昄ID号ؓ502的caojh账号Q文件个数设|ؓ500?000个,盘I间限制讄?00MB?00MB。一旦磁盘配额要用完Ӟ需要删除一些垃圾文件或向系l管理员hq加配额?/p>

at

1.作用
at命o用来在指定时L行指定的命o序列?/p>

2.格式
at [QV] [Qq x] [Qf file] [Qm] time

3.主要参数
QVQ显C标准错误输出?br /> QqQ许多队列输出?br /> QfQ从文g中读取作业?br /> QmQ执行完作业后发送电子邮件到用户?br /> timeQ设定作业执行的旉。time格式有严格的要求Q由时、分钟、日期和旉的偏U量l成Q其中日期的格式为MM.DD.YYQMM是分钟,DD是日期,YY是指q䆾。偏U量的格式ؓ旉Q偏U量Q单位是minutes、hours和days?/p>

4.应用实例
Qat Qf data 15:30 +2 days

上面命o表示让系l在两天后的17Q?0执行文gdata中指明的作业?/p>

lp

1.作用
lp是打印文件的命oQ用权限是所有用戗?/p>

2.格式
lp [Qc][Qd][Qm][Qnumber][Qtitle][-p]

3.主要参数
QcQ先拯文g再打印?br /> QdQ打印队列文件?br /> QmQ打印结束后发送电子邮件到用户?br /> QnumberQ打C数?br /> QtitleQ打印标题?br /> QpQ设定打印的优先U别Q最高ؓ100?/p>

4.应用实例
Q?Q用lp命o打印多个文g
Qlp 2 3 4
request id is 11 (3 file(s))

其中2??分别是文件名Q“request id is 11 (3 file(s)) ”表C是第11个打印命令,依次打印q三个文件?/p>

Q?Q设定打C先?br /> Qlp lp -d LaserJet -p 90 /etc/aliases

通过d?p 90”,规定了打C业的优先Uؓ90。它在优先U低?0的打C业之前打华ͼ包括没有讄优先U的作业Q缺省优先?0

useradd

1.作用
useradd命o用来建立用户帐号和创建用L起始目录Q用权限是用户?/p>

2.格式
useradd [Qd home] [Qs shell] [Qc comment] [Qm [Qk template]] [Qf inactive] [Qe expire ] [Qp passwd] [Qr] name

3.主要参数
QcQ加上备注文字,备注文字保存在passwd的备注栏中。 
QdQ指定用L入时的启始目录?br /> QDQ变更预讑ր{?br /> QeQ指定̎L有效期限Q缺省表C永久有效?br /> QfQ指定在密码q期后多天卛_闭该账号?br /> QgQ指定用h属的组?br /> QGQ指定用h属的附加组?br /> QmQ自动徏立用Ld目录?br /> QMQ不要自动徏立用Ld目录?br /> QnQ取消徏立以用户名称为名的群l?br /> QrQ徏立系l̎受?br /> QsQ指定用L入后所使用的shell?br /> QuQ指定用户ID受?/p>

4.说明
useradd可用来徏立用戯̎P它和adduser命o是相同的。̎号徏好之后,再用passwd讑֮账号的密码。用useradd命o所建立的̎P实际上是保存?etc/passwd文本文g中?/p>

5.应用实例
建立一个新用户账户Qƈ讄IDQ?br /> Quseradd caojh Qu 544

需要说明的是,讑֮ID值时量要大?00Q以免冲H。因为Linux安装后会建立一些特D用P一??99之间的值留lbin、mailq样的系l̎受?/p>

groupadd

1.作用
groupadd命o用于新l加入系l?/p>

2.格式
groupadd [Qg gid] [Qo]] [Qr] [Qf] groupname

3.主要参数
Qg gidQ指定组ID受?br /> QoQ允许组IDP不必惟一?br /> QrQ加入组IDP低于499pȝ账号?br /> QfQ加入已l有的组Ӟ发展E序退出?/p>

4.应用实例
建立一个新l,q设|组ID加入pȝQ?br /> Qgroupadd Qg 344 cjh

此时?etc/passwd文g中生一个组IDQGIDQ是344的项目?/p>

kill

1.作用
kill命o用来中止一个进E?/p>

2.格式
kill [ Qs signal | Qp ] [ Qa ] pid ...
kill Ql [ signal ]

3.参数
QsQ指定发送的信号?br /> QpQ模拟发送信受?br /> QlQ指定信L名称列表?br /> pidQ要中止q程的ID受?br /> SignalQ表CZ受?/p>

4.说明
q程是Linuxpȝ中一个非帔R要的概念。Linux是一个多d的操作系l,pȝ上经常同时运行着多个q程。我们不兛_q些q程I竟是如何分配的Q或者是内核如何理分配旉片的Q所兛_的是如何L制这些进E,让它们能够很好地为用h务?/p>

Linux 操作pȝ包括三种不同cd的进E,每种q程都有自己的特点和属性。交互进E是׃个Shell启动的进E。交互进E既可以在前台运行,也可以在后台q行? 批处理进E和l端没有联系Q是一个进E序列。监控进E(也称pȝ守护q程Q时Linuxpȝ启动时启动的q程Qƈ在后台运行。例如,httpd是著名的 Apache服务器的监控q程?/p>

kill命o的工作原理是Q向Linuxpȝ的内核发送一个系l操作信号和某个E序的进E标识号Q然后系l内核就可以对进E标识号指定的进E进行操 作。比如在top命o中,我们看到pȝq行许多q程Q有时就需要用kill中止某些q程来提高系l资源。在讲解安装和登陆命令时Q曾提到pȝ多个虚拟? 制台的作用是当一个程序出错造成pȝ死锁Ӟ可以切换到其它虚拟控制台工作关闭q个E序。此时用的命o是killQ因为kill是大多数Shell? 部命令可以直接调用的?/p>

5.应用实例
Q?Q强行中止(l常使用杀掉)一个进E标识号?24的进E:
Qkill Q? 324

Q?Q解除Linuxpȝ的死?br /> 在Linux 中有时会发生q样一U情况:一个程序崩溃,q且处于死锁的状态。此时一般不用重新启动计机Q只需要中?或者说是关?q个有问题的E序卛_。当 kill处于X-Window界面Ӟ主要的程?除了崩溃的程序之?一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果 Mozilla览器程序出C锁死的情况,可以使用kill命o来中止所有包含有Mozolla览器的E序。首先用top命o查处该程序的PIDQ然 后用kill命o停止q个E序Q?br /> Qkill QSIGKILL XXX
其中QXXX是包含有Mozolla览器的E序的进E标识号?/p>

Q?Q用命令回收内?br /> 我们知道内存对于pȝ是非帔R要的Q回收内存可以提高系l资源。kill命o可以及时C止一些“越轨”的E序或很长时间没有相应的E序。例如,使用top命o发现一个无?(Zombie) 的进E,此时可以使用下面命oQ?br /> Qkill Q? XXX
其中QXXX是无用的q程标识受?/p>

然后使用下面命oQ?br /> Qfree
此时会发现可用内存容量增加了?/p>

Q?Qkillall命o
Linux下还提供了一个killall命oQ可以直接用进E的名字而不是进E标识号Q例如:
Q?killall -HUP inetd

crontab

1.作用
使用crontab命o可以修改crontab配置文gQ然后该配置由cron公用E序在适当的时间执行,该命令用权限是所有用戗?/p>

2.格式
crontab [ Qu user ] 文g
crontab [ Qu user ] { Ql | Qr | Qe }

3.主要参数
QeQ执行文字编辑器来设定时E表Q内定的文字~辑器是vi?br /> QrQ删除目前的时程表?br /> QlQ列出目前的时程表?/p>

crontab 文g的格式ؓ“M H D m d cmd”。其中,M代表分钟Q??9Q,H代表时Q??3Q,D代表天(1?1Q,m代表月(1?2Q,d代表一星期内的天(0?Q?为星? 天)。cmd表示要运行的E序Q它被送入sh执行Q这个Shell只有USER、HOME、SHELL三个环境变量?/p>

4.说明
和at命o相比Qcrontab命o适合完成固定周期的Q务?/p>

5.应用实例
讄一个定时、定期的pȝ提示Q?br /> [cao @www cao]#crontab Qe
此时pȝ会打开一个vi~辑器?/p>

如果输入以下内容Q?5 17 * * 5 wall "Tomorrow is Saturday I will go CS"Q然后存盘退出。这时在/var/spool/cron/目录下会生一个cao的文Ӟ内容如下Q?/p>

# DO NOT EDIT THIS FILE Q?edit the master and reinstall.
# (/tmp/crontab.2707 installed on Thu Jan 1 22:01:51 2004)
# (Cron version Q- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
35 17 * * 5 wall "Tomorrow is Saturday I will play CS "

q样每个星期?7Q?5pȝ׃弹出一个终端,提醒星期六可以打打CS了!昄l果见图3所C?/p>

? 一个定时、定期的pȝ提示

动手l习

1.联合使用kill和top命o观察pȝ性能的变?/p>

首先启动一个终端运行top命oQ然后再启动一个终端用kill命oQ见?所C?/p>

? 观察kill命o对topl端的媄?/p>

q时利用上面介绍的kill命o来中止一些程序:
Qkill SIGKILL XXX

然后再看top命ol端的变化,包括内存定w、CPU使用率、系l负载等。注意,有些q程是不能中止的Q不q学习Linux命o时可以试试,看看pȝ有什么反应?/p>

2.使用at和halt命o定时x
首先讑֮x旉?7:35Q输入下面代码:

Qat 17:35
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at>halt `-i Qp
at> <EOT>
job 6 at 2004Q?1Q?1 17:35

此时实际上就已经q入Linuxpȝ的ShellQƈ且编写一个最单程序:halt Qi Qp。上面Shell中的文本l束W号表示按“CtrlQD”组合键关闭命oQ提交Q务退出Shell。“Job 6 at 2004Q?1Q?1 17:35”表C系l接受第6个at命oQ在?004Q?1Q?1 17:35”时执行命oQ先把所有网l相关的装置停止Q关闭系l后关闭甉|?/p>

3.用crontab命o实现每天定时的病毒扫?br /> 前面已经介绍了一个简单的crontab命o操作Q这里看一些更重要的操作?/p>

Q?Q徏立一个文Ӟ文g名称自己讑֮Q假设ؓcaoprojectQ?br /> Qcrontab Qe

Q?Q文件内容如下:
05 09 * * * antivir
用vi~辑后存盘退出。antivir是一个查杀Linux病毒的YӞ当然需要时先安装在pȝ中?/p>

Q?Q用crontab命odCQ务列表中Q?br /> Qcrontab caoproject
q样pȝ内所有用户在每天??5分会自动q行病毒扫描?/p>

4.用kill使修改的配置文g马上生效
Windows用户一般都知道Q重要配|文件修改后往往都要重新启动计算机才能修改生效。而Linux׃采用了模块化设计Q可以自己根据需要实时设定服务。这里以|络服务inetdZ介绍一些操作技巧?/p>

inetd 是一个监听守护进E,监听与提供互联网服务q程Q如rlogin、telnet、ftp、rshQ进行连接的要求Qƈ扩展所需的服务进E。默认情况下Q? inetd监听的这些daemon均列?etc /inetd.conf文g中。编?etc/inetd.conf文gQ可以改变inetd启动服务器守护进E的选项Q然后驱使inetd? SIGHUPQsignal 1Q向当前的inetdq程发送信P使inetd重读该文件。这一q程由kill命o来实现?br /> 用vi或其它编辑器修改inetd.conf后,首先使用下面命oQ?br /> Qps -ef |grep inetd

上面代码表明查询inetd.conf的进E号(PID)Q这里假设是1426Q然后用下面命令:
Q?kill -1426 inetd
q样配置文gq效了?/p>

q一讲介l的pȝ理命o都是比较重要的,特别是crontab命o和quota命o使用h会有一定难度,需要多做一些练习。另外,使用kill命o要注意“-9“这个参敎ͼl习时最好不要运行一些重要的E序?/p>

爪哇之家 2006-09-30 00:47 发表评论
]]>
Linux必学?0个命?2)-文g处理http://www.aygfsteel.com/hszdz/articles/72922.html爪哇之家爪哇之家Fri, 29 Sep 2006 16:46:00 GMThttp://www.aygfsteel.com/hszdz/articles/72922.htmlLinux必学?0个命?-文g操作
Linux pȝ信息存放在文仉Q文件与普通的公务文gcM。每个文仉有自q名字、内宏V存攑֜址及其它一些管理信息,如文件的用户、文件的大小{。文件可以是 一信、一个通讯录,或者是E序的源语句、程序的数据Q甚臛_以包括可执行的程序和其它非正文内宏V? Linux文gpȝh良好的结构,pȝ提供了很多文件处理程序。这里主要介l常用的文g处理命o?/p>

file

1.作用 件内容判断文件类型,使用权限是所有用戗?/p>

2.格式

file通过探测?/p>

file [options] 文g?/p>

3.[options]主要参数

-vQ在标准输出后显C版本信息,q且退出?/p>

-zQ探压~过的文件类型?/p>

-LQ允许符合连接?/p>

-f nameQ从文gnamefile中读取要分析的文件名列表?/p>

4.单说?/p>

使用file命o可以知道某个文gI竟是二q制QELF格式Q的可执行文? q是Shell Script文gQ或者是其它的什么格式。file能识别的文gcd有目录、Shell脚本、英文文本、二q制可执行文件、C语言源文件、文本文件、DOS的可执行文g?/p>

5.应用实例

如果我们看到一个没有后~的文件grapQ可以用下面命令:

$ file grap

grapQ?English text

此时pȝ昄q是一个英文文本文件。需要说明的是,file命o不能探测包括囑Ş、音频、视频等多媒体文件类型?/p>

mkdir

1.作用

mkdir命o的作用是建立名称为dirname的子目录Q与MS DOS下的md命ocMQ它的用权限是所有用戗?/p>

2.格式

mkdir [options] 目录?/p>

3.[options]主要参数

Qm, Q-mode=模式Q设定权?lt;模式>Q与chmodcM?/p>

Qp, Q-parentsQ需要时创徏上层目录Q如果目录早已存在,则不当作错误?/p>

Qv, Q-verboseQ每ơ创建新目录都显CZ息?/p>

Q-versionQ显C版本信息后d?/p>

4.应用实例

在进行目录创建时可以讄目录的权限,此时使用的参数是“-m”。假设要创徏的目录名是“tsk”,让所有用户都有rwx(卌、写、执行的权限)Q那么可以用以下命令:

$ mkdir Qm 777 tsk

grep

1.作用

grep命o可以指定文g中搜索特定的内容Qƈ含有这些内容的行标准输出。grep全称是Global Regular Expression PrintQ表C全局正则表达式版本,它的使用权限是所有用戗?/p>

2.格式

grep [options]

3.主要参数

[options]主要参数Q?/p>

QcQ只输出匚w行的计数?/p>

QIQ不区分大小写(只适用于单字符Q?/p>

QhQ查询多文g时不昄文g名?/p>

QlQ查询多文g时只输出包含匚w字符的文件名?/p>

QnQ显C匹配行及行受?/p>

QsQ不昄不存在或无匹配文本的错误信息?/p>

QvQ显CZ包含匚w文本的所有行?/p>

pattern正则表达式主要参敎ͼ

\Q忽略正则表辑ּ中特D字W的原有含义?/p>

^Q匹配正则表辑ּ的开始行?/p>

$: 匚w正则表达式的l束行?/p>

\<Q从匚w正则表达式的行开始?/p>

\>Q到匚w正则表达式的行结束?/p>

[ ]Q单个字W,如[A]即AW合要求 ?/p>

[ - ]Q范_如[A-Z]Q即A、B、C一直到Z都符合要??/p>

。:所有的单个字符?/p>

* Q有字符Q长度可以ؓ0?/p>

正则表达式是Linux/Unixpȝ中非帔R要的概念。正则表辑ּQ也UCؓ“regex”或“regexp”)是一个可以描qCcdW串的模? QPatternQ。如果一个字W串可以用某个正则表辑ּ来描qͼ我们pq个字符和该正则表达式匹配(MatchQ。这和DOS中用户可以用通配W? ?”代表Q意字W类伹{在Linuxpȝ上,正则表达式通常被用来查找文本的模式Q以及对文本执行“搜索-替换”操作和其它功能?/p>

4.应用实例

查询DNS服务是日常工作之一Q这意味着要维护覆盖不同网l的大量IP地址。有时IP地址会超q?000个。如果要查看nnn.nnn|络地址Q但 是却忘了W二部分中的其余部分Q只知到有两个句点,例如nnn nn..。要抽取其中所有nnn.nnn IP地址Q用[0Q? ]\{3 \}\.[0Q?\{3\}\。含义是L数字出现3ơ,后跟句点Q接着是Q意数字出?ơ,后跟句点?/p>

$grep '[0Q? ]\{3 \}\.[0Q?\{3\}\' ipfile

补充说明Qgrep家族q包括fgrep和egrep。fgrep是fix grepQ允许查扑֭W串而不是一个模式;egrep是扩展grepQ支持基本及扩展的正则表辑ּQ但不支持\q模式范围的应用及与之相对应的一些更加规范的模式?/p>

dd

1.作用

dd命o用来复制文gQƈҎ参数数据{换和格式化?/p>

2.格式

dd [options]

3.[opitions]主要参数

bs=字节Q强q?ibs=<字节>及obs=<字节>?/p>

cbs=字节Q每ơ{换指定的<字节>?/p>

conv=关键字:Ҏ以逗号分隔的关键字表示的方式来转换文g?/p>

count=块数目:只复制指?lt;块数?gt;的输入数据?/p>

ibs=字节Q每ơ读取指定的<字节>?/p>

if=文gQ读?lt;文g>内容Q而非标准输入的数据?/p>

obs=字节Q每ơ写入指定的<字节>?/p>

of=文gQ将数据写入<文g>Q而不在标准输出显C?/p>

seek=块数目:先略q以obs为单位的指定<块数?gt;的输出数据?/p>

skip=块数目:先略q以ibs为单位的指定<块数?gt;的输入数据?/p>

4.应用实例

dd命o常常用来制作Linux启动盘。先找一个可引导内核Qo它的根设备指向正的根分区,然后使用dd命o其写入软盘Q?/p>

$ rdev vmlinuz /dev/hda

$dd ifQvmlinuz ofQ?dev/fd0

上面代码说明Q用rdev命o可引导内核vmlinuz中的根设备指?dev/hdaQ请把“hda”换成自q根分区,接下来用dd命o该内核写入软盘?br /> find

1.作用

find命o的作用是在目录中搜烦文gQ它的用权限是所有用戗?/p>

2.格式

find [path][options][expression]

path指定目录路径Q系l从q里开始沿着目录树向下查找文件。它是一个\径列表,怺用空格分,如果不写pathQ那么默认ؓ当前目录?/p>

3.主要参数

[options]参数Q?/p>

QdepthQ用深度别的查找q程方式Q在某层指定目录中优先查找文件内宏V?/p>

Qmaxdepth levelsQ表C多查扑ֈ开始目录的Wlevel层子目录。level是一个非负数Q如果level?的话表示仅在当前目录中查找?/p>

Qmindepth levelsQ表C查扑ֈ开始目录的Wlevel层子目录?/p>

QmountQ不在其它文件系l(如Msdos、Vfat{)的目录和文g中查找?/p>

QversionQ打印版本?/p>

[expression]是匹配表辑ּQ是find命o接受的表辑ּQfind命o的所有操作都是针对表辑ּ的。它的参数非常多Q这里只介绍一些常用的参数?/p>

—nameQ支持统配符*??/p>

Qatime nQ搜索在q去n天读取过的文件?/p>

Qctime nQ搜索在q去n天修改过的文件?/p>

Qgroup grpoupnameQ搜索所有组为grpoupname的文件?/p>

Quser 用户名:搜烦所有文件属Mؓ用户名(ID或名Uͼ的文件?/p>

Qsize nQ搜索文件大是n个block的文件?/p>

QprintQ输出搜索结果,q且打印?/p>

4.应用技?/p>

find命o查找文g的几U方法:

Q?Q根据文件名查找

例如Q我们想要查找一个文件名是lilo.conf的文Ӟ可以使用如下命oQ?/p>

find / Qname lilo.conf

find命o后的?”表C搜索整个硬盘?/p>

Q?Q快速查找文?/p>

Ҏ文g名查找文件会遇到一个实际问题,是要花费相当长的一D|_特别是大型Linux文gpȝ和大定w盘文g攑֜很深的子目录中时。如果我 们知道了q个文g存放在某个目录中Q那么只要在q个目录中往下寻扑ְ能节省很多时间。比如smb.conf文gQ从它的文g后缀?conf”可以判断这 是一个配|文Ӟ那么它应该在/etc目录内,此时可以使用下面命oQ?/p>

find /etc Qname smb.conf

q样Q用“快速查找文件”方式可以羃短时间?/p>

Q?Q根据部分文件名查找Ҏ

有时我们知道只某个文件包含有abvdq?个字Q那么要查找pȝ中所有包含有q?个字W的文g可以输入下面命oQ?/p>

find / Qname '*abvd*'

输入q个命o以后QLinuxpȝ会将?目录中查找所有的包含有abvdq?个字W的文gQ其?是通配W)Q比如abvdrmyz{符合条件的文g都能昄出来?/p>

(4) 使用混合查找方式查找文g

find命o可以使用混合查找的方法,例如Q我们想?etc目录中查扑֤?00000字节Qƈ且在24时内修改的某个文gQ则可以使用-and (?把两个查扑֏数链接v来组合成一个؜合的查找方式?/p>

find /etc -size +500000c -and -mtime +1

mv

1.作用

mv命o用来为文件或目录改名Q或者将文g׃个目录移入另一个目录中Q它的用权限是所有用戗该命o如同DOS命o中的ren和move的组合?/p>

2.格式

mv[options] 源文件或目录 目标文g或目?/p>

3.[options]主要参数

QiQ交互方式操作。如果mv操作导致对已存在的目标文g的覆盖,此时pȝ询问是否重写Q要求用户回{“y”或“n”,q样可以避免误覆盖文件?/p>

QfQ禁止交互操作。mv操作要覆盖某个已有的目标文g时不lQ何指C,指定此参数后i参数不再v作用?/p>

4.应用实例

Q?Q将/usr/cbu中的所有文件移到当前目录(用?”表C)中:

$ mv /usr/cbu/ * .

Q?Q将文gcjh.txt重命名ؓwjz.txtQ?/p>

$ mv cjh.txt wjz.txt 

ls

1.作用

ls命o用于昄目录内容Q类似DOS下的dir命oQ它的用权限是所有用戗?/p>

2.格式

ls [options][filename]

3.options主要参数

Qa, Q-allQ不隐藏M以??字符开始的目?/p>

QA, Q-almostQallQ列出除了?. ”及 ?. ”以外的M目?/p>

Q-authorQ印出每个文件著作者?/p>

Qb, Q-escapeQ以八进制溢出序列表CZ可打印的字符?/p>

Q-blockQsize=大小Q块以指?lt;大小>的字节ؓ单位?/p>

QB, Q-ignoreQbackupsQ不列出M?~ 字符l束的项目?/p>

QfQ不q行排序Q-aU参数生效Q-lst参数失效?/p>

QF, Q-classifyQ加上文件类型的指示W号 (*/=@| 其中一??/p>

QgQlike Ql, but do not list owner?/p>

QG, Q-noQgroupQinhibit display of group information?/p>

Qi, Q-inodeQ列出每个文件的inode受?/p>

QI, Q-ignore=样式Q不印出MW合Shell万用字符<样式>的项目?/p>

QkQ即Q-blockQsize=1K?/p>

QlQ用较长格式列Z息?/p>

QL, Q-dereferenceQ当昄W号链接的文件信息时Q显C符号链接所指示的对象,而ƈ非符号链接本w的信息?/p>

QmQ所有项目以逗号分隔Qƈ填满整行行宽?/p>

Qn, Q-numericQuidQgidQ类|lQ但列出UID及GID受?/p>

QN, Q-literalQ列出未l处理的目名称Q例如不特别处理控制字符?/p>

Qp, Q-fileQtypeQ加上文件类型的指示W号 (/=@| 其中一??/p>

QQ, Q-quoteQnameQ将目名称括上双引受?/p>

Qr, Q-reverseQ依相反ơ序排列?/p>

QR, Q-recursiveQ同时列出所有子目录层?/p>

Qs, Q-sizeQ以块大ؓ序?/p>

4.应用举例

ls 命o是Linuxpȝ使用频率最多的命oQ它的参C是Linux命o中最多的。用ls命o时会有几U不同的颜色Q其中蓝色表C是目录Q绿色表C是可执 行文ӞU色表示是压~文Ӟ蓝色表C是链接文gQ加_的黑色表示W号链接Q灰色表C是其它格式文g。ls最怋用的是ls- lQ见?所C?/p>

? 使用ls-l命o

文gcd开头是?0个字W构成的字符丌Ӏ其中第一个字W表C文件类型,它可以是下述cd之一Q-Q普通文Ӟ、dQ目录)、lQ符号链接)、b Q块讑֤文gQ、cQ字W设备文Ӟ。后面的9个字W表C文件的讉K权限Q分?l,每组3位。第一l表C文件属ȝ权限Q第二组表示同组用户的权限,W? 三组表示其他用户的权限。每一l的三个字符分别表示Ҏ件的读(rQ、写QwQ和执行权限QxQ。对于目录,表示q入权限。s表示当文件被执行Ӟ把该? 件的UID 或GID赋予执行q程的UIDQ用户IDQ或GIDQ组 IDQ。t表示讄标志位(留在内存Q不被换出)。如果该文g是目录,那么在该目录中的文g只能被超U用戗目录拥有者或文g属主删除。如果它是可执行? Ӟ那么在该文g执行后,指向其正文段的指针仍留在内存。这样再ơ执行它Ӟpȝp更快地装入该文g。接着昄的是文g大小、生成时间、文件或命o? U?br /> diff

1.作用

diff命o用于两个文g之间的比较,q指Z者的不同Q它的用权限是所有用戗?/p>

2.格式

diff [options] 源文?目标文g

3.[options]主要参数

-aQ将所有文件当作文本文件来处理?/p>

-bQ忽略空格造成的不同?/p>

-BQ忽略空行造成的不同?/p>

-cQ用纲要输出格式?/p>

-HQ利用试探法加速对大文件的搜烦?/p>

-IQ忽略大写的变化?/p>

-n --rcsQ输出RCS格式?/p>

cmp

1.作用

cmpQ“compare”的~写Q命令用来简要指Z个文件是否存在差异,它的使用权限是所有用戗?/p>

2.格式

cmp[options] 文g?/p>

3.[options]主要参数

-l: 字节以十进制的方式输出Qƈ方便两个文件中不同的以八进制的方式输出?/p>

cat

1.作用

catQ“concatenate”的~写Q命令用于连接ƈ昄指定的一个和多个文g的有关信息,它的使用权限是所有用戗?/p>

2.格式

cat [options] 文g1 文g2…?/p>

3.[options]主要参数

QnQ由W一行开始对所有输出的行数~号?/p>

QbQ和Qn怼Q只不过对于I白行不~号?/p>

QsQ当遇到有连l两行以上的I白行时Q就代换Z行的I白行?/p>

4.应用举例

Q?Qcat命o一个最单的用处是显C文本文件的内容。例如,我们惛_命o行看一下README文g的内容,可以使用命oQ?/p>

$ cat README 

Q?Q有旉要将几个文g处理成一个文Ӟq将q种处理的结果保存到一个单独的输出文g。cat命o在其输入上接受一个或多个文gQƈ它们作Z 个单独的文g打印到它的输出。例如,把README和INSTALL的文件内容加上行PI白行不加)之后Q将内容附加C个新文本文gFile1 中:

$ cat README INSTALL File1

Q?Qcatq有一个重要的功能是可以对行q行~号Q见?所C。这U功能对于程序文档的~制Q以及法律和U学文档的编制很方便Q打印在左边的行号得参考文档的某一部分变得ҎQ这些在~程、科学研I、业务报告甚x立法工作中都是非帔R要的?/p>

? 使用cat命o/etc/named.conf文gq行~号

对行q行~号功能?bQ只能对非空白行q行~号Q和-nQ可以对所有行q行~号Q两个参敎ͼ

$ cat -b /etc/named.conf

ln

1.作用

ln命o用来在文件之间创建链接,它的使用权限是所有用戗?/p>

2.格式

ln [options] 源文?[链接名]

3.参数

QfQ链l时先将源文件删除?/p>

QdQ允许系l管理者硬铄自己的目录?/p>

QsQ进行Y铄(Symbolic Link)?/p>

QbQ将在链l时会被覆盖或删除的文gq行备䆾?/p>

链接有两U,一U被UCؓ链接(Hard LinkQ,另一U被UCؓW号链接QSymbolic LinkQ。默认情况下Qln命o产生链接?/p>

连接指通过索引节点来进行的q接。在Linux的文件系l中Q保存在盘分区中的文g不管是什么类型都l它分配一个编PUCؓ索引节点? (Inode Index)。在Linux中,多个文g名指向同一索引节点是存在的。一般这U连接就是硬q接。硬q接的作用是允许一个文件拥有多个有效\径名Q这L? 可以徏立硬q接到重要文Ӟ以防止“误删”的功能。其原因如上所qͼ因ؓ对应该目录的索引节点有一个以上的q接。只删除一个连接ƈ不媄响烦引节Ҏw和 其它的连接,只有当最后一个连接被删除后,文g的数据块及目录的q接才会被释放。也是_文g才会被真正删除?/p>

与硬q接相对应,Lnuxpȝ中还存在另一U连接,UCؓW号q接QSymbilc LinkQ,也叫软连接。Y链接文g有点cM于Windows的快h式。它实际上是Ҏ文g的一U。在W号q接中,文g实际上是一个文本文Ӟ其中包含的有另一文g的位|信息?/p>

动手联系

上面我们介绍了Linux文g处理命oQ下面介l几个实例,大家可以动手l习一下刚才讲q的命o?/p>

1.利用W号链接快速访问关键目?/p>

W号链接是一个非常实用的功能。假设有一些目录或文g需要频J用,但由于Linux的文件和目录l构{原因,q个文g或目录在很深的子目录中。比 如, Apache Web服务器文档位于系l的/usr/local/httpd/htdocs中,q且不想每次都要从主目录q入q样一个长的\径之?实际上,q个路径? 非常不容易记??/p>

Z解决q个问题Q可以在ȝ录中创徏一个符号链接,q样在需要进入该目录Ӟ只需q入q个链接卛_?/p>

Z能方便地q入Web服务?/usr/local/httpd/htdocs)文档所在的目录Q在ȝ录下可以使用以下命oQ?/p>

$ ln -s /usr/local/httpd/htdocs gg

q样每次q入gg目录可讉KWeb服务器的文档Q以后如果不再访问Web服务器的文档Ӟ删除gg卛_Q而真正的Web服务器的文档q没有删除?/p>

2.使用dd命oinit.rd格式的root.ram内容导入内存

dd if=/dev/fd0 of=floppy.fd

dd if=root.ram of=/dev/ram0 #

3.grep命opȝ调用

grep是Linux/Unix中用最q泛的命令之一Q许多Linuxpȝ内部都可以调用它?/p>

(1)如果要查询目录列表中的目录,Ҏ如下Q?/p>

$ ls -l | grep '∧d'

(2)如果在一个目录中查询不包含目录的所有文ӞҎ如下Q?/p>

$ ls -l | grep '∧[∧d]'

(3)用find命o调用grepQ如所有C源代码中的“Chinput”,Ҏ如下Q?/p>

$find /ZhXwin -name *.c -exec grep -q -s Chinput {} \;-print



爪哇之家 2006-09-30 00:46 发表评论
]]>
Linux必学?0个命?1)-安装与登?/title><link>http://www.aygfsteel.com/hszdz/articles/72921.html</link><dc:creator>爪哇之家</dc:creator><author>爪哇之家</author><pubDate>Fri, 29 Sep 2006 16:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/hszdz/articles/72921.html</guid><description><![CDATA[ <p> Linux必学?0个命?/p> <p>Linux提供了大量的命oQ利用它可以有效地完成大量的工作Q如盘操作、文件存取、目录操作、进E管理、文件权限设定等。所以,在Linuxp? l上工作M开使用pȝ提供的命令。要想真正理解LinuxpȝQ就必须从Linux命o学vQ通过基础的命令学习可以进一步理解Linuxpȝ?/p> <p>不同Linux发行版的命o数量不一P但Linux发行版本最的命o也有200多个。这里笔者把比较重要和用频率最多的命oQ按照它们在pȝ中的作用分成下面六个部分一一介绍?/p> <p>?安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、lastQ?/p> <p>?文g处理命oQfile、mkdir、grep、dd、find、mv、ls、diff、cat、lnQ?/p> <p>?pȝ理相关命oQdf、top、free、quota、at、lp、adduser、groupadd、kill、crontabQ?/p> <p>?|络操作命oQifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail?nslookupQ?/p> <p>?pȝ安全相关命oQpasswd、su、umask、chgrp、chmod、chown、chattr、sudo ps、whoQ?/p> <p>?其它命oQtar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode?/p> <p>本文以Mandrake Linux 9.1(Kenrel 2.4.21)ZQ介lLinux下的安装和登录命令?/p> <p>login</p> <p>1.作用</p> <p>login的作用是dpȝQ它的用权限是所有用戗?/p> <p>2.格式</p> <p>login [name][Qp ][Qh L名称]</p> <p>3.主要参数</p> <p>Qp:通知login保持现在的环境参数?/p> <p>Qh:用来向远E登录的之间传输用户名?/p> <p>如果选择用命令行模式dLinux的话Q那么看到的W一个Linux命o是loginQ?/p> <p>一般界面是q样的:</p> <p>Manddrake Linux release 9.1(Bamboo) for i586<br /> renrel 2.4.21Q?.13mdk on i686 / tty1<br /> localhost login:root<br /> password:</p> <p>上面代码中,W一行是Linux发行版本PW二行是内核版本号和d的虚拟控制台Q我们在W三行输入登录名Q按“Enter”键在Password后输入̎户密码,卛_dpȝ。出于安全考虑Q输入̎户密码时字符不会在屏q上回显Q光标也不移动?/p> <p>d后会看到下面q个界面Q以用户ZQ:</p> <p>[root@localhost root]#<br /> last login:Tue ,Nov 18 10:00:55 on vc/1</p> <p>上面昄的是d星期、月、日、时间和使用的虚拟控制台?/p> <p>4.应用技?/p> <p>Linux是一个真正的多用h作系l,可以同时接受多个用户dQ还允许一个用戯行多ơ登录。这是因为Linux和许多版本的Unix一P? 供了虚拟控制台的讉K方式Q允许用户在同一旉从控制台Q系l的控制台是与系l直接相q的监视器和键盘Q进行多ơ登录。每个虚拟控制台可以看作是一个独? 的工作站Q工作台之间可以切换。虚拟控制台的切换可以通过按下Alt键和一个功能键来实玎ͼ通常使用F1-F6 ?/p> <p>例如Q用L录后Q按一下“Alt+F2”键Q用户就可以看到上面出现的“login:”提C符Q说明用LCW二个虚拟控制台。然后只需? “Alt+ F1”键Q就可以回到W一个虚拟控制台。一个新安装的Linuxpȝ允许用户使用“Alt+F1”到“Alt+F6”键来访问前六个虚拟控制台。虚拟控? 台最有用的是Q当一个程序出错造成pȝ死锁Ӟ可以切换到其它虚拟控制台工作Q关闭这个程序?/p> <p>shutdown</p> <p>1.作用</p> <p>shutdown命o的作用是关闭计算机,它的使用权限是超U用戗?/p> <p>2.格式</p> <p>shutdown [Qh][Qi][Qk][Qm][Qt]</p> <p>3.重要参数</p> <p>QtQ在改变到其它运行别之前,告诉initE序多久以后x?/p> <p>QkQƈ不真正关机,只是送警告信L每位d者?/p> <p>QhQ关机后关闭甉|?/p> <p>QcQcancel current process取消目前正在执行的关机程序。所以这个选项当然没有旉参数Q但是可以输入一个用来解释的讯息Q而这信息会送到每位使用者?/p> <p>QFQ在重启计算机时fsck?/p> <p>QtimeQ设定关机前的时间?/p> <p>Qm: 系l改为单用户模式?/p> <p>QiQ关机时昄pȝ信息?/p> <p>4.命o说明</p> <p>shutdown命o可以安全地将pȝx。有些用户会使用直接断掉甉|的方式来关闭LinuxpȝQ这是十分危险的。因为Linux? Windows不同Q其后台q行着许多q程Q所以强制关机可能会Dq程的数据丢失,使系l处于不E_的状态,甚至在有的系l中会损坏硬件设备(盘Q? 在系l关机前使用 shutdown命oQ系l管理员会通知所有登录的用户pȝ要关闭Qƈ且login指o会被ȝQ即新的用户不能再登录?/p> <p>halt</p> <p>1.作用</p> <p>halt命o的作用是关闭pȝQ它的用权限是用户?/p> <p>2.格式</p> <p>halt [Qn] [Qw] [Qd] [Qf] [Qi] [Qp]</p> <p>3.主要参数说明</p> <p>QnQ防止syncpȝ调用Q它用在用fsck修补根分Z后,以阻止内核用老版本的块覆盖修补过的超U块?/p> <p>QwQƈ不是真正的重启或x,只是写wtmpQ?var/log/wtmpQ纪录?/p> <p>QfQ没有调用shutdownQ而强制关机或重启?/p> <p>QiQ关机(或重启)前,x所有的|络接口?/p> <p>QfQ强q关机,不呼叫shutdownq个指o?/p> <p>Qp: 当关机的时候顺便做关闭甉|的动作?/p> <p>QdQ关闭系l,但不留下U录。 </p> <p>4.命o说明</p> <p>halt是调用shutdown Qh。halt执行Ӟ杀d用进E,执行sync(存于buffer中的资料强制写入盘?pȝ调用Q文件系l写操作完成后就会停止内核。若pȝ? q行U别??Q则关闭pȝQ否则以shutdown指oQ加上-h参数Q来取代。 </p> <p>reboot</p> <p>1.作用</p> <p>reboot命o的作用是重新启动计算机,它的使用权限是系l管理者?/p> <p>2.格式</p> <p>reboot [Qn] [Qw] [Qd] [Qf] [Qi]</p> <p>3.主要参数</p> <p>Qn: 在重开机前不做记忆体资料写回盘的动作?/p> <p>Qw: q不会真的重开机,只是把记录写?var/log/wtmp文g里?/p> <p>Qd: 不把记录写到/var/log/wtmp文g里(Qnq个参数包含了-dQ?/p> <p>Qi: 在重开Z前先把所有与|络相关的装|停止?/p> <p>install</p> <p>1.作用</p> <p>install命o的作用是安装或升UY件或备䆾数据Q它的用权限是所有用戗?/p> <p>2.格式</p> <p>(1)install [选项]... 来源 目的?/p> <p>(2)install [选项]... 来源... 目录</p> <p>(3)install Qd [选项]... 目录...</p> <p>在前两种格式中,会将<来源>复制?lt;目的?gt;或将多个<来源>文g复制臛_存在?lt;目录>Q同 时设定权限模式及所有?所属组。在W三U格式中Q会创徏所有指定的目录及它们的ȝ录。长选项必须用的参数在用短选项时也是必ȝ?/p> <p>3.主要参数</p> <p>Q-backup[=CONTROL]Qؓ每个已存在的目的地文件进行备份?/p> <p>QbQ类?Q-backupQ但不接受Q何参数?/p> <p>QcQ?此选项不作处理)?/p> <p>QdQ-QdirectoryQ所有参数都作ؓ目录处理Q而且会创建指定目录的所有主目录?/p> <p>QDQ创?lt;目的?gt;前的所有主目录Q然后将<来源>复制?<目的?gt;Q在W一U用格式中有用?/p> <p>QgQ-Qgroup=l:自行讑֮所属组Q而不是进E目前的所属组?/p> <p>QmQ-Qmode=模式Q自行设定权限模?(像chmod)Q而不是rwxrQxrQx?/p> <p>QoQ-Qowner=所有者:自行讑֮所有?(只适用于超U用??/p> <p>QpQ-QpreserveQtimestampsQ以<来源>文g的访?修改旉作ؓ相应的目的地文g的时间属性?/p> <p>QsQ-QstripQ用strip命o删除symbol tableQ只适用于第一及第二种使用格式?/p> <p>QSQ-Qsuffix=后缀Q自行指定备份文件的<后缀>?/p> <p>QvQ-QverboseQ处理每个文?目录时印出名U?/p> <p>Q-helpQ显C此帮助信息q离开?/p> <p>Q-versionQ显C版本信息ƈd?/p> <p>mount</p> <p>1.作用</p> <p>mount命o的作用是加蝲文gpȝQ它的用权限是超U用h/etc/fstab中允许的使用者?/p> <p>2.格式</p> <p>mount Qa [Qfv] [Qt vfstype] [Qn] [Qrw] [QF] device dir</p> <p>3.主要参数</p> <p>QhQ显C助信息?/p> <p>QvQ显CZ息,通常和-f用来除错?/p> <p>QaQ将/etc/fstab中定义的所有文件系l挂上?/p> <p>QFQ这个命令通常和-a一起用,它会为每一个mount的动作生一个行E负责执行。在pȝ需要挂上大量NFS文gpȝ时可以加快加载的速度?/p> <p>QfQ通常用于除错。它会mount不执行实际挂上的动作Q而是模拟整个挂上的过E,通常会和Qv一起用?/p> <p>Qt vfstypeQ显C加蝲文gpȝ的类型?/p> <p>QnQ一般而言Qmount挂上后会?etc/mtab中写入一W资料,在系l中没有可写入文件系l的情况下,可以用这个选项取消q个动作?/p> <p>4.应用技?/p> <p>在Linux和Unixpȝ上,所有文仉是作Z个大型树Q以/为根Q的一部分讉K的。要讉KCD-ROM上的文gQ需要将CD-ROM讑֤挂装 在文件树中的某个挂装炏V如果发行版安装了自动挂装包Q那么这个步骤可自动q行。在Linux中,如果要用硬盘、光q储存讑֤Q就得先它加蝲Q当? 存设备挂上了之后Q就可以把它当成一个目录来讉K。挂上一个设备用mount命o。在使用mountq个指oӞ臛_要先知道下列三种信息Q要加蝲对象 的文件系l类型、要加蝲对象的设备名U及要将讑֤加蝲到哪个目录下?/p> <p>Q?QLinux可以识别的文件系l?/p> <p>?Windows 95/98常用的FAT 32文gpȝQvfat Q?/p> <p>?Win NT/2000 的文件系l:ntfs Q?/p> <p>?OS/2用的文gpȝQhpfsQ?/p> <p>?Linux用的文gpȝQext2、ext3Q?/p> <p>?CD-ROM光盘用的文gpȝQiso9660?/p> <p>虽然vfat是指FAT 32pȝQ但事实上它也兼容FAT 16的文件系l类型?/p> <p>Q?Q确定设备的名称</p> <p>在Linux中,讑֤名称通常都存?dev里。这些设备名U的命名都是有规则的Q可以用“推理”的方式把设备名U找出来。例如, /dev/hda1q个 IDE讑֤Qhd是Hard Disk(盘)的,sd是SCSI DeviceQfd是Floppy Device(或是Floppy Disk?)。a代表W一个设备,通常IDE接口可以接上4个IDE讑֤(比如4块硬?。所以要识别IDE盘的方法分别就是hda、hdb、hdc? hdd。hda1中的?”代表hda的第一个硬盘分? (partition)Qhda2代表hda的第二主分区Q第一个逻辑分区从hda5开始,依此cL。此外,可以直接? /var/log/messages文gQ在该文件中可以扑ֈ计算机开机后pȝ已L认出来的讑֤代号?/p> <p>Q?Q查找挂接点</p> <p>在决定将讑֤挂接之前Q先要查看一下计机是不是有?mnt的空目录Q该目录是专门用来当作挂蝲?Mount Point)的目录。徏议在/mnt里徏几个/mnt/cdrom?mnt/floppy?mnt/mo{目录,当作目录的专用挂载点。D例而言Q如 要挂载下?个设备,其执行指令可能如?(假设都是Linux的ext2pȝQ如果是Windows XX请将ext2Ҏvfat)Q?/p> <p>软盘 ===>mount Qt ext2 /dev/fd0 /mnt/floppy<br /> cdrom ===>mount Qt iso9660 /dev/hdc /mnt/cdrom<br /> SCSI cdrom ===>mount Qt iso9660 /dev/sdb /mnt/scdrom<br /> SCSI cdr ===>mount Qt iso9660 /dev/sdc /mnt/scdr</p> <p>不过目前大多数较新的Linux发行版本Q包括红?Linux、中软Linux、Mandrake Linux{)都可以自动挂装文件系l,但Red Hat Linux除外?/p> <p>umount</p> <p>1.作用</p> <p>umount命o的作用是卸蝲一个文件系l,它的使用权限是超U用h/etc/fstab中允许的使用者?/p> <p>2.格式</p> <p>unmount Qa [QfFnrsvw] [Qt vfstype] [Qn] [Qrw] [QF] device dir</p> <p>3.使用说明</p> <p>umount命o是mount命o的逆操作,它的参数和用方法和mount命o是一L。Linux挂装CD-ROM后,会锁定CD—ROMQ这 样就不能用CD-ROM面板上的Eject按钮弹出它。但是,当不再需要光盘时Q如果已?cdrom作ؓW号链接Q请使用umount/cdrom来卸 装它。仅当无用户正在使用光盘Ӟ该命令才会成功。该命o包括了将带有当前工作目录当作该光盘中的目录的l端H口?/p> <p>chsh</p> <p>1.作用</p> <p>chsh命o的作用是更改使用者shell讑֮Q它的用权限是所有用者?/p> <p>2.格式</p> <p>chsh [ Qs ] [ Qlist] [ Q-help ] [ Qv ] [ username ]</p> <p>3.主要参数</p> <p>QlQ显C系l所有Shellcd?/p> <p>QvQ显CShell版本受?/p> <p>4.应用技?/p> <p>前面介绍了Linux下有多种ShellQ一般缺省的是BashQ如果想更换Shellcd可以使用chsh命o。先输入账户密码Q然后输入新ShellcdQ如果操作正系l会昄“Shell change”。其界面一般如下:</p> <p>Changing fihanging shell for cao<br /> Password:<br /> New shell [/bin/bash]: /bin/tcsh</p> <p>上面代码中,[ ]内是目前使用的Shell。普通用户只能修改自qShellQ超U用户可以修改全体用LShell。要x询系l提供哪些ShellQ可以用chsh -l 命oQ见?所C?/p> <p>? pȝ可以使用的Shellcd</p> <p>从图1中可以看刎ͼW者系l中可以使用的Shell有bashQ缺省)、csh、sh、tcsh四种?/p> <p>exit</p> <p>1.作用</p> <p>exit命o的作用是退出系l,它的使用权限是所有用戗?/p> <p>2.格式</p> <p>exit</p> <p>3.参数</p> <p>exit命o没有参数Q运行后退出系l进入登录界面?/p> <p>last</p> <p>1.作用</p> <p>last命o的作用是昄q期用户或终端的d情况Q它的用权限是所有用戗通过last命o查看该程序的logQ管理员可以L谁曾l或企图q接pȝ?/p> <p>2.格式</p> <p>1ast[—n][Qf file][Qt tty] [—h 节点][QI —IP][?][Qy][1D]</p> <p>3.主要参数</p> <p>QnQ指定输录的条数?/p> <p>Qf fileQ指定用文gfile作ؓ查询用的log文g?/p> <p>Qt ttyQ只昄指定的虚拟控制台上登录情c?/p> <p>Qh 节点Q只昄指定的节点上的登录情c?/p> <p>Qi IPQ只昄指定的IP上登录的情况?/p> <p>Q?Q用IP来显C端地址?/p> <p>QyQ显C录的q、月、日?/p> <p>QIDQ知道查询的用户名?/p> <p>Qx:昄pȝ关闭、用L录和退出的历史?/p> <p>动手l习</p> <p>上面介绍了Linux安装和登录命令,下面介绍几个实例Q动手练习一下刚才讲q的命o?/p> <p>1.一ơ运行多个命?/p> <p>在一个命令行中可以执行多个命令,用分号将各个命o隔开卛_Q例如:</p> <p>Qlast QxQhalt</p> <p>上面代码表示在显C系l关闭、用L录和退出的历史后关闭计机?/p> <p>2.利用mount挂装文gpȝ讉KWindowspȝ</p> <p>许多Linux发行版本现在都可以自动加载Vfat分区来访问WindowspȝQ而Red Hat各个版本都没有自动加载Vfat分区Q因此还需要进行手工操作?/p> <p>mount可以Windows分区作ؓLinux的一个“文件”挂接到Linux的一个空文g夹下Q从而将Windows的分区和/mntq个? 录联pv来。因此,只要讉Kq个文g夹就相当于访问该分区了。首先要?mnt下徏立winc文g夹,在命令提C符下输入下面命令:</p> <p>Qmount -t vfat /dev/hda1 /mnt/winc</p> <p>卌C将Windows的C分区挂到Liunx?mnt/winc目录下。这Ӟ?mnt/winc目录下就可以看到Windows中C盘的? 容了。用类似的Ҏ可以讉KWindowspȝ的D、E盘。在Linuxpȝ昄Windows的分Z般顺序这LQhda1为C盘、hda5为D 盘? hda6为E盘……以此类推。上q方法可以查看Windowspȝ有一个很大的问题Q就是Windows中的所有中文文件名或文件夹名全部显CZؓ问号 “?”,而英文却可以正常昄。我们可以通过加入一些参数让它显CZ文。还以上面的操作ZQ此时输入命令:</p> <p>Qmount -t vfat -o iocharset=cp936 /dev/hda1 /mnt/winc</p> <p>现在它就可以正常昄中文了?/p> <p>3.使用mount加挂闪盘上的文gpȝ</p> <p>在Linux下用闪盘非常简单。Linux对USB讑֤有很好的支持Q当插入闪盘后,闪盘被识别ؓ一个SCSI盘,通常输入以下命oQ?/p> <p>Q?mount /dev/sda1 /usb</p> <p>p够加挂闪盘上的文件系l?/p> <p>知?/p> <p>Linux命o与Shell</p> <p>所谓ShellQ就是命令解释程序,它提供了E序设计接口Q可以用程序来~程。学习Shell对于Linux初学者理解Linuxpȝ是非帔R? 的? Linuxpȝ的Shell作ؓ操作pȝ的外壻I为用h供了使用操作pȝ的接口。Shell是命令语a、命令解释程序及E序设计语言的统Uͼ是用户和 Linux内核之间的接口程序。如果把Linux内核惌成一个球体的中心QShell是围绕内核的外层。当从Shell或其它程序向Linux传递命 令时Q内怼做出相应的反应。Shell在Linuxpȝ的作用和MS DOS下的COMMAND.COM和Windows 95/98 ? explorer.exe怼。Shell虽然不是pȝ核心的一部分Q只是系l核心的一个外Ӟ但它能够调用pȝ内核的大部分功能。因此,可以? Shell是Unux/Linux最重要的实用程序?/p> <p>Linux中的Shell有多U类型,其中最常用的是Bourne Shell(sh)、C Shell(csh)和Korn Shell(ksh)。大多数Linux发行版本~省的Shell是Bourne Again ShellQ它是Bourne Shell的扩展,UbashQ与Bourne Shell完全向后兼容Qƈ且在Bourne Shell的基上增加了很多Ҏ。bash攑֜/bin/bash中,可以提供如命令补全、命令编辑和命o历史表等功能。它q包含了很多C Shell和Korn Shell中的优点Q有灉|和强大的~程接口Q同时又有很友好的用L面。Linuxpȝ?00多个命o中有40个是bash的内部命令,主要包括 exit、less、lp、kill?cd、pwd、fc、fg{?/p> <img src ="http://www.aygfsteel.com/hszdz/aggbug/72921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hszdz/" target="_blank">爪哇之家</a> 2006-09-30 00:45 <a href="http://www.aygfsteel.com/hszdz/articles/72921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vsftpd+pam_mysql 安装配置ȝhttp://www.aygfsteel.com/hszdz/articles/67351.html爪哇之家爪哇之家Sat, 02 Sep 2006 18:11:00 GMThttp://www.aygfsteel.com/hszdz/articles/67351.html pȝ环境Q?
    * RedHat AS 4
    * MySQL 4.1.15
    * pam_mysql-0.7pre3

说明一下,MySQL我是使用其官方网站的rpm包安装的Q包括下面这4个:
   1. MySQL-server-standard-4.1.15-0.rhel4.i386.rpm
   2. MySQL-client-standard-4.1.15-0.rhel4.i386.rpm
   3. MySQL-devel-standard-4.1.15-0.rhel4.i386.rpm
   4. MySQL-shared-standard-4.1.15-0.rhel4.i386.rpm

vsftpd是RedHat自带的?

建立用于存放vsftpd虚拟用户的Schema的过E:
mysql> create database vsftpd;



mysql> use vsftpd;



mysql> create table users (

    -> id int AUTO_INCREMENT NOT NULL,

    -> name char(16) binary NOT NULL,

    -> passwd char(48) binary NOT NULL,

    -> primary key(id)

    -> );



mysql> describe users;

+--------+----------+------+-----+---------+----------------+

| Field  | Type     | Null | Key | Default | Extra          |

+--------+----------+------+-----+---------+----------------+

| id     | int(11)  |      | PRI | NULL    | auto_increment |

| name   | char(16) |      |     |         |                |

| passwd | char(48) |      |     |         |                |

+--------+----------+------+-----+---------+----------------+



mysql> create table logs (msg varchar(255),

    -> user char(16),

    -> pid int,

    -> host char(32),

    -> rhost char(32),

    -> logtime timestamp

    -> );



mysql> describe logs;

+---------+--------------+------+-----+-------------------+-------+

| Field   | Type         | Null | Key | Default           | Extra |

+---------+--------------+------+-----+-------------------+-------+

| msg     | varchar(255) | YES  |     | NULL              |       |

| user    | varchar(16)  | YES  |     | NULL              |       |

| pid     | int(11)      | YES  |     | NULL              |       |

| host    | varchar(32)  | YES  |     | NULL              |       |

| rhost   | varchar(32)  | YES  |     | NULL              |       |

| logtime | timestamp    | YES  |     | CURRENT_TIMESTAMP |       |

+---------+--------------+------+-----+-------------------+-------+


q里Q用户密码这个字D늚长度?8。这是根据MySQL加密函数的返回值的长度定的。关于PASSWORD函数q回值的长度Q可以参考这个:

http://dev.mysql.com/doc/refman/4.1/en/password-hashing.html

mysql> select encrypt('foo');

+----------------+

| encrypt('foo') |

+----------------+

| 4Wwn2AXFYb.So  |

+----------------+



mysql> select password('foo');

+-------------------------------------------+

| password('foo')                           |

+-------------------------------------------+

| *F3A2A51A9B0F2BE2468926B4132313728C250DBF |

+-------------------------------------------+



mysql> select md5('foo');

+----------------------------------+

| md5('foo')                       |

+----------------------------------+

| acbd18db4cc2f85cedef654fccc4a4d8 |

+----------------------------------+


~译安装pam_mysql
# ./configure --with-openssl

# make

# make install

加上--with-openssl可以避免make时报有关md5.h的编译错?

建立/etc/pam.d/vsftpd.mysqlQ因为只是想验证pam_mysql的安装过E,所以我不想覆盖原有的vsftpdq个文g)。[color=#FF0000]注意只有两行Qauth是一行,account是一行。[/color]

auth   required      /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1

account  required      /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1


注意q里pam_mysql.so的\径是/lib/securityQ指定了sqllogQ加密方式是2Q也是用MySQL PASSWORD()函数Qverbose=1Q设|这个可以帮助调试,日志信息输出?var/log/messages里?

建立/etc/vsftpd/vsftpd.mysql.confQ同P不媄响已有的vsftpd服务Q执行service vsftpd restart时会启动两个vsftpd服务Q端口不一P
主要的设|如下:
  
  pam_service_name=vsftpd.mysql

    listen=YES

    tcp_wrappers=YES

    local_enable=YES

    guest_enable=YES

    guest_username=ftp

    listen_port=2121


注意pam_service_name=vsftpd.mysql指定了用刚才设|的pam_mysql?

插入用户信息Q?
mysql> insert into users (name,passwd) values('tom',password('foo'));

mysql> insert into users (name,passwd) values('jerry',password('bar'));

mysql> select * from users;

+----+-------+-------------------------------------------+

| id | name  | passwd                                    |

+----+-------+-------------------------------------------+

|  1 | tom   | *F3A2A51A9B0F2BE2468926B4132313728C250DBF |

|  2 | jerry | *E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB |

+----+-------+-------------------------------------------+


启动vsftpd服务Q测试配|:
# ftp localhost 2121

dp|Q检?var/log/messagesQ发玎ͼ
# tail -f /var/log/messages
Nov 29 14:52:04 javadev vsftpd[17683]: PAM unable to dlopen(/lib/security/pam_mysql.so)

Nov 29 14:52:04 javadev vsftpd[17683]: PAM [dlerror: /lib/security/pam_mysql.so: cannot open shared object file: No such file or directory]

Nov 29 14:52:04 javadev vsftpd[17683]: PAM adding faulty module: /lib/security/pam_mysql.so


看来是没扑ֈpam_mysql.soQ怎么会呢Q?
用findQ也可以用locateQ不q得先updatedb一下,慢)找了一下,原来make install的时候默认安装在 /usr/local/lib下。修?etc/pam.d/vsftpd.mysql或者把lib拷到/lib/security目录
auth   required      /usr/local/lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1

account  required    /usr/local/lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2 sqllog=1 logtable=logs logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=logtime verbose=1


再登录,成功Q换用其他加密方式,也都可以?

然后试验pam_mysql v0.7新加的config_file配置选项。这个选项用来指定一个配|文Ӟ可以把所有pam_mysql的配|放在这个文件中。这L话,/etc/pam.d/vsftpd.mysql的内容变成这P

auth    required        /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf

account required        /usr/lib/security/pam_mysql.so config_file=/etc/security/pam_mysql.conf



/etc/security/pam_mysql.conf的内容:

users.host=localhost

users.database=vsftpd

users.db_user=root

users.db_passwd=123456

users.table=users

users.user_column=name

users.password_column=passwd

users.password_crypt=3

verbose=1

log.enabled=1

log.table=logs

log.message_column=msg

log.pid_column=pid

log.user_column=user

log.host_column=host

log.rhost_column=rhost

log.time_column=logtime


改好q些以后Q用之前建好的虚拟用L录,居然不行Q而且q次/var/log/messages里没有Q何错误消息。ls - ltr /var/log 发现secureq个文g最斎ͼ试着打开Q果然发Cpam_mysql的调试信息:

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option verbose is set to "1"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.enabled is set to "1 "

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.table is set to "logs"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.message_column is set to "msg"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.pid_column is set to "pid"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.user_column is set to "user"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.host_column is set to "host"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.rhost_column is set to "rhost"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - option log.time_column is set to "logtime"

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - pam_sm_authenticate() called.

Dec 26 16:18:37 javadev vsftpd[6175]: pam_mysql - pam_mysql_open_db() called.

Dec 26 16:18:42 javadev vsftpd[6175]: pam_mysql - MySQL error (Unknown MySQL server host 'localhost ' (3))

Dec 26 16:18:42 javadev vsftpd[6175]: pam_mysql - pam_mysql_open_db() returning 5.

Dec 26 16:18:42 javadev vsftpd[6175]: pam_mysql - pam_sm_authenticate() returning 9.

Dec 26 16:18:42 javadev vsftpd[6175]: pam_mysql - pam_mysql_release_ctx() called.

Dec 26 16:18:42 javadev vsftpd[6175]: pam_mysql - pam_mysql_destroy_ctx() called.

Dec 26 16:18:42 javadev vsftpd[6175]: pam_mysql - pam_mysql_close_db() called.


仔细查,发现原因在这里:

[color=#FF0000]pam_mysql - MySQL error (Unknown MySQL server host 'localhost ' (3))[/color]

原来配置文g里users.host=localhost q行行尾多了一个空|郁闷Q修改以后就可以d了?img src ="http://www.aygfsteel.com/hszdz/aggbug/67351.html" width = "1" height = "1" />

爪哇之家 2006-09-03 02:11 发表评论
]]>
Linux下两U自动启动Tomcat的方?/title><link>http://www.aygfsteel.com/hszdz/articles/62261.html</link><dc:creator>爪哇之家</dc:creator><author>爪哇之家</author><pubDate>Mon, 07 Aug 2006 17:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/hszdz/articles/62261.html</guid><description><![CDATA[ <p>很多办法可以让Tomcat在系l启动的时候自动运行,我这里介l两U方法,一U简单,另外一U复杂而专业。在介绍q两个方法前你应该先装JDK, Tomcat。Tomcat的安装很单,下蝲二进制压~包 xxx.tar.gz Q用 tar zxvf xxx.tar.gz -C  [target]Q[target]是安装Tomcat的目录?br />讄环境变量JDK_HOME和JAVA_HOME都指向JDK的安装目录即可?br /><br />一. 单的Ҏ<br /><br />Tomcat安装目录下的bin目录有两个脚本分别用来启动和停止TomcatQ分别是startup.sh, shutdown.shQ你可以用这两个脚本来手工启动和停止Tomcat服务q进行安装后的测试?br /><br />我们最单的Ҏ是通过startup.sh来自动启动TomcatQ编?etc/rc.d/rc.local 增加内容(假设JDK目录?usr/jdkQTomcat目录?apache/tomcat)<br />export JDK_HOME=/usr/jdk<br />export JAVA_HOME=/usr/jdk<br />/apache/tomcat/bin/startup.sh<br /><br />q样在系l重启后可以自动启动Tomcat<br /><br />? 复杂而专业的Ҏ<br /><br />前面介绍的应该是最单的让Tomcat自动启动的方法了Q但是它有两个不?br /><br />1. 无法指定启动Tomcat服务的用P会导致Tomcat已超U用戯行,存在重大的安全隐?br />2. pȝ关闭的时候无法自动停止Tomcat服务<br /><br />在Linux下,Tomcat可以作ؓ一个守护进E来启动以及停止Q这个必d助于项目commons-daemon中的jsvc工具。Tomcat安装完后带有这个工L源码{tomcat}/bin/jsvc.tar.gz。按照下列命令安装这个工P<br /><br />解压: tar zxvf jsvc.tar.gz<br />配置: cd jsvc-src<br />        chmod +x configure<br />       ./configure --with-java=/usr/jdk<br />~译: make<br />? ./jsvc -help<br /><br />jsvc工具本n带了一个脚?在native目录?用来启动和停止Tomcat守护q程Q但是在试验中发现该脚本无法讄动启动,昄的错误信息是Qtomcat 服务不支持 chkconfigQ因此修改了此脚?br /></p> <table class="code_head" align="center" border="0" cellpadding="0" cellspacing="0" width="100%"> <tbody> <tr> <td>E序代码Q?/td> <td align="right"> <br /> </td> </tr> </tbody> </table> <p> <br />#!/bin/sh <br /> # <br /> # Startup Script for Tomcat5 <br /> # <br /> # chkconfig: 345 87 13 <br /> # description: Tomcat Daemon <br /> # processname: jsvc <br /> # pidfile: /var/run/jsvc.pid <br /> # config: <br /> # <br /> # Source function library.<br /> . /etc/rc.d/init.d/functions <br /> # <br /> prog=tomcat <br /> # <br /> # Small shell script to show how to start/stop Tomcat using jsvc <br /> # If you want to have Tomcat running on port 80 please modify the server.xml <br /> # file: <br /> # <br /> # <!-- Define a non-SSL HTTP/1.1 Connector on port 80 --> <br /> # <Connector className="org.apache.catalina.connector.http.HttpConnector" <br /> # port="80" minProcessors="5" maxProcessors="75" <br /> # enableLookups="true" redirectPort="8443" <br /> # acceptCount="10" debug="0" connectionTimeout="60000"/> <br /> # <br /> # You need a developement version of Tomcat (Apache Tomcat/4.1-dev) <br /> # <br /> # Adapt the following lines to your configuration <br /><br /> JAVA_HOME=/usr/j2sdk<br /> CATALINA_HOME=/usr/tomcat<br /> DAEMON_HOME=$CATALINA_HOME/bin/jsvc-src <br /> TOMCAT_USER=tomcat5<br /> TMP_DIR=/var/tmp <br /> CATALINA_OPTS= <br /> CLASSPATH=$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar<br /><br /> start(){ <br /> echo -n $"Starting $prog: " <br />     #<br />     # Start Tomcat<br />     #<br />     $DAEMON_HOME/jsvc \<br />     -user $TOMCAT_USER \<br />     -home $JAVA_HOME \<br />     -Dcatalina.home=$CATALINA_HOME \<br />     -Djava.io.tmpdir=$TMP_DIR \<br />     -outfile $CATALINA_HOME/logs/catalina.out \<br />     -errfile '&1' \<br />     $CATALINA_OPTS \<br />     -cp $CLASSPATH \<br />     org.apache.catalina.startup.Bootstrap<br />     #<br />     # To get a verbose JVM<br />     #-verbose \<br />     # To get a debug of jsvc.<br />     #-debug \<br />     RETVAL=$? <br />     [ $RETVAL = 0 ] && touch /var/lock/subsys/jsvc <br />     [ $RETVAL = 0 ] && echo_success || echo_failure <br />     echo <br />     return $RETVAL <br /> } <br /> stop(){ <br />     echo -n $"Stopping $prog: " <br />     # <br />     # Stop Tomcat <br />     # <br />     PID=`cat /var/run/jsvc.pid` <br />     kill $PID <br />     RETVAL=$? <br />     [ $RETVAL = 0 ] && rm /var/lock/subsys/jsvc <br />     [ $RETVAL = 0 ] && echo_success || echo_failure <br />     echo <br />     return $RETVAL <br /> } <br /><br /> case "$1" in <br /> start) <br /> start <br /> ;; <br /><br /> stop) <br /> stop <br /> ;; <br /><br /> restart|reload) <br /> stop <br /> start <br /> ;; <br /><br /> *) <br /> echo "Usage $0 start/stop" <br /> exit 1;; <br /> esac<br /><br /></p> <p>修改下蝲的脚本里面有兌\径的信息以及要启动Tomcat的用?用户必须已存?<br />拯脚本?etc/rc.d/init.d目录下的tomcat文gQ给该脚本赋予可执行权限<br /> chown tomcat5 tomcat<br /> chmod +x tomcat<br />你可以用命?/p> <p>/etc/rc.d/init.d/tomcat start|stop </p> 来验证守护进E是否可以正常启动和停止?br /><br /> 接下来就是把q个脚本讄成系l启动时自动执行Q系l关闭时自动停止Q用如下命令:<br /> chkconfig --add tomcat<br /> 重新启动pȝ后可以启动的q程中看到Starting Tomcat ..... [OK]的信息,q样完成设|过E?img src ="http://www.aygfsteel.com/hszdz/aggbug/62261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hszdz/" target="_blank">爪哇之家</a> 2006-08-08 01:09 <a href="http://www.aygfsteel.com/hszdz/articles/62261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单的JAVA防火?/title><link>http://www.aygfsteel.com/hszdz/articles/52286.html</link><dc:creator>爪哇之家</dc:creator><author>爪哇之家</author><pubDate>Mon, 12 Jun 2006 14:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/hszdz/articles/52286.html</guid><wfw:comment>http://www.aygfsteel.com/hszdz/comments/52286.html</wfw:comment><comments>http://www.aygfsteel.com/hszdz/articles/52286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hszdz/comments/commentRss/52286.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hszdz/services/trackbacks/52286.html</trackback:ping><description><![CDATA[ <table align="center" border="0" cellpadding="3" cellspacing="1" width="90%"> <tbody> <tr> <td> <span id="wmqeeuq" class="genmed"> <b>java代码: </b> </span> </td> </tr> <tr> <td class="code"> <div style="font-family: 'Courier New',Courier,monospace;"> <br /> <span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">io</span>.<span style="color: rgb(0, 0, 0);">BufferedReader</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">io</span>.<span style="color: rgb(0, 0, 0);">InputStream</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">io</span>.<span style="color: rgb(0, 0, 0);">InputStreamReader</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">ArrayList</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">Date</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">HashMap</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">HashSet</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">Iterator</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">List</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">Map</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">Set</span>; <br /><span style="color: rgb(153, 0, 102); font-weight: bold;">import</span> java.<span style="color: rgb(0, 0, 0);">util</span>.<span style="color: rgb(0, 0, 0);">StringTokenizer</span>; <br /><br /><span style="color: rgb(102, 102, 255);">/** <br /> * @author Robbin Fan <br /> * <br /> */</span><br /><span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">class</span> IPBanner <span style="color: rgb(0, 0, 0);">{</span><br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span><span style="color: rgb(170, 170, 221);">String</span> NETSTAT = "netstat -nt"; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span><span style="color: rgb(170, 170, 221);">String</span> IP_INSERT = "iptables -I INPUT -i eth0 -j DROP -p tcp --dport <span style="color: rgb(0, 0, 0);">80</span> -s "; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span><span style="color: rgb(170, 170, 221);">String</span> IP_DEL = "iptables -D INPUT -i eth0 -j DROP -p tcp --dport <span style="color: rgb(0, 0, 0);">80</span> -s "; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span><span style="color: rgb(170, 170, 221);">String</span> HOST_IP = "<span style="color: rgb(0, 0, 0);">61</span>.<span style="color: rgb(0, 0, 0);">129</span>.<span style="color: rgb(0, 0, 0);">70</span>.<span style="color: rgb(0, 0, 0);">239</span>:<span style="color: rgb(0, 0, 0);">80</span>"; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span> long BAN_TIMEOUT = <span style="color: rgb(0, 0, 0);">30</span> * <span style="color: rgb(0, 0, 0);">60</span> * 1000L; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span> long BAN_INTERVAL = <span style="color: rgb(0, 0, 0);">30</span> * 1000L; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span><span style="color: rgb(153, 0, 102); font-weight: bold;">int</span> CONCURRENT = <span style="color: rgb(0, 0, 0);">80</span>; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span><span style="color: rgb(153, 0, 102); font-weight: bold;">int</span> SYN_CONCURRENT = <span style="color: rgb(0, 0, 0);">8</span>; <br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">final</span><span style="color: rgb(170, 170, 221);">Map</span> banMap = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">HashMap</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br /><br />         <br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">void</span> ban<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(153, 0, 102); font-weight: bold;">throws</span><span style="color: rgb(170, 170, 221);">Exception</span><span style="color: rgb(0, 0, 0);">{</span><br /><br />                 <span style="color: rgb(170, 170, 221);">Set</span> banList = dynamicBanIP<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">out</span>.<span style="color: rgb(0, 0, 0);">println</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">out</span>.<span style="color: rgb(0, 0, 0);">println</span><span style="color: rgb(0, 0, 0);">(</span>"<span style="color: rgb(170, 170, 221);">Time</span>: " + <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Date</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">Runtime</span> runtime = <span style="color: rgb(170, 170, 221);">Runtime</span>.<span style="color: rgb(0, 0, 0);">getRuntime</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br /><br />                 <span style="color: rgb(170, 170, 221);">List</span> expiredIPList = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">ArrayList</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Iterator</span> iter = banMap.<span style="color: rgb(0, 0, 0);">entrySet</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">iterator</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; iter.<span style="color: rgb(0, 0, 0);">hasNext</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>;<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                         <span style="color: rgb(170, 170, 221);">Map</span>.<span style="color: rgb(0, 0, 0);">Entry</span> entry = <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Map</span>.<span style="color: rgb(0, 0, 0);">Entry</span><span style="color: rgb(0, 0, 0);">)</span> iter.<span style="color: rgb(0, 0, 0);">next</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">currentTimeMillis</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> - <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Long</span><span style="color: rgb(0, 0, 0);">)</span> entry.<span style="color: rgb(0, 0, 0);">getValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">longValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span> > BAN_TIMEOUT<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                 expiredIPList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span>entry.<span style="color: rgb(0, 0, 0);">getKey</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(0, 0, 0);">}</span><br />                 <span style="color: rgb(0, 0, 0);">}</span><br />                 <br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">int</span> i = <span style="color: rgb(0, 0, 0);">0</span>; i <expiredIPList.<span style="color: rgb(0, 0, 0);">size</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; i++<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                         runtime.<span style="color: rgb(0, 0, 0);">exec</span><span style="color: rgb(0, 0, 0);">(</span>IP_DEL + expiredIPList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">out</span>.<span style="color: rgb(0, 0, 0);">println</span><span style="color: rgb(0, 0, 0);">(</span>"DEL IP: " + expiredIPList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         banMap.<span style="color: rgb(0, 0, 0);">remove</span><span style="color: rgb(0, 0, 0);">(</span>expiredIPList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(0, 0, 0);">}</span><br />                 <br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Iterator</span> iter = banList.<span style="color: rgb(0, 0, 0);">iterator</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; iter.<span style="color: rgb(0, 0, 0);">hasNext</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>;<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                         <span style="color: rgb(170, 170, 221);">String</span> ip = <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">String</span><span style="color: rgb(0, 0, 0);">)</span> iter.<span style="color: rgb(0, 0, 0);">next</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span>!banMap.<span style="color: rgb(0, 0, 0);">containsKey</span><span style="color: rgb(0, 0, 0);">(</span>ip<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                 runtime.<span style="color: rgb(0, 0, 0);">exec</span><span style="color: rgb(0, 0, 0);">(</span>IP_INSERT + ip<span style="color: rgb(0, 0, 0);">)</span>; <br />                                 banMap.<span style="color: rgb(0, 0, 0);">put</span><span style="color: rgb(0, 0, 0);">(</span>ip, <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Long</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">currentTimeMillis</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                 <span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">out</span>.<span style="color: rgb(0, 0, 0);">println</span><span style="color: rgb(0, 0, 0);">(</span>"BAN IP:" + ip<span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(0, 0, 0);">}</span><br />                 <span style="color: rgb(0, 0, 0);">}</span><br /><br />                 <span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">out</span>.<span style="color: rgb(0, 0, 0);">println</span><span style="color: rgb(0, 0, 0);">(</span>"---ban ip list---"<span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Iterator</span> iter = banMap.<span style="color: rgb(0, 0, 0);">keySet</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">iterator</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; iter.<span style="color: rgb(0, 0, 0);">hasNext</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>;<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                         <span style="color: rgb(170, 170, 221);">String</span> ip = <span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">String</span><span style="color: rgb(0, 0, 0);">)</span> iter.<span style="color: rgb(0, 0, 0);">next</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(170, 170, 221);">System</span>.<span style="color: rgb(0, 0, 0);">out</span>.<span style="color: rgb(0, 0, 0);">println</span><span style="color: rgb(0, 0, 0);">(</span>ip<span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(0, 0, 0);">}</span><br />         <span style="color: rgb(0, 0, 0);">}</span><br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(170, 170, 221);">Set</span> dynamicBanIP<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(153, 0, 102); font-weight: bold;">throws</span><span style="color: rgb(170, 170, 221);">Exception</span><span style="color: rgb(0, 0, 0);">{</span><br />                 <span style="color: rgb(170, 170, 221);">String</span> ipstat = <span style="color: rgb(153, 0, 102); font-weight: bold;">null</span>; <br />                 <span style="color: rgb(170, 170, 221);">Set</span> banList = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">HashSet</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">List</span> ipList = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">ArrayList</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">List</span> countList = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">ArrayList</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">List</span> synCountList = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">ArrayList</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">List</span> finCountList = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">ArrayList</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br /><br />                 <span style="color: rgb(170, 170, 221);">Runtime</span> runtime = <span style="color: rgb(170, 170, 221);">Runtime</span>.<span style="color: rgb(0, 0, 0);">getRuntime</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">Process</span> process = runtime.<span style="color: rgb(0, 0, 0);">exec</span><span style="color: rgb(0, 0, 0);">(</span>NETSTAT<span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">InputStream</span> input = process.<span style="color: rgb(0, 0, 0);">getInputStream</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">InputStreamReader</span> inputReader = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">InputStreamReader</span><span style="color: rgb(0, 0, 0);">(</span>input<span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(170, 170, 221);">BufferedReader</span> reader = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">BufferedReader</span><span style="color: rgb(0, 0, 0);">(</span>inputReader<span style="color: rgb(0, 0, 0);">)</span>; <br />                 reader.<span style="color: rgb(0, 0, 0);">readLine</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 reader.<span style="color: rgb(0, 0, 0);">readLine</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">while</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span>ipstat = reader.<span style="color: rgb(0, 0, 0);">readLine</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span> != <span style="color: rgb(153, 0, 102); font-weight: bold;">null</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                         <span style="color: rgb(170, 170, 221);">StringTokenizer</span> token = <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">StringTokenizer</span><span style="color: rgb(0, 0, 0);">(</span>ipstat<span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(153, 0, 102); font-weight: bold;">while</span><span style="color: rgb(0, 0, 0);">(</span>token.<span style="color: rgb(0, 0, 0);">hasMoreTokens</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                 token.<span style="color: rgb(0, 0, 0);">nextToken</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                 token.<span style="color: rgb(0, 0, 0);">nextToken</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                 token.<span style="color: rgb(0, 0, 0);">nextToken</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                 <span style="color: rgb(170, 170, 221);">String</span> originalIP = token.<span style="color: rgb(0, 0, 0);">nextToken</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                 <span style="color: rgb(170, 170, 221);">String</span> ip = token.<span style="color: rgb(0, 0, 0);">nextToken</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">split</span><span style="color: rgb(0, 0, 0);">(</span>":"<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">]</span>; <br />                                 <span style="color: rgb(170, 170, 221);">String</span> status = token.<span style="color: rgb(0, 0, 0);">nextToken</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br /><br />                                 <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span>HOST_IP.<span style="color: rgb(0, 0, 0);">equals</span><span style="color: rgb(0, 0, 0);">(</span>originalIP<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                        <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span>!ipList.<span style="color: rgb(0, 0, 0);">contains</span><span style="color: rgb(0, 0, 0);">(</span>ip<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                 ipList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span>ip<span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 countList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span>"SYN_RECV".<span style="color: rgb(0, 0, 0);">equals</span><span style="color: rgb(0, 0, 0);">(</span>status<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                         synCountList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(0, 0, 0);">}</span><span style="color: rgb(153, 0, 102); font-weight: bold;">else</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                         synCountList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(0, 0, 0);">}</span><br />                                                 <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span>"FIN_WAIT1".<span style="color: rgb(0, 0, 0);">equals</span><span style="color: rgb(0, 0, 0);">(</span>status<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                         finCountList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(0, 0, 0);">}</span><span style="color: rgb(153, 0, 102); font-weight: bold;">else</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                         finCountList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(0, 0, 0);">}</span><br />                                         <span style="color: rgb(0, 0, 0);">}</span><span style="color: rgb(153, 0, 102); font-weight: bold;">else</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                 <span style="color: rgb(153, 0, 102); font-weight: bold;">int</span> index = ipList.<span style="color: rgb(0, 0, 0);">indexOf</span><span style="color: rgb(0, 0, 0);">(</span>ip<span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 countList.<span style="color: rgb(0, 0, 0);">set</span><span style="color: rgb(0, 0, 0);">(</span>index, <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">)</span> countList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>index<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">intValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> + <span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span>"SYN_RECV".<span style="color: rgb(0, 0, 0);">equals</span><span style="color: rgb(0, 0, 0);">(</span>status<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                         synCountList.<span style="color: rgb(0, 0, 0);">set</span><span style="color: rgb(0, 0, 0);">(</span>index, <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">)</span> synCountList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>index<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">intValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> + <span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(0, 0, 0);">}</span><br />                                                 <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span>"FIN_WAIT1".<span style="color: rgb(0, 0, 0);">equals</span><span style="color: rgb(0, 0, 0);">(</span>status<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                                                         finCountList.<span style="color: rgb(0, 0, 0);">set</span><span style="color: rgb(0, 0, 0);">(</span>index, <span style="color: rgb(153, 0, 102); font-weight: bold;">new</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">)</span> finCountList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>index<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">intValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> + <span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                                                 <span style="color: rgb(0, 0, 0);">}</span><br />                                         <span style="color: rgb(0, 0, 0);">}</span><br />                                 <span style="color: rgb(0, 0, 0);">}</span><br />                         <span style="color: rgb(0, 0, 0);">}</span><br />                 <span style="color: rgb(0, 0, 0);">}</span><br />                 reader.<span style="color: rgb(0, 0, 0);">close</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 inputReader.<span style="color: rgb(0, 0, 0);">close</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 input.<span style="color: rgb(0, 0, 0);">close</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 process.<span style="color: rgb(0, 0, 0);">destroy</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">int</span> i = <span style="color: rgb(0, 0, 0);">0</span>; i < ipList.<span style="color: rgb(0, 0, 0);">size</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; i++<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                         <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">)</span> countList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">intValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> > CONCURRENT<span style="color: rgb(0, 0, 0);">)</span><br />                                 banList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span>ipList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">)</span> synCountList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">intValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> > SYN_CONCURRENT<span style="color: rgb(0, 0, 0);">)</span><br />                                 banList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span>ipList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(153, 0, 102); font-weight: bold;">if</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">Integer</span><span style="color: rgb(0, 0, 0);">)</span> finCountList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>.<span style="color: rgb(0, 0, 0);">intValue</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span> > SYN_CONCURRENT<span style="color: rgb(0, 0, 0);">)</span><br />                                 banList.<span style="color: rgb(0, 0, 0);">add</span><span style="color: rgb(0, 0, 0);">(</span>ipList.<span style="color: rgb(0, 0, 0);">get</span><span style="color: rgb(0, 0, 0);">(</span>i<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(0, 0, 0);">}</span><br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">return</span> banList; <br />         <span style="color: rgb(0, 0, 0);">}</span><br /><br />         <span style="color: rgb(153, 0, 102); font-weight: bold;">public</span><span style="color: rgb(153, 0, 102); font-weight: bold;">static</span><span style="color: rgb(153, 0, 102); font-weight: bold;">void</span> main<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(170, 170, 221);">String</span><span style="color: rgb(0, 0, 0);">[</span><span style="color: rgb(0, 0, 0);">]</span> args<span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(153, 0, 102); font-weight: bold;">throws</span><span style="color: rgb(170, 170, 221);">Exception</span><span style="color: rgb(0, 0, 0);">{</span><br />                 <span style="color: rgb(153, 0, 102); font-weight: bold;">while</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(153, 0, 102); font-weight: bold;">true</span><span style="color: rgb(0, 0, 0);">)</span><span style="color: rgb(0, 0, 0);">{</span><br />                         ban<span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">)</span>; <br />                         <span style="color: rgb(170, 170, 221);">Thread</span>.<span style="color: rgb(0, 0, 0);">sleep</span><span style="color: rgb(0, 0, 0);">(</span>BAN_INTERVAL<span style="color: rgb(0, 0, 0);">)</span>; <br />                 <span style="color: rgb(0, 0, 0);">}</span><br />         <span style="color: rgb(0, 0, 0);">}</span><br /><span style="color: rgb(0, 0, 0);">}</span></div> <br /> </td> </tr> </tbody> </table> <span id="wmqeeuq" class="postbody"> 控制服务的脚本ban.sh <br /><br /></span> <table align="center" border="0" cellpadding="3" cellspacing="1" width="90%"> <tbody> <tr> <td> <span id="wmqeeuq" class="genmed"> <b>java代码: </b> </span> </td> </tr> <tr> <td class="code"> <div style="font-family: 'Courier New',Courier,monospace;"> <br /> #!/bin/sh <br /><br /> cd /root/bin <br /><br /><span style="color: rgb(153, 0, 102); font-weight: bold;">case</span> "$<span style="color: rgb(0, 0, 0);">1</span>" in <br /><br />   start<span style="color: rgb(0, 0, 0);">)</span>          <br />                 nohup /usr/local/jdk1.<span style="color: rgb(0, 0, 0);">5</span>.<span style="color: rgb(0, 0, 0);">0</span>_<span style="color: rgb(0, 0, 0);">05</span>/bin/java -client IPBanner > ban.<span style="color: rgb(0, 0, 0);">log</span><span style="color: rgb(0, 0, 0);">2</span>>&<span style="color: rgb(0, 0, 0);">1</span> & <br />                 echo $! > ban.<span style="color: rgb(0, 0, 0);">pid</span><br />         ;; <br /><br />   stop<span style="color: rgb(0, 0, 0);">)</span><br />         kill `cat ban.<span style="color: rgb(0, 0, 0);">pid</span>` <br />         rm -rf ban.<span style="color: rgb(0, 0, 0);">pid</span><br />         ;; <br /><br />   restart<span style="color: rgb(0, 0, 0);">)</span><br />                   $<span style="color: rgb(0, 0, 0);">0</span> stop <br />                   sleep <span style="color: rgb(0, 0, 0);">1</span><br />                   $<span style="color: rgb(0, 0, 0);">0</span> start <br />                   ;; <br />   <br />   *<span style="color: rgb(0, 0, 0);">)</span><br />                   echo "Usage: ban.<span style="color: rgb(0, 0, 0);">sh</span><span style="color: rgb(0, 0, 0);">{</span>start|stop|restart<span style="color: rgb(0, 0, 0);">}</span>" <br />                   ;; <br />   <br /> esac <br /><br /> exit <span style="color: rgb(0, 0, 0);">0</span></div> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/hszdz/aggbug/52286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hszdz/" target="_blank">爪哇之家</a> 2006-06-12 22:04 <a href="http://www.aygfsteel.com/hszdz/articles/52286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用VI快捷?/title><link>http://www.aygfsteel.com/hszdz/articles/50052.html</link><dc:creator>爪哇之家</dc:creator><author>爪哇之家</author><pubDate>Fri, 02 Jun 2006 12:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/hszdz/articles/50052.html</guid><wfw:comment>http://www.aygfsteel.com/hszdz/comments/50052.html</wfw:comment><comments>http://www.aygfsteel.com/hszdz/articles/50052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hszdz/comments/commentRss/50052.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hszdz/services/trackbacks/50052.html</trackback:ping><description><![CDATA[ <br /> Ud<br /><br />            k (上行) <br /> h (左移)            l (右移)<br />            j (下行)          <br /> 0行头 $行尾 e 单词l尾 w单词开?Ctrl+e H口内容向下Ud Ctrl+yH口内容向上Ud<br /> Ctrl-g 昄当前光标所在位|和文g状态信息?br /> Shift-G 用于光标蟩转至文g最后一行?br /> LineNumber Shift-G 光标移动至该行号代表的?br /><br /> 字符~辑<br /><br /> i 在当前位|开始编?br /> a 在当前位|之后开始编?br /> x 删除光标所在位|的字符<br /> A 在当前行末尾开始编?br /> dw 从当前光标删除至单字/单词末尾<br /> d$ 从当前光标删除至当前行末?br /> dd 删除整行<br /> u 撤消以前的操?br /> U 撤消在一行中所做的改动<br /> CTRL-R    撤消以前的撤消命令,恢复以前的操作结?br /> p 重新|入已经删除的文本内?br /> r 替换光标所在位|的字符<br /> cw 替换当前光标到单词的末尾的内?br /> c$ 替换当前光标到行末的内容<br /> 写?o 在光标下Ҏ开新的一行ƈ光标置于新开的行首,q入插入模式<br /> 大写?O 在光标上Ҏ开新的一行ƈ光标置于新开的行首,q入插入模式<br /> 写?a 在光标所在位|之后插入文?br /> 大写?A 在光标所在行的行末之后插入文?br /> 大写?R q入替换模式Q直x <ESC> 键退出替换模式而进入正常模式?br /> %  光标移动到配对的括号上<br /><br /> 搜烦替换<br /><br />    输入 / 然后紧随一个字W串是则是在当前所~辑的文档中向后查找该字W串?br />      输入问号 ? 然后紧随一个字W串是则是在当前所~辑的文档中向前查找该字<br />      W串。完成一ơ查找之后按 n 键则是重复上一ơ的命oQ可在同一方向上查<br />      找下一个字W串所在;或者按 Shift-N 向相反方向查找下该字W串所在?br /><br /><br />    在一行内替换头一个字W串 old 为新的字W串 newQ请输入  :s/old/new<br />      在一行内替换所有的字符?old 为新的字W串 newQ请输入  :s/old/new/g<br />      在两行内替换所有的字符?old 为新的字W串 newQ请输入  :#,#s/old/new/g<br />      在文件内替换所有的字符?old 为新的字W串 newQ请输入  :%s/old/new/g<br />      q行全文替换时询问用L认每个替换需d c 选项Q请输入 :%s/old/new/gc<br /><br /> 命o格式<br /><br />    在正常模式下一个命令的格式是∶<br /><br />        [number]   command   object     或者   ?command    [number]   object<br />      其意是∶<br />        number - 代表的是命o执行的次?br />        command - 代表要做的事情,比如 d 代表删除<br />        object - 代表要操作的对象Q比?w 代表单字/单词Q? 代表到行末等{?br /><br /><br /> 文g操作<br /><br />   :w FILENAME  可将当前 VIM 中正在编辑的文g保存到名?FILENAME 的文<br />      件中?br /><br />   :#,#w FILENAME 可将当前~辑文gW?# 行至W?# 行的内容保存到文?br />      FILENAME 中?br /><br />   :r FILENAME 可提取磁盘文?FILENAME q将其插入到当前文g的光标位|?br />      后面?br /><img src ="http://www.aygfsteel.com/hszdz/aggbug/50052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hszdz/" target="_blank">爪哇之家</a> 2006-06-02 20:25 <a href="http://www.aygfsteel.com/hszdz/articles/50052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>llinuxd新硬?/title><link>http://www.aygfsteel.com/hszdz/articles/50039.html</link><dc:creator>爪哇之家</dc:creator><author>爪哇之家</author><pubDate>Fri, 02 Jun 2006 11:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/hszdz/articles/50039.html</guid><wfw:comment>http://www.aygfsteel.com/hszdz/comments/50039.html</wfw:comment><comments>http://www.aygfsteel.com/hszdz/articles/50039.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/hszdz/comments/commentRss/50039.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/hszdz/services/trackbacks/50039.html</trackback:ping><description><![CDATA[ <font id="zoom" class="f14">在服务器上把盘接好Q启动linuxQ以root登陆? <br /><br />比如我新加一块SCSI盘Q需要将其分成三个区Q? <br /><pre><br />#fdisk /dev/sdb<br /><br />q入fdisk模式Q?br /><br />Command (m for help):p  //查看新硬盘的分区<br /><br />Command (m for help):n  //创徏新分?br /><br /><br /><br />可以用m命o来看fdisk命o的内部命令;n命o创徏一个新分区Qd命o删除一个存在的分区Qp命o昄分区列表Qt命o修改分区的类型IDPl命o昄分区IDL列表Qa命o指定启动分区Qw命o是将对分的修改存盘让它发生作用。?br /><br /><br /><br />Command action<br /><br />   e   extended   //输入e为创建扩展分?br /><br />   p   primary partition (1-4)   //输入p为创Z分区Q这里我们选择p<br /><br /><br /><br />Partion number(1-4)Q?  //W一个扩展分区,按你需求可以最多分4个主分区<br /><br />First Cylinder(1-1014,default 1):  1  //W一个主分区起始的磁盘块?br /><br />Last cylindet or +siza or +sizeM or +sizeK: +1024MB  //可以是以MB为单位的数字或者以<br /><br /><br /><br />盘块数Q这里我们输?1024MB表示分区大小?G?br /><br /></pre><br /><br />q样我们创建完一个分区,如果要创建更多分区可以照上面的步骤l创建? <br /><br />创徏完后用w保存分区? <br /><pre><br />Command (m for help): w<br /><br />The partition table has been altered!<br /><br /><br /><br />Calling ioctl() to re-read partition table.<br /><br />Syncing disks.<br /><br /></pre><br />q样分区完Q我们还要进行格式化 <br /><pre><br />#mkfs -t ext3 -c /dev/sdb1  //如果有多个分区,则分Z改ؓsdb2q样<br /><br /></pre><br />格式化完后我们需要进行挂载分区, <br /><pre><br />#mkdir www //创徏/www目录Q我们将把新的分区挂到www?br /><br />#mount /dev/sdb1 /www  //?dev/sdb1挂蝲?www<br /><br /># df  //用df命oq行查看<br /><br />Filesystem           1K-blocks      Used Available Use% Mounted on<br /><br />/dev/sda2              3771316   1388956   2190788  39% /<br /><br />/dev/sda1               101089      9463     86407  10% /boot<br /><br />none                     62988         0     62988   0% /dev/shm<br /><br />/dev/sdb1               485906      8239    452580   2% /www  //看到了,q就是我们刚<br /><br /><br /><br />才新挂蝲的分?br /><br /></pre><br /><br />到这里我们工作已接近֣了,不过我们如果q样q束的话,我们每次重新启动服务器后都要 <br /><br />q行手工挂蝲Q这样很ȝQ我们需要修?etc/fstab文g来进行自动挂载? <br /><pre><br />#vi /etc/fstab<br /><br /></pre><br />在文件的末尾填加如下内容Q? <br /><pre><br />/dev/sdb1               /www                    ext3    defaults        1 2<br /><br /></pre><br />如有多个分区可修改sdb1?wwwQ修改完后保存,重v服务器? <br /><br />到此我们d新硬盘的工作l束了?/font> <img src ="http://www.aygfsteel.com/hszdz/aggbug/50039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/hszdz/" target="_blank">爪哇之家</a> 2006-06-02 19:00 <a href="http://www.aygfsteel.com/hszdz/articles/50039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank">º</a>| <a href="http://" target="_blank">齭</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ǽ</a>| <a href="http://" target="_blank">ͼľ</a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϊ</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">山</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ԫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">DZ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ݳ</a>| <a href="http://" target="_blank">촨</a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">Ӧ</a>| <a href="http://" target="_blank">ͻȪ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">»Ȱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϰ</a>| <a href="http://" target="_blank">â</a>| <a href="http://" target="_blank">ƽ½</a>| <a href="http://" target="_blank">IJ</a>| <a href="http://" target="_blank">Ƹ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>