搜索
查看: 1620|回复: 19
收起左侧

[讨论] Hello , Linux(三): You Are The Commander !

  [复制链接]
root1605
发表于 2018-1-1 00:03:03 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 root1605 于 2018-1-1 10:57 编辑
Hello , Linux(三):
You Are The Commander !



                                              目录

                                              Ⅰ 前言
                                              Ⅱ 体验命令行
                                              Ⅲ shell输入输出
                                              Ⅳ 硬链接与符号链接  

By root1605 & 翼风Fly
来自bbs.kafan.cn



第二篇:Hello , Linux(二):Let's Start !
http://bbs.kafan.cn/thread-2109639-1-1.html



评分

参与人数 3原创 +1 人气 +3 收起 理由
ericdj + 2 大……大佬~~~
翼风Fly + 1 (≧∀≦)
绯色鎏金 + 1 原创内容

查看全部评分

root1605
 楼主| 发表于 2018-1-1 00:03:49 来自手机 | 显示全部楼层
本帖最后由 root1605 于 2018-1-1 00:14 编辑

前言




学会使用shell≠精通Linux

  打开黑乎乎的窗口,如泉水一般涌动的字符,是不是看起来十分的高端?所以可能会给某些同学带来一种学会使用shell就等于“精通Linux”一样,也许是受一些影视作品的影响吧!
  “精通”本来就是一个很难界定的概念,什么是精通?是能够应付最普通的需求,还是能够在Linux平台上写一些小程序,或是熟悉Linux内核的实现原理,亦是其他的?然而,Shell也就是一个程序,它接受从键盘输入的命令, 然后把命令传递给操作系统去执行。几乎所有的 Linux 发行版都提供一个名为“bash”的来自GNU项目的shell,“bash” 是 “Bourne Again SHell” 的缩写(直译:目的地之上的壳,像是 电路板的外壳包装[如遥控器],这个包装拥有方便用户控制电路板指令的工具,可能是按钮,可能是滑杆,可能是触摸屏等等,而且形态各异;但无论形式如何都能让用户无需了解这块电路板的原理就能上手使用。bash便可粗略的认为是一种包装 —— 翼·风 注), 所指的是这样一个事实。

  bash是最初Unix上的shell sh的加强版。本身没有什么特殊性,就像在Windows上使用图形界面一样,几乎所有人都懂得图形界面里那些按钮,文本框,选项卡是什么意思,GUI程序看上去也很友好,但一旦涉及到专业软件,比如Photoshop,Cakewalk Sonar,它们当然是GUI程序,但没有相关技能或知识并不能利用他们,可以认为GUI只是程序的一种表现形式,到底“高端不高端”取决于软件;再比如,有人用C语言写一些简单的算法程序,而Microsoft用它来写出Windows操作系统的大部分,都在使用C语言,但干的却不是一个“等级”的事情。
  这些文章所提到的shell,不过是像教你认识在Windows下的按钮,选项卡是怎么一回事一样,是一些不怎么涉及其他专业知识的知识,你不能拿它来入侵某人的电脑,不够用来架设DNS服务器,当然,拿来在妹子面前炫耀下(楼主除外)还是绰绰有余的。

本文为什么有这么多例子?

  楼主不认为给出一个很笼统的命令的用法就能让初次接触的人学会使用,这里不是简单的罗列命令,例子是必不可少的,但更多的命令需要自己依照一定的方法去“挖掘”。这篇文章和后几篇文章都会提到使用shell以及获取帮助的方法。

体验命令行




  如果你安装了一个常见的Linux桌面发行版本,应该会自带一个叫“终端(Terminal)”或者“控制台(Console)”之类名称的应用程序,打开它们就可以启动shell。之前已经初步介绍过shell是什么,如果还不清楚,将它简单的看成Windows上面的cmd就行了,而这篇文章就是讲述怎样使用命令的

  打开终端后,输入第一个命令:
  1. pwd
复制代码

  屏幕上会出现类似于下图(图1)的输出。


图1:pwd命令


  这个命令的作用很简单,是显示当前工作目录。什么是当前工作目录呢?我们都是用过图形界面的文件管理器,如图是Deepin的文件管理器,此时正处于/home/deepin中,你可以很清晰的看到当前目录,并通过双击进去下一个目录或者打开当前目录的文件。在shell中当前工作目录的含义是一样的。



图2:Deepin Linux 的文件管理器


  这时候,通过双击文件管理器中的Videos文件夹,发现里面有一个文档,如图。



图3:切换到Videos目录


  那么在shell中怎么进入到这个目录呢?输入命令(注意中间的空格,下同)
  1. cd /home/deepin/Videos
复制代码

  这里使用了绝对路径。当然在已经打开的目录下,也可以用相对路径:
  1. cd ./Videos
复制代码

  关于相对路径和绝对路径的知识请查看上一篇文章。输入命令如图(上一篇文章已经介绍这个命令,显示出命令的类型)
  1. type cd
复制代码



图4: type cd 命令。

由输出结果可知("cd is a shell builtin"),cd是Shell的内置命令。


  可以看出是一个shell内置的命令。还记得上篇文章所说的其他几种类型的命令吗?比如,是一个可以执行的程序,请输入
  1. type dd
复制代码



图5: type dd 命令。
由输出结果可知,dd是system某个子目录下的可执行程序。


  它是一个可执行程序,dd这个命令这里不介绍,以后可以自己探究。
   
  可能你也已经意识到了,在输入“cd ./Videos”的时候,cd后面的“.Videos”指的就是要切换到的目录,“cd”是命令本身。cd后面跟的是“参数”,要让“cd”成功,需要提供一个有效的地址,参数就代表了这个命令作用的对象,就像英文句子“She cried.”(主谓格式),She指的就是命令本身(主语),而cry指的是她干什么(谓语)。后面的一个命令“type dd”,也是如此,光指定了命令type还不行,它不知道自己应该提供给用户哪个命令的类型。当然,有的时候是没有参数的或者可以省略不写,比如“pwd”,因为不给它参数,它也知道提供给用户什么信息,有些命令可以省略参数,原因是它可以有自己的默认行为。参数该输入什么样的内容,表示什么含义,可以有几个参数等问题,是提前预订好的,你不可能在cd命令中加入参数www.baidu.com,或者后面跟着几十个目录,每个命令的参数都不一样,具体用法需要查询资料。
(翼·风 注:可以认为是这样的格式(注意空格作间隔):
命令 参数 选项

命令:命令的名称;
参数:该命令对应的参数。数量不定,若有默认值可省略。
选项:该命令对应的选项。数量不定,若有默认值可省略。
注意:均以空格为间隔。除了 命令 必须在首位,其余 参数、选项 顺序一般无严格要求。)

言归正传,我们已经在shell下切换到了/home/deepin/Videos中,如图



图6:cd切换到Videos文件夹


  很显然我们还不知道这个目录下有什么东西,而在图形界面的文件管理器中可以很清晰看见当前目录下的文件。此时输入命令“ls”,即会列出来当前目录内的内容。ls命令参数可以没有,没有参数时,会默认列出当前目录内的内容,如果在后面跟上参数,则会显示指定目录的内容。如图,列出了/system下的内容(这个是安卓系统的目录,普通Linux发行版没有)。


图7: system目录。


  难道ls命令就只有这一个简单的功能吗?当然不是,这些命令都像一直笔一样,即可以拿它来乱涂乱画,也可以写出不朽名篇。输入
  1. ls / -R
复制代码

  会发现屏幕上出现了大量的信息,如图


图8:ls / -R


  并且,不知道你观察到没有,这次输入的命令后面跟了一个小尾巴“-R”,前面的好理解,“ls /”会列出根目录下的内容,后面的是什么意思?这个“-R”叫做“选项”(其实怎么叫无所谓),选项的作用是指示命令执行的一些具体细节,参数类似于告诉命令做什么,选项类似于告诉命令具体有哪些执行上的要求,比如一个命令“给我打一碗饭,快一点”,打饭是命令本身,“我”是命令作用的主体,而快一点就是告诉命令执行者怎样去打饭,究竟是快一点还是慢一点。“-R”本身的含义是,递归式输出目录下的内容,假如没有这个选项,它只会输出当前目录下的文件盒目录,而下一级目录中的内容就不再输出了。而递归式输出,表示将指定目录下的所有内容,包括子目录,子目录中的子目录……
  在这个例子中,参数和选项都是可选的,如果没有参数或者选项,命令有自己默认的执行方式,像
  1. ls  -R
复制代码
  1. ls /
复制代码

  都是合法的而且有意义的。但其他命令就不一定了,具体要看那个命令的说明。一个命令可能不止一个选项,“ls”命令还有的选项,比如“-d ”,“-i”等,它们的含义,可以自行查找资料。再比如命令“rmdir”,它用来删除空目录。
假设“./asdfg”是一个空目录,并且要删除,就可以这样写
  1. rmdir ./asdfg
复制代码

  如图,目录删除成功。

图9:使用rmdir命令删除空目录


  通过查阅资料,得知它有两个选项是“-v”和“--verboes”,意思是显示命令的详细执行过程,不要担心这个“--”,这个也是选项,使用“-v”和“--verboes”都是一样的效果,只不过一个是一个字母的缩写,另一个是英文单词,要用“--”放在这个“长选项”面前。选项也可以取值,比如命令“mysql --host=localhost”(在你的发行版上不一定能够执行),表示选项的值是localhost,它的等价表达是“mysql -h localhost”,也可以是“mysql -h=localhost”,“mysql --host localhost”都可以,但在使用长选项的时候,最好使用“长选项=xxx”或者“短选项 xxx”这种风格。实际上,短选项是Unix的风格,长选项是GNU的风格。注意不一定每一个长选项有与之对应的短选项,一个命令也可以有很多选项同时使用。如果你要使用短选项,可以将命令““rm -r -f /*”写为“rm -rf /*”(不要去随便使用它,尤其是以root账户登录时,因为它会递归式的删除根目录下的所有文件),但是使用长选项,或者短选项需要你去填写一个值,就不能这么简写了。另外,选项大小写不能混用。一个命令可以不只有一个参数,下面这个命令展示了这一点。
  可以使用“mv”命令重命名一个文件
  1. mv /home/f1.cpp f2.cpp
复制代码

  第一个参数是/home/f1.cpp,第二个是f2.cpp,表示把第一个参数的文件名字改成第二个参数的内容(当然这个命令的用法有很多,这里只是示例)。具体一个命令有多少参数或者选项,取决于程序的编写者。
  常用的命令有很多,以上并没有介绍多少命令,但已经把命令使用的基本方法展示了,对于一些用法不太复杂,不需要太多其他知识的命令,读者可以自行搜索Linux的命令,但像“g++ a.cpp”这种命令就没必要去研究了,假如你不懂什么是C++,再次强调,命令行只是一种使用系统的方式,真正熟练使用,需要对相关机制有所了解才行。


shell输入输出



  上面所讲的这些命令,好像都将信息输出到了屏幕上,似乎从键盘中读取数据,向屏幕中输出数据,是天经地义的事情。不过,同样也可以将一个命令的输出输出到一个文件中去。
  下图中这个命令是介绍过的,但后面跟了一个“>fileinfo.txt”。
  1. ls / -R >fileinfo.txt
复制代码




图10:创建或重写fileinfo.txt


  默认情况是将相关信息输出到屏幕,但是这里将其重定向到了一个文件fileinfo.txt中。shell遇到”>”操作符,会判断右边文件是否存在,如果存在就会将原文件的内容清空再写入,不存在的话直接创建。 符号“>>”表示追加输出,如果文件不存在则创建并写入数据,否则会在文件末尾追加要输出的内容,不会清空原文件的内容。上面的命令的执行结果如图11,出现输出信息。



图11:重定向输出了一个文件

  然后使用cat命令将其输出在屏幕上(建议自行搜索这个命令的用法)。
  1. cat fileinfo.txt
复制代码




图12 显示fileinfo.txt的内容


  使用重定向输入比较少,因为很多命令可以把文件名当做参数。重定向输入使用“<”符号。如图13。
  1. head < /proc/cpuinfo
复制代码



图13 重定向输入


硬链接和符号链接




  文件链接有两种,一种是硬链接(Hard Link),另一种为符号链接(Symbolic Link,也叫做软链接)。
  存储设备或设备的分区被格式化为文件系统后,应该有两部份,一部份是inode(information node,索引节,信息节点),另一部份是Block(块),Block是用来存储数据用的。incode用来存储数据的信息,包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统通过inode值最快的找到相对应的文件。
  硬链接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中文件有单独的编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的链接。删除一个链接并不影响索引节点本身和其它链接,不过,当最后一个连接被删除后,文件的数据块及目录的链接会被释放,此时文件会被删除(有点像C++中的shared_ptr)。

(翼·风 注:可以认为inode是书籍的目录,并包含了一些概要描述信息、连接数等;而Block便是目录指向的具体内容。硬链接相当于给相同的内容的目录下增加了一个指向,对目录指向的修改删除不会影响到具体内容;但若一块具体内容无法被任何目录索引找到,这个内容就相当于不存在,而且白白占据空间,所以当最后的指向目录被删掉后也要删掉对应的内容来释放空间。注意,无论indoe还是Block都不是具体的文件。可参考如:http://blog.csdn.net/u013595419/article/details/51094360

  软链接有点类似于Windows的快捷方式。它是特殊文件的一种(而且不是一个独立的文件,这和Windows不一样 —— 翼·风 注)。在符号链接中,文件实际上是一个文本文件,其中包含的有另一文件的位置。删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但这个地址是没有意义的。
关于创建硬链接和符号链接的方法,请查阅关于“ln”命令的资料。


  P.S. 本文提供的命令参考链接为:http://man.linuxde.net/


  本文内容到此结束,读者可以尝试自己使用一些简单的命令,并利用上一篇文章中的获取帮助的方法查找更多命令的用法。当然,这只是个开始。



评分

参与人数 3人气 +3 收起 理由
FUZE + 1 精品文章
明月丶舞白衣 + 1 版区有你更精彩: )
4毛5的诺顿 + 1 版区有你更精彩: )

查看全部评分

翼风Fly
发表于 2018-1-1 00:16:04 | 显示全部楼层
楼主为了这个系列做了不少的投入,希望能为大家在讨论学习Linux时提供更多参考

今天,是2018的第一天,
元旦快乐~

评分

参与人数 2人气 +2 收起 理由
ericdj + 1 大……大佬~~~
root1605 + 1 版区有你更精彩: )

查看全部评分

lchong649cn
发表于 2018-1-1 10:28:10 | 显示全部楼层
元旦快乐~
4毛5的诺顿
发表于 2018-1-1 10:54:01 | 显示全部楼层

楼主辛苦了  元旦快乐!
BBA365
发表于 2018-1-1 11:29:46 | 显示全部楼层
辛苦了,一直在看楼主的liunx贴
ericdj
发表于 2018-1-1 18:38:28 | 显示全部楼层

Deepin Linux,玩的666啊
kankan35
发表于 2018-1-1 23:06:21 | 显示全部楼层
楼主辛苦了,多谢!
jasminejiang
发表于 2018-1-2 13:06:36 | 显示全部楼层
兹瓷楼主,楼主辛苦了,特地创建卡饭帐号,前来顶贴,
FUZE
发表于 2018-1-2 20:14:26 | 显示全部楼层
滋磁,靴习一个!
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛|优惠券| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 苏ICP备07004770号 ) GMT+8, 2018-1-20 21:28 , Processed in 0.118599 second(s), 22 queries .

快速回复 返回顶部 返回列表