第1章 Linux入门

1.1 Linux能做啥

Windows能做啥? 可能十个人十个都知道。具体能做啥,就不用我说了。Linux能做啥?为啥有了Windows,为啥还要Linux?
Windows与Linux的关系,打个不很恰当的比喻,如果把Windows和Linux都作为交通工具,Windows就想单车(自行车),Linux就像列车。前者方便易用,并几乎没有轨道的限制,但它只能单用户,能承载的重量有限;后者虽然不像前者方便易用,但它可以多用户,并且可以运送巨无霸的东西!如管理成千上万个节点的大数据集群,还有关键一点是安全,还免费,更不用说其庞大的志愿者和使用者,当然,它也有一些不足或不如人意的地方,如需通过命令方式操作,这给初学者带来不少挑战,不过Linux有很多奇妙的输入方法,使用这些方法将极大提高输入效率,这些方法我们后续章节将介绍,除了这些输入方式外,Linux还有很多更强大的方法,提高你的工作效率。

1.2 如何学习Linux

学好Linux将大大提升你的竞争力,哪如何学好它呢?是否存在捷径?我觉得有但又没有。
作为初学者,个人建议可以像小孩学英语一样,先学会用,而且是学哪些最常用、最基础、最重要的部分。如何会用,理解起来就方便多了。否则,已开发就学一大堆的语法,效果往往事倍功半。此外,就像锻炼身体、学习英语等一样,贵在实践再实践,“纸上得来终觉浅绝知此事要躬行”。
另,向大家推荐几个学习Linux的网站:
Linux中国:https://linux.cn
鸟哥的Linux私房菜: http://linux.vbird.org
Linux下载站: http://www.linuxdown.net
Linux公社: http://www.linuxidc.com

1.3 Linux的历史

Linux的前辈是Unix,但可能是由于历史原因,Unix派别林立而且主要用在大型服务器,如IBM的AIX,HP的HP-Unix,SUN公司(目前是Oracle的一部分)的SUN-Unix等等,更要命的一点是他们商业味道很浓。
1991年10月5日, 上午11时53分,有一个名为 Linus Torvalds 的年轻芬兰大学生在 comp.os.minix 这个新闻群组上发表了这样一个帖子,称他以bash,gcc等工具写了一个小小的内核程序,这个内核程序可以在Intel的386机器上运行,这引起很多的兴趣,由此标志L inux的诞生。
当初还是个大学生的 Linus 大概完全没想到当初被他视为个人兴趣的程式,在几年以后会有超千万个使用者,由他自己带头开发的操作系统现在已经在世界各地受到普遍的欢迎。

1.4 Linux的发行版本

Linux基于Debian、Red Hat和SUSE源的那些发行版本在生产环境中占据优势地位,以下为目前Linux比较流行的版本。

表1.1 Linux流行版本

对Linux而言,内核是其心脏,与硬件打交道,开机后留住在内存,而Shell为内核与应用程序间的桥梁,内核及shell构成Linux的主要内容,应用程序通过shell(或命令行)与服务器进行交互,shell调用内核(Kernel)来利用和管理服务器硬件资源,应用程序(如用户自己编写shell脚本等,office是windows操作系统的应用程序)保存在硬盘,需要时调入内存,它们之间的关系可用下图形表示:


(图1-1 Linux操作系统结构图)

1.5 登录系统

前面讲了Linux是个非常重要、功能强大、而且有意思的系统,而且还提到需要在命令行操作,不像使用windows一样,只需要按按鼠标即可,命令行操作确实不方便,尤其是对大多数用惯了windows的人来说。这确实有个‘痛苦’的过程,但是windows一般只能用来写写文档、上上网、打打游戏、看看电影之类,企业生产环境大都采用非windows环境,如Linux或Unix,因此对于大多数希望从事IT相关行业者,尤其进入大数据这个朝阳行业的人来说,是一道必需迈过的坎。
万事开头难,实际上你只要用过一段时间,将会慢慢喜欢上它,它有很多你想不到的优点,如tab补全功能。
如何登录Linux系统呢?如果Linux就在本地机器上,只需要启动Linux即可;如果Linu服务器不在本地,那也很简单,只要在你的客户端安装一个连接Linux的客户端(如Putty或Xshell等,这些在网上都可免费下载),然后做一个简单配置就可以了,下面我们以登录远程Linux服务为例(注:本例中Linux已安装好,并创建一个用户:feigu_shell):
第一步:安装Xshell 5
从网上下载一个Xshell 5,安装基本按照缺省情况即可
第二步:打开Xshell 5,点击文件菜单,然后点击新建,进入下一个界面

第三步:点击连接,配置服务器的IP,端口,如下图:

第四步:点击用户身份验证,配置用户及密码信息,如下图:

第五步:点击确认按键,所有配置完成,最后在会话界面将出现刚创建的连接,名为conn_linux,如下图。

第六步:点击连接,如果IP,用户密码等都正确的话,进入Linux系统,如能看到如下类似界面,祝贺你,你已经迈入Linux大门了!

Xshell 5是连接Linux服务器的工具之一,还可以通过Putty等工具,配置和使用也很方便,此外大家还可以利用Xftp 5工具来上传或下载Linux服务器上的文件,它的安装和配置比较简单,网上有很多这方面的文档,这里就不再展开来说了。

1.6 登录后,试试身手

登录Linux后,可以用一些简单命令,试一试Linux这个听起来有点神秘的操作系统。

注意,linux是区分大小写的或称为大小写敏感,所以pwd和PWD是不同的。
Linux系统要经常输入命令,而且有些命令或文件还比较长,如果要一个一个输入,不但麻烦,还容易出错。Linux是否有更有效的方法呢?答案是肯定的,那就是利用Tab键!它具有命令补全或文件补全的功能,这也是Linux很有趣的地方之一。当然,Linux为尽量减少你敲键盘次数,还有更强大的地方,如编写shell脚本,这个后面我们会详细介绍。
先看几个使用Tab键来偷点懒。
假如我们想进入homework1130这个目录,是否要cd homework1130?如采用Tab补全功能,在大大减少输入量的同时,还可大大提高你的准确率。具体实现方法为:输入目录名称的前几个字符即可,然后按Tab,系统自动补全该目录名称,具体操作如下图:


按Tab键后得如下界面

类似的神奇,Linux还有很多,如通过上下方向键(↑↓),可以调出前面输过的命令,输过了的命令可以不用重新输入了,这个功能也不错,顺便提一下,这些功能在MySQL数据库也有,讲MySQL时我们会介绍,看来好东西,大家都喜欢。

1.7 shell种类

shell是Linux内核与应用程序间的桥梁,起着非常重要的作用,shell由多种,如bsh(或sh),csh,ksh,bash等,这些shell基本内核对差不多,但还是有不少不一样的地方,所以我们在编写shell程序时,首先需要说明使用哪种shell来解释你程序,具体做法就是在shell程序第一行说明,如#!/bin/bash,这些内容大家先了解一下,后面我们会详细介绍,它们间关系大致如下:


(图1-2shell种类及关系图)

shell有多种,每个连接用户系统一般会先给个缺省shell(当然缺省shell可以修改),哪里可以看到你的缺省shell呢?查看文件/etc/passwd,或echo $SHELL 可以看到用户使用的缺省shell,查看/etc/shells可以看到目前已安装的shells。如何查看这些文件,后面将介绍。

1.8 文件与目录简介

说到文件和目录,我们从大家熟悉的windows开始,打开windows有关界面,我们通常能看到如下类似界面:


(图2-1 windows的目录及文件)

第[1]列为文件及目录名称:是文件还是目录,从图标很容易看出,其中有些为系统目录有 些是用户创建目录或文件。
第[2]列为修改时间;文件或目录的修改或创建时间。
第[3]列为类型:显式说了是文件夹还是文件,甚至为那种类型的文件。
第[4]列为文件大小,如果是文件,会显示其大小,单位为KB。
那Linux系统的目录及文件,又是如何排兵布阵的呢?windows进行下级目录,或上级目录只需要点击相关目录或到上级目录的方向图标,在Linux系统中如何进入下级目录或上级目录,如何打开文件?实际上在Linux系统虽然需要使用命令,但使用起来也很方便,而且在安全性、易用性方面更有独到的地方,目录的切换使用cd命令,查看当前目录或文件可以使用ls命令,详细操作我们如下实例。


(图2-2 Linux下的目录、文件及权限等)

用ls -la(,注意ls 与-la间有一个空格,l(list)及a(all)为两个参数)可以查看当前目录下的文件或目录的详细信息,包括列出隐含文件(文件名前为.,如上面的.bashrc文件)。
与windows的内容基本相同,windows的第[1]、[2]、[3]、[4]列分别对应Linux的第[7]、[6]、[1]、[5],虽然没有windows这么直观,但包含更丰富的信息。理解这些信息非常重要,以后经常提到这些相关内容,下面我们对上面7列代表的含义逐一进行说明。
 第[1]列:表示文件类型及权限,如果你仔细观察一下,会发现这列共有10个字符,
这10个字符的位置及含义,我们把它放大一下,如下图:


(图2-3文件及目录权限说明图)

第1字符为d或-,d表示对应是目录,-对应是文件;
第2,3,4字符,如[rw-]、[rwx],表示用户或文件所有者的权限,r(read)表示有读的权限,w(write)表示有写的权限,x(execute)表示有执行权限,-表示没有对应权限。[rw-]
表示文件所有者有读、写权限,但没有执行权限。
第5、6、7字符,表示文件所属的用户组的权限。
第8、9、10字符,表示其他用户(有点像windows中guest用户)的权限。

 第[2]列:表示文件或目录的连接数,如果目录至少为2,因任何一个目录至少包括.及..
两个目录,.表示当前目录,..表示上级目录,故如何我们需要切换到上级目录,可以cd ..
即可。
 第[3]列:表示文件或目录的所有者账号
 第[4]列:表示文件或目录所属用户组,如上面列出feigu feigu,说明所属用户为feigu,所属用户组也是feigu(这里两者同名,当然两者可以不同名)。
 第[5]列:表示文件大小,缺省单位为B(非KB)。
 第[6]列:表示文件文件或目录的创建或修改时间。
 第[7]列:表示文件或目录名称,如果文件前多一个点的表示隐含文件,隐含文件只有加上a这个参数才会显示出来,否则不会显示出来。
以上这些权限或属性当然不是一成不变的,可以通过命令修改,如何修改2.3节将介绍。

ls命令的使用方法还有很多,我这里介绍几种常用方法:
ls -lt ####结果按时间排序,降序。
ls -l ####结果按名称排序
ls -lS ####按文件大小排序,注意S为大写
ls -ltr ####结果按时间排序,变为升序,增加参数r(reverse),表示与缺省排序方式相反。
看到这里,可能有很多朋友不耐烦了,这么多命都要一一去记吗?其实完全不必要去死记忆,Linux有一个类似windows中help工具,他就是man这个命令,这个man非常强大,不过其来源是manual,而非男人哦。使用起来很方便,其格式为:man [command] ,显示结果中有各参数的含义、示例等。

1.9 切换目录

Linux的存储都是以目录的方式存在的,所以了解其目录结构、主要目录的含义非常重要,在不同目录间切换是Linux人员做得最多的事情之一,既然是经常干的活,是否有些妙招呢?有但又没有,关键还是要多练,“熟练才能生巧”。
我们先来看一看Linux的主要目录及用途:

 

(图2-4 Linux主要目录结构图)

切换目录使用cd命令,如果要到根目录(Linux系统最高目录),可以cd / 即可;如果切换到上级目录,使用cd ..;如果要回到用户主目录,用cd ~ 。
查看当前你所在的目录,使用pwd命令;查看当前目录下的有哪些文件或目录,使用ls命令。
.表示当前目录,也可用./表示;..表示上级目录,也可用../表示。
由根目录(/)开始的路径成为绝对路径,如:/home/feigu/hadoop;相对于当前路径的称为相对路径,如:./hadoop 、~/spark等。

1.10 创建文件或目录

前面我们介绍了Linux的目录结构、如何查看目录、如何修改文件或目录的属性和权限等内容,当然我们学Linux肯定不是来看看的,我们还想做一些实际事情,如创建文件或目录,拷贝文件,删除文件或目录等,这些任务在windows里相信大家都比较熟了,在Linux中该如何做呢?操作方便吗?不但方便还非常有趣,下面我们就来谈谈这方面的问题:
切换目录上面我们讲到了,利用cd命令即可,我们这里再小结一下:
cd /home/feigu/hadoop ####切换到指定目录
cd ~ ####切换到用户主目录,即用户一开始登录进入的目录
cd .. ####切换到上级目录
cd / ####切换到根目录
cd - ####切换到上一次使用的目录
查看目录可以用pwd,ls等命令。下面我们谈谈如何创建目录,用mkdir命令即可,其功能比windows前很多哦。其命令格式为:
mkdir [-p] 新建目录
-p ####可以递归创建目录,如果上级没有的系统将自动创建。示例如下:
 不用参数,创建单个目录

feigu@slave001:~/linux_test$ ls -l
total 12
-rw-rw-r-- 1 feigu feigu 154 Oct 16 11:11 conn_mysql.sh
dr-xr--r-- 2 feigu feigu 4096 Oct 17 14:32 shell_script
-rwxr--r-x 1 feigu feigu 62 Oct 17 22:59 test.sh
feigu@slave001:~/linux_test$ mkdir mydirect ###创建新目录mydirect
feigu@slave001:~/linux_test$ ls -l
total 16
-rw-rw-r-- 1 feigu feigu 154 Oct 16 11:11 conn_mysql.sh
drwxrwxr-x 2 feigu feigu 4096 Oct 18 11:35 mydirect ###创建成功
dr-xr--r-- 2 feigu feigu 4096 Oct 17 14:32 shell_script
-rwxr--r-x 1 feigu feigu 62 Oct 17 22:59 test.sh

 使用-p参数,同时创建多级目录

feigu@slave001:~/linux_test$ ls -l
total 12
-rw-rw-r-- 1 feigu feigu 154 Oct 16 11:11 conn_mysql.sh
dr-xr--r-- 2 feigu feigu 4096 Oct 17 14:32 shell_script
-rwxr--r-x 1 feigu feigu 62 Oct 17 22:59 test.sh
feigu@slave001:~/linux_test$ mkdir -p test1/test2 #同时创建两级目录
feigu@slave001:~/linux_test$ cd test1 #一级
feigu@slave001:~/linux_test/test1$ ls -l
total 4
drwxrwxr-x 2 feigu feigu 4096 Oct 18 11:26 test2 ###test1的子目录

删除目录的命令及其格式为:rmdir 目录名称
注意用rmdir命令删除目录时,需要该目录为空目录(即该目录下没有文件或子目录),否则,会报错。如果该目录下有很多文件和目录,岂不要逐一删除?是否有更强的命令?
有的,接下来这个命令就可。
rm [-fir] 文件或目录
-f ###f就是force之意,不提示,对不存的目录或文件也不报错或警告
-i ###i 就是interactive之意,删除前会询问是否删除
-r ###r就是recursive之意,即递归删除,这个非常强大,但也需非常谨慎使用。

feigu@slave001:~/linux_test$ ls -l
total 20
-rw-rw-r-- 1 feigu feigu 154 Oct 16 11:11 conn_mysql.sh
drwxrwxr-x 2 feigu feigu 4096 Oct 18 11:35 mydirect
dr-xr--r-- 2 feigu feigu 4096 Oct 17 14:32 shell_script
drwxrwxr-x 3 feigu feigu 4096 Oct 18 14:00 test1
-rwxr--r-x 1 feigu feigu 62 Oct 17 22:59 test.sh
feigu@slave001:~/linux_test$ rm -rf test1 ###删除test1及其子目录test2
feigu@slave001:~/linux_test$ ls -l
total 16
-rw-rw-r-- 1 feigu feigu 154 Oct 16 11:11 conn_mysql.sh
drwxrwxr-x 2 feigu feigu 4096 Oct 18 11:35 mydirect
dr-xr--r-- 2 feigu feigu 4096 Oct 17 14:32 shell_script
-rwxr--r-x 1 feigu feigu 62 Oct 17 22:59 test.sh

与windows一样,对一些不满意的目录或文件,或根据实际情况,我们可重命名目录或文件名称,具体可使用mv命令,其格式为:
mv [-fiu] 原目录或文件目标目录或文件.
其实该命令也常用来移动目录或文件,就像windows中移动文件或目录一样。
目录或文件除了可以移动,当然可以复制,windows中有的,Linux也有。cp命令可以很方便用来复制文件或目录,其命令格式为:
cp [-fipr] 原文件或目录目标文件或目录

-f ###强制执行
-i ###如目标文件已存在,则会提示是否覆盖,覆盖按y,否则,按n
-p ###同时把文件或目录权限一起复制过去,而不仅仅默认权限或属性
-r ###递归复制,这个参数很给力
以上是一些常用参数,其实cp参数还有很多,大家可以通过man去了解更多参数的使用。
创建目录可以用mkdir,哪创建文件呢?创建文件比较简单,可用touch 文件名。当然也可用vi或vim等方法,vi或vim后续我们会讲到。

feigu@slave001:~/linux_test/mydirect$ ls -l
total 0
###用touch命令,创建一个名为myfile.txt的空文件
feigu@slave001:~/linux_test/mydirect$ touch myfile.txt
feigu@slave001:~/linux_test/mydirect$ ls -l
total 0
-rw-rw-r-- 1 feigu feigu 0 Oct 24 17:31 myfile.txt

【延伸思考】
如果要在两台服务器间复制文件,该如何操作呢?有兴趣可以考虑一下,没有兴趣的可跳过]

1.11 查看文件内容

前面我们谈了如何查看当前目录(pwd命令)、用ls命令查看当前目录下有哪些文件或目录,如何查看文件内容呢?在windows中我们要看一个文件需要打开才能看到,在Linux中,查看文件灵活的多,而且有趣的多。如可以不open也可查看,而且还可以顺着看,也可倒着看,等等,下面我们就来讲讲如何查看文件内容。
查看文件内容,我们可用的命令很多,常用的有:
cat ###从第一行开始查看,一次打开,如果文件较大时,建议采用其方法。
tac ###从最后一行开始看,tac啥意思?其实它没意思,就是cat的倒写。
more ###逐页地看,按回车,继续查看,按q退出。
less ###与more类似,但可以往前翻(按PgDn)。
###/ 字符串,可向下查询字符串
###?字符串, 可向上查看字符串
###n、N可继续查看以上字符串
###q退出。
head ###查看前几行
tail ###查看后几行
最后2个命令可指定查看头几行或最后几行,命令格式为:
head -n 数字文件名称 ####没有参数,缺省查看前10行
tail -n 数字文件名称 ####不带参数,缺省查看最后10行
以下为示例:

feigu@slave001:~$ head -n 5 stud_score_bak.csv ###查看前5行
stud_code,sub_code,sub_nmae,sub_tech,sub_score,stat_date
2015101000,10101,数学分析,,90,
2015101000,10102,高等代数,,88,
2015101000,10103,大学物理,,67,
2015101000,10104,计算机原理,,78,
feigu@slave001:~$ tail -n 3 stud_score_bak.csv ###查看最后3行
2015201010,20104,概率统计,,96,
2015201010,20105,汇编语言,,91,
2015201010,20106,数据结构,,87,

1.12 shell脚本

1.12.1 vim编辑器
vim编辑器是啥东西?它有哪些功能?为何要用vim?在windows中我们要编辑一个文件,可以用word、文本编辑器、excel等,如果要说这些编辑器哪个更像vim,那就是文本编辑器了,它们都不支持图片,但vim比文本编辑器功能上强很多,如支持语法高量、远程编辑、崩溃后文件恢复、与vi(vim是vi的加强版,vi也是很多Linux自带的编辑器)兼容等等,所以vim通常作为程序编辑器来使用。
刚开始用vi或vim来编辑文件或脚本时,大多数人都不习惯,这很正常,就像我们穿一双新鞋一样,大都有个磨合期。对于用惯word的朋友,在word中大部分动作基本用鼠标就可搞定,但在vi或vim中鼠标好像不起作用,Linux靠命令驱动,vi或vim也不例外,不过它有很多优点,时间久了你就可慢慢体会到。
好闲话少说,下面我们开始介绍vi或vim的使用方法,用vi或vim来编辑文件,操作上几乎一样,而且两者相互兼容,下面以vim为例来进行说明。
vim的使用分为三种模式,即普通模式、编辑模式、低行模式,了解这三种模式非常重要,实现这三种模式的转换很简单,就是按Esc键。
 普通模式
用vim打开文件时就进入了普通模式,在这种模式中,可使用方向键移动光标,也 可以删除、复制、粘贴字符
 编辑模式
顾名思义,在这种模式中,可以对插入、删除字符,在普通模式下,按下i或o或a之后,马上就进入到编辑模式,注意前提是在普通模式下。如果保证当前模式为普通模式,有个诀窍,多按几次Esc键。
 低行模式
在普通模式下,按“:或/或?”,就进入低行模式,为何叫低行模式?因此时光标会自动跳到低行,在低行模式下,可以进行保存、退出、查询等操作,这里同样要注意其前提,如何保证当前为普通模式,多按几次Esc键。
以下是vim三种模式的转换关系
(图3-1 vim三种模式间的转换图)

以下通过几个实例来说明:
(1)普通模式,利用vim或vi打开一个文件,处于普通模式

(2)在普通模式基础上,按i或a、o键,将进入编辑模式,在编辑模式下,用户可对文件进行增删改等操作。

(3)在编辑模式时按“Esc”键,将返回到普通模式,在普通模式时,按冒号(:),斜杠(/)或问号(?)将进入低行模式,低行模式可对文件进行保存退出等操作。:wq!表示保存并强制退出, :q! 不保存强制退出。

以上这些命令是最常用、最基础的,不过还有很多命令,而且还很多功能不错也很有趣的命令,大家可以从man或网上找到。
[注意:如果不正常退出或编辑时正好断网断线等异常情况,vim将在当前目录下创建一个扩展名为swp的暂时文件,利用这个文件可以用来恢复文件,恢复后可以删除该文件,否则下次再编辑该文件时,vim还会提示你是否要恢复或只读进入方式打开文件等。]
1.12.2 shell变量
说到变量相信大家都不陌生,像X,Y,Z都可以称为变量,与变量相对的就是常量,如a,b,c,2,3等等。shell的变量有不少特殊的地方,首先shell变量无需声明类型(顺便提一下:这点与Java、C、C++等不同,但与python 相似),下面具体讲讲shell变量的特点:
 变量的赋值:
格式为,变量名=变量值,
如,V1="abc"
字符串可以使用双引号"",和单引号'',但两者间有些区别,用双引号可以保留字符含 义,单引号将视特殊字符为一般字符,具体下面举例说明。
 变量的使用
需要在变量前加上$,如$v1 或${v1}。
 变量的显示:
echo $v1,下面通过一个示例说明双引号与单引号的区别:

feigu@slave001:~$ v1="numpy"
feigu@slave001:~$ v2="import $v1" ###双引号中含特殊字符$
feigu@slave001:~$ echo $v2
import numpy ###双引号保留了$的特殊含义
feigu@slave001:~$ v3='import $v2'
feigu@slave001:~$ echo $v3
import $v2 ###单引号内的$被作为一般字符

1.12.3 编写shell脚本
shell脚本(shell script)是啥样?为何要使用shell脚本?用了能带来啥好处?不用又会带来哪些不便?
shell脚本简单来说就是由shell命令写成一个程序,有点类似windows中dos下批处理文件(.bat),shell脚本无需编译就可直接运行。
假设哪天要你管理几十台甚至几百几千台Linux服务器,需要在每台服务器上创建很多相同目录、修改很多相同配置文件,你该如何处理呢?在每台服务器上都一个一个命令执行一下?恐怕几天都搞不完,即使完成了,也很难保证在每台服务器上做的都是一样。
如果我们把这些命令写成一个脚本,并在一台服务器上测试好,那么剩下的工作就是把这个脚本部署不同服务器上,运行一下即可(熟练的话,这些部署和运行都可一键搞定),如此不但快、而且质量也高。这就是shell脚本强大之一。
下面我们试着写一个简单的shell脚本,加深大家的理解。

feigu@slave001:~$ cat myfirst.sh ####shell脚本名称,以sh为扩展名
#!/bin/bash ###说明使用哪种shell解释你的程序,这里使用bash

#在界面上显示字符串 ###这一行为注释,shell注释用井号(#)
echo "I like linux!" ###把字符串“I like linux!”输出到窗口

关于编辑shell脚本的几个良好习惯
1、第一行说明用哪种shell解释你的脚本
如:#!/bin/bash
2、说明该脚本的功能、变更历史等。
3、添加必要的注释,方便别人更好理解你的程序,尤其是团体开发时。

脚本写好了,该如何执行呢?很简单哟,shell脚本无需编译,可以直接运行,运行方式大致有:
1、利用sh或bash运行,直接运行,但脚本权限要求不高,有读的权限即可。
如:sh myfirst.sh
2、利用. ./myfirst.sh或source ./myfirst.sh的方式,可直接运行, 有读的权限即可。
注./myfirst.sh前有空格
3、如果脚本有执行权限(即x权限),可采用如下格式:
./myfirst.sh

1.13 常用命令

在linux环境中,进行需要查找文件或目录,为此,我们可以利用find、或locate等命令;目前的大数据环境一般都是集群方式,如何访问集群中各个节点或服务器,如何在各节点间复制或传输文件等?这是本节主要介绍的内容。
 locate命令
locate也是从Linux的数据库文件中读取,但比whereis更灵活,其参数可使用正则表达式,其语法格式为:
locate [-ir] 文件或目录
-i ###查询时忽略大小写
-r ###后可接正则表达式

feigu@slave001:~$ locate -n 5 -i ipython ###查看含ipython目录或文件的前5条
/home/feigu/.ipython
/home/feigu/.ipython/README
/home/feigu/.ipython/extensions
/home/feigu/.ipython/nbextensions
/home/feigu/.ipython/profile_default
feigu@slave001:~$ locate -n 5 -r ^/var/lib/dpkg/info ###查看以/var/lib开头的
/var/lib/dpkg/info
/var/lib/dpkg/info/accountsservice.conffiles
/var/lib/dpkg/info/accountsservice.list
/var/lib/dpkg/info/accountsservice.md5sums
/var/lib/dpkg/info/accountsservice.postinst

 find命令
如果用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查找,因此将消耗较多资源,而且速度也比较慢,不过find可以根据指定路径或修改时间等进行查找,其语法格式为:
find [路径] [参数] [-print ] [-exec 或-ok command] {} \;
时间参数:
-mtime n ###列出n天之前的1天之内修改过的文件
-mtime +n ###列出n天之前(不含n天本身)修改过的文件
-mtime -n ###将列出n天之内(含n天本身)修改过的文件
名称参数:
-group name ###寻找群组名称为name的文件
-user name ###寻找用户者名称为name的文件
-name file ###寻找文件名为file的文件(可以使用通配符)
-print ###将查找到的文件输出到标准输出
-exec command {} \; ###将查到的文件执行command操作,{} 和 \;之间有空格
-ok ###和-exec相同,只不过在操作前要询用户
###列出1天内修改过的文件

feigu@slave001:~$ find /home/feigu/linux_test/ -mtime -1
###列出/home/feigu/linux_test目录下文件以myfirst开头的文件
feigu@slave001:~$ find /home/feigu/linux_test/ -name myfirst* -print

 操作集群:ssh或scp
如下图,假如我们需要通过一个客户端访问以下每台服务器,如何实现呢?我们可以在客户端安装xshell软件,然后通过ssh协议,访问集群中每台服务器,具体使用ssh命令,如何需要在服务器间copy文件,可以使用scp命令,这节介绍这些命令的具体使用。

hadoop@master:~$ ssh slave01 ###通过ssh命令,由master服务器登录到slave01
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-61-generic x86_64)

* Documentation: https://help.ubuntu.com/
...................
Last login: Sun Mar 19 23:18:45 2017 from master
hadoop@slave01:~$ exit ###返回master服务器
logout
Connection to slave01 closed.
hadoop@master:~$ ls ##查看当前目录下的文件或目录
anaconda2 ch7.jar student_info.csv test.py
mydemo seafile testpbd.py
###以下命令为把master服务器上的文件test.py复制到slave01节点上
hadoop@master:~$ scp test.py hadoop@slave01:/home/hadoop

【延伸思考】
如何把一台服务器上的一个目录,复制到另一台服务器上?

1.14 课后练习

一、在登录用户当前目录下,创建一个名称为Linux01的目录,然后在该目录创建一个空文件test.txt
二、在第一题的基础上,往文件test.txt插入4行内容:
linux
python
hadoop
spark
三、列出几种查看test.txt文件内容的方式
四、编写一个shell脚本(名称可为:姓名全拼_所在学校.sh,如wufang_jiaoda.sh),该脚本的功能如:
1、在屏幕上显示你的大名;
2、在屏幕上显示当前服务器时间。
五、把wufang_jiaoda.sh复制到slave01节点上。