关于作者

姓名:吴丁

性别:男

出生日期:1983-09-01

地区:浙江-杭州

联系电话:

QQ:1995348婚否:未婚
用户名:banbadao
笔名:小丁丁
地区: 浙江-杭州
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



我的收藏

访问统计:
文章个数:23
评论个数:24
留言条数:0




Powered by BlogDriver 2.1

代码时代

 

The Internet is the worldwide, publicly accessible network of interconnected computer networks that transmit data by ... The most prevalent language for communication on the Internet is English. This may be a result of the Internet's ...

文章

网管必看之限制用户擅自更改ip的方法


为了防止局域网用户随意更改工作站IP地址,我们可以按照如下操作步骤对IP地址进行“加锁”限制。
    考虑到工作站的IP地址与Windows系统中的动态链接文件Netcfgx.dll、Netman.dll以及Netshell.dll有关,这些文件其实都是计算机系统的控件,在初始安装Windows操作系统时这些控件将被自动注册。当我们要对工作站的IP地址进行修改时,就会调用到上面几个系统控件文件。所以,我们只要想办法将前面几个系统控件文件卸载掉,就能将本地的网络连接窗口屏蔽掉了,那样一来我们日后无论是双击控制面板中的“网络连接”选项还是单击系统开始菜单中的“网络连接”命令,都无法打开本地网络连接窗口,这样的话普通用户就不能进入TCP/IP属性设置界面来随意修改工作站IP地址了。
    在卸载动态链接文件Netcfgx.dll、Netman.dll以及Netshell.dll时,可以依次单击“开始”/“运行”命令,在弹出的系统运行框中,输入字符串命令“Cmd.exe”,单击回车键后将系统屏幕切换到MS-DOS窗口;接着在DOS命令行提示符下,输入字符串命令“Regsvr32 /u Netcfgx.dll”,单击回车键后系统就能自动将Netcfgx.dll反注册掉了;同样地,在DOS命令行提示符下再依次执行“Regsvr32 /u Netshell.dll”、“Regsvr32 /u Netman.dll”字符串命令,来逐一地将Netshell.dll、Netman.dll控件文件反注册掉。当完成所有控件文件的反注册操作后,我们再次尝试进入TCP/IP属性设置界面来随意修改工作站IP地址时,就发现无法打开本地网络连接窗口了
自由风PS:如果你想启用上述功能的话,就得重新注册:
方法:regsvr32 /s netman.dll
regsvr /s netcfgx.dll
regsvr /s netshell.dll

- 作者: 小丁丁 2008年01月9日, 星期三 11:05  回复(1) |  引用(0) 加入博采

Google's BigTable 原理

    题记:google 的成功除了一个个出色的创意外,还因为有 Jeff Dean 这样的软件架构天才。

                                                  ------ 编者

官方的 Google Reader blog 中有对BigTable 的解释。这是Google 内部开发的一个用来处理大数据量的系统。这种系统适合处理半结构化的数据比如 RSS 数据源。 以下发言  是 Andrew Hitchcock  在 2005 年10月18号 基于: Google 的工程师 Jeff Dean 在华盛顿大学的一次谈话 (Creative Commons License).

 


首先,BigTable 从 2004 年初就开始研发了,到现在为止已经用了将近8个月。(2005年2月)目前大概有100个左右的服务使用BigTable,比如: Print,Search History,Maps和 Orkut。根据Google的一贯做法,内部开发的BigTable是为跑在廉价的PC机上设计的。BigTable 让Google在提供新服务时的运行成本降低,最大限度地利用了计算能力。BigTable 是建立在 GFS ,Scheduler ,Lock Service 和 MapReduce 之上的。

每个Table都是一个多维的稀疏图 sparse map。Table 由行和列组成,并且每个存储单元 cell 都有一个时间戳。在不同的时间对同一个存储单元cell有多份拷贝,这样就可以记录数据的变动情况。在他的例子中,行是URLs ,列可以定义一个名字,比如:contents。Contents 字段就可以存储文件的数据。或者列名是:”language”,可以存储一个“EN”的语言代码字符串。

为了管理巨大的Table,把Table根据行分割,这些分割后的数据统称为:Tablets。每个Tablets大概有 100-200 MB,每个机器存储100个左右的 Tablets。底层的架构是:GFS。由于GFS是一种分布式的文件系统,采用Tablets的机制后,可以获得很好的负载均衡。比如:可以把经常响应的表移动到其他空闲机器上,然后快速重建。

Tablets在系统中的存储方式是不可修改的 immutable 的SSTables,一台机器一个日志文件。当系统的内存满后,系统会压缩一些Tablets。由于Jeff在论述这点的时候说的很快,所以我没有时间把听到的都记录下来,因此下面是一个大概的说明:

压缩分为:主要和次要的两部分。次要的压缩仅仅包括几个Tablets,而主要的压缩时关于整个系统的压缩。主压缩有回收硬盘空间的功能。Tablets的位置实际上是存储在几个特殊的BigTable的存储单元cell中。看起来这是一个三层的系统。

客户端有一个指向METAO的Tablets的指针。如果METAO的Tablets被频繁使用,那个这台机器就会放弃其他的tablets专门支持METAO这个Tablets。METAO tablets 保持着所有的META1的tablets的记录。这些tablets中包含着查找tablets的实际位置。(老实说翻译到这里,我也不太明白。)在这个系统中不存在大的瓶颈,因为被频繁调用的数据已经被提前获得并进行了缓存。

    现在我们返回到对 列的说明:列是类似下面的形式: family:optional_qualifier。在他的例子中,行:www.search-analysis.com  也许有列:”contents:其中包含html页面的代码。 “ anchor:cnn.com/news” 中包含着 相对应的url,”anchor:www.search-analysis.com/” 包含着链接的文字部分。列中包含着类型信息。

    (翻译到这里我要插一句,以前我看过一个关于万能数据库的文章,当时很激动,就联系了作者,现在回想起来,或许google的 bigtable 才是更好的方案,切不说分布式的特性,就是这种建华的表结构就很有用处。)

    注意这里说的是列信息,而不是列类型。列的信息是如下信息,一般是:属性/规则。 比如:保存n份数据的拷贝 或者 保存数据n天长等等。当 tablets 重新建立的时候,就运用上面的规则,剔出不符合条件的记录。由于设计上的原因,列本身的创建是很容易的,但是跟列相关的功能确实非常复杂的,比如上文提到的 类型和规则信息等。为了优化读取速度,列的功能被分割然后以组的方式存储在所建索引的机器上。这些被分割后的组作用于 列 ,然后被分割成不同的 SSTables。这种方式可以提高系统的性能,因为小的,频繁读取的列可以被单独存储,和那些大的不经常访问的列隔离开来。

在一台机器上的所有的 tablets 共享一个log,在一个包含1亿的tablets的集群中,这将会导致非常多的文件被打开和写操作。新的log块经常被创建,一般是64M大小,这个GFS的块大小相等。当一个机器down掉后,控制机器就会重新发布他的log块到其他机器上继续进行处理。这台机器重建tablets然后询问控制机器处理结构的存储位置,然后直接对重建后的数据进行处理。

这个系统中有很多冗余数据,因此在系统中大量使用了压缩技术。

    Dean 对压缩的部分说的很快,我没有完全记下来,所以我还是说个大概吧:压前先寻找相似的 行,列,和时间 数据。

    他们使用不同版本的: BMDiff 和 Zippy 技术。

   BMDiff 提供给他们非常快的写速度: 100MB/s – 1000MB/s 。Zippy 是和 LZW 类似的。Zippy 并不像 LZW 或者 gzip 那样压缩比高,但是他处理速度非常快。

    Dean 还给了一个关于压缩 web 蜘蛛数据的例子。这个例子的蜘蛛 包含 2.1B 的页面,行按照以下的方式命名:“com.cnn.www/index.html:http”.在未压缩前的web page 页面大小是:45.1 TB ,压缩后的大小是:4.2 TB , 只是原来的 9.2%。Links 数据压缩到原来的 13.9% , 链接文本数据压缩到原来的 12.7%。

Google 还有很多没有添加但是已经考虑的功能。

    1.  数据操作表达式,这样可以把脚本发送到客户端来提供修改数据的功能。
    2. 多行数据的事物支持。
    3.  提高大数据存储单元的效率。
    4. BigTable 作为服务运行。
    好像:每个服务比如: maps 和 search history 历史搜索记录都有他们自己的集群运行 BigTable。
    他们还考虑运行一个全局的 BigTable 系统,但这需要比较公平的分割资源和计算时间。

原文地址:
http://blog.csdn.net/accesine960/archive/2006/02/09/595628.aspx

- 作者: 小丁丁 2007年05月21日, 星期一 22:47  回复(1) |  引用(1) 加入博采

Linux下Tomcat与Apache Web服务器的整合

1、        引言
基于Web技术的Internet/Intranet近年来已经得到了广泛的应用,Intranet是以TCP/IP协议为基础、以Web为核心的企业内部网,用户通过低成本、简单易用的客户浏览器就能随时随地到企业的Web站点上查阅自己所需的数据。浏览器客户端操作界面的一致性避免了C/S模式客户端程序的多样性,而服务器端的开放和基于标准的连接方案使企业很方便地通过Internet同外界联系;同时,Web信息动态的、交互式的发布方式从根本上改变了企业的服务质量,增加了企业的商业机会。
在许多用户看来,一个Web网站的成败主要在于它所提供的内容和功能,而支持这些内容和功能的Web服务器起着非常重要的作用。

2、        Tomcat容器
Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。
Tomcat是稳固的独立的Web服务器与Servlet Container,不过,其Web服务器的功能则不如许多更健全的Web服务器完整,如Apache Web服务器(举例来说,Tomcat没有大量的选择性模块)。不过,Tomcat是自由的开源软件,而且有许多高手致力于其发展。

2.1 Linux下安装Tomcat
        在安装Tomcat之前需要安装j2sdk(Java 2 Software Development Kit),安装j2sdk的步骤如下:
1)到http://www.java.sun.com下载j2sdk ,如j2sdk-1_4_2_04-linux-i586-rpm.bin。

2)在终端中转到j2sdk-1_4_2_04-linux-i586-rpm.bin所在的目录,输入命令chmod +x j2sdk-1_4_2_04-linux-i586-rpm.bin,添加执行的权限。

3)执行命令./j2sdk-1_4_2_04-linux-i586-rpm.bin,生成j2sdk-1_4_2_04-linux-i586.rpm的文件。

4)执行命令chmod +x j2sdk-1_4_2_04-linux-i586.rpm,给j2sdk-1_4_2_04-linux-i586.rpm添加执行的权限。

5)执行命令 rpm –ivh j2sdk-1_4_2_04-linux-i586.rpm ,安装j2sdk。

6)安装界面会出现授权协议,按Enter键接受,把j2sd安装在/usr/java/j2sdk1.4.2_04。

7)设置环境变量,在 /etc/profile.d/目录下建立文件java.sh,文件的内容如下:
#set java environment
export JAVA_HOME=/usr/java/j2sdk1.4.2_04
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

8)执行命令chmod 755 /etc/profile.d/java.sh,给java.sh分配权限。

9)在终端中分别执行命令javac –help和java –version,如果看到有关的信息,则表示j2sdk已成功安装。

    接下来安装tomcat,安装tomcat的步骤如下:
1)访问http://jakarta.apache.org/tomcat/index.html,下载二进制版的tomcat,如jakarta-tomcat-5.5.10.tar.gz,解压到/usr/local目录:
cd /usr/local
gzip –zxvf jakarta-tomcat-5.5.10.tar.gz

2)修改$tomcat/bin/startup.sh和shutdown.sh文件,
export JAVA_HOME=/usr/java/j2sdk1.4.2_04
export CATALINA_HOME=/usr/local/tomcat-5.5.10
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:/usr/java/jdbc
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

3)执行startup.sh即可在http://localhost:8080/ 访问到tomcat的缺省面页.

2.2单独运行Tomcat的优点
1)容易架设。下载Tomcat,设定一些配置,就完成了。不需要花费时间将Web服务器的连接器整合至其它的Web服务器中。
2)不需要担心连接器。永远不需要排除在其它Web服务器与Tomcat之间的任何性能或联机方面的问题。
3)有较佳的安全防护。相对于其它以C、C++所编写的Web服务器,Tomcat比较能忍受远程缓冲区溢位的攻击。因为Tomcat的Java虚拟机是位于网络及操作系统之间,它可以防止几乎所有类型的缓冲区溢位攻击。使用Tomcat的安全防护领域,可以指定对各个资源的访问。
4)容易移植。可以将Tomcat服务器(以及应用程序)移植到不同的服务器、操作系统甚至架构上。因为Tomcat是以Java编写的,因此可以将其整个目录结构的内容复制到其它计算机上运行,而完全不需要任何改变,甚至于新的计算机的架构与原来的不同也一样。

2.3单独运行Tomcat的缺点
1)Tomcat的支持软件比较少。Tomcat内建Web服务器的支持软件比Apache httpd Web服务器少。
2)Tomcat的Web服务器功能少。相对于Tomcat Web服务器,Apache httpd服务器有更完整的功能。
3)虽然Tomcat运行速度快,但还没有Apache httpd快。Tomcat服务器比Apache httpd慢,不过,它还在改进中,而且仍然非常快,快到足以运行今日大多数的企业网站,只是在提供静态页面内容上没有Apache快。

3、        Apache Web服务器
Apache是根据NCSA的服务器发展而来的,NCSA是最早出现的Web服务器程序之一,由伊利诺斯大学Urbana-Champaign分校的美国国家超级计算应用中心开发。在发展初期,Apache主要是一个基于UNIX系统的服务器,它的宗旨就是建成一个基于UNIX系统的、功能更强、效率更高并且速度更快的WWW服务器,这就决定了它是从其他的服务器演变而来的,并且添加了大量补丁来增强它在某一方面的性能,所以它就被命名为“APA+CHy Server(一个补丁组成的服务器)”。发展到今天,Apache已经被移植到很多平台上了。
Apache的开发遵循GPL协议,由全球的志愿者一起开发和维护。在保持强大的功能及不断更新的同时,它仍然是免费的,并且公开源代码。

3.1 安装Apache服务器
可以通过以下三种方法安装Apache服务器。
1)如果安装的Linux版本中带用Apache的话,就在选择所要安装的服务器的时候,将httpd这个服务选上,Linux安装程序将自动完成Apache的安装工作,并做好基本的配置。
2)使用可执行文件软件包,这比较适合那些对编译工作不是太熟悉的初级用户,因为它相对比较简单。下载软件包apache_1.2.4.e.tar.gz ,执行命令tar xvzf apache_1.2.4.e.tar.gz 完成安装工作。如果使用的是RedHat Linux的话,也可以下载apache_1.2.4.rpm软件安装包,然后使用rpm –ivh apache_1.2.4.rpm命令安装。
3)如果想把Apache服务器充分利用起来的话,就一定要自己编译Apache 定制其功。 下载包含Apache源代码的软件包apache_1.2.4.tar.gz;然后用tar命令将它解开;将当前目录改变为Apache源代码发行版的src目录;将配置样本文件(Configuration.tmpl)复制为Configuration文件;编辑Configuration文件中的配置选项:
Makefile配置选项:一些编译选项:
. “CC=”一行指定用什么编译软件编译,一般为“CC=gcc”;如果需要将额外的标志(参数)指定给C编译软件,可以使用:
EXTRA_CFLAGS=
EXTRA_LFLAGS=
如果系统需要特殊的库和包含文件,可以在这里指定它们:
EXTRA_LIBS=
EXTRA_INCLUDES=
如果要改变代码优化设置的话,须将下面一句去掉注释,然后改成所需要的值:
#OPTIM=-O2

Rule配置选项:用来决定需要什么功能,一般情况下无需改变。

模块配置:模块是Apache的组成部分,它为Apache内核增加新功能。通过使用模块配置,可以自定义在Apache服务器中需要什么功能,这个部分也是Apache灵活性的表现。模块配置行如下所示:
AddModule modules/standard/mod_env.o
如果需要Apache服务器具备什么功能,就将那个模块用AddModule语句加到配置文件Configuration中去。
下面列出了Apache的模块功能:
模块名                         功能                                                     缺省
mod_access                 提供基于主机的访问控制命令                                     y
mod_actions                能够运行基于MIME类型的CGI脚本或HTTP请求方法                      y
mod_alias                能执行URL重定向服务                                         y
mod_asis                 使文档能在没有HTTP头标的情况下被发送到客户端                 y
mod_auth                 支持使用存储在文本文件中的用户名、口令实现认证                 y
mod_auth_dbm                   支持使用DBM文件存储基本HTTP认证                         n
mod_auth_mysql                        支持使用MySQL数据库实现基本HTTP认证                            n
mod_auth_anon                        允许以匿名方式访问需要认证的区域                            y
mod_auth_external                支持使用第三方认证                                         n
mod_autoindex                        当缺少索引文件时,自动生成动态目录列表                         y
mod_cern_meta                        提供对元信息的支持                                         n
mod_cgi                         支持CGI                                                 y
mod_dir                         能够重定向任何对不包括尾部斜杠字符命令的请求                 y
mod_env                                 使你能够将环境变量传递给CGI或SSI脚本                         n
mod_expires                 让你确定Apache在服务器响应请求时如何处理Expires                          y
mod_headers                 能够操作HTTP应答头标                                 y
mod_imap                 提供图形映射支持                                         n
mod_include                 使支持SSI                                                 n
mod_info                                 对服务器配置提供了全面的描述                                 y
mod_log_aent                         允许在单独的日志文件中存储用户代理的信息                         n
mod_log_config                        支持记录日志                                                      y
mod_log_referer                          提供了将请求中的Referer头标写入日志的功能                 n
mod_mime                 用来向客户端提供有关文档的元信息                        y
mod_negotiation                        提供了对内容协商的支持                                 y
mod_setenvif                 使你能够创建定制环境变量                                 y
mod_speling                 使你能够处理含有拼写错误或大小写错误的URL请求                     n
mod_status                 允许管理员通过WEB管理Apache                                 y
mod_unique_id         为每个请求提供在非常特殊的条件下保证是唯一的标识                               n
在src目录下执行:“. /configure”;
编译Apache:执行命令“make”;
将编译好的可执行文件httpd复制到/etc/httpd/bin目录下;将Apache发行版的配置文件:access.conf、httpd.conf、mime.types、srm.conf文件复制到/etc/httpd/conf目录下。到此为止,安装完成。

3.1单独运行Apache httpd的优点
   1)Apache httpd比Tomcat内建的Web服务器快。
   2)较多的软件支持。Apache httpd有庞大的支持软件链接库。
3)启动与停止快。一般来说,Apache httpd的启动与停止时间都比Tomcat短。

3.2单独运行Apache httpd的缺点
   1)架设比较困难。比起单独运行Tomcat,安装Apache Web服务器并让它与Tomcat协同运行要复杂很多。
   2)会拖慢动态网页内容的服务。
   3)安全漏洞。Apache httpd比较容易受到缓冲区溢位的攻击。
   4)升级比较复杂。

4、        Tomcat与Apache的整合
有几种将Tomcat整合到Apache httpd Web服务器的方法:
1)        架使用不同的端口号分担负载。
该方法是最容易实现的,只需要在现成的网页目录中假如URL以连接到在同一台Web服务器机器上的Tomcat Web服务器端口(如8080)。实际上还是执行两个完整的Web服务器程序,彼此之间并没有真正的整合。

2)        从Apache将请求发送至Tomcat的代理服务器。
该方法会在主服务器中使用HTTP的代理机制。代理机制常会用来将来自网关上运行的Web服务器的Web信息流重新路由至外部因特网上的网站。不过,也可以用来将网站区域或目录的信息流重导至Tomcat Web服务器。

3)        使用mod_jk2连接器。
该方法使用运行于现有的Apache httpd Web服务器之内的连接器模块(如mod_jk),并经由特定的协议快速地将请求转送至Tomcat。这是将Tomcat连接至Apache httpd的标准方式。

4)       单一进程中执行两个程序。
该方法通过让JVM在Apache httpd的进程空间中运行的方式,可以提供“完全整合”的功能。这是最有效的办法,但也是最依赖于服务器的实现。

【参考文献】
[1] Jason Brittain,Ian F. Darwin,Tomcat: The Definitive Guide,2003
[2] Jason Brittain,Ian F. Darwin著,O’Reilly Taiwan译,朱恩从改编,Tomcat权威指南,2004
[3]http://www.apache.org
[4]http://www.bb.gilet.edu.cn

- 作者: 小丁丁 2007年03月28日, 星期三 16:36  回复(0) |  引用(1) 加入博采

UNIX 高手的 10 个习惯
采用 10 个能够提高您的 UNIX® 命令行效率的好习惯——并在此过程中摆脱不良的使用模式。本文循序渐进地指导您学习几项用于命令行操作的技术,这些技术非常好,但是通常被忽略。了解常见错误和克服它们的方法,以便您能够确切了解为何值得采用这些 UNIX 习惯。

引言

当您经常使用某个系统时,往往会陷入某种固定的使用模式。有时,您没有养成以尽可能最好的方式做事的习惯。有时,您的不良习惯甚至会导致出现混乱。纠正此类缺点的最佳方法之一,就是有意识地采用抵制这些坏习惯的好习惯。本文提出了 10 个值得采用的 UNIX 命令行习惯——帮助您克服许多常见使用怪癖,并在该过程中提高命令行工作效率的好习惯。下面列出了这 10 个好习惯,之后对进行了更详细的描述。

采用 10 个好习惯

要采用的十个好习惯为:

  1. 在单个命令中创建目录树
  2. 更改路径;不要移动存档
  3. 将命令与控制操作符组合使用
  4. 谨慎引用变量
  5. 使用转义序列来管理较长的输入
  6. 在列表中对命令分组
  7. find 之外使用 xargs
  8. 了解何时 grep 应该执行计数——何时应该绕过
  9. 匹配输出中的某些字段,而不只是对行进行匹配
  10. 停止对 cat 使用管道

在单个命令中创建目录树

清单 1 演示了最常见的 UNIX 坏习惯之一:一次定义一个目录树。


清单 1. 坏习惯 1 的示例:单独定义每个目录树
	
~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $

使用 mkdir-p 选项并在单个命令中创建所有父目录及其子目录要容易得多。但是即使对于知道此选项的管理员,他们在命令行上创建子目录时也仍然束缚于逐步创建每级子目录。花时间有意识地养成这个好习惯是值得的:


清单 2. 好习惯 1 的示例:使用一个命令来定义目录树
~ $ mkdir -p tmp/a/b/c

您可以使用此选项来创建整个复杂的目录树(在脚本中使用是非常理想的),而不只是创建简单的层次结构。例如:


清单 3. 好习惯 1 的另一个示例:使用一个命令来定义复杂的目录树
~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

过去,单独定义目录的唯一借口是您的 mkdir 实现不支持此选项,但是在大多数系统上不再是这样了。IBM、AIX®、mkdir、GNU mkdir 和其他遵守单一 UNIX 规范 (Single UNIX Specification) 的系统现在都具有此选项。

对于仍然缺乏该功能的少数系统,您可以使用 mkdirhier 脚本(请参见参考资料),此脚本是执行相同功能的 mkdir 的包装:

~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

更改路径;不要移动存档

另一个不良的使用模式是将 .tar 存档文件移动到某个目录,因为该目录恰好是您希望在其中提取 .tar 文件的目录。其实您根本不需要这样做。您可以随心所欲地将任何 .tar 存档文件解压缩到任何目录——这就是 -C 选项的用途。在解压缩某个存档文件时,使用 -C 选项来指定要在其中解压缩该文件的目录:


清单 4. 好习惯 2 的示例:使用选项 -C 来解压缩 .tar 存档文件
~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

相对于将存档文件移动到您希望在其中解压缩它的位置,切换到该目录,然后才解压缩它,养成使用 -C 的习惯则更加可取——当存档文件位于其他某个位置时尤其如此。






将命令与控制操作符组合使用

您可能已经知道,在大多数 Shell 中,您可以在单个命令行上通过在命令之间放置一个分号 (;) 来组合命令。该分号是 Shell 控制操作符,虽然它对于在单个命令行上将离散的命令串联起来很有用,但它并不适用于所有情况。例如,假设您使用分号来组合两个命令,其中第二个命令的正确执行完全依赖于第一个命令的成功完成。如果第一个命令未按您预期的那样退出,第二个命令仍然会运行——结果会导致失败。相反,应该使用更适当的控制操作符(本文将描述其中的部分操作符)。只要您的 Shell 支持它们,就值得养成使用它们的习惯。

仅当另一个命令返回零退出状态时才运行某个命令

使用 && 控制操作符来组合两个命令,以便仅当 第一个命令返回零退出状态时才运行第二个命令。换句话说,如果第一个命令运行成功,则第二个命令将运行。如果第一个命令失败,则第二个命令根本就不运行。例如:


清单 5. 好习惯 3 的示例:将命令与控制操作符组合使用
~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

在此例中,存档的内容将提取到 ~/tmp/a/b/c 目录中,除非该目录不存在。如果该目录不存在,则 tar 命令不会运行,因此不会提取任何内容。

仅当另一个命令返回非零退出状态时才运行某个命令

类似地,|| 控制操作符分隔两个命令,并且仅当第一个命令返回非零退出状态时才运行第二个命令。换句话说,如果第一个命令成功,则第二个命令不会运行。如果第一个命令失败,则第二个命令才会 运行。在测试某个给定目录是否存在时,通常使用此操作符,如果该目录不存在,则创建它:


清单 6. 好习惯 3 的另一个示例:将命令与控制操作符组合使用
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

您还可以组合使用本部分中描述的控制操作符。每个操作符都影响最后的命令运行:


清单 7. 好习惯 3 的组合示例:将命令与控制操作符组合使用
~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar




谨慎引用变量

始终要谨慎使用 Shell 扩展和变量名称。一般最好将变量调用包括在双引号中,除非您有不这样做的足够理由。类似地,如果您直接在字母数字文本后面使用变量名称,则还要确保将该变量名称包括在方括号 ([]) 中,以使其与周围的文本区分开来。否则,Shell 将把尾随文本解释为变量名称的部分——并且很可能返回一个空值。清单 8 提供了变量的各种引用和非引用及其影响的示例。


清单 8. 好习惯 4 的示例:引用(和非引用)变量
~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa

~ $ echo "$VARa"

~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a
~ $







使用转义序列来管理较长的输入

您或许看到过使用反斜杠 (\) 来将较长的行延续到下一行的代码示例,并且您知道大多数 Shell 都将您通过反斜杠联接的后续行上键入的内容视为单个长行。然而,您可能没有在命令行中像通常那样利用此功能。如果您的终端无法正确处理多行回绕,或者您的命令行比通常小(例如在提示符下有长路经的时候),反斜杠就特别有用。反斜杠对于了解键入的长输入行的含义也非常有用,如以下示例所示:


清单 9. 好习惯 5 的示例:将反斜杠用于长输入
~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar

或者,也可以使用以下配置:


清单 10. 好习惯 5 的替代示例:将反斜杠用于长输入
~ $ cd tmp/a/b/c \
>                 || \
> mkdir -p tmp/a/b/c \
>                    && \
> tar xvf -C tmp/a/b/c ~/archive.tar

然而,当您将输入行划分到多行上时,Shell 始终将其视为单个连续的行,因为它总是删除所有反斜杠和额外的空格。

注意:在大多数 Shell 中,当您按向上箭头键时,整个多行输入将重绘到单个长输入行上。




在列表中对命令分组

大多数 Shell 都具有在列表中对命令分组的方法,以便您能将它们的合计输出向下传递到某个管道,或者将其任何部分或全部流重定向到相同的地方。您一般可以通过在某个 Subshell 中运行一个命令列表或通过在当前 Shell 中运行一个命令列表来实现此目的。

在 Subshell 中运行命令列表

使用括号将命令列表包括在单个组中。这样做将在一个新的 Subshell 中运行命令,并允许您重定向或收集整组命令的输出,如以下示例所示:


清单 11. 好习惯 6 的示例:在 Subshell 中运行命令列表
~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"

在此示例中,该存档的内容将提取到 tmp/a/b/c/ 目录中,同时将分组命令的输出(包括所提取文件的列表)通过邮件发送到地址 admin

当您在命令列表中重新定义环境变量,并且您不希望将那些定义应用于当前 Shell 时,使用 Subshell 更可取。

在当前 Shell 中运行命令列表

将命令列表用大括号 ({}) 括起来,以在当前 Shell 中运行。确保在括号与实际命令之间包括空格,否则 Shell 可能无法正确解释括号。此外,还要确保列表中的最后一个命令以分号结尾,如以下示例所示:


清单 12. 好习惯 6 的另一个示例:在当前 Shell 中运行命令列表
~ $ { cp ${VAR}a . && chown -R guest.guest a && \
> tar cvf newarchive.tar a; } | mailx admin -S "New archive"







在 find 之外使用 xargs

使用 xargs 工具作为筛选器,以充分利用从 find 命令挑选的输出。find 运行通常提供与某些条件匹配的文件列表。此列表被传递到 xargs 上,后者然后使用该文件列表作为参数来运行其他某些有用的命令,如以下示例所示:


清单 13. xargs 工具的经典用法示例
~ $ find some-file-criteria some-file-path | \
> xargs some-great-command-that-needs-filename-arguments

然而,不要将 xargs 仅看作是 find 的辅助工具;它是一个未得到充分利用的工具之一,当您养成使用它的习惯时,将会希望进行所有试验,包括以下用法。

传递空格分隔的列表

在最简单的调用形式中,xargs 就像一个筛选器,它接受一个列表(每个成员分别在单独的行上)作为输入。该工具将那些成员放置在单个空格分隔的行上:


清单 14. xargs 工具产生的输出示例
~ $ xargs
a
b
c
Control-D
a b c
~ $

您可以发送通过 xargs 来输出文件名的任何工具的输出,以便为其他某些接受文件名作为参数的工具获得参数列表,如以下示例所示:


清单 15. xargs 工具的使用示例
~/tmp $ ls -1 | xargs
December_Report.pdf README a archive.tar mkdirhier.sh
~/tmp $ ls -1 | xargs file
December_Report.pdf: PDF document, version 1.3
README: ASCII text
a: directory
archive.tar: POSIX tar archive
mkdirhier.sh: Bourne shell script text executable
~/tmp $

xargs 命令不只用于传递文件名。您还可以在需要将文本筛选到单个行中的任何时候使用它:


清单 16. 好习惯 7 的示例:使用 xargs 工具来将文本筛选到单个行中
~/tmp $ ls -l | xargs
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
joe joe 3239 Sep 30 12:40 mkdirhier.sh
~/tmp $

谨慎使用 xargs

从技术上讲,使用 xargs 很少遇到麻烦。缺省情况下,文件结束字符串是下划线 (_);如果将该字符作为单个输入参数来发送,则它之后的所有内容将被忽略。为了防止这种情况发生,可以使用 -e 标志,它在不带参数的情况下完全禁用结束字符串。







了解何时 grep 应该执行计数——何时应该绕过

避免通过管道将 grep 发送到 wc -l 来对输出行数计数。grep-c 选项提供了对与特定模式匹配的行的计数,并且一般要比通过管道发送到 wc 更快,如以下示例所示:


清单 17. 好习惯 8 的示例:使用和不使用 grep 的行计数
~ $ time grep and tmp/a/longfile.txt | wc -l
2811

real    0m0.097s
user    0m0.006s
sys     0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811

real    0m0.013s
user    0m0.006s
sys     0m0.005s
~ $ 

除了速度因素外,-c 选项还是执行计数的好方法。对于多个文件,带 -c 选项的 grep 返回每个文件的单独计数,每行一个计数,而针对 wc 的管道则提供所有文件的组合总计数。

然而,不管是否考虑速度,此示例都表明了另一个要避免地常见错误。这些计数方法仅提供包含匹配模式的行数——如果那就是您要查找的结果,这没什么问题。但是在行中具有某个特定模式的多个实例的情况下,这些方法无法为您提供实际匹配实例数量 的真实计数。归根结底,若要对实例计数,您还是要使用 wc 来计数。首先,使用 -o 选项(如果您的版本支持它的话)来运行 grep 命令。此选项 输出匹配的模式,每行一个模式,而不输出行本身。但是您不能将它与 -c 选项结合使用,因此要使用 wc -l 来对行计数,如以下示例所示:


清单 18. 好习惯 8 的示例:使用 grep 对模式实例计数
~ $ grep -o and tmp/a/longfile.txt | wc -l
3402
~ $

在此例中,调用 wc 要比第二次调用 grep 并插入一个虚拟模式(例如 grep -c)来对行进行匹配和计数稍快一点。




匹配输出中的某些字段,而不只是对行进行匹配

当您只希望匹配输出行中特定字段 中的模式时,诸如 awk 等工具要优于 grep

下面经过简化的示例演示了如何仅列出 12 月修改过的文件。


清单 19. 坏习惯 9 的示例:使用 grep 来查找特定字段中的模式
~/tmp $ ls -l /tmp/a/b/c | grep Dec
-rw-r--r--  7 joe joe  12043 Jan 27 20:36 December_Report.pdf
-rw-r--r--  1 root root  238 Dec 03 08:19 README
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
~/tmp $

在此示例中,grep 对行进行筛选,并输出其修改日期和名称中带 Dec 的所有文件。因此,诸如 December_Report.pdf 等文件是匹配的,即使它自从一月份以来还未修改过。这可能不是您希望的结果。为了匹配特定字段中的模式,最好使用 awk,其中的一个关系运算符对确切的字段进行匹配,如以下示例所示:


清单 20. 好习惯 9 的示例:使用 awk 来查找特定字段中的模式
~/tmp $ ls -l | awk '$6 == "Dec"'
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
-rw-r--r--  1 root root  238 Dec 03 08:19 README
~/tmp $

有关如何使用 awk 的更多详细信息,请参见参考资料





停止对 cat 使用管道

grep 的一个常见的基本用法错误是通过管道将 cat 的输出发送到 grep 以搜索单个文件的内容。这绝对是不必要的,纯粹是浪费时间,因为诸如 grep 这样的工具接受文件名作为参数。您根本不需要在这种情况下使用 cat,如以下示例示:


清单 21. 好习惯和坏习惯 10 的示例:使用带和不带 cat 的 grep
	
~ $ time cat tmp/a/longfile.txt | grep and
2811

real    0m0.015s
user    0m0.003s
sys     0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811

real    0m0.010s
user    0m0.006s
sys     0m0.004s
~ $ 

此错误存在于许多工具中。由于大多数工具都接受使用连字符 (-) 的标准输入作为一个参数,因此即使使用 cat 来分散 stdin 中的多个文件,参数也通常是无效的。仅当您使用带多个筛选选项之一的 cat 时,才真正有必要在管道前首先执行连接。




结束语:养成好习惯

最好检查一下您的命令行习惯中的任何不良的使用模式。不良的使用模式会降低您的速度,并且通常会导致意外错误。本文介绍了 10 个新习惯,它们可以帮助您摆脱许多最常见的使用错误。养成这些好习惯是加强您的 UNIX 命令行技能的积极步骤。

- 作者: 小丁丁 2007年03月20日, 星期二 23:49  回复(0) |  引用(1) 加入博采

unix入门材料

首先,我们一起看看UNIX的目录,因为清楚了目录,才能对UNIX的框架有个大概的印象!当然这里讲的是系统正常运转所必须的,并且一定不能删除或者修改。 
/ 是系统的根目录;

/bin目录中包括最常用的UNIX命令;  

/dev目录包括控制访问外部设备的特殊设备文件;  

/etc目录中包括各种各样的系统程序和数据文件;  

/lib目录里包括C语言以及其他语言程序的运行库文件;  

/mnt目录是一个空目录,是为安装可移动的文件系统保留的;  

/opt目录中包括在所谓的“软件存储目标”;  

/shlib目录中包括系统使用的共享库;  

/usr目录中有几个子目录,(/usr/include目录包括编译C语言程序的头文件;/usr/lib目录包括各种UNIX命令使用的更多的库和数据文件;/usr/spool目录包括各种各样的目录,用于存储那些将被打印、邮寄、或通过网络传递的文件;/usr/tmp目录包括更多的临时文件;/usr/adm目录包括与系统管理或记帐相联系的数据文件;特别地,/usr/adm/messages和/usr/adm/syslog文件包括系统错误消息的记录。)

/stand目录是引导文件系统的安装点,引导文件系统包括安装程序(boot),核心(unix),以及相关的boot文件;

/tcb目录包括所有作为TCB一部分的文件;

/tmp目录UNIX系统程序产生的临时文件;

/var目录包括指定某一单独客户或服务器的非共享SSO文件。

一、目录管理
1、创建目录:mkdir directory_name
比如:在/usr/目录下新建子目录apple
#mkdir /usr/apple 或者
#cd /usr
#mkdir apple 

注:mkdir是make directory的缩写 

2、列目录内容:
ls  纵向显示
lc  横向显示
ls –l(或简化为l)显示每个文件的详细信息,包括存取模式、链接数、属主、文件大小、上次修改时间等)
ls –a列出所有文件包括隐含文件(在unix要想使某个文件隐藏起来,只要在文件名前加个“.”就可以了。)
ls –F(或lf) 标出文件类型,在目录文件名标记“/”,在可执行文件后标记“*”号,在符号链接后标记“@”。
比如:列出/apple下的文件
#ls /apple
或者:
#cd  /apple
#ls
ls –L或是l命令将显示:
total 20
-rwxrw-r-- 1 apple fruit 1181 Mar 14 2002  dir1
式的内容。
其中,第一行total指明的是总块数。
-rwxrw-r-- apple fruit 1181 Mar 14 2002  dir1这一行中,第一个-,代表是一个普通文件,如果是d(directory)表示是目录文件,如果是l 表示是符号链接(link),b表示是块(block)设备文件,c表示是字符(character)设备文件。
rwxrw-r--中每三个字母为一组,英文名叫triplet,分别指明文件主(user)、同组用户(group)和其他用户(other)的访问权限。
r表示可读(read)、w表示可写(weite)、x表示可执行(excute) 

如果一屏显示不下,可能用管道加more或 pg分屏阅读:
# ls |more
# ls |pg 

注:ls是list的缩写。 

3、目录的重命名:mv oldname newname (可以是目录名或路径名) 比如:将目录 /usr/apple改为/usr/pear
#mv /usr/apple /usr/pear
或者:
#cd /usr  
#mv apple pear 

注:mv是move的缩写 

4、删除目录:rmdir directory (directory为空),dirctory里有内容时:rm –r directory
比如:删除目录/apple(内容为空)
# rmdir /apple 

注:rmdir是remove directory的缩写 

5、比较目录:dircmp directory1 directory2
二、漫游文件系统
   

1、要想知道你在文件系统中的位置可用pwd 命令。比如, #  pwd
屏幕上将显示:
/usr
表明你现在正在/usr目录下工作。 

注:pwd是print word directory的缩写,在unix中,print一般是在在屏幕上显示的意思,而不是打印。 

2、改变目录:cd directory 比如:你的当前目录为:/apple 要切换的/usr/pear(当然这个目录要存在),
#cd /usr/pear
然后再用pwd命令查看当前工作目录
pwd
/usr/pear 

注:cd是change directory的缩写
三、管理文件  

1、查看文件内容:cat filename  比如:目录/apple下有一个文件love,内容为“I love you all my heart! ”
#cat /apple/love
或者:
#cd /apple
#cat love  
注:也可cat –v filename(不知道文件属于何类型),
cat filename |pg(分屏阅读)。  
由于cat命令原本是用于文件联结的,因此,它只适用于查看不足一屏(一般为24行)的文件。如果文件超过了一屏,就需要用more命令。
比如:
more file1
按空格键显示下一屏,按回车键显示下一行。 

注:cat是concatenate 的缩写
more据台湾一位教授的解释,就是“再看一页再看一页”的意思。在Linux里有一个less命令,也是分屏显示的,但是能前后翻页。 

cat主要作用是文件的联接,比如,把file1 file2连接起来,成为file3
cat file1 file2 >file3
其中的 > 称为改向输出符,如果是把file1连接到file2有末尾,则:
cat file1 >> file2 

cat命令除了显示和连接文件以外,还有一个常用的功能,就是建立非常小的文本文件,语法格式为: cat > filename
例如:编辑一个小的shell小程序dl,用来打印一个文件agent008, 

cat  > dl
lp agent008
然后按<ctrl>+d结束。

查看文件的头部:head filename
查看文件的尾部: tail filename  
2、复制文件:cp filename copyname(filename前面可以加路径)或者:
cp filename …  pathname
比如:将目录/apple下的文件love复制到目录/pear 下
#cp /apple/love  /pear 假如多个文件:
#cp /apple/love1 love2 love3  /pear 

注:cp由copy缩写而成。 

3、文件移动和重命名:
文件的移动:mv sourse_file target_directory
比如,将/apple目录下的文件love移动到目录/pear下,
# mv /apple/love /pear

文件的重命名:
在unix里,文件的重命名就是把文件从原文件名(old_filename)下移动到新文件名(new_filename)下:
# mv old_filename new_filename
比如:将目录/apple下的文件love改名为happy,  
# mv /apple/love /apple/happy
或者:
# cd /apple
# mv love happy   

注:mv由move缩写而来 

4、删除文件:rm filename(一定要小心使用呀,unix由于早期只是专业人员使用,提倡严谨的工作作风,所以在执行命令时往往不要求确认,如果执行成功,就给出结果,执行不成功,才给出出错信息,所以,对你不熟悉的命令千万不要像windows一样去试,因为指令一旦发出,unix就会不折不扣地执行,没有像windows那样“悔棋”的机会。)
为了防止误删除文件,良好的习惯是加上-i选取项。
比如,rm -i file1
系统会要求你确认是不是真的要删除,待你确认后再删除。 

注:rm由remove缩写而来 

5、在文件中查找指定的字符串:grep options text filenames
这个命令好比用word打开一篇文件后,查找某一字符串。不同的是,在unix中,用grep命令,不用打开文件。比如,
# grep root /etc/passwd
就可以显示出root用户的有关信息。
再比如,加上管道,可以一次查出某一终端的所有进程号。
# ps –e|grep tty03
就可以查出终端tty03的所有进程号。当然,查出进程号的目的一般是为了kill它们。那么怎么一次实现呢?这就需要用到awk命令了。
比如,要kill tty03的所有进程,可以用命令
# kill –9 ‵ps –e|grep tty03|awk ‘{print $1}’‵
注意,ps前面和最后的的那个符号,是倒引号,在数字“1”的左边。 

查找文件: find path_list expression
其中,path_list是查找的目录列表,可以是一个目录,也可以是多个目录。如果是多个目录之间,要以空格符分开。如果从当前目录开始查找,可以用“.”号表示,如果是从根目录开始查找,就要使用“/”来表示。
expression项(表达式)是查找条件,用户利用它可以设定是按文件的名字、日期或是其他条件来查找。我经常用的是名字。
比如:在/usr下,查找一个名为ttytab的文件
# find /usr –name ttytab –print
其中的-name指明是用名字查找,-print是告诉系统,找到ttytab文件后在屏幕上显示它在什么位置。不过在sco openserver中可以省略-print。
在windows98中,我们可以用“查找”一次性删除所有临时文件。在unix里,我们也可以用find一次删除符合某些条件的文件,比如,在/usr目录及其子目录中,删除所有以txt为扩展名的文件。
find /usr –name *.txt –exec rm {}\;
-exec command_name {}\; 找出与条件匹配的文件后,执行command_name所指定的命令。注意,这条命令的结尾必须有{}\;
四、文件和目录的存取控制  
1、改变文件的权限:
chmod  who [+-=] operator_ permission filename
who包括u g o,分别代表用户(user)、同组用户(group)和其他用户(other)
+ 增加权限
-减少权限
=增加等号后面的权限,同时减去原来的权限
operator_ permission包括r(read)、w(weite)、x(excute)。
比如:chmod u+x filename
给文件主以执行权
这有一种方式:chmod mode filename
其中mode为nnn模式,n是0-7之间的数,4表示可读,2表示可写,1表示可执行。nnn中第一个n是用户的权限,第二个n是同组用户的权限,第三个n是其他用户的权限。如果如赋予可读可写两个权限,则用6(4+2而来),而如果要赋予可读可写可执行全部权限就用7表示。
例如:chmod 777 file1
就是把file1让所有用户可读可写可执行。
而chmod 740 file1则是的权限设置为文件的主人自己可读可写可执行,同组用户只读,其他用户连看都不行了。0表示没有任何权限。

chmod由change mode缩写而来 

2、改变文件属主:chown new_owner [:group_name] filename
例如:改变文件file1主人为apple
$ chown apple file1
要注意的是,除非你是root,否则,给了别人的文件你自己可就要不回来了。假如你是pear,在你运行了chown apple file1后,你就把文件给了apple。如果你再运行chown pear  file1。系统就会告诉你没有这个权限。要想把给人家的文件再要回来,只有求助于root用户。
如果还要改变文件的所属组,apple用户要把文件file1送给fruit组的apple用户,可以使用命令:
chown apple:fruit file1 

注:chown由change owner缩写而来 

改变文件的属组也可以用chgrp命令
3、查看你所在的组:id
4、改变当前用户组:sg
5、改变文件所在的用户组:chgrp new_group filename
比如:chgrp fruit file1 

注:chgrp:由change group缩写而来 

6、在命令行中获得帮助man [section] keywork 比如:
man C kill

五、磁盘的使用  
1、软盘的格式化:format [设备名]
比如:格式化1.44M软盘:
#format /dev/rfd0135ds18
r表示是原始(raw)设备,fd表示是软驱,0表示第一个软驱,135表示135个磁道,ds表示双面磁盘,18表示18个扇区。
unix中,format命令只能格式化软盘,不能格式化硬盘。
另外,如果在/etc/default/format文件中,DEVICE定义的是缺省的设备名,一般都是DEVICE=/dev/rfd0135ds18,所以你可以只键入format就可完成对软盘的格式化。 

2、软盘的复制:diskcp  [optition] [-135ds18]
optition有多个选项,但现在的PC一般只有一个软驱,所以常用的就剩下一个-f(format)了,-135ds18代表我们常用的1.44M软盘。
比如:
$ diskcp –f –135ds18
复制时先对目标盘格式化,然后再复制。 

3、用软盘备份文件:比如将硬盘目录下/apple的文件love存储到空软盘上,你可以:
#cd /apple
#tar cv6 love
c 表示在创建(create)一个新文件,并且覆盖已有的同名文件。如果不想覆盖。命令为:
#tar uv6 love
v 显示每个被处理的文件名。
6表示是软驱。数字和设备的对应关系,在/etc/default/tar文件中定义,可用more /etc/default/tar命令或是不带任何参数的tar命令查看,也可用vi修改。 

4、列出软盘中文件的名字:#tar tv6 

5、将软盘中文件恢复到硬盘:#tar xv6
x表示抽取(extract)
六、增加用户和切换用户
1、增加用户:#useradd name
里面可有好多东东哟!你可以添加用户,添加组,删除用户和组,当然也可以修改,呵呵,可以打开看一下的!比如:添加一个用户apple,你可以:
#useradd apple
出现增加用户的界面:
#scoadmin account
如果是root用户可以直接
useradd apple回车
passwd apple 回车
这样子他就会出现让你输入密码
接下来还有一次

2、切换用户:su
windowsXP一大卖点就是新增加了切换用户(switch user)功能。其实,unix早就有了这项功能,而且比windows XP要方便得多。
比如:你是用户pear,现在要切换成用户apple
$ su apple  
当然你得知道apple的口令。但是root用户运行su变成其他用户,是不需要口令的。
如果没有指定用户名,缺省是切换到root用户,如
$ su
password:
在你输入root口令后,系统提示符就会变#,而不是$了。
但是你会发现,你的工作目录和环境并没有改变,也就是su的结果和直接用apple或是root用户的帐号注册还是不一样的。那么怎样如同注册一样呢,只要在su后面加上一个短横就可了。
比如:$ su – apple
就和在login:后面键入apple一样获得了apple用户的环境。注意,“-”前后各有一个空格。
七、设置或者改变用户口令:passwd 

直接键入passwd可修改自己的口令,一般用户只能修改自己的口令,而root用户不仅可以修改自己的口令,还可以修改其他用户的口令。
#passwd username
比如,root用户要修改apple用户的口令,可运行:
# passwd apple
Setting password for user:apple
last successful password change for apple:Tue Dec 30 08:34 2001
Choose passeord
You can choose whether you pick a password
or have the system create one for you. 

1.pick a password
2.Pronounceable password will be generate for you
注:第一种方式是自己创建新口令,第二种方式是由系统为你创建一个可以发音的口令,我们一般选第一种方式。
Enter choose (default is 1):1
Please enter new password (at least 3 characters):
new password:
Re-enter password:
输入口令时,屏幕上并不显示。这是出于安全和保密的考虑。
八、系统的关闭与重启: 

在UNIX里非法关机,是非常非常不好的事情,切记切记!
#shutdown –y –g0
这是最安全的关机方式。-y选项是告诉系统,凡是询问都回答y, -g0则指定等待时间为0分钟。如果不指定,缺省的是1分钟。当然你要有关机的权限,才能执行这个命令的。 

#haltsys
这是紧急关机方式,只能在系统维护模式下由超级用户root才能执行。 

#reboot
重启系统,假如你添加了新的硬件或者修改了一些配置文件,记得一定要运行这个命令,不然不会生效的。也是只能在系统维护模式下由超级用户root才能执行。

login:halt
用关机用户关机
我们每天的关机都是在login:后直接输入一个用户名比如halt或是haltsysy就能关机。那么这种关机方式是如何实现的呢?有多种方法:这里只介绍一种:
第一步:建立一个用户,名字呢我们就用halt吧
第二步:在/usr/halt目录下建立一个shell script,起名为halt.sh,内容为“shutdown -y –g0”,名字
第三步:chmod u+x halt.sh
第四步:vi /etc/passwd,把halt用户的uid改成0,注册shell改成halt.sh.
九、系统管理:
系统管理的命令,一般都是由root用户执行的,一般用户可能执行不了,除非你得到了root用户的授权。
1、查询系统时间:data  
2、修改系统时间:asktime [yymmdd]
yy:年
mm:月
dd:日
hh:时
mm:分
都用两位数表示。比如把系统时间改为2002年6月17日16时45分。
# asktime 

3、查询谁在系统中:who
也可以简化为w 

4、谁在做什么:whodo显示用户正在进行的工作。   

5、终端名的获取:tty [-l] [-s]显示当前正在使用的终端的设备文件及其路径名。   

6、进程状态的了解:ps [options] 你可以知道进程活动的信息哟!什么是进程,还记得吗?unix里,可是很重要的东东哟!
常用的选项有:
-e 显示每个进程的信息(everything)
-f 显示进程的完整信息。(full)
-t ttynum 显示ttynum指定的终端的进程
-u username 显示usename指定的用名的进程信息
-l 以长格(long)形式显示进程信息,总共14列,其中每列标题的含义如下:
f:(flag):用八进制表示的进程的有关标记,00表示进程已结束,01表示是系统进程,20表示进程被装主内存中。
s:(state)表示进程的状态,b和w表示正处于等待状态,i表示空闲,o表示正在运行,k表示已装入队列可运行进程,s(sleep)表示处于睡眠状态,r(ready)表示处于就绪状态 ,t表示被跟踪,x表示等待更多的内存。
uid :(user id)进程属主的用户标识
pid :(process id)进程号,(kill命令用的就是这个号)
ppid (parent process id) 父进程号
c :cpu的占用率
stime:进程被提交的时刻
pri:进程的优先级(priorty)
ni:进程的nice值
addr:进程的内存地址(address)
sz:进程的内存映像的大小(size),以块表示
wchan:睡眠进程地址。对于运行的进程是空的
tty:进程所属的终端号。如果是?号,则是系统进程
time:进行已执行的累计时间
cmd:调用该进程的命令名
比如,查看tty03的进程信息
$ ps -t tty03
查看系统中所有进程的信息
# ps -e

#ps -ef
杀死进程:假如进程占用了过多的处理时间,是系统变慢,或者它陷入一个死循环,不能结束。呵呵,kill它!为了杀死进程,你可以试试键入:<ctrl><del>或者<break>或者<ctrl>d或者<del>,或者命令:kill pid或者kill -9 pid   

7、统计磁盘使用空间:du显示指定文件所使用的磁盘块数和全部文件占用的总块数。
8、统计磁盘自由空间:df显示指定文件系统中的自由空间块数和自由i节点数。
如# df
/ (dev/root):962630 blocks 61557 i-nodes
加上-v选项可显示文件系统的总块数、已用块数、空闲块数和已用的百分比。如: 

# df -v /dev/root
mount dir    filesystem   blocks   used   free  %used
/dev/root    /dev/root    1030176  57546  962630 6% 

在sco unix中,还有一个dfspace命令,可以用m为单位显示磁盘的使用情况。比如:
# dfspace
/     :disk space :469.96mb  of 503.01mb available (93.43%)
total disk space: 469.96mb  of 503.01mb available (93.43%)
说明你的硬盘总共大小是503.01mb,已使用469.96mb,百分比是93.43%. 

9、文件类型的确定:file  filename 

10、在管道线上建立“三通”:tee [options] [files]
tee由“t”而来,(tee与t的英语音标都是[ti:],)而t则“三通管”的像形,即取前一条命令的的输出作为输入,然后将其传送给下一条命令,同时,形成一个文件。比如:
ls -l /bin|tee file1 |wc
将ls命令的结果既保存在文件file1中,又交给wc去统计。
ls -l /etc|tee -a file1|wc
把ls命令的结果追加到文件夹file1的尾端,同时交给wc去统计。
十、访问dos磁盘信息   

1、dos磁盘目录的显示(你有的时候可能要在unix里显示dos磁盘上的内容哟!)
# dosdir dir (dir为设备符、文件名。)比如:查看软盘a的内容
# dosdir /dev/fd0
或者# dosdir /dev/fd0:
也可以用unix格式显示
# dosls dev/fd0 

2、dos磁盘文件内容的显示:
# doscat filename 比如:你查看软盘a中的文件config.sys,
#doscat /dev/fd0:config.sys
注意:/dev/fd0:config.sys不能是/dev/fd0/config.sys,因为/ dev目录下是设备文件,如果写成/dev/fd0/config.sys,config.sys就成了设备文件了,而这个设备文件是不存在的,因此,系统就会给出出错信息

3、dos磁盘目录的建立和删除:
dosmkdir directory(建立)
dosrmdir directory(删除)
例如:
dosmkdir /dev/fd0:apple
dosrmdir /dev/fd0:apple 

4、dos磁盘的格式化:
dosformat [-fqv] drive
比如:你要格式化1.44mb软盘
#dosformat /dev/fd0135ds18
其中,注意format的设备名是rfd0135ds18,表示是原始(raw)设备名,而 dosforamt的设备名是/dev/fd0135ds18,fd前面没有字母“r”。 

5、dos磁盘上文件的删除:
dosrm /dev/fd0:file1 file2…   

6、dos和unix之间的文件复制:
doscp [-r][-m]file1 file2
或者:
doscp file… directory  
-r 复制时不进行换行符的转换
-m复制时进行换行符的转换(unix和dos的换行符是不同的) 

例如:
doscp -m apple /dev/fd0
把文件apple用dos格式复制到a盘,复制时进行换行符的转换
doscp -r apple /dev/fd0:fruit
把文件apple用dos格式复制到a盘的fruit目录下,复制时不进行换行符的转换。
你一定觉得总是把a盘写成/dev/fd0很麻烦了吧?能不能把/dev/fd0写成a:呢?能,一定能。用vi打开/etc/default/msdos文件,把其中的“a=/dev/install”改成“a=/dev/fd0”就可以了。
如:dosdir a:
dosdir a盘符也和dos一样,可以大小写不分)
不过要提醒的是,在指定dos目录的路径时,不能使用dos的分隔符“\”,只能使用unix的分隔符“/”。
还有一点要注意,在这几个命令中,对dos文件的存取不能使用通配符,但对unix的文件可以使用通配符。
比如:
$ doscp /usr/apple/* a:
但不能使用
doscp a:*.*  /usr/apple
十一、编辑文件:
1、启动vi:
#vi filename
假如该文件存在,vi就会将其读入,否则就会创建它。记得新建目录的命令吗?对了,用mkdir directory,那么新建一个文件呢?对了,聪明!你可以用vi filename创建了。当然了,建立的是文本文件。
2、输入正文:记住了,输入正文之前,可一定要在命令模式下发出一个输入正文的命令!呵呵,别急嘛!我会告诉你输入正文的命令的。在输入过程中,你输入的任何字符都被视作输入的内容,怎么办呢?猜猜看,你可以按〈esc〉键返回命令模式。
哦,对了,差点忘了告诉你,输入正文,叫插入模式。
a 从光标右侧开始添加正文;
a 从行尾处开始添加正文;
i从光标左侧开始添加正文;
i从行首处开始添加正文;o 从当前行之后打开新的一行;
o从当前行之前打开新的一行;
3、保存文件并退出:别忘了,一定要在命令模式下才能保存退出哟!你按<esc>,直到终端会叫了,那一定是命令模式的。有好多方法保存,但是一定要加一个冒号“:”。比如:
“:w”是保存但不退出;
“:q”是退出但不保存;
“:wq”是保存并退出vi。
我常用的是:“:x!”是保存并强行退出;“:q!”是不保存强行退出。
4、在文件中移动光标。现在的pc键盘,大多可以用四个箭头键来移动光标,但是,unix诞生时,可能还没有这种pc键盘,所以它用的是h j k l四个键。用熟了,这四个键还挺方便的。
h 向左移动一个字符;
i向右移动一个字符;
k向上移动一个字符;
j向下移动一个字符; 

5、删除和恢复文件:删除光标所在的字符用x;删除光标所在行用dd。
撤销前一次操作,用u或者u。
6、编辑时遇到的特殊情况:屏幕不可读时,按<ctrl>+l或者<ctrl>+r使屏幕刷新;如果还是不能阅读,那可能是你的终端设置不对,或者编辑了非正文文件,别忘了键入:q!不保存退出。
举个例子吧!在/apple目录下编辑文件love,
#vi /apple/love,
假如原来的文件内容为:
you are my kind of girl,you have a beautiful personality,and looks neat and fresh!  
it was love at first sight,but i don’t have the heart to tell you, so i make a pass at you.  
i’ve been dying to see you when leave xianghe,and i love you with all my heart!  
i’m too deeply involved!  
god bless you,god bless me too!   

ok!比如:你要在i’m too deeply involved!插入don’t you give me the cold shoulder.么你应该将光标移到involved!后,然后按i 你就可以插入了;假如你要删除so i make a pass at you.你可以将光标移到要删除的字符上,按x 将其删除;
假如你要将but i don’t have the heart to tell you,的逗号改为感叹号,你可以插入感叹号,并将逗号删除,呵呵,废话,是吗?假如你要删除god bless you,god bless me too!整行,你可以在命令状态下按dd;
假如你要在 i’ve been dying to see you when leave nanping,and i love you with all my heart!
后面加一行,并插入love you more than i can say!你可以将光标移动到i’ve been  dying to see you when leave nanping,and i love you with all my heart!上,(移动光标还记得吗?对了,h、j、k、l 。)然后在命令模式下,按o ,在按i 后  插入love you more than i can say!改完了吗?保存用“:x!”,不保存“:q!”。
你爱怎么改就怎么改吧!但一定不要将它改的面目全非了哟!  
you are my kind of girl,you have a beautiful personality,and looks neat and fresh!  
it was love at first sight,but i don’t have the heart to tell you, so i make a pass at you!  
i’ve been dying to see you when leave nanping,and i love you with all my heart!  
love you more than i can say!i’m too deeply involved!  
don’t you give me the cold shoulder.i wish apple and pear are going steady!  
god bless you,god bless me too!  
(你是我喜欢的那种女孩,你有永恒的魅力,你看起来优雅清新!对你一见钟情,但我没有勇气告诉你,所以我深情的看着你(送秋波)!离开南平,我一直很想你,我全心全意爱你!爱你在心口难开,我已经陷的太深。别再对我冷淡,我衷心祝愿apple和pear正式成为情侣!上帝保佑你,上帝保佑我!)  
vi还有好多东东,但常用的就是这些。欲知详情,看书吧!
十二、打印文件 

1、打印文件lp
lp命令来源于“line printer“,其意为行式打印机,这是过去的名称。现在它可用于各种类型的打印机。 

lp [选项] [文件名]
它的选项有好几个,我没有使用到过,不敢瞎说,举个简单例子吧
比如,打印文件apple 

lp apple 

如果系统中不只有一台打印机,需要指定用哪台打印机的话,可以使用-d选项,指定目标(destination)打印机
比如,在epson打印机上打印文件apple
lp -d epson apple 

在lp命令中,可以使用文件通配符。 

2、取消打印作业
有时候,由于误操作,需要取消打印作业,应该怎么办呢? 

取消打印队列的命令是cancel [打印队列号] 

比如,当你成功执行了lp apple后,
系统会给出一条提示信息: 

request id is epson-921 

epson-921就是打印队列号,如果你又不想打印了,可以用以下命令取消这个打印作业。 

cancel epson-921 

如果要取消某台打印机上的所有作业,可以使用命令:
cancel [打印机名] 


可是,由于目前我们所用的打印命令都是上级行编好的shell程序,你可能见不到打印id号的提示信息,那如何取消打印队列呢?,这就用到了lpstat命令,它可以帮助我们查到打印信息。 

lpstat ,是lp stauts的缩写,其意为打印状态,语法格式为: 

lpstat [选项] 

选项有多个,我一般就用-t 选项,显示所有信息 

比如:lpstat -t 


以上只是对sco unix的入门介绍,而且没有介绍它的网络命令(因为一则我并不精通网络,二则我觉得unix的ftp 、telnet命令和win2000并没有什么不一样,因此,要学习ftp telnet在win2000上练习就可以了)。要想深入掌握unis,还是需要好好看一看专门的教程。

- 作者: 小丁丁 2007年03月4日, 星期日 12:04  回复(0) |  引用(1) 加入博采