一切福田,不離方寸,從心而覓,感無不通。

Linux常用命令

索引

  • 文件类
    ls echo cat grep find wc cut head tail less chmod chown ln cp scp which mkdir pwd sed awk xargs
  • 磁盘类
    du df
  • 网络
    ifconfig netstat tcpdump ping
  • 系统类
    ps kill time date who su sudo free top ulimit export set unset nohup
  • 压缩、解压缩类
    zip unzip gzip tar
  • 简单应用
    • 查看系统版本
    • 查看cpu个数和核数
    • 清除缓存
    • 显示所有监听端口
    • 找出监听特定端口的程序
    • 统计和特定ip端口建立的tcp连接数,或已经处于TIME_WAIT状态的连接数
    • 显示特定程序cpu和内存占用
    • 显示cpu或内存占用前几名程序,自定义输出序列
    • 删除特定目录及子目录下30天之前的日志文件

一、文件类

1. ls

列出文件或目录信息

常用选项

  • -a 显示所有文件
  • -A 显示除”.”和”..”外所有文件
  • -l 显示详细信息
  • -t 按时间排序
  • -R 递归搜索
  • -r 反向排序

例子

按修改时间顺序显示test及其子目录目录下所有文件详细信息

 

2. echo

显示变量或文本

例子

显示环境变量值

 

创建多行文本文件

有些系统没有安装诸如vi等编辑器,可以用echo和3个单引号和重定向创建简单文本文件

 

3. cat

显示文件内容

常用选项

  • -n 显示行号

例子

清空文件test.txt内容

 

显示test.txt内容和行号

 

4. grep

常用选项

  • -a 搜索所有文件(包含二进制文件):
  • -r 递归搜索
  • -i 忽略大小写
  • -w 全字匹配
  • -v 显示不包含特定文本的行
  • -l 显示包含特定文本的文件名
  • -c 计算搜索到的行数
  • -E 正则搜索
  • -n 搜索结果显示所在行数

and

 

or

 

not

 

例子

搜索test及其子目录下所有包含字符串“hello” 或 “world”的文件,只显示文件名

 

搜索test及其子目录中的所有包含“hello”的文件,显示每个文件符合的行数

 

5. find

查找文件或目录

常用选项

  • -name 查找指定名称
  • -type c : 文件类型是 c 的文件。
    • d: 目录
    • c: 字型装置文件
    • b: 区块装置文件
    • p: 具名贮列
    • f: 一般文件
    • l: 符号连结
  • -anewer file : 比文件 file 更晚被读取过的文件
  • -atime n : 在过去n天内被访问过的文件
  • -amin n:在过去n分支内被访问过的文件
  • -ctime n : 在过去n天内状态改变过的文件,如写入内容,读写执行权限改变等
  • -cmin n : 在过去 n 分钟内状态被修改过的文件
  • -cnewer file :比文件 file 更新的文件
  • -mtime n:在过去n天内被修改过内容的文件
  • -mmin n:在过去n分钟内被修改过内容的文件
  • -size n : 文件大小 是 n 单位:
    • b:block(512字节块)
    • c:字节数
    • w: 字数(双字节)
    • k:Kilobytes
    • M:Megabytes
    • G:Gigabytes

例子

查找当前目录及子目录下的名字以log结尾的所有子目录

 

查找test及子目录下在5分钟内修改过的所有大于1k的子文件

 

查找test及子目录下大于1M的jpg或png文件

 

查找test及子目录下大于1M并且后缀不是.bin的文件

 

 

6. wc

统计数量

例子

显示test目录下所有txt文件行数

 

显示test目录下所有txt文件个数

 

7. cut

分割并输出字段

例子

获取文本文件中以空格分割的每行第2个字段

 

获取文本文件中以:分隔的每行第4到第5个字段

 

8. head

显示文件前几行或前几个字节内容

例子

显示文件前20行内容

 

9. tail

显示文件最后几行内容

例子

显示文件最后20行内容

 

显示文件最后20行内容,并持续跟踪文件变化(默认每隔1秒)

 

显示文件最后20行内容,并持续每隔10秒跟踪文件变化

 

10. less

查看文件内容(同more相比,more只能往后查看内容,不能往前,less功能更强大,建议用less替换more)

常用选项

  • -N 显示每行的行号
  • /字符串:向下搜索”字符串”的功能
  • ?字符串:向上搜索”字符串”的功能
  • n:搜索下一个
  • N:反向搜索下一个
  • b 或 [pageup] 或 Ctrl+b 向上翻一页
  • 空格 或 [pagedown] 或 Ctrl+f 先下翻一页
  • &pattern 只显示包含pattern的行
  • q 退出

例子

分页显示进程信息

 

11. chmod

更改文件权限

例子

增加所有用户写权限

 

 

 

将文件 file1.txt 与 file2.txt 设为拥有者和所属组可写入,但其他以外的人则不可写入

 

收回所有用户和组的执行权限

 

把test及其子目录都设成用户或组可以读写,其它人不可写

 

精确重新设定文件权限

 

12. chown

设置文件的所有者和组

例子

设置文件test.sh的所有者为ucmed

 

设置文件test.sh的所有者为ucmed,组为ucmed

 

设置文件test.sh的组为ucmed

 

设置文件夹test及其子文件(夹)的所有者为ucmed,组为ucmed

 

13. ln

链接

软链接:

  1. 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  2. 软链接可以 跨文件系统 ,硬链接不可以
  3. 软链接可以对一个不存在的文件名进行链接
  4. 软链接可以对目录进行链接

硬链接:

  1. 硬链接,以文件副本的形式存在。但不占用实际空间,删除源文件,硬链接文件还能正常访问。
  2. 不允许给目录创建硬链接
  3. 硬链接只有在同一个文件系统中才能创建

例子

文件建立软连接

 

目录建立软链接

 

文件建立硬链接

 

14. cp

拷贝文件、目录

常用选项

  • -r 递归拷贝文件和目录
  • -f 覆盖不提示
  • -p 保留源文件和目录的访问时间和权限

15. scp

远程拷贝

例子

从远程拷贝到本地

 

从本地拷贝到远程,并指定端口为5122

 

递归拷贝

 

通过私钥或证书拷贝(不用输入密码,需要在服务器预先设好公钥)

 

16. which

在环境变量$PATH设置的目录里查找符合条件的文件

17. mkdir

创建目录

例子

创建多级子目录

 

18. pwd

显示当前工作目录

19. sed

文本文件处理

注:

  • 默认不会对源文件有更改,如需保存结果可以:
    • 输出重定向到文件
    • 使用 -i 选项
  • 超大文件想搜索或替换、增加文本,如果用vi可能会卡死,这时候可以考虑用sed

例子

显示5,6,7三行内容

 

在第1行之前增加一行:pre,并保存为新文件

 

删除第5行到文件尾所有行

 

替换2到5行为新内容

 

查找并显示含hello的行

 

搜索每一行hello,替换为hi,并更改源文件

 

删除第4到第5行后,搜索所有行中的hello,并替换为hi,更改源文件

 

20. awk

文本分析处理
语法:

 

 

例子

获取test目录下所有txt文件的文件名和文件大小

 

输出test.txt的奇数行内容

 

输出以分号分隔的第一列包含test的行中的第1列和第3列

 

在每一行之前增加行号

 

显示每行及字段数,中间用空格隔开

 

20. xargs

如echo ,rm, mkdir, ls等这些命令只接受命令行参数,不能把标准输入作为参数, xargs将标准输入(特别是管道输出)转换为命令行参数

例子

删除test目录及子目录下所有空文件

 

搜索test及其子目录下所有txt文件,显示文件内容包含hello的所有文件名

 

注:另外的方案:

 

在大量大文件场景grep效率会低一些,因为grep会搜索所有文件的内容,而find+xargs只找符合条件的文件并逐个搜索内容,大量大文件场景建议用find + xargs方案


二、磁盘类

1. du

显示目录和文件所占磁盘大小

注:此大小不是文件大小,而是所占磁盘block的大小,一般一个block为4k,所以即使文件只有1个字节,也要分配一个block来存储,此时所占磁盘大小也是4k

例子

显示当前目录所有文件和目录的磁盘大小

 

显示目录test总计磁盘大小

 

2. df

显示磁盘使用情况

例子

以人类友好的方式显示磁盘使用情况

 


三、网络类

1. ifconfig

显示或设置网络设备

例子

显示网卡列表

 

2. netstat

显示网络状态

例子

显示网卡列表

 

显示所有端口为8080的网络信息(监听或链接)

 

显示所有192.168.1.2的链接信息

 

显示所有tcp监听和链接信息,同时显示正在使用的程序

 

3. tcpdump

抓包(有些系统需要额外安装)

例子

抓网卡eth0的ip为192.168.1.2的包

 

抓网卡l0端口为8080的包

 

抓特定ip和特定端口的包

 

抓发送到特定ip的包

 

抓从特定ip发出的包

 

抓包并保存到文件

 

抓特定数量的包

 

复杂条件

 


四、系统类

1. ps

显示进程状态

例子

标准格式显示所有进程信息

 

显示列:

  • UID //用户名
  • PID //进程的ID
  • PPID //父进程ID
  • C //进程占用CPU的百分比
  • STIME //进程启动到现在的时间
  • TTY //进程运行终端,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。
  • CMD //命令的名称和参数

BSD格式显示所有进程详细信息(带cpu和内存使用信息)

 

同ps -ef 不同的有列有

  • USER //用户名
  • %CPU //占用CPU百分比
  • %MEM //占用内存的百分比
  • VSZ //该进程使用的虚拟內存量(KB)
  • RSS //该进程占用的固定內存量(KB)
  • STAT //进程的状态
  • START //该进程被触发启动时间
  • TIME //该进程实际使用CPU运行的时间

2. kill

杀死进程或通知进程

信号编号 信号名 含义
0 EXIT 程序退出时收到该信息
1 HUP 挂起或重新初始化
2 INT 结束进程,常用的 “Ctrl+C” 组合键发出就是此信号
3 QUIT 退出
9 KILL 杀死进程,即强制结束进程
11 SEGV 段错误信号
15 TERM 默认信号,正常结束进程

注:

  • 不是所有进程都实现了所有信号处理,大多会实现2,15等信号处理
  • 结束进程:优先推荐默认信号(即不用额外加参数),让程序接收信号后进行资源释放后优雅退出,不得已再 -9 强制退出

例子

正常退出

 


kill -TERM 12345

强制退出

 


kill -KILL 12345

3. date

显示系统日期时间

4. su

切换登录用户

例子

切换为root用户

 

5. sudo

以root身份执行命令

例子

增加所有者为root的文件test.sh的可执行权限

 

6. free

显示系统内存使用情况

例子

以合适单位显示内存使用情况

 

以MB为单位显示内存使用情况

 

7. top

实时显示进程动态
列含义:

  • PID — 进程id
  • USER — 进程所有者
  • PR — 进程优先级
  • NI — nice值。负值表示高优先级,正值表示低优先级
  • VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR — 共享内存大小,单位kb
  • S —进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
  • %CPU — 上次更新到现在的CPU时间占用百分比
  • %MEM — 进程使用的物理内存百分比
  • TIME+ — 进程使用的CPU时间总计,单位1/100秒
  • COMMAND — 进程名称(命令名/命令行)

常用命令:

  • m: 切换内存显示信息
  • M: 根据驻留内存大小进行排序
  • P: 根据CPU使用百分比大小进行排序
  • t: 切换显示进程和CPU状态信息
  • c: 切换显示命令名称和完整命令行
  • T: 根据时间/累计时间进行排序
  • 1: 显示逻辑cpu的使用情况

例子

单显示某个进程的信息

 

7. ulimit

显示或设置系统资源

例子

显示系统资源

 

临时设置系统打开文件数限制(退出登录后消失)

 

 

8. export

设置或显示环境变量

例子

显示当前环境变量

 

临时设置环境变量WORKSPACE值为/nsfw(退出登录后消失)

 

9. unset

删除环境变量或函数

例子

删除环境变量

 

10. nohup

在系统后台不挂断地运行命令,退出终端不会影响程序的运行,用于长时间或永不退出任务。

例子

运行长时间任务

 


五、压缩、解压缩类

1. zip

zip压缩

例子

压缩目录

 

压缩文件

 

2. unzip

zip解压缩

例子

查看压缩包内文件

 

解压到当前目录

 

解压到特定目录

 

3. gzip

gzip压缩、解压缩(只处理文件,不处理目录)

例子

压缩

 

解压缩

 

4. tar

tar压缩、解压缩

例子

压缩

 

解压缩

 

 

gzip压缩

 

gzip解压缩

 

bzip2压缩

 

bzip2解压缩

 

xz压缩

 

xz解压缩

 


六、简单应用

1. 查看系统版本

 

2. 查看cpu个数和核数

总核数 = 物理CPU个数 X 每颗物理CPU的核数

查看物理CPU个数

 

查看每个物理CPU中core的个数(即核数)

 

查看逻辑CPU的个数

 

3. 清除buff/cache占用的过高内存

如果

 

 

显示的内存被buff/cache占用过多。可以:先同步缓存到磁盘,防止数据丢失:

 

释放pagecache:

 

释放dentries and inodes:

 

二者都释放:

 

4. 显示所有监听端口

 

5. 找出是哪个程序在监听特定端口

 

6. 统计和特定ip端口建立的tcp连接数,或已经处于TIME_WAIT状态的连接数

 

7. 显示特定程序cpu和内存占用

 

 

8. 显示cpu或内存占用前几名程序,自定义输出序列

 

或通过命令

 

再按P,M键来切换排序:

9. 删除特定目录及子目录下30天之前的日志文件

 

注:
本文所有例子在centos7上测试通过,其它系统可能略有差异。