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/ 。