Author: yoyoba(stuyou@126.com)
Date: 2011-4-23
一直在用LINUX,但是却没有对LINUX命令系统学习过,正好利用这段还算比较清闲的时间,学习一下LINUX常用的命令,是《LINUX命令速查手册》的读书笔记,这本书是Scott Granneman著,成保栋翻译,人民邮电出版社出版,2009.10第一版,写的浅显易懂,基本是一些常用的实用命令。陆续还会对这些命令的用法进行完善,会持续更新。如果转载请注明出处,谢谢!

一.基础命令
1.通配符
	*,匹配0或任意多个字符
	?,匹配单个字符
	[],可以匹配一组单个字符,或者是匹配用连字符(“-”)指定某一范围内的字符
2.ls,列出文件、文件夹
	-R(--recursive),查看子文件夹中的文件列表,递归遍历目录
	-1(--format=single-column),单独一列显示内容
	-m(--format==commas),用逗号分隔的列表显示内容
	-a(--all),显示隐藏的文件和文件夹
	-F(--classify),显示文件类型,*表示可执行文件,/表示目录,@表示符号链接文件,|表示管道,=表示套接字
	--color,用不同颜色显示内容,dircolors--print-database查看系统为各种文件映射的颜色
	-l(--format=long),显示详细信息
	-r(--reverse),以相反的顺序显示列表内容(和-l选项显示的以字母顺序相反)
	-X(--sort=extension),以文件的扩展名排序
	-t(--sort=time),按日期和时间排序
	-S(--sort=size),按文件大小排序
	-h(--human-readable),用K、M、G显示文件大小
3.pwd,显示当前目录
4.cd,切换目录
	cd -,切换到以前的目录
5.touch file,将文件时间修改为当前时间,也可用来创建一个新的空文件
	-a(--time=access),只更新访问时间
	-m(--time=modify),只更新修改时间
	-t [[CC]YY]MMDDhhmm[.ss],修改为任意时间
			字符		含义
		--------------------------------------------------------
			CC			4位年份数字钟的前2位字符
			YY			2位数字的年份:
						如果是00-68,则假设年份的前2位数字为20
						如果是69-99,则假设年份的前2位数字为19
						如果什么也没有,则假设为当前年份
			MM			月份(01-12)
			DD			日期(01-31)
			hh			小时(01-23)
			mm			分钟(00-59)
			ss			秒(00-59)
		------------------------------------------------------------
6.mkdir,创建新目录
	-p(--parents),创建新目录及其下面的子目录。如mkdir -p ~/a/b/c,会在~下连续创建a/b/c目录
	-v(--verbose),显示mkdir的操作步骤
7.cp,复制文件和目录
	把文件复制到目录时,只需指明目录名(该目录若不存在,则把目录当做文件),不需要指定目标文件名
	复制时可以使用通配符
	-v(--verbose),复制时显示执行过程
	-i(--interactive),当覆盖已存在的文件时,提供确认
	-R(--recursive),复制目录
8.mv,移动或重命名文件
	移动文件到指定目录,只需提供目录名/,而不需指定目标文件名
	移动子目录,不需使用-R选项
9.rm,删除文件或目录
	rm删除时会彻底删除,不是删除到回收站
	shred命令删除的文件,几乎不能恢复
	-v(--verbose),显示删除过程
	-i(--interactive),删除确认
	-R(--recursive),递归删除
	-f(--force),强制删除
	-Rf,删除目录常用选项
	文件名中如果有有空格,删除时则用双引号把文件名括起来;删除由“-”开始的文件时,在rm后加"--"
10.su username (switch user),变更到username用户
	-l(--login),变更用户时,环境变量也跟随变更
	su,变更到root
	su -,变更到root,连同环境变量
二.学习命令
1.man
	在man page页中,搜索时,输入“/word”,按下Enter或n,跳转到下一个搜索结果,shift+n返回
	-f(--whatis),根据命令名称快速查找命令功能
	man [1-8],读取命令的特定man page。man page按照其类型分成了不同的区段,分别标记为数字1到8,区段划分如下
			数字		描述
		--------------------------------------------------------------
			1			普通命令,如cd、chmod
			2			由内核提供的底层系统调用,如intro、chmod
			3			C库函数,如beep
			4			特殊文件,如/dev中找到的设备
			5			文件格式和约定,如apt.conf、passwd
			6			游戏
			7			杂项,包括宏包,如ascii、samba、utf-8
			8			root用户使用的系统管理命令,如shutdown、mount
		----------------------------------------------------------------
2.whereis 命令名,查找命令的可执行文件、源文件和man page路径
	会先报告命令的源文件位置,然后报告二进制可执行文件的位置,最后报告man page路径
	-b,只搜搜二进制文件
	-m,只搜索man page
	-s,只搜索源文件
3.whatis 命令名,获取命令的描述
	等价于man -f
4.which 命令名,找出将要运行的命令的版本
	whereis -b kword,会在两个地方找到kword,那么哪个会先运行?which kword就会得到答案
	which 命令名,如果系统中命令存在,且在PATH中,则返回命令所在路径,否则不返回任何信息
三.组合命令
1.分号,连续运行多个命令。将各个需要运行的命令放在shell的一行上,用分号分隔,只有一个命令结束运行(不管成功或者失败),才会运行下一个命令,可以使用sleep n,来引入短暂延迟
2.&&,用&&分隔各命令,则只有当前一条命令执行成功(命令返回的退出状态码为0)时,后一条命令才会被执行。如果有一条命令没有执行成功,则停止
3.||,只有前面的命令运行失败,才运行下一个命令。
4.$(),将一个命令的输出插入到另一个命令。比如,想创建一个以当前日期来命令的文件夹,可以这样,mkdir $(date "+%Y-%m-%d"),这里的date "+%Y-%m-%d"命令是现实当前的日期,插入到了mkdir中。
5.|,管道,将前一个命令的输出作为后一个命令的输入
6.>,输出重定向,ls /home/stuyou > a.txt,如果a.txt文件不存在,则创建它,如果存在,则完全覆盖它。
7.set -o noclobber,打开noclobber选项,防止重定向时对文件的完全覆盖,如果要使用重定向并覆盖文件,应使用|>代替>,set +o noclobber关闭noclobber选项,要一直打开colobber选项,可以在.bashrc中增加一行set -o noclobber
8.>>,将输出追加到文件,如果文件存在,则追加到文件底部,如果文件不存在,则创建
9.<,输入重定向,把标注输入重定向到文件
四.查看文件
1.cat
	cat file1 file2,把file1和file2合并输出到标准输出设备
	cat file1 file2 > file3,把file1和file2合并后输出到文件file3
	-n(--number),显示文件时加上行号
2.tac,反向显示文件,cat从第一行显示到最后一行,tac从最后一行显示到第一行
3.less,分屏查看文件,类似命令有more,pg,most
	-N(--LINE=NUMBERS),显示行号
	在.bashrc中添加export EDITOR=vim,则在使用less查看时,按下v,less界面消失,弹出VIM编辑器,编辑完毕,退出编辑器,返回到less
					less的键盘操作命令
		键盘命令					操作
	---------------------------------------------------------
		PageDown、e、或空格键		前进一页
		PageUp或b				后退一页
		Return、e、j、或下箭头键		前进一行
		y、k或上箭头键				后退一行
		G或p						前进到文件的结尾
		1G						回到文件的开始
		Esc-)或右箭头键				向后滚动
		Esc-(或左箭头键				向左滚动
		Q						退出less
		=						在屏幕底部显示文件信息
		/						在less中搜索
	----------------------------------------------------------	
	
					less的搜索命令
		键盘命令					操作
	--------------------------------------------------------------------
		/搜索模式					向前搜索使用正则表达式来表示的模式
		n						向前重复搜索
		N						向后重复搜索
	---------------------------------------------------------------------
4.head,查看文件前10行的内容
	-n 5(--lines-5),查看前5行内容
	-c 100(--bytes=100),查看前100字节内容,-c 100k,查看前100K字节内容,-c 100m,查看前100M内容
5.tail,查看文件后10行内容
	-n 5(--lines=5),查看后5行内容
	-f(--follow),查看一个文件中不断更新的最后10行内容,例如用于查看日志文件,日志文件一旦更新,就会自动显示最后10行内容,直到CTRL+C来中止tail命令。
五.打印和管理打印任务
1.lpstat,查看打印机如何连接
	-p,列出所有可用的打印机
	-d,找到默认的打印机
	-s,查看打印机是如何连接的
	-t,一次性获取打印机的所有信息
2.lpr file,将文件打印到默认的打印机
	lpr -P 非默认打印机名
	lpr -# 数字(1-100),打印多份
3.lpq,列出打印任务队列
	-a,列出所有的打印任务队列,包括非默认打印机
4.lprm,取消默认打印机上的打印任务
	lprm job ID,取消编号为ID的打印任务作业
	lprm -,取消所有的打印任务
六.拥有者和权限
1.chgrp,改变群组
	chgrp family a.sh,把a.sh的群组修改为family,可以是群组名,也可以是裙子ID
	-R(--recursive),递归修改目录属于的群组
	-v(--verbose),显示命令执行过程
	-c(--changes),只显示修改过的内容
2.chown,修改文件和目录的拥有者
	chown denise a.sh,把a.sh的拥有者改为denise,可以是用户名,也可以是用户ID
	chown owner:group file,同时把file文件的群组改为group,拥有者改为owner
3.chmod,更改文件和目录的权限
	常见的文件权限为rwx,其实还有一些特殊权限,包括suid、sgid和sticky bit,
				          权限字母及其含义
		文件属性			缩写	对文件的含义				对目录的含义
	---------------------------------------------------------------------------------------------------
		可读(readable)		r		可以查看					可以使用ls命令列出其内容
		可写(wrieable)		w		可以编辑					可以删除、重命名或添加文件
		可执行(executable)	x		可以作为程序来运行			可以读取它的文件和子目录,或运行文件
		suid				s		任何用户都可以使用拥有者	不可用
									的权限来执行文件
		sgid				s		任何用户都可以使用用户组	在目录中新创建的任何文件都属于拥有
									的权限来执行文件			该目录的用户组
		sticky bit			t		告诉OS经常要执行这个文件	用户不能删除或重命名文件,除非当前用户
									所以通常把它保存在交换区	是文件或者目录的拥有者
									以便快速访问(只适用于较
									早的UNIX系统,LINUX将忽
									这个属性略)
	----------------------------------------------------------------------------------------------------
	chmod [ugo][+-=][rwxst],用字母修改文件和目录的权限
	chmod [0-7][0-7][0-7],用数字修改文件和目录的权限
	-R(--recursive),递归修改权限
	chmod u[+-]s,使用字母设置和清除suid,suid只适用于可执行文件,不能用于目录
	chmod 4[0-7][0-7][0-7],使用数字设置suid,在原来数字的左边写上4,表示设置suid
	chmod 0[0-7][0-7][0-7],使用数字清除suid,在原来数字的左边写上0,表示清除suid
	chmod g[+-]s,使用字母设置和清除sgid,sgid既适用于文件,也适用于目录
	chmod 2[0-7][0-7][0-7],使用数字设置sgid,在原来数字的左边写上2,表示设置sgid
	chmod 0[0-7][0-7][0-7],使用数字清除sgid,在原来数字的左边写上0,表示清除sgid
	chmod [+-]t,使用字母设置和清除sticky bit,LINUX忽略文件的sticky bit权限,LINUX下,sticky bit只对目录有效
	chmod 1[0-7][0-7][0-7],使用数字设置sticky bit,在原来数字的左边写上1,表示设置sticky bit
	chmod 0[0-7][0-7][0-7],使用数字清除sticky bit,在原来数字的左边写上0,表示清除sticky bit
七.归档和压缩
1.zip
	zip myzip.zip file1 file2...,把file1、file2...压缩成myzip.zip
	zip myzip.zip mydir,把目录mydir压缩成myzip.zip
	-[0-9],设置压缩比,0表示不压缩,9表示最大化压缩,默认为6
	-e,压缩时加密,有的LINUX发行版没有提供这个功能
2.unzip,解压zip压缩的文件
	-v(--verbose),解压缩时提供运行情况
	-l(--list),列出压缩文件包含的文件
	-t(--test),测试将要解压的文件
3.gzip
	gzip file,会产生一个file.gz的压缩文件,原文件file被删除
	-c(--stdout或--to-stdout),压缩时保留原文件,需使用输出重定向,gzip -c file > file.gz	
	-r(--recursive),遍历压缩子目录
	-[0-9],设置压缩比,0表示不压缩,9表示最大化压缩,默认为6
4.gunzip,解压gzip压缩的文件
	gunzip file.gz,解压缩file.gz,同时file.gz被删除,若不想被删除,则使用-c选项,并采用输出重定向
	-t(--test),测试将要解压的文件
5.bzip2
	bzip2 file,会产生一个file.bz2的压缩文件,源文件file被删除,若不想被删除,则使用-c选项,并采用输出重定向
	-[0-9],设置压缩比,0表示不压缩,9表示最大化压缩,默认为6
6.bunzip2,解压bzip2压缩的文件
	bunzip2 file.bz2,解压缩file.bz2,同时file.bz2被删除,若不想被删除,则使用-c选项,并采用输出重定向
	-t(--test),测试将要解压的文件
7.tar,归档文件,tar不能压缩,只能归档,结果生成的归档文件就是tarball
	-c(--create),通知tar,正在创建一个tarball
	-f(--file),为tarball指定文件名,tar -cf myfile.tar file,把file归档为myfile.tar,tar -cf mydir.tar mydir/,把目录mydir归档为mydir.tar
	-z(--gzip),调用gzip,归档后压缩
	-v(--verbose),显示归档压缩过程
	tar -czvf myfile.tar.gz file,把file归档压缩成myfie.tar.gz
	-j(--bzip2),调用bzip2,归档后压缩
	tar -cjvf myfile.tar.bz2 file,把file归档压缩成mfie.tar.bz2
	-t(--test),测试将要解压的文件
	tar -ztvf myfile.tar.gz,测试myfile.tar.gz,-f选项需要放在最后面
	-x(--extract),解压文件
	tar -xzvf myfile.tar.gz,解压tar.gz文件
	tar -xjvf myfile.tar.bz2,解压tar.bz2文件