表达式计算(一)

前面我们基本对 Scala 编程做了完整的介绍,教程可以参见 Scala 开发教程,但是实践才是最有效的学习方法,我们可以通过一些较为实用的例子来练习 Scala 编程。

我们首先通过我们小时候经常玩的算 24 ,通过 Scala 实现算二十四,编程计算二十点的算法大多为穷举法,我们先从最简单的算法开始,计算表达式,还记得以前学习数据结构使用C语言实现算二十四,需要把表达式首先转成逆波兰形式,然后通过栈来计算表达式的值,我们看看如果通过Scala的函数化编程来实现表达式的计算。

算二十四使用基本的四则运算,加减乘除,外加括号。为简单起见,我们先不考虑带括号的四则运算,后面再逐步扩展,算 24 ,比较有名的一个例子是 5 5 5 1 ,我们最终的结果是需要使用 Scala 实现二十四算法,给出 5 5 5 1 的算法,并可以计算任意四个数,如果有解,给出解,如果穷举后无解,给出无解的结果。

四则运算具有以下二元计算基本表现形式: (表达式) op (表达式)

其中表达式可以是个数字,或是另外一个表达式, op 可以为 + – * /。

比如 3 + 2 ; 3 + 4*3 等等。

对于此类二元运算,我们可以设计一个 Extractor ,分解出二元表达式的左右操作数,还记的我们之前介绍的 Email 的 Extractor 的例子吗?Scala 专题教程-Extractors(1):分解Email地址的例子

我们模仿分解 Email 的例子,写出一个分解加法的 Extractor ,如下:

object Add {
    def apply(expr1:String,expr2:String) = expr1 + "+" + expr2
    def unapply(str:String) :Option[(String,String)] ={
        val parts = str split "\\+"
        if(parts.length==2) Some(parts(0),parts(1)) else None
    }
}

测试一下看看

scala> Add.unapply("3+2")
res1: Option[(String, String)] = Some((3,2))

可以看到 Add 对象成功分解了表达式 3+2 的两个操作数 3 和 2。

设计一个 eval 函数,来计算加法的结果,为简单起见,我们先只考虑整数的情况

def eval(str:String):Int = str match{
    case Add(expr1,expr2) => eval(expr1) + eval(expr2)
    case _ => str toInt
}

这个 eval 函数计算一个表达式的值(目前只支持加法),如果输入的是一个加法表达式,分解后计算每个操作时的值,如果不能分解,那么这是个整数,输出该整数:

scala> eval("3+5")
res0: Int = 8
scala> eval("4+8")
res1: Int = 12

计算结果成功,不过这个实现有些局限,我们看看 3+5+3,什么情况:

scala> eval("3+5+3")
java.lang.NumberFormatException: For input string: "3+5+3"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  at java.lang.Integer.parseInt(Integer.java:492)
  at java.lang.Integer.parseInt(Integer.java:527)
  at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:241)
  at scala.collection.immutable.StringOps.toInt(StringOps.scala:30)
  at .eval(:10)
  ... 32 elided

出错了,这是因为 Extractor 对象 Add 的实现,只考虑了表达式只包含一个“+”的情况,我们修改下 Add 的实现,不使用 split(使用split,如果有有两个+以上,parts.length 就>2),而是使用 indexOf 来查找”+”号:

object Add{
  val op:String="+"
  def apply(expr1:String,expr2:String) = expr1 + op + expr2
  def unapply(str:String) :Option[(String,String)] ={
    val index=str indexOf(op)
    if(index>0)
      Some(str substring(0,index),str substring(index+1))
    else None
  }
}

再来计算”3+5+3″等表达式的值:

scala> eval("3+5+3")
res0: Int = 11
scala> eval("1+2+3+4+5+6+7+8+9+10")
res1: Int = 55

同样,我们可以复制Add,修改op的值,实现 Subtract,Divide,Multiply,为避免重复代码,我们可以设计一个抽象 Trait:

trait BinaryOp{
  val op:String
  def apply(expr1:String,expr2:String) = expr1 + op + expr2
  def unapply(str:String) :Option[(String,String)] ={
    val index=str indexOf(op)
    if(index>0)
      Some(str substring(0,index),str substring(index+1))
    else None
  }
}
object Multiply  extends {val op="*"} with BinaryOp
object Divide  extends {val op="/"} with BinaryOp
object Add  extends {val op="+"} with BinaryOp
object Subtract  extends {val op="-"} with BinaryOp

同样修改 eval 的实现如下:

def eval(str:String):Int = str match {
    case Add(expr1,expr2) => eval(expr1)  +  eval(expr2)
    case Subtract(expr1,expr2) => eval(expr1)  -  eval(expr2)
    case Multiply(expr1,expr2) => eval(expr1)  * eval(expr2)
    case Divide(expr1,expr2) => eval(expr1)  /  eval(expr2)
    case _ => str toInt
  }

测试如下:

scala> eval("4*5-2/2")
res3: Int = 19
scala> eval("4*5-5*4")
res4: Int = 0
scala> eval("4*5-5*4-2/2")
res5: Int = 1
scala> eval("4*5-5*4+2/2")
res6: Int = 1

这个简单的计算表达式的函数 eval 就这么简单的实现了,而且代码也很直观(尽管还有不少局限性),我们下篇再看看带括号的情况。

關於

Scala 二十四点游戏

实践才是最有效的学习方法,我们可以通过一些较为实用的例子来练习 Scala 编程。

我们首先通过我们小时候经常玩的算 24,通过 Scala实现算二十四,编程计算二十点的算法大多为穷举法,我们先从最简单的算法开始,计算表达式,还记得以前学习数据结构使用 C 语言实现算二十四,需要把表达式首先转成逆波兰形式,然后通过栈来计算表达式的值,我们看看如果通过 Scala 的函数化编程来实现表达式的计算。

通过本课程的学习你可以加深你对 Scala 语言的理解。

适用人群

本教程为中级教程,适用于对 Scala 语言已经有一定程度的掌握,并希望通过实例的学习进一步加深对 Scala 的理解。

学习前提

学习本教程前,需要你对 Scala 开发教程有所了解并具备基本的 Scala 语言基础。

地址:http://www.imobilebbs.com/wordpress/教程/scala开发教程

鸣谢:引路蜂移动软件

更多资料请访问:http://www.scala-china.net/discuz/forum.php

初识Scrapy,在充满爬虫的世界里做一个好公民

欢迎来到你的Scrapy之旅。通过本文,我们旨在将你从一个只有很少经验甚至没有经验的Scrapy初学者,打造成拥有信心使用这个强大的框架从网络或者其他源爬取大数据集的Scrapy专家。本文将介绍Scrapy,并且告诉你一些可以用它实现的很棒的事情。

1.1 初识Scrapy

Scrapy是一个健壮的网络框架,它可以从各种数据源中抓取数据。作为一个普通的网络用户,你会发现自己经常需要从网站上获取数据,使用类似Excel的电子表格程序进行浏览,以便离线访问数据或者执行计算。而作为一个开发者,你需要经常整合多个数据源的数据,但又十分清楚获得和抽取数据的复杂性。无论难易,Scrapy都可以帮助你完成数据抽取的行动。

以健壮而又有效的方式抽取大量数据,Scrapy已经拥有了多年经验。使用Scrapy,你只需一个简单的设置,就能完成其他爬虫框架中需要很多类、插件和配置项才能完成的工作。

从开发者的角度来说,你也会十分欣赏Scrapy的基于事件的架构。它允许我们将数据清洗、格式化、装饰以及将这些数据存储到数据库中等操作级联起来,只要我们操作得当,性能降低就会很小。在本文中,你将学会怎样可以达到这一目的。从技术上讲,由于Scrapy是基于事件的,这就能够让我们在拥有上千个打开的连接时,可以通过平稳的操作拆分吞吐量的延迟。来看这样一个极端的例子,假设你需要从一个拥有汇总页的网站中抽取房源,其中每个汇总页包含100个房源。Scrapy可以非常轻松地在该网站中并行执行16个请求,假设完成一个请求平均需要花费1秒钟的时间,你可以每秒爬取16个页面。如果将其与每页的房源数相乘,可以得出每秒将产生1600个房源。想象一下,如果每个房源都必须在大规模并行云存储当中执行一次写入,每次写入平均需要耗费3秒钟的时间(非常差的主意)。为了支持每秒16个请求的吞吐量,就需要我们并行运行1600 × 3 = 4800次写入请求。对于一个传统的多线程应用而言,则需要转变为4800个线程,无论是对你,还是对操作系统来说,这都会是一个非常糟糕的体验。而在Scrapy的世界中,只要操作系统没有问题,4800个并发请求就能够处理。此外,Scrapy的内存需求和你需要的房源数据量很接近,而对于多线程应用而言,则需要为每个线程增加与房源大小相比十分明显的开销。

简而言之,缓慢或不可预测的网站、数据库或远程API都不会对Scrapy的性能产生毁灭性的结果,因为你可以并行运行多个请求,并通过单一线程来管理它们。这意味着更低的主机托管费用,与其他应用的协作机会,以及相比于传统多线程应用而言更简单的代码(无同步需求)。

1.2 喜欢Scrapy的更多理由

Scrapy已经拥有超过5年的历史了,成熟而又稳定。除了上一节中提到的性能优势外,还有下面这些能够让你爱上Scrapy的理由。

  • Scrapy能够识别残缺的HTML

你可以在Scrapy中直接使用Beautiful Soup或lxml,不过Scrapy还提供了一种在lxml之上更高级的XPath(主要)接口——selectors。它能够更高效地处理残缺的HTML代码和混乱的编码。

  • 社区

Scrapy拥有一个充满活力的社区。只需要看看https://groups. google.com/ forum/#!forum/scrapy-users 上的邮件列表,以及Stack Overflow网站(http:// stackoverflow.com/questions/tagged/ scrapy)中的上千个问题就可以知道了。大部分问题都能够在几分钟内得到回应。更多社区资源可以从http://scrapy.org/ community/中获取到。

  • 社区维护的组织良好的代码

Scrapy要求以一种标准方式组织你的代码。你只需编写被称为爬虫和管道的少量Python模块,并且还会自动从引擎自身获取到未来的任何改进。如果你在网上搜索,可以发现有相当多专业人士拥有Scrapy经验。也就是说,你可以很容易地找到人来维护或扩展你的代码。无论是谁加入你的团队,都不需要漫长的学习曲线,来理解你的自定义爬虫中的特别之处。

  • 越来越多的高质量功能

如果你快速浏览发布日志(http://doc.scrapy.org/en/latest/ news.html),就会注意到无论是在功能上,还是在稳定性/bug修复上,Scrapy都在不断地成长。

1.3 掌握自动化数据爬取的重要性

对于大多数人来说,掌握一门像Scrapy这样很酷的技术所带来的好奇心和精神上的满足,足以激励我们。令人惊喜的是,在学习这个优秀框架的同时,我们还能享受到开发过程始于数据和社区,而不是代码所带来的好处。

1.3.1 开发健壮且高质量的应用,并提供合理规划

为了开发现代化的高质量应用,我们需要真实的大数据集,如果可能的话,在开始动手写代码之前就应该进行这一步。现代化软件开发就是实时处理大量不完善数据,并从中提取出知识和有价值的情报。当我们开发软件并应用于大数据集时,一些小的错误和疏忽难以被检测出来,就有可能导致昂贵的错误决策。比如,在做人口统计学研究时,很容易发生仅仅是由于州名过长导致数据被默认丢弃,造成整个州的数据被忽视的错误。在开发阶段,甚至更早的设计探索阶段,通过细心抓取,并使用具有生产质量的真实世界大数据集,可以帮助我们发现和修复错误,做出明智的工程决策。

另外一个例子是,假设你想要设计Amazon风格的“如果你喜欢这个商品,也可能喜欢那个商品”的推荐系统。如果你能够在开始之前,先爬取并收集真实世界的数据集,就会很快意识到有关无效条目、停产商品、重复、无效字符以及偏态分布引起的性能瓶颈等问题。这些数据将会强迫你设计足够健壮的算法,无论是数千人购买过的商品,还是零销售量的新条目,都能够很好地处理。而孤立的软件开发,可能会在几个星期的开发之后,也要面对这些丑陋的真实世界数据。虽然这两种方法最终可能会收敛,但是为你提供进度预估承诺的能力以及软件的质量,都将随着项目进展而产生显著差别。从数据开始,能够带给我们更加愉悦并且可预测的软件开发体验。

1.3.2 快速开发高质量最小可行产品

对于初创公司而言,大规模真实数据的集甚至更加必要。你可能听说过“精益创业”,这是由Eric Ries创造的一个术语,用于描述类似技术初创公司这样极端不确定条件下的业务发展过程。该框架的一个关键概念是最小可行产品(Minimum Viable Product,MVP),这种产品只有有限的功能,可以被快速开发并向有限的客户发布,用于测试反响及验证业务假设。基于获得的反馈,初创公司可能会选择继续更进一步的投资,也可能是转向其他更有前景的方向。

在该过程中的某些方面,很容易忽视与数据紧密连接的问题,这正是Scrapy所能为我们做的部分。比如,当邀请潜在的客户尝试使用我们的手机应用时,作为开发者或企业主,会要求他们评判这些功能,想象应用在完成时看起来应该如何。对于这些并非专家的人而言,这里需要的想象有可能太多了。这个差距相当于一个应用只展示了“产品1”、“产品2”、“用户433”,而另一个应用提供了“三星 UN55J6200 55英寸电视机”、用户“Richard S”给出了五星好评以及能够让你直达产品详情页面(尽管事实上我们还没有写这个页面)的有效链接等诸多信息。人们很难客观判断一个MVP产品的功能性,除非使用了真实且令人兴奋的数据。

一些初创企业将数据作为事后考虑的原因之一是认为收集这些数据需要昂贵的代价。的确,我们通常需要开发表单及管理界面,并花费时间录入数据,但我们也可以在编写代码之前使用Scrapy爬取一些网站。

1.3.3 Google不会使用表单,爬取才能扩大规模

当谈及表单时,让我们来看下它是如何影响产品增长的。想象一下,如果Google的创始人在创建其引擎的第一个版本时,包含了一个每名网站管理员都需要填写的表单,要求他们把网站中每一页的文字都复制粘贴过来。然后,他们需要接受许可协议,允许Google处理、存储和展示他们的内容,并剔除大部分广告利润。你能想象解释该想法并说服人们参与这一过程所需花费的时间和精力会有多大吗?即使市场非常渴望一个优秀的搜索引擎(事实正是如此),这个引擎也不会是Google,因为它的增长过于缓慢。即使是最复杂的算法,也不能弥补数据的缺失。Google使用网络爬虫技术,在页面间跳转链接,填充其庞大的数据库。网站管理员则不需要做任何事情。实际上,反而还需要一些努力才能阻止Google索引你的页面。

虽然Google使用表单的想法听起来有些荒谬,但是一个典型的网站需要用户填写多少表单呢?登录表单、新房源表单、结账表单,等等。这些表单中有多少会阻碍应用增长呢?如果你充分了解你的受众/客户,很可能已经拥有关于他们通常使用并且很可能已经有账号的其他网站的线索了。比如,一个开发者很可能拥有Stack Overflow和GitHub的账号。那么,在获得他们允许的情况下,你是否能够抓取这些站点,只需他们提供给你用户名,就能自动填充照片、简介和一小部分近期文章呢?你能否对他们最感兴趣的一些文章进行快速文本分析,并根据其调整网站的导航结构,以及建议的产品和服务呢?我希望你能够看到如何使用自动化数据抓取替代表单,从而更好地服务你的受众,增长网站规模。

1.3.4 发现并融入你的生态系统

抓取数据自然会让你发现并考虑与你付出相关的社区的关系。当你抓取一个数据源时,很自然地就会产生一些问题:我是否相信他们的数据?我是否相信获取数据的公司?我是否需要和他们沟通以获得更正式的合作?我和他们是竞争关系还是合作关系?从其他源获得这些数据会花费我多少钱?无论如何,这些商业风险都是存在的,不过抓取过程可以帮助我们尽早意识到这些风险,并制定出缓解策略。

你还会发现自己想知道能够为这些网站和社区带来的回馈是什么。如果你能够给他们带来免费的流量,他们应该会很高兴。另一方面,如果你的应用不能给你的数据源带来一些价值,那么你们的关系可能会很短暂,除非你与他们沟通,并找到合作的方式。通过从不同源获取数据,你需要准备好开发对现有生态系统更友好的产品,充分尊重已有的市场参与者,只有在值得努力时才可以去破坏当前的市场秩序。现有的参与者也可能会帮助你成长得更快,比如你有一个应用,使用两到三个不同生态系统的数据,每个生态系统有10万个用户,你的服务可能最终将这30万个用户以一种创造性的方式连接起来,从而使每个生态系统都获益。例如,你成立了一个初创公司,将摇滚乐与T恤印花社区关联起来,你的公司最终将成为两种生态系统的融合,你和相应的社区都将从中获益并得以成长。

1.4 在充满爬虫的世界里做一个好公民

当开发爬虫时,还有一些事情需要清楚。不负责任的网络爬虫会令人不悦,甚至在某些情况下是违法的。有两个非常重要的事情是避免类似拒绝服务(DoS)攻击的行为以及侵犯版权。

对于第一种情况,一个典型的访问者可能每几秒访问一个新的页面。而一个典型的网络爬虫则可能每秒下载数十个页面。这样就比典型用户产生的流量多出了10倍以上。这可能会使网站所有者非常不高兴。请使用流量限速将你产生的流量减少到可以接受的普通用户的水平。此外,还应该监控响应时间,如果发现响应时间增加了,就需要降低爬虫的强度。好消息是Scrapy对于这些功能都提供了开箱即用的实现。

对于版权问题,显然你需要看一下你抓取的每个网站的版权声明,并确保你理解其允许做什么,不允许做什么。大多数网站都允许你处理其站点的信息,只要不以自己的名义重新发布即可。在你的请求中,有一个很好的User-Agent字段,它可以让网站管理员知道你是谁,你用他们的数据做什么。Scrapy在制造请求时,默认使用BOT_NAME参数作为User-Agent。如果User-Agent是一个URL或者能够指明你的应用名称,那么网站管理员可以通过访问你的站点,更多地了解你是如何使用他们的数据的。另一个非常重要的方面是,请允许任何网站管理员阻止你访问其网站的指定区域。对于基于Web标准的robots.txt文件(参见http://www.google.com/robots.txt的文件示例),Scrapy提供了用于尊重网站管理员设置的功能(RobotsTxtMiddleware)。最后,最好向网站管理员提供一些方法,让他们能说明不希望在你的爬虫中出现的东西。至少网站管理员必须能够很容易地找到和你交流及表达顾虑的方式。

1.5 Scrapy不是什么

最后,很容易误解Scrapy可以为你做什么,主要是因为数据抓取这个术语与其相关术语有些模糊,很多术语是交替使用的。我将尝试使这些方面更加清楚,以防止混淆,为你节省一些时间。

Scrapy不是Apache Nutch,也就是说,它不是一个通用的网络爬虫。如果Scrapy访问一个一无所知的网站,它将无法做出任何有意义的事情。Scrapy是用于提取结构化信息的,需要人工介入,设置合适的XPath或CSS表达式。而Apache Nutch则是获取通用页面并从中提取信息,比如关键字。它可能更适合于一些应用,但对另一些应用则又更不适合。

Scrapy不是Apache Solr、Elasticsearch或Lucene,换句话说,就是它与搜索引擎无关。Scrapy并不打算为你提供包含“Einstein”或其他单词的文档的参考。你可以使用Scrapy抽取数据,然后将其插入到Solr或Elasticsearch当中,我们会在第9章的开始部分讲解这一做法,不过这仅仅是使用Scrapy的一个方法,而不是嵌入在Scrapy内的功能。

最后,Scrapy不是类似MySQL、MongoDB或Redis的数据库。它既不存储数据,也不索引数据。它只用于抽取数据。即便如此,你可能会将Scrapy抽取得到的数据插入到数据库当中,而且它对很多数据库也都有所支持,能够让你的生活更加轻松。然而Scrapy终究不是一个数据库,其输出也可以很容易地更改为只是磁盘中的文件,甚至什么都不输出——虽然我不确定这有什么用。

Linux 基本指令介紹

一定要先學會的指令:ls, more, cd, pwd, rpm, ifconfig, find
登入與登出(開機與關機):telnet, login, exit, shoudown, reboot
Linux 多人多工與背景執行功能& 與 [ctrl]+[z], fg, ps, kill
檔案與目錄管理:cd, pwd, ls, cat, more, mkdir, rm, rmdir, mv, cp, ln, find, whereis, chmod, chown, chgrp, df, du
磁碟與硬體管理:mount, fdformat, fdisk, mke2fs, mkbootdisk, badblocks, fsck, rpm
系統管理員:su, clear, dmesg, groupadd, useradd, userconf, passwd, who, whoami, top, free, quotacheck, edquota
壓縮指令:compress, gzip, tar
一些網路功能:ifconfig, route, netstat, hostname, ping, nslookup,talk, traceroute, mail
其他有的沒的:date, cal, grep
ftp 指令:ftp, ncftp, gftp
相關設定指令:set, uname, setup, lilo, Xconfigurator, xf86config
X-Window內的設定指令startx, netconf, netcfg, XF86Setup
問題討論增加新硬碟,增加新使用者,製作開機磁片,


特別說明:

先說明一下,基本上雖然 Linux 目前對於圖形界面的使用已經支援的相當的不錯,但是對於一些比較細微的設定方面,畢竟是比不上使用傳統的文字介面來的有效!並且,使用文字介面來設定對於瞭解 Linux 有一定的幫助,畢竟 Linux 與 MS 的咚咚是不太相同的!鳥哥特別建議大家使用文字介面來解決問題!除此之外,使用文字介面登入 Linux 對於系統資源的損耗也比較少,相對的,就有比較多的資源可以做為網路的用途,進而增加 Linux 的效能。尤其,在我們這個網頁中,基本上是以一般被淘汰的 586 系列電腦做為主機,因此對於記憶體與 CPU 的效能要求並不高,所以能有效的減少系統資源的浪費就盡量的減少一些容易耗掉系統資源的廢物吧!

底下我們會分門別類的將各個比較常用的指令給搬上來,你可以參考一下。另外一個最重要的地方是,在 Linux 主機上,已經內建各個指令的說明內容了,而且是很詳細的線上說明,你可以使用:

[root@tsai  root]#  man  command <=== command 為你欲查詢的指令名稱
[root@tsai  root]#  info  command 
在上表中,針對 command 這個指令你可以使用 man 或者是 info 來查詢他的功能與說明,例如你要查尋 ls 這個指令時,你可以輸入: man  ls 或  info  ls 來查詢一下!適當的利用線上查詢對於你的英文及相關的指令功能有一定程度的幫助喔!

登入與登出(開機與關機)

telnet

這套軟體在 Windows 及 Linux 系統中都存在,只是介面有點不很相同就是了。基本上,這個程式是 user 端用來連線登入遠端主機的。例如鳥哥人在台南,但是我可以在台南使用可以連上 Internet 的電腦,經由 telnet 連線上家裡的 Linux 主機,而進行設定!感覺上就好像在家裡玩自己的 Linux 主機一樣!一般來說,如果你是使用 Winodows 系統,則你可以在『開始』–>『執行』後,輸入  telnet  xxx.yyy.zzz.qqq ,其中, xxx.yyy.zzz.qqq 為 IP 位址,則可以連上主機(或者是 BBS )囉。當然,如果您是在 Linux 系統下,亦可直接輸入 telnet xxx.yyy.zzz.qqq 來連上主機或BBS喔!語法: telnet 主機位址(或主機名稱)

login

登入系統的指令,在遠端進入系統時,程式會自動執行。假設你所要登入的系統主機為 sun.os.test.com ,則你可以在 Windows 底下的 Telnet 軟體,或其他軟體上,執行: telnet  sun.os.test.com 則會出現如下的畫面:

SunOS  5.7login:  username
Password:sun# _

 你只要有 username 及 pass word 就可以登入系統啦!在你登入系統後, sun# 是提示字元,相當於古早的  C:\> 的意思!

exit

這是離開 Linux 系統的指令,相當於 login out 的意思。

sun#  exit

shutdown

Linux 用來關機的指令,這個指令只有 root 才有權力下! shutdown 的用法如下:

[root@tsai  root]#   shutdown  <==系統在兩分鐘後關機,並傳送訊息給在線上的人
[root@tsai  root]#   shutdown  -h  now  <==系統立刻關機
[root@tsai  root]#   shutdown  -r  now  <==系統立刻重新開機
[root@tsai  root]#   shutdown  -h  20:30  <==系統在今天的 20:30 分關機
[root@tsai  root]#   shutdown  -h  +10   <==系統在 10 分鐘後關機

reboot

這是鳥哥最常用來重新開機的指令(或關機),可以配合寫入緩衝資料的 sync 指令動作,如下:
[root@tsai  root]# sync; sync; sync; reboot

Linux 多人多工與背景執行功能

多人多工Linux 最為人所稱道的即是其多人多工的能力,你可以在任何時刻連線上來你的 Linux 主機,並且同時做很多的工作,例如同時執行 http 的 Web 功能,同時進行 fortran 等程式語言的編輯,並同時上網聊天!你會懷疑, Windows 98 也可以做到這樣的地步呀!不過,不要忘了,在 Linux 的系統下,你所做的任何工作都是獨立的,你可以隨時將你所不要的工作給殺掉,而且,當其中某一個程式當掉的時候, Linux 並不會當機,只要你在其他的視窗再開啟一個終端介面,然後查出當機的那一個指令的 process (過程),然後將之殺掉就可以了!根本不用再重新開機!也因為這種多人多工的強大能力,因此, Linux 系統一般來說是很少當機的,並且,由於其記憶體的管理功能完善,因此也不容易有 CPU 過熱的情況發生(如果只是做為一般伺服器使用)。
在你的 Linux 主機中,可以支援七個終端視窗介面,你可以按[Alt]+[F1]…..[F7]來切換不同的終端機介面!所以當其中一個終端機介面當機的時候,你可以在另外一個終端機登入,然後查出錯誤的所在(使用 ps -aux 的功能),再以 kill 將錯誤的地方殺掉即可!
背景執行
另外一個功能,就是『背景執行』的功夫了。當你輸入
[root@tsai  root]#  cp  file1  file2  &
這一串指令的時候,表示將 file1 這個檔案複製為 file2 ,且放置於背景中執行,也就是說執行這一個命令之後,在這一個終端介面仍然可以做其他的工作!而當這一個指令( cp  file1  file2 )執行完畢之後,系統將會在您的終端介面顯示完成的消息!很便利喔!
多人多工的問題
多人多工確實有很多的好處,但其實也有管理上的困擾,因為使用者越來越多,將導致你管理上的困擾哩!另外,由於使用者日盛,當使用者達到一定的人數後,通常你的機器便需要升級了,因為 CPU 的運算與 RAM 的大小可能就會不敷使用!
& 與 [Ctrl]+[z]

如前所述,背景執行可以提供你在同一個終端機介面(命令模式)當中同時做很多的事情,你可以使用 & 或 [Ctrl]+[z] 來將指令放置背景中執行。例如執行 find  “/”  -name  httpd & 這一行命令,表示將尋找 httpd 這個檔案的指令放置到背景中執行的意思。另外,當你執行一個需要長時間的程式,例如執行 ftp 程式時,在程式進行當中,也可以經由按下 [Ctrl]+[z] 來將程式放置於背景中。那如何由背景中將程式在叫回螢幕上呢?請參考下一個指令 fg

fg

fg 是將程式再叫回螢幕上顯示的一個指令,在終端模式中輸入 fg 即可。當然,如果你當時並沒有程式在執行的話,系統會告訴你,並無執行中程式(no such job)。

ps       -aux

這是察看執行中的程式的一個指令,你可以配合其參數  -aux  來執行,如下:

[root@tsai  root]#  ps  -aux

則系統將會列出連同系統服務的程式,在輸出的第一列中會出現 『PID』字樣,在那一欄中的咚咚就是每一個程式執行的代碼。例如下面的輸出畫面。

[root@tsai  root]#  ps  -aux
USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  1324  532 ?        S    Jul16   0:14 init [3]
root         2  0.0  0.0     0    0 ?        SW   Jul16   0:05 [kflushd]
root         3  0.0  0.0     0    0 ?        SW   Jul16   0:29 [kupdate]
root         4  0.0  0.0     0    0 ?        SW   Jul16   0:00 [kpiod]
root         5  0.0  0.0     0    0 ?        SW   Jul16   0:00 [kswapd]

在上圖中, init 這個程式的 PID 為 1 。

kill

這是用來殺掉執行中程式的指令,需配合 ps 這個指令,當你執行一個 ftp 程式,但是他有點當當的時候,你可以 ps  -aux 這個指令查出  ftp  這個程式的代碼(PID),假設其 PID 為 110 ,然後輸入:

[root@tsai  root]# kill  110

即可殺掉這個 ftp 程式。


檔案與目錄管理

cd

這是用來變換工作路徑的指令。一登入 Linux 系統後,root 會在 /root 下,至於使用者會在預設的 /home/username 底下,例如鳥哥的 ID 為 vbird ,則以 vbird 的身份登入後,會到 /home/vbird 這個路徑下。OK!那回到上一層可以用 cd .. 而到相對路徑可到 cd ../bird,至於絕對路徑則是 cd /usr/sbin !注意喔,在前面的提示字元會改變路徑名稱

[root@tsai /root]#  cd ..       <== 回到上一層
[root@tsai /]#  cd          <== 回到使用者目錄
[root@tsai root]#  cd /usr/bin  <== 到 /usr/bin 這一個目錄
[root@tsai bin]#                <== 看吧!到 bin 這個目錄下囉!

pwd

這是顯示目前所在目錄的指令,例如在上個表格最後的目錄是 /usr/bin 這個目錄,但是提示字元僅顯示 bin ,如果你想要知道目前所在的目錄,可以輸入 pwd 即可:

[root@tsai bin]#  pwd
/usr/bin  <== 顯示路徑囉!
[root@tsai bin]# 

ls

這是用來顯示檔案名稱與內容的指令,檔案的內容說明已經在 這裡 說明過了,在此不再重複! ls 的語法為:

[root@tsai bin]# ls –color 以彩色顯示檔案資料
[root@tsai bin]# ls -l     詳細列出檔案系統結構
[root@tsai bin]# ls -a     顯示隱藏檔 (以”.”開頭的檔案)
[root@tsai bin]# ls -al    同時顯示隱藏檔與詳細資料
[root@tsai bin]# ls -al|more 將檔案內容以一頁一頁顯示

cat

這是將檔案內容列出的指令。例如在 /root 下有一個檔名為 .bashrc (這是系統預設的檔案,是隱藏檔),你可以按下 cd 回到 /root 目錄後,執行:

[root@tsai /root]# cat .bashrc
# .bashrc# User specific aliases and functionsalias rm=’rm -i’
alias cp=’cp -i’
alias mv=’mv -i’
alias ll=’ls -l’
alias lm=’ls -al|more’

上面顯示的就是 .bashrc 這個檔案的內容啦!基本上,cat 與 DOS 下的 type 是相同的!

more

是否覺得 cat 在讀取較大的檔案的時候會有看不到的資訊呢(如果檔案太大的話),這時候你可以用 more 來一頁頁讀取喔!另外, more 也可以與其他的程式合併使用,例如 ls !(如下表中,『|』就是分隔號,可以將兩個指令放在一起執行!)

[root@tsai /root]# more .bashrc
[root@tsai /root]# ls -al|more

mkdir

建立新的目錄!例如我們要建立一個 test 的目錄,你可以這樣下指令:

[root@tsai /root]# mkdir test
[root@tsai /root]# ls -l

再執行了 ls -l 之後,你就可以看到 test 這個目錄啦!

rm    -irf

這是移除的指令,相當於 dos 下的 del 指令!這裡要注意的是,通常在 Linux 系統下,為了怕檔案被誤殺,所以都已經有 -i 這個參數, -i 是指每個檔案被殺掉之前都會確認一次。而如果要連目錄下的東西都一起殺掉的話,就要使用 -rf 這個參數了!你可以用下面這個例子來試試看有什麼不同的現象!

[root@tsai /root]# rm test
[root@tsai /root]# rm -rf test

rmdir

mkdir 是建立目錄,而 rmdir 就是移除目錄的指令。不過,若是欲移除的目錄裡頭有檔案或其他目錄存在,就無法移除,這時就要用剛剛的 rm -rf 來移除啦!

mv

這是移動檔案或目錄的指令,例如我們要將 .bashrc 這個檔案移動至根目錄下,則:

[root@tsai /root]# mv .bashrc /
[root@tsai /root]# mv /.bashrc .

而將檔案移動至目前的工作目錄,則加上 “.” 這個字!語法: mv 來源檔(或目錄) 目的檔(或目錄)

cp

就是 copy 的意思。例如我們要將 .bashrc 這個檔案複製到 /home 底下,可以:

[root@tsai /root]# cp .bashrc /home

語法: cp 來源檔 目的檔

ln

 ln  -s  真實目錄或檔案   連結的目錄或檔案:這是連結檔案或目錄的指令,通常我們都會加 -s 這個參數,例如我們將 /usr/bin 這個目錄連接到 /root 底下,可以這樣輸入:

[root@tsai /root]# ln -s /usr/bin bin

不過請注意喔,在你的 /root 底下的 bin 這個目錄中的所有檔案其實都是 /usr/bin 裡面的東西,所以你如果進入 /root/bin 內亂殺東西的話,等於是將 /usr/bin 內的檔案殺掉喔!語法: ln -s 來源檔(或目錄) 目的檔(或目錄)

find

尋找檔案的指令,會將欲尋找的檔案找出來,例如下面的例子:

[root@tsai /root]# find / -name bin

上面的意思為:在 / 目錄(根目錄)下尋找檔名(-name)為 bin 的檔案,要注意的是,因為 Linux 的檔案很多,如果你的電腦比較舊,可能會找很久…語法: find 路徑 -name 檔名

whereis

相對於 find ,你也可以使用 whereis 這個指令來下達找尋的檔案,whereis 利用曾經找過的系統資訊內的資料去找檔案,所以速度會很快,不過,如果 whereis 找不到的話,並不代表該檔案真的不存在!這個要小心!

[root@tsai /root]# whereis bin
bin: /usr/bin

chmod

這是變更檔案屬性的指令,通常鳥哥都是以數字作為改變屬性的依據;在檔案的屬性中, r 為4分、w 為2分, x 為1分,如果你想要讓你剛建立的一個檔案,讓大家都看到的話,即你需要『-rw-r–r–』,這是你的三個群組的分數分別是 r+w=6, r=4, r=4,所以可以下達:

[root@tsai /root]# chmod 644 .bashrc
[root@tsai /root]# ls -al .bashrc
-rw-r–r–   1 root     root          216 Apr  8 13:54 .bashrc

chown

記得檔案有『擁有人』及『擁有群組』吧,這個 chown 就是在改變擁有者的指令。例如你 copy 一個檔案給 vbird ,但是因為你的身份是 root ,所以你 copy 過去的檔案 vbird 可能不能使用,因此你需要將檔案的擁有人改成 vbird 才可以!如下:

[root@tsai /root]# cp .bashrc /home/vbird
[root@tsai /root]# cd /home/vbird
[root@tsai vbird]# chown vbird .bashrc

那如果想要將整個目錄下的檔案都改變擁有者與擁有群組呢?可以下達
chown  -R  username:groupname  directory  (ex> chown -R root:root /root)
即可喔!

chgrp

作用與 chown 相似,只是在改變檔案或目錄的『擁有群組』。

df

這是用來察看硬碟空間的指令。由於我們目前將檔案都建立在根目錄『/』下,所以只要沒有空間,則所有檔案都無法複製進來系統。不過,若你規劃出多的硬碟,則可以察看你的硬碟空間資訊,如下所示:

[root@tsai /root]# df
Filesystem     1k-blocks      Used Available Use% Mounted on
/dev/hda5         964312     87648    827680  10% /
/dev/hdb5        2150420    745500   1295680  37% /home
/dev/hdb1        2016016   1419708    493896  74% /usr
/dev/hda1        1022080    349880    672200  34% /win98

上面說,Filesystem 是硬碟所在的劃分表, Used 是指使用掉的硬碟空間(KB),Available是剩下空間,Mounted on則是這顆硬碟代表哪一個目錄。如上所示,根目錄(/)在 hda5 這顆硬碟,總空間有 964312 KB,剩下可用空間為 827680KB,至於 /win98 則在 hda1 中,且全部空間有 1022080 KB。如果要將資料型態以 MB 數顯示的話,可以輸入 df -m 來達成。

du

這是用來察看目錄內所有檔案使用掉的空間的情況,如下所示:

[root@tsai /root]# du -m

其中, du 預設的檔案輸出資料為 KB,以參數 -m 使檔案資料顯示為 MB。


磁碟與硬體管理

mount

這是將硬碟或者是光碟、軟碟接掛上系統的指令!之前有提過,在 Linux 下面,每一個裝置都是一個檔案(或目錄),而每一種裝置的檔案型態都不相同,因此對於 mount 後面加的參數就很重要囉:例如:

[root@tsai /root]# mount -t iso9660 /dev/cdrom /mnt/cdrom <=光碟
[root@tsai /root]# mount -t vfat /dev/fd0 /mnt/floppy     <=軟碟(windows 系統檔)
[root@tsai /root]# mount -t ext2 /dev/fd0 /mnt/floppy     <=軟碟(Linux 系統檔)
[root@tsai /root]# mount -t ext2 /dev/hdc1 /mnt/harddisk  <=硬碟

光碟裝置檔=/dev/cdrom、軟碟裝置檔=/dev/fd0、硬碟裝置檔=/dev/hdxx。
如上表所示, -t 是參數,至於 iso9660, vfat, ext2則是這些裝置的檔案型態!後面接的則是這個裝置所在的目錄!千萬記得,這些目錄需要是早已存在的,而且最好是空的目錄,不然目錄裡面原本存在的檔案會不見去!
另外,注意喔!當你 mount 上光碟機或軟碟的時候,請不要輕易的拿出磁片(而且光碟片也不會被你退出),因為會造成系統讀取的錯誤!你應該用 umount 來退出!指令為
umount  /mnt/cdrom  (umount  裝置所在目錄)

fdformat

這是用來『低階格式化』軟碟的指令。(注意:軟碟的裝置檔為 /dev/fd0 )不必將軟碟 mount 就可以格式化了,指令內容為:

[root@tsai /root]# fdformat /dev/fd0H1440

注意喔!在上面的裝置檔案為 /dev/fd0H1440 ,其中加在 /fd0 之後的 H1440 為表示 1.44MB 的軟碟容量!在低階格式化之後,還要將軟碟的檔案格式化為 Linux 的 ext2 之型態,則需要使用 mke2fs 指令!

fdisk

這是對硬碟(也可以對軟碟喔)做分割的程式。基本的用法為=> fdisk 裝置檔案,假設您有一顆硬碟要重新規劃,而這顆硬碟為 hdc ,則你可以輸入:

[root@tsai /root]# fdisk /dev/hdc

然後,按下 m 會出現 help 的選單,要知道的大概只有兩個子指令,一個是刪除 partition 按 d ,一個是增加 partition 按 n,假設你要增加一個 primary partition,按下 n 再按 p 再按你要的 primary partition 號碼(1-4)就可以了。假設你的 hdc 需要規劃成為一個硬碟(即 hdc1)則在輸入 fdisk /dev/hdc 後,需要按:
n(增加) -> p(primary partition) -> 1(partition 1) -> w (儲存寫入) -> q (離開)
同樣的,分割完硬碟(或軟碟)後,要以 mke2fs 格式化!

mke2fs

這是用來將磁碟格式化成 Linux 系統檔的指令。基本上,只要寫入對的裝置檔案就可以了。例如我們要格式化軟碟的話,或是新的硬碟 hdc1 ,則可以如此寫:

[root@tsai /root]# mke2fs -c /dev/fd0
[root@tsai /root]# mke2fs -c /dev/hdc1

要記得的是,在你做這個格式化的動作時,軟碟與硬碟均不可 mount 到 Linux 的系統中。

mkbootdisk

這是製作開機磁片的指令。指令很簡單:

[root@tsai /root]# mkbootdisk –device /dev/fd0 `uname -r`

其中, `uname -r` 是目前 Linux 系統所使用的核心版本,如果你有多個核心版本的話,你以可以直接輸入核心版本。例如在這個網頁中所使用的核心有兩個版本,一個是 2.2.12-20,另一個是 2.2.18,若要以 2.2.18 設定開機的話,可以使用: mkbootdisk  –device  /dev/fd0  2.2.18

badblocks

這是用來檢查硬碟或軟碟有沒有壞軌的指令,你可以用底下的方式來下達:

[root@tsai /root]# badblocks  -svw  /dev/hdc1

fsck

這是用來檢查與修正硬碟錯誤的指令。注意:通常只有身為 root 且你的系統有問題的時候才使用這個指令,否則在正常狀況下使用此一指令,可能會造成對檔案的危害

[root@tsai /root]#  fsck  /dev/hdc1

通常使用這個指令的場合都是在系統出現極大的問題,導致你在 Linux 開機的時候得進入單人單機模式下進行維護的行為時,才必須使用此一指令!

rpm

這是一個安裝或者是解安裝 RedHat 軟體的指令,在 RedHat 中已經有設定了一些有點像 Windows 的軟體安裝功能,這就是 rpm 這套軟體了!而 rpm 所安裝的軟體又分為兩種形式,因此你可以分別使用下面兩種參數對不同的檔案進行安裝:

[root@tsai /root]# rpm  -ivh  xxxxx.rpm  <==將 xxxxx.rpm 檔案安裝於 Linux 系統中
[root@tsai /root]# rpm  -ivh  –nodeps xxxxx.rpm  <==將 xxxxx.rpm 檔案『強制』安裝於 Linux 系統中
[root@tsai /root]# rpm  -Uvh  xxxxx.rpm  <==將 xxxxx.rpm 升級
[root@tsai /root]# rpm  -e    xxxxx.rpm  <==將 xxxxx.rpm 解除安裝
[root@tsai /root]# rpm  -q    squid  <==察看 squid 這一個軟體的版本
[root@tsai /root]# rpm  –recompile  yyyyy.src.rpm  <==安裝檔名為 .src.rpm 的檔案!

這裡要注意的是, rpm 的檔案主要有兩種形式,一種是已經經過編譯的 i386.rpm 檔案,令一種是未經編譯的 .src.rpm 檔案,兩種檔案形式的安裝參數是不一樣的,請小心注意!


系統管理員

su

這是一個用來轉換你身份成為 super user (系統管理員)的指令,任何人只要知道 root 的密碼,就可以成為 super user,所以密碼可千萬不要外流呀!由於 RedHat 在主機之外的終端機上,無法以 root 的身份直接連線,所以你需要以一般身份的 user 連線之後,再以 su 指令來成為 super user:

[vbird@tsai vbird]# su  <==輸入指令
Password:       <==在這裡輸入 root 的密碼
[root@tsai vibrd]#      <==看,使用者名稱變囉!

clear

這是用來清除螢幕畫面用的,沒有什麼太大的用處。通常是你覺得畫面太亂的時候輸入用的!直接輸入 clear 就可以了!

dmesg

在開機的時候你會發現有很多的訊息出現吧,例如 CPU 的形式、硬碟、光碟型號及硬碟分割表等等。但是訊息都是『刷』的一聲就跑過去了!這些訊息有時候對於系統管理員是很重要的,因為他提供了系統的資訊呀!要看這些訊息你可以用 dmesg 這個指令來觀看!

[root@tsai /root]# dmesg|more

加上 |more 的原因是因為訊息太多了,所以可以加入這個管線指令來使畫面暫停!

groupadd

這是用來增加群組的指令,通常鳥哥都不用這個指令的,因為有更容易使用的指令 /bin/userconf 可以使用哩(注意,在 RedHat 7.0 以後的版本,就要使用 /sbin/userconf 哩)!

useradd

這是用來增加使用者的指令,鳥哥通常不使用這個指令,你可以使用 /bin/userconf 這個指令,更簡單易用喔(是視窗介面的喔!)(注意,在 RedHat 7.0 以後的版本,就要使用 /sbin/userconf 哩)

userconf

這是用來增加使用者、群組等,且以視窗為介面的一個指令!如果你是以遠端登入,並使用 su 指令成為 super user 的話,直接輸入 userconf 可能會找不到這個指令,你可以輸入: /bin/userconf 來啟動這個指令!(注意,在 RedHat 7.0 以後的版本,就要使用 /sbin/userconf 哩),由於這個指令的圖示較多,請到這裡來看看!

passwd

這是用來更改密碼的指令,很簡單,只要在提示字元下輸入 passwd ,然後輸入目前的密碼,再輸入兩次欲修改成的新密碼,就修改OK了!不過要注意,密碼的形式:不能與帳號相同,且需要 8 個字元以上,另外,帳號也不能太簡單!否則系統會不接受!

[vbird@tsai vbird]# passwd
Changing password for vbird
(current) UNIX password:      <==這裡輸入目前的密碼
New UNIX password:     <==這裡輸入新的密碼
Retype new UNIX password:     <==這裡再輸入新的密碼一次
passwd: all authentication tokens updated successfully

who

這是用來視察目前在系統上的使用者指令,你也可以使用 w 這個指令來下達動作。

[root@tsai /root]# who
root     pts/0    Aug  2 20:43[root@tsai /root]# w
  8:48pm  up 4 days,  5:08,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
root     pts/0    192.168.1.2       8:43pm  0.00s  0.38s   ?     –

基本上,who 與 w 的功能是相同的,只是 who 僅列出使用者名稱與登入時間,至於 w 則會列出使用者的

  • 來源位址(IP):就是 FROM 那一項即是IP;
  • 登入時間:即是 LOGIN@ 那一項;
  • 工作項目:就是 WHAT 那一項!

whoami

這是用來確認你目前的身份的指令,由於你可能會有幾個身份在你的機器上,所以需要以這個指令來確認你的身份,不過由於 Linux 會將使用者名稱寫在提示字元上,所以這個指令目前比較少用到了。

top

這是用來指示目前系統的服務項目的動態資料。

[root@tsai /root]# top
 10:14pm  up 4 days,  6:34,  1 user,  load average: 0.01, 0.01, 0.00
40 processes: 39 sleeping, 1 running, 0 zombie, 0 stopped
CPU states:  0.5% user,  0.3% system,  0.0% nice, 99.0% idle
Mem:   63124K av,  60844K used,   2280K free,  23604K shrd,  35648K buff
Swap: 104380K av,   1684K used, 102696K free                 10788K cached  PID USER     PRI  NI  SIZE  RSS SHARE STAT  LIB %CPU %MEM   TIME COMMAND
 3121 root      20   0  1016 1016   820 R       0  0.9  1.6   0:47 top
    1 root       0   0   380  368   320 S       0  0.0  0.5   0:04 init
    2 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kflushd
    3 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kupdate
    4 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kpiod
    5 root       0   0     0    0     0 SW      0  0.0  0.0   0:00 kswapd
    6 root     -20 -20     0    0     0 SW<     0  0.0  0.0   0:00 mdrecoveryd
  366 bin        0   0   308  288   228 S       0  0.0  0.4   0:00 portmap
  382 root       0   0   392  376   328 S       0  0.0  0.5   0:00 apmd
  435 root       0   0   488  480   388 S       0  0.0  0.7   0:00 syslogd
  446 root       0   0   688  676   316 S       0  0.0  1.0   0:00 klogd

輸入 top 之後,會出現類似上面的顯示情況。上圖中說明了你的記憶體有63124K,而下方的面版說明了目前正在執行中的工作內容!

free

這是用來察看記憶體的指令。

[root@tsai /root]# free
             total       used       free     shared    buffers     cached
Mem:         63124      60732       2392      23136      35648      10796
-/+ buffers/cache:      14288      48836
Swap:       104380       1684     102696

如上圖中,說明總記憶體容量為 63124K,而使用了 60732K,另外,虛擬記憶體(Swap)共有 104380K(亦即共有 100MB 的虛擬記憶體)。

quotacheck, edquota

這些檔案是用來限制使用者在 Linux 主機上的硬碟使用容量。例如,有十個人同時分享一個 2G 的硬碟空間,但是有一個使用者就用了 1.5 GB 的容量,那相對的,其他人可使用的空間就只有剩下 0.5G 啦!不公平對不對,而且也怕被使用者填充大量的垃圾,而使用系統資源被瓜分掉!因此就有 Quota 這個咚咚的出現啦!由於執行的步驟較為繁瑣,所以額外寫了一個頁面,請到這裡來看看。


壓縮指令

compress

這是用來壓縮及解壓縮檔名為 .Z 的壓縮檔。要注意的是,用 compress 壓縮的時候,會將原檔案殺掉而變成檔名為 .Z 的檔案,例如你壓縮一個名為 bird.test 的檔案,則壓縮完成後只會剩下 bird.test.Z 這個壓縮檔!當然,解壓縮的時候也是一樣的,壓縮檔不見了,只有剩下被解壓縮的檔案。指令如下:

[root@tsai /root]# compress xxxxx        <==將 xxxxx 檔案壓縮成為 xxxxx.Z 檔名
[root@tsai /root]# compress -d xxxxx.Z   <==將 xxxxx.Z 解壓縮成 xxxxx

上表中,解壓縮也可以用 uncompress xxxxx.Z 來達成!

gzip

這個也是一個壓縮指令,與 compress 很相似,指令的用法也相同!只是壓縮的檔名為 .gz 罷了!

[root@tsai /root]# gzip  xxxxx         <==這是壓縮指令
[root@tsai /root]# gzip  -d  xxxxx.gz  <==這是解壓縮指令

tar

這是一個很棒的壓縮指令,這個指令可以配合 gzip 來進行整個目錄的壓縮!例如有一個名為 bird 的目錄要被你整合成一個檔案,你可以使用:tar  -xvf  *.tar  *(其中 * 為你所要整合的目錄名稱)。

[root@tsai /root]# tar  -cvf  bird.tar  bird  <==只有將目錄轉成一個檔案,沒有壓縮
[root@tsai /root]# tar  -zcvf  bird.tar.gz  bird <==壓縮一整個目錄成為 .tar.gz 檔案

上面這個例子的 bird.tar 只是將 bird 這個目錄整個拷貝成為一個檔案而已,並沒有壓縮,而 bird.tar.gz 則是將 bird 這個目錄壓縮成為一個檔案!基本上,我們都是使用 -zxvf 來壓縮一整個目錄的!而如果是要解壓縮呢?由於有沒有壓縮所下的參數並不相同,所以針對兩種檔案也是有兩種參數的組合:

[root@tsai /root]# tar  -xvf  bird.tar
[root@tsai /root]# tar  -zxvf  bird.tar.gz

上面則是解壓縮的參數!
注意了,用 compress 及 gzip 壓縮及解壓縮的時候,會將原檔案取代掉!而使用 tar 來壓縮及解壓縮的時候,原檔案將會與產生檔案同時存在!通常我們都是使用 tar 來進行壓縮或解壓縮的!(當然,你還是可以使用 compress 及 gzip 來壓縮一個大的檔案!)


一些網路功能

ifconfig

這是用來查詢目前我們這個系統的網路卡的狀況的指令,可以查詢 IP、子遮罩網路及網路卡的硬體資訊等等。例如:

[root@tsai /root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:FC:20:F1:4D
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7651977 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7467862 errors:0 dropped:0 overruns:0 carrier:0
          collisions:961 txqueuelen:100
          Interrupt:10 Base address:0x6100eth1      Link encap:Ethernet  HWaddr 00:80:C8:5A:87:01
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7492497 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7617653 errors:0 dropped:0 overruns:0 carrier:0
          collisions:289 txqueuelen:100
          Interrupt:9 Base address:0x6200lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:512 errors:0 dropped:0 overruns:0 frame:0
          TX packets:512 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0ppp0      Link encap:Point-to-Point Protocol
          inet addr:211.74.249.38  P-t-P:172.16.11.8  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:7469726 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7617651 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10

由於上面的例子是使用兩張網路卡,因此會有 eth0 及 eth1 兩個介面,至於 lo 是系統內設的遞迴網路,這是一定會有的咚咚,而且其 inet addr(IP)一定是 127.0.0.1!另外, ppp0 則是 ADSL 撥接之後所產生的虛擬介面(對外的介面!)。在這個例子中,鳥哥使用了兩張網路卡, eth0 用在內部網路, eth1 用在 ADSL 撥接,所以 eth1 就沒有 address。至於第一張網路卡的網路位址是虛擬的 192.168.1.2。而真正的對外聯繫是 ppp0 這一個撥接介面,其 internet 是 211.74.249.38!

route

這是用來看你的網路通訊包傳送的路由情況的指令。由於通信包是藉由一個一個的路由表來傳遞的,所以觀察你的路由表,對於網路除錯(debuge)就很重要啦!

[root@tsai /root]# route

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.1.2     *               255.255.255.255 UH    0      0        0 eth0

172.16.11.8     *               255.255.255.255 UH    0      0        0 ppp0

192.168.1.0     *               255.255.255.0   U     0      0        0 eth0

127.0.0.0       *               255.0.0.0       U     0      0        0 lo

default         172.16.11.8     0.0.0.0         UG    0      0        0 ppp0

例如上表中,所有的通訊都是藉由 ppp0 這一個介面卡(Iface)並且其通訊閘(Gateway)為 172.16.11.8 這一個!另外,在虛擬 IP (內部網路)則是藉由 eth0 (192.168.1.2)這一塊網卡來連線的!另外,你也可以使用 route 來加入你的路由表,假如你要將一個網路為 192.56.76.XXX 且子網路為 255.255.255.0 的位置加入你的 eth0 這個網路卡的連線處理中,就可以使用如下的語法:

[root@tsai /root]# route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0

netstat

這也是用來觀察網路狀況的指令。

[root@tsai /root]# netstat

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0    126 swks249-38.adsl.:telnet 192.168.1.15:1341     ESTABLISHED

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags       Type       State         I-Node Path

unix  2      [ ]         DGRAM                    87643  /dev/log

unix  0      [ ]         STREAM     CONNECTED     116    @00000012

在上表黃色的部分,由於鳥哥是在另一部電腦連線進入的,所以網路位址就會不同囉!

hostname

這只是用來觀看你的主機名稱而已。

[root@tsai /root]# hostname
tsai.adsldns.org

ping

這是用來察看對方網路是否有動作的指令,這個指令亦可以在 windows 上面執行!

[root@tsai /root]# ping www.kimo.com.tw

PING www.kimo.com.tw (202.1.237.21) from 211.74.249.38 : 56(84) bytes of data.

64 bytes from 202.1.237.21: icmp_seq=0 ttl=245 time=56.7 ms

64 bytes from 202.1.237.21: icmp_seq=1 ttl=245 time=58.0 ms

64 bytes from 202.1.237.21: icmp_seq=2 ttl=245 time=58.7 ms

64 bytes from 202.1.237.21: icmp_seq=3 ttl=245 time=52.0 ms

64 bytes from 202.1.237.21: icmp_seq=4 ttl=245 time=72.2 ms

— www.kimo.com.tw ping statistics —

5 packets transmitted, 5 packets received, 0% packet loss

round-trip min/avg/max = 52.0/59.5/72.2 ms

例如上表中,我們去觀察 www.kimo.com.tw 是否有啟動,看每一列的最後一行,會告訴你訊息回應的時間大約是 56ms!(10-3 sec.)

nslookup

這是用來查詢或反查詢 DNS 的指令!例如我們要知道 奇摩 的網路位址,則可以如此查詢:

[root@tsai /root]# nslookup www.kimo.com.tw

Server:  ksdns.seed.net.tw

Address:  139.175.10.20Non-authoritative answer:

Name:    www.kimo.com.tw

Address:  202.1.237.21

系統會告訴你,我們使用的 DNS server 是 ksdns.seed.net.tw,而查詢到的網址是 202.1.237.21。如果需要更詳細的查詢,可以用下面的方式來查!

[root@tsai /root]# nslookup

Default Server:  ksdns.seed.net.tw

Address:  139.175.10.20> set type=any            <==告訴系統我們要詳細的資料!

> www.kimo.com.tw

Server:  ksdns.seed.net.tw

Address:  139.175.10.20Non-authoritative answer:

www.kimo.com.tw internet address = 202.1.237.21Authoritative answers can be found from:

kimo.com.tw     nameserver = ns1.kimo.com.tw

kimo.com.tw     nameserver = ns1.yahoo.com

kimo.com.tw     nameserver = ns3.europe.yahoo.com

kimo.com.tw     nameserver = ns5.dcx.yahoo.com

ns1.kimo.com.tw internet address = 210.59.144.1

ns1.yahoo.com   internet address = 204.71.200.33

ns3.europe.yahoo.com    internet address = 217.12.4.71

ns5.dcx.yahoo.com       internet address = 216.32.74.10

talk

這是用來交談的指令。

traceroute

這是用來追查通訊包傳送的情況,例如我們要從 seednet 的網路上查詢到成大的代理伺服器的通訊狀況,可以使用如下的指令:

[root@tsai /root]# /usr/sbin/traceroute proxy.ncku.edu.tw
traceroute to proxy.ncku.edu.tw (163.28.112.100), 30 hops max, 38 byte packets
 1  172.16.11.8 (172.16.11.8)  128.378 ms  68.920 ms  118.313 ms
 2  139.175.15.1 (139.175.15.1)  54.146 ms  38.557 ms  44.320 ms
 3  R58-37.seed.net.tw (139.175.58.37)  61.339 ms  43.177 ms  39.548 ms
 4  R56-162.seed.net.tw (139.175.56.162)  66.631 ms  43.182 ms  41.429 ms
 5  203.72.191.222 (203.72.191.222)  65.538 ms  61.379 ms  38.887 ms
 6  140.116.241.230 (140.116.241.230)  40.159 ms  46.107 ms  46.854 ms
 7  proxy.tnrc.edu.tw (163.28.112.100)  38.641 ms  57.286 ms  46.380 ms

系統會告訴你,總共通過了7個路由,並列出了每一個路由的 Internet 位址。這個東西有個好處,可以告訴你,當網路出問題時,問題是在哪一個地方!

mail

這是用來收發信件的指令,詳細的流程我們會在 mail 架站中提及。


其他有的沒的

date

這是用來察看日期的指令。

[root@tsai /root]# date

Fri Aug  3 19:09:31 CST 2001

cal

這是用來叫出日曆的指令。

[root@tsai /root]# cal
     August 2001
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

grep

這是用來搜尋某些特定字元的指令。例如使用 ps -aux 查詢系統服務時,我們只需要知道 sendmail 是否有動作,則可以使用管線指令『|』來加入 grep 這個指令同時運作。

[root@tsai /root]# ps -aux|grep sendmail

root  443  0.0  1.0  2092  660 ?  S Jul26   0:36 sendmail: accepti

vbird     8387  0.0  0.7  1240  492 pts/1    S    19:11   0:00 grep sendmail

上表則表示 sendmail 有在運作了!


ftp 指令

ftp

FTP 這個功能不用再多談了吧?這是用來捉取網路上免費檔案的一套軟體。例如我們要連上交大的 FTP 站捉東西,可以如下:

[root@tsai /root]#  ftp linux.cis.nctu.edu.tw

Connected to linux.cis.nctu.edu.tw.

220 ProFTPD 1.2.0rc3 Server (Linux.CIS FTP server) [linux.cis.nctu.edu.tw]

Name (linux.cis.nctu.edu.tw:vbird): anonymous <==輸入 anonymous 匿名登入

331 Anonymous login ok, send your complete email address as your password.

Password:  <==輸入 name@server.xxx.xxx 型態的 mail-address 密碼

230 Anonymous access granted, restrictions apply.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> dir   <==檢查網站上的目錄

200 PORT command successful.

150 Opening ASCII mode data connection for file list.

-rw-rw-rw-   1 linux    adm      39491400 Aug  3 21:00 00ls-lR

-rw-rw-rw-   1 linux    adm       3091546 Aug  3 21:01 00ls-lR.gz

-rw-r–r–   1 linux    wheel         232 Mar 15 22:00 00mirror.today

drwxr-xr-x   5 linux    wheel        4096 Oct 29  2000 java

drwxr-xr-x  14 linux    wheel        4096 Aug  2 19:31 kernel

drwxr-xr-x   4 linux    wheel        4096 Sep 28  2000 mirrors

226-Transfer complete.

226 Quotas off

ftp> cd kernel/v2.4 <==進入 kernel 底下的 v2.4 目錄

250 CWD command successful.

ftp> get linux-2.4.0.tar.bz2.sign <==捉下 linux-2.4.0.tar.bz.2.sign 這個檔

local: linux-2.4.0.tar.bz2.sign remote: linux-2.4.0.tar.bz2.sign

200 PORT command successful.

150 Opening BINARY mode data connection for linux-2.4.0.tar.bz2.sign (248 bytes)

.

226 Transfer complete.

248 bytes received in 0.014 secs (17 Kbytes/sec)

ncftp

在使用 FTP 功能的時候,因為只能一次捉一個檔案,所以要捉一群檔案的時候就會有困擾。這時我們可以使用更容易登入匿名 FTP 站的 ncftp 來執行 FTP 功能!

[root@tsai /root]# ncftp linux.cis.nctu.edu.tw

ncftp / > mget  -R  kernel  <==將 kernel 這個目錄的東西全捉下來!

加上了 mget -R 目錄 這個指令後,就可以將目錄下的東西完全捉下來!好用吧!

gftp

這是在 X-Windows 使用的圖形介面 FTP 咚咚!這個咚咚的使用方法就跟 CutFTP 很相似!


相關程式設定指令

set

這是用來設定或是觀看目前系統的設定的指令,若只打入 set 則僅會列出目前系統的參數。

uname

這是用來觀看系統名稱的指令,可以打入 -a 參數來列出所有資訊。

[root@tsai /root]# uname -a

Linux vbird.adsldns.org 2.2.12-20 #1 Mon Sep 27 10:25:54 EDT 1999 i586 unknown

setup

這個是常常使用來設定系統的一個指令,執行之後會有一個視窗出現,較常使用的是 System services 這一項,可用來設定開機的時候要開放的服務!

lilo

這是用來設定多重開機,或是開機選項的指令,詳細的流程請到這裡來看看!

Xconfigurator

這是用來簡易的設定 X-Windows 的指令,當你的 X-Windows 確定是可以跑的,而你想要改變一些設定,例如:解析度、色彩度等等,就直接使用這個指令啦!

xf86config

這是用來設定 X-Windows 的指令!這個指令會比 Xconfigurator 麻煩,不過當你的 X-Windows 沒有辦法跑的時候,這個咚咚是很好用的!


X-Window內的設定指令

startx

這是開始執行 X-Windows 的指令!

netconf

這是網路設定的指令!

netcfg

這也是網路設定的指令!

XF86Setup

這是在 X-Windows 下以圖形介面設定 解析度、色彩度 的設定指令。


本章問題討論:
    1. Q:在 Linux 上面都是一些線上的英文說明,有沒有中文說明,或更詳細的說明資料呢?
A
其實在網路上已經有一票高手在進行 Linux how to 的翻譯工作,這是一個很有意義的事情,因為可以讓新手或者是一些有需要使用 Linux 的人,有一個很好的學習文件。你可以來下面的網址看看:
中文How-to:http://www.linux.org.tw/CLDP/
英文How-to:http://www.ibiblio.org/mdw/HOWTO/HOWTO-INDEX/howtos.html
    1. Q:在 Linux 中如何加入新硬碟?
A
其實加入新硬碟的方法也是很簡單的:
      • 安裝硬碟:關掉 Linux 主機電源,調整 Hard Disk 的 Jump (master 或 slave),串接在 IDE 的介面,請注意,留意你增加的硬碟所串接的 IDE 介面為哪一個插槽,例如你插在 IDE2 的 Master ,則你的硬碟應為 hdc;
      • 新增硬體於BIOS:開啟電腦後,按 del 鍵進入 BIOS,選擇 IDE Hard Disk Detector 字樣的選項,讓BIOS去捉硬碟,然後再選擇 Save and Exit;
      • Linux 安裝:開機進入 Linux 的時候,系統會告訴你有捉到一個新的硬體,你可以按 『configure』 由系統直接安裝即可;
      • 格式化硬碟:以 root 的身份進入 Linux 後,執行以下兩個程式:
        • fdisk  /dev/hdc  <== hdc 與你的硬碟串接的IDE介面有關,關於這個指令的介紹請參考上面的指令說明;
        • mke2fs  -c  /dev/hdc1  <==假設硬碟全部配置成一個大硬碟,則硬碟應為 hdc1 ,以 mke2fs 將系統規劃為 Linux 的系統檔。
      • 開機自動載入:再來則是以 vi 修改 /etc/fstab 檔案,讓每次開機把這個硬碟直接掛入系統中。例如 hdc1 這顆硬碟掛在 /mnt/hdc1 中,則 fstab 的檔案有點像這樣:(/dev/hdc1 那一行是新加入的!)
/dev/hda1/ ext2 defaults 1 1
/dev/hda5    swap    ]swap    defaults        0 0
/dev/hdc1  /mnt/hdc1  ext2 defaults        1 1
      • 安裝完成:然後再重新開機就可以啦!
    1. Q:在 Linux 中如何增加新使用者呢?
A
無論是加入新使用者或者是加入新群組,都可以使用 /bin/userconf 這個程式來完成,使用這個程式,只要輸入 ID 及 pass word 就可以啦!(不過你必須是 root 的身份才可以執行!)詳細的執行請看上面的指令說明。
    1. Q:在 Linux 中如何製作開機片?
A
無論何種系統,有個開機片總是比較安心的! Linux 也是一樣!雖然他很穩定,但是並不是說就不會有問題,因此製作可開機磁片以利解救 Linux 問題是一個好習慣!製作開機片的方法很簡單,只要下達:

就可以啦!

 

別怕失業!AI 時代,你還有這20個新工作可以找

AI掀起新一波工業革命,淘汰許多可由機器代勞的職務,卻也創造許多新的就業機會。

AI是軟體,走入以硬體製造為強項的台灣,必將帶來許多新的可能。工業技術研究院產業經濟與趨勢研究中心主任蘇孟宗、組長紀昭吟指出,AI時代來臨,不妨重新思考「軟硬整合」的定義。它不再只是軟體加硬體,而是要「軟實力乘以硬實力」,達到1加1大於2的功效。

兩人進一步分析,AI改變產業結構的路徑可分為以下兩種,一是「AI產業化」,即讓AI本身成為一項產業;二為「產業AI化」,也就是把台灣的硬體製造或其他產業與AI合而為一。如此,通曉AI的專家固然將成新時代不可或缺的人才,既有產業也能因AI加值而生成新職務。

至於哪些工作將乘勢而起?一起來看看。

自駕車業者(Self-driving Cars Industry)

「自動駕駛」、「無人車」是現在最夯的名詞之一,預估能帶起10兆美元以上的商機。專家預言,自駕車是10年內一定會實現的人工智慧產物,只要感測技術發展成熟,讓自駕車像人類駕駛一樣,能夠眼觀四面、辨識路況和交通號誌,以及具備面對突發狀況的應變能力,把自駕車送上馬路,絕對不成問題。

無人機駕駛(Unmanned Flying Vehicles Drivers)

遙控飛機是許多人的童年回憶,拜AI之賜,這真的能成為你的職業!資策會預估,今年台灣無人機整體產值可望來到1.73億,是去年的兩倍以上,往後的發展更是無可限量。無人機的運用範疇甚廣,可協助農夫噴灑農藥,於災難期間空投物資,或進行交通狀況空拍,幫助人們節省勞動時間與力氣。目前投入最多的公司如台灣的雷虎科技,或中國的大疆創新,而歐美業者也正積極將無人機推廣至商業應用。

機器人培訓師(Robot Trainer)

大量的自動化機器誕生後,如何讓它們的舉止貼近人類行為,成了嶄新的學問。機器人訓練師即是機器學習專家、自然語言技術專才,他們努力讓機器人看起來與真人沒有差別,包括訓練它們講出人類的語法、音調,表現出同情心等情緒,同時也訓練機器人揣測人類的語氣,聽懂對話中的弦外之音、解讀他人的言下之意。

AI產品經理(AI Product Manager)

打造AI的工程師不可或缺,推廣AI的產品經理也很重要。AI產品經理具有向一般大眾解說AI背後原理的本領,舉例來說,人工的演算法讓很多事物變得不透明,AI產品經理需向購買AI的公司主管說明演算法則。唯有讓企業了解並正確使用AI,AI技術才能更受仰賴。

資料科學家(Data Scientist)

隨著大數據滲透至各行各業,負責清洗數據、解讀其中價值的資料科學家成了炙手可熱的職位。資料科學家需要精通數學、統計學、程式語言,更重要的是,他們能從中浩瀚數據海中發現問題本質、察覺底層意義,進而讓數據資料的力量發揮到極致,協助公司各部門做出精準的決策。

大演算家(Algorithm Engineer)

精確來說,大演算家即是熟諳演算法的「演算法開發工程師」。別於IT工程師負責寫程式,他們擅長用電腦計算數字,設計數學計算流程,提供解決問題的方法,可以說是AI的發明家。

使用者介面設計師(User Interface Designer)

「使用者介面」(User Interface,簡稱UI)是人與機器的最初相遇地點,也是科技產品的經營成敗關鍵。在不久的將來,UI必定都是自然的互動,人類不再察覺自己正在使用機器。而在人機互動的工具上,未來也不僅只於滑鼠、觸控螢幕,語音更是營造自然溝通的好媒介。

科技法律專才(Scientific and Technological Law Expert)

機器的記憶比你持久,儲存容量也比你的腦容量大很多,因此,確保AI在運作時不違背道德,能夠顧及科技倫理,無疑是棘手課題。只要是與科技有關的活動,無論是消費者的隱私保護,或是產品使用規範,都需要科技法律專才把關,顯見這個職務的人力需求將節節攀升。

遊戲數值企劃師(Game Designer)

電玩角色的攻擊力與防禦力要如何訂定,才能讓一款遊戲沒有bug、玩家各個盡興?端看遊戲數值企劃師的功力。電競熱潮當道,數位遊戲業也成為產值看漲的行業,而遊戲數值企劃師是這裡頭的靈魂角色之一,他們運算大量的資料,同時結合使用者體驗,在複雜的數據中擬出刺激感十足、符合人性的遊戲公式。

網路輿情分析師(Public Opinion Analyst)

現在的網路消費者選擇愈來愈多,口味愈來愈任性,讓業者不禁想問「消費者到底最喜歡什麼?」、「鄉民究竟在酸什麼?」這讓網路輿情分析成了顯學。結合大數據技術,網路輿情分析師能有條理地歸納網路消費者的意見,運用語料分析解讀背後意義,進而更加了解目標客戶對自家品牌、產品或是服務的想法,也能成為公關部門的生力軍,針對網路上的負面評價做出即時的危機處理。

互動式網路購物主播(Interactive Internet shopping Host)

你還看電視購物頻道嗎?未來,邊看電視、邊撥打訂購專線下單的交易恐怕不再有看頭。近來已有購物業者搭建網路購物平台,讓購物主播以直播的方式一面推銷、一面與消費者互動。隨著交談機器人技術日漸普及,未來更能結合AI,提供即時的客製化資訊,不但增添購物樂趣,也提升了消費者的對產品的信任感。

廣告優化師(Ad Optimize Manager)

在演算法無處不在的網路世界裡,砸愈多錢買廣告,並不能保證產品曝光率愈高。廣告如何下、成效如何計算,都是讓廣告商苦惱的事。廣告優化師將搞定這項難題。他們熟悉網路世界的運作法則,發揮數據分析能力,搭配流量分析等工具,提供專業的廣告購買建議,讓你的數位行銷KPI快速達標。

虛擬實境設計師(VR Designer)

VR (Virtual Reality,虛擬實境)被視為顛覆下一代的技術,應用範疇相當廣,除了VR遊戲,VR購屋也是趨勢。透過虛擬實境的營造,消費者能先在網路搭建的3D空間看房,確定喜歡後再出發。VR購衣也將成新寵,在業者搭建的「虛擬試衣間」中,你的三圍被精確掃描,再也不怕買到尺寸不合的衣服。結合AI,業者更能記錄消費者穿搭風格,主動推薦新衣,開創潛在商機。

數位策展人(Digital Curator)

舉凡新聞推播APP、社群粉絲專頁編輯,或是替你推薦失戀歌單、熱戀片單的背後推手,都是數位策展人。在AI技術的協力下,數字資料不但使策展內容深植人心,更能打造自然而然的消費氛圍,讓費者覺得你是「懂他的好朋友」。其實,這一切並不自然,而是仰賴背後的大數據運算。

人類行為觀察家(Anthropologist)

《決定未來的10種人》一書早在2008年指出,擅於觀察人類行為的「人類學家」是引領社會創新的十大重要人才之一,而在AI時代,人類學家的專業更能結合大數據資料,透過敏銳的觀察力與厚實描繪現象的本領,解讀數據背後的深刻意義,道出數字背後的「人味」,補足AI無法發掘的事。

工作發明家(Job Inventor)

在AI掀起的工業革命浪潮下,專家預言,65%的未來工作都還沒產生。與其在既有職場中苦尋新出路,不如開發你對未來趨勢的洞察力,量身打造自己的工作!

說書人(Story Teller)

大數據技術讓數字處理變成簡單、輕鬆的事,相較之下,說書人更是未來搶手人才。說書人即是擅長說故事的人,他們善於刻劃人們的內心感受和經歷,組織成一個個動人的故事。同時,他們也是提升團隊溝通品質的要角,讓人際交流更順暢、豐富。

物聯網CEO(Chief Executive Officer of IoT Industry)

物聯網(The Internet of Things,簡稱IoT)整合實體物件與虛擬數據,它將讓科幻電影中的「智慧家庭」成為可能。104資訊科技與工研院產業經濟與趨勢研究發表〈物聯網關鍵人才報告〉報告,指出物聯網帶起製造、資訊和業務三端的龐大人才需求,舉凡感測器、觸控面板等零組件,或是智慧型手機、平板電腦等終端設備,再到下游的網路通訊事業,都是未來被看好的潛力股,產值不可限量。

偵探(Detective)

「偵探」不僅是永遠都知道真相是哪一個的柯南,他泛指擅長發現生活中各式各樣的問題,從蛛絲馬跡中找尋真相,並藉著敏銳的觀察做出精準判斷,進而解決問題的行家。

健康預言家(Health Predictor)

當大數據技術與AI緊密結合,「預測分析」成了未來的重要發展趨勢。預測分析是一種資料分析技術,在機器學習的導入下,預測能力更將大幅提升。舉例來說,在醫療領域中,透過病歷資料的運算,醫學界已經能夠預測一個人得到心臟病的機率,或是心肌梗塞的可能時間點。

來源:潘乃欣