Linux Shell 常用命令

Posted by Lyon Ling on April 6, 2019

虽然一直都有用Linux,但是对其中一些命令的细节也没有很清楚。听说大厂笔试面试可能会有用到,这里就简单总结一下。

1. cd, ls命令

这是一个非常基本,也是大家经常需要使用的命令。这里不再赘述,仅说明ls的几个option:

  • -d :仅列出目录本身,而不是列出目录的文件数据
  • -h :将文件容量以较易读的方式(GB,kB等)列出来
  • -R :连同子目录的内容一起列出(递归列出),等于该目录下的所有文件都会显示出来

2. grep命令

该命令常用于分析一行的信息,若当中有我们所需要的信息,就将该行显示出来,该命令通常与管道命令一起使用,用于对一些命令的输出进行筛选加工等等,它的简单语法为

1
grep [-acinv] [--color=auto] '查找字符串' <filename>

它的常用参数如下:

  • -a :将binary文件以text文件的方式查找数据
  • -c :计算找到‘查找字符串’的次数
  • -i :忽略大小写的区别,即把大小写视为相同
  • -v :反向选择,即显示出没有‘查找字符串’内容的那一行

例如:

1
2
3
4
5
# 取出文件/etc/man.config中包含MANPATH的行,并把找到的关键字加上颜色
grep --color=auto 'MANPATH' /etc/man.config

# 把ls -l的输出中包含字母file(不区分大小写)的内容输出
ls -l | grep -i file

3. find命令

find是一个基于查找的功能非常强大的命令,相对而言,它的使用也相对较为复杂,参数也比较多,所以在这里将给把它们分类列出,它的基本语法如下:

1
find [PATH] [option] [action]	
3.1 与时间有关的参数:
  • -mtime n : n为数字,意思为在n天之前的“一天内”被更改过的文件
  • -mtime +n : 列出在n天之前(不含n天本身)被更改过的文件名
  • -mtime -n : 列出在n天之内(含n天本身)被更改过的文件名
  • -newer file : 列出比file还要新的文件名

例如:

1
find /root -mtime 0 	# 在当前目录下查找今天之内有改动的文件
3.2 与用户或用户组名有关的参数:
  • -user name : 列出文件所有者为name的文件
  • -group name : 列出文件所属用户组为name的文件
  • -uid n : 列出文件所有者为用户ID为n的文件
  • -gid n : 列出文件所属用户组为用户组ID为n的文件

例如:

1
find /home/ljianhui -user ljianhui # 在目录/home/ljianhui中找出所有者为ljianhui的文件
3.3 与文件权限及名称有关的参数:
  • -name filename :找出文件名为filename的文件
  • -size [+-]SIZE :找出比SIZE还要大(+)或小(-)的文件
  • -tpye TYPE :查找文件的类型为TYPE的文件,TYPE的值主要有:一般文件(f), 设备文件(b, c), 目录(d), 连接文件(l), socket(s), FIFO管道文件(p)
  • -perm mode :查找文件权限刚好等于mode的文件,mode用数字表示,如0755
  • -perm -mode :查找文件权限必须要全部包括mode权限的文件,mode用数字表示
  • -perm +mode :查找文件权限包含任一mode的权限的文件,mode用数字表示

例如:

1
2
3
find / -name passwd 	# 查找文件名为passwd的文件
find . -perm 0755 		# 查找当前目录中文件权限的0755的文件
find . -size +12k 		# 查找当前目录中大于12KB的文件,注意c表示byte

4. cp, mv, rm命令

因为这三条命令的option很相似,这里以cp为例

该命令用于复制文件,copy之意,它还可以把多个文件一次性地复制到一个目录下,它的常用参数如下:

  • -a :将文件的特性一起复制
  • -p :连同文件的属性一起复制,而非使用默认方式,与-a相似,常用于备份
  • -i :若目标文件已经存在时,在覆盖时会先询问操作的进行
  • -r :递归持续复制,用于目录的复制行为
  • -u :目标文件与源文件有差异时才会复制

例如 :

1
2
cp -a file1 file2		 #连同文件的所有特性把文件file1复制成文件file2
cp file1 file2 file3 dir #把文件file1、file2、file3复制到目录dir中

5. ps命令

该命令用于将某个时间点的进程运行情况选取下来并输出,process之意,它的常用参数如下:

  • -A :所有的进程均显示出来
  • -a :不与terminal有关的所有进程
  • -u :有效用户的相关进程
  • -x :一般与a参数一起使用,可列出较完整的信息
  • -l :较长,较详细地将PID的信息列出

其实我们只要记住ps一般使用的命令参数搭配即可,它们并不多,如下:

1
2
3
4
ps aux 		# 查看系统所有的进程数据
ps ax 		# 查看不与terminal有关的所有进程
ps -lA 		# 查看系统所有的进程数据
ps axjf 	# 查看连同一部分进程树状态

6. kill命令

该命令用于向某个工作(%jobnumber)或者是某个PID(数字)传送一个信号,它通常与ps和jobs命令一起使用,它的基本语法如下:

1
kill -signal PID

signal的常用参数如下: 注:最前面的数字为信号的代号,使用时可以用代号代替相应的信号。

  • 1:SIGHUP,启动被终止的进程
  • 2:SIGINT,相当于输入ctrl+c,中断一个程序的进行
  • 9:SIGKILL,强制中断一个进程的进行
  • 15:SIGTERM,以正常的结束进程方式来终止进程
  • 17:SIGSTOP,相当于输入ctrl+z,暂停一个进程的进行

例如:

以正常的结束进程方式来终于第一个后台工作,可用jobs命令查看后台中的第一个工作进程

1
kill -SIGTERM %1 

重新改动进程ID为PID的进程,PID可用ps命令通过管道命令加上grep命令进行筛选获得

1
kill -SIGHUP PID

7. killall命令

该命令用于向一个命令启动的进程发送一个信号,它的一般语法如下:

1
killall [-iIe] [command name]

它的参数如下:

  • -i :交互式的意思,若需要删除时,会询问用户
  • -e :表示后面接的command name要一致,但command name不能超过15个字符
  • -I :命令名称忽略大小写

例如:

1
killall -SIGHUP syslogd 	# 重新启动syslogd

8. file命令

该命令用于判断接在file命令后的文件的基本数据,因为在Linux下文件的类型并不是以后缀为分的,所以这个命令对我们来说就很有用了,它的用法非常简单,基本语法如下:

1
file <filename>

例如:

1
file ./test	

9. tar命令

该命令用于对文件进行打包,默认情况并不会压缩,如果指定了相应的参数,它还会调用相应的压缩程序(如gzip和bzip等)进行压缩和解压。它的常用参数如下:

  • -c :新建打包文件
  • -t :查看打包文件的内容含有哪些文件名
  • -x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
  • -j :通过bzip2的支持进行压缩/解压缩
  • -z :通过gzip的支持进行压缩/解压缩
  • -v :在压缩/解压缩过程中,将正在处理的文件名显示出来
  • -f <filename>:filename为要处理的文件
  • -C dir :指定压缩/解压缩的目录dir

通常我们只需要记住下面三条命令即可:

  • 压缩:tar -jcv -f filename.tar.bz2 要被处理的文件或目录名称
  • 查询:tar -jtv -f filename.tar.bz2
  • 解压:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

注:文件名并不定要以后缀tar.bz2结尾,这里主要是为了说明使用的压缩程序为bzip2

10. cat命令

该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。例如:

1
cat text | less		# 查看text文件中的内容

注:这条命令也可以使用less text来代替

11. chgrp, chown, chmod命令

该命令用于改变文件所属用户组,所有者和权限,它的使用非常简单,就不再赘述。

12. cat命令

该命令用于查看文本文件的内容,后接要查看的文件名,通常可用管道与more和less一起使用,从而可以一页页地查看数据。例如:

1
2
cat text | less # 查看text文件中的内容
# 注:这条命令也可以使用less text来代替
12.1 more和less的区别
  1. less可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
  2. less不必读整个文件,加载速度会比more更快
  3. less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容

13. top命令

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

13.1 输出解释

top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。

1
2
3
4
5
6
7
8
9
10
11
12
top - 01:06:48 up  1:22,  1 user,  load average: 0.06, 0.60, 0.48
Tasks:  29 total,   1 running,  28 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3% us,  1.0% sy,  0.0% ni, 98.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    191272k total,   173656k used,    17616k free,    22052k buffers
Swap:   192772k total,        0k used,   192772k free,   123988k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
root      16   0  7976 2456 1980 S  0.7  1.3   0:11.03 sshd
root      16   0  2128  980  796 R  0.7  0.5   0:02.72 top
root      16   0  1992  632  544 S  0.0  0.3   0:00.90 init
root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0

统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:

1
2
3
4
01:06:48    当前时间
up 1:22    系统运行时间,格式为时:分
1 user    当前登录用户数
load average: 0.06, 0.60, 0.48    系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
total 进程总数
running 正在运行的进程数
sleeping 睡眠的进程数
stopped 停止的进程数
zombie 僵尸进程数
Cpu(s): 
0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0%hi:硬件CPU中断占用百分比
0.0%si:软中断占用百分比
0.0%st:虚拟机占用百分比

最后两行为内存信息。内容如下:

1
2
3
4
5
6
7
8
9
10
Mem:
191272k total    物理内存总量
173656k used    使用的物理内存总量
17616k free    空闲内存总量
22052k buffers    用作内核缓存的内存量
Swap: 
192772k total    交换区总量
0k used    使用的交换区总量
192772k free    空闲交换区总量
123988k cached    缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。

进程信息区统计信息区域的下方显示了各个进程的详细信息。下面为各列的含义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
序号  列名    含义
a    PID     进程id
b    PPID    父进程id
c    RUSER   Real user name
d    UID     进程所有者的用户id
e    USER    进程所有者的用户名
f    GROUP   进程所有者的组名
g    TTY     启动进程的终端名。不是从终端启动的进程则显示为 ?
h    PR      优先级
i    NI      nice值。负值表示高优先级,正值表示低优先级
j    P       最后使用的CPU,仅在多CPU环境下有意义
k    %CPU    上次更新到现在的CPU时间占用百分比
l    TIME    进程使用的CPU时间总计,单位秒
m    TIME+   进程使用的CPU时间总计,单位1/100秒
n    %MEM    进程使用的物理内存百分比
o    VIRT    进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p    SWAP    进程使用的虚拟内存中,被换出的大小,单位kb。
q    RES     进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r    CODE    可执行代码占用的物理内存大小,单位kb
s    DATA    可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t    SHR     共享内存大小,单位kb
u    nFLT    页面错误次数
v    nDRT    最后一次写入到现在,被修改过的页面数。
w    S       进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
x    COMMAND 命令名/命令行
y    WCHAN   若该进程在睡眠,则显示睡眠中的系统函数名
z    Flags   任务标志,参考 sched.h

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。

更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。 按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。 按大写的 FO 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

13.2 命令使用
1
top [-][dpqcCSs] [n]

参数说明:

  • d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
  • p 通过指定监控进程ID来仅仅监控某个进程的状态。
  • q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  • S 指定累计模式
  • s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
  • i 使top不显示任何闲置或者僵死进程。
  • c 显示整个命令行而不只是显示命令名。

其他实用命令: 下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

  • Ctrl+L 擦除并且重写屏幕。
  • h或者? 显示帮助画面,给出一些简短的命令总结说明。
  • k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
  • i 忽略闲置和僵死进程。这是一个开关式命令。
  • q 退出程序。
  • r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
  • S 切换到累计模式。
  • s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
  • f或者F 从当前显示中添加或者删除项目。
  • o或者O 改变显示项目的顺序。
  • l 切换显示平均负载和启动时间信息。
  • m 切换显示内存信息。
  • t 切换显示进程和CPU状态信息。
  • c 切换显示命令名称和完整命令行。
  • M 根据驻留内存大小进行排序。
  • P 根据CPU使用百分比大小进行排序。
  • T 根据时间/累计时间进行排序。
  • W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。