文章

Linux相关

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.comcurl -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)按提示设置密钥参数

执行命令后会出现以下提示,按需求选择:

  1. 密钥保存路径:默认保存在 ~/.ssh/id_ed25519(Ed25519)或 ~/.ssh/id_rsa(RSA),直接按回车使用默认路径即可。

    若需自定义路径,输入路径后回车(例如 ~/.ssh/my_key)。

  2. 密钥密码(可选)

    • 直接按回车:不设置密码(方便但安全性略低)。

    • 输入密码并回车:设置密钥保护密码(每次使用密钥时需输入,更安全)

      (输入密码时终端无显示,正常输入即可)

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. 临时改配置文件(1分钟搞定) → 选 nano:不用记任何模式,打开就改,底部快捷键提示直接用,新手零门槛。
  2. 服务器极简环境(没网装插件) → 选 vivim:系统默认预装,无需额外安装,满足基础编辑需求。
  3. 日常编程/高效编辑(长期使用) → 选 vimNeovim:vim生态成熟,Neovim更现代(适合年轻人),支持代码补全、分屏等程序员刚需功能。
  4. 喜欢nano的简单,但想要更多功能 → 选 micro:保留nano的快捷键提示,新增语法高亮、多光标,不用学复杂模式。
  5. 不想学vim的模式,又想要高效编辑 → 选 Helix:现代设计,操作逻辑更直观,内置高级功能,无需复杂配置。
  6. 脚本自动化编辑(无交互) → 选 ed:纯命令行操作,可嵌入Shell脚本,无需人工干预编辑文件(日常用不到)。

如果是博客运维场景(编辑配置文件、脚本),优先 vim(服务器预装率高)或 micro(新手友好+功能够用),Neovim适合想长期优化编辑体验的用户。

vim(vi) 基本操作命令

Vim 是 Linux 系统中非常强大的文本编辑器,掌握其基本命令对于高效编辑文本至关重要。以下是 Vim 中最常用的基本命令分类介绍:

一、进入与退出 Vim

  • vim 文件名:打开或创建一个文件并进入 Vim
  • :q:退出 Vim(文件未修改时)
  • :q!:强制退出,不保存修改
  • :w:保存当前文件
  • :wqZZ:保存并退出
  • :w 文件名:另存为指定文件

二、模式切换

Vim 有多种模式,最常用的三种:

  • 正常模式(Normal mode):启动后默认进入,用于执行命令
  • 插入模式(Insert mode):用于输入文本
    • i:在当前光标前插入
    • I:在当前行开头插入
    • a:在当前光标后插入
    • A:在当前行末尾插入
    • o:在当前行下方新建一行并插入
    • O:在当前行上方新建一行并插入
    • Esc:从插入模式返回正常模式
  • 命令行模式(Command-line mode):输入冒号 : 进入,用于执行保存、退出等命令

三、光标移动(正常模式)

  • 方向键:上下左右移动光标
  • hjkl:分别对应左、下、上、右移动
  • 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) 忘记快捷键时临时查阅

快捷键使用示例:

  1. 搜索文本:编辑 main.go 时想找 func main(),按 Ctrl + W,输入 main() 回车,按 Alt + W 跳转到下一个匹配项。
  2. 替换文本:想把所有 oldVar 改成 newVar,按 Ctrl + \,输入原文本和替换文本,按 Y 确认单个替换,A 确认全部替换。
  3. 保存退出:编辑完博客文章 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++ 代码时,批量注释多行代码(// 注释):

  1. Alt + A 进入「块选择模式」(底部提示 Mark Set)。
  2. 用方向键(↑↓)选中需要注释的多行。
  3. Ctrl + K 剪切选中内容,粘贴到临时位置,或直接输入 // 批量添加注释。
  4. 取消注释同理:块选择后删除 // 即可。

4. 恢复误删内容

如果不小心剪切(Ctrl + K)或删除了内容,按 Ctrl + U 可恢复(多次 Ctrl + U 可恢复多次剪切的内容);如果已退出 nano 未保存,可尝试查找 nano 的自动备份文件(默认在 /tmp 目录,文件名如 nano.save)。

五、常见问题(程序员踩坑指南)

  1. 无法保存文件(提示 Permission denied)
    • 原因:编辑的文件没有写权限(如系统配置文件、其他用户的文件)。
    • 解决:用 sudo 运行 nano(仅信任的文件使用,避免误改系统文件):
      1
      
      sudo nano /etc/nginx/nginx.conf  # 编辑需要root权限的配置文件
      
  2. 编辑后格式错乱(如 Tab 变成 ^I)
    • 原因:系统的 Tab 配置不一致,或 nano 未开启软缩进。
    • 解决:在 ~/.nanorc 中添加 set expandtab(将 Tab 转换为空格),再用 -T 4 指定缩进长度。
  3. 退出时提示「File exists, overwrite?」
    • 原因:保存时文件名已存在(如误输入了已有的文件名)。
    • 解决:按 Y 覆盖,N 重新输入文件名,C 取消保存。
本文由作者按照 CC BY 4.0 进行授权