操做系统操做系统为你完成全部“硬件相关、应用无关”的工做,以给你方便、效率、安全。操做系统的功能我总结为两点:管家婆和服务生:html
你们都比较熟悉Windows操做系统,Linux也是一种操做系统。Linux的架构以下图:node
若是使用GUI,Linux系统和Windows操做系统的使用没有什么大的区别,用鼠标能够解决大部分问题。python
Linux学习应用的一个特色是经过命令行进行使用。学习使用Linux,实验楼推荐的学习路径以下:linux
命令行的好处主要是能够批处理并自动化,还有些功能GUI没法完成,你们能够慢慢学习体会。git
那么多命令先学什么,后学什么是一个大问题,本文指望找一种方式,经过解决“Where”的问题,经过几个核心命令的学习,让你能够触类旁通经过实践学习其余命令,从而解决Linux命令的“what”问题。程序员
咱们使用的Linux发行版是Ubuntu,使用Ubuntu有几个快捷键要掌握一下,能够提升使用命令行的效率:github
CTRL+ALT+T
:打开终端,每天使用终端,用鼠标打开过低效了;CTRL+SHIFT+T
:新建标签页,编程时有重要应用;ALT+数字N
:终端中切换到第N个标签页,编程时有重要应用;Tab
:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab
键就能够获得提示或者帮助完成;上下键盘
:切换命令历史,刚输入一个很长的命令,按上
键就能够恢复;CTRL+C
:中断程序运行。登陆Linux后,咱们就能够在#或$符后面去输入命令,有的时候命令后面还会跟着选项
(options)或参数
(arguments)。即Linux中命令格式为:web
command [options] [arguments] //中括号表明是可选的,即有些命令不须要选项也不须要参数
其中选项(option)
是调整命令执行行为的开关,选项
不一样决定了命令的显示结果不一样,参数(arugment)
是指命令的做用对象。正则表达式
如ls命令,ls
或ls .
是两条等价的命令,显示是当前目录的内容,这里“.”就是参数,表示当前目录,这个参数缺省能够省略。咱们能够用ls -a .
显示当前目录中的全部内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的方式,以下图所示:shell
以上简要说明了Linux命令以及选项和参数的区别,但具体Linux中哪条命令有哪些选项及参数,以及如何使用,须要咱们靠经验积累或者查看Linux的帮助文档了。
不论学习编程仍是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
.
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命令做弊是能够的。:)
和查找相关的核心命令还有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 key"搜索相关Linux命令,而后用"man cmd" 查看帮助文档结合“chea cmd”来学习,开始学习时咱们也能够每次打开终端就学习一个Linux命令,这样日积月累,就能更好的掌握Linux命令了。
咱们可让终端自动给咱们个每日提示,让咱们的学习自动化:
更娱乐化一点,咱们先安装cowsay。在Ubuntu下安装cowsay:
sudo apt-get install cowsay
安装cowsay后,在.bashrc中增长下面一行:
cowsay -f $(ls /usr/share/cowsay/cows | shuf -n 1 | cut -d. -f1) $(whatis $(ls /bin) 2> /dev/null | shuf -n 1)
每次打开终端,就会出现相似的界面,你就能够了解一个Linux命令了:
上面的命令包括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 基础入门(新版)》课程实践练习。
欢迎关注“rocedu”微信公众号(手机上长按二维码)
作中教,作中学,实践中共同进步!
版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
若是你以为本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”