Linux 常用工具及命令
包管理器(dnf, yum, apt, apt-get)
Red Hat 系(如 CentOS 8+、Fedora):使用 dnf,因其性能更优且逐步取代 yum。若需兼容旧版本,可继续使用 yum(但部分功能已过时)。
Debian 系(如 Ubuntu、Debian):使用 apt,命令更简洁且功能全面。apt 命令被设计为对用户更加友好的 apt-get 替代方案,在旧版本或需精确控制时,使用 apt-get。
总结:
- Red Hat 系 使用示例:dnf update && dnf install vim -y
- Debian 系 使用示例:apt update && apt install vim -y
注意:本文档以 Red Hat 系 环境为例,后续使用 dnf 命令。如果是 Debian 系 环境,请在使用过程中自行替换为 apt 命令。
查看发行版: cat /etc/os-release
[root@localhost ~]# cat /etc/os-release
NAME="Huawei Cloud EulerOS"
VERSION="2.0 (x86_64)"
ID="hce"
VERSION_ID="2.0"
PRETTY_NAME="Huawei Cloud EulerOS 2.0 (x86_64)"
ANSI_COLOR="0;31"
查看系统内核: uname -a
uname -a
查看 CPU 信息
# 以更易读的格式展示CPU架构、核心数、线程数、虚拟化技术等信息,适合快速概览
lscpu
关机与重启命令
# 重启命令
reboot
# 立刻重启(root用户使用)
shutdown -r now
# 过10分钟自动重启(root用户使用)
shutdown -r 10
# 在时间为20:35时候重启(root用户使用)
shutdown -r 20:35
# 如果是通过shutdown命令设置重启的话,可以用 shutdown -c 命令取消重启
# 取消重启
shutdown -c
# 关机命令
# 立刻关机
poweroff
# 立刻关机
halt
#立刻关机(root用户使用)
shutdown -h now
# 10分钟后自动关机
shutdown -h 10
# 如果是通过shutdown命令设置关机的话,可以用 shutdown -c 命令取消关机
# 取消关机
shutdown -c
find
基本语法
find [搜索路径] [匹配条件] [执行操作]
# 示例:
find / -iname "*nginx*"
- 搜索路径:默认当前目录(.),可指定 /(根目录)或其他路径。
- 匹配条件:支持文件名、类型、时间、权限等筛选。
- 执行操作:如打印(默认)、删除、修改权限等。
核心参数解析
- 文件名/路径匹配
- -name "*.txt":按名称匹配(区分大小写)。
- -iname "*.jpg":忽略大小写的名称匹配。
- -path "/var/log/*":按完整路径匹配。
- 文件类型筛选
- -type f:普通文件;-type d:目录;-type l:符号链接。
- 其他类型:b(块设备)、c(字符设备)、p(管道文件)、s(套接字)。
检查特定软件是否已安装
使用 dnf/yum 命令查询
# 查看已安装列表并筛选
dnf list installed | grep 软件名
# 或使用yum(CentOS 8中yum是dnf的别名)
yum list installed | grep 软件名
若显示结果包含软件包名称和版本号,则表示已安装。
直接使用 dnf info 查询软件包信息
dnf info 软件名
若返回软件包详情(如版本、仓库来源等),说明已安装;若显示"No matching Packages",则未安装。
使用 rpm 命令查询
# 检查特定 rpm 包是否安装
rpm -q 软件名
rpm -qa | grep 软件名
返回软件包全名表示已安装,显示"package ... is not installed"则未安装。
查看软件包文件路径
# 检查特定rpm包是否安装
rpm -ql 软件名
若已安装,会列出该软件所有文件的安装路径。
源码/手动安装的软件检查
如果软件通过源码编译安装(如.tar.gz 或.tar.bz2 格式):
# 查找可执行文件
# 查询环境变量路径
which 软件名
# 搜索系统标准路径
whereis 软件名
# 全盘搜索文件名
find / -name 软件名
通常在/usr/local/bin或/opt目录下。
检查进程或服务状态
# 查看服务是否运行
systemctl status 服务名
# 检查进程是否存在
ps -ef | grep 软件名 | grep -v grep
总结建议
- 优先使用 dnf/yum 命令,适合通过官方仓库安装的软件。
- rpm 命令适合确认 rpm 包是否安装及文件路径。
- 源码安装的软件需结合文件搜索和进程检查。
curl
curl 是一个非常实用的、用来与服务器之间传输数据的工具;支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl 设计为无用户交互下完成工作;
curl 提供了一大堆非常有用的功能,包括代理访问、用户认证、ftp 上传下载、HTTP POST、SSL 连接、cookie 支持、断点续传...。
# 安装
yum -y install curl
# 语法
curl [options] [URL...]
# 查看帮助
curl -h
# 下载页面
curl -o index.html https://baidu.com
# 下载文件并显示简单进度条
curl -# -o centos6.8.iso http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
#继续完成上次终止的未完成的下载
curl -# -o centos6.8.iso -C - http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
wget
wget 命令用来从指定的 URL 下载文件。wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget 会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
# 安装
yum -y install wget
# 语法
wget [options] [URL...]
# 查看帮助
wget -h
# 下载指定文件到当前文件夹
wget http://abcd.com/aaa.zip
# 指定保存名字
wget -O wordpress.zip http://abcd.com/aaa.zip
# 断点续传
wget -c http://abcd.com/aaa.zip
# 后台下载
wget -b http://abcd.com/aaa.zip
# FTP下载
wget ftp-url
wget --ftp-user=USERNAME --ftp-password=PASSWORD url
OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
解决该问题可以使用以下参数,比如:
wget --no-cookie --no-check-certificate https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
echo
# 覆盖写入内容到文件
echo "admin=123456" > test.properties
# 追加写入内容到文件
echo "admin=123456" >> test.properties
cat
cat 写入内容到文件,需要文件提前创建,如果文件不存在,也可直接使用 tee 命令。
>
:覆盖写入文件。>>
:追加写入文件。<<-EOF
:Here Document 分界符,允许分界符前有制表符缩进(推荐)。<<EOF
:Here Document 分界符,不允许分界符前有制表符缩进。EOF
:结束符,需单独成行,前导空格/制表符会被忽略
覆盖写入
cat > a.txt <<-EOF
Hello, Alice!
EOF
追加写入
cat >> a.txt <<-EOF
Hello, Alice!
EOF
在最前面插入
# 1. 直接插入
{ echo "文本 1"; echo "文本 2"; cat a.txt; } > a.txt.tmp && mv a.txt.tmp test.txt
# 2. 利用临时文件多行插入
# 先创建新文件,并追写入内容
touch a.txt a.txt.tmp
cat > a.txt.tmp <<-EOF
Hello, Alice!
EOF
# 然后把源文件追加到临时文件,最后保存临时文件为源文件
cat a.txt >> a.txt.tmp && mv a.txt.tmp a.txt
tee
cat 和 tee 命令都能追加文件,但 cat 写入内容到文件需要文件提前创建,tee 则不需要。
基本语法
# tee命令的基本语法如下:
tee [OPTION]... [FILE]...
OPTION:一些控制tee行为的选项。
FILE:指定输出的文件。
tee命令支持多种选项,下面是一些常用选项的解释:
-a:追加到文件而不是覆盖。使用该选项,可以将输出内容追加到指定文件的末尾。
-i:交互式地提示覆盖已存在文件。当指定的输出文件已存在时,使用该选项会询问用户是否覆盖文件。
-p:保持管道的性能,不输出到终端。在某些情况下,使用该选项可以提高性能。
基本用法
# 最简单的tee用法是将标准输入的内容输出到文件并同时显示在终端:
echo "Hello, Linux!" | tee output.txt
这个例子将字符串"Hello, Linux!"写入名为output.txt的文件中,并在终端上显示。
直接覆盖
tee /opt/output.txt <<-EOF
# Define Admin
admin=1qaz2wsx,1
EOF
追加内容
# 如果希望将内容追加到文件而不是覆盖原有内容,可以使用-a选项:
echo "Appended Text" | tee -a output.txt
# 追加多行(通过 | 管道传递给 tee 命令)
cat <<-EOF | tee -a output.txt
Line 1
Line 2
EOF
多个输出文件
# tee支持同时输出到多个文件,只需在命令中指定多个文件名即可:
echo "Data" | tee file1.txt file2.txt file3.txt
结合其他命令
# tee可以与其他命令结合使用,例如将命令的标准输出同时传递给其他命令和保存到文件:
ls -l | tee file_list.txt | grep "example"
这个例子中,ls -l的输出被传递给tee,然后分别写入file_list.txt和通过grep过滤包含"example"的行。
使用管道传递多个命令
# 可以使用管道将多个命令的输出传递给tee:
cat some_file.txt | grep "keyword" | tee output.txt | sed 's/keyword/replace/' > final_output.txt
这个例子中,cat命令读取文件内容,grep过滤包含关键词的行,tee将结果写入output.txt,最后使用sed替换关键词并将最终结果保存到final_output.txt。
vi 和 vim
安装
# 需要 root 用户
# 如果是 docker 镜像内,则需要指定root用户:
# docker exec -it --user root 【容器名称或id】 /bin/bash
dnf update
# 安装 vim 后也就有 vi 了
dnf install vim -y
语法
# 打开文件
vim [fileName]
Vim 是从 vi 发展出来的一个文本编辑器。
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符。比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。
以下是常用的几个命令:
- i 切换到输入模式,以输入字符。
- x 删除当前光标所在处的字符。
- : 切换到底线命令模式,以在最底一行输入命令。
- 若想要编辑文本:启动 Vim,进入了命令模式,按下 i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下 i 就进入了输入模式。
在输入模式中,可以使用以下按键:
- 字符按键以及 Shift 组合,输入字符
- ENTER,回车键,换行
- BACK SPACE,退格键,删除光标前一个字符
- DEL,删除键,删除光标后一个字符
- 方向键,在文本中移动光标
- HOME/END,移动光标到行首/行尾
- Page Up/Page Down,上/下翻页
- Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
- ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
- q 退出程序
- w 保存文件
- 按 ESC 键可随时退出底线命令模式。
详细参考:https://www.runoob.com/linux/linux-vim.html
yum-config-manager
# 安装
yum -y install yum-utils
# 使用示例添加 docker repo 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 或者上面命令的功能也可以如下方式实现
cd /etc/yum.repos.d
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
lrzsz(上传/下载文件)
yum install lrzsz -y
#上传文件
#进入要上传文件目的地目录,执行如下命令
rz -y
# 之后根据ssh工具(XShell/MobaXterm等)的不同显示选择框,选择要上传的文件,确定即可
#文件下载
sz 文件名
# 之后根据ssh工具(XShell/MobaXterm等)的不同显示选择框,选择要下载的目标目录,确定即可
zip 和 unzip
# 需要 root 用户,如果是 docker 镜像内,则需要指定root用户:docker exec -it --user root 【容器名称或id】 /bin/bash
dnf update
dnf install zip unzip -y
# 解压到指定目录
unzip dist.zip -d /opt/nginx
unzip -q dist.zip -d /opt/nginx
mv dist html
p7zip(7z 压缩工具)
[root@localhost /]# yum install -y p7zip*
安装 unar 来解决解压 zip 中文乱码
yum install unar -y
unar xxx.zip
mv xxx html
# 其他(旧版本支持,新版本可以打补丁包)
# 也有可能中文乱码是因为系统没有安装中文语言包,此时参考下一小节安装。
unzip -O GBK *.zip
unzip -O CP936 *.zip
安装并中文语言与中文输入法
# 1. 查看当前字符集。如果没有就需要安装 langpacks-zh_CN 包
[root@localhost /]# locale
# 查看有没有zh_CN.utf8
[root@localhost /]# locale -a |grep CN
# 2. 安装 langpacks-zh_CN
[root@localhost /]# yum install -y langpacks-zh_CN
# 3. 配置中文环境,并立刻生效
[root@localhost /]# vi /etc/locale.conf
# 添加或修改依以下内容:
LANG=zh_CN.UTF-8
# 保存并退出。
# 4. 不重启的情况下使配置立即生效。
[root@localhost /]# source /etc/locale.conf
# 5. 检查中文是否已经正常
[root@localhost /]# date
2022年 12月 03日 星期五 18:12:25 CST
安装 SCIM 中文输入法
[root@localhost /]# yum install "@Chinese Support"
ulimit -a:修改文件最大打开数(文件描述符)
# 查看系统默认值
# 只查看文件打开数限制
ulimit -n
# 查看所有( open files 默认=1024;max user processes 默认= 1024)
ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 61963
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 61963
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
修改大一点:
vi /etc/security/limits.conf
# 添加以下内容(如下示例:针对root用户,如果需要其他用户,自行再添加几行):
root soft nproc 65536
root hard nproc 65536
root soft nofile 65536
root hard nofile 65536
然后保存。使用 exit 命令退出终端,然后重新登录即可生效。
重新登录后,再次使用 ulimit -a 命令查询,检查是否已经生效。
端口占用
根据端口号,查询进程名称和进程 ID
[root@localhost ~]# netstat -tunlp | grep 3306
tcp6 0 0 :::3306(端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)
根据进程名称,查询进程 ID 和端口号
[root@localhost ~]# netstat -tunlp | grep mysqld
tcp6 0 0 :::33060(端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)
tcp6 0 0 :::3306 (端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)
根据进程 ID,查询进程名称和端口号
[root@localhost ~]# netstat -tunlp | grep 29520
tcp6 0 0 :::33060(端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)
tcp6 0 0 :::3306 (端口号) :::* LISTEN 29520/mysqld(进程号/进程名称)
命令说明:
netstat -tunlp
-t: 显示 TCP 连接
-u: 显示 UDP 连接
-n: 显示数字地址
-l: 列出状态是 LISTEN 的统计信息
-p: 显示程序的 PID 和名称
根据进程 ID 获取对应进程的信息
[root@localhost ~]# ps -u --pid 29521
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 29521 1.0 7.3 9992192 1161300 ? Sl 14:48 1:29 java -jar demo.jar