Linux 常用命令
在服务器管理中,Linux 系统常用命令的熟练掌握是至关重要的。为了全面涵盖各个方面的操作,以下内容将以更加详细的方式介绍 Linux 服务器中的常用命令,包括文件操作、系统监控、进程管理、网络配置、安全管理等。
1. 系统信息与性能监控
1.1 uname
- 查看操作系统信息
uname [选项]
常用选项:
- uname -a
:显示所有系统信息(包括内核版本、主机名、硬件架构等)。
- uname -r
:显示当前内核版本。
1.2 uptime
- 查看系统运行时间和负载
uptime
显示系统的当前时间、运行时间、当前登录的用户数,以及最近 1、5、15 分钟的系统平均负载。
1.3 top
- 实时查看系统资源使用情况
top
主要信息:
PID
:进程 ID。USER
:运行进程的用户。PR
:优先级。%CPU
:CPU 使用率。%MEM
:内存使用率。
按 q
退出,h
查看帮助,k
杀掉某个进程。
1.4 htop
- 更友好的实时监控工具(需安装)
htop
htop
比 top
更直观,支持上下滚动和更丰富的进程信息展示。它提供图形化 CPU 和内存利用率。
1.5 free
- 查看内存使用情况
free [选项]
free -h
:以人类可读的格式显示内存使用情况,显示已用、可用、缓存内存等信息。
1.6 df
- 查看磁盘空间使用情况
df [选项]
df -h
:以人类可读的格式显示每个分区的使用情况(单位为 GB/MB)。df -T
:显示每个分区的文件系统类型。
1.7 du
- 查看目录或文件的大小
du [选项] [路径]
du -sh /var/log
:显示/var/log
目录的总大小。du -h --max-depth=1 /
:显示根目录下每个一级子目录的大小。
1.8 iostat
- 显示磁盘 I/O 统计(需安装 sysstat
)
iostat [选项]
iostat
:显示每个设备的 CPU 使用情况和 I/O 统计。iostat -x
:显示详细的设备 I/O 统计信息。
1.9 vmstat
- 系统性能监控
vmstat [时间间隔] [次数]
vmstat 1 5
:每秒刷新一次,共输出 5 次系统的内存、CPU、I/O 等情况。
1.10 sar
- 系统性能历史记录(需安装 sysstat
)
sar [选项] [时间间隔] [次数]
sar -u 1 3
:每秒显示一次 CPU 使用情况,显示 3 次。sar -r 1 3
:每秒显示一次内存使用情况,显示 3 次。
2. 文件与目录操作
2.1 ls
- 列出目录内容
ls [选项] [目录]
常用选项:
- ls
:列出当前目录的内容。
- ls -l
:以详细列表模式显示文件信息(包括权限、所有者、大小、修改时间等)。
- ls -a
:显示所有文件,包括隐藏文件(以 .
开头)。
- ls -h
:以人类可读的方式显示文件大小。
2.2 cd
- 切换目录
cd [目录]
cd /path/to/directory
:切换到指定目录。cd ~
:切换到用户的主目录。cd -
:切换到上一次所在的目录。
2.3 pwd
- 显示当前所在目录
pwd
显示当前工作目录的绝对路径。
2.4 cp
- 复制文件或目录
cp [选项] 源文件 目标路径
常用选项:
- cp file1 /path/to/destination/
:复制文件 file1
到目标路径。
- cp -r dir1 /path/to/destination/
:递归复制目录 dir1
及其内容。
2.5 mv
- 移动或重命名文件
mv [选项] 源文件 目标路径
常用操作:
- mv file1 /path/to/destination/
:将文件 file1
移动到目标路径。
- mv file1 file2
:将 file1
重命名为 file2
。
2.6 rm
- 删除文件或目录
rm [选项] 文件名
常用选项:
- rm file1
:删除文件 file1
。
- rm -r dir1
:递归删除目录 dir1
及其内容。
- rm -i
:删除前提示确认。
2.7 mkdir
- 创建新目录
mkdir [选项] 目录名
mkdir newdir
:创建目录newdir
。mkdir -p /path/to/newdir
:递归创建目录,包括必要的父目录。
2.8 touch
- 创建空文件或更新文件时间戳
touch 文件名
touch newfile
:创建一个新的空文件newfile
。touch -t 202309251200 file
:将file
的时间戳设置为 2023年09月25日12时00分。
2.9 find
- 查找文件或目录
find [路径] [选项] [搜索条件]
常用示例:
- find /home -name "*.log"
:在 /home
目录下查找所有 .log
文件。
- find / -type d -name "test"
:查找名为 test
的目录。
- find /var/log -mtime -7
:查找过去 7 天内修改过的文件。
2.10 locate
- 快速查找文件(需安装)
locate 文件名
locate filename
:快速查找文件filename
,其基于预先生成的数据库。
3. 权限管理
3.1 chmod
- 修改文件权限
chmod [权限] 文件名
chmod 755 script.sh
:为文件script.sh
设置rwxr-xr-x
权限。chmod +x script.sh
:为文件script.sh
添加执行权限。
3.2 chown
- 修改文件所有者
chown [选项] 所有者:用户组 文件名
chown user1:group1 file1
:将file1
的所有者改为user1
,所属组改为group1
。chown -R user1:group1 /path/to/dir
:递归修改目录及其文件的所有者和所属组。
3.3 umask
- 设置默认权限掩码
umask [权限掩码]
umask 022
:设置文件默认权限掩码,使新文件默认权限为644
,目录为755
。
4. 进程管理
4.1 ps
- 查看当前进程
ps [选项]
ps aux
:显示所有进程及其详细信息,包括进程号、CPU 使用率、内存使用率等。ps -ef
:显示所有进程的完整格式。
4.2 kill
- 终止进程
kill [选项] 进程号
kill 1234
:终止进程号为1234
的进程。kill -9 1234
:强制终止进程号为1234
的进程。
4.3 pkill
- 根据进程名终止进程
pkill [选项] 进程名
pkill nginx
:终止所有名为nginx
的进程。
4.4 systemctl
- 管理系统服务
systemctl [动作] [服务名]
常用命令:
- systemctl start nginx
:启动 nginx
服务。
- systemctl stop nginx
:停止 nginx
服务。
- systemctl restart nginx
:重启 nginx
服务。
- systemctl status nginx
:查看 nginx
服务状态。
- systemctl enable nginx
:设置 nginx
服务开机自动启动。
- systemctl disable nginx
:取消 nginx
服务开机启动。
4.5 service
- 管理服务(旧版命令)
service [服务名] [动作]
常用命令:
- service nginx start
:启动 nginx
服务。
- service nginx stop
:停止 nginx
服务。
5. 网络管理
5.1 ip
- 查看和配置网络接口
ip [选项] 命令
常用命令:
- ip addr
:查看网络接口的 IP 地址。
- ip link
:显示网络接口的状态。
- ip route
:查看路由信息。
5.2 ping
- 测试网络连通性
ping [选项] 目标
ping google.com
:测试到google.com
的网络连通性。
5.3 netstat
- 查看网络连接(ss
是其替代品)
netstat [选项]
常用选项:
- netstat -tuln
:显示正在监听的 TCP/UDP 端口。
- netstat -anp
:显示所有网络连接及其关联进程。
5.4 ss
- 替代 netstat
的现代工具
ss [选项]
ss -tuln
:显示正在监听的 TCP/UDP 端口。ss -anp
:显示所有网络连接及其关联进程。
ss
(socket statistics
)是一个强大且高效的工具,用于查看 Linux 系统中的网络连接情况,通常用来替代较旧的 netstat
命令。与 netstat
相比,ss
的速度更快,并且可以显示更多详细的网络连接信息。ss
可以用于监控 TCP、UDP、UNIX 套接字等。
以下是 ss
命令的详细讲解:
1. ss
命令基本语法
ss [选项]
2. 常用选项及参数详解
2.1 显示所有连接
ss -a
-a
选项显示所有连接,包括监听和非监听的套接字。
2.2 显示所有监听的端口
ss -l
-l
选项显示所有正在监听的套接字(例如服务器监听的端口),适合用于检查哪些服务正在监听某些端口。
2.3 显示 TCP 连接
ss -t
-t
选项显示当前的 TCP 连接信息。
2.4 显示 UDP 连接
ss -u
-u
选项显示当前的 UDP 连接信息。
2.5 显示 UNIX 套接字
ss -x
-x
选项显示当前的 UNIX 套接字连接(例如进程间通信)。
2.6 显示所有连接(TCP 和 UDP)
ss -tun
-tun
是将 -t
(TCP)、-u
(UDP)和 -n
(不解析名称)组合在一起,用于显示所有 TCP 和 UDP 连接,并不解析主机名和端口号,而是显示数字格式。
2.7 显示监听的 TCP 端口
ss -tnl
-tnl
选项显示当前正在监听的 TCP 端口。
2.8 显示网络连接的进程(PID)
ss -p
-p
选项显示每个连接所对应的进程及其 PID。适合用于查看哪个进程正在使用某个端口。
2.9 显示每个连接的详细信息
ss -i
-i
选项显示连接的详细信息,包括 TCP
协议的拥塞状态、重传次数等。
2.10 过滤特定端口
如果你想要过滤只使用某个端口的连接,可以使用以下命令:
- 过滤 TCP 端口 80:
bash ss -t '( sport = :80 )'
- 过滤 UDP 端口 53:
bash ss -u '( dport = :53 )'
2.11 显示统计信息
ss -s
-s
选项显示汇总的网络统计信息,类似于 netstat -s
。这适用于检查当前系统的整体网络状态,包括打开的连接数、监听的端口数、TCP 状态等。
3. ss
常用组合命令示例
3.1 显示所有 TCP 连接(数字格式)
ss -tn
-t
显示 TCP 连接,-n
使用数字格式显示 IP 和端口号,而不是将它们解析为域名和服务名称。
3.2 显示所有 UDP 连接
ss -un
显示所有 UDP 连接,并且端口号和地址以数字显示。
3.3 显示所有 TCP 连接及其状态
ss -tna
-a
显示所有连接,-t
限定为 TCP,-n
禁用名称解析。这会列出所有 TCP 连接以及它们的状态(例如 ESTABLISHED
, CLOSE_WAIT
, LISTEN
等)。
3.4 显示所有监听的 TCP 和 UDP 端口
ss -tuln
显示所有正在监听的 TCP 和 UDP 端口。
3.5 显示使用 IPv6 的连接
ss -6
仅显示使用 IPv6 协议的连接。
3.6 显示套接字缓冲区信息
ss -m
显示每个连接的套接字缓冲区使用情况,适合检查网络性能问题。
3.7 显示所有与某个 IP 相关的连接
ss dst 192.168.1.1
显示所有与目标 IP 地址 192.168.1.1
相关的连接。
3.8 根据进程 ID 过滤
ss -pt | grep PID
列出与指定 PID 相关的所有连接。
4. 输出字段解释
ss
输出的默认字段包括:
- Netid:协议类型(例如
tcp
,udp
,unix
)。 - State:连接的状态(例如
ESTABLISHED
,LISTEN
,TIME-WAIT
)。 - Recv-Q:接收队列中的数据字节数。
- Send-Q:发送队列中的数据字节数。
- Local Address:Port:本地地址和端口。
- Peer Address:Port:远程地址和端口。
5. TCP 状态解释
在 ss
的输出中,TCP 连接的状态字段显示当前连接的状态。常见的状态包括:
- LISTEN:服务器正在监听连接请求。
- ESTABLISHED:连接已建立,正在传输数据。
- SYN-SENT:客户端已经发送了 SYN 请求,等待对方响应。
- SYN-RECEIVED:服务器已经收到了 SYN 请求,正在等待确认。
- FIN-WAIT-1:主动关闭连接的一方已经发送 FIN 包,等待对方的确认。
- FIN-WAIT-2:主动关闭连接的一方已收到对方的确认,等待对方发送 FIN 包。
- CLOSE-WAIT:被动关闭连接的一方已收到 FIN 包,正在等待应用程序关闭连接。
- TIME-WAIT:确保远程主机收到了连接关闭请求后的短暂等待期。
- CLOSED:连接已经完全关闭。
6. ss
与 netstat
对比
ss
更快速、精确,且可以显示比netstat
更多的细节。ss
通过内核netlink
套接字获取数据,而netstat
则需要从/proc
文件系统中读取,性能较差。netstat
是传统工具,支持多年的老系统,而ss
是现代 Linux 的标配。
通过 ss
命令,系统管理员可以方便地查看网络连接、监控端口状态以及进行网络故障排除。掌握并灵活运用 ss
的各种选项,可以显著提高网络排障的效率。
5.5 curl
- 命令行网络请求工具
curl [选项] URL
curl http://example.com
:请求example.com
并返回响应内容。curl -I http://example.com
:仅返回响应头信息。
curl
是一个功能强大的命令行工具,用于在命令行或脚本中发出 HTTP 请求,获取远程服务器的数据。它支持多种协议,包括 HTTP、HTTPS、FTP 等,广泛用于自动化任务、接口测试、数据抓取等。
以下是 curl
命令的详细讲解:
1. 基本语法
curl [选项] [URL]
curl
命令后可以跟不同的选项来完成不同的任务,主要用来与 URL 交互。
2. 常用选项及参数详解
2.1 请求网页内容
curl http://example.com
最简单的 curl
使用方法是直接请求网页内容,curl
会输出网页的 HTML 源代码。
2.2 保存文件
curl -o filename http://example.com/file.zip
-o
选项将下载的内容保存为指定文件名。
curl -O http://example.com/file.zip
-O
选项则使用远程文件名保存文件。比如远程 URL 是 file.zip
,文件也会保存为 file.zip
。
2.3 显示响应头信息
curl -I http://example.com
-I
选项仅获取响应头信息,不会下载实际的内容。它适合用来查看服务器响应的状态码和头部信息。
2.4 发送自定义请求头
curl -H "User-Agent: Mozilla/5.0" http://example.com
-H
选项允许你发送自定义的 HTTP 请求头。例如上面命令修改了 User-Agent
,模拟了浏览器的请求。
2.5 发送 GET 请求
curl http://example.com?param1=value1¶m2=value2
GET 请求是 HTTP 的默认请求方法,直接将参数附加在 URL 后面。
2.6 发送 POST 请求
curl -X POST -d "param1=value1¶m2=value2" http://example.com
-X POST
明确表示发送 POST 请求,-d
选项用来传递 POST 数据。
curl -X POST -d @data.json http://example.com
你也可以通过 -d @filename
的方式将文件中的内容作为 POST 数据发送。
2.7 发送 JSON 数据
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://example.com
-H
选项设置 Content-Type
为 application/json
,然后通过 -d
发送 JSON 格式的数据。
2.8 下载多个文件
curl -O http://example.com/file1.zip -O http://example.com/file2.zip
可以一次下载多个文件,每个文件都使用 -O
选项指定 URL。
2.9 限制下载速度
curl --limit-rate 100K http://example.com/file.zip
--limit-rate
选项用于限制下载速度,单位可以是 K
(千字节)或 M
(兆字节)。
2.10 显示下载进度
curl -# http://example.com/file.zip
-#
选项显示下载进度条,适合用于下载较大的文件。
2.11 断点续传
curl -C - -O http://example.com/file.zip
-C -
选项用于断点续传,可以从上次中断的地方继续下载文件。
2.12 发送表单数据(模拟表单提交)
curl -F "username=admin" -F "password=123456" http://example.com/login
-F
选项可以用来模拟 HTML 表单提交,适合用于自动化提交表单请求。
2.13 跟踪重定向
curl -L http://example.com
-L
选项会跟随 HTTP 重定向。如果目标 URL 会重定向到另一个地址(如 301
或 302
),curl
会自动跟随重定向后的 URL。
2.14 显示详细请求过程
curl -v http://example.com
-v
选项用于显示详细的请求过程,包括请求头、响应头、以及传输的细节。
2.15 使用代理
curl -x http://proxy.example.com:8080 http://example.com
-x
选项用于通过代理服务器发送请求,后面跟上代理服务器的地址和端口。
2.16 上传文件
curl -T filename ftp://example.com/
-T
选项用于上传文件到 FTP 服务器。
2.17 认证请求(HTTP Basic 认证)
curl -u username:password http://example.com
-u
选项用于进行 HTTP 基本认证,curl
会将用户名和密码以 Base64
编码发送给服务器。
2.18 显示 cookie 信息
curl -c cookies.txt http://example.com
-c
选项可以将服务器返回的 cookie 保存到文件中。
curl -b cookies.txt http://example.com
-b
选项可以从文件中读取 cookie 并发送给服务器。
2.19 跳过 SSL 证书验证
curl -k https://example.com
-k
选项用于忽略 SSL 证书验证,适用于测试环境中 SSL 证书无效的情况。
3. curl
输出格式
3.1 输出到文件
curl
默认将服务器响应输出到标准输出(终端)。通过以下方式可以将输出重定向到文件:
curl http://example.com -o output.html
将结果保存到 output.html
。
3.2 输出到终端但隐藏下载进度
curl -s http://example.com
-s
选项会隐藏下载进度、错误信息,适合用于脚本中避免杂乱的输出。
3.3 只显示 HTTP 响应码
curl -o /dev/null -s -w "%{http_code}" http://example.com
通过 -w
选项可以自定义输出内容,%{http_code}
只会输出响应的 HTTP 状态码。
4. 协议支持
curl
支持多种协议,包括:
- HTTP/HTTPS
- FTP
- SFTP
- SCP
- LDAP
- FILE
- SMTP/SMTPS
- POP3/IMAP
5. curl
实用示例
5.1 获取网页的 HTTP 状态码
curl -o /dev/null -s -w "%{http_code}" http://example.com
返回状态码,例如 200
表示请求成功。
5.2 测试 API 接口
curl -X POST -H "Content-Type: application/json" -d '{"key":"value"}' http://api.example.com/endpoint
用于向 API 发送 POST 请求,发送 JSON 数据。
5.3 模拟浏览器行为
curl -A "Mozilla/5.0" http://example.com
通过设置 User-Agent
模拟来自某种浏览器的请求。
curl
是非常灵活的网络工具,不仅可以执行简单的 HTTP 请求,还能处理文件下载、表单提交、身份认证等复杂场景。通过理解和组合各种选项,你可以将 curl
用于数据抓取、接口测试、自动化操作等各种网络交互任务。
5.6 wget
- 下载文件
wget [选项] URL
wget http://example.com/file.zip
:下载文件file.zip
。
6. 软件包管理
6.1 Debian/Ubuntu 系统
apt update
:更新软件包索引。apt upgrade
:升级所有已安装的软件包。apt install package_name
:安装软件包。apt remove package_name
:卸载软件包。
6.2 CentOS/RHEL 系统
yum update
:更新软件包和系统。yum install package_name
:安装指定软件包。yum remove package_name
:卸载指定软件包。
以上是 Linux 服务器管理中常用命令的详细介绍,涵盖了系统监控、文件管理、权限控制、进程管理、网络配置和软件管理等方面。这些命令的熟练运用将帮助你高效管理和维护服务器。
rpm
(Red Hat Package Manager)是 Linux 下用于管理软件包的工具,适用于基于 RPM 包管理的发行版,如 Red Hat、CentOS、Fedora 等。rpm
命令用于安装、查询、升级、删除和验证 RPM 包,是 Linux 系统中包管理的重要组成部分。
以下是 rpm
命令的详细讲解:
1. 基本语法
rpm [选项] [软件包]
rpm
命令根据不同的选项执行不同的操作,最常见的功能包括安装、查询、升级和删除 RPM 包。
2. 常用选项及功能详解
2.1 安装软件包
rpm -ivh package.rpm
-i
选项用于安装一个 RPM 包,-v
表示显示详细信息,-h
则是显示进度条(哈希符号)。
2.2 安装时忽略依赖关系
rpm -ivh --nodeps package.rpm
--nodeps
选项允许在安装时忽略依赖关系。如果你强行安装一个包而不检查依赖关系,可能会导致软件运行出错。
2.3 安装并覆盖已有文件
rpm -ivh --replacefiles package.rpm
--replacefiles
选项允许覆盖已经安装的软件包文件。
2.4 升级软件包
rpm -Uvh package.rpm
-U
选项用于升级一个已安装的 RPM 包,如果该包尚未安装,rpm
会执行安装。
2.5 安装/升级时保留旧配置文件
rpm -Uvh --oldpackage package.rpm
--oldpackage
选项用于降级软件包(即安装旧版本)。
2.6 删除软件包
rpm -e package_name
-e
选项用于删除一个已安装的 RPM 包,注意这里需要输入的是软件包的名称,而不是 RPM 文件。
2.7 强制删除
rpm -e --nodeps package_name
--nodeps
选项允许删除时忽略依赖关系,强行删除软件包。
3. 查询功能
3.1 查询已安装的软件包
rpm -qa
-qa
选项用于列出所有已安装的软件包,通常配合 grep
使用:
rpm -qa | grep package_name
可以查询指定的软件包是否已安装。
3.2 查询软件包详细信息
rpm -qi package_name
-qi
选项用于查看指定已安装包的详细信息,例如版本、说明、大小等。
3.3 查询软件包文件列表
rpm -ql package_name
-ql
选项用于列出已安装软件包的所有文件。
3.4 查询文件属于哪个软件包
rpm -qf /path/to/file
-qf
选项用于查询某个系统文件是由哪个 RPM 包安装的。
3.5 查询软件包的依赖关系
rpm -qR package_name
-qR
选项用于列出某个已安装软件包的依赖关系。
4. 验证功能
4.1 验证软件包的完整性
rpm -V package_name
-V
选项用于验证已安装软件包的文件是否被修改。
输出结果格式如下:
S.5....T. /etc/myconfig.conf
其中每个符号表示不同的校验结果:
- S
:文件大小被更改
- 5
:MD5 校验和不匹配
- T
:文件时间戳被更改
4.2 验证签名
rpm --checksig package.rpm
--checksig
选项用于验证 RPM 包的 GPG 签名,以确保包来源可信。
5. RPM 文件管理
5.1 查看 RPM 包的内容
rpm -qpl package.rpm
-qpl
选项用于查看 RPM 包中包含的文件列表(未安装)。
5.2 查看 RPM 包的详细信息
rpm -qpi package.rpm
-qpi
选项用于查看 RPM 包的详细信息(未安装)。
5.3 查询 RPM 包的依赖关系
rpm -qpR package.rpm
-qpR
选项用于查看 RPM 包的依赖关系(未安装)。
6. RPM 数据库管理
6.1 重建 RPM 数据库
rpm --rebuilddb
--rebuilddb
选项用于重建 RPM 数据库,适用于数据库损坏或其他数据库相关问题时。
6.2 清除 RPM 数据库中的缓存文件
rpm --initdb
--initdb
选项用于初始化数据库,通常在初次安装 RPM 时使用。
7. 实用示例
7.1 下载并安装 RPM 包
wget http://example.com/package.rpm
rpm -ivh package.rpm
从 URL 下载 RPM 包并安装。
7.2 升级多个 RPM 包
rpm -Uvh package1.rpm package2.rpm
同时升级多个 RPM 包。
7.3 查询特定软件包的版本
rpm -qa | grep httpd
查询已安装的 httpd
软件包版本。
7.4 删除已安装软件包
rpm -e httpd
删除 httpd
软件包。
7.5 验证 RPM 包的完整性
rpm -V httpd
验证 httpd
软件包的文件完整性。
8. RPM 与 YUM 对比
特性 | rpm |
yum |
---|---|---|
基本功能 | 管理单个软件包 | 自动解决依赖关系,管理仓库和软件包 |
安装包 | 需要手动安装依赖包 | 自动安装所有依赖 |
使用场景 | 安装单个包或包文件 | 连接仓库,进行包的批量管理和更新 |
数据库管理 | 管理已安装包的信息数据库 | 通过仓库源获取包及更新信息 |
rpm
是一个功能强大、精细的软件包管理工具,适用于管理独立的 RPM 包。当你需要进行依赖管理和批量安装时,yum
或 dnf
是更好的选择。