Linux常用命令参考与指南
1、目录操作命令
cd是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径
cd /root/Docements #切换到目录/root/Docements
cd ./path #切换到当前目录下的path目录中,“.”表示当前目录
cd ../path #切换到上层目录中的path目录中,“..”表示上一层目录
cd~或cd #切换到当前用户的主目录
cd - #切换到上次的目录
ls是一个非常有用的查看文件与目录的命令,list之意,它的参数非常多
ls -l或ll #列出长数据串,包含文件的属性与权限数据等,分别为:用户权限 被引用计数 用户名 用户组名 文件大小(字节) 最后修改时间 文件名
ls -lh #人性化列出文件大小(带单位),结果同ls -l命令
ls -ld #查看当前目录下的文件而不包含子目录下的文件
ls -a #列出全部的文件,连同隐藏文件(开头为.的文件)一起列出来(常用)
ls -R #连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来
ls -i #查看文件i节点
mkdir dirname #创建目录名为dirname的目录
mkdir -p dirname/childirname #递归创建目录
rmdir dirname #删除空目录,非空目录会删除失败
2、创建软链接
ln -s 原文件绝对路径 path #类似Windows的快捷键,原文件必须写绝对路径(路径唯一才不会出错),不要使用相对路径
3、查找命令
locate filename #在后台数据库中按文件名搜索,搜索速度比find更快,执行前先执行updatedb命令使结果为最新结果
find -name filename #找出文件名为filename的文件,find命令的选项和参数比locate更多
find -name *.text #查找以.text结尾的文件,通配符(用来支持模糊查询),详见第23条
find -iname filename #用-iname选项查找表示不区分文件名的大小写
find path -name filename #查找指定目录下文件名为filename的文件
find path -user root #查找指定目录下用户名为root下的所有文件
find path -nouser #查找指定目录下不属于某个用户下的所有文件
find path -mtime +10 #查找指定目录下10天前所有修改过的文件(atime--文件访问时间,ctime--文件改变属性时间,10表示10天当天,-10表示10天内)
find path -size +25k #查找指定目录下文件大小大于25k的所有文件(+表示大于,-表示小于,不写表示等于,单位k为小写,M为大小)
find path -size +25M -a -size -30M #查找指定目录下文件大小大于25M并且小于30M的所有文件(-a表示and,-o表示or)
find path -size +1M -o -size 1M -exec ls -lh {} \; #-exec对结果集进行某个命令操作,并且以{} \;结尾
例如:find ./ -name "LOG.2015*" -exec rm -rf {} \; #删除查询(文件名以LOG.2015开头的所有文件)到的文件
find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,避免大范围搜索以减少资源消耗
grep [选项] 字符串 文件名 #在文件中查找符合条件的字符串-i忽略大小写,-v取反(排除指定的字符串),find用通配符进行匹配,grep使用正则表达式进行匹配
whereis 命令 #查找系统命令所在目录(shell自带命令无法查找到具体目录,如cd命令,可以用来判断是否为shell自带命令)
which 命令 #查找系统命令所在目录,同时查找出命令的别名(shell自带命令无法查找到具体目录,如cd命令)
4、复制文件
cp -a #将文件的特性一起复制
cp -p #连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
cp -i #若目标文件已经存在时,在覆盖时会先询问操作的进行
cp -r #递归持续复制,用于目录的复制行为
cp -u #目标文件与源文件有差异时才会复制
cp -a file1 file2 #连同文件的所有特性把文件file1复制成文件file2,-a相当于-pdr的效果,可以使复制文件与源文件一模一样
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中
cp命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下
5、剪切命令
该命令用于移动文件、目录或更名,move之意
mv file1 file2 file3 dir #把文件file1、file2、file3移动到目录dir中
mv file1 file2 #把文件file1重命名为file2
6、rm删除命令
rm -r #-r表示递归删除文件下所有文件夹和文件,会提示你是否真的删除y/n
rm -rf #rm表示删除-rf表示递归强制删除文件下所有文件夹和文件(慎用该命令,建议删除前留备份)
7、查看和杀死进程
该命令用于将某个时间点的进程运行情况选取下来并输出,process之意
ps aux #查看系统所有的进程数据
ps -ef | grep tomcat #查看所有tomcat进程
kill -9 22332 #杀死进程号为22332的进程
8、获取文件或目录信息,查看类型等
file filename #识别文件类型或编码格式。它是通过查看文件的头部信息来获取文件类型,Linux不像Windows以后缀扩展名来确定文件类型
9、文件操作
cat filename #该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据
cat filename | less #分页查看文件内容按q退出,也可写成 cat less filename
tail -f filename #支持查看实时刷新,例如用于查看tomcat运行日志
vi filename #打开或新建文件,光标一般在上次位置,进入文件后(请勿随便按键)按:i:输入模式,在当前光标处输入 I:在当前行首输入
vi + filename #光标位置在最后一行行首
vi +3 filename #光标位置在第3行行首,+后面可以跟任意所在行数
vi +/echo filename #用于查看某个字符串出现的位置,打开文件后查看第一个echo单词出现的位置,按 n 可以切换到下一个该单词出现的位置
vi - filename #将光标置于首行行首,该命令一般不建议使用,有些系统版本不支持
vi -r filename #在上次正用vi编辑时发生系统崩溃,恢复filename
使用vi进入文件后 #:q 退出 :e! 放弃所有修改,并打开原来文件 :wq或ZZ 保存并退出 :q! 强制退出并忽略所有更改 :set nu 显示行号
:ls 显示已打开的文件 dd删除光标所在行 a在当前光标字符后面输入
现在的版本一般vi命令都是vim的别名,vim是vi的升级版:1.支持多级撤销ctrl+z 2.支持跨平台 3.支持语法高亮 4.支持图形界面
10、清空屏幕
clear命令或Ctrl+L组合快捷键 #清空终端屏幕。并没有真正地清空屏幕,向上滚时,你仍然能看到之前的命令操作留下来的输出。
printf "\033c"或者printf "\ec" #真正地清空终端屏幕。printf是base里内置的命令,内置命令比其他可执行文件要高
reset命令 #真正地清空终端屏幕。这个命令执行起来有点慢,但它的兼容性显然比其他的要好。reset命令在你的终端控制错乱时非常有用。
11、打包/解包、压缩/解压文件操作
常见的linux压缩格式:.zip .gz .bz2 .tar.gz .tar.bz2
tar -cvf abc.tar abc #打包命令:-c:打包 -v:显示过程 -f:指定打包后的文件名(使用打包和解包命令可以用来做备份与还原操作)
tar -xvf abc.tar #解包命令:-x:解包(解包前建议删除原文件或者后面跟上-C命令来指定解压后的文件位置,否则可能报文件名重复的错误)
tar -zcvf abc.tar.gz abc #打包并压缩:-z:压缩成.gz格式,打包并压缩后的格式为.tar.gz格式
tar -zxvf abc.tar.gz #解包并解压abc.tar.gz文件
tar -jcvf abc.tar.bz2 abc #打包并压缩:-j:压缩成.bz2格式,打包并压缩后的格式为.tar.bz2格式
tar -jxvf abc.tar.bz2 #解包并解压abc.tar.bz2文件
zip -r abc.zip abc #压缩成zip格式的压缩文件,该压缩格式不需要先打包也能压缩目录,-r表示递归进行压缩,用于压缩整个目录
unzip abc.zip -d /home/kayak #解压abc.zip文件到/home/kayak目录下,-d用于指定解压后的文件位置,不使用则在当前目录下
14、用户和用户组操作
su username #用户切换:普通用户切换到root用户需要输入密码,root切换到普通用户不需要输入密码
cat /etc/passwd #查看所有用户:看第三个参数:500及以上的,就是后面建的用户了.其它则为系统的用户
useradd username #添加用户
useradd -g groupname username #添加用户,并且指定用户组
useradd -d /home/jy username #添加用户,并且指定用户家(主)目录
passwd username #设置指定用户的用户密码
usermod -l newusername username #修改用户名
usermod -g newgroup groupname #修改用户组
groupadd groupname #添加用户组
groupadd -g 888 groupname #添加用户组,并且指定编号为888
groupdel groupname #删除用户组
groupmod -n newname groupname #修改用户组名称
groupmod -g 668 groupname #修改用户组编号
groups username #显示用户所属的用户组
w #查看当前登录用户(比who命令显示的更详细)
who #查看当前登录用户
pwd #查看当前用户所在目录
last #查看用户的登录记录
lastlog #查看所有用户的最后登录时间
touch /etc/nologin #禁止除了root以外的所有用户登录,该命令是在/etc目录下创建了一个nologin文件
passwd -l username #禁止指定用户登录
passwd -u username #解除被禁止登录的用户
passwd -d username #清除指定用户的密码,可以无密码登录该用户
gpasswd -a username groupname #设置用户的附属组
gpasswd -d username groupname #将指定用户退出指定用户组
15、设置文件权限
chmod 755 filename #设置用户的权限为:1.文件所有者可读可写可执行2.与文件所有者同属一个用户组的其他用户可读可执行3.其它用户组可读可执行
chmod 755 * #'*'表示当前目录下的所有文件
一般是三个数字:
第一个数字表示文件所有者的权限
第二个数字表示与文件所有者同属一个用户组的其他用户的权限
第三个数字表示其它用户组的权限。
权限分为三种:读(r=4),写(w=2),执行(x=1)。权限可相加运用
四个数字情况:
chmod 4755与chmod 755 的区别在于开头多了一位,这个4表示其他用户执行文件时,具有与所有者相当的权限。
例如:root用户创建了一个上网认证程序netlogin,如果其他用户要上网也要用到这个程序,那就需要root用户运行chmod 755 netlogin命令使其他用户也能运行netlogin
但是netlogin执行时可能需要访问一些只有root用户才有权访问的文件,那么其他用户执行netlogin时可能因为权限不够还是不能上网。
这种情况下,就可以用 chmod 4755 netlogin 设置其他用户在执行netlogin也有root用户的权限,从而顺利上网。
16、帮助命令
man [选项] 命令 #查看相应命令的帮助文档,man -f 命令基本等同与 whatis 命令(可以查看出帮助等级)
man -k 命令 #查看与该命令相关的所有文件(模糊查询),相当于apropos 命令
help 命令 #查看指定命令的帮助文档(只能查找shell内部命令)
命令 --help #查看指定命令的帮助文档(中文文档,并且列出所有选项的详细使用说明),无法查找到shell内部自带命令
info 命令 #检索帮助文档大全,不建议使用该命令,操作较为麻烦如,按u进入上一层,按q退出等等
17、别名与快捷键
alias #查看当前已有别名的命令
alias ls='ls --color=never' #表示给ls --color=never这条命令定义别名为ls
unalias ls #删除别名ls,如果在配置文件里进行了配置,该命令只是临时删除别名,因为重启还会加载配置文件,该别名又会生效
ctrl键+c #强制终止
ctrl键+l #清屏,并非真正意义上的清屏,只是将显示内容置顶,关于清屏命令详见第十条
ctrl键+a #光标跳到行首
ctrl键+e #光标跳到行尾巴
ctrl键+u #从光标位置到行首全部删除
ctrl键+z #把命令放入后台
ctrl键+r #查询已输入过的命令
ctrl键+d #退出
上下键 #查看和使用单条历史命令
18、关机命令
shutdown -h 08:30 & #在08:30关机,&表示后台执行,建议不要远程进行关机,慎用关机命令
shutdown -c #取消前一个关机命令
shutdown -r now & #-r表示重启,now表示现在,&表示后台执行,不要轻易重启
19、历史命令
history #查看历史命令记录,使用上下键也可查看并使用单条历史命令
history -w #同步历史命令文件,未同步时,历史命令文件中只显示出直到上次退出后的全部历史命令
history -c #删除历史命令记录
!2 #执行第二条命令,history命令会显示出命令编号(第几条)
!! #执行上一条命令
!h #执行最近一条以h开头的命令,注意:最近一条
20、输入、输出重定向
Linux中一切皆文件,文件/命令/设备等等实际上均为文件,标准输入为键盘(/dev/stdin),标准正确输出为显示屏(/dev/stdout),标准错误输出为显示屏(/dev/stderr)
文件描述符分别为:键盘(标准输入):0 显示屏(标准正确输出):1 显示屏(标准错误输出):2
ls > test.text #将ls命令的执行结果以覆盖方式写入(输出)test.text文件中
ls >> test.text #将ls命令的执行结果以追加方式写入(输出)test.text文件中
qqq 2>> test.text #将错误命令输出的错误结果以追加方式写入(输出)test.text文件中
ls > test.text 2>&1 #将ls命令的执行结果以覆盖方式将正确和错误输出信息同时写入test.text文件中
ls &> test.text #效果同上
ls >> test.text 2>&1 #将ls命令的执行结果以追加方式将正确和错误输出信息同时写入test.text文件中
ls &>> test.text #效果同上
ls>>test.text1 2>>test.text2 #将ls命令的执行结果以追加方式将正确输出结果写入test.text1文件中,错误输出结果写入test.text2文件中
ls &> /dev/null #/dev/null是黑洞,是系统预留的,相当于垃圾回收站,可以把不需要知道或看到的结果输出到该路径下,结果不会被保存和显示
wc #-l 统计行数(不包括统计显示的那一行),-w 单词数,-c 字节数(包括空格和回车),不使用选项则三者均统计
wc < test.text #输入重定向一般用的较少,该命令可写成wc test.test,区别只是会显示文件名称
21、多命令执行符(逻辑连接符)
多命令执行符可以混合使用,灵活变通 #例如:ls && echo yes || echo no命令表示ls正确执行后,执行echo yes否则执行echo no
命令1 ; 命令2 # ; 逻辑连接,顺序执行命令1和命令2
命令1 && 命令2 # && 逻辑与,执行命令1,执行成功则执行命令2
命令1 || 命令2 # || 逻辑或,执行命令1,执行错误则执行命令2
22、管道符
管道符应该慎重选用,管道符后面的命令,必须要能执行,前面命令执行的结果,才可以正常执行
命令1 | 命令2 #将命令1执行的结果让命令2去执行
netstat #该管道符命令是查看本地ip连接和端口以及本地应用等信息
管道符与通配符都可以灵活使用,实现各种功能,例如
netstat -an | grep ESTABLISHED | wc -l #该命令可以显示出登录用户数,ESTABLISHED 表示已建立连接的用户
23、通配符
* #匹配任意内容
? #匹配任意一个字符
[] #匹配任意一个中括号内的字符
[^] #匹配任意一个不是中括号内字符的字符
ls t?[^0-9]* #显示以t字符开头,加任意一个字符,加任意一个非数字字符,加任意一个字符组成的文件名的文件,例如:test.text tff等等
ls t[a-z] #显示以t开头,加任意一个字母字符
24、Bash中其他特殊符号
'' #在单引号内的所有字符都没有特殊意义
"" #在双引号中的特殊符号没有特殊意义,但是"$"、"`"、"\"例外,分别代表:"调用变量的值"、"引号命令"和"转义符"
`` #反引号内是系统命令,在Bash中先执行,和$()作用一样,建议用$(),因为``容易看错
$() #用来引用系统命令,在Bash中先执行
# #在Shell脚本中,#开头的行代表注释
$ #用于调用变量的值,例如$name代表获得变量name的值
\ #转义符,可以用来将特殊符号变为普通字符,例如echo \$name,这时输出$name 而echo $name则会输出变量name的值
25、磁盘分区命令
df #等同于df -l,查看磁盘分区情况,单位是字节b
df -h #以合适的单位显示磁盘分区大小和剩余等情况,以1024进制换算
26、挂载命令
mount #查看系统中已经挂载的设备
挂载的命令选项较多,并且可以操作挂载权限,当某个挂载点(例如home)挂载权限为不可以读写时,
即使对文件的操作权限已经设定为可读写也无权限读写该挂载点(例如home)下的文件,即使是root用户也一样
挂载点都有默认的设定,一般不建议去更改。特别是home、boot等重要的分区(挂载点)切记不可该更默认设定
一般只使用挂载命令去挂载(相当于windows下的分配盘符)一个额外的挂载点,例如加入的一个U盘或者光盘(必须自己挂载)
取出U盘或者光盘时必须先使用命令(umount)卸载,不使用命令会取不出U盘或光盘并且会出错
注意:U盘和光盘的挂载和卸载是有区别的,并且完全一样的命令和原理
另外:现在一般很少使用挂载方式,而是使用远程传输的方式,例如:ftp传输
27、nohup输出日志
nohup ./start.sh &
tail -f nohup.out
本文说明:
本文适用于开发人员学习和查阅Linux命令,Linux运维人员或Linux相关专业研究与学习人员可作为基础参考,Linux命令多如牛毛,无法一一列举,许多命令是可以组合使用的,应学会灵活运用。笔者根据自己经验已经列举出几乎涵盖开发人员能够使用到的所有命令,并且已对多数命令进行了解释和说明执行结果以及个人建议,所有命令都给出使用方法和效果。笔者对命令进行了分类说明,以便于大家学习和查阅。第12和第13条笔者已删除或整合。
Linux基础知识介绍请查阅:http://jsonliangyoujun.iteye.com/blog/2343963
解压缩补充:
tar
-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z:有gzip属性的
-j:有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
下面的参数-f是必须的
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
# tar -cf all.tar *.jpg
这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
# tar -rf all.tar *.gif
这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif
这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
# tar -tf all.tar
这条命令是列出all.tar包中所有文件,-t是列出文件的意思
# tar -xf all.tar
这条命令是解出all.tar包中所有文件,-x是解开的意思
压缩
tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux
解压
tar –xvf file.tar //解压 tar包
tar -xzvf file.tar.gz //解压tar.gz
tar -xjvf file.tar.bz2 //解压 tar.bz2
tar –xZvf file.tar.Z //解压tar.Z
unrar e file.rar //解压rar
unzip file.zip //解压zip
总结
1、*.tar 用 tar –xvf 解压
2、*.gz 用 gzip -d或者gunzip 解压
3、*.tar.gz和*.tgz 用 tar –xzf 解压
4、*.bz2 用 bzip2 -d或者用bunzip2 解压
5、*.tar.bz2用tar –xjf 解压
6、*.Z 用 uncompress 解压
7、*.tar.Z 用tar –xZf 解压
8、*.rar 用 unrar e解压
9、*.zip 用 unzip 解压