别出心裁的Linux命令学习法
操作系统操作系统为你完成所有“硬件相关、应用无关”的工作,以给你方便、效率、安全。操作系统的功能我总结为两点:管家婆和服务生:
- 管家婆:通过进程、虚拟内存和文件三个重要抽象管理计算机的CPU、内存、I/O设备。
- 服务生:为用户提供shell,为程序员提供系统调用。
大家都比较熟悉Windows操作系统,Linux也是一种操作系统。Linux的架构如下图:
如果使用GUI,Linux系统和Windows操作系统的使用没有什么大的区别,用鼠标可以解决大部分问题。
Linux学习应用的一个特点是通过命令行进行使用。学习使用Linux,实验楼推荐的学习路径如下:
命令行的好处主要是可以批处理并自动化,还有些功能GUI无法完成,大家可以慢慢学习体会。
那么多命令先学什么,后学什么是一个大问题,本文期望找一种方式,通过解决“Where”的问题,通过几个核心命令的学习,让你可以举一反三通过实践学习其他命令,从而解决Linux命令的“what”问题。
我们使用的Linux发行版是Ubuntu,使用Ubuntu有几个快捷键要掌握一下,可以提高使用命令行的效率:
CTRL+ALT+T
:打开终端,天天使用终端,用鼠标打开太低效了;CTRL+SHIFT+T
:新建标签页,编程时有重要应用;ALT+数字N
:终端中切换到第N个标签页,编程时有重要应用;Tab
:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab
键就可以得到提示或者帮助完成;上下键盘
:切换命令历史,刚输入一个很长的命令,按上
键就可以恢复;CTRL+C
:中断程序运行。
1 Linux命令
登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项
(options)或参数
(arguments)。即Linux中命令格式为:
command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数
其中选项(option)
是调整命令执行行为的开关,选项
不同决定了命令的显示结果不同,参数(arugment)
是指命令的作用对象。
如ls命令,ls
或ls .
是两条等价的命令,显示是当前目录的内容,这里“.”就是参数,表示当前目录,这个参数缺省可以省略。我们可以用ls -a .
显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的方式,如下图所示:
以上简要说明了Linux命令以及选项和参数的区别,但具体Linux中哪条命令有哪些选项及参数,以及如何使用,需要我们靠经验积累或者查看Linux的帮助文档了。
2 man命令
不论学习编程还是Linux命令,掌握帮助文档的使用都是很重要的,是举一反三的重要途径。
man
是manual的缩写,我们可以通过man man来查看man
的帮助,如下图:
帮助文档包含:
1 Executable programs or shell commands(用户命令帮助)
2 System calls (系统调用帮助)
3 Library calls (库函数调用帮助)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd(配置文件帮助)
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)
9 Kernel routines [Non standard]
解释一下:
1是普通的Linux命令
2是系统调用,操作系统的提供的服务接口
3是库函数, C语言中的函数
5是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6是给游戏留的,由各个游戏自己定义
7是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8是系统管理用的命令,这些命令只能由root使用,如ifconfig
其中1,2,3是初学时学习的重点,区别大家练习一下就知道了,比如printf是C语言的库函数,也是一个Linux命令,大家尝试一下man printf
,man 1 printf
,man 3 printf
,体会一下区别。
知道printf 命令也好,printf函数也好,查找帮助文档都很容易。man
有一个-k
选项用起来非常好,这个选项让你学习命令,编程时有了一个搜索引擎,可以举一反三。
我们通过一个例子来说明,比如数据结构中学过排序(sort),我不知道C语言中有没有完成这个功能的函数,可以通过“man -k sort”来搜索,因为是找C库函数,我们关注带3的,qsort好像是个好选项,如下图:
结合后面学习的grep 命令和管道,可以多关键字查找:
man -k key1 | grep key2 | grep key3 | ...
例如使用man -k sort | grep 3
,可以更好的找到qsort,你可以试试。
man -k
有个等价的命令apropos
,大家可以学习一下。
使用man -k
找到命令后,可以用man -f cmd
查看命令的基本功能。man -f
等价于whatis
.
3 cheat 命令
man 虽然很重要,但有些命令看了帮助还不会用,初学者需要例子,cheat就是这个身边的小抄。
cheat 命令不是Linux自带的,大家参考这篇文章(英文版)安装,实验楼课程实验系统中已经安装了。Ubuntu中已经默认安装好了python,cheat安装过程如下:
sudo apt-get install python-pip git
sudo pip install docopt pygments
git clone https://github.com/chrisallenlane/cheat.git
cd cheat
sudo python setup.py install
cheat是作弊,小抄的意思。
cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。比如强大的find
命令,初学者看完帮助文档后可能还是一头雾水,那么我们cheat find
一下:
\*To find files by case-insensitive extension (ex: .jpg, .JPG, .jpG):
find . -iname "*.jpg"
\# To find directories:
find . -type d
\# To find files:
find . -type f
\# To find files by octal permission:
find . -type f -perm 777
\# To find files with setuid bit set:
find . -xdev \( -perm -4000 \) -type f -print0 | xargs -0 ls -l
\# To find files with extension '.txt' and remove them:
find ./path/ -name '*.txt' -exec rm '{}' \;
\# To find files with extension '.txt' and look for a string into them:
find ./path/ -name '*.txt' | xargs grep 'string'
\# To find files with size bigger than 5 Mb and sort them by size:
find . -size +5M -type f -print0 | xargs -0 ls -Ssh | sort -z
\# To find files bigger thank 2 MB and list them:
find . -type f -size +20000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
\# To find files modified more than 7 days ago and list file information
find . -type f -mtime +7d -ls
\# To find symlinks owned by a user and list file information
find . -type l --user=username -ls
\# To search for and delete empty directories
find . -type d -empty -exec rmdir {} \;
\# To search for directories named build at a max depth of 2 directories
find . -maxdepth 2 -name build -type d
\# To search all files who are not in .git directory
find . ! -iwholename '*.git*' -type f
\# Find all files that have the same node (hard link) as MY_FILE_HERE
find . -type f -samefile MY_FILE_HERE 2>/dev/null
通过实践结合man命令把上面的例子理解了,find
基本上就用的很不错了。
使用cheat命令作弊是可以的。:)
4 其他核心命令
和查找相关的核心命令还有find
,locate
,grep
,whereis
,which
等,其中:
find查找一个文件在系统中的什么位置,locate是神速版本的find(Windows下有个神器Everything和locate功能类似)。可以通过
cheat find
学习find
命令。grep 可以对文件全文检索,比如你接手一个C语言项目,里面有上百个C源文件,想找找main函数在那个文件中,你可以通过
grep -n main *.c
,快速找到main在哪个C文件中并指出在第几行。grep支持正则表达式,正则表达式也是一个重要的元知识。可以通过cheat grep
学习grep
命令。上面还提到,whereis,which告诉你使用的命令工具装在什么地方。Linxu初学者会不习惯Linux的文件系统,C盘呢?D盘呢?用
apt-get install
安装程序好象也不用我们选择安装位置,程序装在哪了?比如:我们在Linux下上网使用firefox浏览器,大家可以使用whereis firefox
或更精确的使用which firefox
来看看结果。apt-cache可以在使用apt-get install安装一个程序时先找找软件源的库里有没有这个程序,有才可以安装。比如老师推荐了一个调试工具
ddd
,你可以用apt-cache search ddd
查查有没有这个程序。
5 小结
上面的命令包括man -k有一个共同特点就是基于“搜索”解决了学习方法问题,这些命令学好用熟后可以举一反三,大家重点学习,掌握了他们,其他命令就可以自学了。特别是man(man -k)和cheat对Linux命令学习非常重要。
课程的Linux命令下面列出,使用上面的搜索命令通过实践学习吧:
ac,apt-get,apt-cache
bzip2,
cat,cd,chgrp,chmod,chown,clear,compress,cp,
dd,ddd,df,diff,du,dump,
env,
find,finger,free,
gcc,gdb,grep,gzip,
head,
kill,
less,ln,locate,l,ls,
make,man,mkdir,more,mount,mt,mv,
netstat,nslookup,
od,objdump
passwd,patch,ps,pstop,pwd,
rm,rmdir
shell,sort,ssh,stty,
tail,tar,telnet,touch,tree,
umask,uname,unzip,
vi,vim,
whereis,which,who,write等
命令行的艺术(The Art of Command Line) 给出了一个由浅入深的学习路径。
学习Linux命令,Linux命令大全是个很好参考,集合了man和cheat的功能,查阅起来很方便。
更多Linux命令的学习也可以参考这里(英文)还有这里(中文),以及O'Reilly Linux、The Linux Cookbook和LinuxCommand。
除了这些文档,当遇到不懂的命令进,也可以到Explain Shell,让它给解释一下。
如果自己没有Linux环境,结合上面讲的搜索命令,可以去实验楼学习《Linux 基础入门(新版)》课程实践练习。
参考资料
Linux命令速查手册 (电子版,Linux Phrasebook)
Unix/Linux编程实践教程
操作系统教程
Linux系统架构
欢迎关注“rocedu”微信公众号(手机上长按二维码)
做中教,做中学,实践中共同进步!
原文地址:http://www.cnblogs.com/rocedu/p/4902411.html
推荐网站:博客园、新浪微博、扇贝背单词、DKY背单词小组、有道云笔记、豆瓣读书
版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”