1. echo

相当于 C语言的 printf。 打印字符串到console。

$ echo $COLUMNS x $LINES
40 x 27

上面这个命令打印了当前terminal的窗口大小。


2. ls

显示当前文件夹下的所有文件及文件夹。

$ ls
vagrants

当前文件夹下我只有一个vagrants的文件夹。


3. cd

cd 的英文全称为change directory。

改变当前terminal所在的文件夹。

$ cd vagrants/

输入这个命令后我就进入了vagrants文件夹。

Duke@Duke ~/vagrants
$ ls
myVagrant  tempfile

在vagrants文件夹里面我有 两个文件夹,分别是:myVagrant 和 tempfile。

这时,如果我想返回上一级文件夹,即parent directory。 我们可以用以下命令:

$ cd ..; ls
vagrants

.. 代表的是当前文件夹的上一级文件夹。; 为两个命令的分隔符,与C语言类似。


4.  pwd

pwd 的全名是 print working directory。

这个命令直接打印terminal当前所在文件夹的路径。

$ cd myVagrant/

$ ls
lab1_word_count_student.ipynb
lab2_apache_log_student.ipynb
lab3_text_analysis_and_entity_resolution_student.ipynb
lab4_machine_learning_student.ipynb
spark_tutorial_student.ipynb
Vagrantfile

$ pwd
/home/Duke/vagrants/myVagrant

所谓的working directory很重要。 因为一些命令 比如 ls , cd 等都是默认作用于当前working directory的。

说到文件路径, 有几个常用的文件路径简称。 我们之前见到了 .. 表示parent directory。

而 . 表示当前文件夹, ~ 表示home 文件夹。

$ ~
-bash: /home/Duke: Is a directory

$ ls .
lab1_word_count_student.ipynb
lab2_apache_log_student.ipynb
lab3_text_analysis_and_entity_resolution_student.ipynb
lab4_machine_learning_student.ipynb
spark_tutorial_student.ipynb
Vagrantfile

$ ls ..
myVagrant  tempfile


5. ls -l

$ ls -l
总用量 276
-rwxr-xr-x 1 Duke None 27251 六月  7 2015 lab1_word_count_student.ipynb
-rwxr-xr-x 1 Duke None 51161 六月 21 2015 lab2_apache_log_student.ipynb
-rwxr-xr-x 1 Duke None 75055 六月 21 2015 lab3_text_analysis_and_entity_resolution_student.ipynb
-rwxr-xr-x 1 Duke None 57712 六月 28 2015 lab4_machine_learning_student.ipynb
-rwxr-xr-x 1 Duke None 53415 六月  7 2015 spark_tutorial_student.ipynb
-rwxr-xr-x 1 Duke None   722 五月 30 2015 Vagrantfile

显示了 文件以及文件夹的详细信息。

shell支持正则表达式。

如果你使用如下命令: ls -l *.pdf

会显示出所有pdf文件的详细信息。

这些信息包括 :权限, 用户, 文件大小, 修改时间, 文件名等信息。

$ ls -l *.ipynb
-rwxr-xr-x 1 Duke None 27251 六月  7 2015 lab1_word_count_student.ipynb
-rwxr-xr-x 1 Duke None 51161 六月 21 2015 lab2_apache_log_student.ipynb
-rwxr-xr-x 1 Duke None 75055 六月 21 2015 lab3_text_analysis_and_entity_resolution_student.ipynb
-rwxr-xr-x 1 Duke None 57712 六月 28 2015 lab4_machine_learning_student.ipynb
-rwxr-xr-x 1 Duke None 53415 六月  7 2015 spark_tutorial_student.ipynb


6. mkdir , mv

mkdir是 making directory的简写,用于创建文件夹。

mv 是move的简写,用于移动文件。

我现在想要创建notebook文件夹,并将所有.ipynb文件放到这个文件夹。

$ mkdir notebook

$ mv *.ipynb ./notebook

$ cd notebook

$ ls
lab1_word_count_student.ipynb
lab2_apache_log_student.ipynb
lab3_text_analysis_and_entity_resolution_student.ipynb
lab4_machine_learning_student.ipynb
spark_tutorial_student.ipynb

为了恢复原样,我把.ipynb文件放回原来的文件夹。

$ mv *.ipynb ..

这时候,ls一下

$ ls

没有任何文件显示。

$ cd ..

返回上一级目录


7. rmdir

这时候,当我想删除文件夹notebook时,就要用到rmdir命令。

rmdir 是remove directory的简写。

$ ls
lab1_word_count_student.ipynb
lab2_apache_log_student.ipynb
lab3_text_analysis_and_entity_resolution_student.ipynb
lab4_machine_learning_student.ipynb
notebook
spark_tutorial_student.ipynb
Vagrantfile

$ rmdir notebook/

$ ls
lab1_word_count_student.ipynb
lab2_apache_log_student.ipynb
lab3_text_analysis_and_entity_resolution_student.ipynb
lab4_machine_learning_student.ipynb
spark_tutorial_student.ipynb
Vagrantfile

notebook文件夹已经不见了。

8. curl 

curl 可以用来下载文件。

$ curl -L 'http://projects.biotec.tu-dresden.de/pocket/lcs.tgz' -o ligsite.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 62117  100 62117    0     0   7046      0  0:00:08  0:00:08 --:--:-- 19142


$ ls
google_appengine_launcher.ini  google_appengine_projects.ini  ligsite.tar.gz

发现文件ligsite已经下载下来了。

-L 的选项 表示follow redirect。

-o 选项表示下载文件的名称。


9. cat

cat这里并不是指猫。

cat是concatenate的简写。

它将文件内容输出到console。

$ cat google_appengine_projects.ini
# Gogle App Engine Launcher Project File
# https://developers.google.com/appengine


10. less

less 也是用来查看文件,但是更加方便。

Duke.txt是显示我的计算机配置的文本文件。

$ less Duke.txt

CPU-Z TXT Report
-------------------------------------------------------------------------


Binaries
-------------------------------------------------------------------------


CPU-Z version                   1.67.1.x64


Processors
-------------------------------------------------------------------------


Number of processors            1
Number of threads               4


APICs
-------------------------------------------------------------------------


Processor 0
        -- Core 0
                -- Thread 0     0
                -- Thread 1     1
        -- Core 1


这时, Duke.txt还没显示完.


按下回车或空格继续看。

按下b返回上次看到的内容。

按下q直接返回console。

输入/CPU 按下回车,可以进行CPU的文本查找。

十分方便。

11. clear

这个clear有点像matlab的clear。

shell 中clear用来清屏。

12. rm

rm是remove的简写。

千万不要使用rm -rf / 的命令。

在使用rm删除文件时,被删除的文件是不会被放到回收站的。

所以最好使用:

$rm -i thefile.txt

$ rm -i DUKE.txt
rm: remove regular file 'DUKE.txt'? n

13. grep 和 wc

用于搜索文件中某个单词。

$ grep CPU DUKE.txt
CPU-Z TXT Report
CPU-Z version                   1.67.1.x64
        Specification           Intel(R) Core(TM) i3-2370M CPU @ 2.40GHz
        CPUID                   6.A.7
        Extended CPUID          6.2A
CPU Thread 0
        Max CPUID level         0000000Dh
        Max CPUID ext. level    80000008h
        CPUID
CPU Thread 1
        Max CPUID level         0000000Dh
        Max CPUID ext. level    80000008h
        CPUID
CPU Thread 2
        Max CPUID level         0000000Dh
        Max CPUID ext. level    80000008h
        CPUID
CPU Thread 3
        Max CPUID level         0000000Dh
        Max CPUID ext. level    80000008h
        CPUID
        model                   Intel(R) Core(TM) i3-2370M CPU @ 2.40GHz
  CPU0
  CPU1
  CPU2
  CPU3
  CPU4
  CPU5
  CPU6
  CPU7
        MCPU
CPUT

如果显示的行数比较多,可将搜索结果传给less命令,这就是unix的管道思想。

$ grep CPU DUKE.txt | less
如果我想知道CPU出现在DUKE.txt中的个数。

$ grep CPU DUKE.txt -c

32

-c命令帮我们进行了统计。

还可以调用wc进行统计。

wc是word count的简写。

$ grep CPU DUKE.txt | wc -l
32

14. 环境变量

在linux下,环境变量在~/.bashrc文件中。

在这个文件中加入:

if [-f ~/.bashrc] ; then

    source ~/.bashrc

fi

这样,在这个文件发生改变后,环境变量会立即生效。

如果不然的话,需要重新开一次terminal 才会生效。

因为,每次打开,.bashrc文件都会重新运行一次,加载环境变量。

$ export PS1='df$'
df$
df$
df$
df$

环境变量 PS1 表示每个命令行的提示符,用户可以自定义。

df$export PS1='$ '
$
$

我还是改了回来。

15 alias

alias 可以为程序添加新的名称。

$ alias ll='ls -la'

这时, ll 就代表 ls -la了。

此时,如果你的电脑被他人使用。他并不知道ll的意思。

只需: $ alias

就是可以显示所有简写名称对应的shell命令。

然而,这一命令只会在当前的terminal有效。

因为,它没被写入.bashrc文件。

当然你可以将它写入到.bashrc文件。

如果你想学习更多bash的特性,欢迎来此网址学习:http://www.bash.academy/ 。