kill
命令
Linux的kill
命令是一个用于发送信号到程序的基本命令行工具。进程可以响应这些信号并采取相应的行动,例如终止、忽略信号或执行特定的处理程序。如果没有明确指定信号类型,kill命令默认会发送SIGTERM(信号15)来请求进程终止。如果进程未能响应,则可以使用SIGKILL(信号9)强制结束进程。
命令格式
kill [选项] 进程号
或者
kill [选项] 进程名称
常用选项
-l
:列出所有信号名称。-s
:指定发送的信号,信号可以以名称或数字表示。-L
:列出所有信号名称及其对应的数字。
常用信号
以下是一些常用的信号及其用途:
1
(HUP):挂起,通常用于重新加载配置文件。2
(INT):中断,相当于按下Ctrl+C。9
(KILL):强制杀死进程,该信号不能被捕获或忽略。15
(TERM):终止,这是默认的信号,允许进程进行清理。18
(CONT):继续执行被暂停的进程。
使用示例
终止进程号为1234的进程:
kill 1234
发送HUP信号到进程号为1234的进程:
kill -1 1234
或者
kill -s HUP 1234
netstat
命令
netstat
命令可以显示路由表、实际的网络连接以及各种网络接口的统计信息。
它主要用于网络故障诊断、网络连接监控和性能分析。
常用选项
-a
或--all
: 显示所有连接,包括监听中的连接和未建立的连接。-b
或--b
: 显示拥有每个连接的应用程序名称(仅限Windows)。-e
或--extended
: 显示额外的信息,如IPv6地址。-n
或--numeric
: 不解析主机名或端口名称,直接显示数字形式的地址和端口号。-o
或--programs
: 显示拥有每个连接的应用程序PID和名称(仅限Windows)。-l
或--listening
:显示监控中的服务器的Socket。-p
或--protocol
: 指定协议类型,例如TCP或UDP。-r
或--route
: 显示路由表而不是连接。-s
或--statistics
: 显示协议统计信息,如TCP、UDP等。-t
或--tcp
: 仅显示TCP连接。-u
或--udp
: 仅显示UDP连接。
常见用法
netstat -an
:显示所有连接的详细信息,但不解析地址和端口号。netstat -tunlp
:显示所有 TCP 和 UDP 连接及其对应的 PID 和程序名称。netstat -i
:显示网络接口的统计信息,比如接收和发送的数据包数量。netstat -r
:显示内核路由表。
统计当前系统上不同TCP状态的连接数:
netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
netstat -na
:netstat
是用于显示网络连接、路由表、接口统计信息等网络相关信息的命令。-n
选项告诉netstat
以数字形式显示地址和端口号,而不是尝试将它们解析为名称。-a
选项告诉netstat
显示所有连接(已建立的和监听的)。
|
(管道符):- 管道符用于将
netstat
命令的输出作为awk
命令的输入。
- 管道符用于将
awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
:awk
是一个强大的文本处理工具,常用于模式扫描和处理。/^tcp/
是一个正则表达式模式,用于匹配以 "tcp" 开头的行。这意味着awk
只会处理那些与TCP连接相关的行。{++S[$NF]}
是awk
的动作部分,执行以下操作:$NF
是一个特殊变量,代表当前记录(即当前行)的最后一个字段。在netstat -na
的输出中,最后一个字段是连接的状态(例如 "ESTABLISHED"、"TIME_WAIT" 等)。S[$NF]
是一个关联数组(类似于哈希表或字典),其键是连接状态。++S[$NF]
表示将数组中对应状态的计数加一。如果该状态是第一次出现,它会被初始化为1。
END
是一个特殊的awk
模式,它匹配输入文件的末尾。在处理完所有输入行之后,awk
会执行END
模式后面的动作。{for(a in S) print a, S[a]}
是在处理完所有行后执行的动作,它遍历数组S
并打印每个状态及其对应的计数。
输出示例:
[root@cengxuyuan ~]# netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LISTEN 22
ESTABLISHED 28
TIME_WAIT 5
find
命令
find
命令是 Linux 系统中一个非常强大的文件搜索工具,它可以用来在指定的目录及其子目录中查找文件,并根据多种条件过滤搜索结果。find
命令的基本语法如下:
find [搜索范围] [选项] [动作]
搜索范围
搜索范围
:指定你想要搜索的目录。如果省略,默认从当前目录开始搜索。
选项
-type
:指定搜索的文件类型,如-type f
表示搜索文件,-type d
表示搜索目录,-type l
表示链接。-name
:指定搜索的文件名。-size
:指定文件的大小,如-size +100M
表示搜索大于 100MB 的文件。-mtime
:指定文件的最后修改时间,如-mtime +10
表示搜索在过去 10 天内修改的文件。-user
:指定文件的所有者,如-user username
表示搜索所有者为 username 的文件。-group
:指定文件所属的组,如-group groupname
表示搜索属于 groupname 组的文件。-iname
:忽略大小写的文件名搜索。-inum
:指定 inode 号,如-inum 12345
表示搜索 inode 号为 12345 的文件。
动作
-print
:将找到的文件打印到标准输出。-exec
:对找到的文件执行指定的命令。-ok
:与-exec
类似,但需要用户确认才能执行。-delete
:删除找到的文件。-fprintf
:格式化输出找到的文件内容。-ls
:列出找到的文件信息。
示例
- 搜索当前目录下所有文件:bash
find . -type f
- 搜索当前目录下所有 PDF 文件:bash
find . -type f -name "*.pdf"
- 搜索当前目录下所有大于 100MB 的文件:bash
find . -type f -size +100M
- 搜索当前目录下所有在过去 10 天内修改的文件:bash
find . -type f -mtime -10
- 搜索当前目录下所有属于用户
username
的文件:bashfind . -type f -user username
- 搜索当前目录下所有 inode 号为 12345 的文件:bash
find . -type f -inum 12345
- 搜索当前目录下所有文件并删除:bash
find . -type f -delete
- 搜索当前目录下所有文件并执行命令:bash
find . -type f -exec ls -l {} \;
Yum
命令
Yum(全称为 Yellow dog Updater, Modified)是在Linux操作系统中,特别是Fedora、RedHat和SUSE等发行版中常用的一种基于RPM的软件包管理器。它允许系统管理员交互式和自动化地管理RPM软件包,能够从指定的服务器自动下载RPM包并进行安装,同时自动处理依赖性关系,一次性安装所有依赖的软件包,从而避免了繁琐的下载和安装过程。
主要特点
- 自动化管理:Yum能够自动下载和安装软件包,简化了软件管理过程。
- 依赖性处理:Yum可以自动解决软件包的依赖关系,无需手动干预。
- 命令简单易记:Yum的命令结构简洁,易于学习和使用。
基本命令
- 安装软件包:
yum install package1
:安装指定的软件包。yum groupinstall group1
:安装指定的软件包组。
- 更新和升级:
yum update
:更新所有软件包。yum update package1
:更新指定的软件包。yum upgrade package1
:升级指定的软件包。yum check-update
:检查所有可更新的软件包。
- 查找和显示信息:
yum list
:显示所有已安装和可安装的软件包。yum info package1
:显示指定软件包的详细信息。yum search string
:根据关键字查找软件包。
- 删除软件包:
yum remove package1
:删除指定的软件包。
软件包目录
当你使用 yum
安装软件包时,实际的文件会被放置在系统的多个位置,这取决于软件包的内容和类型。
二进制可执行文件:
- 通常被安装在
/usr/bin
或/usr/local/bin
目录下。 - 有时候也会被安装在
/sbin
或/usr/sbin
(系统管理命令)或者/usr/local/sbin
。 - 如果是图形界面程序,可能会被安装在
/usr/bin
下,同时在/usr/share/applications
中有一个指向它的.desktop
文件。
- 通常被安装在
库文件:
- 通常被安装在
/usr/lib
或/usr/lib64
(对于 64 位系统)。 - 有时也可能在
/usr/local/lib
或/usr/local/lib64
。
- 通常被安装在
配置文件:
- 通常被安装在
/etc
目录下,具体的子目录取决于软件包。 - 某些服务的配置文件可能位于
/etc/<service_name>
目录内。
- 通常被安装在
文档和手册页:
- 文档通常位于
/usr/share/doc/<package-name>
。 - 手册页位于
/usr/share/man/manX/<command>.X.gz
,其中X
是手册页的章节编号。
- 文档通常位于
数据文件:
- 用户数据文件通常存储在
/var/lib/<service_name>
或/var/cache/<service_name>
。 - 日志文件通常存储在
/var/log/<service_name>
。
- 用户数据文件通常存储在
启动脚本和服务配置:
- 对于 Systemd 系统,服务单元文件通常位于
/usr/lib/systemd/system
或/etc/systemd/system
。 - 对于 SysVinit 系统,启动脚本通常位于
/etc/rc.d/init.d
。
- 对于 Systemd 系统,服务单元文件通常位于
桌面环境相关的文件:
- 图标和菜单文件通常位于
/usr/share/icons
和/usr/share/applications
。
- 图标和菜单文件通常位于
库依赖:
- 动态链接库(
.so
文件)通常位于/usr/lib
或/usr/lib64
。 - 静态库(
.a
文件)通常位于/usr/lib
或/usr/lib64
。
- 动态链接库(
开发文件:
- 头文件和开发库通常被安装在
/usr/include
和/usr/lib
或/usr/lib64
。
- 头文件和开发库通常被安装在
语言支持文件:
- 包含翻译字符串的
.mo
文件通常位于/usr/share/locale
。
- 包含翻译字符串的
防火墙命令
firewalld
是一个功能强大的防火墙管理工具,它支持动态管理防火墙规则,而无需重启服务或连接。
查看防火墙状态:
- 显示防火墙的状态(active、inactive等):bash
firewall-cmd --state
重新加载规则:
- 重新加载防火墙规则,不会中断现有连接:bash
firewall-cmd --reload
查看永久规则:
- 显示永久性的防火墙规则:bash
firewall-cmd --permanent --list-all
临时添加端口:
- 将端口添加到默认区域(临时):bash
firewall-cmd --add-port=<port>/<protocol>
永久添加端口:
- 将端口添加到默认区域(永久):bash
firewall-cmd --permanent --add-port=<port>/<protocol>
删除端口:
- 从默认区域移除端口(临时):bash
firewall-cmd --remove-port=<port>/<protocol>
- 从默认区域移除端口(永久):bash
firewall-cmd --permanent --remove-port=<port>/<protocol>
常用命令
firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --reload
firewall-cmd --permanent --list-all
top
命令
top
命令是 Linux 系统中一个非常强大的工具,用于实时地监视系统的状态,特别是进程的状态。它可以显示当前正在运行的进程,并且允许用户动态地观察这些进程的变化。
启动 top
要启动 top
命令,只需在终端中输入 top
并按回车键即可。
top
的基本界面
当你启动 top
之后,你会看到一个包含多个部分的界面:
任务栏: 显示系统当前的任务总数、运行中的任务数、睡眠中的任务数、停止的任务数以及僵尸任务数。
负载平均: 显示过去 1 分钟、5 分钟和 15 分钟的系统负载平均值。
系统状态信息: 包括系统运行时间、用户数、系统负载等。
内存使用: 显示物理内存、交换空间(Swap)的使用情况。
CPU 使用: 显示 CPU 的使用情况,包括用户进程使用率、系统进程使用率、空闲时间、等待 I/O 完成的时间等。
进程列表: 显示当前运行的进程,每一行代表一个进程,包括 PID、用户、优先级、NI(nice 值)、虚拟内存大小、驻留集大小、状态、CPU 使用率、内存使用率、时间和命令名称。
交互式操作
top
命令支持多种交互式的操作,可以通过键盘命令来控制显示的内容和排序方式。
排序: 默认情况下,
top
是按照 CPU 使用率来排序的。你可以使用以下命令来改变排序依据:- 按
Shift
+P
或者在 Caps Lock 开启状态下按P
来按照 CPU 使用率排序。 - 按
Shift
+M
或者在 Caps Lock 开启状态下按M
来按照内存使用率排序。 - 按
Shift
+V
或者在 Caps Lock 开启状态下按V
来按照虚拟内存大小排序。 - 按
Shift
+T
或者在 Caps Lock 开启状态下按T
来按照时间排序。
- 按
搜索: 你可以使用
/
键来搜索进程名或命令。帮助: 按
h
或H
键可以显示命令的帮助信息。其他常用命令:
q
: 退出top
。k
: 发送信号给选定的进程。r
: 改变选定进程的优先级(nice 值)。s
: 设置更新间隔。m
: 切换是否显示交换空间(Swap)信息。l
: 显示最近的系统负载变化曲线。t
: 切换是否显示完整的命令行。
扩展功能
除了标准的 top
命令外,还有一些扩展选项可以修改其行为:
top -b
: 将top
输出重定向到文件或管道。top -d <seconds>
: 设置更新间隔为<seconds>
秒。top -u <username>
: 仅显示属于<username>
用户的进程。top -c
: 显示完整的命令行而不是仅仅显示命令名。top -n <num>
: 运行<num>
次更新后自动退出。
示例
如果你想按内存使用率对进程进行排序并显示完整命令行,可以这样操作:
- 启动
top
。 - 按
Shift
+M
或在 Caps Lock 开启状态下按M
来按内存使用率排序。 - 按
c
显示完整的命令行。
curl
命令
curl
是一个强大的命令行工具,用于在没有用户交互的情况下传输数据,支持多种协议,如HTTP、HTTPS、FTP等。它不仅能够下载文件,还能上传文件、发送POST请求等,在开发、测试和日常使用中广泛使用。
基本格式
curl [选项] [URL]
常用选项
-O
:将文件下载并以服务器上的文件名保存。-o
:将文件下载并指定保存的本地文件名。-L
:跟随重定向链接。-s
:静默模式,不输出任何东西。-S
:当遇到错误时仍然输出错误信息。-X
:指定 HTTP 请求方法(如 GET、POST、PUT 等)。-d
:发送 POST 请求的数据。-H
:添加 HTTP 请求头。-u
:设置服务器认证的用户名和密码。-b
:发送 cookies。-c
:将服务器设置的 cookies 保存在一个文件中。-i
:输出响应头信息。-I
:只输出响应头信息,不输出响应体。-v
:输出通信的整个过程,用于调试。-k
:允许curl
执行“不安全”的 SSL 连接和传输。
常见用法
GET 请求
curl http://cengxuyuan.cn
带参数的 GET 请求
curl "http://cengxuyuan.cn/page?param1=value1¶m2=value2"
POST 请求
curl -d "param1=value1¶m2=value2" -X POST http://cengxuyuan.cn/page
或者使用 -d
的 JSON 格式:
curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://cengxuyuan.cn/page
下载文件
curl -O http://cengxuyuan.cn/file.zip
上传文件
curl -F "file=@path/to/local/file" http://cengxuyuan.cn/upload
用户认证
curl -u username:password http://cengxuyuan.cn
使用 cookies
curl -b cookies.txt -c cookies_new.txt http://cengxuyuan.cn
显示响应头
curl -I http://cengxuyuan.cn
跟随重定向
curl -L http://cengxuyuan.cn
保存响应到文件
curl -o response.html http://cengxuyuan.cn
使用 HTTP Basic 认证
curl -u username:password http://cengxuyuan.cn
使用 HTTPS(忽略证书验证)
curl -k https://cengxuyuan.cn
高级用法
curl
还支持多线程下载、代理、限速、用户代理设置等高级功能。
多线程下载
curl -# -O -C - -Q 'Range: bytes=0-1023' http://cengxuyuan.cn/file.zip -Q 'Range: bytes=1024-' -o file.zip.part
设置代理
curl -x myproxy:port http://cengxuyuan.cn
限速
curl --limit-rate 200k http://cengxuyuan.cn
设置用户代理
curl -A "Mozilla/5.0" http://cengxuyuan.cn
curl
的功能非常丰富,这里只列举了部分常见用法。更详细的用法和选项,可以通过 man curl
或 curl --help
来查看帮助文档。
使用 curl -v
命令跟踪链路
使用 -v
选项可以看到整个 HTTP 通信过程,这对于调试网络问题、理解 HTTP 协议、检查服务器配置或验证客户端请求都非常有用。
版本信息
首先,curl
会输出它自己的版本信息,以及所使用的 libcurl 库的版本信息。
* curl 7.64.1 (x86_64-apple-darwin18.2.0) libcurl/7.64.1 (SecureTransport) OpenSSL/1.0.2q
zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) nghttp2/1.36.0 librtmp/2.3
请求初始化
curl
会显示它如何解析命令行参数,以及如何初始化请求。
* Trying 93.184.216.34...
* TCP_NODELAY set
DNS 解析
curl
会显示它如何解析目标 URL 的 IP 地址。
* Connected to example.com (93.184.216.34) port 80 (#0)
TLS/SSL 握手(如果是 HTTPS 请求)
如果请求的是 HTTPS 网址,curl
会显示 SSL 握手的过程,包括证书验证、密钥交换等。
查看代码
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
HTTP 请求
curl
会显示完整的 HTTP 请求,包括请求行、请求头和(如果是 POST 请求)请求体。
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.64.1
> Accept: */*
>
HTTP 响应
curl
会显示完整的 HTTP 响应,包括状态行、响应头和响应体(除非使用 -i
或 -I
选项)。
查看代码
< HTTP/1.1 200 OK
< Date: Wed, 27 Jul 2024 18:57:58 GMT
< Server: Apache
< Last-Modified: Tue, 12 Jul 2024 14:25:27 GMT
< ETag: "e00172-56d-5a39784096e80"
< Accept-Ranges: bytes
< Content-Length: 1389
< Content-Type: text/html
<
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<!-- ... rest of the HTML response ... -->
</head>
连接关闭
最后,curl
会显示连接是如何被关闭的。
* Connection #0 to host example.com left intact
查看路由命令
在Linux系统中,可以使用以下几种命令来查看路由表:
route
命令:输入
route
或route -n
(使用-n
选项可以显示数字形式的地址,而不是尝试解析它们)来查看当前的路由表。bashroute route -n
netstat
命令:使用
netstat -r
或netstat -rn
命令也可以查看路由表。bashnetstat -r netstat -rn
ip route
命令:对于较新的Linux发行版,
ip
命令是较新的用来显示和管理路由的命令。baship route
ip route show
命令:同样使用
ip
命令,但更明确地要求显示路由信息。baship route show
在现代Linux系统中,ip
命令逐渐取代了 route
和 netstat
,因为它提供了更全面和更灵活的IP网络配置功能。
awk
命令
awk
是一种强大的文本处理工具,它在Unix和类Unix系统中被广泛使用。awk
命令的名称来源于它的三位创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。awk
不仅可以用于简单的文本搜索和替换,还可以执行复杂的文本分析和报告生成。
基本语法
awk
命令的基本语法如下:
awk 'pattern { action }' file
或者,当需要指定多个模式-动作对时:
awk 'pattern1 { action1 } ; pattern2 { action2 }' file
其中:
pattern
是一个可选的匹配模式,用于指定哪些行应该被action
处理。{ action }
是当模式匹配时要执行的一系列命令。file
是要处理的文件名。
如果省略了pattern
,则action
会应用于每一行。
内建变量
awk
提供了许多内建变量,这些变量可以在awk
脚本中使用,例如:
NR
:当前记录(行)的编号。NF
:当前记录中的字段数量。$0
:当前记录(整行)。$1
、$2
、...$n
:当前记录的第n个字段(字段由FS分隔,默认是空格)。FS
:字段分隔符,默认是空格或制表符。RS
:记录分隔符,默认是换行符。
例子
以下是一些简单的awk
命令示例:
打印每一行的第一个字段
awk '{ print $1 }' filename
打印第一行
awk 'NR == 1' filename
打印总字段数大于5的行
awk 'NF > 5' filename
打印字段数和每行内容
awk '{ print NF, $0 }' filename
使用自定义分隔符打印每行
awk -F, '{ print $1, $2 }' filename
这里-F,
指定了字段分隔符为逗号。
对文件中的数值进行求和
awk '{ sum += $1 } END { print sum }' filename
这里END
是一个特殊的模式,它会在文件处理结束后执行。
ps
命令
ps
(process status)是Linux和类Unix操作系统中用于查看当前系统上运行进程的命令。它提供了丰富的选项来显示不同类型的进程信息。
基本语法
ps [options]
常用选项
a
:显示所有与终端相关的进程。u
:以用户为中心的格式显示进程信息。x
:显示所有进程,不仅限于与终端关联的进程。e
:显示所有进程,等同于-A
。f
:显示完整格式列表。l
:显示长格式列表。j
:显示与作业控制相关的信息。o
:自定义输出格式。
常见用法
显示所有进程
ps aux
或
ps -ef
这两个命令都会列出系统上的所有进程,但aux
是BSD风格,而-ef
是System V风格。
显示长格式列表
ps -l
这个命令会显示一个长格式的列表,包含更详细的进程信息。
自定义输出格式
ps -eo pid,ppid,cmd
这个命令会按照指定的列(PID, PPID, CMD)来显示进程信息。
输出列的含义
以下是一些常用的列及其含义:
PID
:进程ID。PPID
:父进程ID。UID
:运行该进程的用户ID。USER
:运行该进程的用户名。%CPU
:进程使用的CPU时间百分比。%MEM
:进程使用的内存百分比。VSZ
:进程的虚拟内存大小(以KB为单位)。RSS
:进程的常驻内存大小(以KB为单位)。TTY
:进程所关联的终端。STAT
:进程状态(如R运行,S睡眠,T停止,Z僵尸)。START
:进程开始时间。TIME
:进程运行的总CPU时间。CMD
:启动进程的命令。
进程状态码
STAT
列中的状态码可以包含以下字符:
R
:运行。S
:睡眠(可中断)。D
:睡眠(不可中断,通常是在等待I/O)。T
:停止。Z
:僵尸进程。<
:高优先级(以下划线开头)。N
:低优先级(以尖括号结尾)。L
:有页面锁定在内存中。s
:会话领导者。l
:多线程(使用CLONE_THREAD, 类似于轻量级进程)。+
:前台进程组。
示例
查看当前用户的所有进程:
ps -u $USER
查看特定进程ID的信息:
ps -p PID
其中PID
是我们想查看的进程的ID。
lsof
命令
lsof
(list open files)是Linux和类Unix操作系统中的一个命令行工具,用于列出由进程打开的所有文件和网络连接。
基本语法
lsof [options] [file]
常用选项
-a
:逻辑与操作,用于组合其他选项。-c <进程名>
:列出指定进程名打开的文件。-p <PID>
:列出由指定进程ID(PID)打开的文件。-u <用户名>
:列出由指定用户名打开的文件。-i [i]
:列出符合条件的网络文件信息,[i]
可以是协议或端口。-n
:不解析主机名,显示数字形式的IP地址。-P
:不解析端口号,显示端口号的数字形式。-l
:不显示用户ID(UID),只显示用户名。-t
:仅列出运行中的进程。-r
:间隔一定时间重复执行lsof
命令。-h
:显示帮助信息。
常见用法
列出所有打开的文件
lsof
这个命令会列出系统上所有打开的文件和进程。
列出指定进程打开的文件
lsof -p PID
将PID
替换为我们想要检查的进程ID。
列出指定用户打开的文件
lsof -u username
将username
替换为用户名。
列出指定协议或端口的网络连接
lsof -i [protocol][:service-port]
例如,要列出所有使用TCP协议的进程:
lsof -i tcp
或者,要列出所有使用端口80的进程:
lsof -i :80
查看某个文件被哪些进程打开
lsof /path/to/file
将/path/to/file
替换为我们想要检查的文件路径。
输出列的含义
以下是lsof
命令输出的部分列及其含义:
COMMAND
:进程的名称。PID
:进程ID。USER
:运行该进程的用户。FD
:文件描述符,可以是(例如)cwd(当前工作目录)、txt(程序代码)、mem(内存映射文件)、0u(UNIX域套接字)等。TYPE
:文件类型,如DIR(目录)、REG(常规文件)、CHR(字符设备)、BLK(块设备)等。DEVICE
:设备号(主设备号和次设备号)。SIZE
:文件的大小(如果适用)。NODE
:文件的inode号。NAME
:文件名。
示例
列出所有使用TCP协议的进程:
lsof -i tcp
列出所有打开文件的用户名为root的进程:
lsof -u root
查看文件/var/log/syslog
被哪些进程打开:
lsof /var/log/syslog
logrotate
日志管理
Linux的logrotate是一个日志管理工具,它用于自动截断、压缩、删除和邮寄日志文件。
logrotate基于配置文件来管理日志文件。它会定期检查配置文件中指定的日志文件,根据设定的规则进行轮转。
logrotate的配置文件
logrotate的配置文件通常位于以下路径:
/etc/logrotate.conf
:主配置文件/etc/logrotate.d/
:包含各个服务的日志轮转配置
配置文件格式
logrotate配置文件的基本格式如下:
日志文件路径 {
轮转规则1
轮转规则2
...
}
常用的轮转规则
以下是一些常用的轮转规则:
daily
:每天轮转一次weekly
:每周轮转一次monthly
:每月轮转一次rotate n
:保留最新的n个日志文件,其余删除compress
:通过gzip压缩轮转后的日志文件create mode owner group
:创建新的日志文件,并设置权限、所有者和组postrotate/endscript
:在轮转后执行的脚本prerotate/endscript
:在轮转前执行的脚本
示例配置
以下是一个简单的logrotate配置示例:
查看代码
/var/log/nginx/access.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
postrotate
/usr/bin/kill -USR1 `cat /var/run/nginx.pid`
endscript
}
这个配置表示每天轮转一次Nginx的访问日志,保留最近7天的日志文件,并对其进行压缩。如果日志文件不存在,则忽略错误。如果日志文件为空,则不进行轮转。创建新日志文件时,权限为640,所有者为root,组为adm。轮转后执行脚本,用于通知Nginx重新打开日志文件。
手动执行logrotate
在需要的情况下,可以手动执行logrotate进行日志轮转:
logrotate /etc/logrotate.conf
或者指定配置文件:
logrotate /etc/logrotate.d/nginx
查看logrotate的状态
可以使用以下命令查看logrotate的状态:
logrotate --debug /etc/logrotate.conf
这将显示logrotate执行过程中的详细信息,有助于调试配置文件。
less
命令
less
是一个在Unix和类Unix系统中广泛使用的文本文件查看器。它允许用户以交互方式查看文件内容,而不需要将整个文件加载到内存中。less
命令是 more
命令的改进版,提供了更多的功能和灵活性。
主要功能
- 逐页查看:
less
允许用户一次查看文件的一部分,按页查看。 - 向前和向后滚动:用户可以向前和向后滚动文件内容。
- 搜索:可以在文件中搜索特定的文本字符串。
- 支持管道:
less
可以通过管道接收来自其他命令的输出。 - 支持多个文件:可以同时打开多个文件,并在它们之间切换。
常用命令
在 less
的交互模式下,以下是一些常用的键盘命令:
- 空格键:向下滚动一页。
- b:向上滚动一页。
- 上下箭头:向上或向下滚动一行。
- pagedown/pageup:向下或向上滚动一页。
- /:向前搜索文本字符串(输入搜索词后按 Enter)。
- ?:向后搜索文本字符串。
- n:重复前一个搜索(与
/
或?
相同方向)。 - N:重复前一个搜索(相反方向)。
- g:跳转到文件的开头。
- G:跳转到文件的末尾。
- h:显示帮助页面。
- q:退出
less
。 - =:显示当前行号。
- d:向下滚动半页。
- u:向上滚动半页。
命令行选项
less
命令也支持多种命令行选项,以下是一些常用的选项:
-N
:显示行号。-i
:搜索时忽略大小写。-S
:禁止折行。-M
:显示更多的提示信息,包括百分比和行号。-F
:如果文件很小时,不使用less
,直接输出到标准输出。-X
:退出时不清除屏幕。-R
:原始输出,不进行颜色处理。
示例
less -N /var/log/messages # 查看日志文件,并显示行号
less -i /path/to/file # 搜索时忽略大小写
less -S file.txt # 查看文件,不折行
less
是一个功能强大的工具,适合查看大文件,因为它不会一次性加载整个文件,这样可以节省内存并提高效率。