理解 shell

目前来说,其实玩如 ubuntu 或者 openSUSE 这类的发行版,如果只是看看网页之类的,基本不需要 shell 了。但是很多时候还是因为 shell 的优点,尤其是写程序或者服务器管理之类的,shell 还是十分方便而且高效的。一般来说,linux 下面可以用图形界面来搞掂的事情,都可以通过 shell 界面来搞掂,而且 shell 界面可以搞掂的非常漂亮。

** 从用户界面的角度 **

首先学习 shell 需要意识到,shell 和普通的图形化界面是不一样的。一般来说,图形化是通过点鼠标,拖动等等事情来让电脑知道你要做什么,而 shell 是通过打字,或者叫做输入命令来搞掂。跟鼠标的左键右键不同,用 shell 来跟计算机沟通,都可以表示成一个很简单的形式:

command arg0 arg1 arg2 ...

其中,command 是你要做的事情,也就是你要执行的 shell 命令,或者你要执行的程序的位置。而 arg1, arg2, arg3。。。就是你要执行的参数。什么是参数呢,可以类比成图形界面里面的选项,也就是执行这条命令(执行这个程序),还需要告诉计算机的额外的事情。

举一个具体的例子,我要复制一个文件。容易想到,就是要用到复制命令。这个命令在 linux 下面是cp。一般的,这样复制一个文件:

cp src dest

表示把 src 这个文件,复制为 dest。上面看到的 cp 就是一个命令,src 和 dest 就是两个参数。

好了,那么我们就可以知道,大概学习 shell,就是去学习这些命令,然后就可以用 shell 来搞掂我们的日常生活了。然后我们怎么知道要哪些命令呢?一般的方法是记,自己去了解哪些要用的,然后要用的时候就知道要用哪些了。事实上,要记的不多啦。

但是……我知道要用什么命令,我还要记住这些命令的参数吗?这太坑爹了!!当然不用。这时候你学会翻手册和文档,看帮助就可以了。一般来说,只传入一个 --help 就可以看这个命令的帮助(当然这个命令不一定有)。比如cp的:

    mo@linux-9pgf:~> cp --help
    Usage: cp [OPTION]... -T] SOURCE DEST
      or:  cp [OPTION]... SOURCE... DIRECTORY
      or:  cp [OPTION]... -t DIRECTORY SOURCE...
    Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
    ...

这里就会给出 cp 的简要说明啦!!!Usage 就是这个 cp 的用法。然后另外一个常说的,就是有问题找男人,也即是man这个命令啦!

man cp

然后你就会看到完整版的 cp 命令的手册了!

**shell 的状态 **

我们考虑一下,在图形界面下面,我们首先打开了一个文件夹 A,然后又开了文件夹 B,我们发现现在我们虽然打开的都是一个程序,但是两个程序的显示的是不一样的对啵?换而言之,我们来看文件夹那个程序也是有状态的,这个例子里面,就是当前目录不同啦!一个当前目录是 A,一个当前目录是 B。那当然的,shell 也是有状态的咯!

以 bash 来说,比较值得注意的是:当前目录,执行的用户,变量值。

__ 当前目录 __

什么是当前目录呢?我们来看pwd命令和ls命令。

    $ pwd
    // 你会看到当前目录的位置
    $ cd ..
    $ pwd
    // 你会发现当前目录改变了!

然后 cd 命令就是切换当前目录啦!为什么当前目录这么重要呢?因为有些程序是很依赖当前目录的哟,比如ls命令就是显示当前目录下面有哪些文件的。

    $ ls
    // 列出当前目录下面有哪些文件 

好了,自己玩玩 cd lspwd 吧。有同学走过的时候,你拼命地乱 cd 和 ls,他们就会觉的你好厉害的 :-)

__ 执行的用户 __

我们看看 shell 开头的那段:

    mo@linux-9pgf:~>

这个 mo 就是当前用户的名字啦!你的机子上不是 mo?当然啦,你的机子显示的就是你的用户的名字咯!这个有什么用呢?主要是,有时候别人的文件,可能不给你看或者让你 papapa,然后通过当前用户是谁,系统会不让你 papapa 的,也即是权限问题。每个跑的程序都是会记录这个程序是谁跑的,然后一般就是用你 shell 里面的那个身份咯!

当然也有命令是更改当前用户的,比如 su 命令。

$ su root

表示切换到 root 用户!非常危险哟!用的比较多的可能是 sudo

$ sudo zypper

表示,用某个用户的身份来执行 zypper ,默认就是 root 啦。所以这句话就是用管理身份执行 zypper 的意思啦!

__ 环境变量 __

有时候参数不够用的时候,或者某些时候,会需要用到环境变量这个东西。程序跑的时候,除了可以通过参数,也可以通过环境变量来告诉程序一点东西啦!

比如,我们说过,command 除了可以是命令,也可以是程序的名字。比如,火狐~

$ firefox

这样就会吧火狐开起来了哟!怎么办到的呢!这里用到了一个叫 PATH 的环境变量哟!我们先来看看这个咚咚是什么。

$ echo $PATH

是不是看到一串长长的东西,里面用冒号隔开?对了,当你输入一个 command,如果这个 command 不是 shell 内建的,就会去这些目录里面找哟!然后如果找到了,就会执行之。

我们能不能改环境变量呢!其实是可以的哟,但这里就不说了。另外,要看全部的环境变量,就用 env 命令:

$ env

** 管道和重定向 **

我们知道,unix 的哲学是做一件事并把他做到最好。基本上,linux 下面的软件都是这个样子的。而 shell 是干什么呢?shell 要干的,就是把这些软件粘合起来,然后形成一个完成的系统,或者说就是用来提供用户界面。shell 一般提供了管道和流重定向机制,如果要学 shell,这两个也是必学的哟。

我们知道,程序可以接受输入,产生输出。我们把一个程序想象成一个水池,可以在一个口把水放进去,也可以在另外一个口把水放出来。在 shell 的底层,这些东西都是通过无格式的字符串来表示的,然后我们把流入的水的那个孔叫做”标准输入流“,流出水的那个孔叫做”标准输出流“。

然后,我们可以通过 shell,在两个程序直接连接一条管道,然后把第一个程序流出的水引到第二个程序的入水口里面!

cat lover | grep today

cat命令是把一个文件输出到输出流,grep在这里的效果是输出,输入里面带有today的行。好吧这个有点拗口,不过以后就会理解的。

然后重定向就是直接把输入或者输出的东西在一个文件里面流入,或者流进一个文件里面!

    grep < lover # 把 lover 作为输入,执行 grep
    ls > my_ls.txt # 把 ls 命令的输出流入到 my_ls.txt 里面 

好吧这节挺多咚咚的,不理解就跳过,去寻找更详细的文档吧……

** 最后……**

我们小结一下我们说了什么吧:

[list=] 1. shell 是通过输入形式如 command arg0 arg1 ... 的东西来让计算机干活的。
2. man--help 获得帮助。
3. 当前目录:可以通过cdpwd来查看。
4. 当前用户:可以通过sudosu来改变。
5. 环境变量:可以通过env来改变,以及了解 $PATH 环境变量。
6. 管道和重定向: | < >[/list]

最后列一下常用的命令吧~~

目录和文件管理: `mv` `cp` `cd` `pwd` `rm` `mkdir` `ls`
权限管理: `chmod` `chown`

还有一些几乎必学的咚咚(以 openSUSE 为例)~~

解压缩和压缩: `tar`
文本分析: `grep`
软件包管理: `zypper` `yast`的软件包管理
系统设置:`yast`

尤其是软件包管理,是 linux 里面非常先进而高效的咚咚哟!基本上看一个会不会用他用的发行版的软件包管理,就知道是不是彻底的水货了!

然后如果是程序员,建议学一下 gcc gdb make,学一个编辑器 vim或者emacs 啦。还记得 C 程序里面那个 main 么,main 函数也可以带参数的,传入的就是在 shell 里面输入的字符串哟。

最后推荐一个很好玩的东西,跟着我们来输入 (openSUSE):

    sudo zypper in figlet
    // 输入你们的管理员密码,一般就是你登录密码
    figlet I love openSUSE

附:推荐一下《鸟哥的 linux 私房菜》 linux.vbird.org/

快速调出 shell 的快捷键是什么?Guake 每次还要启动比较麻烦。

调出 shell 一般不是 shell 事情,而是 DE 的事情吧?GNOME 和 KDE 都提供了按键绑定命令执行的方法。GNOME 好像有个选项卡叫做键盘,里面可以把快捷键和命令绑定起来。KDE 有个叫做 Shortcuts and Gestures 的东西,里面也有非常肥大的绑定方法。

另外一个是按 Alt + F2,调出快速执行对话框,里面直接打命令。我现在是用这种,Alt+F2,然后 konsole,挺好使的。

刚才采取搜了一下 guake,,,这个神奇的 term 的名字啊……

linuxtoy 上面好像有个简单的介绍
linuxtoy.org/archives/guake.html

F12 弹出?

恩,F12 弹出,但是要先打开一下才有用,不过确实很方便。Guake 是 GNOME 上的名字,KDE 上叫什么来着?

恩,F12 弹出,但是要先打开一下才有用,不过确实很方便。Guake 是 GNOME 上的名字,KDE 上叫什么来着?

这几天我试用了一下,觉得一点都不方便。最主要的问题是,这货会一直置顶,挡住其他窗口,而且不能按 Alt + TAB 。远不如直接弹个框出来爽。。。

如果是要默认开启,GNOME 和 KDE 里面一般也有配置默认启动项的咚咚,设置成默认启动就可以鸟。

在系统设置里,一个关于快捷手势的选项里我记得那个选项就在第一行。点进去,有个实例,选 knosole,编辑开启。默认的快捷方式是 Alt+Ctrl+t

已经不用 GUAKE 了。。。试用了几天,确实实用性不强

恩,F12 弹出,但是要先打开一下才有用,不过确实很方便。Guake 是 GNOME 上的名字,KDE 上叫什么来着?
yakuake

Sent from my Lenovo A789 using Tapatalk 2

直接加自动启动啊,我 yakuake 都这样

Sent from my Lenovo A789 using Tapatalk 2