对于程序员来说,掌握一些基本的Linux命令是必不可少的,即使现在用不到,在不久的将来也应该会用到。由于Linux有很多命令,每个命令基本可以用一篇文章介绍,所以本文仅总结一些常用命令的常用用法,如有明显的遗漏或错误,请各位帮忙指出,谢谢!
以下内容基于测试环境:Red Hat 4.5/5
一、服务器硬件配置
1、查看硬盘及分区情况
# fdisk -l
2、查看分区空间使用情况
可以查看各分区大小、已使用、可用、已使用百分比、挂载情况
1)默认单位为K
# df
2)可读性更好的显示,如单位M、G等
# df -h
3、查看内存信息
1)使用free命令
默认单位为K,可通过结合参数-b、-k、-m分别以单位B、K、M进行显示
# free
# free -b
# free -k
# free -m
2)查看/proc/meminfo文件,可以获得比free命令更详细内存信息
# cat /proc/meminfo
4、CPU信息
1)查询CPU基本信息
# more /proc/cpuinfo
# more /proc/cpuinfo | grep "model name" | sort | uniq
model name : Intel(R) Xeon(R) CPU E7330 @ 2.40GHz
2)查询有多少个CPU(相同physical id为同一个CPU)
# more /proc/cpuinfo | grep "physical id" | sort | uniq
physical id : 0
physical id : 1
3)查询单个CPU核数
# more /proc/cpuinfo | grep "cpu cores" | sort | uniq
cpu cores : 6
4)查询单个CPU线程数(逻辑处理器)
# more /proc/cpuinfo | grep siblings | sort | uniq
siblings : 12
二、系统信息
1、查看系统信息
1)查看内核名称
# uname
相当于
# uname -s
2)查看完整的系统信息,包括内核名称、主机名、内核版本、处理器架构等
# uname -a
2、查看redhat发行版本信息
# more /etc/redhat-release
3、查看主机名
# hostname
# uname -n
hostname对应的配置文件是/etc/sysconfig/network,如果配置文件中HOSTNAME为空、(none)、localhost或localhost.localdomain,就会尝试根据实际IP从/etc/hosts中查找映射的主机名,如果存在则使用该主机名,否则使用原来的HOSTNAME。
三、网络配置
1、查看网络服务的状态、启动、停止或重启网络服务
# service network status|start|stop|restart
2、显示、设置网络设备
1)查看已启用的网络接口信息
# ifconfig
2)查看所有网络接口配置
# ifconfig -a
3)查看eth0网络接口配置
# ifconfig eth0
4)启用eth0网络接口
# ifconfig eth0 up
# ifup eth0
5)关闭eth0网络接口
# ifconfig eth0 down
# ifdown eth0
6)实时(临时)修改eth0的IP地址
# ifconfig eth0 IP地址
7)实时(临时)修改eth0的IP地址、子网掩码
# ifconfig eth0 IP地址 netmask 子网掩码
实时地手动修改一些网络接口参数,可以利用ifconfig来实现,如果是要直接以配置文件,亦即是在 /etc/sysconfig/network-scripts里面的ifcfg-ethx等文件的设置参数来启动的话,那就得要通过ifdown或ifup来实现了。
ifconfig是一个命令。
ifup、ifdown是脚本,它会直接到/etc/sysconfig/network-scripts目录下搜索对应的配置文件,例如ifup eth0,它会找出ifcfg-eth0这个文件的内容,然后加以设置。
不过,由于这两个程序主要是搜索设置文件(ifcfg-ethx)来进行启动与关闭的,所以在使用前请确定ifcfg-ethx是否真的存在于正确的目录内,否则会启动失败。另外,如果以ifconfig eth0来设置或者是修改了网络接口后,就无法再以ifdown eth0的方式来关闭了。因为ifdown会分析比较目前的网络参数与ifcfg-eth0是否相符,不符的话,就会放弃这次操作。因此,使用ifconfig修改完毕后,应该要以ifconfig eth0 down才能够关闭该接口。
3、查看网卡配置文件
网络接口配置文件目录:/etc/sysconfig/network-scripts,其中,ifcfg-eth0是默认的第一个网络接口,如果机器中有多个网络接口,那么名字依此类推ifcfg-eth1、ifcfg-eth2...
# more /etc/sysconfig/network-scripts/ifcfg-eth0
四、系统服务配置
1、查看所有系统服务的运行状态
# service --status-all
2、查看服务状态、启动、停止或重启服务
# service 服务名 status|start|stop|restart
3、查询、更新系统服务的运行级别信息
1)查看系统服务列表,以及每个服务的运行级别
# chkconfig --list
2)添加服务
# chkconfig --add 服务名
3)删除服务
# chkconfig --del 服务名
4)开启、关闭或重置在某运行级别的开启情况
# chkconfig --level 2345 name <on|off|reset>
五、显示网络、进程状态
1、显示网络状态
1)查看监听中的sockets
# netstat -l
2)查看TCP传输协议的连接情况
# netstat -t
3)查看UDP传输协议的连接情况
# netstat -u
4)查看当前连接中的所有socket
# netstat -a
5)显示网络连接状态,显示IP地址而不使用域名
# netstat -n
6)查看监听中的TCP端口
# netstat -tnlp
7)查看监听中的UDP端口
# netstat -unlp
8)分页显示结果
# netstat -anp|more
9)查看端口是否被使用
# netstat -nlp | grep 端口号
2、实时监控CPU、内存、进程等使用情况
# top
输入大写P:按CPU使用率降序排序
输入大写M:按内存使用率降序排序
3、进程管理
1)查看所有进程
# ps -ef
# ps -aux
2)以进程树的格式显示所有进程
# ps -ejH
3)通过grep过滤进程
如查找tomcat进程一般可以这么写
# ps -ef|grep tomcat
4)关闭进程
关闭进程
# kill 进程号
强制关闭进程
# kill -9 进程号
六、磁盘操作
1、cd命令
切换目录
1)切换到指定目录
# cd /var/log
2)切换到当前用户的主/HOME目录
# cd ~
3)切换到上一级目录
# cd ..
4)返回最近访问的目录,这个经常用得到,不需要自己输入目录
# cd -
2、pwd命令
显示当前的工作目录
# pwd
3、ls命令
列出目录内容
1)列出当前目录的文件及子目录
# ls
2)列出指定目录的文件及子目录
# ls dir
3)列出当前目录的文件及子目录,包括隐藏文件
# ls -a
4)列出当前目录的文件及子目录的详细信息
# ls -l
5)列出当前目录的文件及子目录的详细信息,以可读性较好的格式进行显示
# ls -lh
6)按修改时间降序排序
# ls -lt
7)按修改时间升序排序
# ls -lrt
七、文件、目录管理
1、目录管理
1)创建目录
# mkdir dir
2)删除目录
# rm -r dir
删除目录不提示
# rm -rf dir
删除目录下的所有文件与目录
# rm -rf dir/*
3)重命名、移动目录
如果newDir不存在,则oldDir重命名为newDir;如果newDir存在,则将oldDir移动到newDir目录
# mv oldDir newDir
4)复制目录
如果newDir2不存在,则将newDir复制一份为newDir2;如果newDir2已存在,则将newDir复制一份移动到newDir2目录
# cp -r newDir newDir2
2、文件管理
1)创建空文件
# touch file.txt
# > file.txt
2)删除文件
# rm file.txt
删除文件不提示
# rm -f file.txt
3)重命名文件
# mv file.txt file5.txt
4)移动文件
# mv file.txt newDir
移动多个文件或目录到指定目录,将a.txt、b.txt、c.txt、oldDir移动到newDir目录
# mv a.txt b.txt c.txt oldDir/ newDir/
5)复制文件
# cp old.txt new.txt
将newDir目录下的文件与目录复制到targetDir目录
# cp -r newDir/* targetDir/
3、find命令
查找文件或目录
1)寻找当前目录下,所有以file为前缀的文件或子目录
# find -name file\*
2)查找文件并将结果输出到filelist.txt文件中
# find -name file\* -fprint filelist.txt
3)列出目录下最近两天之内有变动的文件
# find /home -mtime 2
4)寻找dir目录中以file为前缀的文件或目录,寻找时最多只往下找1层子目录
# find dir/ -name file\* -maxdepth 2
4、file命令
识别文件或目录的类型
1)查看/home/jsam目录下的文件及目录的类型
# file /home/jsam/*
2)查看指定文件或目录的类型
# file filename
5、du命令
显示文件或目录的大小。
1)显示当前目录下,所有子目录所占用的磁盘空间
# du
2)显示当前目录下,所有子目录所占用的磁盘空间。以bytes、K、M、可读性更高的方式显示大小
# du -b
# du -k
# du -m
# du -h
3)显示当前目录下,所有子目录所占用的磁盘空间。最多只显示2层子目录
# du --max-depth=2
4)显示当前目录下,所有子目录所占用的磁盘空间。显示目录大小时,并不包含其子目录的大小,即目录的大小排除了子目录的大小。
# du -S
5)显示当前目录所占用的磁盘空间
# du -s
# du -sh
6)显示当前目录下,所有子目录及文件各自占用的磁盘空间
# du -a
7)列出当前目录里最大的10个文件
# du -s * | sort -n | tail
注意:不要使用du -sh,尽管-h会使可读性更好,但单位可能不统一
6、sort命令
将文本文件内容加以排序。
1)以默认方式对文件内容进行排序显示
# sort file.txt
2)以默认方式对文件内容进行反序显示
# sort -r file.txt
3)查看进程,根据第二列按默认进行排序
# ps -aux | sort -k 2
4)查看进程,按内存使用率升序排序
# ps -aux | sort -nk 4
7、grep命令
用于查找文件中符合条件的字符串,或用于过滤标准输入流。
1)在当前目录中,从扩展名为log的文件中查找包括“java”字符串的文件
# grep java *.log
2)对当前目录及子目录中所有文件,查找包含“java”字符串的文件
# grep -r java *
3)查看端口是否被使用
# netstat -nlp | grep 端口号
4)通过grep过滤进程
如查找tomcat进程一般可以这么写
# ps -ef | grep tomcat
5)查看环境变量中的语言类型,忽略大小写
# set | grep -i lang
8、tail命令
输出文件内容的最后部分
1)显示文件的最后的内容(默认为最后10行)
# tail file.txt
2)显示文件的最后20行
# tail -n 20 file.txt
3)实时监测日志文件
# tail -f logs/catalina.out
9、cat命令
1)查看文件内容
该命令一次性显示整个文件内容
# cat file.txt
2)只给不为空的行编号(-b, --number-nonblank)
# cat -b file.txt
3)给所有行编号(-n, --number)
# cat -n file.txt
4)有出现连续多个空白行的地方,只保留一个空白行(-s, --squeeze-blank)
# cat -s file.txt
5)合并文件a、b为c
# cat a b >> c
6)清空文件
# cat /dev/null > g.txt
7)从键盘输入内容创建文件
输入内容并回车,再Ctrl+C以保存文件内容
# cat > file.txt
10、more命令
分页显示文件内容,每次显示一屏,该命令不支持向后/上翻阅。
# more catalina.out
执行more命令之后,支持一系列命令与操作:
1)Ctrl+F
显示下一整屏
2)i 空格
若指定i,显示下面的 i 行;否则,显示下一整屏。
3)i 回车
若指定i,显示下面的 i 行;否则,显示下一行。
4)v
在当前行启动/usr/bin/vi对之进行编辑修改
5)/pattern
从光标开始处向文件尾搜索pattern,单击n键查找下一处
11、less命令
该命令类似于more命令,但支持向后/上翻阅。
# less catalina.out
当执行查找命令时,只反白显示当前这个符合查找条件的字符串
# less -g catalina.out
当执行查找命令时,不反白显示所有符合查找条件的字符串
# less -G catalina.out
当执行查找命令时,忽略大小写
# less -I catalina.out
显示文件内容,并标示每行的行号
# less -N catalina.out
将数据经由管道导入less命令,以便阅读其内容,最后保存为文件
# set | less -o outputfile.txt
显示百分比
# less -m catalina.out
显示百分比、当前所在行及总行数
# less -M catalina.out
执行less命令之后,支持一系列命令与操作:
1)Ctrl+F
显示下一整屏
2)i 空格
若指定i,显示下面的 i 行;否则,显示下一整屏。
3)i 回车
若指定i,显示下面的 i 行;否则,显示下一行。支持上下键显示上、下一行
4)v
在当前行启动/usr/bin/vi对之进行编辑修改
5)/pattern
从光标开始处向文件尾搜索pattern,小写n查找下一处
6)?pattern
从光标开始处向文件头搜索pattern,小写n查找下一处,大写N反方向查找下一处
12、vi命令
一个强大的Linux文件编辑命令。
1)进入vi的命令
打开或新建文件,并将光标置于第一行首
# vi filename.txt
打开文件,并将光标置于最后一行首
# vi + filename.txt
2)移动光标类命令
H:光标移至屏幕顶行
M:光标移至屏幕中间行
L:光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾
3)屏幕翻滚类命令
Ctrl+f:向文件尾翻一屏
Ctrl+b:向文件首翻一屏
4)插入文本类命令
i:在光标前
I:在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
5)删除命令
d0:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
dd:删除当前行
6)搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2:将当前行中的第一个p1用p2替代
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换
7)选项设置
number:显示当前行的行号
:set nu(set number):显示所有行的行号。或者编辑文件~/.vimrc,添加set nu,这样用vi命令打开文件,就会自动显示行号了
:set nonu(set nonumber):隐藏所有行的行号
8)保存、退出等命令
:w:保存当前文件
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:e!:重新载入内容
八、用户管理
1、用户管理
添加用户
# useradd 用户名
删除用户
# userdel 用户名
修改当前用户的密码
# passwd
修改指定用户的密码,仅root用户可以指定用户名
# passwd 用户名
2、用户组管理
添加用户组
# groupadd 用户组名
删除用户组
# groupdel 用户组名
3、查看用户信息
查看用户的UID、GID及所归属的用户组
# id
# id 用户名
查看用户信息
# finger 用户名
# more /etc/passwd | grep 用户名
4、切换用户
切换用户但不切换用户的环境变量
su 用户名
切换用户并切换用户的环境变量
su - 用户名
5、查看登录用户信息
查看当前登录的用户名
# whoami
查看当前已登录系统的所有用户
# who
查看当前已登录系统所有用户的详细信息
# w
九、压缩解压
1、tar命令
文件打包、解压命令,可结合各种算法打包后进行压缩
1)将当前目录下所有文件和目录进行打包为my.tar
# tar -cf my.tar .
2)打包目录/home/jsam,并显示命令执行过程(-v)
# tar -cvf jsam.tar /home/jsam
3)打包目录log,并检查备份文件是否正确(-W)
# tar -cvWf log.tar log
4)打包目录log,并以gzip命令进行压缩
# tar -czvf log.tar.gz log
5)解压tar包
# tar -xvf foo.tar
6)解压gzip压缩包
# tar -xzf foo.tar.gz
7)创建bzip2压缩包
# tar -cjf foo.tar.bz2 bar/
8)解压bzip2压缩包,并将解压后的内容存放到bar目录下,bar目录必须已存在
# tar -xjf foo.tar.bz2 -C bar/
9)从gzip包中解压出index.html文件
# tar -xzf foo.tar.gz index.html
2、zip命令
zip包压缩命令
1)压缩当前目录下的所有文件及子目录
# zip -r first.zip *
3、unzip命令
zip包解压命令。可解压java的war工程包
1)直接解压文件到当前目录
# unzip first.zip
2)从zip包中解压出index.html文件
# unzip first.zip index.html
3)将zip压缩包解压到dir目录下
# unzip first.zip -d dir
4、bzip2命令
bzip2包压缩、解压命令
1)压缩文件
# bzip2 file.20130126
# bzip2 -z file.20130126
结果:file.20130126压缩为file.20130126.bz2,并删除源文件,压缩前后文件的修改时间不变
2)解压文件
# bzip2 -d file.20130126.bz2
结果:file.20130126.bz2解缩为file.20130126,并删除源文件,解缩前后文件的修改时间不变
十、权限设置
1、chmod命令
更改文件或目录的权限。
说明:
u:文件或目录的拥有者
g:文件或目录的所属组
o:其他用户
r:读权限,数字代号为“4”
w:写权限,数字代号为“2”
x:执行权限,数字代号为“1”
-:不具任何权限,数字代号为“0”
读、写与执行的数字代号可以相加形成组合权限,如6、5、3、7分别表示读写、读执行、写执行、读写执行权限
1)给文件所属组增加写权限
# chmod g+w filename.txt
2)增加所有用户对文件的执行权限
# chmod +x filename.txt
3)取消所有用户对文件的执行权限
# chmod a-x filename.txt
4)设置文件拥有者读写权限,所属组读写权限,其他人读权限
# chmod 664 filename.txt
5)设置文件拥有者读写执行权限,所属组读执行权限,其他人没任何权限
# chmod u=rwx,g=rx,o=- filename.txt
2、chown命令
更改文件或目录的拥有者或所属组。
1)更改文件的拥有者为user1,所属组为group1
# chown user1.group1 filename.txt
2)更改dir目录下的所有文件和子目录的拥有者和所属组
# chown -R user1.group1 dir
3)改文件主人
# chown zhanjia a.c 把文件a.c的主人改为zhanjia
3、chgrp命令
更改文件或目录的所属组。
1)把文件的所属组改为jsam
# chgrp jsam tomcat6.0.35.tar.gz
2)更改dir目录下的所有文件和子目录的所属组
# chgrp -R jsam dir/
十一、文件传输
1、ftp命令
1)FTP登录服务器
# ftp 主机地址
2)下载文件
下载单个文件
ftp> get file.txt
下载多个文件
ftp> mget *.txt
ftp> mget file1.txt file2.txt
3)上传文件
上传单个文件
ftp> put file.txt
上传多个文件
ftp> mput *.txt
ftp> mput file1.txt file2.txt
4)mget、mput、mdelete等批处理操作的提示开关设置
ftp> prompt on|off
5)删除远程文件
删除远程文件
ftp> delete file.txt
删除多个远程文件
ftp> mdelete file1.txt file2.txt
6)远程目录管理
在远程建立目录
ftp> mkdir dir
删除远程目录
ftp> rmdir dir
重命名远程文件或目录
ftp> rename src dest
7)在本地端(客户端Linux)执行指定的命令。这个命令很实用,可以在不退出ftp的情况下查看本地端的情况
语法:!<命令>
ftp> !ls
ftp> !dir
8)其他命令
help <命令>、? <命令>:帮助命令,不指定<命令>则列出所有可用的操作命令
ascii、asc:将传输数据的模式设成ASCII模式,适用于传输文本文件
binary、bin:将传输数据的模式设成二进制模式,适用于传输程序文件
ls、cd、pwd:一般的用法与linux命令相同
user <用户账号>:以指定的用户账号及密码登录FTP服务器
bye:退出ftp
2、scp命令
远程文件安全复制命令。数据传输使用ssh,并且和ssh使用相同的认证方式,提供相同的安全保证。
语法:scp [options] [[user@]host1:]file1 [...] [[user@]host2:]file2
一般用法:scp [可选项] 源文件/目录 目标文件/目录
1)下载文件
将远程文件下载到当前目录
scp jsam@119.132.224.1:/opt/server/apache-tomcat-6.0.35.tar.gz .
将远程文件下载为本地文件/root/tomcat6.0.35.tar.gz
scp jsam@119.132.224.1:/opt/server/apache-tomcat-6.0.35.tar.gz /root/tomcat6.0.35.tar.gz
2)上传文件
将本地文件上传到远程目录
scp tomcat6.0.35.tar.gz jsam@119.132.224.1:/opt/
3)下载目录
将远程目录下载到当前目录
scp -r jsam@119.132.224.1:/opt/server .
如果/root/client不存在,则将/opt/server下载为/root/client;如果存在,则将/opt/server下载到为/root/client的子目录
scp -r jsam@119.132.224.1:/opt/server /root/client
4)通过指定源、目标IP,可以同步任意操作两台服务器的文件与目录
scp root@192.168.0.102:/root/tomcat6.0.35.tar.gz jsam@119.132.224.1:/opt/software/
3、wget命令
从互联网下载文件。
下载www.iteye.com首页
# wget www.iteye.com
下载文件
# wget http://www.fayea.com/apache-mirror/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.zip
断点续传
# wget -c http://www.fayea.com/apache-mirror/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.zip
后台下载,同时生成日志文件wget-log
# wget -b http://www.fayea.com/apache-mirror/tomcat/tomcat-6/v6.0.36/bin/apache-tomcat-6.0.36.zip
十二、其他命令
1、wc命令
计算字数。可以计算文件的字节数、字数、字符数或行数。
1)计算文件行数
# wc -l messages.txt
2)计算文件的字节数
# wc -c messages.txt
3)通过管道的方式计算文件个数
# ls | wc -l
2、rpm命令
rpm包管理命令
1)安装rpm包
# rpm -ivh gcc.rpm
2)升级rpm包
# rpm -Uvh gcc.rpm
3)卸载rpm包
# rpm -e gcc
4)查询已安装的rpm包
# rpm -qa
3、查找历史命令
1)history命令
显示执行过的命令
# history
执行编号为158的命令
# !158
2)通过Ctrl+R进行反向查找执行过的命令
组合按键Ctrl+R,输入要查询字符串,再重复组合按键Ctrl+R进行反向查找。
Ctrl+C:取消查找
Esc:结束查找,获取已查找到的命令
回车:直接执行查找到的命令
4、md5sum命令
计算文件的MD5消息摘要
# md5sum filename.txt
5、set命令
查询或设置环境变量
1)查询当前环境变量
# set
6、mount命令
挂载文件系统
1)将/dev/hdb1挂载到/mnt/hdb1
# mount /dev/hdb1 /mnt/hdb1
2)将/dev/hdb1挂载到/mnt/hdb1,并指定载入的是vfat文件系统
# mount -t vfat /dev/hdb1 /mnt/hdb1
7、umount命令
卸载文件系统
1)卸载文件系统
# umount /dev/hdb1
8、nohup命令
不挂断地运行命令,结合&可实现用户退出终端或注销之后,让程序一直在后台运行。
# nohup ./start.sh &
9、date命令
显示或设置系统时间与日期。
1)显示当前系统的日期与时间
# date
# date "+%Y-%m-%d %H:%M:%S"
2)设置系统的时间与日期
# date -s "2013-2-10 12:59:00"
# date -s "2013/2/10"
# date -s "2014-3-12"
# date -s "12:59:00"
10、ssh命令
ssh远程登录
# ssh 用户名@IP地址
11、ping命令
检测主机,通常用来检测主机的网络功能是否正常,两台主机之间网络是不是通的
1)持续检测IP,直至用户主动结束
# ping 192.168.0.100
2)发出5个ping包进行检测
# ping -c 5 192.168.0.100
12、telnet命令
远程登录命令
1)登录主机
# telnet 192.168.0.100
2)检查TCP端口8080是否正在监听
# telnet 192.168.0.100 8080
在本文的编写过程中,发现内容越写越多,一直写不完。由于linux的命令都很强大,似乎每个命令都很重要,但追求大而全不是本文的初衷,所以建议大家根据实际环境与自己的使用习惯,形成一份可以随身携带与查看的小手册。