常用Linux命令

50个最常用的Linux/Unix命令(操作说明)

我准备在本文中大致介绍50个最常用的Linux/Unix命令和相关的操作说明,如果你觉得还有些命令我没有提到,请留言给我。

1. tar命令

新建一个压缩文件:

$ tar cvf archive_name.tar dirname/

新建一个压缩文件(以gzip方式压缩):

$ tar czvf archive_name.tar.gz dirname/

新建一个压缩文件(以bzip2方式压缩):

$ tar cjvf archive_name.tar.bz2 dirname/

相对目录的问题:
如果打算把/var/dir1/dir2压缩为dir2.tar.gz的话:

tar zcvf dir2.tar.gz /var/dir1/dir2

所生成的压缩包中会有三层,分别是var,dir1,dir2这三层,一般都会需要把dir2在压缩包中为顶级层,需要这样:

tar zcvf dir2.tar.gz -C /var/dir1/ dir2

-C参数的表示把/var/dir1/作为相对目录来压缩dir2,所得的结果就是dir2为压缩包中的顶级目录了。
解压缩文件:

$ tar xvf archive_name.tar

解压缩文件(以gzip方式解压缩):

$ tar xzvf archive_name.tar.gz

解压缩文件(以bzip2方式解压缩):

$ tar xjvf archive_name.tar.bz2

2. grep命令使用方式

grep用来在文件中搜索包含字符串的行并打印出来(grep对大小写敏感):

$ grep -i "the" demo_file

grep用来在文件中搜索包含字符串的行以及后面的3行并打印出来:

$ grep -A 3 -i "example" demo_text

递归搜索:

$ grep -r "ramesh" *

grep最常用的还是和其他命令通过“管道”来组合使用,例如列出所有以root权限正在运行的进程:

$ ps -aux| grep -i "root"

不过一般都简化为:

$ ps -aux| grep root

3. cp命令

cp命令用来复制、拷贝文件:

$cp /root/file1 /tmp/

如果需要拷贝整个目录进入另一目录的话,则需要加上-rf参数:

$cp -rf /root/dir1 /tmp/

如果/tmp目录中已经有dir1这个目录,你想重新把dir1覆盖过去的话,即使加了-rf参数,Linux仍然会让你不停地输入y来验证。原因是在Linux中,cp命令的alias为:

$alias
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

cp命令其实是“cp -i”,-i 即交互的缩写方式,也就是在使用 cp 命令作文件覆盖操作之前,系统会要求确认提示.这个本来是系统的一个保险措施.如果有很多文件要复制,觉得一个一个输入y 确认麻烦的话,可以使用如下方法解决:

$unalias cp

不过这里还是建议大家在复制完成后,还是恢复 cp 的别名方式,因为可以多一层保险,恢复的方法:

$alias cp='cp -i'

4. find命令

find命令能在目录下查找文件(如果不输入查找目录的话,则默认在目前目录查找),使用格式为:

find <strong>查找的目录</strong> -name <strong>需要匹配的文件名或者表达式</strong>

下面的命令能在/root目录下查找所有以后缀为txt的文件

find /root -name "*.txt"

其他比较常用的参数:
查找根目录下所有大小大于10Mb的文件:

find / -size +10M

查找根目录下所有者为bob的文件:

find / -user bob

还有很多好用的参数,可以通过man find命令来找找看。

5. sort 命令

sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。
下面的命令根据a.txt中每一行的情况来排序并按照次序输出:

sort a.txt

逆向排序(-r参数为表示逆向排序):

sort -r a.txt

6. clear命令

clear命令能用来清屏,如果屏幕中有太多的字符就可以用这个命令来清屏。

7. ls命令

ls命令能列出目录下的文件。

ls -参数 需要列出的目录

下面的命令用来显示/root目录下所有文件:

ls -la /root

8. ps命令

ps命令提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用top工具。
ps 提供了很多的选项参数,常用的有以下几个;

l 长格式输出;
u 按用户名和启动时间的顺序来显示进程;
j 用任务格式来显示进程;
f 用树形格式来显示进程;
a 显示所有用户的所有进程(包括其它用户);
x 显示无控制终端的进程;
r 显示运行中的进程;
ww 避免详细参数被截断;

我们常用的选项是组合是aux 或lax,还有参数f的应用;
ps aux 或lax输出的解释;

USER 进程的属主;
PID 进程的ID;
PPID 父进程;
%CPU 进程占用的CPU百分比;
%MEM 占用内存的百分比;
NI 进程的NICE值,数值大,表示较少占用CPU时间;
VSZ 进程虚拟大小;
RSS 驻留中页的数量;
WCHAN
TTY 终端ID
STAT 进程状态

D Uninterruptible sleep (usually IO)
R 正在运行可中在队列中可过行的;
S 处于休眠状态;
T 停止或被追踪;
W 进入内存交换(从内核2.6开始无效);
X 死掉的进程(从来没见过);
Z 僵尸进程;

&lt; 优先级高的进程
N 优先级较低的进程
L 有些页被锁进内存;
s 进程的领导者(在它之下有子进程);
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ 位于后台的进程组;

WCHAN 正在等待的进程资源;
START 启动进程的时间;
TIME 进程消耗CPU的时间;
COMMAND 命令的名称和参数;

实例一:我们最常用的的用来查看所有的进程:

ps -aux | more

实例二:和grep 结合,提取指定程序的进程;

[root@localhost ~]# ps aux |grep httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 /usr/sbin/httpd
root 4480 0.0 0.0 5160 708 pts/3 R+ 12:20 0:00 grep httpd

实例三:父进和子进程的关系友好判断的例子

[root@localhost ~]# ps auxf |grep httpd
root 4484 0.0 0.0 5160 704 pts/3 S+ 12:21 0:00 \_ grep httpd
root 4187 0.0 1.3 24236 10272 ? Ss 11:55 0:00 /usr/sbin/httpd
apache 4189 0.0 0.6 24368 4940 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4190 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4191 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4192 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4193 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4194 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4195 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd
apache 4196 0.0 0.6 24368 4932 ? S 11:55 0:00 \_ /usr/sbin/httpd

使用了f参数后,进程的父子关系一目了然。

9. kill命令

kill命令用来终止进程,使用方法为:

kill [<strong>信号代码</strong>] 进程ID

其中信号代码如果忽略的话,默认为-9,如果有父子进程的话,单独kill掉子进程的uid不会影响父进程;如果kill父进程的话,所有子进程也会停止。

10. top命令

top命令是Linux/Unix上比较常用的动态进程以及服务器状态查看工具,使用方法如下:

<strong>top 参数</strong>

参数:

-b 以批量模式运行,但不能接受命令行输入;
-c 显示命令行,而不仅仅是命令名;
-d N 显示两次刷新时间的间隔,比如 -d 5,表示两次刷新间隔为5秒;
-i 禁止显示空闲进程或僵尸进程;
-n NUM 显示更新次数,然后退出。比如 -n 5,表示top更新5次数据就退出;
-p PID 仅监视指定进程的ID;PID是一个数值;
-q 不经任何延时就刷新;
-s 安全模式运行,禁用一些效互指令;
-S 累积模式,输出每个进程的总的CPU时间,包括已死的子进程;

top命令可用的交互式按键:

space 立即更新;
c 切换到命令名显示,或显示整个命令(包括参数);
f,F 增加显示字段,或删除显示字段;
h,? 显示有关安全模式及累积模式的帮助信息;
k 提示输入要杀死的进程ID,目的是用来杀死该进程(默人信号为15)
i 禁止空闲进程和僵尸进程;
l 切换到显法负载平均值和正常运行的时间等信息;
m 切换到内存信息,并以内存占用大小排序;
n 提示显示的进程数,比如输入3,就在整屏上显示3个进程;
o,O 改变显示字段的顺序;
r 把renice 应用到一个进程,提示输入PID和renice的值;
s 改变两次刷新时间间隔,以秒为单位;
t 切换到显示进程和CPU状态的信息;
A 按进程生命大小进行排序,最新进程显示在最前;
M 按内存占用大小排序,由大到小;
N 以进程ID大小排序,由大到小;
P 按CPU占用情况排序,由大到小
S 切换到累积时间模式;
T 按时间/累积时间对任务排序;
W 把当前的配置写到~/.toprc中;
shift+) 切换目前进程行显示次序

在运行top命令后,输入“f”能看到标题的英文单词代表什么意思。
关于如何查看进程在top命令中占用内存的情况:
VIRT:virtual memory usage。Virtual这个词很神,一般解释是:virtual adj.虚的, 实质的, [物]有效的, 事实上的。到底是虚的还是实的?让Google给Define之后,将就明白一点,就是这东西还是非物质的,但是有效果的,不发生在真实世界的,发生在软件世界的等等。这个内存使用就是一个应用占有的地址空间,只是要应用程序要求的,就全算在这里,而不管它真的用了没有。写程序怕出错,又不在乎占用的时候,多开点内存也是很正常的。
RES:resident memory usage。常驻内存。这个值就是该应用程序真的使用的内存,但还有两个小问题,一是有些东西可能放在交换盘上了(SWAP),二是有些内存可能是共享的。
SHR:shared memory。共享内存。就是说这一块内存空间有可能也被其他应用程序使用着;而Virt - Shr似乎就是这个程序所要求的并且没有共享的内存空间。
DATA:数据占用的内存。如果top没有显示,按f键可以显示出来。这一块是真正的该程序要求的数据空间,是真正在运行中要使用的。
(参考了http://www.linuxsir.org/main/node/210)

11. hdparm命令

功能说明:显示与设定硬盘的参数。
下面命令显示/dev/sda磁盘的信息:

hdparm /dev/sda

测试磁盘的性能:

hdparm -t /dev/sda

12. btctl命令

btctl用来查看或者维护Linux内核的关于网络桥接的问题(常用于Xen服务器)。
如果在系统中没有brctl命令的话,在debian下可以运行如下命令安装:

#apt-get install bridge-utils

13. tree命令

tree命令能够快速的为当前目录生成树形文件树,能够让你快速查看当前目录下所有文件。

14. chmod命令

chmod命令能用来改变文件或者文件夹的属性(例如文件是否可别读写,是否可被执行等)

#chmod a+x test.sh "给test.sh所有用户添加可执行权限

其中“a+x”表示对“all”添加“excute”属性,更多的简称可以man chmod来获取。

15. chown命令

chown可以用来改变文件的属主和属组,例如用于把web根目录中的所有文件属性改为web服务器运行的用户名(目的是为了可以让web服务读取或者改动文件内容):

#chown www:www -R /var/www

-R表示递归赋值,既把/var/www目录中和子目录的所有文件都更改。www:www表示要更改的用户和用户组。

16. mkdir命令

mkdir命令能够创建一个新的目录名称,如果要递归创建目录,则需要添加-p参数,否则只能单独创建一层文件夹:

#mkdir -p ./newdir1/newdir2/newdir

17. whereis命令

whereis命令和find命令有些相似,和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

18. locate 命令

类似于上面的whereis命令。注意找不到文件的时候要更新文件数据库。

19. which命令

which命令查看可执行文件的位置。

# which 可执行文件名称

例如:

# which passwd
/usr/bin/passwd

which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件

20. tail命令

tail命令用来显示文件中最后的几行内容(默认为最后10行):

# tail /var/log/dmesg
[ 4.689456] ACPI: AC Adapter [AC] (on-line)
[ 4.781052] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input5
[ 4.841942] parport_pc 00:04: reported by Plug and Play ACPI
[ 5.086861] Error: Driver 'pcspkr' is already registered, aborting...
[ 5.640079] Adding 392184k swap on /dev/sda5. Priority:-1 extents:1 across:392184k
[ 5.855102] EXT3 FS on sda1, internal journal
[ 6.020154] loop: module loaded
[ 7.444049] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 7.446228] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 7.446757] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

当然,也能指定要显示最后几行内容:

#tail -n N filename.txt “显示最后N行内容

查看文件的实时状态tail -f. 此命令通常用来查看持续增长的log文件, 可用Ctrl-C中断:

#tail -f logfile

21. df命令

df命令用来磁盘目前的使用情况:

# df -h /
Filesystem Size Used Avail Use% Mounted on
- 10G 1.8G 8.3G 18% /

-h参数表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。df -ih /表示目前根目录下inode的使用情况。

22. du命令

df一般用来查询磁盘级别的整体使用量,du则可以用来查询目录使用磁盘容量的大小。
-h 于df一样,表示用「Human-readable」的输出
-m 使用Mb为单位报告目录使用情况
-s 省略子目录的报告,直接显示目录的磁盘使用情况
例如

#du -sh /usr/share/nginx/
626M /usr/share/nginx/

我想查找/usr/share/nginx/目录下最占用磁盘空间的目录是那个:

#du -m| sort -nr |more

默认du命令会把所有子目录下的大小都显示,我们只想看一级子目录的话加一个参数就行了:

#du -sh --max-depth=1  /home

因为我想要统一安装Mb为单位显示所有目录的占用磁盘空间情况,所以省略了-h参数,否则du仍然会安装kb或者mb等它认为合适的方式来报告目录。

有时候会遇到 du 的值与df 的值相差太远,这是因为当一个应用程序正在写入一个大的文件时,linux 操作系统允许rm 和mv ,应用程序会占有句柄,并根据句柄所指磁盘位置直接写磁盘,而不会检查该文件是否被删除。

23. sort命令

sort命令将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。例如

#cat seq.txt
banana
apple
pear
orange
#sort seq.txt
apple
banana
orange
pear

单独的排序文件用处不大,sort一般都是在管道“|”中和其他命令组合对结果进行排序,例如上个du命令中的用法。
-u 删除重复的行
-r 默认是升序,r参数可以反转为降序排序
-o 将排序结果输出为文本

更复杂的sort排序,请参考sort排序

24. ifconfig命令

ifconfig 的第一种格式(或使用不带任何参数的ifconfig 命令)可以用来查看当前系统的网络配置情况。

#ifconfig
eth0 Link encap:Ethernet Hwaddr 52:54:AB:DD:6F:61
inet addr:210.34.6.89 Bcast:210.34.6.127 Mask:255.255.255.128
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:46299 errors:0 dropped:0 overruns:0 frame:189
TX packets:3057 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:5 Base address:0xece0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:44 errors:0 dropped:0 overruns:0 frame:0
TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0

我们可以看到
第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)
第二行:网卡的IP地址、子网、掩码
第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节
第四、五行:接收、发送数据包情况统计
第七行:接收、发送数据字节数统计信息。

也可以使用ifconfig来控制网卡的开启或者关闭(远程登录服务器的时候可是严禁使用):

#ifconfig eth0 up(或者down)

ifconfig也能设置网卡的IP地址信息:

ifconfig eth0 210.34.6.89 netmask 255.255.255.128

用Linux ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了

25. cat命令

cat命令主要有三大功能:
1.一次显示整个文件。

$ cat filename

2.从键盘创建一个文件。

$ cat &gt; filename

只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件。

$cat file1 file2 &gt; file

为什么要用cat来显示文件哪?起初我也是喜欢用vim来查看配置文件,但是vim是编辑器,很容易不小心误操作修改文件;并且用cat显示文件后还能输出为管道,利用sort或者grep等命令来进一步筛选数据。
还有一个比较常用的敲门是利用cat来清空文件:

# cat /dev/null &gt; /var/log/messages

/dev/null是一个虚拟的没有任何信息的文件,用cat命令覆盖后,原来的log文件就被清空了。为什么不删除文件?删除,然后创建文件需要两个步骤,并且可能涉及文件所有者权限的问题。

26. split命令

相反与cat,split命令可以用来分割文件,-b 参数用来决定切分的块大小是多少:

#split -b 20m test.tar.gz

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>