Linux相关
[TOC]
常用命令
CentOS 作为一款广泛使用的 Linux 发行版,掌握其基本命令是系统管理和日常操作的基础。以下是按类别整理的常用命令,涵盖文件操作、系统管理、网络配置等方面。
一、文件与目录操作
| 命令 | 功能描述 | 示例 |
|---|---|---|
ls |
列出目录内容 | ls -l(详细列表)、ls -a(显示隐藏文件) |
cd |
切换目录 | cd /home(进入/home目录)、cd ..(返回上一级) |
pwd |
显示当前工作目录 | pwd |
mkdir |
创建目录 | mkdir test(创建test目录)、mkdir -p a/b/c(递归创建多级目录) |
rmdir |
删除空目录 | rmdir test |
touch |
创建空文件或修改文件时间 | touch file.txt |
cp |
复制文件/目录 | cp file1 file2(复制文件)、cp -r dir1 dir2(复制目录) |
mv |
移动/重命名文件/目录 | mv file1 dir1(移动文件)、mv oldname newname(重命名) |
rm |
删除文件/目录 | rm file.txt(删除文件)、rm -rf dir(强制删除目录及内容) |
cat |
查看文件内容(适合小文件) | cat /etc/hosts |
more |
分页查看文件内容(空格翻页,q退出) | more /var/log/messages |
less |
高级分页查看(支持上下滚动、搜索) | less /etc/passwd |
head |
查看文件前几行 | head -n 10 file.txt(前10行) |
tail |
查看文件后几行 | tail -n 5 file.txt(后5行)、tail -f /var/log/nginx/access.log(实时监控日志) |
ln |
创建链接 | ln -s /path/to/file linkname(创建软链接) |
find |
查找文件/目录 | find / -name "*.txt"(全局查找txt文件) |
grep |
文本搜索 | grep "error" /var/log/messages(查找包含error的行) |
二、系统管理
| 命令 | 功能描述 | 示例 |
|---|---|---|
reboot |
重启系统 | reboot |
shutdown |
关机 | shutdown -h now(立即关机)、shutdown -h 20:00(20:00关机) |
poweroff |
关闭电源 | poweroff |
systemctl |
系统服务管理(CentOS 7+) | systemctl start nginx(启动服务)、systemctl enable nginx(开机自启) |
service |
服务管理(兼容旧版本) | service httpd restart(重启Apache) |
ps |
查看进程 | ps aux(显示所有进程)、ps -ef | grep java(查找Java进程) |
top |
实时监控进程资源占用(q退出) | top |
htop |
增强版进程监控(需安装) | htop |
kill |
终止进程 | kill 1234(通过PID终止)、kill -9 1234(强制终止) |
free |
查看内存使用情况 | free -h(人类可读格式) |
df |
查看磁盘空间 | df -h(显示各分区使用情况) |
du |
查看目录/文件大小 | du -sh /home(显示/home总大小) |
uname |
查看系统信息 | uname -a(显示完整信息) |
hostname |
查看/设置主机名 | hostname(查看)、hostname newname(临时设置) |
date |
查看/设置系统时间 | date(查看)、date -s "2024-08-27 15:30:00"(设置) |
三、用户与权限管理
| 命令 | 功能描述 | 示例 |
|---|---|---|
useradd |
创建用户 | useradd testuser |
passwd |
设置用户密码 | passwd testuser(为testuser设置密码) |
userdel |
删除用户 | userdel testuser(仅删除用户)、userdel -r testuser(删除用户及家目录) |
groupadd |
创建用户组 | groupadd testgroup |
usermod |
修改用户属性 | usermod -g testgroup testuser(将用户加入组) |
chown |
修改文件所有者 | chown testuser:testgroup file.txt(修改所有者和所属组) |
chmod |
修改文件权限 | chmod 755 file.sh(权限数字表示)、chmod u+x file.sh(给所有者加执行权) |
su |
切换用户 | su - root(切换到root,-表示加载环境变量) |
sudo |
以管理员权限执行命令 | sudo yum install nginx(需配置sudoers) |
四、软件包管理(yum/dnf)
CentOS 7 主要使用 yum,CentOS 8 及以上推荐 dnf(yum的升级版,命令兼容)
| 命令 | 功能描述 | 示例 |
|---|---|---|
yum install |
安装软件包 | yum install nginx |
yum remove |
卸载软件包 | yum remove nginx |
yum update |
更新软件包 | yum update(更新所有)、yum update nginx(更新指定软件) |
yum search |
搜索软件包 | yum search python3 |
yum list |
列出软件包 | yum list installed(已安装)、yum list available(可安装) |
yum clean all |
清理缓存 | yum clean all |
yum makecache |
生成缓存 | yum makecache(加速后续安装) |
五、网络操作
| 命令 | 功能描述 | 示例 |
|---|---|---|
ip addr |
查看网络接口信息 | ip addr(CentOS 7+推荐) |
ifconfig |
查看/配置网络(需安装net-tools) | ifconfig eth0(查看eth0接口) |
ping |
测试网络连通性 | ping www.baidu.com |
curl |
发送HTTP请求或下载文件 | curl http://www.baidu.com、curl -O http://example.com/file.tar.gz |
wget |
下载文件 | wget http://example.com/file.tar.gz |
netstat |
查看网络连接(需安装net-tools) | netstat -tuln(查看监听端口) |
ss |
查看网络连接(CentOS 7+推荐) | ss -tuln |
firewall-cmd |
防火墙管理(CentOS 7+) | firewall-cmd --zone=public --add-port=80/tcp --permanent(开放80端口)、firewall-cmd --reload(重载配置) |
六、压缩与解压
| 命令 | 功能描述 | 示例 |
|---|---|---|
tar |
打包/解压tar文件 | tar -cvf archive.tar dir/(打包)、tar -xvf archive.tar(解压) |
tar.gz |
压缩/解压gzip格式 | tar -zcvf archive.tar.gz dir/(压缩)、tar -zxvf archive.tar.gz(解压) |
tar.bz2 |
压缩/解压bzip2格式 | tar -jcvf archive.tar.bz2 dir/(压缩)、tar -jxvf archive.tar.bz2(解压) |
unzip |
解压zip文件 | unzip file.zip |
zip |
压缩为zip文件 | zip file.zip file1 file2 |
七、其他常用命令
| 命令 | 功能描述 | 示例 |
|---|---|---|
man |
查看命令手册 | man ls(查看ls命令帮助) |
history |
查看命令历史 | history、!100(执行历史中第100条命令) |
clear |
清屏 | clear(或按Ctrl+L) |
alias |
设置命令别名 | alias ll='ls -l'(临时生效,需写入.bashrc永久生效) |
echo |
输出文本 | echo "Hello World"、echo $PATH(显示环境变量) |
df |
查看磁盘分区使用情况 | df -h |
mount |
挂载文件系统 | mount /dev/sdb1 /mnt(挂载分区到/mnt) |
umount |
卸载文件系统 | umount /mnt |
掌握这些命令可以满足CentOS日常管理的大部分需求。对于复杂操作,可通过 man 命令名 查看详细手册,或结合管道符 | 进行命令组合(如 ps aux | grep java)提高效率。
业务操作步骤
1. 添加环境变量
-
/etc/profile对所有用户生效,但需要重新登录(或source /etc/profile)才能加载新配置。 -
添加用户级别的环境变量,保证每次登录系统时就能自动读取。
-
目标文件:(用户级配置文件,每次打开终端都会加载)
/root/.bashrc
-
添加内容:
1 2
export SDKPATH=/home/work/tklinuxsdk export CMASDKPATH=/home/work/cma-sdk
-
验证配置是否生效:
1 2 3 4
[root@hansb /]# echo $SDKPATH /home/work/tklinuxsdk [root@hansb /]# echo $CMASDKPATH /home/work/cma-sdk
-
【占位】
添加环境变量后,在项目的 CMakeList.txt 中还是无法识别的话,重启一下 vagrant 就可以了:
vagrant reload
2. 生成 SSH 密钥
在 Linux 系统上生成 SSH 密钥对(用于免密登录等场景)的步骤如下:
1)打开终端
通过快捷键 Ctrl + Alt + T 打开终端,或在应用菜单中找到“终端”程序。
2)生成 SSH 密钥对
在终端中输入以下命令,按提示操作:
1
ssh-keygen -t ed25519
-
-t ed25519:指定密钥算法为 Ed25519(目前推荐的高强度算法,兼容性较好)。
若系统不支持 Ed25519(较旧系统),可改用 RSA 算法:1
ssh-keygen -t rsa -b 4096
(
-b 4096表示密钥长度为 4096 位,安全性更高)
3)按提示设置密钥参数
执行命令后会出现以下提示,按需求选择:
-
密钥保存路径:默认保存在
~/.ssh/id_ed25519(Ed25519)或~/.ssh/id_rsa(RSA),直接按回车使用默认路径即可。若需自定义路径,输入路径后回车(例如
~/.ssh/my_key)。 -
密钥密码(可选):
-
直接按回车:不设置密码(方便但安全性略低)。
-
输入密码并回车:设置密钥保护密码(每次使用密钥时需输入,更安全)
(输入密码时终端无显示,正常输入即可)
-
4)生成成功
完成后,终端会显示密钥生成成功的信息,并提示公钥和私钥的保存路径:
- 私钥:
~/.ssh/id_ed25519(或自定义路径),必须妥善保管,不可泄露。 - 公钥:
~/.ssh/id_ed25519.pub(或自定义路径 +.pub),可公开分享(如配置到服务器的~/.ssh/authorized_keys中实现免密登录)。
5)查看公钥内容(可选)
若需复制公钥内容(例如配置到远程服务器),可通过以下命令查看:
1
2
3
cat ~/.ssh/id_ed25519.pub # 对应 Ed25519 算法
# 或
cat ~/.ssh/id_rsa.pub # 对应 RSA 算法
复制输出的全部内容即可使用。
至此,SSH 密钥对生成完成。后续可通过公钥配置实现与远程服务器、代码仓库(如 GitHub)等的免密交互。
3. 配置 go 环境
见文章: 在centos中配置go开发环境
文本编辑器
常见工具对比
| 编辑器 | 核心定位 | 操作逻辑 | 关键差异 | 适用人群 |
|---|---|---|---|---|
| nano | 新手友好·临时快速编辑 | 无模式,直接编辑+底部快捷键提示 | 学习成本最低,功能极简,无高级特性,依赖快捷键 | 新手、临时改配置文件、不想记复杂命令的用户 |
| vi | 经典兼容·极简环境必备 | 模式化(命令/插入),无扩展功能 | 系统预装率100%,功能精简稳定,无语法高亮/多窗口 | 极简系统(如最小化Linux)、兼容老环境 |
| vim | 程序员利器·高效全能 | 模式化(命令/插入/可视)+插件扩展 | 兼容vi,支持语法高亮、宏录制、分屏、插件生态 | 程序员、编辑大型文件、追求高效文本处理 |
| Neovim | vim现代增强·生态更灵活 | 完全兼容vim操作,支持Lua扩展 | 启动更快、异步任务处理更强、内置LSP支持(代码补全) | vim用户升级、喜欢定制化的程序员 |
| micro | nano增强·新手进阶 | 无模式,底部快捷键提示+鼠标支持 | 比nano多语法高亮、多光标、分屏,操作依旧简单 | 不想学vim模式、需要更强功能的新手/轻度开发 |
| Helix | 现代命令行·无模式革新 | 基于选择-操作逻辑,无vim模式 | 内置LSP、语法高亮、多光标,学习成本低于vim | 厌倦vim模式、追求现代命令行编辑体验的用户 |
| ed | 历史遗留·脚本自动化 | 纯命令行(无可视化界面) | 最古老编辑器,仅支持命令操作,无交互编辑 | 极端极简环境、脚本自动化编辑、历史研究 |
选择建议:
- 临时改配置文件(1分钟搞定) → 选
nano:不用记任何模式,打开就改,底部快捷键提示直接用,新手零门槛。 - 服务器极简环境(没网装插件) → 选
vi或vim:系统默认预装,无需额外安装,满足基础编辑需求。 - 日常编程/高效编辑(长期使用) → 选
vim或Neovim:vim生态成熟,Neovim更现代(适合年轻人),支持代码补全、分屏等程序员刚需功能。 - 喜欢nano的简单,但想要更多功能 → 选
micro:保留nano的快捷键提示,新增语法高亮、多光标,不用学复杂模式。 - 不想学vim的模式,又想要高效编辑 → 选
Helix:现代设计,操作逻辑更直观,内置高级功能,无需复杂配置。 - 脚本自动化编辑(无交互) → 选
ed:纯命令行操作,可嵌入Shell脚本,无需人工干预编辑文件(日常用不到)。
如果是博客运维场景(编辑配置文件、脚本),优先
vim(服务器预装率高)或micro(新手友好+功能够用),Neovim适合想长期优化编辑体验的用户。
vim(vi) 基本操作命令
Vim 是 Linux 系统中非常强大的文本编辑器,掌握其基本命令对于高效编辑文本至关重要。以下是 Vim 中最常用的基本命令分类介绍:
一、进入与退出 Vim
vim 文件名:打开或创建一个文件并进入 Vim:q:退出 Vim(文件未修改时):q!:强制退出,不保存修改:w:保存当前文件:wq或ZZ:保存并退出:w 文件名:另存为指定文件
二、模式切换
Vim 有多种模式,最常用的三种:
- 正常模式(Normal mode):启动后默认进入,用于执行命令
- 插入模式(Insert mode):用于输入文本
i:在当前光标前插入I:在当前行开头插入a:在当前光标后插入A:在当前行末尾插入o:在当前行下方新建一行并插入O:在当前行上方新建一行并插入Esc:从插入模式返回正常模式
- 命令行模式(Command-line mode):输入冒号
:进入,用于执行保存、退出等命令
三、光标移动(正常模式)
- 方向键:上下左右移动光标
h、j、k、l:分别对应左、下、上、右移动w:移动到下一个单词开头b:移动到上一个单词开头e:移动到当前单词结尾0(数字零):移动到当前行开头$:移动到当前行结尾gg:跳转到文件开头G:跳转到文件结尾nG(n 是数字):跳转到第 n 行Ctrl+f:向下翻一页Ctrl+b:向上翻一页
四、文本编辑(正常模式)
x:删除当前光标所在字符dd:删除当前行ndd(n 是数字):删除从当前行开始的 n 行yy:复制当前行nyy(n 是数字):复制从当前行开始的 n 行p:在当前行下方粘贴复制/删除的内容P:在当前行上方粘贴复制/删除的内容u:撤销上一次操作Ctrl+r:重做(取消撤销)r:替换当前光标所在字符(输入 r 后再输入新字符)R:进入替换模式,连续替换多个字符(按 Esc 退出)
五、查找与替换(命令行模式)
/关键词:从当前位置向下查找关键词?关键词:从当前位置向上查找关键词n:继续查找下一个匹配项N:继续查找上一个匹配项:s/旧内容/新内容:替换当前行第一个匹配的旧内容为新内容:s/旧内容/新内容/g:替换当前行所有匹配的旧内容为新内容:%s/旧内容/新内容/g:替换整个文件所有匹配的旧内容为新内容:%s/旧内容/新内容/gc:替换整个文件所有匹配项,每次替换前询问确认
nano 基本命令
“nano” 是 Linux/macOS 系统中一款轻量、易用的命令行文本编辑器,特别适合快速编辑文件(如配置文件、代码片段、博客文章等),对程序员来说是服务器端编辑的常用工具。以下是 完整的使用指南,从基础操作到进阶技巧,结合一些开发/博客场景(如编辑 Jekyll 配置、Go 代码、Git 配置文件)详细说明:
一、核心前提:打开/创建文件
首先通过终端命令启动 nano 并指定文件,这是所有操作的起点:
1
2
3
4
5
6
7
8
9
10
# 1. 编辑已存在的文件(如 Jekyll 配置、Go 代码)
nano _config.yml # 编辑 Jekyll 博客配置文件
nano main.go # 编辑 Go 语言代码
nano ~/.gitconfig # 编辑 Git 全局配置
# 2. 创建并编辑新文件(如新建博客文章)
nano 2024-10-01-my-post.md # 新建 Markdown 博客文章
# 3. 带行号显示(编辑代码/配置时必备,方便定位)
nano -l main.go # -l 是 line numbers 的缩写,打开行号
启动后会进入 nano 编辑界面,底部会显示常用快捷键(^ 代表 Ctrl 键,M- 代表 Alt 键)。
二、基础编辑操作(和记事本一样简单)
进入编辑界面后,直接用键盘输入/修改内容即可,无需额外操作:
- 移动光标:用方向键(↑↓←→)移动,支持鼠标点击定位(部分系统需开启)。
- 输入/删除:直接打字输入,按
Backspace删除光标前字符,Delete删除光标后字符。 - 换行/缩进:按
Enter换行,按Tab缩进(编辑代码时推荐开启软缩进,见下文进阶技巧)。
三、核心快捷键(必记,底部提示对应)
nano 的操作全靠快捷键,以下是程序员最常用的核心功能,记住这几个就能满足 99% 需求:
| 快捷键 | 功能描述 | 场景举例 |
|---|---|---|
Ctrl + O |
保存文件(Write Out) | 编辑完配置/代码后保存 |
Ctrl + X |
退出 nano(Exit) | 保存后退出,未保存会提示是否保存 |
Ctrl + K |
剪切当前行(Cut) | 删除错误代码行、移动段落 |
Ctrl + U |
粘贴剪切的内容(Uncut) | 粘贴刚才剪切的行到指定位置 |
Ctrl + W |
搜索文本(Where Is) | 查找代码中的变量、配置中的关键字 |
Ctrl + \ |
替换文本(Replace) | 批量修改变量名、配置值 |
Ctrl + C |
显示当前光标位置(行号+列号) | 定位报错的代码行(如 Go 编译错误) |
Ctrl + G |
查看帮助文档(Get Help) | 忘记快捷键时临时查阅 |
快捷键使用示例:
- 搜索文本:编辑
main.go时想找func main(),按Ctrl + W,输入main()回车,按Alt + W跳转到下一个匹配项。 - 替换文本:想把所有
oldVar改成newVar,按Ctrl + \,输入原文本和替换文本,按Y确认单个替换,A确认全部替换。 - 保存退出:编辑完博客文章
2024-10-01-my-post.md,按Ctrl + O(底部提示输入文件名,直接回车确认),再按Ctrl + X退出。
四、进阶技巧(针对程序员/博客场景优化)
1. 编辑代码时开启行号+软缩进
编辑 Go/C++ 代码或 Jekyll 配置时,行号和统一缩进很重要,可通过命令参数或配置文件永久开启:
1
2
3
4
5
6
7
8
9
10
11
# 临时开启(单次编辑生效)
nano -l -T 4 main.go # -l 显示行号,-T 4 设 Tab 为 4 个空格(符合 Go 代码规范)
# 永久开启(所有编辑生效,推荐)
# 编辑 nano 配置文件
nano ~/.nanorc
# 在文件中添加以下内容,保存退出
set linenumbers # 显示行号
set tabsize 4 # Tab 缩进 4 空格
set softwrap # 自动换行(编辑长文本/代码时不横向滚动)
set autoindent # 自动缩进(换行时继承上一行缩进,写代码必备)
2. 编辑 Markdown 博客文章(优化排版)
用 nano 写 Jekyll 博客的 Markdown 文件时,可开启「自动换行」和「拼写检查」:
1
2
3
# 编辑 Markdown 时临时开启拼写检查
nano -S -w 2024-10-01-my-post.md # -S 开启拼写检查,-w 关闭自动换行(避免 Markdown 格式错乱)
# 拼写错误的单词会高亮,按 `Alt + N` 跳转到下一个错误,`Alt + R` 替换
3. 批量注释/取消注释代码
写 Go/C++ 代码时,批量注释多行代码(// 注释):
- 按
Alt + A进入「块选择模式」(底部提示Mark Set)。 - 用方向键(↑↓)选中需要注释的多行。
- 按
Ctrl + K剪切选中内容,粘贴到临时位置,或直接输入//批量添加注释。 - 取消注释同理:块选择后删除
//即可。
4. 恢复误删内容
如果不小心剪切(Ctrl + K)或删除了内容,按 Ctrl + U 可恢复(多次 Ctrl + U 可恢复多次剪切的内容);如果已退出 nano 未保存,可尝试查找 nano 的自动备份文件(默认在 /tmp 目录,文件名如 nano.save)。
五、常见问题(程序员踩坑指南)
- 无法保存文件(提示 Permission denied):
- 原因:编辑的文件没有写权限(如系统配置文件、其他用户的文件)。
- 解决:用
sudo运行 nano(仅信任的文件使用,避免误改系统文件):1
sudo nano /etc/nginx/nginx.conf # 编辑需要root权限的配置文件
- 编辑后格式错乱(如 Tab 变成 ^I):
- 原因:系统的 Tab 配置不一致,或 nano 未开启软缩进。
- 解决:在
~/.nanorc中添加set expandtab(将 Tab 转换为空格),再用-T 4指定缩进长度。
- 退出时提示「File exists, overwrite?」:
- 原因:保存时文件名已存在(如误输入了已有的文件名)。
- 解决:按
Y覆盖,N重新输入文件名,C取消保存。