Linux常用命令
软件包管理
软件包及依赖查询网站
Ubuntu
1 | 查看依赖 |
Centos
1 | 查看依赖 |
dpkg
https://man.archlinux.org/man/dpkg
1 | dpkg --help |
apt-get、apt-cache、apt
https://man.archlinux.org/man/apt-get
https://man.archlinux.org/man/apt-cache
https://man.archlinux.org/man/apt
简单来说:
apt-get:处理包的安装、升级和移除,是传统的、面向脚本的工具。apt-cache:用于查询本地软件包信息(数据库),例如搜索、查看依赖。apt:是较新的前端工具,结合了apt-get和apt-cache的最佳功能,并提供了更美观、更友好的用户体验。
三个 APT 工具的详细对比
| 工具 | 主要功能/定位 | 典型命令示例 | 特点总结 |
|---|---|---|---|
apt-get |
核心操作:负责从软件源获取和安装软件包,处理实际的系统更改。传统工具,适合脚本编写。 | apt-get install <package> apt-get remove <package> apt-get update apt-get upgrade |
面向底层:输出信息相对简单,没有进度条。是 APT 工具家族中历史最悠久、功能最稳定的工具。 |
apt-cache |
查询操作:负责查询本地缓存的软件包数据库(Metadata)。它不会更改系统或下载软件包。 | apt-cache search <keyword> apt-cache show <package> apt-cache depends <package> |
信息获取:仅用于搜索和显示软件包信息、依赖关系等。是用户了解软件包情况的强大工具。 |
apt |
用户界面:结合了 apt-get 和 apt-cache 的常用功能。推荐日常使用的现代工具。 |
apt install <package> apt remove <package> apt update apt upgrade apt search <keyword> |
用户友好:提供美观的进度条、颜色高亮和更简洁的输出。它不是要取代 apt-get,而是提供一个更好的用户界面。 |
rpm
https://man.archlinux.org/man/rpm
1 | rpm -ql openssh-server # 列出软件包中的文件。显示指定软件包在系统中安装的所有文件和目录的完整路径列表。 |
dnf/yum
https://man.archlinux.org/man/extra/dnf/dnf4
https://man.archlinux.org/man/extra/dnf5/dnf5
dnf 是 yum 的改进和取代者。
1 | dnf --version |
查看系统安装了哪些软件包
查看软件包依赖了哪些包
查看软件包依赖了哪些动态库
查看软件包安装了哪些文件
查看文件来自哪个软件包
iptables
1 | REDIRECT 是 DNAT 的一种特例,用于将流量“重定向”到本机的某个端口。它会把数据包的 目标 IP 改为本机 IP,并可选地修改目标端口。方向:外部 → 本机。常用场景:本机透明代理、流量重定向/端口转发、本机端口劫持。 |
流编辑器——sed
Sed 是一款非常强大且常用的 流编辑器(Stream Editor),非常适合做批量的替换、删除、插入、打印等文本变换。
简介与工作原理
- 流编辑器: Sed 一次只处理一行内容。
- 工作空间: Sed 处理文件时,会将当前处理的行读入一个临时缓冲区,称为 “模式空间” (pattern space)。
- 处理流程: Sed 命令会对模式空间中的内容进行处理,处理完成后,默认会将模式空间的内容输出到标准输出(屏幕)。接着清空模式空间,读取下一行,重复上述过程,直到文件末尾。
- 非破坏性: 默认情况下,Sed 不会修改原文件内容,而是将结果输出到标准输出,除非使用重定向或特定的选项(如
-i)来保存更改。
sed 常用语法格式
最基本的 Sed 命令格式如下:
1 | sed [选项] 'sed命令' 文件名 |
常用选项 (Options)
| 选项 | 作用 |
|---|---|
-n |
静默模式(或安静模式)。默认 Sed 会打印所有行,使用此选项后,只有被显式命令(如 p 打印命令)处理的行才会被打印。 |
-e |
允许多个 Sed 命令/脚本。例如:sed -e 'command1' -e 'command2' file |
-f |
指定 Sed 脚本文件。例如:sed -f script.sed file |
-i |
直接修改原文件。这个选项非常重要,但使用时要小心,最好先备份文件。 |
地址(Address)
Sed 命令可以指定一个地址或一个地址范围,以限制命令的作用范围。
| 地址格式 | 作用 | 示例 |
|---|---|---|
| 无地址 | 作用于文件中的所有行。 | 's/old/new/' |
| 单行号 | 作用于指定的行。 | '5d' (删除第 5 行) |
$ |
代表文件的最后一行。 | '$d' (删除最后一行) |
/regex/ |
作用于匹配正则表达式的行。这是查找命令 | '/error/d' (删除包含 “error” 的行) |
| 地址范围 | 作用于从起始地址到结束地址之间的行(包含边界)。 | |
addr1,addr2 |
1,5d (删除第 1 到 5 行) |
|
addr1,/regex/ |
3,/end/d (删除第 3 行到第一个匹配 /end/ 的行) |
|
/regex1/,/regex2/ |
/start/,/end/d (删除第一个匹配 /start/ 到第一个匹配 /end/ 的行) |
sed 常用命令 (Commands)
sed 命令通常紧跟在地址后面。
替换:s (substitute)
这是 sed 最常用、最强大的功能。
- 格式:
[地址]s/旧字符串/新字符串/标志 - 示例:
s/foo/bar/:将每行中第一个foo替换为bar。s/foo/bar/g:全局替换,将行中所有foo替换为bar。s/foo/bar/p:打印发生替换的行。通常配合-n选项使用。s/foo/bar/w output.txt:将发生替换的行写入output.txt文件。s#/#\\/#g:当替换内容或目标字符串中包含/时,可以使用其他分隔符,例如#。详见下文sed 命令分隔符
删除:d (delete)
- 格式:
[地址]d - 示例:
3d:删除第 3 行。1,5d:删除第 1 到 5 行。/^#/d:删除以#开头的行 (常用于删除注释行)。'/^$/d':删除所有空行。
打印:p (print)
- 格式:
[地址]p - 用途: 配合
-n选项,只打印指定的行或匹配的行。 - 示例:
sed -n '5p' file:只打印第 5 行。sed -n '/config/p' file:只打印包含config关键字的行。sed -n '1,10p' file:只打印前 10 行。
追加/插入/更改:a / i / c
a(append): 在匹配行之后追加新文本。- 示例:
'/error/a\--- An Error Occurred ---'(在包含error的行后面追加文本)
- 示例:
i(insert): 在匹配行之前插入新文本。- 示例:
'1i\# This is a header'(在文件第一行前插入一行)
- 示例:
c(change): 用新文本替换匹配行或匹配范围的所有内容。- 示例:
'3c\Replacement Text'(用新文本替换第 3 行)
- 示例:
注意:
a、i和c命令后的文本必须换行书写(在命令行中通常用\来转义换行符,或者直接跟在命令后,用\隔开)。
sed 命令分隔符
分隔符(delimiter)在 sed 命令中主要用于 替换命令 和 查找命令 / ,尤其是涉及到正则表达式的部分。默认是 /。
替换命令 (s)
这是最常见的使用自定义分隔符的场景。
- 基本格式:
s/查找模式/替换字符串/标志 - 使用自定义分隔符的格式:
sX查找模式X替换字符串X标志- 这里的
X可以是任何非空格、非换行符的单个字符。
- 这里的
| 示例命令 | 分隔符 | 场景说明 |
|---|---|---|
s#/var/log#/tmp/log#g |
# |
当查找或替换的内容中包含 / 时(例如文件路径),使用 # 可以避免对 / 进行转义。 |
s@^#@ @ |
@ |
当查找或替换的内容中包含 # 时(例如配置文件中的注释),可以使用 @。 |
查找/地址命令 (/regex/)
分隔符也可以用于定义地址(即指定 Sed 命令作用的行范围)。当您需要查找的模式中包含默认分隔符 / 时,可以自定义分隔符。
- 基本格式:
/正则表达式/命令 - 使用自定义分隔符的格式:
\X正则表达式X命令- 注意: 在自定义分隔符前需要加上反斜杠
\。
- 注意: 在自定义分隔符前需要加上反斜杠
| 示例命令 | 分隔符 | 场景说明 |
|---|---|---|
/\//d |
/ (默认) |
删除包含默认分隔符 / 的行,但需要转义 (\/)。 |
sed '\#/home/#d' file |
# (自定义) |
删除包含 /home/ 路径的行,无需转义路径中的 /,但需在开头用 \ 声明自定义分隔符。 |
进阶示例
组合多个命令
使用 -e 选项或分号 ;:
1 | 删除空行,并将所有的 'old' 替换为 'new' |
括号分组和后向引用
在替换命令 s 中,可以使用括号 () 对匹配模式的一部分进行分组,并在替换字符串中用 \1, \2, … 进行引用。注意: 括号需要用 \ 进行转义,即 \( 和 \)。
- 示例: 交换行中两个单词的位置。
1 | 假设一行内容是 "apple banana" |
\(apple\)匹配并捕获第一个单词,标记为\1。\(banana\)匹配并捕获第二个单词,标记为\2。- 替换字符串
\2 \1将它们的位置交换。
文件定位
whereis命令 、 locate/slocate命令 、 find命令 、 which命令 、 rpm命令
以 nginx 安装目录为例:
1 | [root@localhost ~]# whereis nginx |
网络状态
1 | yum install -y lsof |
进程状态
1 | [root@localhost ~]# ps aux |
输出头(标题)
在使用Linux命令时,如果命令中有管道 | ,则输出的信息中,头(标题)信息丢失,要想看每一列代表什么意思很不方便。
例如 ps auxw:
1 | ps axuw |
再加上管道符后
1 | ps axuw | grep redis |
可以看到头(标题)已经丢失。
一个简单的办法,通过 2 条命令叠加,获取头和内容:
1 | ps axuw | head -1;ps axuw | grep redis |
也就是先用命令本身加 | head -1 取到头(标题),然后再使用该命令输出内容,两者叠加输出即得到所要结果。
排序——sort
按列排序,数字大的在前:
1 | ps auxw | sort -rnk 2 |
该例子,将第 2 列进行排序,最大的数排前面。
若只想看前10条的内容:
1 | ps auxw | sort -rnk 2 | head -10 |
将实际内存消耗最大的10个进程显示出来:
1 | ps auxw | head -1; ps auxw | sort -rnk 6 | head -10 |
统计——wc
切分——cut
去重——uniq
强大的文本分析命令——awk
1 | ps -ef | grep mar-service.jar:60002 | grep -v grep | awk '{ print }' |
服务管理
systemctl命令 :是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
1 | 查看所有可用的单元文件 |
vim 中查找和替换
vi / vim 键位图: https://www.runoob.com/linux/linux-vim.html
https://harttle.land/2016/08/08/vim-search-in-file.html
https://blog.csdn.net/ballack_linux/article/details/53187283
清空历史命令
.bash_history 默认可记录 500 条历史命令。
只有在正常退出当前 shell 时,在当前 shell 中运行的命令才会保存至 .bash_history 文件中。
1 | [root@localhost ~]# history 10 # 显示最近使用的10条历史命令 |
若想在每次登录后都清空历史记录,可以在登录后或登出前执行 rm -rf ~/.bash_history 即可。
Wget 和 cURL
百科: Wget 、 wget命令 、 cURL 、 curl命令
wget命令 用来从指定的URL下载文件。
curl命令 是一个利用URL规则在命令行下工作的文件传输工具。curl URL 默认将下载文件输出到stdout,将进度信息输出到stderr(默认也是终端),可以使用 -O(使用原文件名)或 -o(指定输出文件名)指定输出位置。curl支持更多的协议,还支持cookies、认证、限速、文件大小等特征。
1 | [root@localhost ~]# wget -c URL |
删除文件/文件夹
1 | rm -rf # 文件或文件夹名 |
解压缩
tar
1 | 解压 |
zip
1 | 安装zip、unzip应用 |
7z
支持 7Z,ZIP,Zip64,TAR,RAR,CAB,ARJ,GZIP,BZIP2,CPIO,RPM,ISO,DEB 压缩文件格式。
1 | 安装 |
nohup
相关链接: 百科 、 Linux nohup 命令 - 菜鸟 、 shell中的特殊字符大全
nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。 如果不将 nohup 命令的输出重定向,输出将追加到当前目录的 nohup.out 文件中。
nohup command >/dev/null 2>&1 & 意思就是,将command保持在后台运行,并且将输出的日志忽略。
1 | # 启动java服务 |