常见 Linux 命令详细解释
常见 Linux 命令详细解释
以下是常见 Linux 命令及其参数的详细解释,按照使用频率排序,并附带了使用示例。
1. scp
(安全复制)
scp
(Secure Copy Protocol)用于在本地和远程主机之间进行加密传输文件。它基于 SSH 协议,因此数据传输过程中是安全的,适合在不安全的网络中传输敏感文件。
语法:
scp [选项] 源文件 目标文件
常用选项:
-r
:递归复制整个目录。使用时,源文件应为目录。-P
:指定远程主机的端口号(注意是大写 P)。例如,远程主机使用 2222 端口时,使用-P 2222
。-i
:指定用于身份验证的私钥文件。例如,-i /path/to/private_key
。-v
:启用详细模式,显示 SCP 执行过程的详细信息。-C
:启用压缩,在传输大量数据时有助于提高传输效率。-q
:启用静默模式,不显示任何输出。-l
:限制传输的带宽,单位为 Kbit/s。例如,-l 500
限制带宽为 500 Kbit/s。-B
:禁止启用密码验证,强制使用密钥认证。-o
:传递 SSH 配置选项,如-o StrictHostKeyChecking=no
可以跳过 SSH 主机密钥检查。
示例:
scp -v -P 2222 -l 500 -i ~/.ssh/id_rsa -r ./myfolder deployer@127.0.0.1:/data
使用 -l
选项限制传输带宽为 500 Kbit/s。
注意事项:
- 权限问题:如果目标路径的权限不足,可以通过
sudo
来提升权限,但是需要确保自己有远程sudo
权限。 - 密钥认证:使用
-i
选项时,确保私钥文件的权限是600
,否则 SSH 会拒绝使用该密钥进行连接。
2. sshpass
(自动输入密码的 SSH)
sshpass -p "password" ssh -o StrictHostKeyChecking=no root@127.0.0.1 sh /data/custom.sh
使用 sshpass
自动输入密码,登录并执行远程脚本。
3. ssh
(连接服务器/开启隧道-端口转发)
常用选项:
-L
:本地端口转发。-i
:指定私钥文件。
ssh -L 0:3307:remote_ip:3306 user@host
通过 SSH 创建本地端口转发。
4. vim
(文本编辑器)
vim
是 Linux 系统中功能强大的文本编辑器,广泛用于文件编辑、编程和系统管理。其分为三种模式:
- 普通模式:启动后默认进入普通模式,执行导航、删除、复制等操作。
- 插入模式:用于文本输入,按
i
进入,按Esc
退出。 - 命令行模式:执行保存、退出、查找替换等命令,按
:
进入。
插入模式
i
:在当前光标前插入。a
:在当前光标后插入。o
:在当前行下方新建一行并进入插入模式。
保存和退出
:w
:保存文件。:q
:退出 Vim。:wq
或ZZ
:保存并退出。:q!
:强制退出(不保存修改)。:x
:保存并退出(等价于:wq
)。
文本操作
复制、粘贴
yy
:复制当前行。nyy
:复制当前行及其后 n 行。p
:在光标后粘贴。P
:在光标前粘贴。
删除
dd
:删除当前行。ndd
:删除当前行及其后 n 行。x
:删除光标所在的字符。
撤销和重做
u
:撤销上一步操作。Ctrl + r
:重做上一步撤销。
查找
/pattern
:向下查找pattern
。?pattern
:向上查找pattern
。n
:重复上一次查找(同方向)。N
:反向重复上一次查找。
替换
:%s/old/new/g
:将文件中所有的old
替换为new
。:n,m s/old/new/g
:将第 n 到第 m 行的old
替换为new
。:%s/old/new/gc
:替换时逐个确认。
窗口操作
分屏
:split
或:sp
:水平分屏。:vsplit
或:vsp
:垂直分屏。Ctrl + w + w
:在分屏间切换。Ctrl + w + h/j/k/l
:移动到左/下/上/右的窗口。
关闭窗口
:q
:关闭当前窗口。:only
:关闭其他窗口,保留当前窗口。
代码编辑功能
缩进
>>
:将当前行向右缩进。<<
:将当前行向左缩进。n>>
或n<<
:缩进当前行及其后 n 行。
高亮匹配括号
将光标放在括号上,按
%
可跳转到匹配的括号。代码折叠
zf
:根据选定范围折叠。zo
:打开折叠。zc
:关闭折叠。
配置文件
Vim 的行为可以通过配置文件 .vimrc
进行定制。以下是一个简单示例:
set number " 显示行号
syntax on " 开启语法高亮
set tabstop=4 " 设置制表符宽度为 4 个空格
set expandtab " 使用空格替代 Tab
set autoindent " 自动缩进
高级用法
- 打开多个文件
vim file1 file2
使用 :n
切换到下一个文件,:prev
切换到上一个文件。
宏操作
q<register>
:开始录制宏,<register>
可以是任意字母。- 执行一系列操作后,按
q
停止录制。 @<register>
:执行宏。n@<register>
:重复执行宏 n 次。
多行注释
- 选中多行:按
Ctrl + v
进入列模式,选择需要注释的行。 - 插入注释符:按
Shift + i
,输入注释符(如#
),然后按Esc
。
- 选中多行:按
示例
- 替换文件中的字符串
:%s/foo/bar/g
将文件中所有的 foo
替换为 bar
。
- 删除空行
:g/^$/d
- 批量修改代码缩进
:%!indent -kr
5. xargs
(构建和执行命令行)
xargs
是一个用于构建并执行命令行的工具,通常结合管道使用。它从标准输入中读取数据(如文件列表、参数等),并将其转换为适合命令行的格式,接着执行指定的命令。xargs [选项] [命令]
xargs
会从标准输入中读取数据并将其转化为命令行参数,然后执行指定的命令。常用选项:
-n
:指定每次执行命令时使用的参数个数。例如,
xargs -n 2
表示每次使用两个参数来执行命令。
-I
:指定替换字符串。此选项允许你在命令中指定一个占位符(如{}
),并用输入数据替换该占位符。例如,
xargs -I {} echo Hello, {}
会将标准输入的每一项替换{}
,并执行命令echo Hello, <item>
。
-d
:指定输入分隔符。默认情况下,
xargs
使用空白字符(空格、制表符、换行符)作为分隔符,使用-d
可以指定其他字符作为输入分隔符。
-p
:提示用户在执行每个命令前进行确认。例如,
xargs -p rm
在执行每个rm
命令之前都会要求用户确认。
-0
:与find
命令结合使用时,使用空字符(而不是换行符)作为分隔符,以正确处理文件名中包含空格和特殊字符的情况。例如,
find . -name "*.txt" -print0 | xargs -0 rm
用于删除所有.txt
文件,正确处理文件名中包含空格的情况。
示例:
基本用法:
echo "file1 file2 file3" | xargs rm
这个命令会删除
file1
、file2
和file3
文件。xargs
会将输入的数据(文件名)传递给rm
命令。使用
-n
每次传递指定数量的参数:echo "file1 file2 file3 file4" | xargs -n 2 rm
该命令每次将两个文件作为参数传递给
rm
命令,执行rm file1 file2
和rm file3 file4
。使用
-I
指定替换字符串:echo "file1 file2 file3" | xargs -I {} mv {} /path/to/destination/
该命令将每个文件移动到
/path/to/destination/
目录中。{}
是占位符,表示每次传递给mv
命令的文件名。与
find
命令结合使用:find . -name "*.txt" | xargs rm
find
命令查找当前目录及其子目录下所有.txt
文件,并将它们传递给xargs rm
命令进行删除。处理包含空格的文件名(使用
-0
):find . -name "*.txt" -print0 | xargs -0 rm
这个命令使用
-print0
和-0
选项,确保即使文件名中包含空格或其他特殊字符,xargs
仍能正确处理文件。
6. awk
(文本处理工具)
awk
是一种强大的文本处理工具,特别擅长按行、按字段处理文本数据。awk
可以用于筛选、格式化、统计和生成报告等任务。awk '条件 { 动作 }' 文件
- 条件:指定处理文本的条件。
- 动作:当条件满足时执行的操作,通常用于输出、修改或其他文本处理。
常用选项:
-F
:指定输入字段分隔符,默认情况下是空白字符(空格或制表符)。例如,awk -F ','
用于处理以逗号为分隔符的 CSV 文件。-v
:定义变量,例如,awk -v var=value '...'
用于在awk
脚本中传递外部变量。NF
:表示当前行的字段数。$1
,$2
, ...$n
:表示当前行的第 1、第 2、...、第 n 个字段。
示例:
打印每一行的第一个字段:
echo "apple orange banana" | awk '{print $1}'
打印文件的第 1 和第 3 个字段:
awk '{print $1, $3}' file.txt
使用分隔符:
echo "apple,orange,banana" | awk -F ',' '{print $2}'
筛选满足条件的行:
awk '$2 > 50 {print $1, $2}' file.txt
计算总和:
awk '{sum += $1} END {print sum}' file.txt
计算文件中所有第一列的数字之和。
7. grep
(文本搜索)
常用选项:
-E
:启用扩展正则表达式。-r
:递归搜索目录。-i
:忽略大小写。-v
:反向匹配,显示不匹配的行。-l
:只显示匹配的文件名。
grep -i "pattern" file.txt
8. sort
(排序)
常用选项:
-n
:按数字排序。-r
:逆序排序。-u
:去除重复的行。 也可使用uniq
sort -n file.txt
9. comm
(比较文件)
用于比较两个排序过的文件,显示它们的共同部分和差异部分。
常用选项:
-1
:不显示文件 1 中独有的部分。-2
:不显示文件 2 中独有的部分。-3
:不显示两个文件共有的部分。
comm file1.txt file2.txt
10. tr
(字符转换)
常用选项:
-d
:删除字符。-s
:压缩字符。
tr 'a-z' 'A-Z' # 将小写字母转换为大写字母
tr -s '[[:space:]]' '\n' # 根据空白字符分词
#[[:space:]]:一个 POSIX 字符类,匹配所有空白字符(如空格、制表符、换行符等)。
11. tar
(打包与压缩)
常用选项:
-c
:创建一个新的 tar 包。-x
:解包。-v
:显示处理过程。-f
:指定目标文件。-z
:通过 gzip 压缩或解压。-j
:通过 bzip2 压缩或解压。
tar -cvf 1101_log.tar 1101_log/*
tar -zxvf file.tar.gz
12. gzip
(压缩)
gzip 是一个用于压缩单个文件的工具,会删除原始文件并生成
.gz
压缩文件常用选项:
-d
:解压文件-r
:递归压缩目录中的所有文件(每个文件单独生成.gz
文件)-v
:显示压缩过程
gzip -d /tmp/test.gz
13. zip
和 unzip
(压缩和解压 .zip 文件)
zip:用于压缩文件和目录。
zip [选项] 压缩包 文件/目录
常用选项:
-r
:递归压缩-m
:不保留原文件-v
:显示过程
zip -r /tmp/test.zip /tmp/testdir
unzip:用于解压 .zip
文件。
常用选项**:
-d
:指定解压目录-v
:显示解压过程
unzip /tmp/test.zip -d ./tmp/test
14. split
(文件拆分)
用于将大文件拆分为小文件。
语法:
split [选项] 文件 前缀
常用选项:
-a
: 指定生成的小文件后缀的长度,默认为2-b
: 指定每个拆分文件的大小。单位可为b
(字节)、k
(千字节)、m
(兆字节)。-d
: 使用数字作为小文件的后缀,而不是字母,默认为字母-l
: 指定每个小文件的行数,默认为1000行-n
: 指定生成的小文件的数量,默认为2--verbose
: 显示拆分过程的详细信息
split -b 35m -d /path/to/bigfile bigfile_
将 bigfile
拆分为多个 35MB 的文件。
15. nohup
(后台运行)**
挂起信号简介:
挂起信号(SIGHUP, Signal Hang Up)是当用户注销或关闭终端时,系统发送给与该终端相关进程的信号。默认情况下,进程会因接收到挂起信号而终止。
nohup
命令会忽略挂起信号,使进程在终端关闭后仍然继续运行。
nohup 命令 [参数] &
常用选项:
&
:将命令放入后台运行,配合nohup
使用。nohup.out
:如果未指定输出文件,命令的标准输出和错误输出会默认重定向到nohup.out
文件中。
nohup python3 script.py > output.log 2>&1 &
16. ps
(进程状态)**
ps
命令用于查看当前系统的进程信息,包括正在运行的程序及其状态。
常用选项**:
-e
:显示所有进程(相当于ps -A
)。-f
:显示完整格式的信息,包括 UID、PPID、C、STIME 等。-ef
:组合选项,显示所有进程的详细信息。- `a`:显示与终端相关的所有进程。 - `u`:以用户为中心的格式显示。
ps -u $(whoami) # 查看当前用户的进程
ps -ejH # 查看进程的层级关系(父子关系)
17. kill
(终止进程)**
kill
命令用于向指定进程发送信号,常用于终止进程。kill [选项] 进程ID
常用选项:
-9
(SIGKILL):强制终止进程,不会保存数据或进行清理操作。-15
(SIGTERM):默认信号,优雅地终止进程,允许进程进行清理工作后退出。
信号编号 信号名称 说明 1 SIGHUP 重新加载进程配置(常用于守护进程)。 2 SIGINT 中断进程(相当于 Ctrl+C)。 9 SIGKILL 强制终止进程。 15 SIGTERM 优雅地终止进程(默认)。
kill -15 1234 # 优雅地终止进程
kill -9 1234 # 发送 `SIGKILL` 信号强制终止进程 ID 为 `1234` 的进程。
ps -ef | grep python | awk '{print $2}' | xargs kill -9 # 查找运行的 Python 进程并强制终止。
18. tcpdump
(抓包)
用于网络数据包的捕获和分析。可以使用Wireshark图形化分析抓包文件。
tcpdump [选项] [表达式]
常用选项:
-i
:指定网络接口。-w
:将输出保存到文件。-nn
:禁用域名解析。-v
:显示详细输出。-s0
:捕获完整的数据包。
tcpdump -w tcpdump.pcap -i docker0 # 在 `docker0` 网络接口上抓取数据包,并将其保存到 `tcpdump.pcap` 文件中。
tcpdump -i en0 host 127.0.0.1 -nnv -s0 -c 50 # 捕获到 `127.0.0.1` 主机的 50 个数据包,并显示详细信息。
19. top
(实时进程监控)
top
命令用于实时显示系统的进程信息,包括每个进程的 CPU 和内存使用情况,帮助用户了解系统资源的分配情况。常用选项:
-u
:显示某个用户的进程。-p
:监控特定的进程ID。-d
:设置更新频率(秒)。-n
:指定更新次数。
快捷键操作(在 top
命令运行时,你可以使用以下快捷键操作):
P
:按 CPU 使用率排序进程。M
:按内存使用率排序进程。T
:按时间/累计时间排序进程。q
:退出top
命令。h
:显示top
的帮助信息。k
:终止(kill)一个进程,输入进程的 PID。r
:改变进程的优先级(即调整nice
值)。u
:只显示某个用户的进程。n
:设置刷新间隔时间(默认是 3 秒)。c
:切换显示命令行或程序名称。
20. uptime
(系统运行时间)
uptime
命令显示系统的运行时间、当前时间、登录用户数量以及负载信息,是系统管理员常用的查看系统健康状况的工具。
21. w
(查看当前登录用户和系统活动)
w
命令用于显示当前系统登录用户的信息以及他们正在执行的活动。它可以提供有关每个用户的详细信息,如登录时间、正在运行的进程、终端等
22. sync
(同步磁盘)
sync
命令用于将文件系统的缓存数据写入磁盘,确保数据的持久性。该命令常用于系统关闭前,或者需要手动同步的场景。
sync; echo 3 > /proc/sys/vm/drop_caches # 同步缓存并清空缓存,包括 swap 空间。
25. du
(磁盘使用情况)
du
命令用于显示文件和目录的磁盘使用情况,可以帮助用户查看目录或文件占用的磁盘空间。du [选项] [文件/目录]
常用选项:
-h
:以易读的格式显示(例如 KB、MB)。-s
:显示总计,即只显示目录的总大小。-a
:显示所有文件和目录的使用情况。--max-depth=N
:只显示到指定深度的目录信息。
du -sh /home/user/
du -ah # 显示当前目录及其所有子目录和文件的磁盘使用情况。
du -h --max-depth=2 /home/user/ # 显示目录的前两级使用情况
26. df
(文件系统磁盘空间)
df
命令用于查看文件系统的磁盘空间使用情况,帮助了解磁盘空间的分配与使用情况。常用选项**:
-h
:以易读格式显示(例如 KB、MB)。-T
:显示文件系统类型。-a
:包括所有文件系统(即使它们的使用空间为 0)。-i
:显示 inode 的使用情况(文件系统中的索引节点)。
df -hT # 除了显示空间使用情况,还显示文件系统的类型(例如 ext4、xfs)。
df -hi # 显示所有文件系统的 inode 使用情况,帮助判断是否达到 inode 限制。
27. rpm
(RPM 包管理器)
用于安装和管理 RPM 包。
常用选项:
-i
:安装包。-v
:显示详细信息。-h
:显示安装进度。
rpm -ivh package.rpm # 安装名为 `package.rpm` 的软件包。
28. systemctl
(系统控制)
用于管理系统服务。
常用选项:
status
:查看服务状态。start
:启动服务。stop
:停止服务。enable
:设置服务开机自启动。disable
:禁用服务开机自启动。
systemctl start firewalld
systemctl stop firewalld
systemctl enable firewalld
systemctl disable firewalld
29. firewall-cmd
(Firewalld 管理)
用于管理 firewalld 防火墙。
常用选项:
--get-active-zones
:查看当前激活的防火墙区域。--add-port
:开放端口。--remove-port
:关闭端口。--set-default-zone
:设置默认区域。--add-rich-rule
:添加高级规则。
firewall-cmd --get-active-zones # 查看激活的域
firewall-cmd --get-default-zones # 查看默认的域
firewall-cmd --zone=public --list-ports # 查看开放的端口
firewall-cmd --zone=public --list-rich-rules # 查看添加的规则
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放 80 端口并设置为永久生效,
firewall-cmd --zone=trusted --remove-port=9201 # 关闭 9201 端口。
30. iptables
(防火墙规则管理)
管理 IP 防火墙规则。
常用选项:
-I
:插入新规则。-D
:删除规则。-L
:列出当前规则。-p
:指定协议。--dport
:指定目标端口。
iptables -I INPUT -s 10.150.3.11 -p tcp --dport 9201 -j ACCEPT
iptables -D INPUT -s 10.150.3.11 -p tcp --dport 9201 -j ACCEPT
# -m multiport --dport 9201,8500,15672