操作系统操作系统为你完成所有“硬件相关、应用无关”的工作,以给你方便、效率、安全。操作系统的功能我总结为两点:管家婆和服务生:
大家都比较熟悉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
:中断程序运行。登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项
(options)或参数
(arguments)。即Linux中命令格式为:
command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数
其中选项(option)
是调整命令执行行为的开关,选项
不同决定了命令的显示结果不同,参数(arugment)
是指命令的作用对象。
如ls命令,ls
或ls .
是两条等价的命令,显示是当前目录的内容,这里“.”就是参数,表示当前目录,这个参数缺省可以省略。我们可以用ls -a .
显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的方式,如下图所示:
以上简要说明了Linux命令以及选项和参数的区别,但具体Linux中哪条命令有哪些选项及参数,以及如何使用,需要我们靠经验积累或者查看Linux的帮助文档了。
不论学习编程还是Linux命令,掌握帮助文档的使用都是很重要的,是举一反三的重要途径。
man
是manul的缩写,我们可以通过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
.
man 虽然很重要,但有些命令看了帮助还不会用,初学者需要例子,cheat就是这个身边的小抄。
cheat 命令不是Linux自带的,大家参考这篇文章(英文版)安装,实验楼课程实验系统中已经安装了。
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命令作弊是可以的。:)
和查找相关的核心命令还有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
查查有没有这个程序。
上面的命令包括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等
更多Linux命令的学习也可以参考这里(英文)还有这里(中文),以及O'Reilly Linux、The Linux Cookbook和LinuxCommand。
如果自己没有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
如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”