Linux commands
Linux 命令使用
前置知识
文件相关
Linux系统中是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。
一般来说,每个文件都有2个link计数器:i_count 和 i_nlink,也就是说:Linux系统中只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。
- i_count表示当前文件使用者(或被调用)的数量
- i_nlink表示介质连接的数量(硬链接的数量);
- 可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。
当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加。
在Linux或者Unix系统中,通过rm或者文件管理器删除文件,只是将它会从文件系统的目录结构上解除链接(unlink),实际上就是减少磁盘引用计数i_nlink,但是并不会减少i_count数。
如果一个文件正在被某个进程调用,用户使用rm命令把文件”删除”了,这时候通过ls等文件管理命令就无法找到这个文件了,但是并不意味着这个文件真正的从磁盘上删除了。
因为还有一个进程在正常的执行,在向文件中读取或写入,也就是说文件其实并没有被真正的”删除”,所以磁盘空间也就会一直被占用。
命令
熟知的就不介绍了
ls、cat、cd、tail、head等。
文本查询
tail
顾名思义,显示文件后几行(默认5行)。
tail -f [filename] 阻塞式监听新加进来的行。
grep
grep比较常见,过滤字符串。
可以通过-C [n]显示上下各5行的内容。
可以通过-n [n]显示行号。
less、more
more只能向下移动,推荐less。
less上下移动、查询跟vim操作相似。
cut
给输入(或文件)的每行移除一部分。
搭配grep可以实现,只查看每行的前多少个字符,比如grep后查看前50个字符。
cat log | grep GetRecommend | cut -c1-50。
lsof
list open file。 列出被程序打开的文件,可能已经被unlink(此时会有deleted标识),但被程序引用,导致无法实际执行删除。
一般用于如何查看端口被哪个进程占用。
进程
ps
ps -ef 或者 ps -aux
在ps -ef命令输出的结果中,”TTY”列表示与进程关联的终端设备。
终端设备(Terminal Device)是指用于输入和输出的用户界面。在类Unix系统中,每个运行的进程都可以与一个终端设备关联。终端设备可以是物理终端(例如控制台)或虚拟终端(例如终端窗口、SSH会话等)。
在”TTY”列中,你会看到一个设备名称或终端名称,用于标识与进程相关联的终端。以下是一些常见的TTY值及其含义:
- “pts/0”:伪终端设备(pseudo terminal),通常表示一个终端窗口或SSH会话。
- “tty1”:”tty”是指物理终端设备,后面的数字表示设备编号。”tty1”表示第一个物理终端设备,通常是控制台。
- “?”:表示没有与进程相关联的终端设备,即进程是一个守护进程(daemon),不与终端交互。
终端设备的信息对于了解进程是如何与用户进行交互以及进程的运行环境非常有用。通过查看TTY列,你可以确定进程是否与用户交互,以及它是在哪个终端上运行的。
kill
kill命令用于终止一个进程,实现原理是,操作系统向应用程序发送一个终止信号,应用程序进行退出。
kill默认是kill -15,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的,通过注册对应的处理函数来实现。所以,这个处理函数也可以选择忽略这个信号,此时操作系统kill -15是无法终止这个程序的。
kill -9就相对强硬一点,系统会发出SIGKILL信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。
其中,JVM关闭就涉及这方面,JVM关闭方式分为3种:
正常关闭:当最后一个非守护线程结束或者调用了System.exit或者通过其他特定平台的方法关闭(接收到SIGINT(2)、SIGTERM(15)信号等)
强制关闭:通过调用Runtime.halt方法或者是在操作系统中强制kill(接收到SIGKILL(9)信号)
异常关闭:运行中遇到RuntimeException异常等。
资源查询命令
top
以下是一些常用的按键操作:
- 使用
k键:通过输入进程的 PID(进程ID)来终止选定的进程。 - 使用
r键:修改进程的优先级(nice value)。 - 使用
H键:将线程(thread)模式和进程模式之间进行切换。 - 使用
f键:进入字段管理模式,可以选择要显示的列。 - 使用
u键:显示特定用户的进程。 - 使用
s键:改变刷新间隔时间。 - 使用
q键:退出top命令。
排序模式
P键:按照CPU使用率进行排序,高CPU使用率的进程会显示在前面。M键:按照内存使用量进行排序,高内存使用量的进程会显示在前面。N键:按照进程ID(PID)进行排序,按照进程ID的大小顺序进行排列。T键:按照运行时间进行排序,按照进程运行的时间长短进行排列。W键:将当前的排序方式写入到~/.toprc文件中,下次启动top命令时将使用该排序方式。
在top命令中按下相应的键后,进程列表将根据指定的排序方式进行重新排序,并且显示最新的排序结果。
df、du
df:查询磁盘使用情况。
- -B[M|G|B|T] 按照不同规格显示。也可以使用 -H 按照human的习惯,自适应规格。
du:查询文件空间情况。
- -B[M|G|B|T] 按照不同规格显示。也可以使用 -H 按照human的习惯,自适应规格。
free
显示使用的和剩余的内存、以及交换区的情况。
vmstat
vmstat 是一个常用的性能监控工具,用于显示系统的虚拟内存统计信息。它提供了有关系统内存、进程、IO等方面的信息。下面是 vmstat 命令输出的一些常见统计数据:
- procs:进程统计信息
- r: 系统中正在运行的进程数量。
- b: 等待资源的进程数量。
- memory:内存使用统计信息
- swpd: 使用的虚拟内存量(以KB为单位)。
- free: 空闲内存量(以KB为单位)。
- buff: 用作缓冲区的内存量(以KB为单位)。
- cache: 用作缓存的内存量(以KB为单位)。
- swap:交换空间使用统计信息
- si: 从磁盘读入交换区的数据量(以KB为单位)。
- so: 从交换区写出到磁盘的数据量(以KB为单位)。
- io:IO统计信息
- bi: 从块设备读取的块数量(每秒)。
- bo: 写入块设备的块数量(每秒)。
- system:系统统计信息
- in: 每秒中断的数量。
- cs: 每秒上下文切换的数量。
- cpu:CPU使用统计信息
- us: 用户空间CPU时间百分比。
- sy: 内核空间CPU时间百分比。
- id: 空闲CPU时间百分比。
- wa: 等待IO的CPU时间百分比。
- st: 被虚拟化层偷取的CPU时间百分比。
其它
uptime:显示系统的运行时间和负载平均值。dmesg:显示内核日志信息,包括启动过程中的信息和硬件设备相关的消息。sort:排序后输出。
todo
- ``cat /proc/meminfo`
- sed、awd
常见问题
- 怎么看进程占用的CPU?
- 怎么查看一个进程的进程号?
- 怎么看端口被哪个进程占用了?
- top命令有哪些信息?
- top命令的CPU占用会超过100%吗?
- Linux怎么修改文件权限